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

📄 main.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
字号:
#include "version.h"#include <stdio.h>#include <time.h>#include <string.h>#include <signal.h>#include <unistd.h>#include "init.h"#include "net.h"#include "handletime.h"#include "char.h"#include "map_warppoint.h"#include "npcgen.h"#include "log.h"#include "configfile.h"#include "battle.h"#include "petmail.h"#include "autil.h"#include "family.h"#include "defend.h"#include "trade.h"#ifdef _NPCSERVER_NEW#include "npcserver.h"#endif#ifdef _RECAL_SEND_COUNT		// WON 传送GS资讯 #include "mclient.h"#endif#ifdef _DEATH_CONTEND#include "deathcontend.h"#endif#ifdef _CHATROOMPROTOCOL			// (不可开) Syu ADD 聊天室频道#include "chatroom.h"#endifstatic void ShutdownProc( void);void mainloop( void );struct  tm tmNow, tmOld;void family_proc();// Terry add 2001/10/11#ifdef _SERVICEextern int g_nServiceSocket;#endif#ifdef _CHANNEL_MODIFYextern int InitOccChannel(void);#endif#ifdef _ANGEL_SUMMON#define ANGELTIMELIMIT	3*24*60*60 // 完成任务时限(秒)int AngelReady =0;int AngelTimelimit = ANGELTIMELIMIT;time_t AngelNextTime;void AngelReadyProc();#endif#include "genver.h"void warplog_proc();int main( int argc , char** argv, char** env ){    /*  午曰丐尹内凛棉毛涩烂仄化云仁    */    setNewTime();    if ( argc > 1 && 0==strcmp(argv[1],"-v"))    {        printf("%s",genver);        exit(0);    }    else fprintf(stderr,"%s",genver);    EXITWITHEXITCODEIFFALSE( util_Init() , 1);    LoadAnnounce();	// Arminius 7.12 loginannounce	/* 赓渝涩烂 */	memcpy( &tmOld, localtime( (time_t *)&NowTime.tv_sec), sizeof( tmNow ) );    EXITWITHEXITCODEIFFALSE( init(argc , argv ,env ) , 1);    LoadPetTalk();	// Arminius 8.14 pet talk#ifdef _GAMBLE_BANK	Load_GambleBankItems();#endif#ifdef _CFREE_petskill	Load_PetSkillCodes();#endif#ifdef _ITEM_PILEFORTRADE	TRADE_InitTradeList();#endif#ifdef _DEATH_CONTEND	if( PKLIST_InitPkTeamList( MAXTEAMNUM ) == -1 ) return 1;#endif#if USE_MTIO    /* 穴伙民旦伊永玉及午五反仇仇匹坌昴 */        if( MTIO_setup() < 0 ){        print( "cannot setup MT environment\n" );        return 1;    }    /* 仇仇匹 join 仄化蔽   */    MTIO_join();#else    mainloop();#endif        return 0;}void mainloop( void ){    NPC_generateLoop( 1 );    signal(SIGUSR1,sigusr1);    signal(SIGUSR2,sigusr2);#ifdef _MAP_WARPPOINT	MAPPOINT_InitMapWarpPoint();	if( !MAPPOINT_loadMapWarpPoint() ){		return;	}#endif#ifdef _ASSESS_SYSEFFICACY	Assess_InitSysEfficacy();#endif#ifdef _CHECK_BATTLETIME	check_battle_com_init();#endif#ifdef _CHATROOMPROTOCOL			// (不可开) Syu ADD 聊天室频道	InitChatRoom();#endif#ifdef _CHANNEL_MODIFY	if(!InitOccChannel()) return;			// 初始化职业频道#endif#ifdef _GM_BROADCAST					// WON ADD 客服公告系统	Init_GM_BROADCAST( 0, 0, 0, "" );#endif#ifdef _DEATH_FAMILY_STRUCT		// WON ADD 家族战存放胜负资料	Init_FM_PK_STRUCT();			#endif#ifdef _ANGEL_SUMMON	AngelReady = 0;	AngelNextTime = time(NULL) + 1*60;#endif//#ifdef _ALLDOMAN//	InitHeroList();//#endif    while(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( ) ){			backupAllLogFile( &tmOld );		}        setNewTime();#ifdef _ASSESS_SYSEFFICACY_SUB //显示LOOP时间Assess_SysEfficacy_sub( 0, 1);        netloop_faster();Assess_SysEfficacy_sub( 1, 1);//Assess_SysEfficacy_sub( 0, 2);        NPC_generateLoop( 0 );//Assess_SysEfficacy_sub( 1, 2);Assess_SysEfficacy_sub( 0, 3);        BATTLE_Loop();Assess_SysEfficacy_sub( 1, 3);Assess_SysEfficacy_sub( 0, 4);        CHAR_Loop();Assess_SysEfficacy_sub( 1, 4);//Assess_SysEfficacy_sub( 0, 5);        PETMAIL_proc();//Assess_SysEfficacy_sub( 1, 5);//Assess_SysEfficacy_sub( 0, 6);        family_proc();//Assess_SysEfficacy_sub( 1, 6);//Assess_SysEfficacy_sub( 0, 7);        chardatasavecheck();//Assess_SysEfficacy_sub( 1, 7);#ifdef _GM_BROADCAST					// WON ADD 客服公告系统//Assess_SysEfficacy_sub( 0, 8);		GM_BROADCAST();//Assess_SysEfficacy_sub( 1, 8);#endif#else	//不显示LOOP时间        netloop_faster();        NPC_generateLoop( 0 );        BATTLE_Loop();        CHAR_Loop();        PETMAIL_proc();        family_proc();        chardatasavecheck();#ifdef _GM_BROADCAST					// WON ADD 客服公告系统		GM_BROADCAST();#endif#endif#ifdef _ANGEL_SUMMON		AngelReadyProc();#endif		if( tmOld.tm_sec != tmNow.tm_sec ) {			CHAR_checkEffectLoop();		}        if( SERVSTATE_getShutdown()> 0 ) {            ShutdownProc();        }		tmOld = tmNow;#ifdef _ASSESS_SYSEFFICACY		Assess_SysEfficacy( 1);#endif    }#ifdef _SERVICE    close(g_nServiceSocket);#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 分钟後,即开始进行server系统维护。"#define		SYSINFO_SHUTDOWN_MSG_COMP	"server已关闭。"	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 ) {		    SERVSTATE_SetAcceptMore( 0 );		}	}	/* closesallsockets */	if( hun == 0) {    	closeAllConnectionandSaveData();		SERVSTATE_setShutdown(0);		SERVSTATE_setDsptime(0);		SERVSTATE_setLimittime(0);#ifdef _KILL_12_STOP_GMSV      // WON ADD 下sigusr2後关闭GMSV		//andy_reEdit 2003/04/28不准开...		//system("./stop.sh"); #endif	}	}void family_proc(){	static	unsigned long gettime = 0;	static  unsigned long checktime = 0;	static  unsigned long proctime = 0;#ifdef _CK_ONLINE_PLAYER_COUNT    // WON ADD 计算线上人数		static	unsigned long player_count_time = 0;    int PLAYER_COUNT_TIME = 60*5;	  // 30秒传一次人数至 AC#endif#ifdef _RECAL_SEND_COUNT		// WON 传送GS资讯 	static	unsigned long recal_count_time = 0;    int RECAL_COUNT_TIME = 60;	  	if( (unsigned long)NowTime.tv_sec > recal_count_time  ){		recal_get_count();#ifdef _GSERVER_RUNTIME //传送GSERVER执行多少时间给MSERVER	    gserver_runtime();#endif		recal_count_time = (unsigned long)NowTime.tv_sec + RECAL_COUNT_TIME;	}#endif	if( time(NULL) < proctime ) return;	proctime = time(NULL)+5;	if( (unsigned long)NowTime.tv_sec > 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;	}#ifdef _CK_ONLINE_PLAYER_COUNT    // WON ADD 计算线上人数	if( (unsigned long)NowTime.tv_sec > player_count_time  ){		GS_SEND_PLAYER_COUNT();		player_count_time = (unsigned long)NowTime.tv_sec + PLAYER_COUNT_TIME;	}#endif}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_SUMMONextern 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;	if( player_online <= 10 )	{		//print(" ANGEL:线上人数不足=%d ", player_online);		return;	}	AngelReady = 1;	//AngelNextTime = min( (int)(10000/player_online), 100)*60 + (unsigned long)nowTime;	AngelNextTime = min( (int)(5000/player_online), 100)*60 + (unsigned long)nowTime;	temptime = localtime( &AngelNextTime );	sprintf( msg, " ANGEL:产生一位缺额  下次产生时间=(%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

⌨️ 快捷键说明

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