#include #include "char.h" #include "battle.h" #include "object.h" #include "char_base.h" #include "enemy.h" #include "mylua/base.h" #include "npcutil.h" #include "readmap.h" #include "log.h" #include "pet.h" #include "lua.h" #include "lauxlib.h" #include "lualib.h" #include "version.h" #include "handletime.h" #include "item_event.h" #include "lssproto_serv.h" #ifdef _ALLBLUES_LUA #include "mylua/mylua.h" extern MY_Lua MYLua; static CharBase CharBaseWorkInt[] = { {{"对象"}, CHAR_WORKOBJINDEX} #ifdef _FONT_SIZE ,{{"字号"}, CHAR_WORKFONTSIZE} #endif ,{{"战斗"}, CHAR_WORKBATTLEMODE} ,{{"组队"}, CHAR_WORKPARTYMODE} ,{{"战斗索引"}, CHAR_WORKBATTLEINDEX} ,{{"NPC临时1"}, CHAR_NPCWORKINT1} ,{{"NPC临时2"}, CHAR_NPCWORKINT2} ,{{"NPC临时3"}, CHAR_NPCWORKINT3} ,{{"NPC临时4"}, CHAR_NPCWORKINT4} ,{{"NPC临时5"}, CHAR_NPCWORKINT5} ,{{"NPC临时6"}, CHAR_NPCWORKINT6} ,{{"NPC临时7"}, CHAR_NPCWORKINT7} ,{{"NPC临时8"}, CHAR_NPCWORKINT8} ,{{"NPC临时9"}, CHAR_NPCWORKINT9} ,{{"NPC临时10"}, CHAR_NPCWORKINT10} ,{{"NPC临时11"}, CHAR_NPCWORKINT11} ,{{"NPC临时12"}, CHAR_NPCWORKINT12} ,{{"NPC临时13"}, CHAR_NPCWORKINT13} ,{{"捡起模式"}, CHAR_WORKPETFOLLOWMODE} ,{{"队员1"}, CHAR_WORKPARTYINDEX1} ,{{"队员2"}, CHAR_WORKPARTYINDEX2} ,{{"队员3"}, CHAR_WORKPARTYINDEX3} ,{{"队员4"}, CHAR_WORKPARTYINDEX4} ,{{"队员5"}, CHAR_WORKPARTYINDEX5} ,{{"最大HP"}, CHAR_WORKMAXHP} ,{{"最大MP"}, CHAR_WORKMAXMP} ,{{"攻击力"}, CHAR_WORKATTACKPOWER} ,{{"防御力"}, CHAR_WORKDEFENCEPOWER} ,{{"敏捷力"}, CHAR_WORKQUICK} ,{{"修正体力"}, CHAR_WORKFIXVITAL} ,{{"修正腕力"}, CHAR_WORKFIXSTR} ,{{"修正耐力"}, CHAR_WORKFIXTOUGH} ,{{"修正速度"}, CHAR_WORKFIXDEX} ,{{"家族地图"}, CHAR_WORKFMFLOOR} ,{{"攻击"}, CHAR_WORKATTACKPOWER} ,{{"防御"}, CHAR_WORKDEFENCEPOWER} ,{{"敏捷"}, CHAR_WORKQUICK} ,{{"逃跑"}, CHAR_WORKDBATTLEESCAPE} #ifdef _OFFLINE_SYSTEM ,{{"离线"}, CHAR_WORK_OFFLINE} #endif ,{{"获得经验"}, CHAR_WORKGETEXP} #ifdef _AUTO_PK ,{{"自动PK点"}, CHAR_WORK_AUTOPK} ,{{"自动PK死亡"}, CHAR_WORK_AUTOPK_DEAD} #endif #ifdef _SPECIAL_COUNTER ,{{"计数器"}, CHAR_WORK_COUNTER} #endif #ifdef _SPECIAL_TIMER ,{{"计时器"}, CHAR_WORK_TIMER} #endif #ifdef _STREET_VENDOR ,{{"摆摊"}, CHAR_WORKSTREETVENDOR} #endif #ifdef _RECORD_IP ,{{"IP"}, CHAR_WORK_RECORD_IP} #endif #ifdef _ONLINE_TIME ,{{"登陆时间"}, CHAR_WORK_LOGIN_TIME} #endif // ,{{"经验加成"}, CHAR_WORKITEM_ADDEXP} // ,{{"经验时效"}, CHAR_WORKITEM_ADDEXPTIME} }; static CharBase CharBaseWorkChar[] = { {{"NPC临时1"}, CHAR_NPCWORKCHAR1} ,{{"NPC临时2"}, CHAR_NPCWORKCHAR2} ,{{"NPC临时3"}, CHAR_NPCWORKCHAR3} ,{{"NPC临时4"}, CHAR_NPCWORKCHAR4} ,{{"NPC临时5"}, CHAR_NPCWORKCHAR5} ,{{"NPC临时6"}, CHAR_NPCWORKCHAR6} #ifdef _STREET_VENDOR ,{{"摆摊"}, CHAR_STREETVENDOR_NAME} #endif }; static CharBase CharBaseValue[] = { {{"北"}, 0} ,{{"东北"}, 1} ,{{"东"}, 2} ,{{"东南"}, 3} ,{{"南"}, 4} ,{{"西南"}, 5} ,{{"西"}, 6} ,{{"西北"}, 7} ,{{"无类型"}, CHAR_TYPENONE} ,{{"玩家"}, CHAR_TYPEPLAYER} ,{{"敌人"}, CHAR_TYPEENEMY} ,{{"宠物"}, CHAR_TYPEPET} #ifdef _ALLBLUES_LUA ,{{"LUA"}, CHAR_TYPELUANPC} #endif #ifdef _PLAYER_NPC ,{{"帮托"}, CHAR_TYPEPLAYERNPC} ,{{"帮宠"}, CHAR_TYPEPLAYERPETNPC} #endif }; static CharBase CharBaseWorkValue[] = { {{"无"}, CHAR_PARTY_NONE} ,{{"队长"}, CHAR_PARTY_LEADER} ,{{"队员"}, CHAR_PARTY_CLIENT} ,{{"无战斗"}, BATTLE_CHARMODE_NONE} ,{{"战斗初始化"}, BATTLE_CHARMODE_INIT} ,{{"等待战斗"}, BATTLE_CHARMODE_C_WAIT} ,{{"确认战斗"}, BATTLE_CHARMODE_C_OK} ,{{"帮助战斗"}, BATTLE_CHARMODE_RESCUE} ,{{"结束战斗"}, BATTLE_CHARMODE_FINAL} ,{{"观战初始化"}, BATTLE_CHARMODE_WATCHINIT} ,{{"没有家族"}, FMMEMBER_NONE} ,{{"申请入族"}, FMMEMBER_APPLY} ,{{"族长"}, FMMEMBER_LEADER} ,{{"成员"}, FMMEMBER_MEMBER} ,{{"长老"}, FMMEMBER_ELDER} }; static CharBase CharBaseInt[] = { {{"图像号"}, CHAR_BASEIMAGENUMBER} ,{{"原图像号"}, CHAR_BASEBASEIMAGENUMBER} ,{{"地图号"}, CHAR_FLOOR} ,{{"坐标X"}, CHAR_X} ,{{"坐标Y"}, CHAR_Y} ,{{"方向"}, CHAR_DIR} ,{{"等级"}, CHAR_LV} ,{{"石币"}, CHAR_GOLD} ,{{"HP"}, CHAR_HP} ,{{"MP"}, CHAR_MP} ,{{"最大MP"}, CHAR_MAXMP} ,{{"体力"}, CHAR_VITAL} ,{{"腕力"}, CHAR_STR} ,{{"耐力"}, CHAR_TOUGH} ,{{"速度"}, CHAR_DEX} ,{{"地"}, CHAR_EARTHAT} ,{{"水"}, CHAR_WATERAT} ,{{"火"}, CHAR_FIREAT} ,{{"风"}, CHAR_WINDAT} ,{{"战宠"}, CHAR_DEFAULTPET} ,{{"魅力"}, CHAR_CHARM} ,{{"运气"}, CHAR_LUCK} ,{{"死亡次数"}, CHAR_DEADCOUNT} ,{{"走路步数"}, CHAR_WALKCOUNT} ,{{"说话次数"}, CHAR_TALKCOUNT} ,{{"损坏次数"}, CHAR_DAMAGECOUNT} ,{{"给宠次数"}, CHAR_GETPETCOUNT} ,{{"杀宠次数"}, CHAR_KILLPETCOUNT} ,{{"死宠次数"}, CHAR_DEADPETCOUNT} ,{{"发邮件数"}, CHAR_SENDMAILCOUNT} ,{{"合成次数"}, CHAR_MERGEITEMCOUNT} ,{{"PK次数"}, CHAR_DUELBATTLECOUNT} ,{{"PK赢数"}, CHAR_DUELWINCOUNT} ,{{"PK败数"}, CHAR_DUELLOSECOUNT} ,{{"PK连胜"}, CHAR_DUELSTWINCOUNT} ,{{"PK最高连胜"}, CHAR_DUELMAXSTWINCOUNT} ,{{"类型"}, CHAR_WHICHTYPE} ,{{"循环事件时间"}, CHAR_LOOPINTERVAL} #ifdef _NEWOPEN_MAXEXP ,{{"总经验"}, CHAR_OLDEXP} #endif ,{{"当前经验"}, CHAR_EXP} ,{{"技能点"}, CHAR_SKILLUPPOINT} ,{{"升级点"}, CHAR_LEVELUPPOINT} ,{{"DP"}, CHAR_DUELPOINT} ,{{"经验"}, CHAR_EXP} ,{{"出生地"}, CHAR_LASTTALKELDER} ,{{"转数"}, CHAR_TRANSMIGRATION} ,{{"禁言"}, CHAR_SILENT} ,{{"家族索引"}, CHAR_FMINDEX} ,{{"家族地位"}, CHAR_FMLEADERFLAG} ,{{"个人银行"}, CHAR_BANKGOLD} ,{{"骑宠"}, CHAR_RIDEPET} ,{{"暴击"}, CHAR_CRITIAL} ,{{"反击"}, CHAR_COUNTER} #ifdef _GAMBLE_BANK // ,{{"赌场银行"}, CHAR_RIDEPET} #endif #ifdef _DROPSTAKENEW ,{{"赌场积分"}, CHAR_GAMBLENUM} #endif #ifdef _PERSONAL_FAME // Arminius 8.30: 家族个人声望 ,{{"声望"}, CHAR_FAME} #endif #ifdef _ATTACK_MAGIC ,{{"地魔法熟练度"}, CHAR_EARTH_EXP} ,{{"水魔法熟练度"}, CHAR_WATER_EXP} ,{{"火魔法熟练度"}, CHAR_FIRE_EXP} ,{{"风魔法熟练度"}, CHAR_WIND_EXP} ,{{"地魔法抗性"}, CHAR_EARTH_RESIST} ,{{"水魔法抗性"}, CHAR_WATER_RESIST} ,{{"火魔法抗性"}, CHAR_FIRE_RESIST} ,{{"风魔法抗性"}, CHAR_WIND_RESIST} ,{{"地魔法熟练度经验"}, CHAR_EARTH_ATTMAGIC_EXP} ,{{"水魔法熟练度经验"}, CHAR_WATER_ATTMAGIC_EXP} ,{{"火魔法熟练度经验"}, CHAR_FIRE_ATTMAGIC_EXP} ,{{"风魔法熟练度经验"}, CHAR_WIND_ATTMAGIC_EXP} ,{{"地魔法抗性经验值"}, CHAR_EARTH_DEFMAGIC_EXP} ,{{"水魔法抗性经验值"}, CHAR_WATER_DEFMAGIC_EXP} ,{{"火魔法抗性经验值"}, CHAR_FIRE_DEFMAGIC_EXP} ,{{"风魔法抗性经验值"}, CHAR_WIND_DEFMAGIC_EXP} #endif #ifdef _CHAR_PROFESSION // WON ADD 人物职业 ,{{"职业别"}, PROFESSION_CLASS} ,{{"职业等级"}, PROFESSION_LEVEL} ,{{"技能点数"}, PROFESSION_SKILL_POINT} ,{{"增加堆叠"}, ATTACHPILE} ,{{"火熟练度"}, PROFESSION_FIRE_P} ,{{"冰熟练度"}, PROFESSION_ICE_P} ,{{"雷熟练度"}, PROFESSION_THUNDER_P} ,{{"火抗性"}, PROFESSION_FIRE_R} ,{{"冰抗性"}, PROFESSION_ICE_R} ,{{"雷抗性"}, PROFESSION_THUNDER_R} #endif #ifdef _NEW_MANOR_LAW ,{{"气势"}, CHAR_MOMENTUM} #endif //#ifdef _VIP_SERVER // ,{{"积分"}, CHAR_AMPOINT} //#endif #ifdef _VIP_RIDE ,{{"会员"}, CHAR_VIPRIDE} ,{{"会员有效期"}, CHAR_VIPTIME} #endif #ifdef _ITEM_PET_LOCKED ,{{"安全锁"}, CHAR_LOCKED} #endif #ifdef _ONLINE_SHOP ,{{"贝币"}, CHAR_BJ} #endif #ifdef _CAX_ESC_REPORT ,{{"签到"}, CHAR_REPORT} #endif ,{{"模式AI"}, CHAR_MODAI} ,{{"可变AI"}, CHAR_VARIABLEAI} ,{{"宠技位"}, CHAR_SLOT} ,{{"宠ID"}, CHAR_PETID} ,{{"怪ID"}, CHAR_PETENEMYID} ,{{"守护兽"}, CHAR_PETFAMILY} ,{{"能力值"}, CHAR_ALLOCPOINT} ,{{"成长区间"}, CHAR_PETRANK} ,{{"限制等级"}, CHAR_LIMITLEVEL} /*char.setInt( petindex, "融合编号", PetCode) char.setInt( petindex, "转数", 2) char.setInt( petindex, "融合类型", 3) char.setInt( petindex, "融合编码", -1) char.setInt( petindex, "能装备", -1) char.setInt( petindex, "喂食次数", 30 ) char.setInt( petindex, "融合宠", 1) char.setInt( petindex, "喂食时间", other.time()) char.setInt( petindex, "融合体力", 0) char.setInt( petindex, "融合腕力", 0) char.setInt( petindex, "融合耐力", 0) char.setInt( petindex, "融合速度", 0)*/ // ,{{"融合类型"}, CHAR_FUSIONCODE}//CHAR_FUSIONBEIT ,{{"融合编号"}, CHAR_FUSIONINDEX}//融合编号-- ,{{"融合编码"}, CHAR_FUSIONCODE}//- ,{{"喂食次数"}, CHAR_FUSIONRAISE} //- ,{{"融合宠"}, CHAR_FUSIONBEIT}// - ,{{"喂食时间"}, CHAR_FUSIONTIMELIMIT}// ,{{"融合体力"}, CHAR_EVOLUTIONBASEVTL}// ,{{"融合腕力"}, CHAR_EVOLUTIONBASESTR}// ,{{"融合耐力"}, CHAR_EVOLUTIONBASETGH}// ,{{"融合速度"}, CHAR_EVOLUTIONBASEDEX}// #ifdef _PET_BEATITUDE ,{{"提升值"}, CHAR_BEATITUDE} #endif #ifdef _CAMEO_MONEY ,{{"贝壳"}, CHAR_CAMEO} #endif #ifdef _MISSION_TRAIN ,{{"任务链"}, CHAR_MISSIONTRAIN_NUM} ,{{"任务链时间"}, CHAR_MISSIONTRAIN_TIME} #endif #ifdef _PET_EVOLVE ,{{"进化"}, CHAR_EVOLVE} #endif #ifdef _ONLINE_TIME ,{{"在线时间"}, CHAR_ONLINE_TIME} #endif ,{{"离线时间"}, CHAR_OFFTIME} #ifdef _FLOOR_DIFI_FIELD ,{{"楼层时间"}, CHAR_FLOORDIFI_TIME} #endif //#ifdef _ACTIVE_GAME // ,{{"活力"}, CHAR_ACTIVE} //#endif ,{{"经验加成"}, CHAR_ADDEXPPOWER} //经验加成 ,{{"经验时效"}, CHAR_ADDEXPTIME} //经验时效 /60处理 ,{{"活力"}, CHAR_VIGOR} ,{{"环数"}, CHAR_EVNUM} ,{{"整数缓存1"}, CHAR_LUASAVE_WORKINT_1} //lua存储 玩家下线清零 ,{{"整数缓存2"}, CHAR_LUASAVE_WORKINT_2} //lua存储 玩家下线清零 ,{{"整数缓存3"}, CHAR_LUASAVE_WORKINT_3} //lua存储 玩家下线清零 ,{{"整数存储1"}, CHAR_LUASAVE_INT_1} //整数存储,保存至存档内1-3 ,{{"整数存储2"}, CHAR_LUASAVE_INT_2} //整数存储,保存至存档内1-3 ,{{"整数存储3"}, CHAR_LUASAVE_INT_3} //整数存储,保存至存档内1-3 #ifdef _CAX_Mercenary ,{{"佣兵经验"}, CHAR_MERCENARY} //佣兵经验 #endif #ifdef _SUPER ,{{"极品"}, CHAR_SUPER} #endif #ifdef _ALLDOMAN ,{{"英雄称号"}, CHAR_HEROFLOOR} #endif #ifdef _PLAYER_TITLE ,{{"称号等级"}, CHAR_TITLE_LV} ,{{"称号时间"}, CHAR_TITLE_TIME} #endif #ifdef _MISSION_TIME ,{{"任务计时"}, CHAR_MISSION_TIME} #endif #ifdef _REGISTRATION_TIME ,{{"签到时间"}, CHAR_REGISTRATION_TIME} ,{{"签到次数"}, CHAR_REGISTRATION_COUNT} ,{{"签到在线时间"}, CHAR_REGISTRATION_ONLINE_TIME} #endif ,{{"证书骑宠"}, CHAR_LOWRIDEPETS} ,{{"证书骑宠1"}, CHAR_LOWRIDEPETS1} ,{{"证书骑宠2"}, CHAR_HIGHRIDEPETS2} }; static CharBase CharBaseChar[] = { {{"名字"}, CHAR_NAME} ,{{"昵称"}, CHAR_OWNTITLE} ,{{"主人"}, CHAR_USERPETNAME} ,{{"账号"}, CHAR_CDKEY} ,{{"家族"}, CHAR_FMNAME} #ifdef _TEACHER_SYSTEM ,{{"导师帐号"}, CHAR_TEACHER_ID} ,{{"导师名字"}, CHAR_TEACHER_NAME} #endif #ifdef _ITEM_SETLOVER ,{{"爱人账号"}, CHAR_LOVERID} ,{{"爱人名字"}, CHAR_LOVERNAME} #endif #ifdef _NEW_NAME ,{{"称号"}, CHAR_NEWNAME} #endif #ifdef _LOTTERY_SYSTEM ,{{"彩票"}, CHAR_LOTTERY_VALUE} #endif ,{{"主人账号"}, CHAR_OWNERCDKEY} ,{{"主人名字"}, CHAR_OWNERCHARANAME} }; static CharBase CharBaseEvent[] = { {{"初始化事件"}, CHAR_INITFUNC} //,{{"行走事件"}, CHAR_WALKPREFUNC} //,{{"行走后事件"}, CHAR_WALKPOSTFUNC} //,{{"未知事件"}, CHAR_PREOVERFUNC} //,{{"未知事件"}, CHAR_POSTOVERFUNC} //,{{"观看事件"}, CHAR_WATCHFUNC} ,{{"循环事件"}, CHAR_LOOPFUNC} //,{{"死亡事件"}, CHAR_DYINGFUNC} ,{{"对话事件"}, CHAR_TALKEDFUNC} //,{{"攻击事件"}, CHAR_PREATTACKEDFUNC} //,{{"攻击后事件"}, CHAR_POSTATTACKEDFUNC} //,{{"离开事件"}, CHAR_OFFFUNC} //,{{"看事件"}, CHAR_LOOKEDFUNC} //,{{"丢弃事件"}, CHAR_ITEMPUTFUNC} //,{{"特殊对话事件"}, CHAR_SPECIALTALKEDFUNC} ,{{"窗口事件"}, CHAR_WINDOWTALKEDFUNC} #ifdef _USER_CHARLOOPS //,{{"循环事件1"}, CHAR_LOOPFUNCTEMP1} //,{{"循环事件2"}, CHAR_LOOPFUNCTEMP2} //,{{"未知事件"}, CHAR_BATTLEPROPERTY} #endif ,{{"重叠事件"}, CHAR_OVERLAPEDFUNC} ,{{"战后事件"}, CHAR_BATTLEOVERDFUNC} #ifdef _ALLBLUES_LUA_1_4 ,{{"登出事件"}, CHAR_LOGINOUTFUNC} #endif #ifdef _ALLBLUES_LUA_1_9 ,{{"战斗设置事件"}, CHAR_BATTLESETFUNC} #endif }; static CharBase CharBaseColor[] = { {{"白色"}, CHAR_COLORWHITE} ,{{"青色"}, CHAR_COLORCYAN} ,{{"紫色"}, CHAR_COLORPURPLE} ,{{"蓝色"}, CHAR_COLORBLUE} ,{{"黄色"}, CHAR_COLORYELLOW} ,{{"绿色"}, CHAR_COLORGREEN} ,{{"红色"}, CHAR_COLORRED} ,{{"灰白色"}, CHAR_COLORGRAY} ,{{"灰蓝色"}, CHAR_COLORBLUE2} ,{{"灰绿色"}, CHAR_COLORGREEN2} }; static CharBase CharBaseUpdata[] = { {{"HP"}, CHAR_P_STRING_HP} ,{{"MAXHP"}, CHAR_P_STRING_MAXHP} ,{{"MP"}, CHAR_P_STRING_MP} ,{{"MAXMP"}, CHAR_P_STRING_MAXMP} ,{{"体力"}, CHAR_P_STRING_VITAL} ,{{"腕力"}, CHAR_P_STRING_STR} ,{{"耐力"}, CHAR_P_STRING_TOUGH} ,{{"速度"}, CHAR_P_STRING_DEX} ,{{"经验"}, CHAR_P_STRING_EXP} ,{{"下一级经验"}, CHAR_P_STRING_NEXTEXP} ,{{"等级"}, CHAR_P_STRING_LV} ,{{"攻击力"}, CHAR_P_STRING_ATK} ,{{"防御力"}, CHAR_P_STRING_DEF} ,{{"敏捷力"}, CHAR_P_STRING_QUICK} ,{{"魅力"}, CHAR_P_STRING_CHARM} ,{{"运气"}, CHAR_P_STRING_LUCK} ,{{"地"}, CHAR_P_STRING_EARTH} ,{{"水"}, CHAR_P_STRING_WATER} ,{{"火"}, CHAR_P_STRING_FIRE} ,{{"风"}, CHAR_P_STRING_WIND} ,{{"石币"}, CHAR_P_STRING_GOLD} ,{{"标题"}, CHAR_P_STRING_TITLE} ,{{"DP"}, CHAR_P_STRING_DUELPOINT} ,{{"转数"}, CHAR_P_STRING_TRANSMIGRATION} ,{{"名字"}, CHAR_P_STRING_NAME} ,{{"昵称"}, CHAR_P_STRING_OWNTITLE} ,{{"骑宠"}, CHAR_P_STRING_RIDEPET} ,{{"学骑"}, CHAR_P_STRING_LEARNRIDE} ,{{"图像"}, CHAR_P_STRING_BASEBASEIMAGENUMBER} ,{{"天行者"}, CHAR_P_STRING_SKYWALKER} ,{{"调试模式"}, CHAR_P_STRING_DEBUGMODE} }; static CharBase CharBaseFlg[] = { {{"可见"}, CHAR_ISVISIBLE} ,{{"透明"}, CHAR_ISTRANSPARENT} ,{{"飞行"}, CHAR_ISFLYING} ,{{"死亡"}, CHAR_ISDIE} ,{{"组队"}, CHAR_ISPARTY} ,{{"决斗"}, CHAR_ISDUEL} ,{{"名片"}, CHAR_ISTRADECARD} ,{{"交易"}, CHAR_ISTRADE} #ifdef _CHANNEL_MODIFY ,{{"密语频道"}, CHAR_ISTELL} ,{{"家族频道"}, CHAR_ISFM} ,{{"职业频道"}, CHAR_ISOCC} ,{{"对话储存"}, CHAR_ISSAVE} ,{{"聊天室"}, CHAR_ISCHAT} #ifdef _CHATROOMPROTOCOL #ifdef _THE_WORLD_SEND ,{{"世界频道"}, CHAR_ISWORLD} #endif #ifdef _ONLINE_TALK_IP ,{{"举报频道"}, CHAR_ISTALKIP} #endif #endif #endif }; static CharBase CharBaseAction[] = { {{"站立"}, CHAR_ACTSTAND} ,{{"走动"}, CHAR_ACTWALK} ,{{"攻击"}, CHAR_ACTATTACK} ,{{"投掷"}, CHAR_ACTTHROW} ,{{"受伤"}, CHAR_ACTDAMAGE} ,{{"死亡"}, CHAR_ACTDEAD} ,{{"魔法"}, CHAR_ACTMAGIC} ,{{"道具"}, CHAR_ACTITEM} ,{{"效果"}, CHAR_ACTEFFECT} ,{{"下"}, CHAR_ACTDOWN} ,{{"坐"}, CHAR_ACTSIT} ,{{"挥手"}, CHAR_ACTHAND} ,{{"高兴"}, CHAR_ACTPLEASURE} ,{{"发怒"}, CHAR_ACTANGRY} ,{{"悲哀"}, CHAR_ACTSAD} ,{{"防守"}, CHAR_ACTGUARD} ,{{"走路"}, CHAR_ACTACTIONWALK} ,{{"点头"}, CHAR_ACTNOD} ,{{"站立"}, CHAR_ACTACTIONSTAND} ,{{"战斗"}, CHAR_ACTBATTLE} ,{{"带队"}, CHAR_ACTLEADER} ,{{"观战"}, CHAR_ACTBATTLEWATCH} ,{{"未知"}, CHAR_ACTPOPUPNAME} ,{{"旋转"}, CHAR_ACTTURN} ,{{"变形"}, CHAR_ACTWARP} ,{{"交易"}, CHAR_ACTTRADE} #ifdef _ANGEL_SUMMON ,{{"天使"}, CHAR_ACTANGEL} #endif #ifdef _MIND_ICON ,{{"心思"}, CHAR_MIND} #endif #ifdef _STREET_VENDOR ,{{"打开摊滩"}, CHAR_STREETVENDOR_OPEN} ,{{"关闭摊滩"}, CHAR_STREETVENDOR_CLOSE} #endif }; static int getCharNum (lua_State *L) { lua_pushinteger(L, CHAR_getCharNum()); return 1; } static int getPlayerMaxNum (lua_State *L) { lua_pushinteger(L, CHAR_getPlayerMaxNum()); return 1; } static int getPetMaxNum (lua_State *L) { lua_pushinteger(L, CHAR_getPetMaxNum()); return 1; } static int getOthersMaxNum (lua_State *L) { lua_pushinteger(L, CHAR_getOthersMaxNum()); return 1; } static int check (lua_State *L) { const int index = luaL_checkint(L, 1); lua_pushinteger(L, CHAR_CHECKINDEX(index)); return 1; } static int setFlg (lua_State *L) { const int index = luaL_checkint(L, 1); const int element = getCharBaseValue(L, 2, CharBaseFlg, arraysizeof(CharBaseFlg)); const int data = luaL_checkint(L, 3); if(CHAR_setFlg(index, element, data) == -1){ return 0; }else{ return 1; } } static int getFlg (lua_State *L) { const int index = luaL_checkint(L, 1); const int element = getCharBaseValue(L, 2, CharBaseFlg, arraysizeof(CharBaseFlg)); lua_pushinteger(L, CHAR_getFlg(index, element)); return 1; } static int setWorkChar (lua_State *L) { size_t l; const int index = luaL_checkint(L, 1); const int element = getCharBaseValue(L, 2, CharBaseWorkChar, arraysizeof(CharBaseWorkChar)); char *data = luaL_checklstring(L, 3, &l); if(CHAR_setWorkChar(index, element, data) == -1){ return 0; }else{ return 1; } } static int getWorkChar (lua_State *L) { const int index = luaL_checkint(L, 1); const int element = getCharBaseValue(L, 2, CharBaseWorkChar, arraysizeof(CharBaseWorkChar)); lua_pushstring(L, CHAR_getWorkChar(index, element)); return 1; } static int setWorkInt (lua_State *L) { const int index = luaL_checkint(L, 1); const int element = getCharBaseValue(L, 2, CharBaseWorkInt, arraysizeof(CharBaseWorkInt)); const int data = getCharBaseValue(L, 3, CharBaseWorkValue, arraysizeof(CharBaseWorkValue)); //print("index = %d element =%d data =%d \n ",index,element,data); if(CHAR_setWorkInt(index, element, data) == -1){ return 0; }else{ return 1; } } static int getWorkInt (lua_State *L) { const int index = luaL_checkint(L, 1); const int element = getCharBaseValue(L, 2, CharBaseWorkInt, arraysizeof(CharBaseWorkInt)); lua_pushinteger(L, CHAR_getWorkInt(index, element)); return 1; } static int setChar (lua_State *L) { size_t l; const int index = luaL_checkint(L, 1); const int element = getCharBaseValue(L, 2, CharBaseChar, arraysizeof(CharBaseChar)); char *data = luaL_checklstring(L, 3, &l); if(CHAR_setChar(index, element, data) == -1){ return 0; }else{ return 1; } } static int getChar (lua_State *L) { const int index = luaL_checkint(L, 1); const int element = getCharBaseValue(L, 2, CharBaseChar, arraysizeof(CharBaseChar)); lua_pushstring(L, CHAR_getChar(index, element)); return 1; } static int setInt (lua_State *L) { const int index = luaL_checkint(L, 1); const int element = getCharBaseValue(L, 2, CharBaseInt, arraysizeof(CharBaseInt)); const int data = getCharBaseValue(L, 3, CharBaseValue, arraysizeof(CharBaseValue)); if(CHAR_setInt(index, element, data) == -1){ return 0; }else{ return 1; } } static int getInt (lua_State *L) { const int index = luaL_checkint(L, 1); const int element = getCharBaseValue(L, 2, CharBaseInt, arraysizeof(CharBaseInt)); lua_pushinteger(L, CHAR_getInt(index, element)); return 1; } static int setFunctionPointer(lua_State *L) { size_t l; const int index = luaL_checkint(L, 1); const int functype = getCharBaseValue(L, 2, CharBaseEvent, arraysizeof(CharBaseEvent)); char *luafunctable=luaL_checklstring(L, 3, &l); char *luafunctablepath=luaL_checklstring(L, 4, &l); if(strlen(luafunctablepath) > 0){ MY_Lua *mylua = &MYLua; while(mylua->next != NULL){ if(strcmp(mylua->luapath, luafunctablepath) == 0){ return CHAR_setLUAFunction( index, functype, mylua->lua, luafunctable ); } mylua = mylua->next; } }else{ return CHAR_setLUAFunction( index, functype, L, luafunctable ); } return 1; } static int delFunctionPointer(lua_State *L) { const int index = luaL_checkint(L, 1); const int functype = getCharBaseValue(L, 2, CharBaseEvent, arraysizeof(CharBaseEvent)); return CHAR_delLUAFunction( index, functype ); } static int TalkToCli(lua_State *L) { size_t l; const int talkedcharaindex = luaL_checkint(L, 1); const int talkcharaindex = luaL_checkint(L, 2); char *message=luaL_checklstring(L, 3, &l); const int color = getCharBaseValue(L, 4, CharBaseColor, arraysizeof(CharBaseColor)); CHAR_talkToCli(talkedcharaindex, talkcharaindex, message, color); return 1; } static int TalkToRound(lua_State *L) { size_t l; const int talkedcharaindex = luaL_checkint(L, 1); char *message=luaL_checklstring(L, 2, &l); const int color = getCharBaseValue(L, 3, CharBaseColor, arraysizeof(CharBaseColor)); int fl = CHAR_getInt( talkedcharaindex, CHAR_FLOOR) ; int x = CHAR_getInt( talkedcharaindex, CHAR_X) ; int y = CHAR_getInt( talkedcharaindex, CHAR_Y) ; int i,j; int range = 8; for( i=x-range ; i<=x+range ; i++ ){ for( j=y-range ; j<=y+range ; j++ ){ OBJECT object; for( object = MAP_getTopObj( fl,i,j ) ; object ; object = NEXT_OBJECT(object) ){ int objindex = GET_OBJINDEX(object); int toindex = OBJECT_getIndex( objindex); if( OBJECT_getType(objindex) == OBJTYPE_CHARA && toindex != talkedcharaindex ){ if( CHAR_getInt(toindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER){ typedef void (*TALKF)(int,int,char*,int,int); TALKF talkedfunc=NULL; talkedfunc = (TALKF)CHAR_getFunctionPointer( toindex, CHAR_TALKEDFUNC); if( talkedfunc ) { talkedfunc(toindex, talkedcharaindex, message, color, -1); } } } } } } return 1; } static int WalkPoint(lua_State *L) { const int index = luaL_checkint(L, 1); if( CHAR_getWorkInt( index, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ) return 0; const int x = luaL_checkint(L, 2); const int y = luaL_checkint(L, 3); POINT start, end; start.x = CHAR_getInt( index, CHAR_X); start.y = CHAR_getInt( index, CHAR_Y); end.x = x; end.y = y; int pos = NPC_Util_getDirFromTwoPoint( &start, &end); if( pos != - 1 ) { CHAR_walk( index, pos, 0); } return 1; } static int Walk(lua_State *L) { const int index = luaL_checkint(L, 1); if( CHAR_getWorkInt( index, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ) return 0; const int dir = luaL_checkint(L, 2); const int step = luaL_checkint(L, 3); POINT start, end; start.x = CHAR_getInt( index, CHAR_X); start.y = CHAR_getInt( index, CHAR_Y); end.x = start.x; end.y = start.y; switch(dir){ case 0: { end.x = start.x - step; break; } case 1: { end.x = start.x + step; end.y = start.y - step; break; } case 2: { end.x = start.x + step; break; } case 3: { end.x = start.x + step; end.y = start.y + step; break; } case 4: { end.y = start.y + step; break; } case 5: { end.x = start.x - step; end.y = start.y + step; break; } case 6: { end.y = start.y - step; break; } case 7: { end.x = start.x - step; end.y = start.y - step; break; } } int pos = NPC_Util_getDirFromTwoPoint( &start, &end); if( dir != - 1 ) { CHAR_walk( index, pos, 0); } return 1; } static int BoundRandWalk(lua_State *L) { const int index = luaL_checkint(L, 1); if( CHAR_getWorkInt( index, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ) return 0; const int minX = min(luaL_checkint(L, 2), luaL_checkint(L, 4)); const int minY = min(luaL_checkint(L, 3), luaL_checkint(L, 5)); const int maxX = max(luaL_checkint(L, 2), luaL_checkint(L, 4)); const int maxY = max(luaL_checkint(L, 3), luaL_checkint(L, 5)); POINT start, end; int stepX = (rand() % 10) - 5; int stepY = (rand() % 10) - 5; start.x = CHAR_getInt( index, CHAR_X); start.y = CHAR_getInt( index, CHAR_Y); end.x = start.x + stepX; if(end.x>maxX)end.x=maxX; else if(end.xmaxY)end.y=maxY; else if(end.y -1 ){ CHAR_setCharPet( index, havepetelement, petindex); CHAR_setWorkInt( petindex, CHAR_WORKPLAYERINDEX, index); } lua_pushinteger(L, havepetelement); return 1; } static int getCharPet(lua_State *L) { const int index = luaL_checkint(L, 1); const int havepetid = luaL_checkint(L, 2); lua_pushinteger(L, CHAR_getCharPet( index, havepetid)); return 1; } static int DelItem(lua_State *L) { const int charaindex = luaL_checkint(L, 1); const int itemindex = luaL_checkint(L, 2); CHAR_DelItem( charaindex, itemindex); return 1; } static int getFd(lua_State *L) { const int charaindex = luaL_checkint(L, 1); lua_pushinteger(L, getfdFromCharaIndex(charaindex)); return 1; } static int Updata(lua_State *L) { const int charaindex = luaL_checkint(L, 1); const int indextable = getCharBaseValue(L, 2, CharBaseUpdata, arraysizeof(CharBaseUpdata)); CHAR_send_P_StatusString( charaindex , indextable); return 1; } static int Additem(lua_State *L) { const int charaindex = luaL_checkint(L, 1); const int itemid = luaL_checkint(L, 2); int itemindex = -1; int emptyitemindexinchara = CHAR_findEmptyItemBox( charaindex ); if( emptyitemindexinchara >= 0 ){ itemindex = ITEM_makeItemAndRegist( itemid ); if( itemindex > -1 ){ CHAR_setItemIndex( charaindex, emptyitemindexinchara, itemindex ); ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX, -1); ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX, charaindex); CHAR_sendItemDataOne( charaindex, emptyitemindexinchara); LogItem( CHAR_getChar( charaindex, CHAR_NAME ), CHAR_getChar( charaindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD 在item的log中增加item名称 itemindex, #else atoi( message), #endif "AddItem(制作道具LUA)", CHAR_getInt( charaindex,CHAR_FLOOR), CHAR_getInt( charaindex,CHAR_X ), CHAR_getInt( charaindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); } } lua_pushinteger(L, itemindex); return 1; } static int Finditem(lua_State *L) { const int charaindex = luaL_checkint(L, 1); const int itemid = luaL_checkint(L, 2); int i; int itemindex=-1; int id; for( i=CHAR_STARTITEMARRAY;i> (4 - flg) * 8) & 0xFF); return 1; } static int getLiftTo8(lua_State *L) { const int value = luaL_checkint(L, 1); const int flg = luaL_checkint(L, 2); lua_pushinteger(L, (value << (4 - flg) * 8)); return 1; } static int complianceParameter(lua_State *L) { const int index = luaL_checkint(L, 1); CHAR_complianceParameter(index); return 1; } static int sendStatusString(lua_State *L) { size_t l; const int index = luaL_checkint(L, 1); char *data=luaL_checklstring(L, 2, &l); CHAR_sendStatusString( index, data ); return 1; } static int sendBattleEffect(lua_State *L) { const int index = luaL_checkint(L, 1); const int val = luaL_checkint(L, 2); CHAR_sendBattleEffect( index, val ); return 1; } static int sendWatchEvent(lua_State *L) { const int objindex = luaL_checkint(L, 1); const int action = getCharBaseValue(L, 2, CharBaseAction, arraysizeof(CharBaseAction)); const int flg = luaL_checkint(L, 3); luaL_checktype(L, 4, LUA_TTABLE); int n = luaL_getn(L, 4); int *opt = (int *) malloc(n * sizeof(int)); int i; for(i = 0; i < n; i++){ opt[i] = getArrayInt(L, i); } CHAR_sendWatchEvent( objindex, action, opt, n, flg); return 1; } static int dropPetAbsolute(lua_State *L) { const int index = luaL_checkint(L, 1); const int fl = luaL_checkint(L, 2); const int fx = luaL_checkint(L, 3); const int fy = luaL_checkint(L, 4); const int dir = luaL_checkint(L, 5); const int val = luaL_checkint(L, 6); int dirx[9],diry[9]; int floor, x, y, i; for( i = 0 ; i < 7 ; i ++ ){ dirx[i+2] = CHAR_getDX(dir + i+1); diry[i+2] = CHAR_getDY(dir + i+1); } dirx[0] = CHAR_getDX(dir); diry[0] = CHAR_getDY(dir); dirx[1] = 0; diry[1] = 0; floor = fl; for( i = 0 ; i < 9 ; i ++ ){ int x=fx+dirx[i]; int y=fy+diry[i]; if( PET_isPutPoint( floor, x, y ) == TRUE ) { break; } } if( i == 9 ) i = 1; x = fx+dirx[i]; y = fy+diry[i]; int objindex = PET_dropPetAbsolute( index, floor, x, y, val ); if( objindex == -1 ){ return 1; } CHAR_setWorkInt( index, CHAR_WORKOBJINDEX, objindex ); CHAR_setInt( index, CHAR_FLOOR, floor); CHAR_setInt( index, CHAR_X, x); CHAR_setInt( index, CHAR_Y, y); CHAR_setInt( index, CHAR_PUTPETTIME, NowTime.tv_sec); CHAR_sendCToArroundCharacter( objindex); return 1; } static int AllWarpToSpecificPoint(lua_State *L) { const int charaindex = luaL_checkint(L, 1); const int floor = luaL_checkint(L, 2); const int x = luaL_checkint(L, 3); const int y = luaL_checkint(L, 4); if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE ) == CHAR_PARTY_LEADER ){ int i; for( i = 0; i < CHAR_PARTYMAX; i ++ ){ int subindex = CHAR_getWorkInt( charaindex, CHAR_WORKPARTYINDEX1+i ); if( CHAR_CHECKINDEX( subindex ) == FALSE ) continue; CHAR_warpToSpecificPoint( subindex, floor, x, y ); ITEM_WarpDelErrorItem( subindex ); } }else if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE ) == CHAR_PARTY_CLIENT ){ CHAR_talkToCli(charaindex, -1, "队员无法使用。", CHAR_COLORYELLOW); return FALSE; }else if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE ) == CHAR_PARTY_NONE ){ ITEM_WarpDelErrorItem( charaindex ); CHAR_warpToSpecificPoint( charaindex, floor, x, y ); } return 1; } static int Findpet(lua_State *L) { const int charaindex = luaL_checkint(L, 1); const int petid = luaL_checkint(L, 2); const int lv = luaL_checkint(L, 3); int i; for( i = 0; i < CHAR_MAXPETHAVE; i ++ ){ int petindex = CHAR_getCharPet( charaindex, i ); if(!CHAR_CHECKINDEX( petindex))continue; if( CHAR_getInt(petindex, CHAR_PETID) == petid ){ if(lv > 0){ if( CHAR_getInt(petindex, CHAR_LV) != lv){ continue; } } lua_pushinteger(L, petindex); return 1; } } lua_pushinteger(L, -1); return 1; } static int FindPetFormMatemo(lua_State *L) { const int charaindex = luaL_checkint(L, 1); const int metamo = luaL_checkint(L, 2); const int lv = luaL_checkint(L, 3); int i; for( i = 0; i < CHAR_MAXPETHAVE; i ++ ){ int petindex = CHAR_getCharPet( charaindex, i ); if(!CHAR_CHECKINDEX( petindex))continue; if( CHAR_getInt(petindex, CHAR_BASEBASEIMAGENUMBER) == metamo ){ if(lv > 0){ if( CHAR_getInt(petindex, CHAR_LV) != lv){ continue; } } lua_pushinteger(L, petindex); return 1; } } lua_pushinteger(L, -1); return 1; } static int FindPetFormEnemyTempID(lua_State *L) { size_t l; const int charaindex = luaL_checkint(L, 1); char *data=luaL_checklstring(L, 2, &l); char token[64]; int enemytempid = -1, lv = 0; int i; if(getStringFromIndexWithDelim(data, "-", 1, token, sizeof(token)) == TRUE){ lv = atoi(token); }else{ lua_pushinteger(L, -1); } if(getStringFromIndexWithDelim(data, "-", 2, token, sizeof(token)) == TRUE){ enemytempid = atoi(token); }else{ lua_pushinteger(L, -1); } for( i = 0; i < CHAR_MAXPETHAVE; i ++ ){ int petindex = CHAR_getCharPet( charaindex, i ); if(!CHAR_CHECKINDEX( petindex))continue; if( CHAR_getInt( petindex, CHAR_PETID) == enemytempid ){ if(lv > 0){ if( CHAR_getInt(petindex, CHAR_LV) != lv){ continue; } } lua_pushinteger(L, petindex); return 1; } } lua_pushinteger(L, -1); return 1; } static int DelPet(lua_State *L) { const int charaindex = luaL_checkint(L, 1); const int petindex = luaL_checkint(L, 2); int i; char category[12]; for( i = 0; i < CHAR_MAXPETHAVE; i ++ ){ if( petindex == CHAR_getCharPet( charaindex, i ) ){ if( CHAR_getInt( charaindex, CHAR_RIDEPET) == i ) { CHAR_setInt( charaindex, CHAR_RIDEPET, -1); CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_RIDEPET ); CHAR_complianceParameter( charaindex ); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( charaindex , CHAR_WORKOBJINDEX )); } CHAR_endCharOneArray( petindex ); CHAR_setCharPet( charaindex, i, -1); snprintf( category, sizeof( category), "K%d",i); CHAR_sendStatusString( charaindex, category ); break; } } return 1; } #endif #ifdef _ALLBLUES_LUA_1_7 static int findEmptyItemBox(lua_State *L) { const int charaindex = luaL_checkint(L, 1); lua_pushinteger(L, CHAR_findEmptyItemBox(charaindex)); return 1; } static int findEmptyPetBox(lua_State *L) { const int charaindex = luaL_checkint(L, 1); int num = 0; int i; for( i = 0; i < CHAR_MAXPETHAVE; i ++ ){ int petindex = CHAR_getCharPet( charaindex, i ); if(!CHAR_CHECKINDEX(petindex)){ num ++ ; } } lua_pushinteger(L, num); return 1; } static int dropPetFollow(lua_State *L) { const int charaindex = luaL_checkint(L, 1); const int havepetindex = luaL_checkint(L, 2); char szPet[128]; int dirx[9],diry[9]; int i; int objindex=-1; int floor,x,y; int petindex; if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) return FALSE; petindex = CHAR_getCharPet(charaindex,havepetindex); if( petindex == -1 ) return FALSE; if( !CHAR_CHECKINDEX( charaindex ) )return FALSE; if( CHAR_CHECKINDEX( petindex) == FALSE ) return FALSE; if (CHAR_getInt(petindex, CHAR_PETFAMILY) == 1){ CHAR_talkToCli(charaindex, -1, "家族守护兽无法丢出!", CHAR_COLORYELLOW); return FALSE; } if (CHAR_getInt(charaindex, CHAR_RIDEPET) == havepetindex){ CHAR_talkToCli(charaindex, -1, "骑乘中的宠物无法跟随!", CHAR_COLORYELLOW); return FALSE; } for( i = 0 ; i < 7 ; i ++ ){ dirx[i+2] = CHAR_getDX(CHAR_getInt(charaindex,CHAR_DIR) + i+1); diry[i+2] = CHAR_getDY(CHAR_getInt(charaindex,CHAR_DIR) + i+1); } dirx[0] = CHAR_getDX(CHAR_getInt(charaindex,CHAR_DIR)); diry[0] = CHAR_getDY(CHAR_getInt(charaindex,CHAR_DIR)); dirx[1] = 0; diry[1] = 0; floor = CHAR_getInt( charaindex,CHAR_FLOOR ); for( i = 0 ; i < 9 ; i ++ ){ int x=CHAR_getInt(charaindex,CHAR_X)+dirx[i]; int y=CHAR_getInt(charaindex,CHAR_Y)+diry[i]; if( PET_isPutPoint( floor, x, y ) == TRUE ) { break; } } if( i == 9 ) i = 1; x=CHAR_getInt(charaindex,CHAR_X)+dirx[i]; y=CHAR_getInt(charaindex,CHAR_Y)+diry[i]; objindex = PET_dropPetAbsolute( petindex,floor,x,y, FALSE ); if( objindex == -1 ) return FALSE; CHAR_setWorkInt( petindex,CHAR_WORKOBJINDEX,objindex ); CHAR_setCharPet( charaindex, havepetindex, -1); CHAR_setInt( petindex, CHAR_FLOOR, floor); CHAR_setInt( petindex, CHAR_X, x); CHAR_setInt( petindex, CHAR_Y, y); CHAR_setInt( petindex, CHAR_PUTPETTIME, NowTime.tv_sec); if( havepetindex == CHAR_getInt( charaindex, CHAR_DEFAULTPET)) { int fd; CHAR_setInt( charaindex, CHAR_DEFAULTPET, -1); fd = getfdFromCharaIndex( charaindex); lssproto_KS_send( fd, havepetindex, 0); } CHAR_sendCToArroundCharacter( objindex); if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER){ #ifdef _PET_ITEM CHAR_sendPetItemData( charaindex, havepetindex); #endif snprintf( szPet, sizeof( szPet ), "K%d", havepetindex ); CHAR_sendStatusString( charaindex, szPet ); } CHAR_setWorkInt( charaindex, CHAR_WORKPETFOLLOW, petindex); CHAR_setWorkInt( petindex, CHAR_WORKPETFOLLOWMODE, CHAR_PETFOLLOW_NOW); CHAR_setWorkInt( petindex, CHAR_WORKPETFOLLOWCOUNT, 0); CHAR_setInt( petindex, CHAR_PUTPETTIME, (int)(NowTime.tv_sec)); CHAR_setInt( petindex, CHAR_WORKPLAYERINDEX, charaindex); LogPet( CHAR_getChar( charaindex, CHAR_NAME ), CHAR_getChar( charaindex, CHAR_CDKEY ), CHAR_getChar( petindex, CHAR_NAME), CHAR_getInt( petindex, CHAR_LV), "Follow(lua溜宠)", CHAR_getInt( charaindex,CHAR_FLOOR), CHAR_getInt( charaindex,CHAR_X ), CHAR_getInt( charaindex,CHAR_Y ), CHAR_getChar( petindex, CHAR_UNIQUECODE) ); return 1; } static int getItemIndex(lua_State *L) { const int charaindex = luaL_checkint(L, 1); const int haveitemindex = luaL_checkint(L, 2); lua_pushinteger(L, CHAR_getItemIndex( charaindex, haveitemindex )); return 1; } static int charSaveFromConnect(lua_State *L) { const int charaindex = luaL_checkint(L, 1); if( CHAR_getCharUse(charaindex) != FALSE ){ CHAR_charSaveFromConnect( charaindex, FALSE ); } return 1; } #ifdef _RECORD_IP static int userip(lua_State *L) { const int charaindex = luaL_checkint(L, 1); unsigned long ip; int a,b,c,d; char strIP[32]; ip = CHAR_getWorkInt(charaindex, CHAR_WORK_RECORD_IP); a=(ip % 0x100); ip=ip / 0x100; b=(ip % 0x100); ip=ip / 0x100; c=(ip % 0x100); ip=ip / 0x100; d=(ip % 0x100); sprintf(strIP, "%d.%d.%d.%d", a, b, c, d); lua_pushstring(L, strIP); return 1; } #endif static int DischargeParty(lua_State *L) { const int charaindex = luaL_checkint(L, 1); const int flg = luaL_checkint(L, 2); CHAR_DischargeParty(charaindex, flg); return 1; } static int Skillupsend(lua_State *L) { const int charaindex = luaL_checkint(L, 1); CHAR_Skillupsend(charaindex); return 1; } #endif #ifdef _ALLBLUES_LUA_1_9 static int logou(lua_State *L) { const int charaindex = luaL_checkint(L, 1); CHAR_logout(charaindex, TRUE); return 1; } #endif //void CHAR_WXSYSCMD_setStayEncount(int charaindex, char* message ) #ifdef _ALLBLUES_LUA_2_0 static int Encounter(lua_State *L) { const int charaindex = luaL_checkint(L, 1); if(CHAR_CHECKINDEX(charaindex) == FALSE) return 0; int fd=CHAR_getWorkInt( charaindex, CHAR_WORKFD); setStayEncount(fd); #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 } static int GetOldLevelExp(lua_State *L) { size_t l; const int level = luaL_checkint(L, 1); CHAR_GetOldLevelExp(level); return 1; } #endif #ifdef _AutoBattle_LUA static int gcgc(lua_State *L) { const int charaindex = luaL_checkint(L, 1); Enemy_setStayLoop(charaindex); return 1; } #endif #ifdef _FIX_PLAYER_NPC_PET static int DelNpcPetByIndex(lua_State *L) { const int petindex = luaL_checkint(L, 1); CHAR_endCharOneArray( petindex ); return 1; } #endif static const luaL_Reg charlib[] = { {"getCharNum", getCharNum}, {"getPlayerMaxNum", getPlayerMaxNum}, {"getPetMaxNum", getPetMaxNum}, {"getOthersMaxNum", getOthersMaxNum}, {"check", check}, {"setWorkChar", setWorkChar}, {"getWorkChar", getWorkChar}, {"setWorkInt", setWorkInt}, {"getWorkInt", getWorkInt}, {"setChar", setChar}, {"getChar", getChar}, {"setInt", setInt}, {"getInt", getInt}, {"setFlg", setFlg}, {"getFlg", getFlg}, {"setFunctionPointer", setFunctionPointer}, {"delFunctionPointer", delFunctionPointer}, {"TalkToCli", TalkToCli}, {"TalkToRound", TalkToRound}, {"talkToFloor", talkToFloor}, {"talkToParty", talkToParty}, {"talkToServer", talkToServer}, {"BoundRandWalk", BoundRandWalk}, {"ToAroundChar", ToAroundChar}, #ifdef _ALLBLUES_LUA_1_1 {"Walk", Walk}, {"WalkPoint", WalkPoint}, {"WarpToSpecificPoint", WarpToSpecificPoint}, {"MapAllWarp", MapAllWarp}, {"RandRandWalk", RandRandWalk}, #endif #ifdef _ALLBLUES_LUA_1_3 {"createPet", createPet}, {"setCharPet", setCharPet}, {"getCharPet", getCharPet}, {"DelItem", DelItem}, {"getFd", getFd}, {"Updata", Updata}, {"Additem", Additem}, {"AddPet", AddPet}, {"Finditem", Finditem}, #ifdef _PLAYER_NPC {"setPlayerNpc", setPlayerNpc}, #endif {"Coordinate", Coordinate}, {"setPetSkill", setPetSkill}, {"getPetSkill", getPetSkill}, {"PetLevelUp", PetLevelUp}, {"JoinParty", JoinParty}, #endif #ifdef _ALLBLUES_LUA_1_4 {"getLiftTo8", getLiftTo8}, {"getRightTo8", getRightTo8}, {"complianceParameter", complianceParameter}, {"sendStatusString", sendStatusString}, {"sendBattleEffect", sendBattleEffect}, {"dropPetAbsolute", dropPetAbsolute}, {"AddPetCf", AddPetCf}, {"sendWatchEvent", sendWatchEvent}, {"AllWarpToSpecificPoint",AllWarpToSpecificPoint}, {"Findpet", Findpet}, {"DelPet", DelPet}, {"FindPetFormEnemyTempID",FindPetFormEnemyTempID}, {"FindPetFormMatemo", FindPetFormMatemo}, #endif #ifdef _PETSKILL_SHOP_LUA {"FreePetSkill", FreePetSkill}, #endif #ifdef _ALLBLUES_LUA_1_7 {"findEmptyPetBox", findEmptyPetBox}, {"findEmptyItemBox", findEmptyItemBox}, {"dropPetFollow", dropPetFollow}, {"getItemIndex", getItemIndex}, {"charSaveFromConnect", charSaveFromConnect}, {"DischargeParty", DischargeParty}, {"Skillupsend", Skillupsend}, #ifdef _RECORD_IP {"userip", userip}, #endif #endif #ifdef _ALLBLUES_LUA_1_9 {"logou", logou}, #endif #ifdef _ALLBLUES_LUA_2_0 {"Encounter", Encounter}, {"GetOldLevelExp", GetOldLevelExp}, #endif #ifdef _AutoBattle_LUA {"gcgc", gcgc}, #endif #ifdef _FIX_PLAYER_NPC_PET {"DelNpcPetByIndex", DelNpcPetByIndex}, #endif {NULL, NULL} }; LUALIB_API int luaopen_Char (lua_State *L) { luaL_register(L, "char", charlib); return 1; } #endif