//獲取數據的接口 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_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); }
// 检测数据 bool CArcossCache::Check( int id ) { if ( ! CheckEx( id ) ) { return false; } serialize( id ) ; return true ; }
int NPC_Lua_NLG_Update_Party(lua_State *_NLL) { CheckEx(_NLL, 2); CheckIndexNull(_NLL, 1); int TM_Index = (int)lua_tointeger(_NLL, 1); int TM_Flg = (int)lua_tointeger(_NLL, 2); CHAR_PartyUpdate(TM_Index, TM_Flg); LRetNull(_NLL); }
int NPC_Lua_NLG_UpStateByThird(lua_State *_NLL) { CheckEx(_NLL, 2); CheckIndexNull(_NLL, 1); int TM_Index = (int)lua_tointeger(_NLL, 1); int TM_Flg = (int)lua_tointeger(_NLL, 2); BOOL TM_Ret = CHAR_send_P_StatusString(TM_Index, TM_Flg); LRetBool(_NLL, TM_Ret); }
int NPC_Lua_NLG_CharLook(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); CHAR_Look(TM_Index, TM_DIR); LRetNull(_NLL); }
int NPC_Lua_NLG_DischargeParty(lua_State *_NLL) { CheckEx(_NLL, 1); CheckIndexNull(_NLL, 1); int TM_index = (int)lua_tointeger(_NLL, 1); BOOL TM_Ret = CHAR_DischargeParty( TM_index, 0); LRetBool(_NLL, TM_Ret); }
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_NLG_Warp(lua_State *_NLL) { CheckEx(_NLL, 4); CheckIndexNull(_NLL, 1); int TM_Index = (int)lua_tointeger(_NLL, 1); int TM_Floor = (int)lua_tointeger(_NLL, 2); int TM_X = (int)lua_tointeger(_NLL, 3); int TM_Y = (int)lua_tointeger(_NLL, 4); BOOL TM_Ret = CHAR_warpToSpecificPoint(TM_Index, TM_Floor, TM_X, TM_Y); LRetBool(_NLL, TM_Ret); }
////////////////////////////////////////////////////////////////////////////// //功能接口 int NPC_Lua_NLG_CheckInFront(lua_State *_NLL) { CheckEx(_NLL, 3); CheckIndexNull(_NLL, 1); CheckIndexNull(_NLL, 2); int TM_SurIndex = (int)lua_tointeger(_NLL, 1); int TM_DesIndex = (int)lua_tointeger(_NLL, 2); int TM_Distance = (int)lua_tointeger(_NLL, 3); BOOL TM_Ret = NPC_Util_charIsInFrontOfChar(TM_SurIndex, TM_DesIndex, TM_Distance); LRetBool(_NLL, TM_Ret); }
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_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_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_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_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_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_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_UpChar(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_complianceParameter( TM_Index ); if(CHAR_getInt(TM_Index,CHAR_WHICHTYPE)==CHAR_TYPEPET){ int playindex = CHAR_getWorkInt(TM_Index,CHAR_WORKPLAYERINDEX); if(!CHAR_CHECKINDEX(playindex)){ LRetErrInt(_NLL, -1, "传入的索引是无效的。"); }else{ int i; for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) { int workindex = CHAR_getCharPet( playindex, i ); if( workindex == TM_Index ){ CHAR_send_K_StatusString( playindex, i, CHAR_K_STRING_BASEIMAGENUMBER| CHAR_K_STRING_HP| CHAR_K_STRING_MAXHP| CHAR_K_STRING_MP| CHAR_K_STRING_MAXMP| CHAR_K_STRING_EXP| CHAR_K_STRING_NEXTEXP| CHAR_K_STRING_LV| CHAR_K_STRING_ATK| CHAR_K_STRING_DEF| CHAR_K_STRING_QUICK| CHAR_K_STRING_AI| CHAR_K_STRING_EARTH| CHAR_K_STRING_WATER| CHAR_K_STRING_FIRE| CHAR_K_STRING_WIND| CHAR_K_STRING_SLOT| CHAR_K_STRING_CHANGENAMEFLG| CHAR_K_STRING_NAME| CHAR_K_STRING_USERPETNAME); char msgbuf[128]; snprintf( msgbuf, sizeof( msgbuf ), "W%d",i); CHAR_sendStatusString( playindex, msgbuf ); CHAR_sendStatusString( playindex, "P"); break; } } } }else if(CHAR_getInt(TM_Index,CHAR_WHICHTYPE)==CHAR_TYPEPLAYER){ CHAR_send_P_StatusString( TM_Index, CHAR_P_STRING_GOLD ); } if(CHAR_getFlg(TM_Index, CHAR_ISVISIBLE) == FALSE) { int TM_objindex = CHAR_getWorkInt(TM_Index,CHAR_WORKOBJINDEX); CHAR_sendCDArroundChar ( OBJECT_getFloor(TM_objindex), OBJECT_getX(TM_objindex), OBJECT_getY(TM_objindex), TM_objindex ); }else { CHAR_sendCToArroundCharacter( CHAR_getWorkInt( TM_Index , CHAR_WORKOBJINDEX )); } LRetNull(_NLL); }
int NPC_Lua_NL_GetErrorStr(lua_State *_NLL) { CheckEx(_NLL, 0); LRetMsg(_NLL, M_OutErrMsg); }
int NPC_Lua_Char_GetOnLinePlayer(lua_State *_NLL) { CheckEx(_NLL, 0); LRetInt(_NLL, abs(StateTable[LOGIN])); }