📄 recv.c
字号:
}void saacproto_PKLISTCHARTS_recv( int fd, int type, int flg){ //andy_log log( "PKLISTCHARTS_recv( %d, %d)\n", type, flg); PKLIST_TheCharts( fd, type, flg);}void saacproto_PKLISTCHARTS_send( int fd, char *data, int type, int flg ){ saacproto_CreateHeader( saacproto.work , "PKLISTCHARTS" ); saacproto_strcatsafe( saacproto.work , saacproto_mkstr_string( data ) ,saacproto.workbufsize ); saacproto_strcatsafe( saacproto.work , saacproto_mkstr_int( type ) ,saacproto.workbufsize ); saacproto_strcatsafe( saacproto.work , saacproto_mkstr_int( flg ) ,saacproto.workbufsize ); saacproto_Send( fd , saacproto.work );}/*void saacproto_PKLISTUPDATE_send( int fd, char *ret, int mesgid, int charindex, char *data){ saacproto_CreateHeader( saacproto.work , "PKLISTUPDATE" ); saacproto_strcatsafe( saacproto.work , saacproto_mkstr_int( mesgid ) ,saacproto.workbufsize ); saacproto_strcatsafe( saacproto.work , saacproto_mkstr_int( charindex ) ,saacproto.workbufsize ); saacproto_strcatsafe( saacproto.work , saacproto_mkstr_string( ret ) ,saacproto.workbufsize ); saacproto_strcatsafe( saacproto.work , saacproto_mkstr_string( data ) ,saacproto.workbufsize ); saacproto_Send( fd , saacproto.work );}*/#endif#ifdef _GM_BROADCAST // WON ADD 客服公告系统void broadcast( char *msg ){ extern gmsv gs[MAXCONNECTION]; int time = 0, loop = 0, wait = 0, i = 0; char post_msg[10*80] = {0}; strtok( msg, " " ); time = atoi( strtok( NULL, " " ) ); loop = atoi( strtok( NULL, " " ) ); wait = atoi( strtok( NULL, " " ) ); for( i=0; i<10; i++ ){ char *temp; temp=strtok( NULL, " " ); if( temp ){ strcat( post_msg, temp ); strcat( post_msg, " " ); } } post_msg[ strlen( post_msg ) - 1 ] = 0; log("\n won test 2 ==> time(%d) loop(%d) wait(%d) \n post_msg(%s)", time, loop, wait, post_msg ); for(i=0; i<MAXCONNECTION; i++){ if(gs[i].use && gs[i].name[0]){ log("\n won test 2.1 ==> i(%d)", i ); saacproto_GmBroadcast_send(i, time, loop, wait, post_msg ); } }}#endif#ifdef _SEND_EFFECT // WON ADD 送下雪、下雨等特效void SendEffect(char *effect){ extern gmsv gs[MAXCONNECTION]; int i; for (i=0; i<MAXCONNECTION; i++) { if (gs[i].use && gs[i].name[0]) { saacproto_SendEffect_send(i, effect); } }}#endif#ifdef _BAD_PLAYER // WON ADD 送坏玩家去关void BadPlayer(void){ int i; extern char BadPlayerList[500][20]; // 定义最大 500 名 char *filename={"sendjail.txt"}; FILE *fp; extern int MAX_BAD_PLAYER; memset( BadPlayerList, 0, sizeof(BadPlayerList)); if( !(fp=fopen(filename, "r")) ){ log("\n read sendjail.txt FAIL !!"); return; } for( i=0; i<500; i++){ char buf[256]; if( fscanf( fp, "%s", buf) == EOF ) break; buf[strlen(buf)+1] = 0; memcpy( BadPlayerList[i], buf, strlen(buf)+1); } fclose( fp); // WON TEST for( i=0; i<500; i++){ if( strcmp( BadPlayerList[i], "" ) ==0 ){ MAX_BAD_PLAYER = i; break; } }}#endif#ifdef _AC_SEND_FM_PK // WON ADD 庄园对战列表储存在ACvoid load_fm_pk_list(){ int i; extern char fm_pk_list[9][255]; char *filename={"family/fm_pk_list.txt"}; FILE *fp; if( !(fp=fopen(filename, "r")) ){ return; } for( i=0; i<9; i++){ char buf[256]; if( fscanf( fp, "%s", buf) == EOF ) break; buf[strlen(buf)+1] = 0; memcpy( fm_pk_list[i], buf, strlen(buf)+1); } fclose( fp); log("\n");}void save_fm_pk_list(){ int i; extern char fm_pk_list[9][255]; char *filename={"family/fm_pk_list.txt"}; FILE *fp; if( !(fp=fopen(filename, "w")) ){ return; } for( i=0; i<9; i++){ fprintf(fp, "%s\n", fm_pk_list[i]); } fclose( fp);}#endif#ifdef _CHAR_POOLITEMvoid saacproto_ACCharInsertPoolItem_recv( int fd, char *cdkey, int userindex, int clifdid, char *Pooldataarg){ if( !is_game_server_login( fd) ){ return; } if( InsertCharPoolItem( cdkey, Pooldataarg, strlen(Pooldataarg)) <= 0 ) { log("\n InsertPoolItem( %s) err!!\n", cdkey); saacproto_ACCharSavePoolItem_send( fd , FAILED , Pooldataarg, clifdid ); }}void saacproto_ACCharSavePoolItem_recv( int fd, char *cdkey, int userindex, int clifdid, char *Pooldataarg){ if( !is_game_server_login( fd) ){ return; } if( saveCharPoolItem( cdkey, Pooldataarg, strlen(Pooldataarg)) < 0 ) { saacproto_ACCharSavePoolItem_send( fd , FAILED , Pooldataarg, clifdid ); }}void saacproto_ACCharGetPoolItem_recv( int fd, char *cdkey, int userindex, int clifdid, int npcid){ char loadbuf[CHARDATASIZE]; int ret=-1; if( !is_game_server_login( fd) ){ return; } ret = loadCharPoolItemOne( cdkey , loadbuf , sizeof(loadbuf)); if( ret == -1 ){//找不到档案 saacproto_ACCharGetPoolItem_send( fd , FAILED, loadbuf, clifdid, npcid); return; } saacproto_ACCharGetPoolItem_send( fd , SUCCESSFUL, loadbuf, clifdid, npcid);}#endif#ifdef _CHAR_POOLPETvoid saacproto_ACCharInsertPoolPet_recv( int fd, char *cdkey, int userindex, int clifdid, char *Pooldataarg){ if( !is_game_server_login( fd) ){ return; } if( InsertCharPoolPet( cdkey, Pooldataarg, strlen(Pooldataarg)) <= 0 ) { log("\n InsertPoolPet( %s) err!!\n", cdkey); saacproto_ACCharSavePoolPet_send( fd , FAILED , Pooldataarg, clifdid ); }}void saacproto_ACCharSavePoolPet_recv( int fd, char *cdkey, int userindex, int clifdid, char *Pooldataarg){ if( !is_game_server_login( fd) ){ return; } if( saveCharPoolPet( cdkey, Pooldataarg, strlen(Pooldataarg)) < 0 ) { saacproto_ACCharSavePoolPet_send( fd , FAILED , Pooldataarg, clifdid ); }}void saacproto_ACCharGetPoolPet_recv( int fd, char *cdkey, int userindex, int clifdid, int npcid){ char loadbuf[CHARDATASIZE]; int ret=-1; if( !is_game_server_login( fd) ){ return; } ret = loadCharPoolPetOne( cdkey , loadbuf , sizeof(loadbuf)); if( ret == -1 ){//找不到档案 saacproto_ACCharGetPoolPet_send( fd , FAILED, loadbuf, clifdid, npcid); return; } saacproto_ACCharGetPoolPet_send( fd , SUCCESSFUL, loadbuf, clifdid, npcid);}#endif#ifdef _UNIVERSE_CHATROOMvoid saacproto_ACUniChatroom_recv( int fd, char *cdkey, char *data, int userindex, int clifdid ){ CHATROOM_RecvAll( fd, cdkey, data, userindex, clifdid );}#endif#ifdef _RECAL_BACKUP_PLAYER // WON 回溯功能// 取有备份的日期void get_backup_date(int fd, char *uid, int userfdid, int GmCliId, char *id, int char_num, int date){ int filenum=-1, i; STRING64 filenames[256*30]; char char_data[65500]; char id_dir[20]; filenum = rgetFileName( BACKUP_DIR, filenames, arraysizeof(filenames) ); if( filenum == -1 ){ log("\n get_backup_date ==> filenum err !!"); return; } sprintf(id_dir, "%x", (getHash(id) & 0xff) ); memset(char_data, 0, sizeof(char_data)); // 找出符合帐号的备份日期 for( i = 0 ; i < filenum ; i ++ ){ if(strcmp(filenames[i].string, "") != 0 ){ char temp[64]; get_delim(filenames[i].string, temp, "_0x", ".tar" ); if(strcmp(temp, id_dir)==0){ char temp2[20]; get_delim(filenames[i].string, temp, "AC_", "_0x" ); snprintf(temp2, 11, "%s", temp); strcat( char_data, temp2); strcat( char_data, "|"); } } } saacproto_ACRecalPlayer_send(fd, uid, userfdid, GmCliId, id, char_num, date, char_data, 1); }// 取得线上人物资料void get_online_player_data(int fd, char *uid, int userfdid, int GmCliId, char *id, int char_num, int date){ FILE *fp; char filename[128]; char body[128]; char char_data[65500]; char *c_ptr, c_temp; c_ptr=char_data; snprintf(body , sizeof(body ) , "%s.%d.char" , id , char_num ); makeDirFilename(filename , sizeof(filename), chardir , getHash(id) ,body); if( !(fp=fopen(filename, "r")) ){ log("\n open (%s) file err", filename ); strcpy(char_data, "无此帐号人物资料"); saacproto_ACRecalPlayer_send(fd, uid, userfdid, GmCliId, id, char_num, date, char_data, 2); return; } strcpy(char_data, ""); do{ c_temp = fgetc(fp); *c_ptr=c_temp; c_ptr++; }while(c_temp != EOF); *c_ptr='\0'; fclose(fp); if( char_data[0]=='|' && char_data[1]=='|' ){ log("\n open (%s) file err", filename ); strcpy(char_data, "此帐号人物资料异常"); saacproto_ACRecalPlayer_send(fd, uid, userfdid, GmCliId, id, char_num, date, char_data, 2); return; } // 分析人物资料,取出所需的人物资料 analysis_char(char_data); saacproto_ACRecalPlayer_send(fd, uid, userfdid, GmCliId, id, char_num, date, char_data, 2);}void send_backup_player_data(){ FILE *fp; char filename[128]; char char_data[65500]; char *c_ptr, c_temp; int fd=-1, userfdid=-1, GmCliId=-1, char_num=-1, date=-1, i, j, count; char uid[64], id[64], temp[8][64], buf[255]; sprintf( filename, "%s", "backup_player_name2.txt"); if( !(fp=fopen(filename, "r")) ){ log("\n open backup_player_name2.txt err!!"); return; } strcpy(buf, ""); while(1) if( fscanf( fp, "%s", buf) == EOF ) break; fclose(fp); for(i=0; i<8; i++) memset(temp[i], 0, sizeof(temp[i]) ); i=0; j=0; count=0; for( i=0; i<strlen(buf)+1; i++ ){ if( buf[i] == '|' ){ j++; count=0; continue; } temp[j][count] = buf[i]; count++; } strcpy(filename, temp[0]); fd=atoi(temp[1]); strcpy(uid, temp[2]); userfdid=atoi(temp[3]); GmCliId=atoi(temp[4]); strcpy(id, temp[5]); char_num=atoi(temp[6]); date=atoi(temp[7]); if( (strcmp(uid,"")==0)||(userfdid==-1)||(GmCliId==-1)||(strcmp(id,"")==0)||(char_num==-1)||(date==-1) ) { strcpy(char_data, "无此帐号人物资料1"); saacproto_ACRecalPlayer_send(fd, uid, userfdid, GmCliId, id, char_num, date, char_data, 3); return; } sprintf( filename, "%s%s.%d.char", temp[0], id, char_num ); if( !(fp=fopen(filename, "r")) ){ log("\n open (%s) file err", filename ); strcpy(char_data, "无此帐号人物资料2"); saacproto_ACRecalPlayer_send(fd, uid, userfdid, GmCliId, id, char_num, date, char_data, 3); return; } c_ptr=char_data; strcpy(char_data, ""); do{ c_temp = fgetc(fp); *c_ptr=c_temp; c_ptr++; }while(c_temp != EOF); *c_ptr='\0'; fclose(fp); if( char_data[0]=='|' && char_data[1]=='|' ){ log("\n open (%s) file err", filename ); strcpy(char_data, "此帐号人物资料异常"); saacproto_ACRecalPlayer_send(fd, uid, userfdid, GmCliId, id, char_num, date, char_data, 3); return; } analysis_char(char_data); saacproto_ACRecalPlayer_send(fd, uid, userfdid, GmCliId, id, char_num, date, char_data, 3);}void get_backup_player_data(int fd, char *uid, int userfdid, int GmCliId, char *id, int char_num, int date){ char filename[128]; char body[255]; sprintf(filename, "AC_%d*_0x%x.tar.gz", date, (getHash(id)&0xff) ); strcpy(body, ""); sprintf(body, "echo \"%s|%d|%s|%d|%d|%s|%d|%d|0x%x\" > backup_player_name.txt; ~/saac/recal_player.sh", filename, fd, uid, userfdid, GmCliId, id, char_num, date, (getHash(id)&0xff) ); system(body);}void analysis_char(char *char_data){ int i; char delime[64]; extern struct PLAYER_DATA player_data; char_data_count=0; // player name memset( player_data.name, 0, sizeof(player_data.name) ); won_get(player_data.name, "", "|"); // player information _won_get_player( char_data ); // have item for(i=0; i<MAX_HAVE_ITEM; i++){ sprintf(delime, "item%d=", i); memset( player_data.item[i], 0, sizeof(player_data.item[i]) ); memset( player_data.item_name[i], 0, sizeof(player_data.item_name[i]) ); won_get(player_data.item[i], delime, "\\z"); if((strcmp( player_data.item[i], "")) == 0) continue; won_get(player_data.item_name[i], "na=", "\\z"); won_get(player_data.item[i], "ucode=", "\\z"); } // pool item for(i=MAX_HAVE_ITEM; i<MAX_HAVE_ITEM+MAX_POOL_ITEM; i++){ sprintf(delime, "poolitem%d=", i); memset( player_data.item[i], 0, sizeof(player_data.item[i]) ); memset( player_data.item_name[i], 0, sizeof(player_data.item_name[i]) ); won_get(player_data.item[i], delime, "\\z"); if((strcmp( player_data.item[i], "")) == 0) continue; won_get(player_data.item_name[i], "na=", "\\z"); won_get(player_data.item[i], "ucode=", "\\z"); } // have pet for(i=0; i<MAX_HAVE_PET; i++){ sprintf(delime, "pet%d=", i); memset( player_data.pet[i], 0, sizeof(player_data.pet[i]) ); memset( player_data.pet_name[i], 0, sizeof(player_data.pet_name[i]) ); won_get(player_data.pet[i], delime, "\\z"); if((
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -