Пример #1
0
//獲取數據的接口
int NPC_Lua_Item_GetData(lua_State *_NLL)
{
	CheckEx(_NLL, 2);
	CheckItemIndexNull(_NLL, 1);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	int TM_Flg = (int)lua_tointeger(_NLL, 2);

	if(TM_Flg >= 0)
	{
		if(TM_Flg < LUA_DATALINE1)
		{
			TM_Flg -= LUA_DATALINE0;
			int TM_RetInt = API_ITEM_getInt(TM_Index, TM_Flg);
			LRetInt(_NLL, TM_RetInt);
		}else if(TM_Flg < LUA_DATALINE2)
		{
			TM_Flg -= LUA_DATALINE1;
			char *TM_RetPoint = API_ITEM_getChar(TM_Index, TM_Flg);
			LRetMsg(_NLL, TM_RetPoint);
		}else if(TM_Flg < LUA_DATALINE3)
		{
			TM_Flg -= LUA_DATALINE2;
			int TM_RetWorkInt = API_ITEM_getWorkInt(TM_Index, TM_Flg);
			LRetInt(_NLL, TM_RetWorkInt);
		}else
		{
			LRetErrNull(_NLL, "傳入的標誌是錯誤的。");
		}
	}
	LRetErrNull(_NLL, "傳入的標誌是錯誤的。");
}
Пример #2
0
int NPC_Lua_NLG_WatchEntry(lua_State *_NLL)
{
	CheckEx(_NLL, 2);
	CheckIndexNull(_NLL, 1);
	CheckIndexNull(_NLL, 2);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	int TM_ToIndex = (int)lua_tointeger(_NLL, 2);
	if(	BATTLE_WatchEntry(TM_Index, TM_ToIndex) == 0)
	{
		LRetInt(_NLL, 0);
	}else
	{
		LRetInt(_NLL, -1);
	}
}
Пример #3
0
int NPC_Lua_NLG_ShowWindowTalked(lua_State *_NLL)
{
	CheckEx2(_NLL, 5, 6);
	CheckIndexNull(_NLL, 1);
	int TM_Top = lua_gettop(_NLL);
	int TM_index = (int)lua_tointeger(_NLL, 1);
	int TM_windowtype = (int)lua_tointeger(_NLL, 2);
	int TM_buttontype = (int)lua_tointeger(_NLL, 3);
	int TM_seqno = (int)lua_tointeger(_NLL, 4);
	char *TM_data = lua_tostring(_NLL, 5);

	if(TM_data == NULL)
	{
		LRetErrInt(_NLL , -1, "对话框内容不能为nil");
	}

	int TM_MeIndex = -1;
	int TM_fd = getfdFromCharaIndex(TM_index);

	if(TM_Top == 6)
	{
		CheckIndexNull(_NLL, 6);
		TM_MeIndex = (int)lua_tointeger(_NLL, 6);
	}

	lssproto_WN_send(TM_fd, TM_windowtype, TM_buttontype, TM_seqno, CHAR_getWorkInt( TM_MeIndex, CHAR_WORKOBJINDEX), TM_data);
	LRetInt(_NLL, 0);
}
Пример #4
0
int NPC_Lua_NLG_GiveItem(lua_State *_NLL)
{
	CheckEx2(_NLL, 2, 3);
	CheckIndexNull(_NLL, 1);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	int TM_ItemId = (int)lua_tointeger(_NLL, 2);
	int TM_Num = 1;
	int TM_ItemIndex = -1;
	int TM_Int = -1;
	int TM_Count = 0;

	if(lua_gettop(_NLL) == 3)
	{
		TM_Num = (int)lua_tointeger(_NLL, 3);
	}
	int i = 0;
	for(i = 0; i < TM_Num; i++)
	{
		TM_Int = NPC_GiveItem( TM_Index, TM_ItemId);
		if(TM_Int < 0)
		{
			break;
		}
		TM_ItemIndex = TM_Int;
		TM_Count++;
	}
	if(TM_Count > 0)
	{
		char TM_Buff[128];
		snprintf(TM_Buff, sizeof(TM_Buff), "获得 %d 个 %s。", TM_Count, ITEM_getChar( TM_ItemIndex, ITEM_NAME));
		CHAR_talkToCli( TM_Index, -1, TM_Buff, CHAR_COLORYELLOW);
	}
	LRetInt(_NLL, TM_Count);
}
Пример #5
0
int NPC_Lua_NLG_DelHaveIndexPet(lua_State *_NLL)
{
	CheckEx(_NLL, 2);
	CheckIndexNull(_NLL, 1);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	int TM_PetHaveIndex = (int)lua_tointeger(_NLL, 2);
	int TM_Num = 1;
	int TM_PetIndex = -1;
	int TM_Ret = 0;
	
	if(TM_PetHaveIndex<0 || TM_PetHaveIndex>4){
		LRetErrInt(_NLL, -1, "传入的索引是无效的。");
	}
		TM_PetIndex = CHAR_getCharPet( TM_Index, TM_PetHaveIndex);
		
		if(!CHAR_CHECKINDEX(TM_PetIndex))
		{
			LRetErrInt(_NLL, -1, "传入的索引是无效的。");
		}

		TM_Ret = NPC_DelPet( TM_Index, TM_PetHaveIndex);
		if(TM_Ret < 0)
		{
			char TM_MsgBuff[128];
			snprintf(TM_MsgBuff, sizeof(TM_MsgBuff), "删除宠物时产生错误 错误号: %d。", TM_Ret);
			LRetErrInt(_NLL , -1, TM_MsgBuff);
		}

	LRetInt(_NLL, 1);
}
Пример #6
0
int NPC_Lua_NLG_SearchWatchBattleRandIndex(lua_State *_NLL)
{
	CheckEx(_NLL, 2);
	CheckIndexNull(_NLL, 1);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	int TM_Floor = (int)lua_tointeger(_NLL, 2);
	int TM_Ret = -1;

	if( (CHAR_getInt( TM_Index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER) ){
		LRetErrInt(_NLL, -1, "对象类型不是玩家");
	}
	if( (CHAR_getWorkInt( TM_Index, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) )
	{
		LRetErrInt(_NLL, -2, "对象正在对战中");
	}
	if( CHAR_getWorkInt( TM_Index, CHAR_WORKPARTYMODE ) == CHAR_PARTY_CLIENT )
	{
		int TM_Index2 = CHAR_getWorkInt( TM_Index, CHAR_WORKPARTYINDEX1 );

		if( TM_Index2 < 0 )
		{
			LRetErrInt(_NLL, -3, "对象的队伍异常");
		}
	}
	TM_Ret = SearchFmWarRandIndex(TM_Index, TM_Floor);
	if(TM_Ret != 0)
	{
		char TM_Buff[64];
		snprintf(TM_Buff, sizeof(TM_Buff), "无战斗可看!错误号:%d", TM_Floor);
		LRetErrInt(_NLL, -4, TM_Buff);
	}
	LRetInt(_NLL, TM_Ret);
}
Пример #7
0
int NPC_Lua_NL_DelNpc(lua_State *_NLL)
{
	CheckEx(_NLL, 1);
	CheckIndexNull(_NLL, 1);
	int TM_index = (int)lua_tointeger(_NLL, 1);
	int TM_Ret = NPC_Lua_Del(TM_index);
	LRetInt(_NLL, TM_Ret);
}
Пример #8
0
int NPC_Lua_NLG_TalkToFloor(lua_State *_NLL)
{
	CheckEx2(_NLL, 2, 5);
	
	int TM_Top = lua_gettop(_NLL);
	int TM_floor = (int)lua_tointeger(_NLL, 1);
	char *TM_Msg = lua_tostring(_NLL, 2);
	if(TM_Msg == NULL)
	{
		LRetErrInt(_NLL , -1, "说话内容不能为nil。");
	}

	int TM_color = CHAR_COLORWHITE;
	int TM_fontsize = 0;
	int TM_Talkindex = -1;

	if(TM_Top >= 3)
	{
		TM_color = (int)lua_tointeger(_NLL, 3);
	}
	if(TM_Top >= 4)
	{
		TM_fontsize = (int)lua_tointeger(_NLL, 4);
	}
	if(TM_Top == 5)
	{
		CheckIndexNull(_NLL, 5);
		TM_Talkindex = (int)lua_tointeger(_NLL, 5);
	}
	//指定地图说话
	BOOL TM_Ret = FALSE;
	int TM_playernum = CHAR_getPlayerMaxNum();
	int i = 0;

	for( i = 0 ; i < TM_playernum ; i++)
	{
		if( CHAR_getCharUse(i) != FALSE )
		{
			if (CHAR_getInt(i, CHAR_FLOOR) == TM_floor)
			{
			#ifdef _FONT_SIZE
				TM_Ret |= CHAR_talkToCliExt( i, TM_Talkindex, TM_Msg, TM_color, TM_fontsize);
			#else
				TM_Ret |= CHAR_talkToCli( i, TM_Talkindex, TM_Msg, TM_color);
			#endif
				
			}
		}
	}

	if(TM_Ret == TRUE)
	{
		LRetInt(_NLL, 0);
	}else
	{
		LRetErrInt(_NLL , -2, "未知原因导致发送说话失败。");
	}
}
Пример #9
0
int NPC_Lua_NLG_GiveOneItem(lua_State *_NLL)
{
	CheckEx(_NLL, 2);
	CheckIndexNull(_NLL, 1);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	int TM_ItemId = (int)lua_tointeger(_NLL, 2);
	int TM_Num = 1;
	int TM_ItemIndex = -1;

		TM_ItemIndex = NPC_GiveItem( TM_Index, TM_ItemId);
	if(TM_ItemIndex >= 0)
	{
		char TM_Buff[128];
		snprintf(TM_Buff, sizeof(TM_Buff), "获得 1 个 %s。", ITEM_getChar( TM_ItemIndex, ITEM_NAME));
		CHAR_talkToCli( TM_Index, -1, TM_Buff, CHAR_COLORYELLOW);
	}else{
		LRetInt(_NLL, -1);
	}
	LRetInt(_NLL, TM_ItemIndex);
}
Пример #10
0
int NPC_Lua_NLG_CheckObj(lua_State *_NLL)
{
	CheckEx(_NLL, 3);
	int TM_Floor = (int)lua_tointeger(_NLL, 1);
	int TM_X = (int)lua_tointeger(_NLL, 2);
	int TM_Y = (int)lua_tointeger(_NLL, 3);
	int TM_ObjIndex = -1;
	OBJECT TM_Object = NULL;
	
	for( TM_Object = MAP_getTopObj( TM_Floor, TM_X, TM_Y) ; TM_Object != NULL ; TM_Object = NEXT_OBJECT(TM_Object))
	{
		TM_ObjIndex = GET_OBJINDEX(TM_Object);
		if( !CHECKOBJECTUSE(TM_ObjIndex) )
		{
			continue;
		}
		LRetInt(_NLL, 1);
	}
	LRetInt(_NLL, 0);
}
Пример #11
0
int NPC_Lua_NLG_CheckPlayIndex(lua_State *_NLL)
{
	CheckEx(_NLL, 1);
	CheckIndexNull(_NLL, 1);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	if(!CHAR_CHECKINDEX(TM_Index))
	{
		LRetErrInt(_NLL, -1, "传入的索引是无效的。");
	}
	LRetInt(_NLL, TM_Index);
}
Пример #12
0
int NPC_Lua_NLG_Save(lua_State *_NLL)
{
	CheckEx(_NLL, 1);
	CheckIndexNull(_NLL, 1);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	if(!CHAR_CHECKINDEX(TM_Index))
	{
		LRetErrInt(_NLL, -1, "传入的索引是无效的。");
	}
	CHAR_charSaveFromConnect(TM_Index, FALSE);
	LRetInt(_NLL, TM_Index);
}
Пример #13
0
//設置數據的接口
int NPC_Lua_Item_SetData(lua_State *_NLL)
{
	CheckEx(_NLL, 3);
	CheckItemIndexNull(_NLL, 1);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	int TM_Flg = (int)lua_tointeger(_NLL, 2);

	if(TM_Flg >= 0)
	{
		if(TM_Flg < LUA_DATALINE1)
		{
			TM_Flg -= LUA_DATALINE0;
			int TM_IntVal = (int)lua_tointeger(_NLL, 3);
			int TM_RetInt = API_ITEM_setInt(TM_Index, TM_Flg, TM_IntVal);
			LRetInt(_NLL, TM_RetInt);
		}else if(TM_Flg < LUA_DATALINE2)
		{
			TM_Flg -= LUA_DATALINE1;
			char *TM_CharPoint = (char *)lua_tostring(_NLL, 3);
			BOOL TM_RetBOOL = API_ITEM_setChar(TM_Index, TM_Flg, TM_CharPoint);
			LRetBool(_NLL, TM_RetBOOL);
		}else if(TM_Flg < LUA_DATALINE3)
		{
			TM_Flg -= LUA_DATALINE2;
			//if(TM_Flg == ITEM_WORKOBJINDEX || TM_Flg == ITEM_WORKCHARAINDEX)
			if(TM_Flg == 0 )
			{
				LRetInt(_NLL, 0);
			}
			int TM_WorkIntVal = (int)lua_tointeger(_NLL, 3);
			int TM_RetInt = API_ITEM_setWorkInt(TM_Index, TM_Flg, TM_WorkIntVal);
			LRetInt(_NLL, TM_RetInt);
		}else
		{
			LRetErrNull(_NLL, "傳入的標誌是錯誤的。");
		}
	}
	LRetErrNull(_NLL, "傳入的標誌是錯誤的。");
}
Пример #14
0
int NPC_Lua_NLG_WalkMove(lua_State *_NLL)
{
	CheckEx(_NLL, 2);
	CheckIndexNull(_NLL, 1);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	int TM_DIR = (int)lua_tointeger(_NLL, 2);

	POINT	start, end;
	
	end.x = CHAR_getInt( TM_Index, CHAR_X);
	end.y = CHAR_getInt( TM_Index, CHAR_Y);

	int TM_Ret = (int)CHAR_walk(TM_Index, TM_DIR, 0);

	if( TM_Ret == CHAR_WALKSUCCESSED )
	{
		int	i;
		int	mefl=CHAR_getInt( TM_Index, CHAR_FLOOR);
		int toindex = -1;
		int fl = 0;
		int xx = 0;
		int yy = 0;
		int	parent_dir;
	
		for( i = 1; i < CHAR_PARTYMAX; i ++ )
		{
			toindex = CHAR_getWorkInt( TM_Index, i + CHAR_WORKPARTYINDEX1);
			fl = CHAR_getInt( toindex, CHAR_FLOOR);
			xx = CHAR_getInt( toindex, CHAR_X);
			yy = CHAR_getInt( toindex, CHAR_Y);

			if( CHAR_CHECKINDEX(toindex) && (mefl==fl) && (abs(xx-end.x)+abs(yy-end.y)<10) )
			{

				start.x = xx;
				start.y = yy;
				parent_dir = NPC_Util_getDirFromTwoPoint( &start,&end );

				end.x = start.x;
				end.y = start.y;

				if( parent_dir != -1 )
				{
					CHAR_walk( toindex, parent_dir, 0);
				}
			}
		}
	}
	LRetInt(_NLL, TM_Ret);
}
Пример #15
0
int NPC_Lua_NLG_SetAction(lua_State *_NLL)
{
	CheckEx(_NLL, 2);
	CheckIndexNull(_NLL, 1);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	int TM_Action = (int)lua_tointeger(_NLL, 2);

	if(!CHAR_CHECKINDEX(TM_Index))
	{
		LRetErrInt(_NLL, -1, "传入的索引是无效的。");
	}

	CHAR_sendWatchEvent( CHAR_getWorkInt( TM_Index, CHAR_WORKOBJINDEX),	TM_Action, NULL, 0,TRUE);
	CHAR_setWorkInt( TM_Index, CHAR_WORKACTION, TM_Action);

	LRetInt(_NLL, 0);
}
Пример #16
0
int NPC_Lua_NLG_DelPet(lua_State *_NLL)
{
	CheckEx2(_NLL, 2, 3);
	CheckIndexNull(_NLL, 1);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	int TM_PetID = (int)lua_tointeger(_NLL, 2);
	int TM_Num = 1;
	int TM_PetIndex = -1;
	int TM_Ret = 0;
	int TM_Count = 0;

	if(lua_gettop(_NLL) == 3)
	{
		TM_Num = (int)lua_tointeger(_NLL, 3);
	}
	int i = 0;
	for(i = 0; i < CHAR_MAXPETHAVE ; i++)
	{
		TM_PetIndex = CHAR_getCharPet( TM_Index, i);
		
		if(!CHAR_CHECKINDEX(TM_PetIndex))
		{
			continue;
		}
		if(CHAR_getInt( TM_PetIndex, CHAR_PETID) != TM_PetID)
		{
			continue;
		}

		TM_Ret = NPC_DelPet( TM_Index, i);
		if(TM_Ret < 0)
		{
			char TM_MsgBuff[128];
			snprintf(TM_MsgBuff, sizeof(TM_MsgBuff), "删除宠物时产生错误 错误号: %d。", TM_Ret);
			LRetErrInt(_NLL , -1, TM_MsgBuff);
		}

		TM_Count++;
		if(TM_Count == TM_Num)
		{
			break;
		}
	}
	LRetInt(_NLL, TM_Count);
}
Пример #17
0
int NPC_Lua_NLG_GivePet(lua_State *_NLL)
{
	CheckEx2(_NLL, 2, 4);
	CheckIndexNull(_NLL, 1);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	int TM_EnemyId = (int)lua_tointeger(_NLL, 2);
	int TM_Level = -1;
	int TM_Num = 1;
	int TM_Count = 0;
	int TM_PetIndex = -1;
	int TM_Int = -1;

	if(lua_gettop(_NLL) >= 3)
	{
		TM_Level = (int)lua_tointeger(_NLL, 3);
	}
	
	if(lua_gettop(_NLL) == 4)
	{
		TM_Num = (int)lua_tointeger(_NLL, 4);
	}
	if(TM_Num <= 0)
	{
		LRetErrInt(_NLL, -1, "给予数量不能少于等于0。");
	}
	int i = 0;
	for(i = 0; i < TM_Num; i++)
	{
		TM_Int = NPC_GivePet(TM_Index, TM_Level, TM_EnemyId);
		if(TM_Int < 0)
		{
			break;
		}
		TM_PetIndex = TM_Int;
		TM_Count++;
	}
	if(TM_Count > 0)
	{
		char TM_Buff[128];
		snprintf(TM_Buff, sizeof(TM_Buff), "获得 %d 只 %s。", TM_Count, CHAR_getChar( TM_PetIndex, CHAR_NAME));
		CHAR_talkToCli( TM_Index, -1, TM_Buff, CHAR_COLORYELLOW);
	}
	LRetInt(_NLL, TM_Count);
}
Пример #18
0
int NPC_Lua_NLG_CreateBattlePvP(lua_State *_NLL)
{
	CheckEx(_NLL, 2);
	CheckIndexNull(_NLL, 1);
	CheckIndexNull(_NLL, 2);
	int TM_Index1 = (int)lua_tointeger(_NLL, 1);
	int TM_Index2 = (int)lua_tointeger(_NLL, 2);
	int TM_Ret = -1;
	int TM_BattleIndex = -1;

	if( (CHAR_getInt( TM_Index2, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER) || (CHAR_getInt( TM_Index1, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER)){
		LRetErrInt(_NLL, -1, "对象类型不是玩家");
	}
	if( (CHAR_getWorkInt( TM_Index2, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) || (CHAR_getWorkInt( TM_Index1, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE))
	{
		LRetErrInt(_NLL, -2, "对象正在对战中");
	}
	if( CHAR_getWorkInt( TM_Index2, CHAR_WORKPARTYMODE ) == CHAR_PARTY_CLIENT )
	{
		int TM_Index = CHAR_getWorkInt( TM_Index2, CHAR_WORKPARTYINDEX1 );

		if( TM_Index < 0 )
		{
			LRetErrInt(_NLL, -3, "对象的队伍异常");
		}
	}
	if( CHAR_getWorkInt( TM_Index1, CHAR_WORKPARTYMODE ) == CHAR_PARTY_CLIENT )
	{
		int TM_Index = CHAR_getWorkInt( TM_Index1, CHAR_WORKPARTYINDEX1 );

		if( TM_Index < 0 )
		{
			LRetErrInt(_NLL, -3, "对象的队伍异常");
		}
	}
	TM_Ret = NPC_Lua_CreateVsPlayer(&TM_BattleIndex, TM_Index1, TM_Index2);
	if(TM_Ret != 0)
	{
		char TM_Buff[64];
		snprintf(TM_Buff, sizeof(TM_Buff), "遭遇失败!错误号:%d", TM_Ret);
		LRetErrInt(_NLL, -4, TM_Buff);
	}
	LRetInt(_NLL, TM_BattleIndex);
}
Пример #19
0
//更新道具數據的接口
int NPC_Lua_Item_UpItem(lua_State *_NLL)
{
	CheckEx(_NLL, 2);
	CheckItemIndexNull(_NLL, 1);
	int TM_CharaIndex = (int)lua_tointeger(_NLL, 1);
	int TM_CharaPtr = API_GetCharaPtrFromCharaIndex(TM_CharaIndex);
	int TM_Pos = (int)lua_tointeger(_NLL, 2);

	if(!API_CHAR_CheckCharPointer(TM_CharaPtr))
	{
		LRetErrInt(_NLL, -1, "傳入的對象索引是無效的。");
	}
	
	if(TM_Pos >= 0 && TM_Pos<=27)
	{
		API_CHAR_sendItemDataOne(TM_CharaPtr, TM_Pos);
		LRetInt(_NLL, 0);
	}
	
	LRetErrInt(_NLL, -2, "傳入的道具位置是錯誤的。");
}
Пример #20
0
int NPC_Lua_NLG_UpStateBySecond(lua_State *_NLL)
{
	CheckEx2(_NLL, 1, 3);
	CheckIndexNull(_NLL, 1);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	
	if(!CHAR_CHECKINDEX(TM_Index))
	{
		LRetErrInt(_NLL, -1, "传入的索引是无效的。");
	}

	char TM_Buff[128];
	int TM_fd = getfdFromCharaIndex(TM_Index);
#ifdef _SAF_MAKE
	snprintf(TM_Buff, sizeof(TM_Buff), "FAME|%d|%d|%d", CHAR_getInt(TM_Index,CHAR_FAME)/100, (int)lua_tointeger(_NLL, 2), (int)lua_tointeger(_NLL, 3));
#else
	snprintf(TM_Buff, sizeof(TM_Buff), "FAME|%d", CHAR_getInt(TM_Index,CHAR_FAME)/100);
#endif
	lssproto_S2_send(TM_fd,TM_Buff);
	LRetInt(_NLL, 0);
}
Пример #21
0
int NPC_Lua_NLG_GetMaxPlayNum(lua_State *_NLL)
{
	int TM_playernum = CHAR_getPlayerMaxNum();
	LRetInt(_NLL, TM_playernum);
}
Пример #22
0
int NPC_Lua_Char_GetOnLinePlayer(lua_State *_NLL)
{
	CheckEx(_NLL, 0);
	LRetInt(_NLL, abs(StateTable[LOGIN]));
}
Пример #23
0
int NPC_Lua_NLG_GiveRandItem(lua_State *_NLL)
{
	CheckEx2(_NLL, 2, 3);
	CheckIndexNull(_NLL, 1);
	int TM_Index = (int)lua_tointeger(_NLL, 1);
	char *TM_ItemIdData = lua_tostring(_NLL, 2);
	int TM_Num = 1;
	int TM_ItemIndex = -1;
	int TM_Int = -1;
	int TM_Type = 0;
	int TM_ItemId = -1;
	if(lua_gettop(_NLL) == 3)
	{
		TM_Type = (int)lua_tointeger(_NLL, 3);
	}
	int TM_ItemIdStart = -1;
	int TM_ItemIdEnd = -1;
	char ItemIdBuf[32];
	if(getStringFromIndexWithDelim(TM_ItemIdData,",", 2, ItemIdBuf, sizeof(ItemIdBuf)) != FALSE){
		int TM_ItemNum = 0;
		while(1){
			if(getStringFromIndexWithDelim(TM_ItemIdData,",", TM_ItemNum+1, ItemIdBuf, sizeof(ItemIdBuf)) == FALSE)
				break;
			TM_ItemNum++;
		}
		TM_ItemNum = RAND(1,TM_ItemNum);
		getStringFromIndexWithDelim(TM_ItemIdData,",", TM_ItemNum, ItemIdBuf, sizeof(ItemIdBuf));
		char ItemIdBuf2[16];
		if( getStringFromIndexWithDelim(ItemIdBuf,"-", 2, ItemIdBuf2, sizeof(ItemIdBuf2)) != FALSE){
			int TM_ItemIdStart,TM_ItemIdEnd;
			getStringFromIndexWithDelim(ItemIdBuf,"-", 1, ItemIdBuf2, sizeof(ItemIdBuf2));
			TM_ItemIdStart = atoi(ItemIdBuf2);
			getStringFromIndexWithDelim(ItemIdBuf,"-", 2, ItemIdBuf2, sizeof(ItemIdBuf2));
			TM_ItemIdEnd = atoi(ItemIdBuf2);
			TM_ItemId = RAND(TM_ItemIdStart,TM_ItemIdEnd);
		}else{
			TM_ItemId = atoi(ItemIdBuf);
		}
	}else if(getStringFromIndexWithDelim(TM_ItemIdData,"-", 2, ItemIdBuf, sizeof(ItemIdBuf)) != FALSE){
		if(getStringFromIndexWithDelim(TM_ItemIdData,"-", 1, ItemIdBuf, sizeof(ItemIdBuf)) != FALSE)
			TM_ItemIdStart = atoi(ItemIdBuf);
		if(getStringFromIndexWithDelim(TM_ItemIdData,"-", 2, ItemIdBuf, sizeof(ItemIdBuf)) != FALSE)
			TM_ItemIdEnd = atoi(ItemIdBuf);
		if(TM_ItemIdStart<=TM_ItemIdEnd){
			TM_ItemId = RAND(TM_ItemIdStart,TM_ItemIdEnd);
		}
	}else{
		TM_ItemId = atoi(TM_ItemIdData);
	}
	if(TM_ItemId>-1){
		TM_Int = NPC_GiveItem( TM_Index, TM_ItemId);
	}
	if(TM_Int>=0){
		char TM_Buff[256];
		snprintf(TM_Buff, sizeof(TM_Buff), "获得 %s。", ITEM_getChar( TM_Int, ITEM_NAME));
		CHAR_talkToCli( TM_Index, -1, TM_Buff, CHAR_COLORYELLOW);
		if(TM_Type>0){
			time_t timep;
			struct tm *p;
			time(&timep);
			p=localtime(&timep);
			timep = mktime(p);
			TM_Type = timep + TM_Type;
			ITEM_setInt(TM_Int,ITEM_TIME,TM_Type);
			sprintf(TM_Buff,"[限时]%s",ITEM_getChar(TM_Int,ITEM_NAME));
			ITEM_setChar(TM_Int,ITEM_NAME,TM_Buff);
			ITEM_setChar(TM_Int,ITEM_SECRETNAME,TM_Buff);
			CHAR_sendStatusString(TM_Index,"I");
//			timep = TM_Type;
//			p=localtime(&timep);
//			int year=1900+p->tm_year;
//			int mon=1+p->tm_mon;
//			int date=p->tm_mday;
//			int hour=p->tm_hour;
//			int min=p->tm_min;
//			int sec=p->tm_sec;
//			char monbuf[5],datebuf[5],hourbuf[5],minbuf[5],secbuf[5];
//			if(mon<10) sprintf(monbuf,"0%d",mon);
//			else sprintf(monbuf,"%d",mon);
//			if(date<10) sprintf(datebuf,"0%d",date);
//			else sprintf(datebuf,"%d",date);
//			if(hour<10) sprintf(hourbuf,"0%d",hour);
//			else sprintf(hourbuf,"%d",hour);
//			if(min<10) sprintf(minbuf,"0%d",min);
//			else sprintf(minbuf,"%d",min);
//			if(sec<10) sprintf(secbuf,"0%d",sec);
//			else sprintf(secbuf,"%d",sec);
//			sprintf(TM_Buff,"有效期:%d.%s.%s/%s:%s:%s  %s",year,monbuf,datebuf,hourbuf,minbuf,secbuf,ITEM_getChar(TM_Int,ITEM_EFFECTSTRING));
//			ITEM_setChar(TM_Int,ITEM_EFFECTSTRING,TM_Buff);
		}
	}
	LRetInt(_NLL, TM_Int);
}
Пример #24
0
int NPC_Lua_NLG_CreateBattle(lua_State *_NLL)
{
	CheckEx2(_NLL, 2, 7);
	CheckIndexNull(_NLL, 1);
	CheckIndexNull(_NLL, 2);
	int TM_Top = lua_gettop(_NLL);
	int TM_i = 0;
	int TM_Flg = 0;

	CREATEENEMY TM_CreateEnemy[BATTLE_ENTRY_MAX];
	int TM_ArLen = 0;

	memset(&TM_CreateEnemy, NULL, sizeof(TM_CreateEnemy));

	int TM_CharIndex = (int)lua_tointeger(_NLL, 1);
	int TM_NpcIndex = (int)lua_tointeger(_NLL, 2);
	char *TM_DoFunc = NULL;

	if(TM_Top >= 3)
	{
		TM_DoFunc = lua_tostring(_NLL, 3);
	}

	if(TM_Top >= 5)
	{
		TM_ArLen = luaL_getn(_NLL, 5);
		TM_ArLen = min(TM_ArLen, BATTLE_ENTRY_MAX);
		for(TM_i = 1; TM_i <= TM_ArLen; TM_i++)
		{
			lua_rawgeti(_NLL, 5, TM_i);
			TM_CreateEnemy[TM_i - 1].BaseLevel = (int)lua_tointeger(_NLL, -1);
			lua_pop(_NLL, 1);
		}
	}
	
	if(TM_Top >= 6)
	{
		TM_ArLen = luaL_getn(_NLL, 6);
		TM_ArLen = min(TM_ArLen, BATTLE_ENTRY_MAX);
		for(TM_i = 1; TM_i <= TM_ArLen; TM_i++)
		{
			lua_rawgeti(_NLL, 6, TM_i);
			TM_CreateEnemy[TM_i - 1].SkillType = (int)lua_tointeger(_NLL, -1);
			lua_pop(_NLL, 1);
		}
	}
	if(TM_Top >= 7)
	{
		TM_Flg = (int)lua_tointeger(_NLL, 7);
	}
//这个要放在最后
	if(TM_Top >= 4)
	{
		TM_ArLen = luaL_getn(_NLL, 4);
		TM_ArLen = min(TM_ArLen, BATTLE_ENTRY_MAX);
		for(TM_i = 1; TM_i <= TM_ArLen; TM_i++)
		{
			lua_rawgeti(_NLL, 4, TM_i);
			TM_CreateEnemy[TM_i - 1].EnemyId = ENEMY_getEnemyArrayFromId((int)lua_tointeger(_NLL, -1));
			lua_pop(_NLL, 1);
		}
	}
//然后再调用创建战斗的函数
	int TM_Ret = NPC_Lua_CreateVsEnemy(_NLL, TM_CharIndex, TM_NpcIndex, TM_DoFunc, &TM_CreateEnemy, TM_ArLen, TM_Flg);
//返回负数表示失败
	LRetInt(_NLL, TM_Ret);
}