chuyiwen_gmsv/mylua/function.c
chuyiwen bea5ac05b3 sq_gmsv_chuyiwen
sa_sever
2016-12-24 09:45:52 +09:00

1178 lines
25 KiB
C

#include <string.h>
#include "common.h"
#include "char_base.h"
#include "item.h"
#include "configfile.h"
#include "battle.h"
#include "mylua/base.h"
#include "version.h"
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
#include "mylua/mylua.h"
#include "mylua/function.h"
#include "char.h"
#ifdef _ALLBLUES_LUA
extern MY_Lua MYLua;
//lua_State *M_Script_Lua = NULL; //实例句柄
lua_State *FindLua(char *filename)
{
MY_Lua *mylua = &MYLua;
char newfilename[256];
while(mylua->next != NULL){
if(strcmptail( mylua->luapath, ".allblues" ) == 0 ){
sprintf(newfilename, "%s.allblues", filename);
}else{
sprintf(newfilename, "%s", filename);
}
if(strcmp(newfilename, mylua->luapath) == 0){
return mylua->lua;
}
mylua = mylua->next;
}
return NULL;
}
#ifdef _ALLBLUES_LUA_1_9
BOOL EquipEffectFunction( int charaindex, int id )
{
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/equipeffectfunction.lua");
if (lua == NULL)return TRUE;
}
lua_getglobal(lua, "EquipEffectFunction");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return TRUE;
}
//依次放入二个参数
lua_pushnumber(lua,charaindex);
lua_pushnumber(lua,id);
if (lua_pcall(lua, 2, 1, 0) != 0)
error(lua, "error running function `f': %s", lua_tostring(lua, -1));
if (!lua_isnumber(lua, -1))
error(lua, "function `f' must return a number");
int ret = lua_tonumber(lua, -1);
lua_pop(lua, 1);
return ret;
}
BOOL WalkFunction( int charaindex )
{
MY_Lua *mylua = &MYLua;
while(mylua->lua != NULL){
lua_getglobal(mylua->lua, "WalkFunction");
if (!lua_isfunction(mylua->lua, -1)) {
lua_pop(mylua->lua, 1);
mylua = mylua->next;
continue;
}
lua_pushnumber(mylua->lua,charaindex);
if (lua_pcall(mylua->lua, 1, 1, 0) != 0)
error(mylua->lua, "error running function `f': %s", lua_tostring(mylua->lua, -1));
if (!lua_isnumber(mylua->lua, -1))
error(mylua->lua, "function `f' must return a number");
int ret = lua_tonumber(mylua->lua, -1);
lua_pop(mylua->lua, 1);
if(ret == TRUE){
return TRUE;
}
mylua = mylua->next;
}
return FALSE;
}
#ifdef _ITEM_OVER_LAP
BOOL ItemOverlapFunction( int charindex, int fromitemindex, int toitemindex )
{
MY_Lua *mylua = &MYLua;
while(mylua->lua != NULL){
lua_getglobal(mylua->lua, "ItemOverlapFunction");
if (!lua_isfunction(mylua->lua, -1)) {
lua_pop(mylua->lua, 1);
mylua = mylua->next;
continue;
}
//依次放入二个参数
lua_pushnumber(mylua->lua,charindex);
lua_pushnumber(mylua->lua,fromitemindex);
lua_pushnumber(mylua->lua,toitemindex);
lua_pcall(mylua->lua, 3, 1, 0);
lua_isnumber(mylua->lua, -1);
int ret = lua_tonumber(mylua->lua, -1);
lua_pop(mylua->lua, 1);
if(ret == 1){
mylua = mylua->next;
continue;
}
return ret;
}
return TRUE;
}
BOOL ItemOverlapedFunction( int charindex, int fromitemindex, int fromid, int toitemindex, int toid)
{
MY_Lua *mylua = &MYLua;
while(mylua->lua != NULL){
lua_getglobal(mylua->lua, "ItemOverlapedFunction");
if (!lua_isfunction(mylua->lua, -1)) {
lua_pop(mylua->lua, 1);
mylua = mylua->next;
continue;
}
//依次放入二个参数
lua_pushnumber(mylua->lua,charindex);
lua_pushnumber(mylua->lua,fromitemindex);
lua_pushnumber(mylua->lua,fromid);
lua_pushnumber(mylua->lua,toitemindex);
lua_pushnumber(mylua->lua,toid);
docall(mylua->lua, 5, 1);
mylua = mylua->next;
}
return TRUE;
}
#endif
BOOL BattleFinishFunction( int charaindex, int battletime, int battleturn, int battletype )
{
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/battlefinishfunction.lua");
if (lua == NULL)return TRUE;
}
lua_getglobal(lua, "BattleFinishFunction");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return TRUE;
}
//依次放入二个参数
lua_pushnumber(lua,charaindex);
lua_pushnumber(lua,battletime);
lua_pushnumber(lua,battleturn);
lua_pushnumber(lua,battletype);
docall(lua, 4, 1);
return TRUE;
}
BOOL SetBattleEnmeyFunction(int meindex, int enemyindex, int id )
{
lua_State *lua = CHAR_getLUAFunction(meindex, CHAR_BATTLESETFUNC);
if ( lua == NULL) {
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua, meindex);
lua_pushnumber(lua, enemyindex);
lua_pushnumber(lua, id);
docall(lua, 3, 1);
return TRUE;
}
#endif
#ifdef _ALLBLUES_LUA_1_8
BOOL CaptureOkFunction( int attackindex, int defindex )
{
MY_Lua *mylua = &MYLua;
while(mylua->lua != NULL){
lua_getglobal(mylua->lua, "CaptureOkFunction");
if (!lua_isfunction(mylua->lua, -1)) {
lua_pop(mylua->lua, 1);
mylua = mylua->next;
continue;
}
//依次放入二个参数
lua_pushnumber(mylua->lua,attackindex);
lua_pushnumber(mylua->lua,defindex);
docall(mylua->lua, 2, 1);
mylua = mylua->next;
}
return TRUE;
}
BOOL CaptureCheckFunction( int attackindex, int defindex )
{
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/capturefunction.lua");
if (lua == NULL)return TRUE;
}
lua_getglobal(lua, "CaptureCheckFunction");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return TRUE;
}
//依次放入二个参数
lua_pushnumber(lua,attackindex);
lua_pushnumber(lua,defindex);
if (lua_pcall(lua, 2, 1, 0) != 0)
error(lua, "error running function `f': %s", lua_tostring(lua, -1));
if (!lua_isnumber(lua, -1))
error(lua, "function `f' must return a number");
int ret = lua_tonumber(lua, -1);
lua_pop(lua, 1);
return ret;
}
#endif
#ifdef _ALLBLUES_LUA_1_7
BOOL CharVsEnemyFunction( int charaindex )
{
MY_Lua *mylua = &MYLua;
while(mylua->lua != NULL){
lua_getglobal(mylua->lua, "CharVsEnemyFunction");
if (!lua_isfunction(mylua->lua, -1)) {
lua_pop(mylua->lua, 1);
mylua = mylua->next;
continue;
}
lua_pushnumber(mylua->lua,charaindex);
if (lua_pcall(mylua->lua, 1, 1, 0) != 0)
error(mylua->lua, "error running function `f': %s", lua_tostring(mylua->lua, -1));
if (!lua_isnumber(mylua->lua, -1))
error(mylua->lua, "function `f' must return a number");
int ret = lua_tonumber(mylua->lua, -1);
lua_pop(mylua->lua, 1);
if(ret == TRUE){
return TRUE;
}
mylua = mylua->next;
}
return FALSE;
}
#endif
#ifdef _ALLBLUES_LUA_1_6
BOOL CharTalkFunction( int charaindex, char *message, int color )
{
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/chartalkfunction.lua");
if (lua == NULL)return FALSE;
}
lua_getglobal(lua, "CharTalkFunction");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua,charaindex);
lua_pushstring(lua,message);
lua_pushnumber(lua,color);
if (lua_pcall(lua, 3, 1, 0) != 0)
error(lua, "error running function `f': %s", lua_tostring(lua, -1));
if (!lua_isnumber(lua, -1))
error(lua, "function `f' must return a number");
int ret = lua_tonumber(lua, -1);
lua_pop(lua, 1);
return ret;
}
BOOL FamilyRideFunction( int meindex, int petindex, int petid )
{
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/familyridefunction.lua");
if (lua == NULL)return FALSE;
}
lua_getglobal(lua, "FamilyRideFunction");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua,meindex);
lua_pushnumber(lua,petindex);
lua_pushnumber(lua,petid);
if (lua_pcall(lua, 3, 1, 0) != 0)
error(lua, "error running function `f': %s", lua_tostring(lua, -1));
if (!lua_isnumber(lua, -1))
error(lua, "function `f' must return a number");
int ret = lua_tonumber(lua, -1);
lua_pop(lua, 1);
return ret;
}
#endif
#ifdef _ALLBLUES_LUA_1_5
BOOL NetLoopFunction( void )
{
MY_Lua *mylua = &MYLua;
while(mylua->lua != NULL){
lua_getglobal(mylua->lua, "NetLoopFunction");
if (!lua_isfunction(mylua->lua, -1)) {
lua_pop(mylua->lua, 1);
mylua = mylua->next;
continue;
}
docall(mylua->lua, 0, 1);
mylua = mylua->next;
}
return TRUE;
}
BOOL FreeCharCreate( int charaindex )
{
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/freecharcreate.lua");
if (lua == NULL)return FALSE;
}
lua_getglobal(lua, "FreeCharCreate");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua,charaindex);
docall(lua, 1, 1);
return TRUE;
}
BOOL FreeCharLogin( int charaindex )
{
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/freecharlogin.lua");
if (lua == NULL)return FALSE;
}
lua_getglobal(lua, "FreeCharLogin");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua,charaindex);
docall(lua, 1, 1);
return TRUE;
}
BOOL FreeVsPlayer( int charaindex, int toindex )
{
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/freevsplayer.lua");
if (lua == NULL)return FALSE;
}
lua_getglobal(lua, "FreeVsPlayer");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua,charaindex);
lua_pushnumber(lua,toindex);
if (lua_pcall(lua, 2, 1, 0) != 0)
error(lua, "error running function `f': %s", lua_tostring(lua, -1));
if (!lua_isnumber(lua, -1))
error(lua, "function `f' must return a number");
int ret = lua_tonumber(lua, -1);
lua_pop(lua, 1);
return ret;
}
BOOL FreePartyJoin( int charaindex, int toindex )
{
MY_Lua *mylua = &MYLua;
while(mylua->lua != NULL){
lua_getglobal(mylua->lua, "FreePartyJoin");
if (!lua_isfunction(mylua->lua, -1)) {
lua_pop(mylua->lua, 1);
mylua = mylua->next;
continue;
}
//依次放入二个参数
lua_pushnumber(mylua->lua,charaindex);
lua_pushnumber(mylua->lua,toindex);
if (lua_pcall(mylua->lua, 2, 1, 0) != 0)
error(mylua->lua, "error running function `f': %s", lua_tostring(mylua->lua, -1));
if (!lua_isnumber(mylua->lua, -1))
error(mylua->lua, "function `f' must return a number");
int ret = lua_tonumber(mylua->lua, -1);
lua_pop(mylua->lua, 1);
if(ret == FALSE){
return FALSE;
}
mylua = mylua->next;
}
return TRUE;
}
#endif
#ifdef _ALLBLUES_LUA_1_4
BOOL RunCharLogOutEvent( int charaindex)
{
lua_State *lua = CHAR_getLUAFunction(charaindex, CHAR_LOGINOUTFUNC);
if ( lua == NULL) {
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua, charaindex);
docall(lua, 1, 1);
return TRUE;
}
BOOL BattleFinish( int battleindex, int charaindex)
{
lua_State *lua = BATTLE_getLUAFunction(battleindex, BATTLE_FINISH);
if ( lua == NULL) {
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua, charaindex);
docall(lua, 1, 1);
return TRUE;
}
BOOL BattleEscape( int battleindex, int charaindex)
{
lua_State *lua = BATTLE_getLUAFunction(battleindex, BATTLE_ESCAPE);
if ( lua == NULL) {
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua, charaindex);
docall(lua, 1, 1);
return TRUE;
}
#endif
/*
#ifdef _OFFLINE_SYSTEM
BOOL OffLineCommand( int battleindex, int charaindex, int side)
{
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/offlinecommand.lua");
if (lua == NULL)return FALSE;
}
lua_getglobal(lua, "OffLineCommand");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return TRUE;
}
//依次放入三个参数
lua_pushnumber(lua,battleindex);
lua_pushnumber(lua,charaindex);
lua_pushnumber(lua,side);
docall(lua, 3, 1);
return TRUE;
}
#endif
*/
#ifdef _PETSKILL_SHOP_LUA
BOOL FreePetSkillShop( int talkerindex, int petindex, int oldSkillID, int newSkillID)
{
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/freepetskillshop.lua");
if (lua == NULL)return TRUE;
}
lua_getglobal(lua, "FreePetSkillShop");
if (!lua_isfunction(lua, -1)) {
return TRUE;
}
//依次放入三个参数
lua_pushnumber(lua,talkerindex);
lua_pushnumber(lua,petindex);
lua_pushnumber(lua,oldSkillID);
lua_pushnumber(lua,newSkillID);
if (lua_pcall(lua, 4, 1, 0) != 0)
error(lua, "error running function `f': %s", lua_tostring(lua, -1));
if (!lua_isnumber(lua, -1))
error(lua, "function `f' must return a number");
int ret = lua_tonumber(lua, -1);
lua_pop(lua, 1);
return ret;
}
#endif
#ifdef _ALLBLUES_LUA_1_2
BOOL RunUseChatMagic( int charaindex, char *data, lua_State *lua)
{
if(lua == NULL)return FALSE;
//依次放入二个参数
lua_pushnumber(lua, charaindex);
lua_pushstring(lua, data);
docall(lua, 2, 1);
return TRUE;
}
BOOL RunItemUseEvent( int itemindex, int charaindex, int toindex, int haveitemindex )
{
lua_State *lua = ITEM_getLUAFunction(itemindex, ITEM_USEFUNC);
if ( lua == NULL) {
return FALSE;
}
//依次放入四个参数
lua_pushnumber(lua, itemindex);
lua_pushnumber(lua, charaindex);
lua_pushnumber(lua, toindex);
lua_pushnumber(lua, haveitemindex);
docall(lua, 4, 1);
return TRUE;
}
BOOL RunItemDieReLifeEvent( int charaindex, int itemindex, int haveitemindex )
{
lua_State *lua = ITEM_getLUAFunction(itemindex, ITEM_DIERELIFEFUNC);
if ( lua == NULL) {
return FALSE;
}
//依次放入三个参数
lua_pushnumber(lua, charaindex);
lua_pushnumber(lua, itemindex);
lua_pushnumber(lua, haveitemindex);
docall(lua, 3, 1);
return TRUE;
}
BOOL RunItemDetachEvent( int charaindex, int itemindex )
{
lua_State *lua = ITEM_getLUAFunction(itemindex, ITEM_DETACHFUNC);
if ( lua == NULL) {
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua, charaindex);
lua_pushnumber(lua, itemindex);
docall(lua, 2, 1);
return TRUE;
}
BOOL RunItemAttachEvent( int charaindex, int itemindex )
{
lua_State *lua = ITEM_getLUAFunction(itemindex, ITEM_ATTACHFUNC);
if ( lua == NULL) {
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua, charaindex);
lua_pushnumber(lua, itemindex);
docall(lua, 2, 1);
return TRUE;
}
BOOL RunItemPickupEvent( int charaindex, int itemindex )
{
lua_State *lua = ITEM_getLUAFunction(itemindex, ITEM_PICKUPFUNC);
if ( lua == NULL) {
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua, charaindex);
lua_pushnumber(lua, itemindex);
docall(lua, 2, 1);
return TRUE;
}
BOOL RunItemPostOverEvent( int itemindex, int charaindex )
{
lua_State *lua = ITEM_getLUAFunction(itemindex, ITEM_POSTOVERFUNC);
if ( lua == NULL) {
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua, charaindex);
lua_pushnumber(lua, itemindex);
docall(lua, 2, 1);
return TRUE;
}
BOOL RunItemPreOverEvent( int itemindex, int charaindex )
{
lua_State *lua = ITEM_getLUAFunction(itemindex, ITEM_PREOVERFUNC);
if ( lua == NULL) {
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua, charaindex);
lua_pushnumber(lua, itemindex);
docall(lua, 2, 1);
return TRUE;
}
BOOL RunItemDropEvent( int charaindex, int itemindex )
{
lua_State *lua = ITEM_getLUAFunction(itemindex, ITEM_DROPFUNC);
if ( lua == NULL) {
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua, charaindex);
lua_pushnumber(lua, itemindex);
docall(lua, 2, 1);
return TRUE;
}
#endif
BOOL RunCharTalkedEvent(int meindex, int toindex, char *messageeraseescape, int color, int channel)
{
lua_State *lua = CHAR_getLUAFunction(meindex, CHAR_TALKEDFUNC);
if ( lua == NULL) {
return FALSE;
}
//依次放入五个参数
lua_pushnumber(lua,meindex);
lua_pushnumber(lua,toindex);
lua_pushstring(lua,messageeraseescape);
lua_pushnumber(lua,color);
lua_pushnumber(lua,channel);
docall(lua, 5, 1);
return TRUE;
}
BOOL RunCharLoopEvent(int meindex)
{
lua_State *lua = CHAR_getLUAFunction(meindex, CHAR_LOOPFUNC);
if ( lua == NULL) {
return FALSE;
}
//依次放入一个参数
lua_pushnumber(lua,meindex);
docall(lua, 1, 1);
return TRUE;
}
BOOL RunCharOverlapEvent( int meindex, int toindex)
{
lua_State *lua = CHAR_getLUAFunction(meindex, CHAR_OVERLAPEDFUNC);
if ( lua == NULL) {
return FALSE;
}
//依次放入二个参数
lua_pushnumber(lua, meindex);
lua_pushnumber(lua, toindex);
docall(lua, 2, 1);
return TRUE;
}
BOOL RunCharBattleOverEvent( int meindex, int battleindex, int iswin)
{
lua_State *lua = CHAR_getLUAFunction(meindex, CHAR_BATTLEOVERDFUNC);
if ( lua == NULL) {
return FALSE;
}
//依次放入三个参数
lua_pushnumber(lua, meindex);
lua_pushnumber(lua, battleindex);
lua_pushnumber(lua, iswin);
docall(lua, 3, 1);
return TRUE;
}
BOOL RunCharWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data)
{
lua_State *lua = CHAR_getLUAFunction(meindex, CHAR_WINDOWTALKEDFUNC);
if ( lua == NULL) {
return FALSE;
}
//依次放入五个参数
lua_pushnumber(lua, meindex);
lua_pushnumber(lua, talkerindex);
lua_pushnumber(lua, seqno);
lua_pushnumber(lua, select);
lua_pushstring(lua, data);
docall(lua, 5, 1);
return TRUE;
}
BOOL fameButton( int index)
{
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/fameButton.lua");
if (lua == NULL)return FALSE;
}
lua_getglobal(lua, "fameButton");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return FALSE;
}
//依次放入1个参数
lua_pushnumber(lua,index);
if (lua_pcall(lua, 1, 1, 0) != 0)
error(lua, "error running function `f': %s", lua_tostring(lua, -1));
BOOL ret = (BOOL)lua_toboolean(lua, -1);
lua_pop(lua, 1);
return ret;
}
#ifdef _ALLBLUES_LUA_2_0
BOOL FreeModeExp(int charaindex, int exp )
{
//printf("exp【1】 = %d \n",exp);
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/freemodeexp.lua");
if (lua == NULL)return FALSE;
}
lua_getglobal(lua, "FreeModeExp");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return TRUE;
}
int TM_Ret = 0;
lua_pushnumber(lua,charaindex);
lua_pushinteger(lua, (lua_Integer)exp);
TM_Ret = lua_pcall(lua, 2, 0, 0);
if(TM_Ret != 0)
{
print("FreeCharExpSave Lua Err :%d(%s)\n", TM_Ret, lua_tostring(lua, -1));
lua_pop(lua, 1);
exp = &TM_Ret;
return exp;
}
}
/*
BOOL FreeModeExp(int charaindex,int* addexp, int getexp, int modexp )
{
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/freemodeexp.lua");
if (lua == NULL)return FALSE;
}
lua_getglobal(lua, "FreeModeExp");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return TRUE;
}
lua_pushnumber(lua,charaindex);
lua_pushnumber(lua,getexp);
lua_pushnumber(lua,modexp);
if (lua_pcall(lua, 3, 1, 0) != 0)
error(lua, "error running function `f': %s", lua_tostring(lua, -1));
if (!lua_isnumber(lua, -1))
error(lua, "function `f' must return a number");
int ret = -1;
ret = lua_tonumber(lua, -1);
lua_pop(lua, 1);
if(ret == -1 || ret == 0 ) return FALSE;
else{
addexp = &ret;
return TRUE;
}
}
*/
/*BOOL FreeLoginCheck(int fd)
{
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/freelogincheck.lua");
if (lua == NULL)return FALSE;
}
lua_getglobal(lua, "FreeLoginCheck");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return FALSE;
}
lua_pushnumber(lua,fd);
if (lua_pcall(lua, 1, 1, 0) != 0)
error(lua, "error running function `f': %s", lua_tostring(lua, -1));
BOOL ret = (BOOL)lua_toboolean(lua, -1);
lua_pop(lua, 1);
return ret;
}
*/
#ifdef _CAX_ESC_REPORT
void report1( int charaindex ){
int fd,itemindex,emptyitemindexinchara,count,countReport = 0,i;
char token[256];
if( (fd = getfdFromCharaIndex( charaindex)) == -1 ) return;
if(CHAR_getInt(charaindex,CHAR_TRANSMIGRATION) < getReportTa() ||
(CHAR_getInt(charaindex,CHAR_TRANSMIGRATION) >= getReportTa() && CHAR_getInt(charaindex,CHAR_LV) < getReportLv())){
sprintf( token, "\n\n\n 每日签到只针对于%d转%d级以上的玩家开放。", getReportTa(),getReportLv());
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,WINDOW_BUTTONTYPE_OK,-1,-1,token);
return;
}
//判断是否签到
int day;
time_t t;
struct tm *local;
t=time(NULL);
local=localtime(&t);
day = (local->tm_year+1900) * 10000 + (local->tm_mon+1) * 100 + local->tm_mday;
if(CHAR_getInt(charaindex,CHAR_REPORT) == day){//已经签到
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,WINDOW_BUTTONTYPE_OK,-1,-1,"\n\n\n 你今天已经签到过了,请明天再来。");
return;
}
//========普通玩家签到=========
if(CHAR_getInt( charaindex , CHAR_VIPRIDE)== 0){
//获得玩家背包空格数
count = CHAR_findSurplusItemBox( charaindex );
//获得赠送物品数
for (i = 0; i < 10; i++) {
if(getReportItem(i) !=-1){
countReport++;
}
}
if(count < countReport){
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,WINDOW_BUTTONTYPE_OK,-1,-1,"\n\n\n 空间栏位不足。");
return;
}
for (i = 0; i < 10; i++) {
if(getReportItem(i) !=-1){
#ifdef _ITEM_UP
itemindex = ITEM_makeItemAndRegist( getReportItem(i) , charaindex);//获取一个道具索引
#else
itemindex = ITEM_makeItemAndRegist( getReportItem(i) );//获取一个道具索引
#endif
if( itemindex != -1 ){
emptyitemindexinchara = CHAR_findEmptyItemBox( charaindex );//获取背包空间
if( emptyitemindexinchara < 0 ){
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,WINDOW_BUTTONTYPE_OK,-1,-1,"\n\n\n 空间栏位不足。");
return;
}
CHAR_setItemIndex(charaindex, emptyitemindexinchara, itemindex );
ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX,-1);
ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX,charaindex);
CHAR_sendItemDataOne( charaindex, emptyitemindexinchara);
sprintf( token, "获得%s。", ITEM_getChar( itemindex, ITEM_NAME));
CHAR_talkToCli( charaindex, -1, token, CHAR_COLORYELLOW);
CHAR_setInt(charaindex,CHAR_REPORT,day);
}
}
}
}else{
//========VIP玩家签到=========
//获得玩家背包空格数
count = CHAR_findSurplusItemBox( charaindex );
//获得赠送物品数
for (i = 0; i < 10; i++) {
if(getVipReportItem(i) !=-1){
countReport++;
}
}
if(count < countReport){
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,WINDOW_BUTTONTYPE_OK,-1,-1,"\n\n\n 空间栏位不足。");
return;
}
for (i = 0; i < 10; i++) {
if(getVipReportItem(i) !=-1){
#ifdef _ITEM_UP
itemindex = ITEM_makeItemAndRegist( getVipReportItem(i) , charaindex );//获取一个道具索引
#else
itemindex = ITEM_makeItemAndRegist( getVipReportItem(i) );//获取一个道具索引
#endif
if( itemindex != -1 ){
emptyitemindexinchara = CHAR_findEmptyItemBox( charaindex );//获取背包空间
if( emptyitemindexinchara < 0 ){
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,WINDOW_BUTTONTYPE_OK,-1,-1,"\n\n\n 空间栏位不足。");
return;
}
CHAR_setItemIndex(charaindex, emptyitemindexinchara, itemindex );
ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX,-1);
ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX,charaindex);
CHAR_sendItemDataOne( charaindex, emptyitemindexinchara);
sprintf( token, "拿到%s。", ITEM_getChar( itemindex, ITEM_NAME));
CHAR_talkToCli( charaindex, -1, token, CHAR_COLORYELLOW);
CHAR_setInt(charaindex,CHAR_REPORT,day);
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,WINDOW_BUTTONTYPE_OK,-1,-1,"\n\n\n 签到成功,欢迎你明天再来签到。");
}
}
}
}
CHAR_charSaveFromConnect(fd,FALSE);
}
#endif
#ifdef _CAX_ESC_SAVE_DATA
void SaveData(int charaindex){
int fd;
if( (fd = getfdFromCharaIndex( charaindex)) == -1 ) return;
//int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX);
CHAR_charSaveFromConnect(charaindex,FALSE);
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,WINDOW_BUTTONTYPE_OK,-1,-1,"\n\n自动存档成功。");
}
#endif
BOOL FreeSamenu(int* function,int id, int charaindex )
{
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/freesamenu.lua");
if (lua == NULL)return TRUE;
}
lua_getglobal(lua, "ESC_Recv");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return TRUE;
}
int TM_Ret = 0;
#ifdef _CAX_ESC_REPORT
if ( id == 6){
report1(charaindex);
//CHAR_talkToCli(charaindex,-1,"测试是否可以内部执行",CHAR_COLORRED);
return;
}
#endif
#ifdef _CAX_ESC_SAVE_DATA
if ( id == 7){
SaveData(charaindex);
//CHAR_talkToCli(charaindex,-1,"测试是否可以内部执行",CHAR_COLORRED);
return;
}
#endif
//依次放入二个参数
//lua_pushstring(lua,message);
lua_getglobal(lua, (const char*)function);
lua_pushinteger(lua, (lua_Integer)id);
lua_pushnumber(lua,charaindex);
TM_Ret = lua_pcall(lua, 2, 0, 0);
if(TM_Ret != 0)
{
print("NPC_Lua_ESC_Recv Lua Err :%d(%s)\n", TM_Ret, lua_tostring(lua, -1));
lua_pop(lua, 1);
return;
}
}
/*
BOOL TeacherButton(int* function,int charaindex )
{
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/TeacherButton.lua");
if (lua == NULL)return TRUE;
}
lua_getglobal(lua, "TeacherButton");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return TRUE;
}
int TM_Ret = 0;
//依次放入二个参数
//lua_pushstring(lua,message);
lua_getglobal(lua, (const char*)function);
lua_pushinteger(lua, (lua_Integer)charaindex);
TM_Ret = lua_pcall(lua, 1, 0, 0);
if(TM_Ret != 0)
{
print("TeacherButton Lua Err :%d(%s)\n", TM_Ret, lua_tostring(lua, -1));
lua_pop(lua, 1);
return;
}
}
*/
BOOL FreeCharExpSave(int charaindex, int exp )
{
//printf("exp【1】 = %d \n",exp);
static lua_State *lua;
if (lua == NULL){
lua = FindLua("data/ablua/freecharexpsave.lua");
if (lua == NULL)return FALSE;
}
lua_getglobal(lua, "FreeCharExpSave");
if (!lua_isfunction(lua, -1)) {
lua_pop(lua, 1);
return TRUE;
}
int TM_Ret = 0;
lua_pushnumber(lua,charaindex);
lua_pushinteger(lua, (lua_Integer)exp);
TM_Ret = lua_pcall(lua, 2, 0, 0);
if(TM_Ret != 0)
{
print("FreeCharExpSave Lua Err :%d(%s)\n", TM_Ret, lua_tostring(lua, -1));
lua_pop(lua, 1);
return;
}
}
#endif
#endif