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

📄 main.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 4 页
字号:
                mb[top_store].next = mb[top].next;                prev = top;                top = mb[top].next;                unregMemBuf( prev );            } else {                top = mb[top].next;            }        }    }        return total;}static int getLineReadBuffer( int index , char *buf, int len ){    int top = con[index].mbtop_ri;    int ti = 0 , breakflag = 0;    for(;;){        int i;                int l = mb[top].len;        if( top == -1 )break;        for( i=0 ; i < l ; i++){            if( mb[top].buf[i] == '\n' ){                breakflag = 1;                break;            }            ti ++;        }        if( breakflag )break;        top = mb[top].next;    }    if( ti > len ){        /* 1垫互卅互允亢月[    卅巨仿□毛井尹六 */        return TCPSTRUCT_ETOOLONG;    }    /* 垫互敦岳仄化卅中 */    if( breakflag == 0 ){        return 0;    }    return consumeMemBufList( con[index].mbtop_ri , buf , ti+1 , 1 , 1 );}/*    心仇户月    赢今毛忒允  int index : con index  return:    反巨仿□  0动晓及桦宁反 read 仄化手方中赢今[  mbsize 井日mbuse 毛娄中化扔奶术毛井仃月分仃[  仇引井中芴曰及坌反  骰允月[公氏卅称井中袄卞仇分歹日卅仁化手第[   */   static int getFreeMem( void ){    return ( mbsize - mbuse ) * sizeof( mb[0].buf );}/*    membuf 及坞五毛茧仄分允[  return : 心勾井匀凶日 >=0 匹 index.  心勾井日卅井匀凶日    腹绸及午五卞反 mb_finder 毛勾井丹[  仇木匹腹绸仄化}    卞reg允月[ */static int findregBlankMemBuf( void  ){    int i;    for(i=0;i<mbsize;i++){        mb_finder ++;        if( mb_finder >= mbsize || mb_finder < 0 ) mb_finder = 0;        if( mb[mb_finder].use == 0 ){            mb[mb_finder].use = 1;            mb[mb_finder].len = 0;            mb[mb_finder].next = -1;            mbuse ++;            return mb_finder;        }    }    return TCPSTRUCT_EMBFULL;}/*  mb 毛荸  允月   */static int unregMemBuf(  int index ){    mb[index].use=0;    mb[index].next = -1;    mb[index].len = 0;    mbuse --;    return OK;}static int findregBlankCon( void ){    int i;		// Nuke changed 0->1		//for(i=0;i<MAXCONNECTION;i++){    for(i=1;i<MAXCONNECTION;i++){        if( con[i].use == 0 ){            con[i].use = 1;            con[i].fd = -1;            con[i].mbtop_ri = findregBlankMemBuf();            if( con[i].mbtop_ri < 0 ){                fprintf( stderr , "EMBFULL\n" );                return TCPSTRUCT_EMBFULL;            }                        con[i].mbtop_wi = findregBlankMemBuf();            if( con[i].mbtop_wi < 0 ){                unregMemBuf( con[i].mbtop_ri );                fprintf( stderr , "EMBFULL\n" );                return TCPSTRUCT_EMBFULL;            }            bzero( & con[i].remoteaddr , sizeof( struct sockaddr_in));            con[i].closed_by_remote = 0;            return i;        }    }    return TCPSTRUCT_ECFULL;}int tcpstruct_countmbuse( void ){    int i,c=0;    for(i=0;i<mbsize;i++){        if( mb[i].use )c++;    }    return c;}char * getGSName( int i ){    return gs[i].name;}void checkGSUCheck( char *id ){    int i;    char gname[256];    if(!id[0])	return;	memset( gname, 0,  sizeof( gname) );	if( LockNode_getGname( (getHash(id) & 0xff), id, gname) <= 0 ){		log("Can't find gname from id:%x/%s err !!\n", getHash( id), id);		return;	}	log("\n");    for(i=0; i < MAXCONNECTION; i++ ){        if( gs[i].name[0] && strcmp( gs[i].name , gname )==0){            log("sending UCheck[%s] to %d.%x/%s fd:%d !!\n", id, i, getHash( id), gname, gs[i].fd);			saacproto_ACUCheck_send( gs[i].fd , id );			return;        }    }	log("Can't find gname:%s sending err !!\n", gname);}void set_nodelay( int sock ){    int flag = 1;    int result = setsockopt( sock, IPPROTO_TCP, TCP_NODELAY,                             (char*)&flag, sizeof(int));    if( result < 0 ){        log( "不能设置延迟.\n" );    } else {        log( "设置延迟: fd:%d\n", sock );    }}/*  允屯化及必□丞扔□田□卞  霜[  int flag : 1分匀凶日霜耨葭卞反云仁日卅中   */void gmsvBroadcast( int fd, char *p1, char *p2, char *p3 , int flag ){    int i,c=0;        for(i=0;i<MAXCONNECTION;i++){        if( ( flag == 1 ) && ( i == fd ) )continue;        if( gs[i].use && gs[i].name[0] ){            saacproto_Broadcast_send( i, p1,p2,p3);            c++;        }    }/*#if 1    {        char fn[1000];        FILE *fp;        snprintf( fn, sizeof(fn), "%s/broadcast.log" , logdir );        fp = fopen( fn,"a" );        if(fp){            fprintf( fp, "From %s(%d) Id:[%s] Char:[%s] Mesg:[%s]\n",                     gs[fd].name, fd, p1,p2,p3 );            fclose(fp);        }    }#endif*/}// 星系移民void sigusr2(int a){		FILE *listfile;	char databuf[1024];	//char fname[1024];	//char new_fname[1024];	char backup_movelist[1024];	//char playerinfo[1024], frominfo[1024], toinfo[1024];	char *playerinfo;	int frominfo, toinfo;	int i, j;	char servername[16][20] =	{		"仙女", // 0		"太阳", // 1		"天神", // 2		"北斗", // 3		"紫微", // 4		"苍龙", // 5		"银河系", // 6		"香港", // 7		"星乐园", // 8		"网路家庭", // 9		"圣兽", // 10		"天鹰", // 11		"新界", // 12		"仙女1", // 13		"仙女2", // 14		"仙女3" // 15	};	log("\n  %s Change_Galaxies.......\n", saacname);	// 解除全部移民锁定	DeleteGalaxyChangeLock(0);	for( j=1; j<=12; j++) {		char listfilename[1024];				// 读取移民列表		sprintf( listfilename, "StaMove_%d.txt", j);		listfile = fopen( listfilename, "r");		if( listfile == NULL)		{			continue;		}		log("打开列表文件:%s\n", listfilename);				while(1)		{			if( fgets( databuf, sizeof(databuf), listfile) == NULL )				break;						if( databuf[0] == '#')				continue;						// 读一笔资料  (帐号 来源星系 目的星系)			//if( sscanf( databuf, "%s,%s,%s", playerinfo, frominfo, toinfo) != 3)			//	continue;			playerinfo = strtok( databuf, ",");			if( playerinfo == NULL) continue;			frominfo = atoi( strtok( NULL, ","));			toinfo = atoi( strtok( NULL, ","));						log("\n %s,%d,%d ", playerinfo, frominfo, toinfo);			if( (frominfo <0) || ( frominfo >15) || (toinfo <0) || ( toinfo >15))				continue;						// 是否要移民出去或移民进来			if( !strcmp( servername[frominfo], saacname) || !strcmp( servername[toinfo], saacname) )			{								log(" from:%s to:%s ", servername[frominfo], servername[toinfo]);				// 锁帐号#ifdef _LOCK_ADD_NAME				InsertMemLock( getHash(playerinfo) & 0xff, playerinfo, "", "", "星系移民", 0, "0");#else				InsertMemLock( getHash(playerinfo) & 0xff, playerinfo, "", "星系移民", 0, "0");#endif								// 踢人				log("移民前踢人 ");				for(i=0;i<MAXCONNECTION;i++)	{					if( is_game_server_login(i) ){						saacproto_ACKick_send( i , 1 , playerinfo , -2/*mesgid*/ );						log(" %d->%s->%s", i, gs[i].name, playerinfo);					}				}			}			//else			//{			//	continue;			//}					}				// 列表档案改名备份		//sprintf( backup_movelist, "%s.old", listfilename);		//rename( listfilename, backup_movelist);				fclose( listfile);			}	signal(SIGUSR2, sighandle);}#ifdef _ANGEL_SUMMON#define MISSIONFILE "db/missiontable.txt"static int initMissionTable( void ){	FILE *fp;	char onedata[1024];	char buf[1024];	int index =0;	memset( missiontable, 0, sizeof(missiontable));	fp = fopen( MISSIONFILE, "r");	if( !fp ) {		log("\n加载任务错误!!!! \n");		//return false;	}	log("\n加载任务...");	while(1) {		//		if( fgets( onedata, sizeof(onedata), fp) == NULL)			break;		if( onedata[0] == NULL || onedata[0] == '#' )			continue;		//easyGetTokenFromBuf( onedata, ',', 1, buf, sizeof( buf));		//index = atoi( buf);		easyGetTokenFromBuf( onedata, ',', 1, buf, sizeof( buf));		if( buf[0] == NULL ) continue;		strcpy( missiontable[index].angelinfo, buf);		easyGetTokenFromBuf( onedata, ',', 2, buf, sizeof( buf));		if( buf[0] == NULL ) continue;		strcpy( missiontable[index].heroinfo, buf);		easyGetTokenFromBuf( onedata, ',', 3, buf, sizeof( buf));		if( buf[0] == NULL ) continue;		missiontable[index].mission = atoi( buf);		easyGetTokenFromBuf( onedata, ',', 4, buf, sizeof( buf));		if( buf[0] == NULL ) continue;		missiontable[index].flag = atoi( buf);		easyGetTokenFromBuf( onedata, ',', 5, buf, sizeof( buf));		if( buf[0] == NULL ) continue;		missiontable[index].time = atoi( buf);		easyGetTokenFromBuf( onedata, ',', 6, buf, sizeof( buf));		if( buf[0] == NULL ) continue;		missiontable[index].limittime = atoi( buf);		log(" %d=%s,%s,%d,%d,%d,%d \n", index,			missiontable[index].angelinfo,			missiontable[index].heroinfo,			missiontable[index].mission,			missiontable[index].flag,			missiontable[index].time,			missiontable[index].limittime );		index++;		if( index >= MAXMISSIONTABLE) break;	}	fclose( fp);	log("..成功! \n");	//return true;}int saveMissionTable( void ){	FILE *fp;	char onedata[1024];	char buf[1024];	int index =0;	fp = fopen( MISSIONFILE, "w");	if( !fp ) {		log("\n打开任务错误!!!! \n");		//return false;	}	log("\n\n保存任务...");	for( index =0; index < MAXMISSIONTABLE; index++) {		if( missiontable[index].angelinfo[0] == NULL )			continue;		sprintf( onedata, "%s,%s,%d,%d,%d,%d\n",			missiontable[index].angelinfo,			missiontable[index].heroinfo,			missiontable[index].mission,			missiontable[index].flag,			missiontable[index].time,			missiontable[index].limittime );		fputs( onedata, fp);	}	fclose( fp);	log("..成功! \n");	//return true;}void delMissionTableOnedata( int index){	int gi;	log("\n删除任务:%d:%s:%s \n", index, missiontable[index].angelinfo, missiontable[index].heroinfo);	if( index <0 || index >=MAXMISSIONTABLE) return;	strcpy( missiontable[index].angelinfo, "");	strcpy( missiontable[index].heroinfo, "");	missiontable[index].mission = 0;	missiontable[index].flag = MISSION_NONE;	missiontable[index].time = 0;	missiontable[index].limittime = 0;		for( gi=0; gi<MAXCONNECTION; gi++) {		if (gs[gi].use && gs[gi].name[0]) {			saacproto_ACMissionTable_send( gi, index, 3, "", "");		}	}}#define ANSWERTIME 1 // 等待回答时间(小时)//#define DOINGTIME 3*24 // 任务时间(小时)#define BOUNDSTIME 1*24 // 保留时间(小时)void checkMissionTimelimit( void){	int index;	static time_t lastcheck =0;	if( sys_time < lastcheck + 5*60 )		return;	log("\n检查任务时间限制:%d \n", sys_time);	for( index =0; index < MAXMISSIONTABLE; index++) {		if( missiontable[index].flag == MISSION_NONE) {			continue;		}		// 等待使者回应1小时		else if( missiontable[index].flag == MISSION_WAIT_ANSWER				&& sys_time > missiontable[index].time + ANSWERTIME*60*60 ) {						delMissionTableOnedata( index);// 删		}		// 等待领奖完成 limittime小时		else if( ( missiontable[index].flag == MISSION_DOING || missiontable[index].flag == MISSION_HERO_COMPLETE )				&& ( sys_time > (missiontable[index].time + missiontable[index].limittime*60*60))		 ) {			char buf[1024];			int gi;			// 改TIMEOVER			log(" 任务及领奖时间过:%d ", index);			missiontable[index].flag = MISSION_TIMEOVER;			missiontable[index].time = time(NULL);			missiontable[index].limittime = BOUNDSTIME;						sprintf( buf, "%d|%s|%s|%d|%d|%d|%d ", index,				missiontable[index].angelinfo,				missiontable[index].heroinfo,				missiontable[index].mission,				missiontable[index].flag,				missiontable[index].time,				missiontable[index].limittime );			for( gi=0; gi<MAXCONNECTION; gi++) {				if (gs[gi].use && gs[gi].name[0]) {					saacproto_ACMissionTable_send( gi, 1, 1, buf, "");				}			}						continue;		}		//else if( missiontable[index].flag == MISSION_HERO_COMPLETE		//		&& sys_time > missiontable[index].time + BOUNDSTIME*60*60 ) {		//	log(" 领奖时间过:%d ", index);		//	delMissionTableOnedata( index);// 删		//}		// 资料保留时间(BOUNDSTIME小时)		else if( missiontable[index].flag == MISSION_TIMEOVER				&& sys_time > missiontable[index].time + BOUNDSTIME*60*60 ) {			log(" 保留时间过:%d ", index);			delMissionTableOnedata( index);// 删		}	}	saveMissionTable();	lastcheck = sys_time;}#endif#ifdef _RACEMAN//#define RANKFILE "race/ranktable.txt"struct RankTable ranktable[DEFMAXRANK];static int initRankTable( void ){	//FILE *fp;	memset( ranktable, 0, sizeof(ranktable));/*	fp = fopen( RANKFILE, "r");	if( !fp ) {		log("\n\n Load RankTable ERROR!!!! \n\n");	}	log("\n\n Load RankTable... \n");*/	return;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -