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

1683 lines
43 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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"
#include "configfile.h"
#ifdef _JZ_NEWSCRIPT_LUA
extern int StateTable[];
//////////////////////////////////////////////////////////////////////////////
//¹¦ÄܽӿÚ
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_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_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_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);
}
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_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_DelItem(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;
if(lua_gettop(_NLL) == 3)
{
TM_Num = (int)lua_tointeger(_NLL, 3);
}
BOOL TM_Ret = NPC_ActionDoPileDelItem(TM_Index, TM_ItemID, TM_Num);
LRetBool(_NLL, TM_Ret);
}
int NPC_Lua_NLG_DelItemByPos(lua_State *_NLL)
{
CheckEx(_NLL, 2);
CheckIndexNull(_NLL, 1);
int TM_Index = (int)lua_tointeger(_NLL, 1);
int TM_ItemPos = (int)lua_tointeger(_NLL, 2);
int TM_Num = 1;
int TM_ItemId= -1;
int TM_ItemIndex = -1;
int itemMax = CheckCharMaxItem(TM_Index);
if( TM_ItemPos < CHAR_STARTITEMARRAY || TM_ItemPos > itemMax -1 ) {
CHAR_talkToCli( TM_Index, -1, "λÖò»ÕýÈ·¡£", CHAR_COLORWHITE);
return;
}
TM_ItemId = CHAR_getItemIndex(TM_Index, TM_ItemPos);
if( TM_ItemId == -1 ) {
LRetBool(_NLL, FALSE);
}
TM_ItemIndex = CHAR_getItemIndex(TM_Index,TM_ItemPos);
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);
CHAR_DelItem( TM_Index, TM_ItemPos);
LRetBool(_NLL, TRUE);
}
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_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_GiveOnePet(lua_State *_NLL)
{
CheckEx2(_NLL, 2, 3);
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_PetIndex = -1;
if(lua_gettop(_NLL) >= 3)
{
TM_Level = (int)lua_tointeger(_NLL, 3);
}
TM_PetIndex = NPC_GivePet(TM_Index, TM_Level, TM_EnemyId);
char TM_Buff[128];
snprintf(TM_Buff, sizeof(TM_Buff), "»ñµÃ1Ö» %s¡£", CHAR_getChar( TM_PetIndex, CHAR_NAME));
CHAR_talkToCli( TM_Index, -1, TM_Buff, CHAR_COLORYELLOW);
LRetInt(_NLL, TM_PetIndex);
}
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_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_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_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_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_TalkToCli(lua_State *_NLL)
{
CheckEx2(_NLL, 2, 5);
CheckIndexNull(_NLL, 1);
int TM_Top = lua_gettop(_NLL);
int TM_toindex = (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;
if(TM_toindex == -1)
{
//¶ÔÈ«·þÎñÆ÷˵»°
int TM_playernum = CHAR_getPlayerMaxNum();
int i = 0;
for( i = 0 ; i < TM_playernum ; i++)
{
if( CHAR_getCharUse(i) != FALSE )
{
#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
}
}
}else
{
//¶ÔÖ¸¶¨Íæ¼Ò˵»°
#ifdef _FONT_SIZE
TM_Ret = CHAR_talkToCliExt(TM_toindex, TM_Talkindex, TM_Msg, TM_color, TM_fontsize);
#else
TM_Ret = CHAR_talkToCli(TM_toindex, TM_Talkindex, TM_Msg, TM_color);
#endif
}
if(TM_Ret == TRUE)
{
LRetInt(_NLL, 0);
}else
{
LRetErrInt(_NLL , -2, "δ֪ԭÒòµ¼Ö·¢ËÍ˵»°Ê§°Ü¡£");
}
}
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_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|CHAR_P_STRING_CHARSINGMODE );
}
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 ));
}
if(CHAR_getWorkInt( TM_Index ,CHAR_WORKPARTYMODE)==CHAR_PARTY_LEADER)
CHAR_sendLeader( CHAR_getWorkInt( TM_Index, CHAR_WORKOBJINDEX), 1);
LRetNull(_NLL);
}
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_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 < getPartyNum(TM_Index); 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_Char_GetOnLinePlayer(lua_State *_NLL)
{
CheckEx(_NLL, 0);
LRetInt(_NLL, abs(StateTable[LOGIN]));
}
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_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_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_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_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_NLG_GetMaxPlayNum(lua_State *_NLL)
{
int TM_playernum = CHAR_getPlayerMaxNum();
LRetInt(_NLL, TM_playernum);
}
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);
}
//////////////// add by Mo.
int NPC_Lua_NLG_SetExp(lua_State *_NLL)
{
CheckEx(_NLL, 1);
int TM_Exp = (int)lua_tointeger(_NLL, 1);
if( TM_Exp <= 0 )
{
LRetErrInt(_NLL, -3, "¾­Ñé²ÎÊý´íÎó");
}
setBattleexp(TM_Exp);
LRetNull(_NLL);
}
int NPC_Lua_NLG_GetExp(lua_State *_NLL)
{
int ret = getBattleexp();
LRetInt(_NLL, ret);
}
/*
int NPC_Lua_NLG_SetPetTransRange(lua_State *_NLL)
{
CheckEx(_NLL, 3);
int TM_X = (int)lua_tointeger(_NLL, 1);
int TM_Y = (int)lua_tointeger(_NLL, 2);
int TM_Z = (int)lua_tointeger(_NLL, 3);
setPetTransRangeX(TM_X);
setPetTransRangeY(TM_Y);
setPetTransRangeZ(TM_Z);
LRetNull(_NLL);
}
int NPC_Lua_NLG_GetPetTransRange(lua_State *_NLL)
{
CheckEx(_NLL, 1);
int TM_Index = (int)lua_tointeger(_NLL, 1);
if (TM_Index == 1){
int ret = getPetTransRangeX();
LRetInt(_NLL, ret);
}
if (TM_Index == 2){
int ret = getPetTransRangeY();
LRetInt(_NLL, ret);
}
if (TM_Index == 3){
int ret = getPetTransRangeZ();
LRetInt(_NLL, ret);
}
LRetErrInt(_NLL, -1, "´«ÈëµÄ²ÎÊýÊÇÎÞЧµÄ¡£");
}
*/
int NPC_Lua_NLG_InputCard(lua_State *_NLL)
{
CheckEx(_NLL, 1);
CheckIndexNull(_NLL, 1);
int TM_Index1 = (int)lua_tointeger(_NLL, 1);
ITEM_OnlineCost(TM_Index1, -1, -1);
LRetNull(_NLL);
}
int NPC_Lua_NLG_UpItem(lua_State *_NLL)
{
CheckEx(_NLL, 1);
CheckIndexNull(_NLL, 1);
int charaindex = (int)lua_tointeger(_NLL,1);
if( !CHAR_CHECKINDEX( charaindex)){
return 0;
}
int MAX = 27;
int i= 0;
for ( i = 0; i <= MAX; i++){
CHAR_sendItemDataOne( charaindex, i);
}
return 0;
}
int NPC_Lua_NLG_GivePetOne(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_PetIndex = -1;
int TM_Int = -1;
if(lua_gettop(_NLL) >= 3)
{
TM_Level = (int)lua_tointeger(_NLL, 3);
}
TM_Int = NPC_GivePet(TM_Index, TM_Level, TM_EnemyId);
if(TM_Int >= 0)
{
TM_PetIndex = TM_Int;
char TM_Buff[128];
snprintf(TM_Buff, sizeof(TM_Buff), "»ñµÃ 1 Ö» %s¡£", CHAR_getChar( TM_PetIndex, CHAR_NAME));
CHAR_talkToCli( TM_Index, -1, TM_Buff, CHAR_COLORYELLOW);
}
LRetInt(_NLL, TM_PetIndex);
}
int NPC_Lua_NLG_GiveItemOne(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_ItemIndex = -1;
int TM_Int = -1;
TM_Int = NPC_GiveItem( TM_Index, TM_ItemId);
if(TM_Int >= 0)
{
TM_ItemIndex = TM_Int;
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);
}
LRetInt(_NLL, TM_ItemIndex);
}
int NPC_Lua_NLG_DelItemByIndex(lua_State *_NLL)
{
CheckEx(_NLL, 2);
CheckIndexNull(_NLL, 1);
CheckIndexNull(_NLL, 2);
int charaindex = (int)lua_tointeger(_NLL, 1);
if( CHAR_CHECKINDEX( charaindex ) == FALSE ){
LRetInt(_NLL, -1);
return -1;
}
int haveitemindex = (int)lua_tointeger(_NLL, 2);
int itemindex = CHAR_getItemIndex( charaindex, haveitemindex);
if(!ITEM_CHECKINDEX(itemindex)) {
LRetInt(_NLL, -1);
return -1;
}
CHAR_DelItem( charaindex, haveitemindex);
LRetInt(_NLL, 0);
}
int NPC_Lua_NLG_FindPet(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_Count = 0;
int i = 0;
for(i = 0; i < CHAR_MAXPETHAVE ; i++)
{
if (CHAR_getCharPet( TM_Index, i) == -1) TM_Count++;
}
LRetInt(_NLL, TM_Count);
}
int NPC_Lua_NLG_GetMap(lua_State *_NLL)
{
CheckEx2(_NLL, 1, 3);
CheckIndexNull(_NLL, 1);
int TM_Index = (int)lua_tointeger(_NLL, 1);
BOOL TM_Ret = CHAR_CHAT_GetMap( TM_Index, "");
LRetInt(_NLL, TM_Ret);
}
int NPC_Lua_NLG_PetUp(lua_State *_NLL)
{
CheckEx2(_NLL, 2, 3);
CheckIndexNull(_NLL, 1);
int TM_Index = (int)lua_tointeger(_NLL, 1);
int TM_PetIndex = (int)lua_tointeger(_NLL, 2);
int TM_LV = 1;
if(lua_gettop(_NLL) == 3)
{
TM_LV = (int)lua_tointeger(_NLL, 3);
}
BOOL TM_Ret = NPC_PetUp(TM_Index, TM_LV, TM_PetIndex);
LRetBool(_NLL, TM_Ret);
}
#ifdef _CHAR_PROFESSION
int NPC_Lua_NLG_AddSk(lua_State *_NLL)
{
CheckEx2(_NLL, 2, 3);
CheckIndexNull(_NLL, 1);
int TM_Index = (int)lua_tointeger(_NLL, 1);
int TM_SkIndex = (int)lua_tointeger(_NLL, 2);
int TM_SkLV = 1;
if(lua_gettop(_NLL) == 3)
{
TM_SkLV = (int)lua_tointeger(_NLL, 3);
}
BOOL TM_Ret = NPC_AddSk(TM_Index, TM_SkIndex, TM_SkLV);
LRetInt(_NLL, TM_Ret);
}
int NPC_Lua_NLG_SetZy(lua_State *_NLL)
{
CheckEx2(_NLL, 2, 3);
CheckIndexNull(_NLL, 1);
int TM_Index = (int)lua_tointeger(_NLL, 1);
int TM_ZyIndex = (int)lua_tointeger(_NLL, 2);
BOOL TM_Ret = NPC_SetZy(TM_Index, TM_ZyIndex);
LRetBool(_NLL, TM_Ret);
}
#endif
int NPC_Lua_Char_GetPlayerMaxNum(lua_State *_NLL)
{
CheckEx(_NLL, 0);
LRetInt(_NLL, CHAR_getPlayerMaxNum());
}
int NPC_Lua_NLG_GetXY(lua_State *_NLL)
{
CheckEx2(_NLL, 1, 2);
CheckIndexNull(_NLL, 1);
int TM_MAP = (int)lua_tointeger(_NLL, 1);
LRetInt(_NLL, QuBiao(TM_MAP));
}
int NPC_Lua_NLG_WalkJc(lua_State *_NLL)//¼ì²éÇ°·½ÕÏ°­
{
CheckEx(_NLL, 5);
CheckIndexNull(_NLL, 1);
int TM_Index = (int)lua_tointeger(_NLL, 1);
int TM_Floor = (int)lua_tointeger(_NLL, 2);
int TM_Ox = (int)lua_tointeger(_NLL, 3);
int TM_Oy = (int)lua_tointeger(_NLL, 4);
int TM_DIR = (int)lua_tointeger(_NLL, 5);
int TM_Ret = (int)CHAR_walk_jjc(TM_Index,TM_Floor,TM_Ox,TM_Oy,TM_DIR);
if( TM_Ret == CHAR_WALKSUCCESSED )
{
LRetInt(_NLL, 1);
}else LRetInt(_NLL, 0);
}
int NPC_Lua_NLG_KickPlayer(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, "ÈËÎï´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ£¡");
return;
}
#ifdef _NETLOG_
char cdkey[16];
char charname[32];
CONNECT_getCharname(CHAR_getWorkInt( TM_index, CHAR_WORKFD ),charname,32);
CONNECT_getCdkey(CHAR_getWorkInt( TM_index, CHAR_WORKFD ),cdkey,16);
LogCharOut(charname,cdkey,__FILE__,__FUNCTION__,__LINE__,"NPC_Lua_NLG_KickPlayer ´¦ÀíÏÂÏß");
#endif
CONNECT_setCloseRequest( getfdFromCharaIndex(TM_index) , 1 );
LRetBool(_NLL, TRUE);
}
int NPC_Lua_NLG_HealOne(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, "´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ£¡");
return;
}
CHAR_setInt( TM_index , CHAR_HP,99999999 );
CHAR_setInt( TM_index , CHAR_MP,99999999 );
CHAR_complianceParameter( TM_index );
CHAR_send_P_StatusString( TM_index , CHAR_P_STRING_HP);
CHAR_send_P_StatusString( TM_index , CHAR_P_STRING_MP);
LRetBool(_NLL, TRUE);
}
int NPC_Lua_NLG_HealAll(lua_State *_NLL)
{
CheckEx(_NLL, 1);
CheckIndexNull(_NLL, 1);
int TM_index = (int)lua_tointeger(_NLL, 1);
int TM_PetIndex = -1;
if( !CHAR_CHECKINDEX( TM_index)) {
LRetErrInt(_NLL , -1, "´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ£¡");
return;
}
CHAR_setInt( TM_index , CHAR_HP,99999999 );
CHAR_setInt( TM_index , CHAR_MP,99999999 );
CHAR_complianceParameter( TM_index );
CHAR_send_P_StatusString( TM_index , CHAR_P_STRING_HP);
CHAR_send_P_StatusString( TM_index , CHAR_P_STRING_MP);
int i = 0;
for(i = 0; i < CHAR_MAXPETHAVE ; i++)
{
TM_PetIndex = CHAR_getCharPet( TM_index, i);
if(!CHAR_CHECKINDEX(TM_PetIndex))
{
continue;
}
CHAR_setInt( TM_PetIndex , CHAR_HP,99999999 );
CHAR_complianceParameter( TM_PetIndex );
char msgbuf[64];
snprintf( msgbuf, sizeof( msgbuf ), "K%d", i );
CHAR_sendStatusString( TM_index, msgbuf );
snprintf( msgbuf, sizeof( msgbuf ), "W%d", i );
CHAR_sendStatusString( TM_index, msgbuf );
#ifdef _PET_SKILL2
snprintf( msgbuf, sizeof( msgbuf ), "Q%d", i );
CHAR_sendStatusString( TM_index, msgbuf );
#endif
}
LRetBool(_NLL, TRUE);
}
int NPC_Lua_NLG_LevelUpTo(lua_State *_NLL)
{
CheckEx(_NLL, 2);
CheckIndexNull(_NLL, 1);
int TM_index = (int)lua_tointeger(_NLL, 1);
int TM_LV = (int)lua_tointeger(_NLL, 2);
int i;
if( !CHAR_CHECKINDEX( TM_index)) {
LRetErrInt(_NLL , -1, "´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ£¡");
return;
}
TM_LV = TM_LV - CHAR_getInt( TM_index, CHAR_LV);
if (TM_LV <= 0) //·µ»Øʧ°Ü
{
LRetBool(_NLL, FALSE);
}
if (CHAR_getInt( TM_index, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER)//Èç¹ûÊÇÈËÎïµÄ»°
{
CHAR_setInt(TM_index,CHAR_SKILLUPPOINT,
CHAR_getInt(TM_index,CHAR_SKILLUPPOINT)+TM_LV*3);
CHAR_Skillupsend(TM_index);
CHAR_setInt(TM_index,CHAR_LV, CHAR_getInt( TM_index, CHAR_LV) + TM_LV);
CHAR_send_P_StatusString( TM_index , CHAR_P_STRING_LV|CHAR_P_STRING_NEXTEXP);
LRetBool(_NLL, TRUE);
}else if (CHAR_getInt( TM_index, CHAR_WHICHTYPE ) == CHAR_TYPEPET)//Èç¹ûÊdzèÎïµÄ»°
{
char token[128];
for( i = 1; i <= TM_LV; i ++ ){ //Éý¼¶
//CHAR_PetLevelUp( TM_index ,1);
CHAR_PetLevelUp( TM_index);
CHAR_PetAddVariableAi( TM_index, AI_FIX_PETLEVELUP );
CHAR_setInt( TM_index, CHAR_LV, CHAR_getInt( TM_index, CHAR_LV) +1 );
}
int PLAYER = CHAR_getWorkInt(TM_index, CHAR_WORKPLAYERINDEX);//»ñµÃÖ÷È˵ÄË÷Òý
for( i = 0; i < CHAR_MAXPETHAVE; i ++ )
{
if( CHAR_getCharPet( PLAYER, i ) == TM_index )break;
}
CHAR_setInt( TM_index , CHAR_HP ,CHAR_getWorkInt( TM_index, CHAR_WORKMAXHP ) );
CHAR_setInt( TM_index , CHAR_MP ,CHAR_getWorkInt( TM_index, CHAR_WORKMAXMP ) );
CHAR_complianceParameter( TM_index );
snprintf( token, sizeof( token ), "K%d", i );
CHAR_sendStatusString( PLAYER, token );
snprintf( token, sizeof( token ), "W%d", i );
CHAR_sendStatusString( PLAYER, token );
#ifdef _PET_SKILL2
snprintf( token, sizeof( token ), "Q%d", i );
CHAR_sendStatusString( TM_index, token );
#endif
}
LRetBool(_NLL, TRUE);
}
int NPC_Lua_NLG_AddExp(lua_State *_NLL)
{
CheckEx(_NLL, 2);
CheckIndexNull(_NLL, 1);
int i;
int TM_index = (int)lua_tointeger(_NLL, 1);
int TM_EXP = (int)lua_tointeger(_NLL, 2);
if( !CHAR_CHECKINDEX( TM_index)) {
LRetErrInt(_NLL , -1, "´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ£¡");
return;
}
CHAR_setInt( TM_index, CHAR_EXP,CHAR_getInt(TM_index,CHAR_EXP) + TM_EXP);
if (CHAR_getInt( TM_index, CHAR_WHICHTYPE ) == CHAR_TYPEPET)//Èç¹ûÊdzèÎïµÄ»°
{
char token[128];
int PLAYER = CHAR_getWorkInt(TM_index, CHAR_WORKPLAYERINDEX);//»ñµÃÖ÷È˵ÄË÷Òý
for( i = 0; i < CHAR_MAXPETHAVE; i ++ )
{
if( CHAR_getCharPet( PLAYER, i ) == TM_index )break;
}
CHAR_complianceParameter( TM_index );
snprintf( token, sizeof( token ), "K%d", i );
CHAR_sendStatusString( PLAYER, token );
snprintf( token, sizeof( token ), "W%d", i );
CHAR_sendStatusString( PLAYER, token );
#ifdef _PET_SKILL2
snprintf( token, sizeof( token ), "Q%d", i );
CHAR_sendStatusString( PLAYER, token );
#endif
}else CHAR_send_P_StatusString( TM_index , CHAR_P_STRING_EXP);
LRetBool(_NLL, TRUE);
}
int NPC_Lua_NLG_UpPet(lua_State *_NLL)
{
CheckEx2(_NLL, 1, 2);
CheckIndexNull(_NLL, 1);
int TM_Top = lua_gettop(_NLL);
int TM_Index = (int)lua_tointeger(_NLL, 1);
int TM_It = -1;
int i;
int petindex;
char token[64];
if( !CHAR_CHECKINDEX( TM_Index)) {
LRetErrInt(_NLL , -1, "´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ£¡");
return;
}
if (TM_Top == 2)
{
TM_It = (int)lua_tointeger(_NLL, 2);
}
if(TM_It == -1){
for (i=0;i<CHAR_MAXPETHAVE;i++)
{
petindex = CHAR_getCharPet( TM_Index, i);
if( !CHAR_CHECKINDEX( petindex) ) continue;
CHAR_complianceParameter( petindex );
snprintf( token, sizeof( token ), "K%d", i );
CHAR_sendStatusString( TM_Index, token );
snprintf( token, sizeof( token ), "W%d", i );
CHAR_sendStatusString( TM_Index, token );
#ifdef _PET_SKILL2
snprintf( token, sizeof( token ), "Q%d", i );
CHAR_sendStatusString( TM_Index, token );
#endif
}
LRetInt(_NLL,0);
}
else
{
petindex = CHAR_getCharPet( i, TM_It);
if( !CHAR_CHECKINDEX( petindex) ) {
LRetErrInt(_NLL , -1, "´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ£¡");
}
CHAR_complianceParameter( petindex );
snprintf( token, sizeof( token ), "K%d", TM_It );
CHAR_sendStatusString( TM_Index, token );
snprintf( token, sizeof( token ), "W%d", TM_It );
CHAR_sendStatusString( TM_Index, token );
#ifdef _PET_SKILL2
snprintf( token, sizeof( token ), "Q%d", TM_It );
CHAR_sendStatusString( TM_Index, token );
#endif
}
}
int NPC_Lua_NLG_DelPetByPos(lua_State *_NLL)
{
CheckEx(_NLL, 2);
CheckIndexNull(_NLL, 1);
int TM_Index = (int)lua_tointeger(_NLL, 1);
int TM_PetID = (int)lua_tointeger(_NLL, 2);
int TM_PetIndex = -1;
int TM_Ret = 0;
TM_PetID -= 1;
if( !CHAR_CHECKINDEX( TM_Index)) {
LRetErrInt(_NLL , -1, "ÈËÎï´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ£¡");
return;
}
if (TM_PetID < 0 || TM_PetID > 4) LRetErrInt(_NLL , -1, "Ö¸¶¨µÄ³èÎïÀ¸Î»Ã»ÓгèÎ");
TM_PetIndex = CHAR_getCharPet( TM_Index, TM_PetID);
if(!CHAR_CHECKINDEX(TM_PetIndex))
{
LRetInt(_NLL, -1);
return -1;
}
TM_Ret = NPC_DelPet( TM_Index, TM_PetID);
if(TM_Ret < 0)
{
char TM_MsgBuff[128];
snprintf(TM_MsgBuff, sizeof(TM_MsgBuff), "ɾ³ý³èÎïʱ²úÉú´íÎó ´íÎóºÅ: %d¡£", TM_Ret);
LRetErrInt(_NLL , -1, TM_MsgBuff);
}
LRetInt(_NLL, TM_Ret);
}
int NPC_Lua_NLG_DelPetByIndex(lua_State *_NLL)
{
CheckEx(_NLL, 2);
CheckIndexNull(_NLL, 1);
int TM_Index = (int)lua_tointeger(_NLL, 1);
int TM_Pindex = (int)lua_tointeger(_NLL, 2);
int TM_Num = 1;
int TM_PetIndex = -1;
int TM_Ret = 0;
if( !CHAR_CHECKINDEX( TM_Index)) {
LRetErrInt(_NLL , -1, "ÈËÎï´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ£¡");
return;
}
if( !CHAR_CHECKINDEX( TM_Pindex)) {
LRetErrInt(_NLL , -1, "³èÎï´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ£¡");
return;
}
int i = 0;
for(i = 0; i < CHAR_MAXPETHAVE ; i++)
{
TM_PetIndex = CHAR_getCharPet( TM_Index, i);
if(!CHAR_CHECKINDEX(TM_PetIndex))
{
continue;
}
if (TM_PetIndex != TM_Pindex) 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);
}
break;
}
LRetInt(_NLL, TM_Ret);
}
int NPC_Lua_NLG_GivePetByIndex(lua_State *_NLL)
{
CheckEx(_NLL, 2);
CheckIndexNull(_NLL, 1);
int TM_Index = (int)lua_tointeger(_NLL, 1);
int TM_PetIndex = (int)lua_tointeger(_NLL, 2);
if( !CHAR_CHECKINDEX( TM_Index)) {
LRetErrInt(_NLL , -1, "ÈËÎï´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ£¡");
return;
}
if( !CHAR_CHECKINDEX( TM_PetIndex)) {
LRetErrInt(_NLL , -1, "³èÎï´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ£¡");
return;
}
int havepetelement = CHAR_getCharPetElement( TM_Index);
if( havepetelement < 0 ) {
LRetErrInt(_NLL , -1, "Ä¿±ê³èÎïÀ¸Î»ÒÑÂú£¡");
return;
}
CHAR_setWorkInt( TM_PetIndex, CHAR_WORKPLAYERINDEX, TM_Index);//³èÎïÖ÷ÈË
CHAR_setCharPet( TM_Index, havepetelement, TM_PetIndex);
CHAR_setChar( TM_PetIndex, CHAR_OWNERCDKEY,
CHAR_getChar( TM_Index, CHAR_CDKEY));
CHAR_setChar( TM_PetIndex, CHAR_OWNERCHARANAME,
CHAR_getChar( TM_Index, CHAR_NAME));
CHAR_complianceParameter(TM_PetIndex);
char msgbuf[64];
snprintf( msgbuf, sizeof( msgbuf ), "K%d", havepetelement );
CHAR_sendStatusString( TM_Index, msgbuf );
snprintf( msgbuf, sizeof( msgbuf ), "W%d", havepetelement );
CHAR_sendStatusString( TM_Index, msgbuf );
#ifdef _PET_SKILL2
snprintf( msgbuf, sizeof( msgbuf ), "Q%d", havepetelement );
CHAR_sendStatusString( TM_Index, msgbuf );
#endif
LRetInt(_NLL, havepetelement);
}
int NPC_Lua_NLG_GiveItemByIndex(lua_State *_NLL)
{
CheckEx(_NLL, 2);
CheckIndexNull(_NLL, 1);
int TM_Index = (int)lua_tointeger(_NLL, 1);
int TM_ItemIndex = (int)lua_tointeger(_NLL, 2);
if( !CHAR_CHECKINDEX( TM_Index)) {
LRetErrInt(_NLL , -1, "ÈËÎï´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ£¡");
return;
}
if( !ITEM_CHECKINDEX( TM_ItemIndex)) {
LRetErrInt(_NLL , -1, "µÀ¾ß´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ£¡");
return;
}
int emptyitemindexinchara = CHAR_findEmptyItemBox( TM_Index);
if( emptyitemindexinchara < 0 ) {
LRetErrInt(_NLL , -1, "Ä¿±êµÀ¾ßÀ¸Î»ÒÑÂú£¡");
return;
}
CHAR_setItemIndex( TM_Index, emptyitemindexinchara, TM_ItemIndex );
ITEM_setWorkInt(TM_ItemIndex, ITEM_WORKOBJINDEX,-1);
ITEM_setWorkInt(TM_ItemIndex, ITEM_WORKCHARAINDEX, TM_Index);
CHAR_sendItemDataOne( TM_Index, emptyitemindexinchara);
LRetInt(_NLL, emptyitemindexinchara);
}
int NPC_Lua_NLG_WarpToSpecificPoint(lua_State *_NLL)
{
CheckEx(_NLL, 4);
CheckIndexNull(_NLL, 1);
int cindex = (int)lua_tointeger(_NLL, 1);
int fl = (int)lua_tointeger(_NLL, 2);
int x = (int)lua_tointeger(_NLL, 3);
int y = (int)lua_tointeger(_NLL, 4);
if(!CHAR_CHECKINDEX(cindex))
{
LRetErrInt(_NLL, -1, "´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ¡£");
}
LRetBool(_NLL,CHAR_warpToSpecificPoint(cindex,fl,x,y));
}
BOOL NPC_Lua_NLG_UpSkillupPoint(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, "ÈËÎï´«ÈëµÄË÷ÒýÊÇÎÞЧµÄ£¡");
return;
}
CHAR_Skillupsend(TM_Index);
LRetBool(_NLL, TRUE);
}
//ÐÂÔö
int NPC_Lua_NLG_StayEncount(lua_State *_NLL)
{
CheckEx(_NLL, 1);
CheckIndexNull(_NLL, 1);
int fd,charaindex = (int)lua_tointeger(_NLL, 1);
fd = CHAR_getWorkInt( charaindex, CHAR_WORKFD);
setStayEncount(fd);
CHAR_talkToCli(charaindex, -1, "Äã¸ÐÊܵ½ÖܱßͻȻ³äÂúÁËɱÆø£¡", CHAR_COLORYELLOW);
#ifdef _USER_CHARLOOPS
{
Char *ch;
ch = CHAR_getCharPointer( charaindex);
if( ch == NULL ) return;
strcpysafe( ch->charfunctable[CHAR_LOOPFUNCTEMP1].string,
sizeof( ch->charfunctable[CHAR_LOOPFUNCTEMP1]), "CHAR_BattleStayLoop");//Õ½¶·
CHAR_setInt( charaindex, CHAR_LOOPINTERVAL, 2500);
CHAR_constructFunctable( charaindex);
}
#endif
LRetBool(_NLL,TRUE);
}
int NPC_Lua_NLG_HealerAllHeal(lua_State *_NLL)
{
CheckEx(_NLL,1);
CheckIndexNull(_NLL, 1);
int TM_Index = (int)lua_tointeger(_NLL, 1);
NPC_HealerAllHeal(TM_Index);
LRetNull(_NLL);
}
extern int getArrayInt(lua_State *L, int idx);
int NPC_Lua_NLG_CreateVsEnemyAB (lua_State *L)
{
const int charaindex = luaL_checkint(L, 1);
const int npcindex = luaL_checkint(L, 2);
int enemytable[11];
int i;
for( i = 0; i < 11; i ++ ) {
enemytable[i] = -1;
}
luaL_checktype(L, 3, LUA_TTABLE);
int n = luaL_getn(L, 3);
int id = 0;
for(i = 0; i < n; i++){
int enemyid = getArrayInt(L, i);
int curEnemy = ENEMY_getEnemyArrayFromId( enemyid );
if( ENEMY_CHECKINDEX( curEnemy) ) {
enemytable[id++] = curEnemy;
}else{
enemytable[i] = -1;
}
}
int ret = BATTLE_CreateVsEnemyNew(charaindex, npcindex, enemytable);
if( ret == 0 ) {
if(npcindex>-1){
CHAR_setWorkInt( npcindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_INIT );
CHAR_sendBattleEffect( npcindex, ON);
}
lua_pushinteger(L, CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX));
return 1;
}else{
return 0;
}
}
#endif //#ifdef _JZ_NEWSCRIPT_LUA