📄 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 "npc_eventaction.h"
// CoolFish: Family 2001/5/24
#include "family.h"
#include "log.h"
#include "buf.h"
#ifdef _ALLDOMAN // (不可开) Syu ADD 排行榜NPC
#include "npc_alldoman.h"
#endif
time_t initTime =0;
extern BOOL bNewServer;
extern int i_shutdown_time;//ttom
void saacproto_ACGmsvDownRequest_recv( int fd, int min)
{
char buff[32];
int i;
int playernum = CHAR_getPlayerMaxNum();
snprintf( buff, sizeof( buff),"%s公告。",getGameserverID());
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( "与AC服务器连接失败!退出运行...[%s][%s]\n",
result,data );
shutdownProgram( );
exit(1);
}
print("与AC服务器连接成功!\n");
time(&initTime);
/*
print("服务器类型:");
if( bNewServer )
print("新服务器! \n");
else
print("旧服务器! \n");
*/
#ifdef _SERVER_NUMS
print(" 正常服务器!\n");
#endif
#ifdef _VIP_ALL
print( "服务端版本: <%s %s>\n" , SERVER_VERSION, "Forevr Sq25版");
#else
#ifdef _PUB_ALL
print( "服务端版本: <%s %s>\n" , SERVER_VERSION, "普通版");
#else
print( "服务端版本: <%s %s>\n" , SERVER_VERSION, "原始版");
#endif
#endif
print( "服务端编译完成时间: %s %s by Forevr Sq2工作室\n" , __DATE__ , __TIME__ );
print( "主页:http://www.sq25.cn\n" );
print( "论坛:http://bbs.sq25.cn\n" );
// Robin 0530
//saacproto_ACShowFMList_send( acfd );
print("初始化家族...");
FAMILY_Init();
print("完成\n");
}
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])) {
CHAR_login( clifd,data,saveindex );
}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 );
}
}
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{
/*
* 疯蘸夫永弁荸轮仄方丹午允月
*/
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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -