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

📄 gameserver.cpp

📁 奇迹世界 部分源代码奇迹世界 部分源代码奇迹世界 部分源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "stdafx.h"
#include ".\gameserver.h"

#include <iostream>
#include <IOCPServer.h>
#include <NetworkObject.h>
#include <ItemInfoParser.h>
#include <NPCInfoParser.h>
#include <MapInfoParser.h>
#include <ShopInfoParser.h>
#include <PacketStruct.h>
#include <Protocol.h>
#include "Player.h"
#include "ServerSession.h"
#include "MasterServerSession.h"
#include "GameDBProxySession.h"
#include "PacketHandler.h"
#include "ServerSessionFactory.h"
#include "ServerSessionManager.h"
#include "ObjectFactory.h"
#include "PlayerManager.h"
#include "MapAllocator.h"
#include <Global.h>
#include "DropManager.h"
#include "ObjectGroupManager.h"
#include "SkillInfoParser.h"
#include "TriggerParser.h"
#include "RegenParser.h"
#include "SkillFactory.h"
#include "GroupParser.h"
#include "PartyManager.h"
#include "AbilityFactory.h"
#include "StateInfoParser.h"
//#include <ItemOptionParser.h>
#include <ItemCompositeParser.h>
#include "TradeManager.h"
#include "SummonManager.h"
#include <SimpleModulus.h>
#include ".\ratiomanager.h"
#include <MissionRewardParser.h>
#include "FormulaRatioParser.h"
#include "SummonManager.h"
#include "GameZoneManager.h"
#include <GMList.h>
#include <ServerGlobal.h>
#include <Version.h>
#include <ServerBuildVersion.h>
#include "StyleQuickRegistInfoParser.h"
#include "AIParamParser.h"
#include "ServerOptionParser.h"
#include <LimitedMapPortParser.h>
#include <EnchantParser.h>
#include "GameGuildManager.h"
#include <RankOptionParser.h>
#include <SocketOptionParser.h>
#include "StatusFactory.h"
#include "CoolTimerFactory.h"


#define ERROR_PARSER(a)			if( !(a) )			\
								{					\
									DISP_FAIL;		\
									return FALSE;	\
								}

using namespace std;

GameServer * g_pGameServer = NULL;
CSimpleModulus *g_pEncryptor = NULL;
CSimpleModulus *g_pDecryptor = NULL;

NetworkObject * CreateServerSideAcceptedObject();
VOID DestroyServerSideAcceptedObject( NetworkObject *pNetworkObject );
VOID DestroyServerSideConnectedObject( NetworkObject *pNetworkObject );

GameServer::GameServer()
{
	m_bShutdown						= FALSE;
	m_pIOCPServer					= NULL;
	m_pNetworkPacket				= NULL;

	m_pMasterServerSession			= NULL;
	m_pGameDBProxySession			= NULL;
	m_pAgentServerSession			= NULL;
	m_pGuildServerSession			= NULL;

	/*
	m_pPlayerKeyGenerator			= NULL;
	m_pMonsterKeyGenerator			= NULL;
	m_pNPCKeyGenerator				= NULL;
	m_pFieldItemKeyGenerator		= NULL;
	*/

	m_hDll3DTerrain					= NULL;
	m_hDllNumerical					= NULL;
	m_pFileParser					= NULL;
	m_dwFPS							= 0;

	m_ui64TotalUserMoney			= 0;
	m_ui64TotalPlusMoney			= 0;
	m_ui64TotalMinusMoney			= 0;
}

GameServer::~GameServer()
{
	if( m_hDllNumerical )
	{
		FreeLibrary( m_hDllNumerical );
	}

	if( m_hDll3DTerrain )			
	{
		FreeLibrary( m_hDll3DTerrain );
	}

	SAFE_DELETE(m_pIOCPServer);
	SAFE_DELETE(m_pNetworkPacket);	
	SAFE_DELETE( m_pFileParser );
}

VOID GameServer::Release()
{
	m_bShutdown = TRUE;

	if( m_pIOCPServer ) m_pIOCPServer->Shutdown();

	SAFE_DELETE( g_pEncryptor );
	SAFE_DELETE( g_pDecryptor );

	// 目池飘俊 捞侩茄 技记 按眉 馆券
	if( m_pMasterServerSession )
	{
		ServerSessionFactory::Instance()->FreeServerSession( (ServerSession*)m_pMasterServerSession );
	}
	if( m_pGameDBProxySession )
	{
		ServerSessionFactory::Instance()->FreeServerSession( (ServerSession*)m_pGameDBProxySession );
	}
	if( m_pAgentServerSession )
	{
		ServerSessionFactory::Instance()->FreeServerSession( (ServerSession*)m_pAgentServerSession );
	}
	if( m_pGuildServerSession )
	{
		ServerSessionFactory::Instance()->FreeServerSession( (ServerSession*)m_pGuildServerSession );
	}

	ServerSessionFactory::DestroyInstance();


	g_GameZoneManager.Release();
	g_GameGuildManager.Release();

	ServerOptionParser::Instance()->Release();			ServerOptionParser::DestroyInstance();

	ItemInfoParser::Instance()->Release();				ItemInfoParser::DestroyInstance();
	GMList::Instance()->Release();						GMList::DestroyInstance();
	NPCInfoParser::Instance()->Release();				NPCInfoParser::DestroyInstance();
	MapInfoParser::Instance()->Release();				MapInfoParser::DestroyInstance();
	ShopInfoParser::Instance()->Release();				ShopInfoParser::DestroyInstance();
	SkillInfoParser::Instance()->Release();				SkillInfoParser::DestroyInstance();
	RegenParser::Instance()->Release();					RegenParser::DestroyInstance();
	GroupParser::Instance()->Release();					GroupParser::DestroyInstance();
	StateInfoParser::Instance()->Release();				StateInfoParser::DestroyInstance();
	ItemCompositeParser::Instance()->Release();			ItemCompositeParser::DestroyInstance();
	RankOptionParser::Instance()->Release();			RankOptionParser::DestroyInstance();
	SocketOptionParser::Instance()->Release();			SocketOptionParser::DestroyInstance();

	MissionRewardParser::Instance()->Release();			MissionRewardParser::DestroyInstance();
	FormulaRatioParser::Instance()->Release();			FormulaRatioParser::DestroyInstance();
	StyleQuickRegistInfoParser::Instance()->Release();	StyleQuickRegistInfoParser::DestroyInstance();
	AIParamParser::Instance()->Release();				AIParamParser::DestroyInstance();
	LimitedMapPortParser::DestroyInstance();
	EnchantParser::DestroyInstance();
	g_DropManager.Release();

	ObjectFactory::Instance()->Release();				ObjectFactory::DestroyInstance();
	SkillFactory::Instance()->Release();				SkillFactory::DestroyInstance();
	PartyManager::Instance()->Release();				PartyManager::DestroyInstance();
	AbilityFactory::Instance()->Release();				AbilityFactory::DestroyInstance();
	SummonManager::Instance()->Release();				SummonManager::DestroyInstance();
	StatusFactory::Instance()->Release();				StatusFactory::DestroyInstance();
	CoolTimerFactory::Instance()->Release();			CoolTimerFactory::DestroyInstance();

	PacketHandler::DestroyInstance();					
	ServerSessionManager::DestroyInstance();
	PlayerManager::DestroyInstance();

	g_MapAllocator.Release();
	g_TradeManager.Release();
	g_Ratio.Release();

}

VOID GameServer::UpdateServerTitle()
{
#ifdef _DEBUG
	DisplayDebugInfo( GetServerType(), TRUE, C2S_HIGH_VERSION_NO, C2S_MIDDLE_VERSION_NO, C2S_LOW_VERSION_NO, SERVER_RELEASE_BUILD_NO,GetServerKey().GetWorldID(),GetServerKey().GetChannelID(),GetServerKey().GetServerID() );
#else
	DisplayDebugInfo( GetServerType(), FALSE, C2S_HIGH_VERSION_NO, C2S_MIDDLE_VERSION_NO, C2S_LOW_VERSION_NO, SERVER_RELEASE_BUILD_NO,GetServerKey().GetWorldID(),GetServerKey().GetChannelID(),GetServerKey().GetServerID() );
#endif
}

BOOL GameServer::Init()
{
	SERVER_OPTION& stServerOptionInfo = ServerOptionParser::Instance()->GetInfo();

	srand( GetTickCount() );

	UpdateServerTitle();

	// 3D浚柳评 瘤屈浚柳DLL, 荐摹浚柳DLL 肺爹
#ifdef _DEBUG
	char *lpsz3DTerrainDLL = "3DTerrain_sd.dll";
	char *lpszNumericDLL = "Numeric_d.dll";
#else
	char *lpsz3DTerrainDLL = "3DTerrain_s.dll";
	char *lpszNumericDLL = "Numeric.dll";
#endif

	DISPMSG(  "Loading \"%s\"...", lpsz3DTerrainDLL );
	m_hDll3DTerrain = Load3DTerrainLibrary( lpsz3DTerrainDLL, &m_fnContactTerrain );
	if ( !m_hDll3DTerrain )
	{
		DISP_FAIL;
		return FALSE;
	}
	DISP_OK;

	DISPMSG(  "Loading \"%s\"...", lpszNumericDLL );
	m_hDllNumerical = LoadNumericalLibrary( lpszNumericDLL, &m_fnContactNumerical );
	if( !m_hDllNumerical )
	{
		DISP_FAIL;
		return FALSE;
	}
	DISP_OK;

	// 鞠龋拳 虐 肺爹
	g_pEncryptor = new CSimpleModulus;
	g_pDecryptor = new CSimpleModulus;
	DISPMSG(  "Loading cipher keys..." );
	if( !g_pEncryptor->LoadEncryptionKey( "data\\Enc1.dat" ) )
	{
		DISP_FAIL;
		return FALSE;
	}
	if( !g_pDecryptor->LoadDecryptionKey( "data\\Dec2.dat" ) )
	{
		DISP_FAIL;
		return FALSE;
	}
	DISP_OK;

	// 阿辆 沥焊 肺爹 => 馆靛矫 Reload 贸府档 眉农且 巴!!
	DISPMSG(  "Loading text files..." );
	ItemInfoParser::Instance()->Init(stServerOptionInfo.m_wItemInfo);

	ERROR_PARSER( ItemInfoParser::Instance()->Load( "data\\WeaponItemInfo.txt" ) );
	ERROR_PARSER( ItemInfoParser::Instance()->Load( "data\\ArmorItemInfo.txt" ) );
	ERROR_PARSER( ItemInfoParser::Instance()->Load( "data\\WasteItemInfo.txt" ) );
	ERROR_PARSER( ItemInfoParser::Instance()->Load( "data\\AccessoryItemInfo.txt" ) );

	ERROR_PARSER( GMList::Instance()->Load( "data\\GMList.txt", "data\\SuperUserList.txt" ) );

	NPCInfoParser::Instance()->Init( stServerOptionInfo.m_wNPCInfo);
	ERROR_PARSER( NPCInfoParser::Instance()->Load( "data\\NPCInfo.txt" ) );

	MapInfoParser::Instance()->Init( stServerOptionInfo.m_wMapInfo );
	ERROR_PARSER( MapInfoParser::Instance()->Load( "data\\", "World.txt", "Field.txt" ) );

	ShopInfoParser::Instance()->Init( stServerOptionInfo.m_wShopInfo );
	ERROR_PARSER( ShopInfoParser::Instance()->Load( "data\\ShopInfo.txt" ) );

	SkillInfoParser::Instance()->Init( stServerOptionInfo.m_wSkillInfo );
	ERROR_PARSER( SkillInfoParser::Instance()->Load( "data\\SkillInfo.txt", "data\\StyleInfo.txt" ) );

	RegenParser::Instance()->Init( stServerOptionInfo.m_wRegenInfo );
	ERROR_PARSER( RegenParser::Instance()->Load( "data\\Regen.txt" ) );

	GroupParser::Instance()->Init( stServerOptionInfo.m_wGroupInfo );
	ERROR_PARSER( GroupParser::Instance()->Load( "data\\Group.txt" ) );

	StateInfoParser::Instance()->Init( stServerOptionInfo.m_wStateInfo );
	ERROR_PARSER( StateInfoParser::Instance()->Load( "data\\StateInfo.txt" ) );

	ItemCompositeParser::Instance()->Init( stServerOptionInfo.m_wItemCompInfo, stServerOptionInfo.m_wItemCompResultInfo );
	ERROR_PARSER( ItemCompositeParser::Instance()->Load( "data\\ItemCompositeInfo.txt", "data\\ItemCompositeResultInfo.txt" ) );

	ERROR_PARSER( RankOptionParser::Instance()->Load( "data\\RankOptionInfo.txt" ) );
	ERROR_PARSER( SocketOptionParser::Instance()->Load( "data\\SocketOptionInfo.txt" ) );

	MissionRewardParser::Instance()->Init(stServerOptionInfo.m_wMissionRewardInfo);
	ERROR_PARSER( MissionRewardParser::Instance()->Load( "data\\MissionRewardInfo.txt" ) );

	FormulaRatioParser::Instance()->Init(stServerOptionInfo.m_wFormulaRatioInfo);
	ERROR_PARSER( FormulaRatioParser::Instance()->Load( "data\\FormulaRatio.txt" ) );

	StyleQuickRegistInfoParser::Instance()->Init(stServerOptionInfo.m_wStyleQuickInfo);
	ERROR_PARSER( StyleQuickRegistInfoParser::Instance()->Load( "data\\StyleQuickRegistInfo.txt" ) );

	ERROR_PARSER( AIParamParser::Instance()->Load( "data\\AIParameters.txt" ) );

	ERROR_PARSER( LimitedMapPortParser::Instance()->Load( "data\\LimitedMapPort.txt" ) );
	ERROR_PARSER( EnchantParser::Instance()->Load( "data\\Enchant.txt" ) );

	g_DropManager.Initialize( "data\\ItemDropPerGrade.txt", "data\\ItemDropInfo.txt", "data\\RareItemDropInfo.txt" );

	DISP_OK;

	SERVER_ENV * pServerEnv = m_pFileParser->GetServerEnv();

	// Object Pool 檬扁拳窍扁 傈俊 酿鸥烙何磐 秦具茄促.
	CoolTimerFactory::Instance()->Init( stServerOptionInfo.m_wCoolTimerCharPool*300 );

	/// Object Pool 檬扁拳
	DISPMSG(  "Creating object factories..." );
	ObjectFactory::Instance()->Init( stServerOptionInfo.m_wPlayerPool, stServerOptionInfo.m_wNPCPool, stServerOptionInfo.m_wItemPool,
									 stServerOptionInfo.m_wMapObjectPool, stServerOptionInfo.m_wMapNPCPool );

	SkillFactory::Instance()->Init( stServerOptionInfo.m_wPlayerSkillPool, stServerOptionInfo.m_wNPCSkillPool );
	AbilityFactory::Instance()->Init( stServerOptionInfo.m_wAbilityPool );
	PartyManager::Instance()->Init( stServerOptionInfo.m_wPartyPool );
	SummonManager::Instance()->Init( stServerOptionInfo.m_wSummonPool );	// 家券篮 割 疙 沥档啊 且鳖?...阁胶磐档 器窃秦辑!
	StatusFactory::Instance()->Init( stServerOptionInfo.m_wStatusPool );
	DISP_OK;

	DISPMSG(  "Register PacketHandler..." );
	if( !PacketHandler::Instance()->RegisterHandler_DG() )
	{
		DISP_FAIL;
		return FALSE;
	}
	if( !PacketHandler::Instance()->RegisterHandler_AG() )
	{
		DISP_FAIL;
		return FALSE;
	}
	if( !PacketHandler::Instance()->RegisterHandler_GM() )
	{
		DISP_FAIL;
		return FALSE;
	}
	if( !PacketHandler::Instance()->RegisterHandler_GZ() )
	{
		DISP_FAIL;
		return FALSE;

⌨️ 快捷键说明

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