#define _RECV_C_ #include "version.h" #include "main.h" #include "saacproto_util.h" #include "saacproto_serv.h" #include "recv.h" #include "char.h" #include "db.h" #include "mail.h" #include "main.h" #include "lock.h" #include "util.h" #ifdef _SASQL #include "sasql.h" #endif #ifdef _OLDPS_TO_MD5PS #include "md5.h" #endif // CoolFish: Family 2001/5/9 #include "acfamily.h" #include "version.h" #include #include char retdata[CHARDATASIZE]; char result[CHARDATASIZE]; extern gmsv gs[MAXCONNECTION]; // Spock +1 2000/11/1 #define MAX_PROCESS 16777216 #if _ATTESTAION_ID == 1 void saacproto_ACServerLogin_recv( int ti, int id, char* servername , char* serverpas ) { login_game_server( ti , id, servername , serverpas, result , sizeof( result ) , retdata , sizeof( retdata )); saacproto_ACServerLogin_send( ti ,result ,retdata ); } #else void saacproto_ACServerLogin_recv( int ti,char* servername , char* serverpas ) { login_game_server( ti , servername , serverpas, result , sizeof( result ) , retdata , sizeof( retdata )); saacproto_ACServerLogin_send( ti ,result ,retdata ); } #endif /* 必□丞扔□田□互失市它件玄扔□田□井日夫弘失它玄允月[ int fd : 覆擂socket */ void saacproto_ACServerLogout_recv( int ti ) { logout_game_server( ti ); } void saacproto_ACCharLoad_recv( int ti,char* id,char* pas,char* charname , int lock,char* opt , int mesgid) { if( !is_game_server_login(ti) )return; // Spock 2000/10/31 static int process = 0; char buf[16]; // Spock end #ifdef _NewSave int charindex = -1; #endif #ifdef _SASQL if (sasql_query(id,pas)!=1){ #ifdef _NewSave saacproto_ACCharLoad_send( ti , FAILED , "not login" , mesgid, charindex ); #else saacproto_ACCharLoad_send( ti , FAILED , "not login" , mesgid ); #endif return; } #endif if( !is_game_server_login( ti ) ){ #ifdef _NewSave saacproto_ACCharLoad_send( ti , FAILED , "not login" , mesgid, charindex ); #else saacproto_ACCharLoad_send( ti , FAILED , "not login" , mesgid ); #endif return; } process++; if ( process > MAX_PROCESS ) process = 1; snprintf( buf , sizeof(buf) , "%d" , process ); charLoadCallback(ti,0,id,pas,charname,buf,"",lock,mesgid); // Spock 2000/10/31 //log( "读取档案: 附加作业 %s %s, 进程=%d\n", id,pas,process ); // Spock end } /* 平乓仿忡绣 char *id : ID char *pas : 天允歹□升 char *charname : 平乓仿 char *opt : 左皿扑亦件 侬 [ CharList及午五卞丢乒午仄化忒允树 char *charinfo : 白央奶伙卞忡绣允月平乓仿弁正及旦 □正旦树 [ int id : 丢永本□斥id */ #ifdef _NewSave void saacproto_ACCharSave_recv( int ti, char* id, char *charname,char* opt , char* charinfo , int unlock , int mesgid , int charindex ) #else void saacproto_ACCharSave_recv( int ti, char* id, char *charname,char* opt , char* charinfo , int unlock , int mesgid ) #endif { char process[16]; int ret; if( !is_game_server_login(ti) ){ saacproto_ACCharSave_send( ti , FAILED , "not login" , mesgid ); return; } #ifdef _NewSave ret = charSave( ti, id, charname, opt, charinfo, unlock,mesgid, charindex ); #else ret = charSave( ti, id, charname, opt, charinfo, unlock,mesgid ); #endif snprintf( process , sizeof(process) , "%d" , ret ); // log( "unlock:%d, process:%s\n", unlock, process); if( unlock) { dummyCallback(ti,0,id,"dummy",charname,process,"",mesgid,0); } // log("玩家已保存保存\n"); } void saacproto_ACCharList_recv( int ti,char* id,char* pas ,char* ip,char* mac , int mesgid,int charlistflg) { if( !is_game_server_login(ti) )return; static int process=0; char buf[10]; //log(" get_charlist "); process++; if (process > MAX_PROCESS) process=1; snprintf(buf, sizeof(buf), "%d", process); if( !is_game_server_login( ti ) ){ saacproto_ACCharList_send( ti , FAILED , "无法登陆游戏!" , mesgid ); return; } #ifdef _SASQL if (strlen(id)==0 || strlen(pas)==0){ saacproto_ACCharList_send( ti , FAILED , "账号密码不能为空!" , mesgid ); return; } if (sasql_chehk_lock(id)){ saacproto_ACCharList_send( ti , FAILED , "你的游戏账号被锁定,无法登陆!" , mesgid ); return; } int res=sasql_query(id, pas); if (res==3){ #ifdef _SQL_REGISTER if(!sasql_register(id, pas)) #endif { saacproto_ACCharList_send( ti , FAILED , "您的账号尚未注册,请登陆服务器官网进行注册!" , mesgid ); return; } }else if (res!=1){ #ifdef _ITEM_PET_LOCKED int res2=sasql_ItemPetLocked_Char(id, pas); printf("res2=%d\n",res2); if(res2!=1) #endif { saacproto_ACCharList_send( ti , FAILED , "您的账号或密码错误!" , mesgid ); return; } } if (strlen(id)==0 || strlen(pas)==0 || strlen(ip)==0){ printf("登陆信息有错误!\n"); saacproto_ACCharList_send( ti , FAILED , "账号或密码不能为空!" , mesgid ); return; } if (sasql_chehk_lock(id)){ printf("该账号%s禁止登陆!\n",id); saacproto_ACCharList_send( ti , FAILED , "你的游戏账号被锁定,无法登陆!" , mesgid ); return; } if (sasql_chehk_lock(ip)){ printf("该IP%s禁止登陆!\n",ip); saacproto_ACCharList_send( ti , FAILED , "你的游戏IP已被锁定,无法登陆!", mesgid ); return; } if(strlen(mac)>0){ if (sasql_chehk_lock(mac)){ printf("该MAC%s禁止登陆!\n",ip); saacproto_ACCharList_send( ti , FAILED , "你的游戏IP已被锁定,无法登陆!", mesgid ); return; } } #endif charListCallback(ti,0,id,pas,"",buf,"0",mesgid,0,charlistflg); log( "档案列表: %s\n", id ); } void saacproto_ACCharDelete_recv( int ti,char* id,char* pas, char* charname , char *option , int mesgid) { if( !is_game_server_login(ti) ){ saacproto_ACCharDelete_send( ti , FAILED , "not delete" , mesgid ); return; } #ifdef _ITEM_PET_LOCKED if(sasql_ItemPetLocked_Char(id, pas)==-1){ saacproto_ACCharDelete_send( ti , FAILED , "not delete" , mesgid ); return; } #endif // Nuke charDeleteCallback(ti,0,id,pas,charname,"0","",mesgid,0); log( "档案删除: 附加作业 %s %s\n",id , pas ); } void saacproto_ACLock_recv( int ti ,char* id,int lock,int mesgid ) { if( !is_game_server_login(ti) ){ saacproto_ACLock_send( ti , FAILED , "not delete" , mesgid ); return; } // Arminius 7.25 test unlock log("ACLock recv:%d\n",lock); if (lock==2) { char buf[4096]; if (GetMemLockState(getHash(id) & 0xff, id, buf)) { sprintf(retdata, "USRLOCKED:%s", buf); } else { sprintf(retdata, "USRUNLOCKED:%s", buf); } log(retdata); } else if (lock==3) { int proc; if (DeleteMemLock(getHash(id) & 0xff, id, &proc)) { sprintf(retdata, "GMUNLOCKSUCCESS"); } else { sprintf(retdata, "GMUNLOCKFAIL"); } log(retdata); } else if (lock==4) { DeleteMemLockServer(id); sprintf(retdata, "GMUNLOCKALL"); } else { #ifdef _LOCK_ADD_NAME if ( lockUser( getGSName( ti ) , id , "" , "0" , lock , result,sizeof(result), retdata ,sizeof( retdata ) , "0" , "0") < 0 ) { #else if ( lockUser( getGSName( ti ) , id , "0" , lock , result,sizeof(result), retdata ,sizeof( retdata ) , "0" , "0") < 0 ) { #endif log( "锁定用户: %s 失败\n" , id ); } else { log( "锁定用户: %s 成功\n" , id ); } } // Spock end saacproto_ACLock_send( ti , result , retdata , mesgid ); } void saacproto_ACUCheck_recv( int ti , char *id , int status ) { if( !is_game_server_login(ti) ){ log( "服务器发现账号:%s status:%d\n", id, status ); return; } if( status == 0 ){ log( "用户 %s 在 %s 并未锁定!\n", id , getGSName( ti ) ); saacproto_ACKick_recv( ti, id, 6, -1); } else { log( "用户 %s 在 %s 已锁定!\n", id , getGSName( ti ) ); #ifdef _WAEI_KICK saacproto_ACKick_recv( ti, id, 1, -1); #endif } } void saacproto_DBUpdateEntryString_recv( int fd, char* table, char* key, char* value, int msgid, int msgid2 ) { int r; r = dbUpdateEntryString( table, key, value ); if( r != 0 ){ log( "failed: DBUpdateEntryString err !!\n"); } /* 2003/06/26 if( r == 0 ){ // saacproto_DBUpdateEntryString_send( fd, SUCCESSFUL,table,key, msgid,msgid2 ); } else { // saacproto_DBUpdateEntryString_send( fd, FAILED,table,key, msgid,msgid2 ); } */ } void saacproto_DBDeleteEntryString_recv( int fd, char* table, char* key, int msgid, int msgid2 ) { int r; r = dbDeleteEntryString( table,key ); if( r == 0 ){ saacproto_DBDeleteEntryString_send( fd,SUCCESSFUL,table,key, msgid,msgid2 ); } else { saacproto_DBDeleteEntryString_send( fd,FAILED,table,key, msgid,msgid2 ); } } void saacproto_DBGetEntryString_recv( int fd, char* table, char* key, int msgid, int msgid2 ) { /* char output[16384]; int r; r = dbGetEntryString( table, key, output, sizeof( output) ); if( r == 0 ){ saacproto_DBGetEntryString_send( fd,SUCCESSFUL,output,table,key, msgid,msgid2 ); } else { saacproto_DBGetEntryString_send( fd,FAILED,"",table,key, msgid,msgid2 ); } */ } void saacproto_DBUpdateEntryInt_recv( int fd, char* table, char* key, int value, char *info, int msgid, int msgid2) { if( !is_game_server_login(fd) ){ saacproto_DBUpdateEntryInt_send( fd, FAILED, "","",msgid, msgid2 ); return; } if( dbUpdateEntryInt( table , key , value, info ) == 0 ){ saacproto_DBUpdateEntryInt_send( fd , SUCCESSFUL ,table,key, msgid, msgid2 ); } else { saacproto_DBUpdateEntryInt_send( fd , FAILED , table,key, msgid, msgid2 ); } } #ifdef _ALLDOMAN // (不可开) Syu ADD 排行榜NPC void saacproto_UpdataStele_recv( int fd , char *cdkey , char *name , char *title , int level , int trns , int time , int floor ) { int i, min=140, minnum=-1, nameflag=-1; for ( i=0; i atoi(Herolist[nameflag][6]) ) { Send_S_herolist ( Herolist[nameflag][0] , Herolist[nameflag][1] , cdkey , name , title , level , trns , floor ) ; sprintf ( Herolist[nameflag][2] , "%s" , title ) ; sprintf ( Herolist[nameflag][3] , "%d" , level ) ; sprintf ( Herolist[nameflag][4] , "%d" , trns ) ; sprintf ( Herolist[nameflag][5] , "%d" , time ) ; sprintf ( Herolist[nameflag][6] , "%d" , floor ) ; SAVE_herolist( fd ); }else if ( nameflag == -1 && floor > min ) { Send_S_herolist ( Herolist[minnum][0] , Herolist[minnum][1] , cdkey , name , title , level , trns , floor ) ; sprintf ( Herolist[minnum][0] , "%s" , cdkey ) ; sprintf ( Herolist[minnum][1] , "%s" , name ) ; sprintf ( Herolist[minnum][2] , "%s" , title ) ; sprintf ( Herolist[minnum][3] , "%d" , level ) ; sprintf ( Herolist[minnum][4] , "%d" , trns ) ; sprintf ( Herolist[minnum][5] , "%d" , time ) ; sprintf ( Herolist[minnum][6] , "%d" , floor ) ; SAVE_herolist( fd ); } } #endif void saacproto_DBGetEntryRank_recv( int fd, char* table, char* key, int msgid, int msgid2) { int rk,c; if( !is_game_server_login(fd) ){ saacproto_DBGetEntryRank_send( fd, FAILED, 0,0,"","",msgid, msgid2 ); return; } dbGetEntryRank( table, key , &rk, &c ); if( rk <0 ){ saacproto_DBGetEntryRank_send( fd, FAILED, -1, -1, table, key, msgid, msgid2 ); } else { saacproto_DBGetEntryRank_send( fd, SUCCESSFUL, rk, c, table, key, msgid, msgid2 ); } } void saacproto_DBDeleteEntryInt_recv( int fd, char* table, char* key, int msgid, int msgid2) { if( !is_game_server_login(fd) ){ saacproto_DBDeleteEntryInt_send( fd, FAILED,"","",msgid, msgid2 ); return; } if( dbDeleteEntryInt( table, key ) < 0 ){ saacproto_DBDeleteEntryInt_send( fd, FAILED, table, key, msgid, msgid2 ); } else { saacproto_DBDeleteEntryInt_send( fd, SUCCESSFUL, table, key, msgid, msgid2 ); } } void saacproto_DBGetEntryInt_recv( int fd, char* table, char* key, int msgid, int msgid2) { int r ; int output; if( !is_game_server_login(fd) ){ saacproto_DBGetEntryInt_send( fd, FAILED,-1,"","",msgid, msgid2 ); return; } r = dbGetEntryInt( table, key, &output ); if( r < 0 ){ saacproto_DBGetEntryInt_send( fd, FAILED, -1, table, key, msgid, msgid2); } else { saacproto_DBGetEntryInt_send( fd, SUCCESSFUL, output, table, key, msgid, msgid2 ); } } void saacproto_DBGetEntryByRank_recv( int fd, char* table, int start, int end, int msgid , int msgid2) { char output[16384]; int r; if( !is_game_server_login(fd) ){ saacproto_DBGetEntryByRank_send( fd, FAILED,"","",msgid, msgid2 ); return; } r = dbGetEntryRankRange( table, start, end, output, sizeof( output )); if( r < 0 ){ saacproto_DBGetEntryByRank_send( fd, FAILED, "", table, msgid, msgid2 ); } else { saacproto_DBGetEntryByRank_send( fd, SUCCESSFUL, output,table, msgid, msgid2 ); } } void saacproto_DBGetEntryByCount_recv( int fd, char* table, int count_start, int num, int msgid , int msgid2) { char output[16384]; int r; if( !is_game_server_login(fd) ){ saacproto_DBGetEntryByCount_send( fd, FAILED,"",table,count_start,msgid, msgid2 ); return; } r = dbGetEntryCountRange( table, count_start, num, output, sizeof(output)); if( r < 0 ){ saacproto_DBGetEntryByCount_send( fd, FAILED, "", table, count_start, msgid, msgid2 ); } else { saacproto_DBGetEntryByCount_send( fd, SUCCESSFUL, output, table, count_start, msgid, msgid2 ); } } void saacproto_Broadcast_recv( int fd, char* id, char* charname, char* message, int flag) { /* if( !is_game_server_login( fd) ){ log( "Broadcast: no login. id:%s charname:%s message:%s flag:%d\n", id, charname, message , flag ); return; } gmsvBroadcast( fd, id, charname, message , flag ); */ } void saacproto_Message_recv( int fd, char* id_from, char* charname_from, char* id_to, char* charname_to, char* message, int option ) { receiveMail( id_from, charname_from, id_to, charname_to, message, option ,0,0); } void saacproto_MessageAck_recv( int fd, char* id, char* charname, char* result, int mesgid ) { int a; if( strcmp( result, SUCCESSFUL ) )a=0; else a =-1; receiveMailAck( id, charname, a , mesgid ); } void saacproto_MessageFlush_recv( int fd, char* id, char* charname ) { flushMail( fd, id , charname ); } /******************************************************* * CoolFish: Family 2001/5/18 ******************************************************/ #ifdef _PERSONAL_FAME void saacproto_ACAddFM_recv( int fd, char *fmname, char *fmleadername, char *fmleaderid, int fmleaderlv, char *petname, char *petattr, char *fmrule, int fmsprite, int fmleadergrano, int fame, #ifdef _FAMILYBADGE_ int fmbadge, #endif int charfdid) #else void saacproto_ACAddFM_recv( int fd, char *fmname, char *fmleadername, char *fmleaderid, int fmleaderlv, char *petname, char *petattr, char *fmrule, int fmsprite, int fmleadergrano, int charfdid) #endif { #ifdef _FAMILY int r = 0, index = 0; #ifdef _PERSONAL_FAME r = ACAddFM(fd, &index, fmname, fmleadername, fmleaderid, fmleaderlv, petname, petattr, fmrule, fmsprite, fmleadergrano, fame, #ifdef _FAMILYBADGE_ fmbadge, #endif charfdid); #else r = ACAddFM(fd, &index, fmname, fmleadername, fmleaderid, fmleaderlv, petname, petattr, fmrule, fmsprite, fmleadergrano, charfdid); #endif if (r < 0){ saacproto_ACAddFM_send(fd, FAILED, r, index, charfdid); }else{ saacproto_ACAddFM_send(fd, SUCCESSFUL, r, index, charfdid); } #endif } void saacproto_ACJoinFM_recv(int fd, char *fmname, int fmindex, #ifdef _PERSONAL_FAME // Arminius: 家族个人声望 char *charname, char *charid, int charlv, int index, int fame, int charfdid) #else char *charname, char *charid, int charlv, int index, int charfdid) #endif { #ifdef _FAMILY int r = 0; #ifdef _PERSONAL_FAME // Arminius: 家族个人声望 r = ACJoinFM(fd, index, fmname, fmindex, charname, charid, charlv, fame, charfdid); #else r = ACJoinFM(fd, index, fmname, fmindex, charname, charid, charlv, charfdid); #endif if (r < 0){ saacproto_ACJoinFM_send(fd, FAILED, r, charfdid); }else{ saacproto_ACJoinFM_send(fd, SUCCESSFUL, r, charfdid); } #endif } void saacproto_ACLeaveFM_recv(int fd, char *fmname, int fmindex, char *charname, char *charid, int index, int charfdid) { #ifdef _FAMILY int r = 0; r = ACLeaveFM(index, fmname, fmindex, charname, charid); if (r < 0){ saacproto_ACLeaveFM_send(fd, FAILED, r, charfdid); }else{ saacproto_ACLeaveFM_send(fd, SUCCESSFUL, r, charfdid); } #endif } #ifdef _LEADERFUNCHECK void saacproto_ACDelFM_recv(int fd, char *fmname, int fmindex, int index, char *charname, char *charid, int charfdid) { int r = 0, result = 0; result = CheckLeaderQ(index, fmname, fmindex, charname, charid); if(result < 0) { saacproto_ACDelFM_send(fd, FAILED, charfdid); return; } // shan modify begin // original /*if (ChangeFMLeader(index, fmname, fmindex) < 0) r = ACDelFM(index, fmname, fmindex); else r = -1; // shan 1 -> -1 if (r < 0) saacproto_ACDelFM_send(fd, FAILED, charfdid); else saacproto_ACDelFM_send(fd, SUCCESSFUL, charfdid); */ r = ACDelFM(index, fmname, fmindex); if (r < 0) saacproto_ACDelFM_send(fd, FAILED, charfdid); else saacproto_ACDelFM_send(fd, SUCCESSFUL, charfdid); // shan end } #else void saacproto_ACDelFM_recv(int fd, char *fmname, int fmindex, int index, int charfdid) { #ifdef _FAMILY int r = 0; #ifdef _FMVER21 if (ChangeFMLeader(index, fmname, fmindex) >= 0) r = ACDelFM(index, fmname, fmindex); else r = 1; #else r = ACDelFM(index, fmname, fmindex); #endif if (r < 0){ saacproto_ACDelFM_send(fd, FAILED, charfdid); } #ifdef _FMVER21 else if (r == 1){ } #endif else{ saacproto_ACDelFM_send(fd, SUCCESSFUL, charfdid); } #endif } #endif void saacproto_ACShowFMList_recv(int fd) { #ifdef _FAMILY int r = 0; char data[150 * MAX_FAMILY]; r = ACShowFMList(data); if (r < 0){ saacproto_ACShowFMList_send(fd, FAILED, r, "Nothing"); }else{ saacproto_ACShowFMList_send(fd, SUCCESSFUL, r, data); } #endif } #ifdef _FAMILY_TOTEM void saacproto_ACShowFMTotem_recv(int fd) { ACShowFMTotem(fd); } #endif void saacproto_ACShowMemberList_recv(int fd, int index) { #ifdef _FAMILY int r = 0, fmacceptflag = 0, fmjoinnum = 0, badge=0; char data[150 * MAX_MEMBERNUM]; r = ACShowFMMemberList(index, &fmacceptflag, &fmjoinnum, data,&badge); if (r < 0){ saacproto_ACShowMemberList_send(fd, FAILED, index, r, fmacceptflag, fmjoinnum, "Nothing",badge); }else{ saacproto_ACShowMemberList_send(fd, SUCCESSFUL, index, r, fmacceptflag, fmjoinnum, data,badge); } #endif } void saacproto_ACFMDetail_recv(int fd, char *fmname, int fmindex, int index, int charfdid) { #ifdef _FAMILY int r = 0; char data[15000]; r = ACFMDetail(index, fmname, fmindex, data); if (r < 0){ saacproto_ACFMDetail_send(fd, FAILED, "Nothing", charfdid); }else{ saacproto_ACFMDetail_send(fd, SUCCESSFUL, data, charfdid); } #endif } #ifdef _FMVER21 void saacproto_ACMemberJoinFM_recv(int fd, char *fmname, int fmindex, char *charname, int charindex, int index, int result, int meindex, int charfdid) #else void saacproto_ACMemberJoinFM_recv(int fd, char *fmname, int fmindex, char *charname, int charindex, int index, int result, int charfdid) #endif { int r = 0; #ifdef _FMVER21 r = ACMemberJoinFM(index, fmname, fmindex, charname, charindex, result, meindex); #else r = ACMemberJoinFM(index, fmname, fmindex, charname, charindex); #endif if (r < 0){ saacproto_ACMemberJoinFM_send(fd, FAILED, charfdid); }else{ saacproto_ACMemberJoinFM_send(fd, SUCCESSFUL, charfdid); } } #ifdef _FMVER21 void saacproto_ACMemberLeaveFM_recv(int fd, char *fmname, int fmindex, char *charname, int charindex, int index, int meindex, int charfdid) #else void saacproto_ACMemberLeaveFM_recv(int fd, char *fmname, int fmindex, char *charname, int charindex, int index, int charfdid) #endif { #ifdef _FAMILY int r = 0; int flag = 1; // 主动离开家族 #ifdef _FMVER21 r = ACMemberLeaveFM(index, fmname, fmindex, charname, flag, charindex, meindex); #else r = ACMemberLeaveFM(index, fmname, fmindex, charname, flag, charindex); #endif if (r < 0){ saacproto_ACMemberLeaveFM_send(fd, FAILED, charfdid); }else{ saacproto_ACMemberLeaveFM_send(fd, SUCCESSFUL, charfdid); } #endif } #ifdef _FM_MODIFY void saacproto_ACFMCharLogin_recv(int fd, char *fmname, int fmindex, char *charname, char *charid, int charlv, int eventflag, int charfdid,int gsnum) #else #ifdef _FMVER21 void saacproto_ACFMCharLogin_recv(int fd, char *fmname, int fmindex, char *charname, char *charid, int charlv, int eventflag, int charfdid) #else void saacproto_ACFMCharLogin_recv(int fd, char *fmname, int fmindex, char *charname, char *charid, int charlv, int charfdid) #endif #endif { #ifdef _FAMILY int r = 0, floor = 0, fmpopular = 0, joinflag = 0, fmsetupflag = 0; int flag = 0, charindex = 0; #ifdef _PERSONAL_FAME // Arminius: 家族个人声望 int charfame = 0; #endif #ifdef _NEW_MANOR_LAW int momentum = 0; #endif #ifdef _FM_MODIFY r = ACFMCharLogin(fd, -1, fmname, fmindex, charname, charid, charlv, &floor, &fmpopular, &joinflag, &fmsetupflag, &charindex, charfdid, &charfame, eventflag,gsnum #ifdef _NEW_MANOR_LAW ,&momentum #endif ); #else #ifdef _PERSONAL_FAME // Arminius: 家族个人声望 r = ACFMCharLogin(fd, -1, fmname, fmindex, charname, charid, charlv, &floor, &fmpopular, &joinflag, &fmsetupflag, &charindex, charfdid, &charfame, eventflag); #else r = ACFMCharLogin(fd, -1, fmname, fmindex, charname, charid, charlv, &floor, &fmpopular, &joinflag, &fmsetupflag, &charindex, charfdid); #endif #endif #ifdef _PERSONAL_FAME // Arminius: 家族个人声望 if (r < 0){ saacproto_ACFMCharLogin_send(fd, FAILED, r, floor, fmpopular, joinflag, fmsetupflag, flag, charindex, charfame, charfdid #ifdef _NEW_MANOR_LAW ,momentum #endif ); }else{ saacproto_ACFMCharLogin_send(fd, SUCCESSFUL, r, floor, fmpopular, joinflag, fmsetupflag, flag, charindex, charfame, charfdid #ifdef _NEW_MANOR_LAW ,momentum #endif ); } #else if (r < 0){ saacproto_ACFMCharLogin_send(fd, FAILED, r, floor, fmpopular, joinflag, fmsetupflag, flag, charindex, charfdid); }else{ saacproto_ACFMCharLogin_send(fd, SUCCESSFUL, r, floor, fmpopular, joinflag, fmsetupflag, flag, charindex, charfdid); } #endif #endif } void saacproto_ACFMCharLogout_recv(int fd, char *fmname, int fmindex, char *charname, char *charid, int charlv, int index,int charfdid) { #ifdef _FAMILY int r = 0; r = ACFMCharLogout(index, fmname, fmindex, charname, charid, charlv, charfdid); if (r < 0){ saacproto_ACFMCharLogout_send(fd, FAILED, charfdid); }else{ saacproto_ACFMCharLogout_send(fd, SUCCESSFUL, charfdid); } #endif } void saacproto_ACFMReadMemo_recv(int fd, int index) { #ifdef _FAMILY int r = 0, dataindex; char data[15000]; r = ACFMReadMemo(index, &dataindex, data); if (r < 0){ saacproto_ACFMReadMemo_send(fd, FAILED, index, r, dataindex, "Nothing"); }else{ saacproto_ACFMReadMemo_send(fd, SUCCESSFUL, index, r, dataindex, data); } #endif } void saacproto_ACFMWriteMemo_recv(int fd, char *fmname, int fmindex, char *data, int index) { #ifdef _FAMILY int r = 0; r = ACFMWriteMemo(index, fmname, fmindex, data); if (r < 0){ saacproto_ACFMWriteMemo_send(fd, FAILED, index); }else{ saacproto_ACFMWriteMemo_send(fd, SUCCESSFUL, index); } #endif } void saacproto_ACFMPointList_recv(int fd) { #ifdef _FAMILY int r = 0; char data[15000]; r = ACFMPointList(data); if (r < 0) { saacproto_ACFMPointList_send(fd, FAILED, "nothing"); }else{ saacproto_ACFMPointList_send(fd, SUCCESSFUL, data); } #endif } void saacproto_ACSetFMPoint_recv(int fd, char *fmname, int fmindex, int index, int fmpointindex, int fl, int x, int y, int charfdid) { #ifdef _FAMILY int r = 0; r = ACSetFMPoint(index, fmname, fmindex, fmpointindex, fl, x, y); if (r < 0){ saacproto_ACSetFMPoint_send(fd, FAILED, r, charfdid); }else{ saacproto_ACSetFMPoint_send(fd, SUCCESSFUL, r, charfdid); } #endif } void saacproto_ACFixFMPoint_recv(int fd, char *winfmname, int winfmindex, int winindex, char *losefmname, int losefmindex, int loseindex, int village) { #ifdef _FAMILY int r = 0; r = ACFixFMPoint(winindex, winfmname, winfmindex, loseindex, losefmname, losefmindex, village); if (r < 0){ saacproto_ACFixFMPoint_send(fd, FAILED, r); }else{ saacproto_ACFixFMPoint_send(fd, SUCCESSFUL, r); } #endif } void saacproto_ACFMAnnounce_recv(int fd, char *fmname, int fmindex, int index, char *data, int color) { #ifdef _FAMILY int r = 0, i = 0; r = ACFMAnnounce(fmname, fmindex, index, data, color); if (r < 0){ saacproto_ACFMAnnounce_send(fd, FAILED, fmname, fmindex, index, 1, data, color); }else{ extern gmsv gs[MAXCONNECTION]; for (i = 0; i < MAXCONNECTION; i ++) { if (gs[i].use && gs[i].name[0]) { saacproto_ACFMAnnounce_send(i, SUCCESSFUL, fmname, fmindex, index, 1, data, color); } } } #endif } void saacproto_ACShowTopFMList_recv(int fd, int kindflag) { #ifdef _FAMILY int r = 0; char data[150 * MAX_FAMILY]; strcpy(data, ""); r = ACShowTopFMList(data, sizeof(data), kindflag); if (r < 0) { saacproto_ACShowTopFMList_send(fd, FAILED, kindflag, r, "Nothing"); }else { saacproto_ACShowTopFMList_send(fd, SUCCESSFUL, kindflag, r, data); } #endif } void saacproto_ACFixFMData_recv(int fd, char *fmname, int fmindex, int index, int kindflag, char *data1, char *data2, int charindex, int charfdid) { #ifdef _FAMILY int r = 0; r = ACFixFMData(index, fmname, fmindex, kindflag, charindex, data1, data2); if (r < 0){ saacproto_ACFixFMData_send(fd, FAILED, kindflag, data1, data2, charfdid); }else{ saacproto_ACFixFMData_send(fd, SUCCESSFUL, kindflag, data1, data2, charfdid); } #endif } void saacproto_ACFixFMPK_recv(int fd, char *winfmname, int winfmindex, int winindex, char *losefmname, int losefmindex, int loseindex) { #ifdef _FAMILY int r = 0; r = ACFixFMPK(winindex, winfmname, winfmindex, loseindex, losefmname, losefmindex); if (r < 0){ saacproto_ACFixFMPK_send(fd, FAILED, r, winindex, loseindex); }else{ saacproto_ACFixFMPK_send(fd, SUCCESSFUL, r, winindex, loseindex); } #endif } void saacproto_ACGMFixFMData_recv(int fd, int index, char *charid, char *cmd, char *data, int charfdid) { #ifdef _FAMILY int r = 0; char fmname[256]; r = ACGMFixFMData(index, fmname, charid, cmd, data); if (r < 0){ saacproto_ACGMFixFMData_send(fd, FAILED, fmname, charfdid); } else{ saacproto_ACGMFixFMData_send(fd, SUCCESSFUL, fmname, charfdid); } #endif } void saacproto_ACGetFMData_recv(int fd, char *fmname, int fmindex, int index, int kindflag, int charfdid) { #ifdef _FAMILY int r = 0, data = 0; r = ACGetFMData(index, fmname, fmindex, kindflag, &data); if (r < 0){ saacproto_ACGetFMData_send(fd, FAILED, kindflag, data, charfdid); }else{ saacproto_ACGetFMData_send(fd, SUCCESSFUL, kindflag, data, charfdid); } #endif } void saacproto_ACreLoadFmData_recv(int fd, int type, int data) { int i=0; extern gmsv gs[MAXCONNECTION]; switch( type){ case 1: log( "reload FM_DATA:%d !\n", data); readOneFamilyFromTi( data); break; case 2: { char data[15000]; readFMPoint( fmpointdir); if( ACFMPointList( data) >= 0 ){ log( "reload FM_POINT !\n" ); for (i=0; i MAX_FMPOINT) return; saacproto_ACLoadFmPk_send( fd, FMPK_GetData( fmpks_pos-1) ); } void saacproto_ACSendFmPk_recv(int fd, int fmpks_pos, int userindex, int flg, char *data) { extern gmsv gs[MAXCONNECTION]; char buf[1024]; int i=0; sprintf( buf, "%d|%s", fmpks_pos, data); if( ( userindex != -1 && FMPK_GetTypeFlg( fmpks_pos-1) == 1 )|| FMPK_SetData( fmpks_pos-1, flg, buf, strlen( buf)) != 1 ){ if(userindex != -1) saacproto_ACSendFmPk_send( fd, userindex, 0); log("err ACSendFmPk_send(%d, %d)\n", userindex, 0); return; } FMPK_BackUpList(); for (i=0; i MAX_FMPOINT){ log("\n fmpks_pos(%d) too big", fmpks_pos); } saacproto_ACLoadFmPk_send(fd, fm_pk_list[fmpks_pos-1]); } void saacproto_ACSendFmPk_recv(int fd, int fmpks_pos, char *data) { extern gmsv gs[MAXCONNECTION]; int i=0; if( (fmpks_pos>MAX_FMPOINT) || (fmpks_pos<1) ){ log("\n fmpks_pos(%d) err !!", fmpks_pos); } sprintf(fm_pk_list[fmpks_pos-1], "%d|%s", fmpks_pos, data); for (i=0; i= 65535 ){ saacproto_UpdataStele_send ( fd , token ); memset( token, 0, sizeof(token)); lens = 0; } strcat( token, buf); lens += strlen( buf); } fclose ( fdb ); if( strlen( token) > 0 ) saacproto_UpdataStele_send ( fd , token ); } } void Send_S_herolist( char *ocdkey , char *oname , char *ncdkey , char *nname , char *title , int level , int trns , int floor ) { int i; extern gmsv gs[MAXCONNECTION]; for (i = 0 ; i < MAXCONNECTION ; i ++ ) { if ( gs[i].use && gs[i].name[0] ) { saacproto_S_UpdataStele_send( i , ocdkey , oname , ncdkey , nname , title , level , trns , floor ); log("\nSyu log AC Send Single to Gmsv "); } } } #endif #define MAXUNlockM 50 #define delaytime (60*3) UNLockMenus UNlockM[MAXUNlockM]; int UNlockM_Init( void) { int i; for( i=0; i= time(NULL) ) continue; if( isLocked( UNlockM[i].PlayerId ) ){ log( "等待解锁玩家: %s 还需锁定!!\n", UNlockM[i].PlayerId); }else{ log( "等待解锁玩家: %s 已经解锁!!\n", UNlockM[i].PlayerId); } reset_UNlockMPlayer( i); nums++; } //log( "等待解锁玩家: 总计 %d 个用户解锁 !!\n", nums); return nums; } #ifdef _ANGEL_SUMMON extern int saveMissionTable( void ); //void saacproto_ACMissionTable_recv( int fd, int num, int type, char *data, int charaindex) void saacproto_ACMissionTable_recv( int fd, int num, int type, char *data, char* angelinfo) { extern gmsv gs[MAXCONNECTION]; int i; char buf[1024]; if( type == 1 ) { // ask data list if( num == -1) { // ask all data char alldata[MAXMISSIONTABLE*100]; alldata[0]='\0'; for( i =0; i use != 0){ if(strcmp(ln->cdkey,id) == 0 && strcmp(ln->name,name) == 0){ saacproto_ACCheckCharacterOnLine_send(fd,charaindex,1,ln->server,flag); return; } } ln = ln->next; } // 玩家不在线上 saacproto_ACCheckCharacterOnLine_send(fd,charaindex,0,"",flag); } // 不须要确认名字 else{ while(ln != NULL){ if(ln->use != 0){ if(strcmp(ln->cdkey,id) == 0){ saacproto_ACCheckCharacterOnLine_send(fd,charaindex,1,ln->server,flag); return; } } ln = ln->next; } // 玩家不在线上 saacproto_ACCheckCharacterOnLine_send(fd,charaindex,0,"",flag); } } #endif void saacproto_ACCharLogin_recv( int fd, int clifd, char* id, char* pas, char* ip #ifdef _NEWCLISETMAC ,char* mac #endif ) { int res; #ifdef _SASQL if (strlen(id)==0 || strlen(pas)==0 || strlen(ip)==0){ printf("登陆信息有错误!\n"); saacproto_ACCharLogin_send( fd, clifd, 1); return; } if (sasql_chehk_lock(id)){ printf("该账号%s禁止登陆!\n",id); saacproto_ACCharLogin_send( fd, clifd, 2); return; } if (sasql_chehk_lock(ip)){ printf("该IP%s禁止登陆!\n",ip); saacproto_ACCharLogin_send( fd, clifd, 3); return; } if(strlen(mac)>0){ if (sasql_chehk_lock(mac)){ printf("该MAC%s禁止登陆!\n",ip); saacproto_ACCharLogin_send( fd, clifd, 3); return; } } res=sasql_query(id, pas); if (res==3){ #ifdef _SQL_REGISTER if(!sasql_register(id, pas)) #endif { saacproto_ACCharLogin_send( fd, clifd, 5); return; } }else if (res!=1){ #ifdef _ITEM_PET_LOCKED if(sasql_ItemPetLocked_Char(id, pas)!=1) #endif { saacproto_ACCharLogin_send( fd, clifd, 6); return; } } sasql_online(id, NULL, ip, mac, 1); #endif saacproto_ACCharLogin_send( fd , clifd, 0); } #ifdef _SASQL void saacproto_LockLogin_recv( int fd, char* id, char* ip, int flag ) { switch (flag){ case 0: if(strlen(id)>0){ if(sasql_del_lock(id)){ log("成功解除锁定账号:%s\n",id); }else{ log("失败!解除锁定账号:%s\n",id); } } if(strlen(ip)>0){ if(sasql_del_lock(ip)){ log("成功解除锁定IP:%s\n",ip); }else{ log("失败!解除锁定IP:%s\n",ip); } } break; case 1: if(strlen(id)>0){ if(!sasql_chehk_lock(id)){ if(sasql_add_lock(id)){ log("成功锁定账号:%s\n",id); }else{ log("失败!锁定账号:%s\n",id); } }else{ log("账号%s已被锁定过!\n",id); } } if(strlen(ip)>0){ if(!sasql_chehk_lock(ip)){ if(sasql_add_lock(ip)){ log("成功锁定IP:%s\n",ip); }else{ log("失败!锁定IP:%s\n",ip); } }else{ log("IP%s已被锁定过!\n",id); } } break; default: break; } } #ifdef _NEW_VIP_SHOP void saacproto_QueryPoint_recv( int fd, int clifd, char *id ) { int point = sasql_query_point( id ); saacproto_QueryPoint_send( fd, clifd, point ); } void saacproto_NewVipShop_recv( int fd, int clifd, char *id, int point, char *buf, int flag) { int vippoint = sasql_add_vippoint(id, point); if( vippoint == -1){ saacproto_NewVipShop_send(fd, clifd, vippoint, "", flag); }else{ saacproto_NewVipShop_send(fd, clifd, vippoint, buf, flag); } } #ifdef _COST_ITEM void saacproto_CostItem_recv( int fd, int clifd, char *id, int point) { int vippoint = sasql_add_vippoint(id, point); saacproto_QueryPoint_send( fd, clifd, vippoint ); } #endif #endif #ifdef _ITEM_PET_LOCKED void saacproto_ItemPetLocked_recv( int fd, int clifd, char *id, char *safepasswd ) { char *data = sasql_ItemPetLocked( id, safepasswd ); if(strcmp(data, "安全锁已经成功解锁!")==0){ saacproto_ItemPetLocked_send(fd, clifd, 1, data); }else if(strcmp(data, "您还未设置安全锁解锁密码,为了确保安全,请输入一次六位以上密码做为安全锁密码并劳劳记住!")==0){ saacproto_ItemPetLocked_send(fd, clifd, 0, data); }else{ saacproto_ItemPetLocked_send(fd, clifd, -1, data); } } void saacproto_ItemPetLockedPasswd_recv( int fd, int clifd, char *id, char *safepasswd ) { char *data = sasql_ItemPetLocked_Passwd( id, safepasswd ); saacproto_ItemPetLockedPasswd_send(fd, clifd, data); } #endif #ifdef _ONLINE_COST void saacproto_OnlineCost_recv( int fd, int clifd, char *id, char *costpasswd, int fmindex, char *fmname ) { char *data = sasql_OnlineCost( id, costpasswd, fmindex, fmname ); saacproto_OnlineCost_send(fd, clifd, data); } #endif #ifdef _SQL_BUY_FUNC void saacproto_OnlineBuy_recv( int fd, int clifd, char *id, char *costpasswd ) { char *data = sasql_OnlineBuy( id, costpasswd ); saacproto_OnlineBuy_send(fd, clifd, data); } #endif #ifdef _VIPPOINT_OLD_TO_NEW void saacproto_OldToNew_recv( int fd, int clifd, char *id, int point ) { int vippoint = sasql_add_vippoint( id, point ); char data[256]; sprintf(data, "旧会员点%d已转换至SQL里,你当前会员点共%d",point, vippoint); saacproto_OldToNew_send(fd, clifd, data); } #endif #ifdef _FORMULATE_AUTO_PK void saacproto_FormulateAutoPk_recv( int fd, int clifd, char *id, int point ) { int pkpoint = sasql_add_FormulateAutoPk( id, point ); char data[256]; if(pkpoint == -1){ sprintf(data, "您的乱舞积分%d无法转换进SQL里,请与管理员联系!", point); }else{ sprintf(data, "已将您的乱舞积分%d已转换至SQL里,你当前乱舞积分共%d", point, pkpoint); } saacproto_FormulateAutoPk_send(fd, clifd, data); } #endif #ifdef _CHARADATA_SAVE_SQL void saacproto_CharadataSaveSQL_recv( int fd, int clifd, char *id, Charadata charadata, int saveindex, int flag ) { sasql_charadata_Save(id, "list", charadata.CHAR_list_String, saveindex, DELETE); sasql_charadata_Save(id, "list_info1", charadata.CHAR_list_info1_String, saveindex, DELETE); sasql_charadata_Save(id, "list_info2", charadata.CHAR_list_info2_String, saveindex, DELETE); sasql_charadata_Save(id, "list_count", charadata.CHAR_list_count_String, saveindex, DELETE); sasql_charadata_Save(id, "list_info3", charadata.CHAR_list_info3_String, saveindex, DELETE); sasql_charadata_Save(id, "list_event", charadata.CHAR_list_event_String, saveindex, DELETE); sasql_charadata_Save(id, "list_info4", charadata.CHAR_list_info4_String, saveindex, DELETE); sasql_charadata_Save(id, "list_attackmagic", charadata.CHAR_list_attackmagic_String, saveindex, DELETE); sasql_charadata_Save(id, "list_info5", charadata.CHAR_list_info5_String, saveindex, DELETE); sasql_charadata_Save(id, "list_profession", charadata.CHAR_list_profession_String, saveindex, DELETE); sasql_charadata_Save(id, "list_info6", charadata.CHAR_list_info6_String, saveindex, DELETE); sasql_charadata_Save(id, "list_info", charadata.CHAR_list_info_String, saveindex, DELETE); sasql_charadata_Save(id, "list_flg", charadata.CHAR_list_flg_String, saveindex, DELETE); sasql_charadata_Save(id, "list_skill", charadata.CHAR_list_skill_String, saveindex, DELETE); sasql_charadata_Save(id, "list_item", charadata.CHAR_list_item_String, saveindex, DELETE); sasql_charadata_Save(id, "list_title", charadata.CHAR_list_title_String, saveindex, DELETE); sasql_charadata_Save(id, "list_mail", charadata.CHAR_list_mail_String, saveindex, DELETE); } #endif #ifdef _LOTTERY_SYSTEM void saacproto_LotterySystem_recv(int fd) { char data[256]={"-1,-1,-1,-1,-1,-1,-1"}; FILE * f1 = fopen("todayaward.txt","r+"); if( f1 ){ if( fgets( data, sizeof( data ), f1 ) ){ saacproto_LotterySystem_send( fd, data ); } } } #endif #ifdef _ALL_SERV_SEND void saacproto_AllServSend_recv(char *data) { int i; for (i=0; i