📄 gameserver.cpp
字号:
#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 + -