//獲取數據的接口 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, "傳入的標誌是錯誤的。"); }
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); } }
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); }
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); }
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); }
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); }
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); }
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, "未知原因导致发送说话失败。"); } }
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); }
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); }
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); }
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); }
//設置數據的接口 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, "傳入的標誌是錯誤的。"); }
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); }
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); }
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); }
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); }
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); }
//更新道具數據的接口 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, "傳入的道具位置是錯誤的。"); }
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); }
int NPC_Lua_NLG_GetMaxPlayNum(lua_State *_NLL) { int TM_playernum = CHAR_getPlayerMaxNum(); LRetInt(_NLL, TM_playernum); }
int NPC_Lua_Char_GetOnLinePlayer(lua_State *_NLL) { CheckEx(_NLL, 0); LRetInt(_NLL, abs(StateTable[LOGIN])); }
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); }
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); }