📄 callfromac.c
字号:
#include <stdio.h>#include "version.h"#include "common.h"#include "saacproto_cli.h"#include "lssproto_serv.h"#include "net.h"#include "char.h"#include "object.h"#include "readmap.h"#include "msignal.h"#include "map_deal.h"#include "npc_duelranking.h"#include "npc_warpman.h"#include "handletime.h"#include "npc_scheduleman.h"#include "configfile.h"#include "chatroom.h"#ifdef _PAUCTION_MAN#include "npc_pauctionman.h"#endif#include "npc_eventaction.h"// CoolFish: Family 2001/5/24#include "family.h"#include "defend.h"#include "log.h"#include "buf.h"#ifdef _ALLDOMAN // (不可开) Syu ADD 排行榜NPC#include "npc_alldoman.h"#endif#ifdef _RACEMAN#include "npc_raceman.h"#endif#ifdef _DEATH_CONTEND#include "deathcontend.h"#endiftime_t initTime =0;extern BOOL bNewServer;extern int i_shutdown_time;//ttomvoid saacproto_ACGmsvDownRequest_recv( int fd, int min){ char buff[256]; int i; int playernum = CHAR_getPlayerMaxNum(); snprintf( buff, sizeof( buff),"极度的系统公告。"); for( i = 0 ; i < playernum ; i++) { if( CHAR_getCharUse(i) != FALSE ) { CHAR_talkToCli( i, -1, buff, CHAR_COLORYELLOW); } } SERVSTATE_setLimittime(min); SERVSTATE_setShutdown( NowTime.tv_sec ); SERVSTATE_setDsptime( 0 ); }//检查是否有和ac连接,以及载入家族void saacproto_ACServerLogin_recv (int fd, char* result,char* data){ if( strcmp( result , SUCCESSFUL ) != 0 ){ /* 夫弘奶件撩 */ print( "saacproto_ACServerLogin fail! so quitting...[%s][%s]\n", result,data ); shutdownProgram( ); exit(1); } print("SAAC登陆成功\n"); time(&initTime); if( bNewServer ) print("新服务器! "); else print("旧服务器! ");#ifdef _SERVER_NUMS print( " 版本 : <%s>" , SERVER_VERSION);#endif print(" 正常服务器!\n"); // Robin 0530 //saacproto_ACShowFMList_send( acfd ); FAMILY_Init();#ifdef _UNIVERSE_CHATROOM CHATROOM_getChatRoomList();#endif#ifdef _ANGEL_SUMMON saacproto_ACMissionTable_send( acfd, -1, 1, "", "");#endif}void saacproto_ACCharList_recv(int fd, char* result, char* data,int retfd){ int clifd = getfdFromFdid(retfd); if( CONNECT_checkfd(clifd) == FALSE ){ return; } lssproto_CharList_send( clifd, result , data ); CONNECT_setState( clifd, NOTLOGIN );}void saacproto_ACCharLoad_recv(int fd , char* result,char* data,int retfd,int saveindex){ int clifd = getfdFromFdid(retfd); if( CONNECT_checkfd( clifd ) == FALSE )return; if(( strcmp( result , SUCCESSFUL ) == 0 )&&(data[0])) {#ifdef _BAD_PLAYER // WON ADD 送坏玩家去关 CHAR_login( clifd, data, saveindex, 0 ); // 正常玩家 }else if( ( strcmp( result , BADPLAYER ) == 0 ) && (data[0]) ){ CHAR_login( clifd, data, saveindex, 1 ); // 坏玩家#else CHAR_login( clifd,data,saveindex );#endif }else{ char cdkey[64];#ifndef _FIX_MESSAGE // WON ADD 修改WORKER封包内容 data = ""; #endif CONNECT_getCdkey( clifd, cdkey , sizeof( cdkey )); print(" (%s)ACCharLoad错误:%s ", cdkey, data); lssproto_CharLogin_send( clifd, result ,data ); CONNECT_setState( clifd, NOTLOGIN ); }}#ifdef _DEATH_CONTENDvoid saacproto_LoadPkTeamListData_recv(int fd , char* result, char* data, int ti ) { //andy_log print("加载PK团队数据接收( %s, %d) 数据长度:%d\n", result, ti, strlen(data) ); if( !strcmp( result, "success") ){ if( PKLIST_LoadPkTeamListData() == FALSE ) return; if( ti != - 1 ) saacproto_LoadPkTeamListData_send( fd , ti, 1000); }}//要求资讯void saacproto_PKLISTCHARTS_recv( int fd, char *data, int type, int flg){ //andy_log print("接收PK名称() \n"); if( data == NULL ) return; PKLIST_HandleChartsMess( fd, data, type, flg);}#endif#ifdef _PAUCTION_MANvoid saacproto_ACItemAuction_recv( int fd, char *ITEMNAME, char *data, int itemID, int ret, int flg){ //物品处理 switch( flg) { case 1: { int itemindex=-1; itemindex = NPC_PAItemShop_AddItem( itemID, ret); if( !ITEM_CHECKINDEX( itemindex) ) return; NPC_PAItemShop_reItem( itemindex, data); } break; case 2: { NPC_PAItemShop_DelItem( ret, -1); } break; }}#endif/* *本□皮卞凶中允月忒蚕[ * state卞方匀化质 毛坌仃月 */ void saacproto_ACCharSave_recv(int fd ,char* result, char* data,int retfd){ int clifd = getfdFromFdid(retfd) , fdid; char cdkey[CDKEYLEN], passwd[PASSWDLEN], charname[CHARNAMELEN]; /* * 端巨仿□匹手卅中及卞仇仇匹反元井木月仪反丐月 * 公木反}中五卅曰涛粮毛濠匀凶凛分[ */ if( CONNECT_checkfd( clifd )== FALSE ) return; CONNECT_getCdkey( clifd, cdkey, sizeof( cdkey )); CONNECT_getPasswd( clifd, passwd, sizeof( passwd)); CONNECT_getCharname( clifd, charname, sizeof( charname )); fdid = CONNECT_getFdid( clifd ); switch( CONNECT_getState( clifd ) ){ case WHILECREATE: /* 平乓仿综曰匹及本□皮 */ /* 公木毛弁仿奶失件玄卞中丹( 公及引引 )*/ if( strcmp(result,FAILED) ==0 ) data =""; lssproto_CreateNewChar_send( clifd , result , data); CONNECT_setState( clifd, NOTLOGIN ); break; case WHILELOGOUTSAVE: /* 骚及夫弘失它玄及凛及本□皮及忒蚕 */ if( strcmp( result , SUCCESSFUL ) == 0 ) /* 岳 */ lssproto_CharLogout_send( clifd, result , "success" ); else /* 巨仿□支午仄扎屯月 */ lssproto_CharLogout_send( clifd, result , "Cannot save" ); CONNECT_setState( clifd, NOTLOGIN ); CONNECT_setCharaindex( clifd, -1 ); break; case WHILELOSTCHARSAVE: /* 瑛绊互升丹匹丐木}仇及平乓仿反绰轮允月 */ saacproto_ACCharDelete_send( acfd, cdkey,passwd,charname,"",fdid ); CONNECT_setState( clifd, WHILELOSTCHARDELETE ); CONNECT_setCharaindex( clifd, -1 ); break; case WHILECLOSEALLSOCKETSSAVE: CONNECT_setState( clifd, NOTLOGIN ); // Arminius debug // CONNECT_endOne_debug(clifd); CONNECT_setUse( clifd , FALSE); SERVSTATE_decrementCloseallsocketnum(); if( SERVSTATE_getCloseallsocketnum() == 0 ) { SERVSTATE_SetAcceptMore( -1 ); print( "所有人物存档\n" ); print("\n 关闭服务器时间 =%d",i_shutdown_time);//ttom if(i_shutdown_time==1){ system( "正常关闭" ); sigshutdown( 0 ); } } default: break; }}void saacproto_ACCharDelete_recv(int fd,char* result,char* data,int retfd){ int clifd = getfdFromFdid(retfd); if( CONNECT_checkfd( clifd ) == FALSE )return; switch( CONNECT_getState(clifd) ){ case WHILELOSTCHARDELETE: /* 夫旦玄匹平乓仿壅仄 及忒蚕 */ /* 窒手仄卅中 */ /* 橇谪毛 允 */ CONNECT_setState(clifd, NOTLOGIN ); CONNECT_setCharaindex( clifd, -1 ); break; case WHILECHARDELETE: /* 骚及平乓仿壅仄 */ /* 公及引引霜月 */ if( strcmp(result,FAILED) == 0)data=""; lssproto_CharDelete_send( clifd, result , data ); CONNECT_setState( clifd, NOTLOGIN ); CONNECT_setCharaindex( clifd, -1 ); break; default: break; }}/* * 夫永弁及忒蚕[仇木反荸轮卞仄井银歹卅中[蜇箕幻廿银歹木月 烂反卅中 */void saacproto_ACLock_recv(int fd , char* result, char* data ,int retfd){ int clifd = getfdFromFdid(retfd); char cdkey[CDKEYLEN]; int cindex = getCharindexFromFdid(retfd); if( CONNECT_checkfd(clifd) == FALSE) return; // Arminius 7.25 GM unlock test if (strncmp(data, "USRLOCKED", 9)==0) { char buf[4096]; sprintf(buf, "%s", &data[10]); CHAR_talkToCli(cindex, -1, buf, CHAR_COLORYELLOW); return; } else if (strncmp(data, "USRUNLOCKED", 11)==0) { CHAR_talkToCli(cindex, -1, "User not locked.", CHAR_COLORYELLOW); return; } else if (strncmp(data, "GMUNLOCKSUCCESS", 15)==0) { CHAR_talkToCli(cindex, -1, "User unlock success", CHAR_COLORYELLOW); return; } else if (strncmp(data, "GMUNLOCKFAIL", 12)==0) { CHAR_talkToCli(cindex, -1, "User unlock failed", CHAR_COLORYELLOW); return; } else if (strncmp(data, "GMUNLOCKALL", 11)==0) { CHAR_talkToCli(cindex, -1, "Server unlocked", CHAR_COLORYELLOW); return; } CONNECT_getCdkey( clifd, cdkey , sizeof( cdkey )); switch( CONNECT_getState( clifd ) ){ case WHILECANNOTLOGIN: /* 夫弘奶件撩 仄凶凛及夫永弁及忒蚕 */ if( strcmp( result , SUCCESSFUL ) == 0 ){ /* 岳 匹窒手仄化中卅中橇谪卞允月 */ CONNECT_setState( clifd, NOTLOGIN ); }else{ /* * 丢永本□斥毛苇月 */ char mesg[128]; snprintf( mesg ,sizeof( mesg ), "%s hasn't been locked" ,cdkey); if( strcmp( data , mesg ) == 0 ){ /* * 夫永弁今木化中卅中及匹手丹窒手仄卅中[ * 岳 仄凶及午 元健中卞允月[ */ CONNECT_setState( clifd, NOTLOGIN ); }else{ /* * 疯蘸夫永弁荸轮仄方丹午允月 * state 及 祭卅仄[ */ saacproto_ACLock_send(fd, cdkey , UNLOCK, CONNECT_getFdid( clifd) ); } } break; default: break; }}void saacproto_ACUCheck_recv( int fd , char *cd ){ int conind; int flag = 0; conind = getfdFromCdkeyWithLogin( cd ); flag = ( conind >= 0 ) ? 1 : 0; saacproto_ACUCheck_send( fd , cd , flag );}/* --------------------------------------------- * 犯□正矛□旦凳蕙熬仃午曰质 醒袄 * --------------------------------------------*/void saacproto_DBUpdateEntryInt_recv( int fd,char* result, char* table,char* key,int msgid,int msgid2 ){ if( strcmp( result, NET_STRING_FAILED) == 0 ) { print( "failed: DBUpdateEntryInt\n"); return; }}/* --------------------------------------------- * 犯□正矛□旦凳蕙熬仃午曰质 侬 * --------------------------------------------*/void saacproto_DBUpdateEntryString_recv( int fd,char* result, char* table,char* key,int msgid,int msgid2 ){ if( strcmp( result, NET_STRING_FAILED) == 0 ) { print( "failed: DBUpdateEntryString\n"); return; }}/* --------------------------------------------- * 犯□正矛□旦熬仃午曰质 仿件弁 * --------------------------------------------*/void saacproto_DBGetEntryRank_recv( int fd,char* result,int rank,int count, char* table,char* key,int msgid,int msgid2 ){ if( strcmp( result, NET_STRING_FAILED) == 0 ) { print( "failed: DBGetEntryRank\n"); return; } if( strcmp( table, DB_DUELPOINT) == 0 ) { if( CHAR_getInt( OBJECT_getIndex( msgid2), CHAR_WHICHTYPE) == CHAR_TYPEDUELRANKING){ NPC_Duelranking_CallMyRanking( count, msgid, msgid2); }else { NPC_GetDuelRank( rank, msgid, msgid2); } }}void saacproto_DBDeleteEntryInt_recv( int fd,char* result, char* table,char* key,int msgid,int msgid2 ){ if( strcmp( result, NET_STRING_FAILED) == 0 ) { print( "failed: DBDeleteEntryInt\n"); return; }}/* --------------------------------------------- * 犯□正矛□旦绰轮熬仃午曰质 侬 * --------------------------------------------*/void saacproto_DBDeleteEntryString_recv( int fd,char* result, char* table,char* key,int msgid,int msgid2 ){ if( strcmp( result, NET_STRING_FAILED) == 0 ) { print( "failed: DBDeleteEntryString\n"); return; }}/* --------------------------------------------- * 犯□正矛□旦熬仃午曰质 醒袄 * --------------------------------------------*/void saacproto_DBGetEntryInt_recv( int fd,char* result,int value, char* table,char* key,int msgid,int msgid2 ){ if( strcmp( result, NET_STRING_FAILED) == 0 ) { print( "failed: DBGetEntryInt\n"); return; }}/* --------------------------------------------- * 犯□正矛□旦熬仃午曰质 侬 * --------------------------------------------*/void saacproto_DBGetEntryString_recv( int fd,char* result,char *value, char* table,char* key,int msgid,int msgid2 ){ char cdkey[32]; char charaname[32]; if( strcmp( table, DB_ADDRESSBOOK) == 0 ){ int mode = 1; if( strcmp( result, NET_STRING_FAILED) == 0 ) { mode = 0; } makeStringFromEscaped( key); if( !getStringFromIndexWithDelim( key, "_", 1, cdkey, sizeof( cdkey)) ){ return; } if( !getStringFromIndexWithDelim( key, "_", 2, charaname, sizeof( charaname)) ){ return; } ADDRESSBOOK_DispatchMessage( cdkey, charaname, value, mode); }else { if( strcmp( result, NET_STRING_FAILED) == 0 ) { print( "failed: DBGetEntryString\n"); return; } }}void saacproto_DBGetEntryByRank_recv( int fd,char* result,char* list, char* table,int msgid,int msgid2 ){ if( strcmp( result, NET_STRING_FAILED) == 0 ) { print( "failed: DBGetEntryByRank\n"); return; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -