Files
Sun1602/Server/DatabaseProxy/DBProxyScriptParserManager.cpp
2022-10-26 12:25:11 +08:00

304 lines
13 KiB
C++

#include "StdAfx.h"
#include ".\dbproxyscriptparsermanager.h"
#include "DBProxyServerEx.h"
#include <RankingManager.h>
#include <ItemInfoParser.h>
#include <SunEventInfoParser.h>
#include <NewCharItemInfoParser.h>
#include <CharInfoParser.h> // NOTE: f110427.3L, added by _NA_002050_20110216_ADD_GENDER
#include <ExtraStoneOptionInfoParser.h>
#include <NPCInfoParser.h>
#include <PetInfoParser.h> // (f100603.3L) change a policy to parse the db proxy server has a pet info.
#include <QuestScriptLoader.h>
#include <MapInfoParser.h>
// (f100713.2L) import a drop information to support a changed new char information table
#include <ItemTypeList.h>
#include <SkillSystem/PerkInfoParser.h>
#include "SocketSystem/SocketItemRatioParser.h" //_NA_000251_20100727_SOCKET_SYSTEM
#ifdef _USE_MAX_CHAR_LIST_PARSER
#include <MaxCharListParser.h>
#endif
//_NA002635_GZ_DZ_PROTOCOL_UINIFICATION_IN_DBP = {
#include <GuildRankInfoParser.h>
#include <GuildRightInfoParser.h>
#include <MaxGuildMemberInfoParser.h>
#include <DominationInfoParser.h>
//}
//_NA_003923_20120130_GUILD_RENEWAL
#include <GuildInfoParser.h>
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
#include <GuildFacilityInfoParser.h>
#endif //_NA_007330_20140620_GUILD_SYSTEM_EXTENSION
// _NA_008801_20160429_ADD_GUILDMISSION_TIMEINFO_SCRIPT
#include "ChaosZoneSystem/OneDaysGuildMissionInfoParser.h"
// @history
// ~10/01/04
// 10/01/04|waverix|add area conquest parser for db batch unit|
// 10/01/06|waverix|add extra stone parser for SCItemSlot enable valid conversion stream|
#include "Services/PortalRankingManager.h"
#if !defined(_NA002635_GP_DP_PROTOCOL_UINIFICATION)
extern RankingManager g_RankingHelper;
#endif
#if DBPROXY_TYPE_SELECTOR == DBPROXY_TYPE_UNIT
#include "SpecialPurposeUnits/BatchUnitFactory.hxx"
#include "SpecialPurposeUnits/QuestManagerForUnit.h"
//C_NA_0_20100520_ACSYSTEM_CHANGED
#include <AchievementParser.h>
#endif // (DBPROXY_TYPE_SELECTOR == DBPROXY_TYPE_UNIT)
DBProxyScriptParserManager::DBProxyScriptParserManager()
{
}
DBProxyScriptParserManager::~DBProxyScriptParserManager()
{
}
void DBProxyScriptParserManager::InitParserPool(void* pool_option)
{
__UNUSED(pool_option);
#if DBPROXY_TYPE_SELECTOR != DBPROXY_TYPE_ACCOUNT
ItemInfoParser::Instance()->Init(3000);
ExtraStoneOptionInfoParser::Instance()->Init(10);
#ifdef _NA_007128_20140326_MONDSCHIEN_DOMINATION
MapInfoParser::Instance()->Init(10);
#endif //_NA_007128_20140326_MONDSCHIEN_DOMINATION
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
GuildFacilityInfoParser::Instance()->Init(0);
#endif //_NA_007330_20140620_GUILD_SYSTEM_EXTENSION
#if DBPROXY_TYPE_SELECTOR == DBPROXY_TYPE_UNIT
AreaConquestInfoParser::Instance()->Init(10);
MapInfoParser::Instance()->Init(10);
batch_unit::quest_script_parser_global.SetQuestInfoManager(\
&batch_unit::quest_info_manager_global_);
batch_unit::quest_script_parser_global.SetEventRegister(\
&batch_unit::quest_event_register_dummy_);
//C_NA_0_20100520_ACSYSTEM_CHANGED
AchievementParser::Instance()->Init(100);
NPCInfoParser::Instance()->Init(100);
#endif
#endif
}
BOOL DBProxyScriptParserManager::RegisterParser()
{
//==================================================================================================
# if DBPROXY_TYPE_SELECTOR == DBPROXY_TYPE_ACCOUNT
//==================================================================================================
return true;
//==================================================================================================
#elif DBPROXY_TYPE_SELECTOR == DBPROXY_TYPE_DEFAULT
//==================================================================================================
#ifdef _NA002635_GP_DP_PROTOCOL_UINIFICATION
#ifdef _NA_008012_20150130_RANKING_SYSTEM
ERROR_PARSER(RegisterScriptData(SCRIPT_MISSIONRANKINGREWARD,
"data\\MissionRankingReward.txt", &g_RankingMgr));
ERROR_PARSER(RegisterScriptData(SCRIPT_MISSIONRANKINGLVAREA,
"data\\MissionRankingLVArea.txt", &g_RankingMgr));
#endif // _NA_008012_20150130_RANKING_SYSTEM
#else
ERROR_PARSER(RegisterScriptData(SCRIPT_MISSIONRANKINGLVAREA,
"data\\MissionRankingLVArea.txt", &g_RankingHelper));
#endif
ERROR_PARSER(RegisterScriptData(SCRIPT_ACCESSORYITEMINFO,
"data\\AccessoryItemInfo.txt", ItemInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_ARMORITEMINFO,
"data\\ArmorItemInfo.txt", ItemInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_WASTEITEMINFO,
"data\\WasteItemInfo.txt", ItemInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_WEAPONITEMINFO,
"data\\WeaponItemInfo.txt", ItemInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_CHARGEITEMINFO,
"data\\ChargeItemInfo.txt", ItemInfoParser::Instance()));
//
// (f100713.2L)
ERROR_PARSER(RegisterScriptData(SCRIPT_ITEMTYPELIST,
"data\\ItemTypeList.txt", ItemTypeList::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_EXTRASTONEOPTIONINFO,
"data\\ExtraStoneOptionInfo.txt", ExtraStoneOptionInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_NEW_CHARACTER_ITEM_INFO,
"data\\NewCharacterItemInfo.txt", NewCharItemInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_INITCHARINFO,
"data\\InitCharInfoList.txt", CharInfoParser::Instance()));
// (f100603.3L)
ERROR_PARSER(RegisterScriptData(SCRIPT_PET_INFO,
"data\\PetManageInfo.txt", PetInfoParser::Instance()));
//_KR_0_20091021_FIRENDINVITATION_EXTEND
ERROR_PARSER(RegisterScriptData(SCRIPT_SUNEVENTINFO,
"data\\SunEventInfo.txt", SunEventInfoParser::Instance()));
//_NA_000251_20100727_SOCKET_SYSTEM
// CHANGES: f110305.3L, added script loading process
// to support socket functionality in NewCharacterItemProvier.
ERROR_PARSER(RegisterScriptData(SCRIPT_SOCKET_ITEM_RATIO_INFO,
"data\\SocketItemRatio.txt", SocketItemRatioParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_PERKINFO,
"data\\PerkInfo.txt", PerkInfoParser::Instance()));
#ifdef _USE_MAX_CHAR_LIST_PARSER
ERROR_PARSER(RegisterScriptData(SCRIPT_MAX_CHAR_LIST,
"data\\MaxCharList.txt", MaxCharListParser::Instance()));
#endif
#ifdef _NA002635_GZ_DZ_PROTOCOL_UINIFICATION_IN_DBP
ERROR_PARSER(RegisterScriptData(SCRIPT_GUILD_RANK_INFO,
"data\\GuildRankInfo.txt", GuildRankInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_GUILD_RIGHT_INFO,
"data\\GuildRightInfo.txt", GuildRightInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_MAX_GUILD_MEMBER_INFO,
"data\\GuildMemberInfo.txt", MaxGuildMemberInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_DOMINATIONINFO,
"data\\DominationInfo.txt", DominationInfoParser::Instance()));
#ifdef _NA_008334_20150608_SONNENSCHEIN
//_NA_008801_20160429_ADD_GUILDMISSION_TIMEINFO_SCRIPT
ERROR_PARSER( RegisterScriptData(SCRIPT_GUILDMISSIONTIME_INFO,
"data\\GuildMissionTimeInfo.txt", OneDaysGuildMissionInfoParser::Instance()));
#endif //_NA_008334_20150608_SONNENSCHEIN
#endif
#ifdef _NA_003923_20120130_GUILD_RENEWAL
ERROR_PARSER(RegisterScriptData(SCRIPT_GUILDINFO,
"data\\GuildInfo.txt", GuildInfoParser::Instance()));
#endif
#ifdef _NA_007128_20140326_MONDSCHIEN_DOMINATION
ERROR_PARSER(RegisterScriptData( SCRIPT_WORLD_SUB_INFO,
"data\\Worldsubinfo.txt", MapInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_WORLD,
"data\\World.txt", MapInfoParser::Instance()));
#endif //_NA_007128_20140326_MONDSCHIEN_DOMINATION
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
ERROR_PARSER(RegisterScriptData(SCRIPT_GUILD_FACILITY_INFO,
"data\\GuildFacilityInfo.txt", GuildFacilityInfoParser::Instance()));
#endif //_NA_007330_20140620_GUILD_SYSTEM_EXTENSION
#ifdef __WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__
//----------------------------------------------------------------------------------------------
;{
sSCRIPT_DATA_INFO_NODE pNodeTable[SCRIPT_LIST_SIZE];
if (!GetScriptDataNodeList(pNodeTable, SCRIPT_LIST_SIZE)) {
return false;
};
ScriptDataManager::RegisterDataList(pNodeTable);
ScriptDataManager::RegisterCallbackAllDataLoaded(DBProxyServerEx::StartServer);
};
//----------------------------------------------------------------------------------------------
#endif //__WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__
//==================================================================================================
#elif DBPROXY_TYPE_SELECTOR == DBPROXY_TYPE_UNIT
//==================================================================================================
ERROR_PARSER(RegisterScriptData(SCRIPT_ACCESSORYITEMINFO,
"data\\AccessoryItemInfo.txt", ItemInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_ARMORITEMINFO,
"data\\ArmorItemInfo.txt", ItemInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_WASTEITEMINFO,
"data\\WasteItemInfo.txt", ItemInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_WEAPONITEMINFO,
"data\\WeaponItemInfo.txt", ItemInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_CHARGEITEMINFO,
"data\\ChargeItemInfo.txt", ItemInfoParser::Instance()));
//
// (f100713.2L)
ERROR_PARSER(RegisterScriptData(SCRIPT_ITEMTYPELIST,
"data\\ItemTypeList.txt", ItemTypeList::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_EXTRASTONEOPTIONINFO,
"data\\ExtraStoneOptionInfo.txt", ExtraStoneOptionInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_NEW_CHARACTER_ITEM_INFO,
"data\\NewCharacterItemInfo.txt", NewCharItemInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_INITCHARINFO,
"data\\InitCharInfoList.txt", CharInfoParser::Instance()));
// (f100603.3L)
ERROR_PARSER(RegisterScriptData(SCRIPT_PET_INFO,
"data\\PetManageInfo.txt", PetInfoParser::Instance()));
//_KR_0_20091021_FIRENDINVITATION_EXTEND
ERROR_PARSER(RegisterScriptData(SCRIPT_SUNEVENTINFO,
"data\\SunEventInfo.txt", SunEventInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_QUESTINFO,
"data\\QuestInfo.txt", &batch_unit::quest_script_parser_global));
//C_NA_0_20100520_ACSYSTEM_CHANGED
ERROR_PARSER(RegisterScriptData(SCRIPT_ACHIEVEMENT_INFO,
"data\\ACScript.txt", AchievementParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_WORLD_SUB_INFO,
"data\\Worldsubinfo.txt", MapInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_WORLD,
"data\\World.txt", MapInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_FIELD,
"data\\Field.txt", MapInfoParser::Instance(), SEPERATOR_WHITESPACE, NULL, true));
ERROR_PARSER(RegisterScriptData(SCRIPT_FIELDWMO,
"data\\Fieldwmo.txt", MapInfoParser::Instance(), SEPERATOR_WHITESPACE, NULL, true));
ERROR_PARSER(RegisterScriptData(SCRIPT_FIELDWUT,
"data\\Fieldwut.txt", MapInfoParser::Instance(), SEPERATOR_WHITESPACE, NULL, true));
if (BatchunitFactory::GetUnitType() == BatchunitFactory::AC_CONVERT)
{
//C_NA_0_20100520_ACSYSTEM_CHANGED
ERROR_PARSER(RegisterScriptData(SCRIPT_ACSCRIPT,
"data\\oldACScript.txt", AreaConquestInfoParser::Instance()));
ERROR_PARSER(RegisterScriptData(SCRIPT_NPCINFO,
"data\\NPCInfo.txt", NPCInfoParser::Instance()));
}
#ifdef _USE_MAX_CHAR_LIST_PARSER
ERROR_PARSER(RegisterScriptData(SCRIPT_MAX_CHAR_LIST,
"data\\MaxCharList.txt", MaxCharListParser::Instance()));
#endif
#ifdef __WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__
#error "The batch unit is only processing on local environments"
#endif //
//==================================================================================================
#endif //DBPROXY_TYPE_SELECTOR != DBPROXY_TYPE_ACCOUNT
//==================================================================================================
return true;
}
void DBProxyScriptParserManager::DestroyInstanceEx()
{
#if DBPROXY_TYPE_SELECTOR != DBPROXY_TYPE_ACCOUNT
ItemInfoParser::DestroyInstance();
ExtraStoneOptionInfoParser::DestroyInstance();
// (f100603.3L)
PetInfoParser::DestroyInstance();
#if DBPROXY_TYPE_SELECTOR == DBPROXY_TYPE_UNIT
AreaConquestInfoParser::DestroyInstance();
#endif
SunEventInfoParser::DestroyInstance(); //_KR_0_20091021_FIRENDINVITATION_EXTEND
NewCharItemInfoParser::DestroyInstance();
// (f100713.2L)
ItemTypeList::Instance()->Release();
ItemTypeList::DestroyInstance();
PerkInfoParser::DestroyInstance();
//_NA_000251_20100727_SOCKET_SYSTEM
SocketItemRatioParser::DestroyInstance();
#ifdef _USE_MAX_CHAR_LIST_PARSER
MaxCharListParser::DestroyInstance();
#endif
#ifdef _NA002635_GZ_DZ_PROTOCOL_UINIFICATION_IN_DBP
GuildRankInfoParser::DestroyInstance();
GuildRightInfoParser::DestroyInstance();
MaxGuildMemberInfoParser::DestroyInstance();
DominationInfoParser::DestroyInstance();
#endif
#ifdef _NA_003923_20120130_GUILD_RENEWAL
GuildInfoParser::DestroyInstance();
#endif
#ifdef _NA_007128_20140326_MONDSCHIEN_DOMINATION
MapInfoParser::DestroyInstance();
#endif //_NA_007128_20140326_MONDSCHIEN_DOMINATION
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
GuildFacilityInfoParser::DestroyInstance();
#endif //_NA_007330_20140620_GUILD_SYSTEM_EXTENSION
#endif
}