DragonNest/GameCommon/DnTableDB.cpp

2123 lines
73 KiB
C++
Raw Permalink Normal View History

#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;
}