2024-12-21 10:04:04 +08:00
|
|
|
|
|
|
|
|
|
|
#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;
|
|
|
|
|
|
}
|