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

📄 recv.c

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