int main( int argc , char** argv, char** env ) { //if(attestation()<1) // { // print("无法通过正版验证!具体请联系购买者!\n"); // exit(0); // } //if (strcmp(getlocaltime(), TimeLimitLocal)>0)exit(0); #ifdef _ONLINENUM_FIX system("ulimit -HSn 2048"); #endif /* とりあえず時間を設定しておく */ setNewTime(); /* if ( argc > 1 && 0==strcmp(argv[1],"-v")) { printf("%s",genver); exit(0); } else fprintf(stderr,"%s",genver);*/ readconfigfile(getConfigfilename()); EXITWITHEXITCODEIFFALSE( util_Init() , 1); LoadAnnounce(); // Arminius 7.12 loginannounce /* 赓渝涩烂 */ memcpy( &tmOld, localtime( (time_t *)&NowTime.tv_sec), sizeof( tmNow ) ); sasql_init(); EXITWITHEXITCODEIFFALSE( init(argc , argv ,env ) , 1); sasql_online(NULL,NULL,NULL,NULL,NULL,3); LoadPetTalk(); // Arminius 8.14 pet talk #ifdef _GAMBLE_BANK Load_GambleBankItems(); #endif #ifdef _CFREE_petskill Load_PetSkillCodes(); #endif #ifdef _ITEM_PILEFORTRADE TRADE_InitTradeList(); #endif mainloop(); return 0; } void mainloop( void ) { print("初始化NPC..."); NPC_generateLoop( 1 ); print("完成\n"); print("初始化signal1..."); signal(SIGUSR1,sigusr1); print("完成\n"); print("初始化signal2..."); signal(SIGUSR2,sigusr2); print("完成\n"); #ifdef _MAP_WARPPOINT print("初始化地图传送点..."); MAPPOINT_InitMapWarpPoint(); print("完成\n"); if( !MAPPOINT_loadMapWarpPoint() ){ return; } #endif #ifdef _ASSESS_SYSEFFICACY Assess_InitSysEfficacy(); #endif #ifdef _CHATROOMPROTOCOL // (不可开) Syu ADD 聊天室频道 print("初始化聊天室频..."); InitChatRoom(); print("完成\n"); #endif #ifdef _CHANNEL_MODIFY print("初始化职业频道..."); if(!InitOccChannel()) return; // 初始化职业频道 print("完成\n"); #endif #ifdef _ANGEL_SUMMON print("初始化精灵召奂时间..."); AngelReady = 0; #ifdef _ANGEL_TIME AngelNextTime = time(NULL) + getAngelPlayerTime(); #else AngelNextTime = time(NULL) + 1*60; #endif print("完成\n"); #endif #ifdef _JZ_NEWSCRIPT_LUA print("初始化LNS引擎..."); NPC_Lua_Init(getLuaFile()); print("完成\n"); #endif #ifdef _ITEM_LUA print("初始化道具LUA引擎..."); int itemluaflg=ITEM_LuaInit(getitemluafile()); if(itemluaflg==TRUE){ print("完成\n"); }else{ print("失败\n"); } #endif #ifdef _ALLBLUES_LUA print("初始化LUA脚本..."); LoadAllbluesLUA("data/ablua"); print("完成\n"); #endif //if (strcmp(getlocaltime(), TimeLimitLocal)>0)exit(0); //#ifdef _ALLDOMAN // print("初始化英雄表列..."); // InitHeroList(); // print("完成\n"); //#endif int itime=0; while(1){ if(getCpuUse()!=-1){ itime++; if(itime>getCpuUse()){ itime=0; usleep(1); } } #ifdef _ASSESS_SYSEFFICACY Assess_SysEfficacy( 0 ); #endif setNewTime(); memcpy(&tmNow, localtime( (time_t *)&NowTime.tv_sec), sizeof( tmNow ) ); if( tmOld.tm_hour != getLogHour( ) && tmNow.tm_hour == getLogHour( ) ){ #ifdef _GMSV_DEBUG DebugMainFunction="backupAllLogFile"; #endif backupAllLogFile( &tmOld ); } setNewTime(); #ifdef _ASSESS_SYSEFFICACY_SUB //显示LOOP时间 //Assess_SysEfficacy_sub( 0, 1); #ifdef _GMSV_DEBUG DebugMainFunction="netloop_faster"; #endif netloop_faster(); //Assess_SysEfficacy_sub( 1, 1); //Assess_SysEfficacy_sub( 0, 2); #ifdef _GMSV_DEBUG DebugMainFunction="NPC_generateLoop"; #endif NPC_generateLoop( 0 ); //Assess_SysEfficacy_sub( 1, 2); //Assess_SysEfficacy_sub( 0, 3); #ifdef _GMSV_DEBUG DebugMainFunction="BATTLE_Loop"; #endif BATTLE_Loop(); //Assess_SysEfficacy_sub( 1, 3); //Assess_SysEfficacy_sub( 0, 4); #ifdef _GMSV_DEBUG DebugMainFunction="CHAR_Loop"; #endif CHAR_Loop(); //Assess_SysEfficacy_sub( 1, 4); #ifdef _GMSV_DEBUG DebugMainFunction="PETMAIL_proc"; #endif PETMAIL_proc(); #ifdef _GMSV_DEBUG DebugMainFunction="family_proc"; #endif family_proc(); #ifdef _GMSV_DEBUG DebugMainFunction="chardatasavecheck"; #endif chardatasavecheck(); #ifdef _GMSV_DEBUG DebugMainFunction="AngelReadyProc"; #endif AngelReadyProc(); //tmOld = tmNow; if( tmOld.tm_sec != tmNow.tm_sec ) { /*#ifdef _CAX_YANZHENG if(yanzheng != 0){ exit(1); } #endif*/ #ifdef _GMSV_DEBUG DebugMainFunction="CHAR_checkEffectLoop"; #endif CHAR_checkEffectLoop(); } if( SERVSTATE_getShutdown()> 0 ) { ShutdownProc(); #ifdef _GMSV_DEBUG DebugMainFunction="ShutdownProc"; #endif } tmOld = tmNow; #ifdef _ASSESS_SYSEFFICACY Assess_SysEfficacy( 1 ); #endif #endif } } static void sendmsg_toall( char *msg ) { int i; int playernum = CHAR_getPlayerMaxNum(); for( i = 0 ; i < playernum ; i++) { if( CHAR_getCharUse(i) != FALSE ) { CHAR_talkToCli( i, -1, msg, CHAR_COLORYELLOW); } } } static void ShutdownProc( void) { #define SYSINFO_SHUTDOWN_MSG "%d 分钟后开始进行系统停机维护, 请大家提前下线以免数据丢失。" #define SYSINFO_SHUTDOWN_MSG_COMP "服务器已关闭。" int diff,hun; diff = NowTime.tv_sec - SERVSTATE_getShutdown(); hun = SERVSTATE_getLimittime() - (diff/60); if( hun != SERVSTATE_getDsptime() ){ char buff[256]; if( hun != 0 ) { snprintf( buff, sizeof(buff), SYSINFO_SHUTDOWN_MSG, hun); } else { strcpy( buff, SYSINFO_SHUTDOWN_MSG_COMP); } sendmsg_toall( buff); SERVSTATE_setDsptime(hun); if( hun == 1 ) { int i=0; unsigned int MAX_USER=0; MAX_USER=getPlayercharnum(); for(i=0;i gettime ){ getNewFMList(); gettime = (unsigned long)NowTime.tv_sec + 60*10; } if( (unsigned long)NowTime.tv_sec > checktime ){ checkFamilyIndex(); checktime = (unsigned long)NowTime.tv_sec + 60*30; } } void warplog_proc() { static unsigned long checktime = 0; if( (unsigned long)NowTime.tv_sec > checktime ){ warplog_to_file(); checktime = (unsigned long)NowTime.tv_sec + 300; } } #ifdef _ANGEL_SUMMON extern int player_online; void AngelReadyProc() { //static time_t lastCreateTime = time(NULL); time_t nowTime; //static unsigned long AngelNextTime = 30*60; struct tm *temptime; char msg[1024]; nowTime = time(NULL); if( nowTime < AngelNextTime ) return; #ifdef _ANGEL_TIME if( player_online <= getAngelPlayerMun() ) #else if( player_online <= 10 ) #endif { // print("\n精灵召唤:线上人数不足=%d\n", player_online ); return; } AngelReady = 1; //AngelNextTime = min( (int)(10000/player_online), 100)*60 + (unsigned long)nowTime; #ifdef _ANGEL_TIME AngelNextTime = min( (int)(getAngelPlayerTime()/player_online) + 1, 100)*60 + (unsigned long)nowTime;//精灵召唤时间为什么一直显示? #else AngelNextTime = min( (int)(5000/player_online), 100)*60 + (unsigned long)nowTime; #endif temptime = localtime( &AngelNextTime ); sprintf( msg, "\r精灵召唤:产生一位缺额 下次产生时间=(%d/%d %d:%d) 目前人数=%d", temptime->tm_mon+1, temptime->tm_mday, temptime->tm_hour, temptime->tm_min, player_online ); print( msg); //LogAngel( msg); } #endif