stoneage8.5/石器时代服务器端最新完整源代码/Serv/gmsv/npc_lua/npc_lua_battle.c
anson1788 a5b185b7ef Revert "re upload"
This reverts commit 274b7d169c.
2020-06-23 15:23:51 +08:00

604 lines
13 KiB
C

#include "npc_lua.h"
#include "util.h"
#include "char.h"
#include "char_base.h"
#include "anim_tbl.h"
#include "object.h"
#include "net.h"
#include "npcutil.h"
#include "npc_eventaction.h"
#include "battle.h"
#include "readmap.h"
#ifdef _JZ_NEWSCRIPT_LUA
int NPC_Lua_Battle_GetPlayIndex(lua_State *_NLL)
{
CheckEx(_NLL, 3);
assert(BattleArray != NULL);
CheckBattleIndexNull(_NLL, 1);
int TM_battleindex = (int)lua_tointeger(_NLL, 1);
int TM_side = (int)lua_tointeger(_NLL, 2);
int TM_num = (int)lua_tointeger(_NLL, 3);
if( BATTLE_CHECKINDEX( TM_battleindex ) == FALSE )
{
LRetErrInt(_NLL , -1, "传入的索引是无效的。");
}
BATTLE *TM_Battle = &BattleArray[TM_battleindex];
if(TM_Battle == NULL)
{
LRetErrInt(_NLL , -2, "无法获取指针。");
}
int TM_Ret = -1;
if(TM_side >= 0 && TM_side < 2 && TM_num >=0 && TM_num < BATTLE_ENTRY_MAX)
{
TM_Ret = TM_Battle->Side[TM_side].Entry[TM_num].charaindex;
}else
{
LRetErrInt(_NLL , -3, "范围错误。");
}
LRetInt(_NLL, TM_Ret);
}
int NPC_Lua_Battle_SetNORisk(lua_State *_NLL)
{
CheckEx(_NLL, 2);
assert(BattleArray != NULL);
CheckBattleIndexNull(_NLL, 1);
int TM_battleindex = (int)lua_tointeger(_NLL, 1);
int TM_vl = (int)lua_tointeger(_NLL, 2);
if( BATTLE_CHECKINDEX( TM_battleindex ) == FALSE )
{
LRetErrInt(_NLL , -1, "传入的索引是无效的。");
}
BATTLE *TM_Battle = &BattleArray[TM_battleindex];
if(TM_Battle == NULL)
{
LRetErrInt(_NLL , -2, "无法获取指针。");
}
int TM_Ret = TM_Battle->norisk;
TM_Battle->norisk = TM_vl;
LRetInt(_NLL, TM_Ret);
}
int NPC_Lua_Battle_SetMod(lua_State *_NLL)
{
CheckEx(_NLL, 2);
assert(BattleArray != NULL);
CheckBattleIndexNull(_NLL, 1);
int TM_battleindex = (int)lua_tointeger(_NLL, 1);
int TM_vl = (int)lua_tointeger(_NLL, 2);
if( BATTLE_CHECKINDEX( TM_battleindex ) == FALSE )
{
LRetErrInt(_NLL , -1, "传入的索引是无效的。");
}
BATTLE *TM_Battle = &BattleArray[TM_battleindex];
if(TM_Battle == NULL)
{
LRetErrInt(_NLL , -2, "无法获取指针。");
}
int TM_Ret = TM_Battle->mode;
TM_Battle->mode = TM_vl;
LRetInt(_NLL, TM_Ret);
}
int NPC_Lua_Battle_SetType(lua_State *_NLL)
{
CheckEx(_NLL, 2);
assert(BattleArray != NULL);
CheckBattleIndexNull(_NLL, 1);
int TM_battleindex = (int)lua_tointeger(_NLL, 1);
int TM_vl = (int)lua_tointeger(_NLL, 2);
if( BATTLE_CHECKINDEX( TM_battleindex ) == FALSE )
{
LRetErrInt(_NLL , -1, "传入的索引是无效的。");
}
BATTLE *TM_Battle = &BattleArray[TM_battleindex];
if(TM_Battle == NULL)
{
LRetErrInt(_NLL , -2, "无法获取指针。");
}
int TM_Ret = TM_Battle->type;
TM_Battle->type = TM_vl;
LRetInt(_NLL, TM_Ret);
}
int NPC_Lua_Battle_SetWinEvent(lua_State *_NLL)
{
CheckEx(_NLL, 3);
assert(BattleArray != NULL);
CheckBattleIndexNull(_NLL, 3);
int TM_battleindex = (int)lua_tointeger(_NLL, 3);
if( BATTLE_CHECKINDEX( TM_battleindex ) == FALSE )
{
LRetErrInt(_NLL , -1, "传入的索引是无效的。");
}
BATTLE *TM_Battle = &BattleArray[TM_battleindex];
if(TM_Battle == NULL)
{
LRetErrInt(_NLL , -2, "无法获取指针。");
}
int TM_Ret = NPC_Lua_GetFuncPoint(_NLL);
if(lua_tointeger(_NLL, -1) > 0)
{
if( (void *)(TM_Battle->WinFunc) != (void *)NPC_Lua_BattleWinCallBack)
{
TM_Battle->BakFunc = TM_Battle->WinFunc;
TM_Battle->WinFunc = (void *)NPC_Lua_BattleWinCallBack;
strcpy_s(TM_Battle->BakLuaFuncName, sizeof(TM_Battle->BakLuaFuncName), lua_tostring(_NLL, 2));
}
}
else
{
if((void *)(TM_Battle->WinFunc) == (void *)NPC_Lua_BattleWinCallBack)
{
TM_Battle->BakLuaFuncName[0] = '\0';
TM_Battle->WinFunc = TM_Battle->BakFunc;
}
}
return TM_Ret;
}
int NPC_Lua_Battle_GetData(lua_State *_NLL)
{
CheckEx(_NLL, 2);
int TM_Ret;
assert(BattleArray != NULL);
CheckBattleIndexNull(_NLL, 1);
int TM_battleindex = (int)lua_tointeger(_NLL, 1);
int TM_FLG = (int)lua_tointeger(_NLL, 2);
char* TM_Buff = "\0";
if( BATTLE_CHECKINDEX( TM_battleindex ) == FALSE )
{
LRetErrInt(_NLL , -1, "传入的索引是无效的。");
}
BATTLE *TM_Battle = &BattleArray[TM_battleindex];
if(TM_Battle == NULL)
{
LRetErrInt(_NLL , -2, "无法获取指针。");
}
if (TM_FLG == 0)
{
TM_Ret = TM_Battle->battleindex;
}
else if (TM_FLG == 1)
{
TM_Ret = TM_Battle->dpbattle;
}
else if (TM_FLG == 2)
{
TM_Ret = TM_Battle->turn;
}
else if (TM_FLG == 3)
{
TM_Ret = TM_Battle->timer;
}
else if (TM_FLG == 4)
{
TM_Ret = TM_Battle->leaderindex;
}
else if (TM_FLG == 5)
{
TM_Ret = TM_Battle->rivalindex;
}
else if (TM_FLG == 6)
{
TM_Buff = TM_Battle->leadercdkey;
}
else if (TM_FLG == 7)
{
TM_Buff = TM_Battle->leadername;
}
else if (TM_FLG == 8)
{
TM_Buff = TM_Battle->rivalcdkey;
}
else if (TM_FLG == 9)
{
TM_Buff = TM_Battle->rivalname;
}
else if (TM_FLG == 10)
{
TM_Ret = TM_Battle->CreateTime;
}
else if (TM_FLG == 11)
{
TM_Ret = TM_Battle->EndTime;
}
else if (TM_FLG == 12)
{
TM_Ret = TM_Battle->PartTime;
}
else if (TM_FLG == 13)
{
TM_Ret = TM_Battle->flgTime;
}
else if (TM_FLG == 14)
{
TM_Ret = TM_Battle->createindex;
}
else if (TM_FLG == 15)
{
TM_Ret = TM_Battle->mode;
}
else if (TM_FLG == 16)
{
TM_Ret = TM_Battle->type;
}
else if (TM_FLG == 17)
{
TM_Ret = TM_Battle->norisk;
}
else if (TM_FLG == 18)
{
TM_Ret = TM_Battle->winside;
}
if (TM_FLG >=6 && TM_FLG <= 9) {
LRetMsg(_NLL, TM_Buff);
}
else LRetInt(_NLL, TM_Ret);
LRetErrNull(_NLL, "传入的标志是错误的。");
}
int NPC_Lua_Battle_IndexToNo(lua_State *_NLL)
{
CheckEx(_NLL, 2);
CheckBattleIndexNull(_NLL, 1);
int TM_battleindex = (int)lua_tointeger(_NLL, 1);
int TM_index = (int)lua_tointeger(_NLL, 2);
if( BATTLE_CHECKINDEX( TM_battleindex ) == FALSE )
{
LRetErrInt(_NLL , -1, "传入的索引是无效的。");
}
if( CHAR_CHECKINDEX( TM_index ) == FALSE )
{
LRetErrInt(_NLL , -1, "传入的索引是无效的。");
}
int TM_Ret = BATTLE_Index2No( TM_battleindex, TM_index );
LRetInt(_NLL, TM_Ret);
}
int NPC_Lua_Battle_NoToIndex(lua_State *_NLL)
{
CheckEx(_NLL, 2);
CheckBattleIndexNull(_NLL, 1);
int TM_battleindex = (int)lua_tointeger(_NLL, 1);
int TM_No = (int)lua_tointeger(_NLL, 2);
if( BATTLE_CHECKINDEX( TM_battleindex ) == FALSE )
{
LRetErrInt(_NLL , -1, "传入的索引是无效的。");
}
int TM_Ret = BATTLE_No2Index( TM_battleindex, TM_No );
LRetInt(_NLL, TM_Ret);
}
int NPC_Lua_Battle_CheckIndex(lua_State *_NLL)
{
CheckEx(_NLL, 1);
CheckBattleIndexNull(_NLL, 1);
int TM_battleindex = (int)lua_tointeger(_NLL, 1);
BOOL TM_Ret = BATTLE_CHECKINDEX( TM_battleindex );
LRetBool(_NLL, TM_Ret);
}
int NPC_Lua_Battle_SetData(lua_State *_NLL)
{
CheckEx(_NLL, 3);
int TM_Ret;
char * TM_Buff = "\0";
assert(BattleArray != NULL);
CheckBattleIndexNull(_NLL, 1);
int TM_battleindex = (int)lua_tointeger(_NLL, 1);
int TM_FLG = (int)lua_tointeger(_NLL, 2);
int TM_INT = -1;
char *TM_MSG = "\0";
if( BATTLE_CHECKINDEX( TM_battleindex ) == FALSE )
{
LRetErrInt(_NLL , -1, "传入的索引是无效的。");
}
if (TM_FLG >=6 && TM_FLG <= 9) {
TM_MSG = lua_tostring(_NLL, 3);
}else{
TM_INT = (int)lua_tointeger(_NLL, 3);
}
BATTLE *TM_Battle = &BattleArray[TM_battleindex];
if(TM_Battle == NULL)
{
LRetErrInt(_NLL , -2, "无法获取指针。");
}
if (TM_FLG == 0)
{
TM_Ret = TM_Battle->battleindex;
TM_Battle->battleindex = TM_INT;
}
else if (TM_FLG == 1)
{
TM_Ret = TM_Battle->dpbattle;
TM_Battle->dpbattle = TM_INT;
}
else if (TM_FLG == 2)
{
TM_Ret = TM_Battle->turn;
TM_Battle->turn = TM_INT;
}
else if (TM_FLG == 3)
{
TM_Ret = TM_Battle->timer;
TM_Battle->timer = TM_INT;
}
else if (TM_FLG == 4)
{
TM_Ret = TM_Battle->leaderindex;
TM_Battle->leaderindex = TM_INT;
}
else if (TM_FLG == 5)
{
TM_Ret = TM_Battle->rivalindex;
TM_Battle->rivalindex = TM_INT;
}
else if (TM_FLG == 6)
{
TM_Buff = TM_Battle->leadercdkey;
strcpy(TM_Battle->leadercdkey,TM_MSG);
}
else if (TM_FLG == 7)
{
TM_Buff = TM_Battle->leadername;
strcpy(TM_Battle->leadername,TM_MSG);
}
else if (TM_FLG == 8)
{
TM_Buff = TM_Battle->rivalcdkey;
strcpy(TM_Battle->rivalcdkey,TM_MSG);
}
else if (TM_FLG == 9)
{
TM_Buff = TM_Battle->rivalname;
strcpy(TM_Battle->rivalname,TM_MSG);
}
else if (TM_FLG == 10)
{
TM_Ret = TM_Battle->CreateTime;
TM_Battle->CreateTime = TM_INT;
}
else if (TM_FLG == 11)
{
TM_Ret = TM_Battle->EndTime;
TM_Battle->EndTime = TM_INT;
}
else if (TM_FLG == 12)
{
TM_Ret = TM_Battle->PartTime;
TM_Battle->PartTime = TM_INT;
}
else if (TM_FLG == 13)
{
TM_Ret = TM_Battle->flgTime;
TM_Battle->flgTime = TM_INT;
}
else if (TM_FLG == 14)
{
TM_Ret = TM_Battle->createindex;
TM_Battle->createindex = TM_INT;
}
else if (TM_FLG == 15)
{
TM_Ret = TM_Battle->mode;
TM_Battle->mode = TM_INT;
}
else if (TM_FLG == 16)
{
TM_Ret = TM_Battle->type;
TM_Battle->type = TM_INT;
}
else if (TM_FLG == 17)
{
TM_Ret = TM_Battle->norisk;
TM_Battle->norisk = TM_INT;
}
else if (TM_FLG == 18)
{
TM_Ret = TM_Battle->winside;
TM_Battle->winside = TM_INT;
}
if (TM_FLG >=6 && TM_FLG <= 9) {
LRetMsg(_NLL, TM_Buff);
}
else LRetInt(_NLL, TM_Ret);
LRetErrNull(_NLL, "传入的标志是错误的。");
}
int NPC_Lua_Battle_Exit(lua_State *_NLL)
{
CheckEx(_NLL, 2);
CheckBattleIndexNull(_NLL, 1);
int TM_index = (int)lua_tointeger(_NLL, 1);
int TM_battleindex = (int)lua_tointeger(_NLL, 2);
if( BATTLE_CHECKINDEX( TM_battleindex ) == FALSE )
{
LRetErrInt(_NLL , -1, "传入的索引是无效的。");
}
if( CHAR_CHECKINDEX( TM_index ) == FALSE )
{
LRetErrInt(_NLL , -2, "传入的索引是无效的。");
}
BATTLE_Exit( TM_index, TM_battleindex );
// 由□ 奴 仃月
CHAR_DischargePartyNoMsg( TM_index );
CHAR_talkToCli( TM_index, -1,
"战斗中止。", CHAR_COLORYELLOW );
lssproto_B_send( getfdFromCharaIndex( TM_index ), "BU" );
LRetInt(_NLL, 0);
}
int NPC_Lua_Battle_SetEndEvent(lua_State *_NLL)
{
CheckEx(_NLL, 3);
assert(BattleArray != NULL);
CheckBattleIndexNull(_NLL, 3);
int TM_battleindex = (int)lua_tointeger(_NLL, 3);
if( BATTLE_CHECKINDEX( TM_battleindex ) == FALSE )
{
LRetErrInt(_NLL , -1, "传入的索引是无效的。");
}
BATTLE *TM_Battle = &BattleArray[TM_battleindex];
if(TM_Battle == NULL)
{
LRetErrInt(_NLL , -2, "无法获取指针。");
}
int TM_Ret = NPC_Lua_GetFuncPoint(_NLL);
TM_Battle->EndFunc = (void *)NPC_Lua_BattleEndCallBack;
strcpy_s(TM_Battle->EndLuaFuncName, sizeof(TM_Battle->EndLuaFuncName), lua_tostring(_NLL, 2));
return TM_Ret;
}
#endif //#ifdef _JZ_NEWSCRIPT_LUA
int NPC_Lua_Bit_band(lua_State *_NLL)
{
CheckEx2(_NLL, 2, 5);
CheckIndexNull(_NLL, 1);
CheckIndexNull(_NLL, 2);
int TM_Top = lua_gettop(_NLL);
int a = (int)lua_tointeger(_NLL, 1);
int b = (int)lua_tointeger(_NLL, 2);
int c,d,e;
if(TM_Top >= 3)
{
c = (int)lua_tointeger(_NLL, 3);
a = a&b;
LRetInt(_NLL,a);
}
if(TM_Top >= 4)
{
d = (int)lua_tointeger(_NLL, 4);
LRetInt(_NLL,a&b&c&d);
}
if(TM_Top >= 5)
{
e = (int)lua_tointeger(_NLL, 5);
LRetInt(_NLL,a&b&c&d&e);
}else LRetInt(_NLL,a&b);
}
int NPC_Lua_Bit_bor(lua_State *_NLL)
{
CheckEx2(_NLL, 2, 5);
CheckIndexNull(_NLL, 1);
CheckIndexNull(_NLL, 2);
int TM_Top = lua_gettop(_NLL);
int a = (int)lua_tointeger(_NLL, 1);
int b = (int)lua_tointeger(_NLL, 2);
int c,d,e;
if(TM_Top >= 3)
{
c = (int)lua_tointeger(_NLL, 3);
LRetInt(_NLL,a|b|c);
}
if(TM_Top >= 4)
{
d = (int)lua_tointeger(_NLL, 4);
LRetInt(_NLL,a|b|c|d);
}
if(TM_Top >= 5)
{
e = (int)lua_tointeger(_NLL, 5);
LRetInt(_NLL,a|b|c|d|e);
}else LRetInt(_NLL,a|b);
}
int NPC_Lua_Bit_bxor(lua_State *_NLL)
{
CheckEx2(_NLL, 2, 5);
CheckIndexNull(_NLL, 1);
CheckIndexNull(_NLL, 2);
int TM_Top = lua_gettop(_NLL);
int a = (int)lua_tointeger(_NLL, 1);
int b = (int)lua_tointeger(_NLL, 2);
int c,d,e;
if(TM_Top >= 3)
{
c = (int)lua_tointeger(_NLL, 3);
LRetInt(_NLL,a^b^c);
}
if(TM_Top >= 4)
{
d = (int)lua_tointeger(_NLL, 4);
LRetInt(_NLL,a^b^c^d);
}
if(TM_Top >= 5)
{
e = (int)lua_tointeger(_NLL, 5);
LRetInt(_NLL,a^b^c^d^e);
}else LRetInt(_NLL,a^b);
}
int NPC_Lua_Bit_lshift(lua_State *_NLL)
{
CheckEx2(_NLL, 2,2);
CheckIndexNull(_NLL, 1);
int TM_Top = lua_gettop(_NLL);
int a = (int)lua_tointeger(_NLL, 1);
int b = (int)lua_tointeger(_NLL, 2);
LRetInt(_NLL,a<<b);
}
int NPC_Lua_Bit_rshift(lua_State *_NLL)
{
CheckEx2(_NLL, 2,2);
CheckIndexNull(_NLL, 1);
int TM_Top = lua_gettop(_NLL);
int a = (int)lua_tointeger(_NLL, 1);
int b = (int)lua_tointeger(_NLL, 2);
LRetInt(_NLL,a>>b);
}