DragonNest/GameCommon/DnTableDB.cpp
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

2123 lines
No EOL
73 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "StdAfx.h"
#include "DnTableDB.h"
#include "./boost/algorithm/string.hpp"
#if defined(_GAMESERVER)
#include "DNGameRoom.h"
#elif !defined(_VILLAGESERVER)
#include "DnGameTask.h"
#endif
#ifdef _TEST_CODE_KAL
#include "PerfCheck.h"
#endif
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
CDnTableDB::CDnTableDB()
#ifdef PRE_ADD_REDUCE_TABLE_RESOURCE
: m_bTableUseInGame( false )
#endif // PRE_ADD_REDUCE_TABLE_RESOURCE
{
}
CDnTableDB::~CDnTableDB()
{
Finalize();
}
#ifdef PRE_ADD_REDUCE_TABLE_RESOURCE
void CDnTableDB::SetTableFileInfo()
{
AddTableFileInfo( TACTOR, "ActorTable", "_StaticName", true );
AddTableFileInfo( TPARTS, "PartsTable", "_SetItemID", true, false );
AddTableFileInfo( TWEAPON, "WeaponTable", "_SetItemID", true, false );
AddTableFileInfo( TTILE, "TileTable", "_Name" );
AddTableFileInfo( TENVIEFFECT, "EnviEffectTable", NULL, true );
AddTableFileInfo( TMAP, "MapTable", "_EnterConditionTableID;_MapSubType", true, false );
AddTableFileInfo( TPLAYERLEVEL, "PlayerLevelTable" );
AddTableFileInfo( TMONSTER, "MonsterTable", "_ActorTableID", true, false );
AddTableFileInfo( TMONSTERCOMPOUND, "MonsterCompoundTable" );
AddTableFileInfo( TITEM, "ItemTable", NULL, true );
AddTableFileInfo( TPROP, "PropTable", "_Name", true, false );
AddTableFileInfo( TJOB, "JobTable", "_JobNumber;_BaseClass", false, false );
AddTableFileInfo( TSKILL, "SkillTable", NULL, true );
AddTableFileInfo( TITEMDROP, "ItemDropTable", NULL, true );
AddTableFileInfo( TDEFAULTCREATE, "DefaultCreateTable" );
AddTableFileInfo( TNPC, "NpcTable", "_ActorIndex", true, false );
AddTableFileInfo( TQUEST, "QuestTable", NULL, true );
AddTableFileInfo( TPLAYERWEIGHT, "PlayerWeightTable" );
AddTableFileInfo( TTALKPARAM, "TalkParamTable" );
AddTableFileInfo( TSKILLLEVEL, "SkillLevelTable", "_SkillIndex", true, false );
AddTableFileInfo( TMAPGATE, "MapGateTable", "_PermitPlayerLevel;_MapIndex", false, false );
AddTableFileInfo( TSOCIAL, "ActorFaceTable", NULL, true );
AddTableFileInfo( TMONSTERSKILL, "MonsterSkillTable", NULL, true );
AddTableFileInfo( TSHOP, "ShopTable" );
AddTableFileInfo( TMONSTERPARTS, "MonsterPartsTable" );
AddTableFileInfo( TSKILLSHOP, "SkillShopTable" );
AddTableFileInfo( TSUMMONPROP, "SummonPropTable" );
AddTableFileInfo(TDUNGEONENTER, "StageEnterTable", "_LvlMin;_AbyssLvlMin;_AbyssQuestID;_RecommendEasyLevel;_RecommendNormalLevel;_RecommendHardLevel;_RecommendVeryHardLevel;_RecommendNightmareLevel;_RecommendChaosLevel;_RecommendHellLevel", false, false);
AddTableFileInfo( TDUNGEONCLEAR, "StageClearTable" );
AddTableFileInfo( TCLEARSTANDARD, "ClearStandard" );
AddTableFileInfo( TSYMBOLITEM, "SymbolItemTable" );
AddTableFileInfo( TCUTSCENE, "CutSceneTable" );
AddTableFileInfo( TPLATE, "PlateTable" );
AddTableFileInfo( TITEMCOMPOUND, "ItemCompoundTable", "_CompoundGroupID;_CompoundPotentialID", false, false );
AddTableFileInfo( TSTATEEFFECT, "StateEffectTable" );
AddTableFileInfo( TDUNGEONMAP, "StageSetTable" );
AddTableFileInfo( TTODAYTIP, "TodayToolTipTable" );
AddTableFileInfo( TFILE, "FileTable", NULL, true );
AddTableFileInfo( TQUESTREWARD, "QuestRewardTable" );
AddTableFileInfo( TMONSTERWEIGHT, "MonsterWeightTable", "_MonsterTableIndex", true, false );
AddTableFileInfo( TQUESTCHAPTER, "QuestChapterTable" );
AddTableFileInfo( TEQUIPMATCHACTION, "EquipMatchActionTable", "_Class", false, false );
AddTableFileInfo( TFACE, "FaceAnimationTable", NULL, true );
AddTableFileInfo( TREBIRTHCOIN, "CoinTable" );
AddTableFileInfo( TPVPMAP, "PvPMapTable", NULL, false, false );
AddTableFileInfo( TPVPGAMEMODE, "PvPGameModeTable" );
AddTableFileInfo( TPVPGAMESTARTCONDITION, "PvPGameStartConditionTable" );
AddTableFileInfo( TCP, "CPTable" );
AddTableFileInfo( TGAMEROOMNAME, "PvPDefaultRoomNameTable" );
AddTableFileInfo( TGLOBALWEIGHT, "GlobalWeightTable" );
AddTableFileInfo( TGLOBALWEIGHTINT, "GlobalWeightIntTable" );
#ifdef PRE_FIX_MEMOPT_ENCHANT
AddTableFileInfo( TENCHANT_MAIN, "enchantmaintable", "_EnchantID", true, false );
#else
AddTableFileInfo( TENCHANT, "EnchantTable", "_EnchantID", true, false );
#endif
AddTableFileInfo( TPOTENTIAL, "PotentialTable", "_PotentialID", true, false );
AddTableFileInfo( TSETITEM, "SetItemTable" );
AddTableFileInfo( TEQUALLEVEL, "EqualLevelTable", "_Mode", false, false );
AddTableFileInfo( TMISSION, "MissionTable" );
AddTableFileInfo( TAPPELLATION, "AppellationTable" );
AddTableFileInfo( TPVPRANK, "PvPRankTable" );
AddTableFileInfo( TPVPWINCONDITION, "PvPGameStartConditionTable" );
AddTableFileInfo( TITEMCOMPOUNDSHOP, "ItemCompoundShopTable", "_ListID", false, false );
AddTableFileInfo( TEQUALBASIS, "EqualBasisTable" );
AddTableFileInfo( TDAILYMISSION, "DailyMissionTable" );
AddTableFileInfo( TSCHEDULE, "ScheduleTable" );
AddTableFileInfo( TWORLDMAPUI, "WorldMapUI" );
AddTableFileInfo( TTAX, "TaxTable", NULL, true );
AddTableFileInfo( TMISSIONSCHEDULE, "MissionScheduleTable" );
AddTableFileInfo( TRADIOMSG, "RadioMsgTable", "_MacroNum", false, false );
AddTableFileInfo( TGESTURE, "GestureTable" );
AddTableFileInfo( TMONSTERGROUP, "MonsterGroupTable" );
AddTableFileInfo( TMONSTERSET, "MonsterSetTable", "_SetNo", false, false );
AddTableFileInfo( TSKILLTREE, "SkillTreeTable", "_SkillTableID", false, false );
AddTableFileInfo( TITEMDROPGROUP, "ItemDropGroupTable", "_DropGroupID", true, false );
AddTableFileInfo( TGUILDUSERCAP, "GuildUserCapTable" );
AddTableFileInfo( TDLMAP, "DLMapTable" );
AddTableFileInfo( TDLDUNGEONCLEAR, "DLStageClearTable" );
AddTableFileInfo( TCASHCOMMODITY, "CashCommodity" );
AddTableFileInfo( TCASHGOODSINFO, "CashGoodsInfoTable" );
AddTableFileInfo( TCASHPACKAGE, "CashPackageTable" );
AddTableFileInfo( TCASHLIMIT, "CashLimitTable" );
AddTableFileInfo( TWEATHER, "WeatherTable" );
AddTableFileInfo( TPCCAFE, "PCCafeTable" );
AddTableFileInfo( TFATIGUEADJUST, "FatigueAdjustmentTable" );
AddTableFileInfo( TCASHPRESENTREACT, "CashPresentReactTable" );
#ifdef PRE_ADD_GACHA_JAPAN
AddTableFileInfo( TGACHA_JP, "GachaJP", "_GachaNum", false, false );
AddTableFileInfo( TGACHASETITEM_JP, "GachaSetItemJP", "_GachaNum", false, false );
#endif
AddTableFileInfo( TSEALCOUNT, "SealCountTable" );
AddTableFileInfo( TLEVELUPEVENT, "LevelupEventTable" );
#if defined(PRE_ADD_VIP)
AddTableFileInfo( TVIP, "VIPTable" );
AddTableFileInfo( TVIPGRADE, "VIPGradeTable" );
#endif // #if defined(PRE_ADD_VIP)
AddTableFileInfo( TCASHTAB,"CashTabTable" );
AddTableFileInfo( TFAIRY,"FairyTable" );
AddTableFileInfo( TCOSMIX,"CashItemCompoundTable" );
AddTableFileInfo( TCOSMIXABILITY,"CashCompoundInfoTable" );
AddTableFileInfo( TGLYPHSKILL,"GlyphSkillTable" );
AddTableFileInfo( TGLYPHSLOT,"GlyphSlotTable" );
AddTableFileInfo( TLEVELPROMO,"WelfareTable" );
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
AddTableFileInfo( TREPUTE,"ReputeTable", "_NpcID", false, false );
AddTableFileInfo( TPRESENT,"PresentTable" );
AddTableFileInfo( TNPCREACTION,"NpcReactionTable" );
AddTableFileInfo( TSTOREBENEFIT,"StoreBenefit", "_NpcID" );
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
AddTableFileInfo( TMAIL,"MailTable", NULL, true );
AddTableFileInfo( TMODDLG,"CustomDialogTable" );
AddTableFileInfo( TMASTERSYSTEM_DECREASE,"MasterSysDecreaseTable" );
AddTableFileInfo( TMASTERSYSTEM_GAIN,"MasterSysGainTable" );
AddTableFileInfo( TVEHICLE,"VehicleTable", "_VehicleClassID", true, false );
AddTableFileInfo( TVEHICLEPARTS,"VehiclePartsTable", NULL, true );
AddTableFileInfo( TPOTENTIALJEWEL,"PotentialJewelTable" );
AddTableFileInfo( TEVENTPOPUP,"PopUpTable" );
AddTableFileInfo( TCHARMITEM,"CharmItemTable" );
AddTableFileInfo( TCHARMITEMKEY,"CharmItemkeyTable" );
#if defined( PRE_ADD_SECONDARY_SKILL )
AddTableFileInfo( TSecondarySkill,"secondaryskilltable" );
AddTableFileInfo( TSecondarySkillLevel,"secondaryskillleveltable" );
AddTableFileInfo( TSecondarySkillRecipe,"makeitemrecipetable" );
#endif // #if defined( PRE_ADD_SECONDARY_SKILL )
AddTableFileInfo( TSKILLVIDEO,"SkillVideoTable" );
AddTableFileInfo( TGUILDWAREHOUSE,"GuildWareHouse" );
AddTableFileInfo( TFARMCULTIVATE,"farmcultivatetable" );
AddTableFileInfo( TFARMSKIN,"farmskintable" );
AddTableFileInfo( TFISHING,"fishingtable" );
AddTableFileInfo( TFISHINGPOINT,"fishingpointtable" );
AddTableFileInfo( TFISHINGAREA,"fishingareatable" );
AddTableFileInfo( TFISHINGROD,"fishingrodtable" );
AddTableFileInfo( TQUESTPERIOD,"QuestDailyTable" );
AddTableFileInfo( TGLOBALEVENTQUEST,"globalevent" );
AddTableFileInfo( TSTAFFROLL,"StaffRollTable" );
AddTableFileInfo( TCOLLECTIONBOOK,"CollectionBookTable" );
AddTableFileInfo( TEXCHANGETRADE,"Exchange" );
AddTableFileInfo( TSKILLBUBBLE,"SkillBubbleTable" );
AddTableFileInfo( TSKILLBUBBLEDEFINE,"SkillBubbleDefine" );
AddTableFileInfo( TENCHANTJEWEL,"EnchantJewelTable" );
AddTableFileInfo( TPVPMISSIONROOM,"PvPMissionRoomTable" );
AddTableFileInfo( TEQUALEXPONENT,"EqualExponentValue" );
#ifdef PRE_MOD_ITEM_COMPOUND_DIALOG_RENEWAL
AddTableFileInfo( TITEMCOMPOUNDGROUP,"ItemCompoundGroupTable", "_ListID;_MainCategory;_JobClass;_Level", false, false );
#else
AddTableFileInfo( TITEMCOMPOUNDGROUP,"ItemCompoundGroupTable", "_ListID", false, false );
#endif
AddTableFileInfo( TEXPADJUST,"expadjustmenttable" );
AddTableFileInfo( TSTAGEREWARD,"StageRewardTable" );
AddTableFileInfo( TMONSTERSKILL_TRANS,"monsterskilltable_transform" );
AddTableFileInfo( TMONSTER_TRANS,"monstertable_transform" );
AddTableFileInfo( TMONSTERGROUP_TRANS,"monstergrouptable_transform" );
AddTableFileInfo( TGHOULMODE_CONDITION,"ghoulconditiontable" );
AddTableFileInfo( TPVPGAMEMODESKILLSETTING,"pvpgamemodeskillsetting" );
AddTableFileInfo( TMONSTER_TRANS_RADIOMSG,"monsterradiomsgtable" );
AddTableFileInfo( TMONSTER_TRANS_RADIOBASE,"monsterradiochangetable" );
AddTableFileInfo( TCONNECTINGTIME,"TimeEventTable" );
AddTableFileInfo( THELP,"HelpTable" );
AddTableFileInfo( TGUIDEPOPUP,"guidepopup" );
AddTableFileInfo( TREPUTEBENEFIT,"ReputeBenefit" );
AddTableFileInfo( THELPKEYWORD,"helpkeywordtable" );
AddTableFileInfo( TINSTANTITEM,"instantitemtable" );
AddTableFileInfo( TGUILDMARK,"guildmarktable" );
AddTableFileInfo( TBATTLEGROUNDMODE,"battlegroundmodesetting" );
AddTableFileInfo( TBATTLEGROUNDRESWAR,"battlegroundresourcewar" );
AddTableFileInfo( TBATTLEGROUNDSKILLTREE,"battlegroundskilltreetable", "_SkillTableID", false, false );
AddTableFileInfo( TBATTLEGROUNDSKILLLEVEL,"battlegroundskillleveltable", "_SkillIndex", false, false );
AddTableFileInfo( TBATTLEGROUNDSKILL,"battlegroundskilltable" );
AddTableFileInfo( TRESOURCEWARSKIN,"resorcewarskin" );
AddTableFileInfo( TUNION,"uniontable", "_UnionID", false, false );
AddTableFileInfo( TGUILDWARREWARD,"guildwarmailtable" );
AddTableFileInfo( TPLAYERCOMMONLEVEL,"playercommonleveltable" );
AddTableFileInfo( TGACHAINFO,"gachatable" );
AddTableFileInfo( TPETLEVEL, "petleveltable" );
AddTableFileInfo( TPETSKILLLEVEL, "skillleveltable_pet" );
AddTableFileInfo( TMASTERSYSFEEL, "mastersysfeeltable" );
AddTableFileInfo( TATTENDANCEEVENT, "everydayeventtable" );
#ifdef PRE_ADD_CASH_AMULET
AddTableFileInfo( TCASHCHATBALLOONTABLE, "chatboxtable" );
#endif
AddTableFileInfo( TTRIGGERVARIABLETABLE, "trigervariabletable" );
AddTableFileInfo( TLOADINGANI, "loadinganitable" );
AddTableFileInfo( TITEMOPTION, "itemoption" );
AddTableFileInfo( TVILLAGEALLOWEDSKILL, "villageallowedskilltable", "_villageAllowedSkill", true, false );
AddTableFileInfo( TCOMBINEDSHOP, "combinedshoptable" );
AddTableFileInfo( TGLYPHCHARGE, "glyphchargetable" );
#ifdef PRE_FIX_MEMOPT_ENCHANT
AddTableFileInfo( TENCHANT_STATE, "enchantmaxstatetable" );
AddTableFileInfo( TENCHANT_NEEDITEM, "enchantneeditemtable" );
#endif
#ifdef PRE_ADD_SHUTDOWN_CHILD
AddTableFileInfo( TSHUTDOWNMSG, "shutdownmsgtable" );
#endif
AddTableFileInfo( TPLAYERCUSTOMEVENTUI, "playercustomeventui" );
AddTableFileInfo( TGUILDLEVEL, "guildleveltable" );
AddTableFileInfo( TGUILDWARPOINT, "guildwarpointtable" );
AddTableFileInfo( TQUEST_LEVELCAP_REWARD, "QuestLevelCabRewardTable" );
AddTableFileInfo( TGUILDREWARDITEM, "guildrewardtable" );
AddTableFileInfo( TWING, "wingtable" );
#ifdef PRE_ADD_MODIFY_PLAYER_CANNON
AddTableFileInfo( TCANNON, "actorcannontable" );
#endif
#ifdef PRE_ADD_COSRANDMIX
AddTableFileInfo( TCOSMIXINFO, "costumemixinfo" );
AddTableFileInfo( TCOSRANDOMMIXINFO,"costumemixtable" );
#endif // PRE_ADD_COSRANDMIX
#ifdef PRE_ADD_SALE_COUPON
AddTableFileInfo( TSALECOUPON, "coupontable" );
#endif // PRE_ADD_SALE_COUPON
#ifdef PRE_ADD_DONATION
AddTableFileInfo( TCONTRIBUTION, "donationcompensationtable" );
#endif
AddTableFileInfo( TITEMPERIOD, "itemperiod" );
AddTableFileInfo( TCONTROLKEY, "controlkey" );
#if defined(PRE_ADD_COUNTRY_BY_COUNTRY_CONTROL)
AddTableFileInfo( TCONTROLKEY_ESP, "controlkey_ESP" );
AddTableFileInfo( TCONTROLKEY_FRA, "controlkey_FRA" );
AddTableFileInfo( TCONTROLKEY_GER, "controlkey_GER" );
#endif // #if defined(PRE_ADD_COUNTRY_BY_COUNTRY_CONTROL)
#if defined( PRE_ADD_NAMEDITEM_SYSTEM )
AddTableFileInfo( TNAMEDITEM, "nameditemtable" );
#endif
#ifdef PRE_ADD_EXCHANGE_POTENTIAL
AddTableFileInfo( TPOTENTIAL_TRANS, "potentialtransfertable" );
#endif //#ifdef PRE_ADD_EXCHANGE_POTENTIAL
#if defined( PRE_PARTY_DB )
AddTableFileInfo( TPARTYSORTWEIGHT, "partylistsortweight" );
#endif // #if defined( PRE_PARTY_DB )
AddTableFileInfo( TCASHERASABLETYPE, "casherasabletypetable" );
AddTableFileInfo( TPETFOOD, "petfoodtable", NULL, true );
AddTableFileInfo( TPETCHAT, "petchattable", NULL, true );
#if defined (PRE_ADD_CHAOSCUBE)
AddTableFileInfo( TCHAOSCUBESTUFF, "chaoscubestufftable" );
AddTableFileInfo( TCHAOSCUBERESULT, "chaoscuberesulttable" );
#endif
#if defined(PRE_MOD_SELECT_CHAR)
AddTableFileInfo( TCAMERA, "camtable" );
AddTableFileInfo( TTITLE, "titletable" );
AddTableFileInfo( TDEFAULTCREATECOSTUME, "costumepreviewtable" );
#endif // PRE_MOD_SELECT_CHAR
#if defined(PRE_ADD_INSTANT_CASH_BUY)
AddTableFileInfo( TCASHBUYSHORTCUT, "cashbuyshortcuttable" );
#endif // PRE_ADD_INSTANT_CASH_BUY
#if defined( PRE_WORLDCOMBINE_PARTY )
AddTableFileInfo( TWORLDCOMBINEPARTY, "nestmissionpartytable" );
#endif
#if defined( PRE_ADD_PCBANG_RENTAL_ITEM )
AddTableFileInfo( TPCBANGRENTALITEM, "pccaferenttable" );
#endif
#if defined(PRE_ADD_63603)
AddTableFileInfo( TITEMUSEINFO, "ItemuseInfotable", NULL, false, false );
#endif // PRE_ADD_63603
#if defined(PRE_ADD_EXCHANGE_ENCHANT)
AddTableFileInfo( TENCHANTTRANSFER, "enchanttransfertable", NULL, false, false );
#endif
#ifdef PRE_ADD_ITEMCAT_TOOLTIP_INFO
AddTableFileInfo( TITEMCATEGORYDESC,"itemcategorytable" );
#endif
#if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
AddTableFileInfo( TTOTALLEVELSKILL,"totallevelskill", NULL, false, false );
AddTableFileInfo( TTOTALLEVELLSKILLSLOT,"totalskillslot" );
#endif // PRE_ADD_TOTAL_LEVEL_SKILL
#if defined(PRE_ADD_WEEKLYEVENT)
AddTableFileInfo( TWEEKLYEVENT,"weeklyevent", NULL, true );
#endif // #if defined(PRE_ADD_WEEKLYEVENT)
#if defined( PRE_ADD_PRESET_SKILLTREE )
AddTableFileInfo( TSKILLTREE_ADVICE,"skilltreeadvicetable" );
#endif // #if defined( PRE_ADD_PRESET_SKILLTREE )
#if defined(PRE_SPECIALBOX)
AddTableFileInfo( TKEEPBOXPROVIDEITEM,"keepboxprovideitemtable" );
#endif // #if defined(PRE_SPECIALBOX)
#if defined( PRE_ADD_SHORTCUT_HELP_DIALOG )
AddTableFileInfo( THELPSHORTCUT,"helpbutton" );
#endif
#ifdef PRE_ADD_JOINGUILD_SUPPORT
AddTableFileInfo( TGUILDSUPPORT,"guildmembermaxlv" );
#endif //#ifdef PRE_ADD_JOINGUILD_SUPPORT
#ifdef PRE_ADD_STAGE_DAMAGE_LIMIT
AddTableFileInfo( TSTAGEDAMAGELIMIT,"StageDamageLimit" );
#endif
#if defined(PRE_ADD_REMOTE_QUEST)
AddTableFileInfo( TREMOTEQUEST,"QuestRemoteTable" );
#endif
#ifdef PRE_ADD_ACTIVEMISSION
AddTableFileInfo( TACTIVEMISSION,"ActiveMissionTable" );
AddTableFileInfo( TACTIVESET,"ActiveSetTable" );
#endif // PRE_ADD_ACTIVEMISSON
#if defined(PRE_ADD_GETITEM_WITH_RANDOMVALUE)
AddTableFileInfo( TCHARMCOUNT,"charmcounttable" );
#endif // #if defined(PRE_ADD_GETITEM_WITH_RANDOMVALUE)
#if defined(PRE_ADD_STAGE_CLEAR_ADD_REWARD)
AddTableFileInfo( TBONUSDROP,"BonusDropTable" );
#endif // #if defined(PRE_ADD_STAGE_CLEAR_ADD_REWARD)
#if defined( PRE_WORLDCOMBINE_PVP )
AddTableFileInfo( TWORLDPVPMISSIONROOM,"worldmissionroomtable" );
#endif
#if defined( PRE_ADD_STAGE_CLEAR_ENCHANT_REWARD)
AddTableFileInfo( TDROPITEMENCHANT,"DropItemEnchant" );
#endif // #if defined( PRE_ADD_STAGE_CLEAR_ENCHANT_REWARD)
#if defined( PRE_ALTEIAWORLD_EXPLORE )
AddTableFileInfo( TALTEIAWORLDMAP,"AlteiaBoardTable" );
AddTableFileInfo( TALTEIARANK,"alteiaranktable" );
AddTableFileInfo( TALTEIAWEEKREWARD,"alteiaweekrewardtable" );
AddTableFileInfo( TALTEIATIME,"alteiatimetable" );
AddTableFileInfo( TALTEIAPREVIEWREWARD,"alteiapreviewrewardtable" );
#endif // #if defined( PRE_ALTEIAWORLD_EXPLORE )
#if defined( PRE_ADD_STAMPSYSTEM )
AddTableFileInfo( TSTAMPCHALLENGE,"StampTable" );
#endif // #if defined( PRE_ADD_STAMPSYSTEM )
#if defined( PRE_ADD_TALISMAN_SYSTEM )
AddTableFileInfo( TTALISMANITEM,"talismanTable" );
AddTableFileInfo( TTALISMANSLOT,"TalismanSlotTable" );
#endif // #if defined( PRE_ADD_TALISMAN_SYSTEM )
#if defined( PRE_ADD_DWC )
AddTableFileInfo( TDWCCREATETABLE, "dwccreatetable", NULL, false, true);
#endif // #if defined( PRE_ADD_DWC )
#if defined( PRE_PVP_GAMBLEROOM )
AddTableFileInfo( TPVPGAMBLEROOM,"PvPGambleModeRoomTable" );
#endif
#ifdef PRE_ADD_ITEM_GAINTABLE
AddTableFileInfo(TITEMGAIN, "itemgaintable");
#endif
#if defined( PRE_ADD_STAGE_WEIGHT )
AddTableFileInfo(TSTAGEWEIGHT, "StageWeightTable");
#endif // #if defined( PRE_ADD_STAGE_WEIGHT )
#if defined( PRE_ADD_OVERLAP_SETEFFECT )
AddTableFileInfo(TOVERLAPSETEFFECT, "SetOverlapTable");
#endif
#ifdef PRE_ADD_LEVELUP_REWARD_NOTIFIER
AddTableFileInfo(TLEVELUPCHECKBOX, "LevelupBoxCheckTable");
#endif
#ifdef PRE_ADD_PVPRANK_INFORM
AddTableFileInfo(TPVPRANKREWARD, "PvPRankRewardTable");
#endif
#if defined(PRE_ADD_CHAT_MISSION)
AddTableFileInfo(TMISSIONTYPING, "TypingTable");
#endif
#ifdef PRE_ADD_CRAZYDUC_UI
AddTableFileInfo(TEVENTMONSTER, "monstertable_event");
#endif
#ifdef PRE_ADD_CASHINVENTAB
AddTableFileInfo( TCASHINVENTAB, "cashinventab" );
#endif // PRE_ADD_CASHINVENTAB
//RLKT_CUSTOMS
AddTableFileInfo(TREBIRTH, "rebirthsettings"); //rebirth
AddTableFileInfo(TREBIRTHREWARD, "rebirthreward"); //rebirth reward table
AddTableFileInfo(TRLKTSETTINGS, "rlktsettings"); //rlkt settings
AddTableFileInfo(TCHARCREATE, "charcreate"); //rlkt new login ui settings
//new parts table.
AddTableFileInfo(TPARTSSKINCOMBINE, "partsskincombine");
//new stage end drop id table
AddTableFileInfo(TSTAGECLEARDROP, "stagecleardroptable");
//Disjoint item info
AddTableFileInfo(TDISJOINTINFO, "disjointorinfotable");
//Dragon Jewel
AddTableFileInfo(TDRAGONJEWELSLOTTABLE, "dragonjewelslottable");
AddTableFileInfo(TDRAGONJEWELTABLE, "dragonjeweltable");
}
void CDnTableDB::AddTableFileInfo( TableEnum Index, const char* strFileName, const char* strGenerationLabel, bool bUseGame, bool bDontUseItemIDData )
{
stFileInfo fileInfo;
fileInfo.m_strFileName = strFileName;
if( strGenerationLabel != NULL )
fileInfo.m_strGenerationLabel = strGenerationLabel;
fileInfo.m_bUseGame = bUseGame;
#ifdef _CLIENT
fileInfo.m_bDontUseItemIDData = bDontUseItemIDData;
#else // _CLIENT
fileInfo.m_bDontUseItemIDData = false;
#endif // _CLIENT
m_MapTableFileInfo.insert( std::map<TableEnum, stFileInfo>::value_type( Index, fileInfo ) );
}
void CDnTableDB::AddTableByIndex( TableEnum eTableIndex )
{
std::map<TableEnum, DNTableFileFormat*>::iterator iter = m_MapTables.find( eTableIndex );
if( iter == m_MapTables.end() )
{
std::map<TableEnum, stFileInfo>::iterator iter2 = m_MapTableFileInfo.find( eTableIndex );
if( iter2 != m_MapTableFileInfo.end() )
{
stFileInfo fileInfo = iter2->second;
AddTable( iter2->first, LoadTable( fileInfo.m_strFileName.c_str(), fileInfo.m_strGenerationLabel, fileInfo.m_bDontUseItemIDData ) );
if( !fileInfo.m_bUseGame )
SetTableAutoUnloadByIndex( iter2->first, 40.0f );
}
}
}
void CDnTableDB::SetTableAutoUnloadForGame( bool bTableUseInGame )
{
m_bTableUseInGame = bTableUseInGame;
if( m_bTableUseInGame )
{
float fHoldingTime = 0.0f;
std::map<TableEnum, stFileInfo>::iterator iter = m_MapTableFileInfo.begin();
for( ; iter != m_MapTableFileInfo.end(); iter++ )
{
if( !iter->second.m_bUseGame )
{
SetTableAutoUnloadByIndex( iter->first, fHoldingTime );
fHoldingTime += 0.1f;
}
}
}
}
void CDnTableDB::SetTableAutoUnloadByIndex( TableEnum eTableIndex, float fHoldingTime )
{
std::map<TableEnum, DNTableFileFormat*>::iterator iter = m_MapTables.find( eTableIndex );
if( iter != m_MapTables.end() )
{
DNTableFileFormat* pDnTableFile = iter->second;
if( pDnTableFile )
{
pDnTableFile->m_bAutoUnload = true;
pDnTableFile->m_fHoldingTime = fHoldingTime;
}
}
}
#ifdef _DEBUG
float g_fGetTableTime = 0.0f;
int g_nTableSize = 0;
#endif // _DEBUG
void CDnTableDB::Process( float fElapsedTime )
{
if( m_bTableUseInGame )
{
std::map<TableEnum, DNTableFileFormat*>::iterator iter = m_MapTables.begin();
for( ; iter != m_MapTables.end(); iter++ )
{
DNTableFileFormat* pDnTableFile = iter->second;
if( pDnTableFile && pDnTableFile->m_bAutoUnload && pDnTableFile->m_fHoldingTime >= 0.0f )
{
pDnTableFile->m_fHoldingTime -= fElapsedTime;
if( pDnTableFile->m_fHoldingTime <= 0.0f )
{
pDnTableFile->m_fHoldingTime = 0.0f;
UnloadTable( iter->first );
break;
}
}
}
#ifdef _DEBUG
if( g_fGetTableTime < 0.0f )
{
g_nTableSize = m_MapTables.size();
g_fGetTableTime = 1.0f;
}
else
g_fGetTableTime -= fElapsedTime;
#endif // _DEBUG
}
}
#endif // PRE_ADD_REDUCE_TABLE_RESOURCE
bool CDnTableDB::Initialize( )
{
try {
#ifdef PRE_ADD_REDUCE_TABLE_RESOURCE
SetTableFileInfo();
#ifdef _CLIENT
AddTableByIndex( TACTOR );
AddTableByIndex( TPARTS );
AddTableByIndex( TWEAPON );
AddTableByIndex( TENCHANT );
AddTableByIndex( TPOTENTIAL );
AddTableByIndex( TITEM );
AddTableByIndex( TSKILL );
AddTableByIndex( TSKILLLEVEL );
AddTableByIndex( TPLAYERWEIGHT );
AddTableByIndex( TGLOBALWEIGHTINT );
AddTableByIndex( TPLAYERLEVEL );
AddTableByIndex( TEQUALLEVEL );
AddTableByIndex( TEQUALBASIS );
AddTableByIndex( TEQUALEXPONENT );
AddTableByIndex( TFATIGUEADJUST );
//rlkt_90cap
AddTableByIndex( TPARTSSKINCOMBINE );
#ifdef PRE_ADD_VIP
AddTableByIndex( TVIPGRADE );
#endif // PRE_ADD_VIP
#ifdef PRE_ADD_ITEMCAT_TOOLTIP_INFO
AddTableByIndex( TITEMCATEGORYDESC );
#endif // PRE_ADD_ITEMCAT_TOOLTIP_INFO
AddTableByIndex( TGUILDREWARDITEM );
#else // _CLIENT
std::map<TableEnum, stFileInfo>::iterator iter = m_MapTableFileInfo.begin();
for( ; iter != m_MapTableFileInfo.end(); iter++ )
{
AddTableByIndex( iter->first );
}
#endif // _CLIENT
#else // PRE_ADD_REDUCE_TABLE_RESOURCE
AddTable( TACTOR, LoadTable( "ActorTable", "_StaticName" ) );
AddTable( TPARTS, LoadTable( "PartsTable", "_SetItemID" ) );
AddTable( TWEAPON, LoadTable( "WeaponTable", "_SetItemID" ) );
AddTable( TTILE, LoadTable( "TileTable", "_Name" ) );
AddTable( TENVIEFFECT, LoadTable( "EnviEffectTable" ) );
AddTable( TMAP, LoadTable( "MapTable", "_EnterConditionTableID;_MapSubType" ) );
AddTable( TPLAYERLEVEL, LoadTable( "PlayerLevelTable" ) );
AddTable( TMONSTER, LoadTable( "MonsterTable", "_ActorTableID" ) );
AddTable( TMONSTERCOMPOUND, LoadTable( "MonsterCompoundTable" ) );
AddTable( TITEM, LoadTable( "ItemTable" ) );
AddTable( TPROP, LoadTable( "PropTable", "_Name" ) );
AddTable( TJOB, LoadTable( "JobTable", "_JobNumber;_BaseClass" ) );
AddTable( TSKILL, LoadTable( "SkillTable" ) );
AddTable( TITEMDROP, LoadTable( "ItemDropTable" ) );
AddTable( TDEFAULTCREATE, LoadTable( "DefaultCreateTable" ) );
AddTable( TNPC, LoadTable( "NpcTable", "_ActorIndex" ) );
AddTable( TQUEST, LoadTable( "QuestTable" ) );
AddTable( TPLAYERWEIGHT, LoadTable( "PlayerWeightTable" ) );
AddTable( TTALKPARAM, LoadTable( "TalkParamTable" ) );
AddTable( TSKILLLEVEL, LoadTable( "SkillLevelTable", "_SkillIndex" ) );
AddTable( TMAPGATE, LoadTable( "MapGateTable", "_PermitPlayerLevel;_MapIndex" ) );
AddTable( TSOCIAL, LoadTable( "ActorFaceTable" ) );
AddTable( TMONSTERSKILL, LoadTable( "MonsterSkillTable" ) );
AddTable( TSHOP, LoadTable( "ShopTable" ) );
AddTable( TMONSTERPARTS, LoadTable( "MonsterPartsTable" ) );
AddTable( TSKILLSHOP, LoadTable( "SkillShopTable" ) );
AddTable( TSUMMONPROP, LoadTable( "SummonPropTable" ) );
AddTable( TDUNGEONENTER, LoadTable( "StageEnterTable", "_LvlMin;_AbyssLvlMin;_AbyssQuestID;_RecommendEasyLevel;_RecommendNormalLevel;_RecommendHardLevel;_RecommendVeryHardLevel;_RecommendNightmareLevel" ) );
AddTable( TDUNGEONCLEAR, LoadTable( "StageClearTable" ) );
AddTable( TCLEARSTANDARD, LoadTable( "ClearStandard" ) );
AddTable( TSYMBOLITEM, LoadTable( "SymbolItemTable" ) );
AddTable( TCUTSCENE, LoadTable( "CutSceneTable" ) );
AddTable( TPLATE, LoadTable( "PlateTable" ) );
AddTable( TITEMCOMPOUND, LoadTable( "ItemCompoundTable", "_CompoundGroupID;_CompoundPotentialID") );
AddTable( TSTATEEFFECT, LoadTable( "StateEffectTable" ) );
AddTable( TDUNGEONMAP, LoadTable( "StageSetTable" ) );
AddTable( TTODAYTIP, LoadTable( "TodayToolTipTable" ) );
AddTable( TFILE, LoadTable( "FileTable" ) );
AddTable( TQUESTREWARD, LoadTable( "QuestRewardTable" ) );
AddTable( TMONSTERWEIGHT, LoadTable( "MonsterWeightTable", "_MonsterTableIndex" ) );
AddTable( TQUESTCHAPTER, LoadTable( "QuestChapterTable" ) );
AddTable( TEQUIPMATCHACTION, LoadTable( "EquipMatchActionTable", "_Class" ) );
AddTable( TFACE, LoadTable( "FaceAnimationTable" ) );
AddTable( TREBIRTHCOIN, LoadTable( "CoinTable" ) );
AddTable( TPVPMAP, LoadTable( "PvPMapTable" ) );
AddTable( TPVPGAMEMODE, LoadTable( "PvPGameModeTable" ) );
AddTable( TPVPGAMESTARTCONDITION, LoadTable( "PvPGameStartConditionTable" ) );
AddTable( TCP, LoadTable( "CPTable" ) );
AddTable( TGAMEROOMNAME, LoadTable( "PvPDefaultRoomNameTable" ) );
AddTable( TGLOBALWEIGHT, LoadTable( "GlobalWeightTable" ) );
AddTable( TGLOBALWEIGHTINT, LoadTable( "GlobalWeightIntTable" ) );
#ifdef PRE_FIX_MEMOPT_ENCHANT
AddTable( TENCHANT_MAIN, LoadTable( "enchantmaintable", "_EnchantID" ) );
#else
AddTable( TENCHANT, LoadTable( "EnchantTable", "_EnchantID" ) );
#endif
AddTable( TPOTENTIAL, LoadTable( "PotentialTable", "_PotentialID" ) );
AddTable( TSETITEM, LoadTable( "SetItemTable" ) );
AddTable( TEQUALLEVEL, LoadTable( "EqualLevelTable", "_Mode" ) );
AddTable( TMISSION, LoadTable( "MissionTable" ) );
AddTable( TAPPELLATION, LoadTable( "AppellationTable" ) );
AddTable( TPVPRANK, LoadTable( "PvPRankTable" ) );
AddTable( TPVPWINCONDITION, LoadTable( "PvPGameStartConditionTable" ) );
AddTable( TITEMCOMPOUNDSHOP, LoadTable( "ItemCompoundShopTable", "_ListID" ) );
AddTable( TEQUALBASIS, LoadTable( "EqualBasisTable" ) );
AddTable( TDAILYMISSION, LoadTable( "DailyMissionTable" ) );
AddTable( TSCHEDULE, LoadTable( "ScheduleTable" ) );
AddTable( TWORLDMAPUI, LoadTable( "WorldMapUI" ) );
AddTable( TTAX, LoadTable( "TaxTable" ) );
AddTable( TMISSIONSCHEDULE, LoadTable( "MissionScheduleTable" ) );
AddTable( TRADIOMSG, LoadTable( "RadioMsgTable", "_MacroNum" ) );
AddTable( TGESTURE, LoadTable( "GestureTable" ) );
AddTable( TMONSTERGROUP, LoadTable( "MonsterGroupTable" ) );
AddTable( TMONSTERSET, LoadTable( "MonsterSetTable", "_SetNo" ) );
AddTable( TSKILLTREE, LoadTable( "SkillTreeTable", "_SkillTableID" ) );
AddTable( TITEMDROPGROUP, LoadTable( "ItemDropGroupTable", "_DropGroupID" ) );
AddTable( TGUILDUSERCAP, LoadTable( "GuildUserCapTable" ) );
AddTable( TDLMAP, LoadTable( "DLMapTable" ) );
AddTable( TDLDUNGEONCLEAR, LoadTable( "DLStageClearTable" ) );
AddTable( TCASHCOMMODITY, LoadTable( "CashCommodity" ) );
AddTable( TCASHGOODSINFO, LoadTable( "CashGoodsInfoTable" ) );
AddTable( TCASHPACKAGE, LoadTable( "CashPackageTable" ) );
AddTable( TCASHLIMIT, LoadTable( "CashLimitTable" ) );
AddTable( TWEATHER, LoadTable( "WeatherTable" ) );
AddTable( TPCCAFE, LoadTable( "PCCafeTable" ) );
AddTable( TFATIGUEADJUST, LoadTable( "FatigueAdjustmentTable" ) );
AddTable( TCASHPRESENTREACT, LoadTable( "CashPresentReactTable" ) );
#ifdef PRE_ADD_GACHA_JAPAN
AddTable( TGACHA_JP, LoadTable( "GachaJP", "_GachaNum" ) );
AddTable( TGACHASETITEM_JP, LoadTable( "GachaSetItemJP", "_GachaNum" ) );
#endif
AddTable( TSEALCOUNT, LoadTable( "SealCountTable" ) );
AddTable( TLEVELUPEVENT, LoadTable( "LevelupEventTable" ) );
#if defined(PRE_ADD_VIP)
AddTable( TVIP, LoadTable( "VIPTable" ) );
AddTable( TVIPGRADE, LoadTable( "VIPGradeTable" ) );
#endif // #if defined(PRE_ADD_VIP)
AddTable( TCASHTAB, LoadTable("CashTabTable" ) );
AddTable( TFAIRY, LoadTable("FairyTable" ) );
AddTable( TCOSMIX, LoadTable("CashItemCompoundTable" ) );
AddTable( TCOSMIXABILITY, LoadTable("CashCompoundInfoTable" ) );
AddTable( TGLYPHSKILL, LoadTable("GlyphSkillTable" ) );
AddTable( TGLYPHSLOT, LoadTable("GlyphSlotTable" ) );
AddTable( TLEVELPROMO, LoadTable("WelfareTable" ) );
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
AddTable( TREPUTE, LoadTable("ReputeTable", "_NpcID") );
AddTable( TPRESENT, LoadTable("PresentTable" ) );
AddTable( TNPCREACTION, LoadTable("NpcReactionTable" ) );
AddTable( TSTOREBENEFIT, LoadTable("StoreBenefit", "_NpcID") );
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
AddTable( TMAIL, LoadTable("MailTable") );
AddTable( TMODDLG, LoadTable("CustomDialogTable") );
AddTable( TMASTERSYSTEM_DECREASE, LoadTable("MasterSysDecreaseTable") );
AddTable( TMASTERSYSTEM_GAIN, LoadTable("MasterSysGainTable") );
AddTable( TVEHICLE, LoadTable("VehicleTable", "_VehicleClassID"));
AddTable( TVEHICLEPARTS, LoadTable("VehiclePartsTable"));
AddTable( TPOTENTIALJEWEL, LoadTable("PotentialJewelTable") );
AddTable( TEVENTPOPUP, LoadTable("PopUpTable") );
AddTable( TCHARMITEM, LoadTable("CharmItemTable") );
AddTable( TCHARMITEMKEY, LoadTable("CharmItemkeyTable") );
#if defined( PRE_ADD_SECONDARY_SKILL )
AddTable( TSecondarySkill, LoadTable("secondaryskilltable") );
AddTable( TSecondarySkillLevel, LoadTable("secondaryskillleveltable") );
AddTable( TSecondarySkillRecipe, LoadTable("makeitemrecipetable") );
#endif // #if defined( PRE_ADD_SECONDARY_SKILL )
AddTable( TSKILLVIDEO, LoadTable("SkillVideoTable") );
AddTable( TGUILDWAREHOUSE, LoadTable("GuildWareHouse") );
AddTable( TFARMCULTIVATE, LoadTable("farmcultivatetable") );
AddTable( TFARMSKIN, LoadTable("farmskintable") );
AddTable( TFISHING, LoadTable("fishingtable") );
AddTable( TFISHINGPOINT, LoadTable("fishingpointtable") );
AddTable( TFISHINGAREA, LoadTable("fishingareatable") );
AddTable( TFISHINGROD, LoadTable("fishingrodtable") );
AddTable( TQUESTPERIOD, LoadTable("QuestDailyTable") );
AddTable( TGLOBALEVENTQUEST, LoadTable("globalevent") );
AddTable( TSTAFFROLL, LoadTable("StaffRollTable") );
AddTable( TCOLLECTIONBOOK, LoadTable("CollectionBookTable") );
AddTable( TEXCHANGETRADE, LoadTable("Exchange") );
AddTable( TSKILLBUBBLE, LoadTable("SkillBubbleTable") );
AddTable( TSKILLBUBBLEDEFINE, LoadTable("SkillBubbleDefine") );
AddTable( TENCHANTJEWEL, LoadTable("EnchantJewelTable") );
AddTable( TPVPMISSIONROOM, LoadTable("PvPMissionRoomTable") );
AddTable( TEQUALEXPONENT, LoadTable("EqualExponentValue") );
#ifdef PRE_MOD_ITEM_COMPOUND_DIALOG_RENEWAL
AddTable( TITEMCOMPOUNDGROUP, LoadTable("ItemCompoundGroupTable", "_ListID;_MainCategory;_JobClass;_Level" ) );
#else
AddTable( TITEMCOMPOUNDGROUP, LoadTable("ItemCompoundGroupTable", "_ListID" ) );
#endif
AddTable( TEXPADJUST, LoadTable("expadjustmenttable" ) );
AddTable( TSTAGEREWARD, LoadTable("StageRewardTable" ) );
AddTable( TMONSTERSKILL_TRANS, LoadTable("monsterskilltable_transform"));
AddTable( TMONSTER_TRANS, LoadTable("monstertable_transform"));
AddTable( TMONSTERGROUP_TRANS, LoadTable("monstergrouptable_transform"));
AddTable( TGHOULMODE_CONDITION, LoadTable("ghoulconditiontable"));
AddTable( TPVPGAMEMODESKILLSETTING, LoadTable("pvpgamemodeskillsetting"));
AddTable( TMONSTER_TRANS_RADIOMSG, LoadTable("monsterradiomsgtable"));
AddTable( TMONSTER_TRANS_RADIOBASE, LoadTable("monsterradiochangetable"));
AddTable( TCONNECTINGTIME, LoadTable("TimeEventTable") );
AddTable( THELP, LoadTable("HelpTable") );
AddTable( TGUIDEPOPUP, LoadTable("guidepopup") );
AddTable( TREPUTEBENEFIT, LoadTable("ReputeBenefit") );
AddTable( THELPKEYWORD, LoadTable("helpkeywordtable") );
AddTable( TINSTANTITEM, LoadTable("instantitemtable") );
AddTable( TGUILDMARK, LoadTable("guildmarktable") );
AddTable( TBATTLEGROUNDMODE, LoadTable("battlegroundmodesetting") );
AddTable( TBATTLEGROUNDRESWAR, LoadTable("battlegroundresourcewar") );
AddTable( TBATTLEGROUNDSKILLTREE, LoadTable("battlegroundskilltreetable", "_SkillTableID" ) );
AddTable( TBATTLEGROUNDSKILLLEVEL, LoadTable("battlegroundskillleveltable", "_SkillIndex") );
AddTable( TBATTLEGROUNDSKILL, LoadTable("battlegroundskilltable") );
AddTable( TRESOURCEWARSKIN, LoadTable("resorcewarskin") );
AddTable( TUNION, LoadTable("uniontable", "_UnionID") );
AddTable( TGUILDWARREWARD, LoadTable("guildwarmailtable") );
AddTable( TPLAYERCOMMONLEVEL, LoadTable("playercommonleveltable") );
AddTable( TGACHAINFO, LoadTable("gachatable") );
AddTable( TPETLEVEL, LoadTable( "petleveltable" ) );
AddTable( TPETSKILLLEVEL, LoadTable( "skillleveltable_pet" ) );
AddTable( TMASTERSYSFEEL, LoadTable( "mastersysfeeltable" ) );
AddTable( TATTENDANCEEVENT, LoadTable( "everydayeventtable" ) );
#ifdef PRE_ADD_CASH_AMULET
AddTable( TCASHCHATBALLOONTABLE, LoadTable( "chatboxtable" ) );
#endif
AddTable( TTRIGGERVARIABLETABLE, LoadTable( "trigervariabletable" ) );
AddTable( TLOADINGANI, LoadTable( "loadinganitable" ) );
AddTable( TITEMOPTION, LoadTable( "itemoption" ) );
AddTable( TVILLAGEALLOWEDSKILL, LoadTable( "villageallowedskilltable", "_villageAllowedSkill" ) );
AddTable( TCOMBINEDSHOP, LoadTable( "combinedshoptable" ) );
AddTable( TGLYPHCHARGE, LoadTable( "glyphchargetable" ) );
#ifdef PRE_FIX_MEMOPT_ENCHANT
AddTable( TENCHANT_STATE, LoadTable( "enchantmaxstatetable" ) );
AddTable( TENCHANT_NEEDITEM, LoadTable( "enchantneeditemtable" ) );
#endif
#ifdef PRE_ADD_SHUTDOWN_CHILD
AddTable( TSHUTDOWNMSG, LoadTable( "shutdownmsgtable" ) );
#endif
AddTable( TPLAYERCUSTOMEVENTUI, LoadTable( "playercustomeventui" ) );
AddTable( TGUILDLEVEL, LoadTable( "guildleveltable" ) );
AddTable( TGUILDWARPOINT, LoadTable( "guildwarpointtable" ) );
AddTable( TQUEST_LEVELCAP_REWARD, LoadTable( "QuestLevelCabRewardTable") );
AddTable( TGUILDREWARDITEM, LoadTable( "guildrewardtable") );
AddTable( TWING, LoadTable( "wingtable" ) );
#ifdef PRE_ADD_MODIFY_PLAYER_CANNON
AddTable( TCANNON, LoadTable( "actorcannontable" ) );
#endif
#ifdef PRE_ADD_COSRANDMIX
AddTable( TCOSMIXINFO, LoadTable( "costumemixinfo" ) );
AddTable( TCOSRANDOMMIXINFO, LoadTable("costumemixtable") );
#endif // PRE_ADD_COSRANDMIX
#ifdef PRE_ADD_SALE_COUPON
AddTable( TSALECOUPON, LoadTable( "coupontable" ) );
#endif // PRE_ADD_SALE_COUPON
#ifdef PRE_ADD_DONATION
AddTable( TCONTRIBUTION, LoadTable( "donationcompensationtable" ) );
#endif
AddTable( TITEMPERIOD, LoadTable( "itemperiod" ) );
AddTable( TCONTROLKEY, LoadTable( "controlkey" ) );
#if defined(PRE_ADD_COUNTRY_BY_COUNTRY_CONTROL)
AddTable( TCONTROLKEY_ESP, LoadTable( "controlkey_ESP" ) );
AddTable( TCONTROLKEY_FRA, LoadTable( "controlkey_FRA" ) );
AddTable( TCONTROLKEY_GER, LoadTable( "controlkey_GER" ) );
#endif // #if defined(PRE_ADD_COUNTRY_BY_COUNTRY_CONTROL)
#if defined( PRE_ADD_NAMEDITEM_SYSTEM )
AddTable( TNAMEDITEM, LoadTable( "nameditemtable" ) );
#endif
#ifdef PRE_ADD_EXCHANGE_POTENTIAL
AddTable( TPOTENTIAL_TRANS, LoadTable( "potentialtransfertable" ) );
#endif //#ifdef PRE_ADD_EXCHANGE_POTENTIAL
#if defined( PRE_PARTY_DB )
AddTable( TPARTYSORTWEIGHT, LoadTable( "partylistsortweight" ) );
#endif // #if defined( PRE_PARTY_DB )
AddTable( TCASHERASABLETYPE, LoadTable( "casherasabletypetable" ) );
AddTable( TPETFOOD, LoadTable( "petfoodtable") );
AddTable( TPETCHAT, LoadTable( "petchattable") );
#if defined (PRE_ADD_CHAOSCUBE)
AddTable( TCHAOSCUBESTUFF, LoadTable( "chaoscubestufftable") );
AddTable( TCHAOSCUBERESULT, LoadTable( "chaoscuberesulttable") );
#endif
#if defined(PRE_MOD_SELECT_CHAR)
AddTable( TCAMERA, LoadTable( "camtable") );
AddTable( TTITLE, LoadTable( "titletable") );
AddTable( TDEFAULTCREATECOSTUME, LoadTable( "costumepreviewtable") );
#endif // PRE_MOD_SELECT_CHAR
#if defined(PRE_ADD_INSTANT_CASH_BUY)
AddTable( TCASHBUYSHORTCUT, LoadTable( "cashbuyshortcuttable") );
#endif // PRE_ADD_INSTANT_CASH_BUY
#if defined( PRE_WORLDCOMBINE_PARTY )
AddTable( TWORLDCOMBINEPARTY, LoadTable( "nestmissionpartytable") );
#endif
#if defined( PRE_ADD_PCBANG_RENTAL_ITEM )
AddTable( TPCBANGRENTALITEM, LoadTable( "pccaferenttable"));
#endif
#if defined(PRE_ADD_63603)
AddTable( TITEMUSEINFO, LoadTable( "ItemuseInfotable") );
#endif // PRE_ADD_63603
#if defined(PRE_ADD_EXCHANGE_ENCHANT)
AddTable( TENCHANTTRANSFER, LoadTable( "enchanttransfertable"));
#endif
#ifdef PRE_ADD_ITEMCAT_TOOLTIP_INFO
AddTable(TITEMCATEGORYDESC, LoadTable("itemcategorytable"));
#endif
#if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
AddTable(TTOTALLEVELSKILL, LoadTable("totallevelskill"));
AddTable(TTOTALLEVELLSKILLSLOT, LoadTable("totalskillslot"));
#endif // PRE_ADD_TOTAL_LEVEL_SKILL
#if defined(PRE_ADD_WEEKLYEVENT)
AddTable(TWEEKLYEVENT, LoadTable("weeklyevent"));
#endif // #if defined(PRE_ADD_WEEKLYEVENT)
#if defined( PRE_ADD_PRESET_SKILLTREE )
AddTable(TSKILLTREE_ADVICE, LoadTable("skilltreeadvicetable"));
#endif // #if defined( PRE_ADD_PRESET_SKILLTREE )
#if defined(PRE_SPECIALBOX)
AddTable(TKEEPBOXPROVIDEITEM, LoadTable("keepboxprovideitemtable"));
#endif // #if defined(PRE_SPECIALBOX)
#if defined( PRE_ADD_SHORTCUT_HELP_DIALOG )
AddTable(THELPSHORTCUT, LoadTable("helpbutton"));
#endif
#ifdef PRE_ADD_JOINGUILD_SUPPORT
AddTable(TGUILDSUPPORT, LoadTable("guildmembermaxlv"));
#endif //#ifdef PRE_ADD_JOINGUILD_SUPPORT
#ifdef PRE_ADD_STAGE_DAMAGE_LIMIT
AddTable(TSTAGEDAMAGELIMIT, LoadTable("StageDamageLimit"));
#endif
#if defined(PRE_ADD_REMOTE_QUEST)
AddTable(TREMOTEQUEST, LoadTable("QuestRemoteTable"));
#endif
#ifdef PRE_ADD_ACTIVEMISSION
AddTable(TACTIVEMISSION, LoadTable("ActiveMissionTable"));
AddTable(TACTIVESET, LoadTable("ActiveSetTable"));
#endif // PRE_ADD_ACTIVEMISSON
#if defined(PRE_ADD_GETITEM_WITH_RANDOMVALUE)
AddTable(TCHARMCOUNT, LoadTable("charmcounttable"));
#endif // #if defined(PRE_ADD_GETITEM_WITH_RANDOMVALUE)
#if defined(PRE_ADD_STAGE_CLEAR_ADD_REWARD)
AddTable(TBONUSDROP, LoadTable("BonusDropTable"));
#endif // #if defined(PRE_ADD_STAGE_CLEAR_ADD_REWARD)
#if defined( PRE_WORLDCOMBINE_PVP )
AddTable(TWORLDPVPMISSIONROOM, LoadTable("worldmissionroomtable"));
#endif
#if defined( PRE_ADD_STAGE_CLEAR_ENCHANT_REWARD)
AddTable(TDROPITEMENCHANT, LoadTable("DropItemEnchant"));
#endif // #if defined( PRE_ADD_STAGE_CLEAR_ENCHANT_REWARD)
#if defined( PRE_ALTEIAWORLD_EXPLORE )
AddTable(TALTEIAWORLDMAP, LoadTable("AlteiaBoardTable"));
AddTable(TALTEIARANK, LoadTable("alteiaranktable"));
AddTable(TALTEIAWEEKREWARD, LoadTable("alteiaweekrewardtable"));
AddTable(TALTEIATIME, LoadTable("alteiatimetable"));
#endif // #if defined( PRE_ALTEIAWORLD_EXPLORE )
#if defined( PRE_ADD_STAMPSYSTEM )
AddTable(TSTAMPCHALLENGE, LoadTable("StampTable"));
#endif // #if defined( PRE_ADD_STAMPSYSTEM )
#if defined( PRE_ADD_TALISMAN_SYSTEM )
AddTable(TTALISMANITEM, LoadTable("talismanTable"));
AddTable(TTALISMANSLOT, LoadTable("TalismanSlotTable"));
#endif // #if defined( PRE_ADD_TALISMAN_SYSTEM )
#if defined( PRE_PVP_GAMBLEROOM )
AddTable(TPVPGAMBLEROOM, LoadTable("PvPGambleModeRoomTable"));
#endif
#if defined(PRE_ADD_CHAT_MISSION)
AddTableFileInfo(TMISSIONTYPING, "TypingTable");
#endif
#endif // PRE_ADD_REDUCE_TABLE_RESOURCE
#if defined( PRE_ADD_STAGE_WEIGHT )
AddTable(TSTAGEWEIGHT, LoadTable("StageWeightTable"));
#endif // #if defined( PRE_ADD_STAGE_WEIGHT )
#if defined( PRE_ADD_OVERLAP_SETEFFECT )
AddTable(TOVERLAPSETEFFECT, LoadTable("SetOverlapTable"));
#endif
#ifdef PRE_ADD_PVPRANK_INFORM
AddTable(TPVPRANKREWARD, LoadTable("PvPRankRewardTable"));
#endif
}
catch(const char* ex)
{
wchar_t filename[256] = {0};
MultiByteToWideChar(CP_ACP, 0, ex, -1, filename, 256);
wchar_t msg[512] = {0};
::wsprintf(msg, L"Resource not found.\n\'%s\'", filename);
g_Log.Log( LogType::_FILELOG, L"Resource not found. \'%s\'\r\n", filename);
MessageBox( NULL, msg, L"Critical Error", MB_ICONEXCLAMATION );
return false;
}
catch(...) {
MessageBox( NULL, L"Resource not found.\nPlease Re-install.", L"Critical Error", MB_OK );
return false;
}
// #if defined (_CLIENT) && defined (_TEST_CODE_KAL)
// g_ProfileMemCheck.OutputResult(NULL, _WriteLogA);
// #endif
// <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ʰ<EFBFBD> <20≯<EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>͵<EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>س<EFBFBD><D8B3><EFBFBD>.
CPlayerWeightTable::CreateInstance();
CGlobalWeightTable::CreateInstance();
CGlobalWeightIntTable::CreateInstance();
CPlayerLevelTable::CreateInstance();
CEqualLevelTable::CreateInstance();
CEqualBasisTable::CreateInstance();
CEqualExponentTable::CreateInstance();
CFatigueAdjustmentTable::CreateInstance();
#ifdef PRE_ADD_VIP
CVIPGradeTable::CreateInstance();
#endif
#ifdef PRE_ADD_ITEMCAT_TOOLTIP_INFO
CItemCategoryInfo::CreateInstance();
#endif
CGuildRewardTable::CreateInstance();
//rlkt_90cap
CPartsSkinCombineTable::CreateInstance();
//rlkt_stagedrop
CStageDropTable::CreateInstance();
//rlkt_disjointinfo
CDisjointInfoTable::CreateInstance();
//rlkt_dragongem
CDragonJewelSlotTable::CreateInstance();
UnloadTable(TPLAYERWEIGHT);
UnloadTable(TGLOBALWEIGHT);
UnloadTable(TGLOBALWEIGHTINT);
UnloadTable(TPLAYERLEVEL);
UnloadTable(TEQUALLEVEL);
UnloadTable(TEQUALBASIS);
UnloadTable(TEQUALEXPONENT);
UnloadTable(TFATIGUEADJUST);
#ifdef PRE_ADD_VIP
UnloadTable(TVIPGRADE);
#endif
#ifdef PRE_ADD_ITEMCAT_TOOLTIP_INFO
UnloadTable(TITEMCATEGORYDESC);
#endif // PRE_ADD_ITEMCAT_TOOLTIP_INFO
UnloadTable(TGUILDREWARDITEM);
//rlkt_90cap
UnloadTable(TPARTSSKINCOMBINE);
//rlkt_stagedrop
UnloadTable(TSTAGECLEARDROP);
//disjoint
UnloadTable(TDISJOINTINFO);
return true;
}
void CDnTableDB::Finalize()
{
if( CPlayerWeightTable::GetInstancePtr() )
CPlayerWeightTable::DestroyInstance();
if( CGlobalWeightTable::GetInstancePtr() )
CGlobalWeightTable::DestroyInstance();
if( CGlobalWeightIntTable::GetInstancePtr() )
CGlobalWeightIntTable::DestroyInstance();
if( CPlayerLevelTable::GetInstancePtr() )
CPlayerLevelTable::DestroyInstance();
if( CEqualLevelTable::GetInstancePtr() )
CEqualLevelTable::DestroyInstance();
if( CEqualBasisTable::GetInstancePtr() )
CEqualBasisTable::DestroyInstance();
if( CEqualExponentTable::GetInstancePtr() )
CEqualExponentTable::DestroyInstance();
if( CFatigueAdjustmentTable::GetInstancePtr() )
CFatigueAdjustmentTable::DestroyInstance();
#ifdef PRE_ADD_VIP
if(CVIPGradeTable::GetInstancePtr())
CVIPGradeTable::DestroyInstance();
#endif
if (CGuildRewardTable::GetInstancePtr())
CGuildRewardTable::DestroyInstance();
#ifdef PRE_ADD_ITEMCAT_TOOLTIP_INFO
if (CItemCategoryInfo::GetInstancePtr())
CItemCategoryInfo::DestroyInstance();
#endif
if (CPartsSkinCombineTable::GetInstancePtr())
CPartsSkinCombineTable::DestroyInstance();
if (CStageDropTable::GetInstancePtr())
CStageDropTable::DestroyInstance();
if (CDisjointInfoTable::GetInstancePtr())
CDisjointInfoTable::DestroyInstance();
if (CDragonJewelSlotTable::GetInstancePtr())
CDragonJewelSlotTable::DestroyInstance();
for each (std::map<TableEnum, DNTableFileFormat*>::value_type v in m_MapTables)
{
delete v.second;
}
m_MapTables.clear();
#ifdef PRE_ADD_REDUCE_TABLE_RESOURCE
m_MapTableFileInfo.clear();
#endif // PRE_ADD_REDUCE_TABLE_RESOURCE
}
#ifdef PRE_ADD_REDUCE_TABLE_RESOURCE
DNTableFileFormat *CDnTableDB::LoadTable( const char *szFileName, std::string strGenerationLabel/*=std::string()*/, bool bDontUseItemIDData )
#else // PRE_ADD_REDUCE_TABLE_RESOURCE
DNTableFileFormat *CDnTableDB::LoadTable( const char *szFileName, std::string strGenerationLabel/*=std::string()*/ )
#endif // PRE_ADD_REDUCE_TABLE_RESOURCE
{
std::string strFileName = szFileName;
strFileName += ".dnt";
// #if defined (_CLIENT) && defined (_TEST_CODE_KAL)
// g_ProfileMemCheck.StartBlock(szFileName);
// #endif
DNTableFileFormat *pSox = NULL;
try
{
#ifdef PRE_ADD_REDUCE_TABLE_RESOURCE
std::vector<CFileNameString> szVecList;
FindExtFileList( strFileName.c_str(), szVecList );
for( DWORD i=0; i<szVecList.size(); i++ )
CEtResourceMng::GetInstance().AddCacheMemoryStream( CEtResourceMng::GetInstance().GetFullName( szVecList[i].c_str() ).c_str() );
#endif // PRE_ADD_REDUCE_TABLE_RESOURCE
std::vector<CStream *> pVecStream;
pSox = RawLoadSox(strFileName.c_str(), pVecStream);
pSox->SetGenerationInverseLabel( const_cast<char*>(strGenerationLabel.c_str()) );
#ifdef PRE_ADD_REDUCE_TABLE_RESOURCE
pSox->Load( pVecStream, bDontUseItemIDData );
SAFE_DELETE_PVEC( pVecStream );
for( DWORD i=0; i<szVecList.size(); i++ )
CEtResourceMng::GetInstance().RemoveCacheMemoryStream( CEtResourceMng::GetInstance().GetFullName( szVecList[i].c_str() ).c_str() );
#else // PRE_ADD_REDUCE_TABLE_RESOURCE
pSox->Load( pVecStream );
SAFE_DELETE_PVEC( pVecStream );
#endif // PRE_ADD_REDUCE_TABLE_RESOURCE
pSox->SetLoadName(strFileName.c_str());
}
catch(int) {
throw strFileName.c_str();
}
// #if defined (_CLIENT) && defined (_TEST_CODE_KAL)
// g_ProfileMemCheck.EndBlock(szFileName);
// #endif
return pSox;
}
void CDnTableDB::UnloadTable(TableEnum Index)
{
std::map<TableEnum, DNTableFileFormat*>::iterator it = m_MapTables.find(Index);
if (it == m_MapTables.end())
return;
delete it->second;
m_MapTables.erase(it);
}
DNTableFileFormat * CDnTableDB::ForceLoadSox( const char *szFileName, std::string &szGenerationLabelStr)
{
DNTableFileFormat *pSox = NULL;
try {
std::vector<CStream *> pVecStream;
pSox = RawLoadSox(szFileName, pVecStream);
/////////////////////////////////////////////
pSox->SetGenerationInverseLabel( const_cast<char*>(szGenerationLabelStr.c_str()) );
pSox->Load( pVecStream );
SAFE_DELETE_PVEC( pVecStream );
pSox->SetLoadName(szFileName);
}
catch(int) {
throw szFileName;
}
return pSox;
}
DNTableFileFormat * CDnTableDB::RawLoadSox(const char *szFileName, std::vector<CStream *> &pVecStream)
{
DNTableFileFormat *pSox = NULL;
std::vector<CFileNameString> szVecList;
FindExtFileList( szFileName, szVecList );
pSox = new DNTableFileFormat;
std::vector<int> nVecFieldCount;
for( DWORD i=0; i<szVecList.size(); i++ )
{
CResMngStream *pStream = new CResMngStream( szVecList[i].c_str(), true );
pVecStream.push_back( pStream );
if( !pStream->IsValid() ) {
nVecFieldCount.push_back(-1);
continue;
}
short nReserveLen = 0;
short FieldCount = 0;
pStream->Seek( CDNTableFile::HeaderSize::Version, SEEK_SET );
pStream->Read( &nReserveLen, CDNTableFile::HeaderSize::ReserveLen );
if( nReserveLen > 0 )
pStream->Seek( nReserveLen, SEEK_CUR );
pStream->Read( &FieldCount, CDNTableFile::HeaderSize::FieldCount );
nVecFieldCount.push_back( FieldCount );
}
if( !nVecFieldCount.empty() ) {
bool bInvalidCount = false;
for( DWORD i=1; i<nVecFieldCount.size(); i++ ) {
if( nVecFieldCount[0] != nVecFieldCount[i] ) {
bInvalidCount = true;
break;
}
}
if( bInvalidCount ) {
WCHAR szTemp[1024];
std::wstring szError = L"Invalid Table Field Count\n\n";
for( DWORD i=0; i<nVecFieldCount.size(); i++ ) {
swprintf_s( szTemp, L"FileName : %S, FieldCount : %d\n", szVecList[i].c_str(), nVecFieldCount[i] );
szError += szTemp;
}
MessageBox( NULL, szError.c_str(), L"Critical Error!!", MB_OK );
}
}
return pSox;
}
void CDnTableDB::FindExtFileList( const char *szFileName, std::vector<CFileNameString> &szVecList )
{
char szTemp[_MAX_PATH] = { 0, };
char szName[256] = { 0, };
char szExt[256] = { 0, };
_GetFileName( szName, _countof(szName), szFileName );
_GetExt( szExt, _countof(szExt), szFileName );
sprintf_s( szTemp, "%s*.%s", szName, szExt );
CEtResourceMng::GetInstance().FindFileListAll_IgnoreExistFile( "ext", szTemp, szVecList );
}
void CDnTableDB::AddTable(TableEnum Index, DNTableFileFormat *pSox )
{
if( !pSox ) return;
m_MapTables.insert(std::map<TableEnum, DNTableFileFormat*>::value_type(Index, pSox));
}
void CDnTableDB::RemoveTable(TableEnum Index)
{
m_MapTables.erase(Index);
}
DNTableFileFormat *CDnTableDB::GetTable( TableEnum Index )
{
std::map<TableEnum, DNTableFileFormat*>::iterator it = m_MapTables.find(Index);
#ifdef PRE_ADD_REDUCE_TABLE_RESOURCE
if( it == m_MapTables.end() )
{
AddTableByIndex( Index );
it = m_MapTables.find( Index );
}
#else // PRE_ADD_REDUCE_TABLE_RESOURCE
if (it == m_MapTables.end())
return NULL;
#endif // PRE_ADD_REDUCE_TABLE_RESOURCE
return it->second;
}
DNTableFileFormat * CDnTableDB::ReLoadSox(TableEnum Index)
{
//cash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TCASHCOMMODITY, TCASHPACKAGE<47><45><EFBFBD><EFBFBD> <20>ش<EFBFBD><D8B4>ȴ<EFBFBD>. Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E2B9AE> Ȯ<>ιٶ<CEB9>
#ifdef _WORK
#else
if(Index != TCASHCOMMODITY && Index != TCASHPACKAGE)
return NULL;
#endif //#ifdef _WORK
std::string strLoadName;
DNTableFileFormat * pOldSox = GetTable(Index);
if(pOldSox)
pOldSox->GetLoadName(strLoadName);
else
return NULL;
//reload!
std::string strGenerationLevelList;
if (pOldSox->GetVecGenerationInverseLabelList()->size() > 0)
{
std::vector<std::string> * pVecString = pOldSox->GetVecGenerationInverseLabelList();
if (pVecString)
{
std::vector<std::string>::iterator ii;
for (ii = pVecString->begin(); ii != pVecString->end(); ii++)
{
if (ii != pVecString->begin())
strGenerationLevelList.append(";");
strGenerationLevelList.append((*ii));
}
}
}
DNTableFileFormat * pSox = ForceLoadSox(strLoadName.c_str(), strGenerationLevelList);
if(pSox)
{
RemoveTable(Index);
AddTable(Index, pSox);
#ifdef _WORK
delete pOldSox;
#endif //#ifdef _WORK
return pSox;
}
return NULL;
}
const char *CDnTableDB::GetFileName( int nIndex )
{
DNTableFileFormat *pSox = GetTable( TFILE );
if( !pSox->IsExistItem( nIndex ) ) return NULL;
return pSox->GetFieldFromLablePtr( nIndex, "_FileName" )->GetString();
}
int CDnTableDB::GetMailInfo( int nIndex, MailTableInfoEnum eMailInfo, bool bCashInfo, int nInfoIndex )
{
DNTableFileFormat *pSox = GetTable( TMAIL );
if( !pSox ) return 0;
if( !pSox->IsExistItem( nIndex ) ) return 0;
bool bCash = ( pSox->GetFieldFromLablePtr( nIndex, "_IsCash" )->GetInteger() == TRUE ) ? true : false;
if( bCash != bCashInfo ) return 0;
int nResult = 0;
if( nInfoIndex < 0 || nInfoIndex > 4 ) nInfoIndex = 0;
char szLabel[32] = {0,};
switch( eMailInfo )
{
case MailInfoRewardCoin:
{
nResult = pSox->GetFieldFromLablePtr( nIndex, "_MailPresentMoney" )->GetInteger();
}
break;
case MailInfoRewardItemID:
{
sprintf_s( szLabel, 32, "_MailPresentItem%d", nInfoIndex+1 );
nResult = pSox->GetFieldFromLablePtr( nIndex, szLabel )->GetInteger();
}
break;
case MailInfoRewardItemCount:
{
sprintf_s( szLabel, 32, "_Count%d", nInfoIndex+1 );
nResult = pSox->GetFieldFromLablePtr( nIndex, szLabel )->GetInteger();
}
break;
}
return nResult;
}
// PlayerWeightTable <20≯<EFBFBD> <20>о<EFBFBD><D0BE><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>
CPlayerWeightTable::CPlayerWeightTable()
{
DNTableFileFormat *pSox = GetDNTable( CDnTableDB::TPLAYERWEIGHT );
if( !pSox )
{
g_Log.Log( LogType::_FILELOG, L"layerWeightTable.ext failed\r\n");
return;
}
char szLabel[32];
for( int i=0; i<10; i++ ) {
sprintf_s( szLabel, "_Character%d", i + 1 );
for( int j=0; j<Amount; j++ ) {
m_fPlayerWeightValue[i][j] = pSox->GetFieldFromLablePtr( j + 1, szLabel )->GetFloat();
};
}
}
CPlayerWeightTable::~CPlayerWeightTable()
{
}
CGlobalWeightTable::CGlobalWeightTable()
{
memset( m_fGlobalWeightValue, 0, sizeof(m_fGlobalWeightValue) );
DNTableFileFormat *pSox = GetDNTable( CDnTableDB::TGLOBALWEIGHT );
if( !pSox )
{
g_Log.Log( LogType::_FILELOG, L"GlobalTable.ext failed\r\n");
return;
}
for( int i=0; i<Amount; i++ ) {
if( !pSox->IsExistItem( i + 1 ) ) {
m_fGlobalWeightValue[i] = 0.f;
continue;
}
m_fGlobalWeightValue[i] = pSox->GetFieldFromLablePtr( i + 1, "_Value" )->GetFloat();
};
}
CGlobalWeightTable::~CGlobalWeightTable()
{
}
float CGlobalWeightTable::GetValue( WeightTableIndex Index )
{
return m_fGlobalWeightValue[Index];
}
CGlobalWeightIntTable::CGlobalWeightIntTable()
{
memset( m_nGlobalWeightValue, 0, sizeof(m_nGlobalWeightValue) );
DNTableFileFormat *pSox = GetDNTable( CDnTableDB::TGLOBALWEIGHTINT );
if( !pSox )
{
g_Log.Log( LogType::_FILELOG, L"GlobalTableInt.ext failed\r\n");
return;
}
for( int i=0; i<Amount; i++ ) {
if( !pSox->IsExistItem( i + 1 ) ) {
m_nGlobalWeightValue[i] = 0;
continue;
}
m_nGlobalWeightValue[i] = pSox->GetFieldFromLablePtr( i + 1, "_Value" )->GetInteger();
};
}
CGlobalWeightIntTable::~CGlobalWeightIntTable()
{
}
int CGlobalWeightIntTable::GetValue( WeightTableIndex Index )
{
return m_nGlobalWeightValue[Index];
}
CPlayerLevelTable::CPlayerLevelTable()
{
DNTableFileFormat *pSox = GetDNTable( CDnTableDB::TPLAYERLEVEL );
if( !pSox )
{
g_Log.Log( LogType::_FILELOG, L"PlayerLevelTable.ext failed\r\n");
return;
}
char *szLabelValue[Amount] = {
"_Strength",
"_Agility",
"_Intelligence",
"_Stamina",
"_Experience",
"_SuperAmmor",
"_SkillPoint",
"_Fatigue",
"_DeadDurabilityRatio",
"_KillScore",
"_Assistscore",
"_Assistdecision",
"_Aggroper",
"_WeekFatigue",
"_SKillUsageRatio",
#ifdef PRE_MONITOR_SUPER_NOTE
"_IllegalAmount",
"_BanAmount",
#endif
"_AggroperPvE",
#if defined(PRE_ADD_VIP)
"_VIPFatigue",
"_VIPExp",
#endif // #if defined(PRE_ADD_VIP)
"_LevelDExp",
};
for( int i=0; i<pSox->GetItemCount(); i++ ) {
int nItemID = pSox->GetItemID(i);
if( nItemID % PLAYER_MAX_LEVEL == 1 ) {
LevelValue *pValue = new LevelValue[PLAYER_MAX_LEVEL];
for( DWORD j=0; j<PLAYER_MAX_LEVEL; j++ ) {
nItemID = pSox->GetItemID(i+j);
for( int k=0; k<Amount; k++ ) {
switch( k ) {
case DeadDurabilityRatio:
case AggroPer:
case AggroPerPvE:
pValue[j].nValue[k] = (int)(( pSox->GetFieldFromLablePtr( nItemID, szLabelValue[k] )->GetFloat() + 0.0001f ) * 100.f );
break;
case SPDecreaseRatio:
pValue[j].fValue[k] = pSox->GetFieldFromLablePtr( nItemID, szLabelValue[k] )->GetFloat();
break;
default:
pValue[j].nValue[k] = pSox->GetFieldFromLablePtr( nItemID, szLabelValue[k] )->GetInteger();
break;
}
}
}
int nJobID = ( pSox->GetItemID(i) / PLAYER_MAX_LEVEL ) + 1;
m_nMapTable.insert( make_pair( nJobID, pValue ) );
i += ( PLAYER_MAX_LEVEL - 1 ); // For <20>Ѿ<D1BE>鼭 i++ <20><>Ű<EFBFBD><EFBFBD><E2B6AB> <20>ϳ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
}
}
}
CPlayerLevelTable::~CPlayerLevelTable()
{
typedef std::map<int, LevelValue *> TMapPlayerLevelTable;
SAFE_DELETEA_PMAP( TMapPlayerLevelTable, m_nMapTable );
}
int CPlayerLevelTable::GetValue( int nClassID, int nLevel, PlayerLevelTableIndex Index )
{
std::map<int, LevelValue *>::iterator it = m_nMapTable.find( nClassID );
if( it == m_nMapTable.end() ) return -1;
return it->second[nLevel-1].nValue[Index];
}
float CPlayerLevelTable::GetValueFloat( int nClassID, int nLevel, PlayerLevelTableIndex Index )
{
std::map<int, LevelValue *>::iterator it = m_nMapTable.find( nClassID );
if( it == m_nMapTable.end() ) return -1.f;
return it->second[nLevel-1].fValue[Index];
}
CEqualLevelTable::CEqualLevelTable()
{
m_iMaxMode = -1;
m_pMapTable = NULL;
DNTableFileFormat *pSox = GetDNTable( CDnTableDB::TEQUALLEVEL );
if( !pSox )
{
g_Log.Log( LogType::_FILELOG, L"EqualLevelTable.ext failed\r\n");
return;
}
char *szLabelValue[Amount] = {
"_PhysicalAttackMinRevision",
"_PhysicalAttackMaxRevision",
"_MagicAttackMinRevision",
"_MagicAttackMaxRevision",
"_PhysicalDefenseRevision",
"_MagicDefenseRevision",
"_MaxHPRevision",
"_MaxSPRevision",
"_RecoverySPRevision",
"_StiffRevision",
"_StiffResistanceRevision",
"_CriticalRevision",
"_CriticalResistanceRevision",
"_StunRevision",
"_StunResistanceRevision",
"_SuperAmmorRevision",
"_MoveSpeedRevision",
"_ElementAttackRevision",
"_ElementDefenseRevision",
"_FinalDamageRevision",
"_StrengthRevision",
"_AgilityRevision",
"_IntelligenceRevision",
"_StaminaRevision",
};
for( int i=0; i<pSox->GetItemCount(); i++ )
{
int nItemID = pSox->GetItemID(i);
int iMode = pSox->GetFieldFromLablePtr(nItemID, "_Mode")->GetInteger();
if( iMode > m_iMaxMode )
{
m_iMaxMode = iMode;
}
}
if( m_iMaxMode <= 0 )
return;
m_pMapTable = new std::map<int, LevelValue *>[m_iMaxMode];
for( int j=0; j<m_iMaxMode; j++ )
{
std::vector<int> nVecItemList;
pSox->GetItemIDListFromField( "_Mode", (j+1) , nVecItemList );
for( DWORD i=0; i<nVecItemList.size(); i++ )
{
int nJobID = pSox->GetFieldFromLablePtr( nVecItemList[i], "_JobID" )->GetInteger();
if( m_pMapTable[j].find( nJobID ) != m_pMapTable[j].end() )
continue;
LevelValue *pValue = new LevelValue;
for( int k=0; k<Amount; k++ )
{
if( k < ElementAttackRevision )
pValue->nValue[k] = pSox->GetFieldFromLablePtr( nVecItemList[i], szLabelValue[k] )->GetInteger();
else
pValue->fValue[k] = pSox->GetFieldFromLablePtr( nVecItemList[i], szLabelValue[k] )->GetFloat();
}
m_pMapTable[j].insert( make_pair( nJobID, pValue ) );
}
}
}
CEqualLevelTable::~CEqualLevelTable()
{
if( m_pMapTable )
{
typedef std::map<int, LevelValue *> TMapEqualLevelTable;
for( int i=0; i<m_iMaxMode; i++ )
{
SAFE_DELETE_PMAP( TMapEqualLevelTable, m_pMapTable[i] );
}
delete[] m_pMapTable;
m_pMapTable = NULL;
}
}
int CEqualLevelTable::GetValue( int nMode, int nJobID, EqualLevelTableIndex Index )
{
nMode -= 1;
if( nMode < 0 || nMode >= m_iMaxMode || m_pMapTable == NULL )
return 0;
std::map<int, LevelValue *>::iterator it = m_pMapTable[nMode].find( nJobID );
if( it == m_pMapTable[nMode].end() )
return 0;
return it->second->nValue[Index];
}
float CEqualLevelTable::GetValueFloat( int nMode, int nJobID, EqualLevelTableIndex Index )
{
nMode -= 1;
if( nMode < 0 || nMode >= m_iMaxMode || m_pMapTable == NULL )
return 0.f;
std::map<int, LevelValue *>::iterator it = m_pMapTable[nMode].find( nJobID );
if( it == m_pMapTable[nMode].end() )
return 0.f;
return it->second->fValue[Index];
}
CEqualBasisTable::CEqualBasisTable()
{
DNTableFileFormat *pSox = GetDNTable( CDnTableDB::TEQUALBASIS );
if( !pSox )
{
g_Log.Log( LogType::_FILELOG, L"EqualBasis.ext failed\r\n");
return;
}
char *szLabelValue[Amount] = {
"_PhysicalAttackMinRevision",
"_PhysicalAttackMaxRevision",
"_MagicAttackMinRevision",
"_MagicAttackMaxRevision",
"_PhysicalDefenseRevision",
"_MagicDefenseRevision",
"_MaxHPRevision",
"_MaxSPRevision",
"_RecoverySPRevision",
"_StiffRevision",
"_StiffResistanceRevision",
"_CriticalRevision",
"_CriticalResistanceRevision",
"_StunRevision",
"_StunResistanceRevision",
"_SuperAmmorRevision",
"_MoveSpeedRevision",
"_FinalDamageRevision",
"_ElementAttackRevision",
"_ElementDefenseRevision",
"_StrengthRevision",
"_AgilityRevision",
"_IntelligenceRevision",
"_StaminaRevision",
};
for( int i=0; i<pSox->GetItemCount(); i++ ) {
int nItemID = pSox->GetItemID(i);
if( nItemID % PLAYER_MAX_LEVEL == 1 ) {
LevelValue *pValue = new LevelValue[PLAYER_MAX_LEVEL];
for( DWORD j=0; j<PLAYER_MAX_LEVEL; j++ ) {
nItemID = pSox->GetItemID(i+j);
for( int k=0; k<Amount; k++ ) {
pValue[j].nValue[k] = pSox->GetFieldFromLablePtr( nItemID, szLabelValue[k] )->GetInteger();
}
}
int nJobID = ( pSox->GetItemID(i) / PLAYER_MAX_LEVEL ) + 1;
m_nMapTable.insert( make_pair( nJobID, pValue ) );
i += ( PLAYER_MAX_LEVEL - 1 ); // For <20>Ѿ<D1BE>鼭 i++ <20><>Ű<EFBFBD><EFBFBD><E2B6AB> <20>ϳ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
}
}
}
CEqualBasisTable::~CEqualBasisTable()
{
typedef std::map<int, LevelValue *> TMapPlayerLevelTable;
SAFE_DELETEA_PMAP( TMapPlayerLevelTable, m_nMapTable );
}
int CEqualBasisTable::GetValue( int nClassID, int nLevel, EqualBasisTableIndex Index )
{
std::map<int, LevelValue *>::iterator it = m_nMapTable.find( nClassID );
if( it == m_nMapTable.end() ) return -1;
return it->second[nLevel-1].nValue[Index];
}
CFatigueAdjustmentTable::CFatigueAdjustmentTable()
{
DNTableFileFormat *pSox = GetDNTable( CDnTableDB::TFATIGUEADJUST );
if( !pSox )
{
g_Log.Log( LogType::_FILELOG, L"FatigueAdjustTable.ext failed\r\n");
return;
}
char *szLabelValue[5] = {
"_Easy",
"_Normal",
"_Hard",
"_Master",
"_Abyss",
};
for( int i=0; i<pSox->GetItemCount(); i++ ) {
int nItemID = pSox->GetItemID(i);
float *fValue = new float[5];
for( int j=0; j<5; j++ ) {
fValue[j] = pSox->GetFieldFromLablePtr( nItemID, szLabelValue[j] )->GetFloat();
}
m_fVecValue.push_back( fValue );
}
}
CFatigueAdjustmentTable::~CFatigueAdjustmentTable()
{
SAFE_DELETE_AVEC( m_fVecValue );
}
float CFatigueAdjustmentTable::GetValue( int nPartyCount, int nStageConstructionLevel )
{
if( nPartyCount < 1 || nPartyCount >(int)m_fVecValue.size() ) return 1.f;
if( nStageConstructionLevel < 0 || nStageConstructionLevel >= 5 ) return 1.f;
return m_fVecValue[nPartyCount-1][nStageConstructionLevel];
}
#ifdef PRE_ADD_VIP
CVIPGradeTable::CVIPGradeTable()
{
DNTableFileFormat* pSox = GetDNTable( CDnTableDB::TVIPGRADE );
if(pSox)
{
for (int i = 0; i < pSox->GetItemCount(); ++i)
{
int nItemID = pSox->GetItemID(i);
SVIPGradeUnit unit;
unit.level = pSox->GetFieldFromLablePtr(nItemID, "_VipLevel")->GetInteger();
unit.nameUIStringID = pSox->GetFieldFromLablePtr(nItemID, "_VipNameID")->GetInteger();
unit.ptsMin = pSox->GetFieldFromLablePtr(nItemID, "_VipPointMin")->GetInteger();
unit.ptsMax = pSox->GetFieldFromLablePtr(nItemID, "_VipPointMax")->GetInteger();
m_VIPGradeList.push_back(unit);
}
}
}
const CVIPGradeTable::SVIPGradeUnit* CVIPGradeTable::GetValue(int pts) const
{
if(pts <= 0)
return NULL;
#ifdef PRE_FIX_VIP_MAXPTS
#define MAX_VIP_PTS 10000
if(pts >= MAX_VIP_PTS)
return &(m_VIPGradeList.back());
#endif
std::vector<SVIPGradeUnit>::const_iterator iter = m_VIPGradeList.begin();
for(; iter != m_VIPGradeList.end(); ++iter)
{
const SVIPGradeUnit& unit = *iter;
if(unit.ptsMin <= pts && unit.ptsMax >= pts)
return &unit;
}
return NULL;
}
#endif // PRE_ADD_VIP
CEqualExponentTable::CEqualExponentTable()
{
DNTableFileFormat *pSox = GetDNTable( CDnTableDB::TEQUALEXPONENT );
if( !pSox )
{
g_Log.Log( LogType::_FILELOG, L"EqualExponentTable.ext failed\r\n");
return;
}
char *szLabelValue[Amount] = {
"_PhysicalAttackMinRevision",
"_PhysicalAttackMaxRevision",
"_MagicAttackMinRevision",
"_MagicAttackMaxRevision",
"_PhysicalDefenseRevision",
"_MagicDefenseRevision",
"_MaxHPRevision",
"_MaxSPRevision",
"_RecoverySPRevision",
"_StiffRevision",
"_StiffResistanceRevision",
"_CriticalRevision",
"_CriticalResistanceRevision",
"_StunRevision",
"_StunResistanceRevision",
"_SuperAmmorRevision",
"_MoveSpeedRevision",
"_ElementAttackRevision",
"_ElementDefenseRevision",
"_FinalDamageRevision",
"_StrengthRevision",
"_AgilityRevision",
"_IntelligenceRevision",
"_StaminaRevision",
};
for( int i=0; i<pSox->GetItemCount(); i++ ) {
int nItemID = pSox->GetItemID(i);
ModeValue Struct;
for( int k=0; k<Amount; k++ ) {
Struct.fValue[k] = pSox->GetFieldFromLablePtr( nItemID, szLabelValue[k] )->GetFloat();
}
m_VecTable.push_back( Struct );
}
}
CEqualExponentTable::~CEqualExponentTable()
{
SAFE_DELETE_VEC( m_VecTable );
}
float CEqualExponentTable::GetValue( int nMode, EqualExponentTableIndex Index )
{
if( nMode < 1 || nMode > (int)m_VecTable.size() ) return 1.f;
return m_VecTable[nMode-1].fValue[Index];
}
CGuildRewardTable::CGuildRewardTable()
{
DNTableFileFormat *pSox = GetDNTable( CDnTableDB::TGUILDREWARDITEM );
if( !pSox )
{
g_Log.Log( LogType::_FILELOG, L"guildrewardtable.ext failed\r\n");
return;
}
for( int i=0; i<pSox->GetItemCount(); i++ )
{
int nItemID = pSox->GetItemID(i);
GuildReward::GuildRewardInfo newInfo;
newInfo.ID = nItemID;
newInfo._NameID = pSox->GetFieldFromLablePtr( nItemID, "_NameID" )->GetInteger();
newInfo._NameIDParam = pSox->GetFieldFromLablePtr( nItemID, "_NameIDParam" )->GetString();
newInfo._DescriptionID = pSox->GetFieldFromLablePtr( nItemID, "_DescriptionID" )->GetInteger();
newInfo._DescriptionIDParam = pSox->GetFieldFromLablePtr( nItemID, "_DescriptionIDParam" )->GetString();
newInfo._TooltipItemID = pSox->GetFieldFromLablePtr( nItemID, "_TooltipItemID" )->GetInteger();
newInfo._NeedGold = pSox->GetFieldFromLablePtr( nItemID, "_NeedGold" )->GetInteger();
newInfo._NeedGuildLevel = pSox->GetFieldFromLablePtr( nItemID, "_NeedGuildLevel" )->GetInteger();
newInfo._Type = pSox->GetFieldFromLablePtr( nItemID, "_Type" )->GetInteger();
newInfo._TypeParam1 = pSox->GetFieldFromLablePtr( nItemID, "_TypeParam1" )->GetInteger();
newInfo._TypeParam2 = pSox->GetFieldFromLablePtr( nItemID, "_TypeParam2" )->GetInteger();
newInfo._Period = pSox->GetFieldFromLablePtr( nItemID, "_Period" )->GetInteger();
newInfo._GuildMasterLimit = pSox->GetFieldFromLablePtr( nItemID, "_GuildMasterLimit" )->GetInteger() == 1;
newInfo._IsApplicable = pSox->GetFieldFromLablePtr( nItemID, "_IsApplicable" )->GetInteger() == 1;
newInfo._PrerequisiteType = pSox->GetFieldFromLablePtr( nItemID, "_PrerequisiteType" )->GetInteger();
newInfo._PrerequisiteID = pSox->GetFieldFromLablePtr( nItemID, "_PrerequisiteID" )->GetInteger();
newInfo._NeedJobClass = pSox->GetFieldFromLablePtr( nItemID, "_NeedJobClass" )->GetInteger();
newInfo._CheckInven = pSox->GetFieldFromLablePtr( nItemID, "_CheckInven" )->GetInteger() == 1;
AddGuildRewardInfo(nItemID, newInfo);
}
}
CGuildRewardTable::~CGuildRewardTable()
{
}
bool CGuildRewardTable::AddGuildRewardInfo(int nID, const GuildReward::GuildRewardInfo& info)
{
return m_GuildRewardList.insert(make_pair(nID, info)).second;
}
GuildReward::GuildRewardInfo* CGuildRewardTable::GetGuildRewardInfo(int nID)
{
GUILDREWARD_LIST::iterator findIter = m_GuildRewardList.find(nID);
if (findIter != m_GuildRewardList.end())
return &findIter->second;
return NULL;
}
#ifdef PRE_ADD_ITEMCAT_TOOLTIP_INFO
CItemCategoryInfo::CItemCategoryInfo()
{
DNTableFileFormat *pSox = GetDNTable(CDnTableDB::TITEMCATEGORYDESC);
if (!pSox)
{
g_Log.Log(LogType::_FILELOG, L"itemcategorytable.dnt failed\r\n");
return;
}
m_ItemCategoryInfo.clear();
for( int i=0; i<pSox->GetItemCount(); i++ )
{
int nItemID = pSox->GetItemID(i);
int itemCategoryTypeIndex = 0, descStringIndex = 0;
CDNTableFile::Cell* pCatCell = pSox->GetFieldFromLablePtr(nItemID, "_ItemCategoryType");
if (pCatCell != NULL)
{
itemCategoryTypeIndex = pCatCell->GetInteger();
}
else
{
_ASSERT(0);
continue;
}
CDNTableFile::Cell* pNameCell = pSox->GetFieldFromLablePtr(nItemID, "_NameID");
if (pNameCell != NULL)
{
descStringIndex = pNameCell->GetInteger();
}
else
{
_ASSERT(0);
continue;
}
if (itemCategoryTypeIndex > 0 && descStringIndex > 0)
m_ItemCategoryInfo.insert(std::make_pair(itemCategoryTypeIndex, descStringIndex));
}
}
int CItemCategoryInfo::GetDescIndex(int itemCategoryType) const
{
std::map<int, int>::const_iterator iter = m_ItemCategoryInfo.find(itemCategoryType);
if (iter != m_ItemCategoryInfo.end())
return (*iter).second;
return -1;
}
#endif // PRE_ADD_ITEMCAT_TOOLTIP_INFO
CPartsSkinCombineTable::CPartsSkinCombineTable()
{
DNTableFileFormat *pSox = GetDNTable(CDnTableDB::TPARTSSKINCOMBINE);
if (!pSox)
{
g_Log.Log(LogType::_FILELOG, L"PartsSkinCombine.ext failed\r\n");
return;
}
char *szLabelValue[3] = {
"_SkinID",
"_NeedJobClass",
"_Player_SkinName",
};
for (int i = 0; i < pSox->GetItemCount(); i++) {
int nIndex = pSox->GetFieldFromLablePtr(i, szLabelValue[0])->GetInteger();
char* nNeedJob = pSox->GetFieldFromLablePtr(i, szLabelValue[1])->GetString();
int nSkinID = pSox->GetFieldFromLablePtr(i, szLabelValue[2])->GetInteger();
SkinValue *pValue = new SkinValue();
pValue->nSkinIndex = nIndex;
pValue->nClassID = atoi(nNeedJob);
pValue->nSkinID = nSkinID;
m_nMapTable.insert(std::make_pair(i, pValue));
//int nItemID = pSox->GetItemID(i);
//if (nItemID % PLAYER_MAX_LEVEL == 1) {
// LevelValue *pValue = new LevelValue[PLAYER_MAX_LEVEL];
// for (DWORD j = 0; j<PLAYER_MAX_LEVEL; j++) {
// nItemID = pSox->GetItemID(i + j);
// for (int k = 0; k<Amount; k++) {
// pValue[j].nValue[k] = pSox->GetFieldFromLablePtr(nItemID, szLabelValue[k])->GetInteger();
// }
// }
// int nJobID = (pSox->GetItemID(i) / PLAYER_MAX_LEVEL) + 1;
// m_nMapTable.insert(make_pair(nJobID, pValue));
// i += (PLAYER_MAX_LEVEL - 1); // For <20>Ѿ<D1BE>鼭 i++ <20><>Ű<EFBFBD><EFBFBD><E2B6AB> <20>ϳ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
//}
}
}
CPartsSkinCombineTable::~CPartsSkinCombineTable()
{
typedef std::map<int, SkinValue *> TMapPartsSkinCombineTable;
SAFE_DELETEA_PMAP(TMapPartsSkinCombineTable, m_nMapTable);
}
int CPartsSkinCombineTable::GetValue(int nSkinIndex, int nClassID)
{
for (std::map<int, SkinValue *>::iterator it = m_nMapTable.begin(); it != m_nMapTable.end(); it++) {
if (it->second->nSkinIndex == nSkinIndex && it->second->nClassID == nClassID)
return it->second->nSkinID;
}
return 0;
}
CStageDropTable::CStageDropTable()
{
DNTableFileFormat *pSox = GetDNTable(CDnTableDB::TSTAGECLEARDROP);
if (!pSox)
{
g_Log.Log(LogType::_FILELOG, L"StageClearDropTable.ext failed\r\n");
return;
}
char *szLabelValue[5] = {
"_StageClearDropid",
"_MinLevel",
"_MaxLevel",
"_Job",
"_DropID",
};
for (int i = 0; i < pSox->GetItemCount(); i++) {
int nItemID = pSox->GetItemID(i);
int nIndex = pSox->GetFieldFromLablePtr(nItemID, szLabelValue[0])->GetInteger();
int _MinLevel = pSox->GetFieldFromLablePtr(nItemID, szLabelValue[1])->GetInteger();
int _MaxLevel = pSox->GetFieldFromLablePtr(nItemID, szLabelValue[2])->GetInteger();
int _Job = pSox->GetFieldFromLablePtr(nItemID, szLabelValue[3])->GetInteger();
int _DropID = pSox->GetFieldFromLablePtr(nItemID, szLabelValue[4])->GetInteger();
DropValue *pValue = new DropValue();
pValue->_StageClearDropId = nIndex;
pValue->_MinLevel = _MinLevel;
pValue->_MaxLevel = _MaxLevel;
pValue->_Job = _Job;
pValue->_DropID = _DropID;
m_nMapTable.insert(make_pair(i, pValue));
}
}
CStageDropTable::~CStageDropTable()
{
typedef std::map<int, DropValue *> TMapStageDropTable;
SAFE_DELETEA_PMAP(TMapStageDropTable, m_nMapTable);
}
int CStageDropTable::GetValue(int nDropID, int nLevel, int nJob)
{
//printf("[%s] Count: %d \n",__FUNCTION__,m_nMapTable.size());
for (std::map<int, DropValue *>::iterator it = m_nMapTable.begin(); it != m_nMapTable.end(); it++) {
// OutputDebug("_StageClaerDropid:%d _MinLevel:%d _MaxLevel:%d _Job:%d _DropID:%d", it->second->_StageClearDropId, it->second->_MinLevel, it->second->_MaxLevel, it->second->_Job, it->second->_DropID);
if (it->second->_StageClearDropId == nDropID) {
if (it->second->_Job == nJob || it->second->_Job == 0) {
if (nLevel >= it->second->_MinLevel && nLevel <= it->second->_MaxLevel) {
return it->second->_DropID;
}
}
}
}
return 0;
}
CDisjointInfoTable::CDisjointInfoTable()
{
DNTableFileFormat *pSox = GetDNTable(CDnTableDB::TDISJOINTINFO);
if (!pSox)
{
g_Log.Log(LogType::_FILELOG, L"DisjointorInfoTable.ext failed\r\n");
return;
}
char *szLabelValue[2] = {
"_EnchantLevel",
"_DisjointDrop",
};
for (int i = 0; i < pSox->GetItemCount(); i++) {
int nItemID = pSox->GetItemID(i);
int _EnchantLevel = pSox->GetFieldFromLablePtr(nItemID, szLabelValue[0])->GetInteger();
int _DisjointDrop = pSox->GetFieldFromLablePtr(nItemID, szLabelValue[1])->GetInteger();
DisjointorInfo *pValue = new DisjointorInfo();
pValue->_EnchantLevel = _EnchantLevel;
pValue->_DisjointDrop = _DisjointDrop;
for(int k=0;k<20;k++)
{
int ItemID = pSox->GetFieldFromLablePtr(nItemID, FormatA("_Item%dIndex",k+1).c_str())->GetInteger();
pValue->_ItemID[k] = ItemID;
}
m_nMapTable.insert(make_pair(i, pValue));
}
}
CDisjointInfoTable::~CDisjointInfoTable()
{
typedef std::map<int, DisjointorInfo *> TMapDisjointInfoTable;
SAFE_DELETEA_PMAP(TMapDisjointInfoTable, m_nMapTable);
}
std::vector<int> CDisjointInfoTable::GetValue(int nDisjointID, int nItemLevel)
{
std::vector<int> vecTemp;
for (std::map<int, DisjointorInfo *>::iterator it = m_nMapTable.begin(); it != m_nMapTable.end(); it++) {
if (it->second->_DisjointDrop == nDisjointID) {
if (it->second->_EnchantLevel == nItemLevel || it->second->_EnchantLevel == 0) {
for (int i = 0; i < 20; i++)
{
if (it->second->_ItemID[i] != 0)
vecTemp.push_back(it->second->_ItemID[i]);
}
}
}
}
return vecTemp;
}
//RLKT!
CDragonJewelSlotTable::CDragonJewelSlotTable()
{
DNTableFileFormat *pSox = GetDNTable(CDnTableDB::TDRAGONJEWELSLOTTABLE);
if (!pSox)
{
g_Log.Log(LogType::_FILELOG, L"dragonjewelslottable.ext failed\r\n");
return;
}
char *szLabelValue[3] = {
"_DragonJewelID",
"_DragonJewelRatio",
"_IsEnchanted",
};
for (int i = 0; i < pSox->GetItemCount(); i++) {
int nItemID = pSox->GetItemID(i);
int JewelID = pSox->GetFieldFromLablePtr(nItemID, szLabelValue[0])->GetInteger();
float SuccessRatio = pSox->GetFieldFromLablePtr(nItemID, szLabelValue[1])->GetFloat();
int isEnchanted = pSox->GetFieldFromLablePtr(nItemID, szLabelValue[2])->GetInteger();
DragonJewelSlotInfo *pValue = new DragonJewelSlotInfo();
pValue->JewelType = JewelID;
pValue->SuccessRatio = SuccessRatio;
pValue->Enhanced = isEnchanted;
for (int k = 0; k<4; k++)
{
int SlotType = pSox->GetFieldFromLablePtr(nItemID, FormatA("_DragonJewelSlot%d", k + 1).c_str())->GetInteger();
pValue->SlotType[k] = SlotType;
}
m_nMapTable.insert(make_pair(i, pValue));
}
}
CDragonJewelSlotTable::~CDragonJewelSlotTable()
{
typedef std::map<int, DragonJewelSlotInfo *> TMapDragonJewelSlotTable;
SAFE_DELETEA_PMAP(TMapDragonJewelSlotTable, m_nMapTable);
}
std::vector<int> CDragonJewelSlotTable::GetValue(int nJewelType)
{
std::vector<int> vecTemp;
for (std::map<int, DragonJewelSlotInfo *>::iterator it = m_nMapTable.begin(); it != m_nMapTable.end(); it++) {
if (it->second->JewelType == nJewelType) {
for (int i = 0; i < 4; i++)
{
vecTemp.push_back(it->second->SlotType[i]);
}
}
}
return vecTemp;
}