📄 main.c
字号:
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 + -