⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callfromac.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 4 页
字号:
#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 + -