DragonNest/GameCommon/DnTableDB.h
2024-12-19 09:48:26 +08:00

1275 lines
No EOL
30 KiB
C++

#pragma once
#include "Singleton.h"
#include "DNTableFile.h"
class CDnTableDB : public CSingleton<CDnTableDB> {
public:
CDnTableDB();
~CDnTableDB();
enum TableEnum {
TACTOR = 0,
TPARTS,
TWEAPON,
TTILE,
TENVIEFFECT,
TMAP,
TPLAYERLEVEL,
TMONSTER,
TMONSTERCOMPOUND,
TITEM,
TPROP,
TJOB,
TSKILL,
TITEMDROP,
TDEFAULTCREATE,
TNPC,
TQUEST,
TPLAYERWEIGHT,
TTALKPARAM,
TSKILLLEVEL,
TMAPGATE,
TSOCIAL,
TMONSTERSKILL,
TSHOP,
TMONSTERPARTS,
TSKILLSHOP,
TSUMMONPROP,
TDUNGEONENTER,
TDUNGEONCLEAR,
TCLEARSTANDARD,
TSYMBOLITEM,
TCUTSCENE,
TPLATE,
TITEMCOMPOUND,
TSTATEEFFECT,
TDUNGEONMAP,
TTODAYTIP,
TFILE,
TQUESTREWARD,
TMONSTERWEIGHT,
TQUESTCHAPTER,
TEQUIPMATCHACTION,
TFACE,
TREBIRTHCOIN,
TPVPMAP,
TPVPGAMEMODE,
TPVPGAMESTARTCONDITION,
TCP,
TGAMEROOMNAME,
TGLOBALWEIGHT,
TGLOBALWEIGHTINT,
#ifdef PRE_FIX_MEMOPT_ENCHANT
TENCHANT_MAIN,
#else
TENCHANT,
#endif
TPOTENTIAL,
TSETITEM,
TEQUALLEVEL,
TMISSION,
TAPPELLATION,
TPVPRANK,
TPVPWINCONDITION,
TITEMCOMPOUNDSHOP,
TEQUALBASIS,
TDAILYMISSION,
TSCHEDULE,
TWORLDMAPUI,
TTAX,
TMISSIONSCHEDULE,
TRADIOMSG,
TGESTURE,
TMONSTERGROUP,
TMONSTERSET,
TSKILLTREE,
TITEMDROPGROUP,
TGUILDUSERCAP,
TDLMAP,
TDLDUNGEONCLEAR,
TCASHCOMMODITY, //이녀석과
TCASHGOODSINFO,
TCASHPACKAGE, //이녀석은 라이브도중 리로드가 추가되었다. 서버기동시 이외에 Sox파일을 다이렉트로 억세스하지말자
TCASHLIMIT,
TWEATHER,
TPCCAFE,
TFATIGUEADJUST,
TCASHPRESENTREACT,
#ifdef PRE_ADD_GACHA_JAPAN
TGACHA_JP,
TGACHASETITEM_JP,
#endif
TSEALCOUNT,
TLEVELUPEVENT,
#if defined(PRE_ADD_VIP)
TVIP,
TVIPGRADE,
#endif // #if defined(PRE_ADD_VIP)
TCASHTAB,
TFAIRY,
TCOSMIX,
TCOSMIXABILITY,
TGLYPHSKILL,
TGLYPHSLOT,
TLEVELPROMO,
#if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
TREPUTE,
TPRESENT,
TNPCREACTION,
TSTOREBENEFIT,
#endif // #if defined( PRE_ADD_NPC_REPUTATION_SYSTEM )
TMAIL,
TMODDLG,
TMASTERSYSTEM_DECREASE,
TMASTERSYSTEM_GAIN,
TVEHICLE,
TVEHICLEPARTS,
TPOTENTIALJEWEL,
TEVENTPOPUP,
TCHARMITEM,
TCHARMITEMKEY,
#if defined( PRE_ADD_SECONDARY_SKILL )
TSecondarySkill,
TSecondarySkillLevel,
TSecondarySkillRecipe,
#endif // #if defined( PRE_ADD_SECONDARY_SKILL )
TSKILLVIDEO,
TGUILDWAREHOUSE,
TFARMCULTIVATE,
TFARMSKIN,
TFISHING,
TFISHINGPOINT,
TFISHINGAREA,
TFISHINGROD,
TQUESTPERIOD,
TGLOBALEVENTQUEST,
TSTAFFROLL,
TCOLLECTIONBOOK,
TEXCHANGETRADE,
TSKILLBUBBLE,
TSKILLBUBBLEDEFINE,
TENCHANTJEWEL,
TPVPMISSIONROOM,
TEQUALEXPONENT,
TITEMCOMPOUNDGROUP,
TEXPADJUST,
TSTAGEREWARD,
TMONSTERSKILL_TRANS,
TMONSTER_TRANS,
TMONSTERGROUP_TRANS,
TGHOULMODE_CONDITION,
TPVPGAMEMODESETTING,
TPVPGAMEMODESKILLSETTING,
TMONSTER_TRANS_RADIOMSG,
TMONSTER_TRANS_RADIOBASE,
TCONNECTINGTIME,
THELP,
TGUIDEPOPUP,
TREPUTEBENEFIT,
THELPKEYWORD,
TINSTANTITEM,
TGUILDMARK,
TBATTLEGROUNDMODE,
TBATTLEGROUNDRESWAR,
TBATTLEGROUNDSKILLTREE,
TBATTLEGROUNDSKILLLEVEL,
TBATTLEGROUNDSKILL,
TRESOURCEWARSKIN,
TUNION,
TGUILDWARREWARD, // 길드전 보상
TPLAYERCOMMONLEVEL,
TGACHAINFO,
TPETLEVEL,
TPETSKILLLEVEL,
TMASTERSYSFEEL,
TATTENDANCEEVENT,
#ifdef PRE_ADD_CASH_AMULET
TCASHCHATBALLOONTABLE,
#endif
TTRIGGERVARIABLETABLE,
TLOADINGANI,
TITEMOPTION,
TVILLAGEALLOWEDSKILL,
TCOMBINEDSHOP,
TGLYPHCHARGE,
#ifdef PRE_FIX_MEMOPT_ENCHANT
TENCHANT_STATE,
TENCHANT_NEEDITEM,
#endif
#ifdef PRE_ADD_SHUTDOWN_CHILD
TSHUTDOWNMSG,
#endif
TPLAYERCUSTOMEVENTUI,
TQUEST_LEVELCAP_REWARD,
TGUILDLEVEL,
TGUILDWARPOINT,
TGUILDREWARDITEM, //길드보상아이템
TWING,
#ifdef PRE_ADD_MODIFY_PLAYER_CANNON
TCANNON,
#endif
#ifdef PRE_ADD_COSRANDMIX
TCOSMIXINFO,
TCOSRANDOMMIXINFO,
#endif
#if defined(PRE_ADD_SALE_COUPON)
TSALECOUPON,
#endif
#ifdef PRE_ADD_DONATION
TCONTRIBUTION,
#endif
TITEMPERIOD,
TCONTROLKEY,
#if defined(PRE_ADD_COUNTRY_BY_COUNTRY_CONTROL)
TCONTROLKEY_ESP,
TCONTROLKEY_FRA,
TCONTROLKEY_GER,
#endif // #if defined(PRE_ADD_COUNTRY_BY_COUNTRY_CONTROL)
#if defined( PRE_ADD_NAMEDITEM_SYSTEM )
TNAMEDITEM,
#endif
#ifdef PRE_ADD_EXCHANGE_POTENTIAL
TPOTENTIAL_TRANS,
#endif //#ifdef PRE_ADD_EXCHANGE_POTENTIAL
#if defined( PRE_PARTY_DB )
TPARTYSORTWEIGHT,
#endif // #if defined( PRE_PARTY_DB )
TCASHERASABLETYPE,
TPETFOOD,
TPETCHAT,
#if defined (PRE_ADD_CHAOSCUBE)
TCHAOSCUBESTUFF,
TCHAOSCUBERESULT,
#endif
#if defined(PRE_MOD_SELECT_CHAR)
TCAMERA,
TTITLE,
TDEFAULTCREATECOSTUME,
#endif // PRE_MOD_SELECT_CHAR
#if defined(PRE_ADD_INSTANT_CASH_BUY)
TCASHBUYSHORTCUT,
#endif // PRE_ADD_INSTANT_CASH_BUY
#if defined( PRE_WORLDCOMBINE_PARTY )
TWORLDCOMBINEPARTY,
#endif
#if defined( PRE_ADD_PCBANG_RENTAL_ITEM)
TPCBANGRENTALITEM,
#endif
#if defined(PRE_ADD_63603)
TITEMUSEINFO,
#endif // PRE_ADD_63603
#if defined( PRE_ADD_EXCHANGE_ENCHANT )
TENCHANTTRANSFER,
#endif
#ifdef PRE_ADD_ITEMCAT_TOOLTIP_INFO
TITEMCATEGORYDESC,
#endif
#if defined(PRE_ADD_TOTAL_LEVEL_SKILL)
TTOTALLEVELSKILL,
TTOTALLEVELLSKILLSLOT,
#endif // PRE_ADD_TOTAL_LEVEL_SKILL
#if defined(PRE_ADD_WEEKLYEVENT)
TWEEKLYEVENT,
#endif // #if defined(PRE_ADD_WEEKLYEVENT)
#if defined( PRE_ADD_PRESET_SKILLTREE )
TSKILLTREE_ADVICE,
#endif // #if defined( PRE_ADD_PRESET_SKILLTREE )
#if defined(PRE_SPECIALBOX)
TKEEPBOXPROVIDEITEM,
#endif // #if defined(PRE_SPECIALBOX)
#if defined( PRE_ADD_SHORTCUT_HELP_DIALOG )
THELPSHORTCUT,
#endif
#ifdef PRE_ADD_JOINGUILD_SUPPORT
TGUILDSUPPORT,
#endif //#ifdef PRE_ADD_JOINGUILD_SUPPORT
#ifdef PRE_ADD_STAGE_DAMAGE_LIMIT
TSTAGEDAMAGELIMIT,
#endif
#if defined(PRE_ADD_REMOTE_QUEST)
TREMOTEQUEST,
#endif
#if defined(PRE_ADD_ACTIVEMISSION)
TACTIVEMISSION,
TACTIVESET,
#endif // PRE_ADD_ACTIVEMISSON
#if defined(PRE_ADD_GETITEM_WITH_RANDOMVALUE)
TCHARMCOUNT,
#endif // #if defined(PRE_ADD_GETITEM_WITH_RANDOMVALUE)
#if defined(PRE_ADD_STAGE_CLEAR_ADD_REWARD)
TBONUSDROP,
#endif // #if defined(PRE_ADD_STAGE_CLEAR_ADD_REWARD)
#if defined( PRE_WORLDCOMBINE_PVP )
TWORLDPVPMISSIONROOM,
#endif
#if defined(PRE_ADD_STAGE_CLEAR_ENCHANT_REWARD)
TDROPITEMENCHANT,
#endif // #if defined(PRE_ADD_STAGE_CLEAR_ENCHANT_REWARD)
#if defined( PRE_ALTEIAWORLD_EXPLORE )
TALTEIAWORLDMAP,
TALTEIARANK,
TALTEIAWEEKREWARD,
TALTEIATIME,
TALTEIAPREVIEWREWARD,
#endif // #if defined( PRE_ALTEIAWORLD_EXPLORE )
#if defined( PRE_ADD_STAMPSYSTEM )
TSTAMPCHALLENGE,
#endif // #if defined( PRE_ADD_STAMPSYSTEM )
#if defined( PRE_ADD_TALISMAN_SYSTEM )
TTALISMANITEM,
TTALISMANSLOT,
#endif // #if defined( PRE_ADD_TALISMAN_SYSTEM )
#if defined( PRE_ADD_DWC )
TDWCCREATETABLE,
#endif // #if defined( PRE_ADD_DWC )
#if defined( PRE_PVP_GAMBLEROOM )
TPVPGAMBLEROOM,
#endif
#ifdef PRE_ADD_ITEM_GAINTABLE
TITEMGAIN,
#endif
#if defined( PRE_ADD_STAGE_WEIGHT )
TSTAGEWEIGHT,
#endif // #if defined( PRE_ADD_STAGE_WEIGHT )
#if defined( PRE_ADD_OVERLAP_SETEFFECT )
TOVERLAPSETEFFECT,
#endif
#ifdef PRE_ADD_LEVELUP_REWARD_NOTIFIER
TLEVELUPCHECKBOX,
#endif
#ifdef PRE_ADD_PVPRANK_INFORM
TPVPRANKREWARD,
#endif
#if defined(PRE_ADD_CHAT_MISSION)
TMISSIONTYPING,
#endif
#ifdef PRE_ADD_CRAZYDUC_UI
TEVENTMONSTER,
#endif
#ifdef PRE_ADD_CASHINVENTAB
TCASHINVENTAB,
#endif / /PRE_ADD_CASHINVENTAB
TREBIRTH,
TREBIRTHREWARD,
TRLKTSETTINGS,
TCHARCREATE,
TPARTSSKINCOMBINE,
TSTAGECLEARDROP,
TDISJOINTINFO, //disjoint item info
TDRAGONJEWELSLOTTABLE,
TDRAGONJEWELTABLE,
};
enum MailTableInfoEnum
{
MailInfoRewardCoin,
MailInfoRewardItemID,
MailInfoRewardItemCount,
};
protected:
void FindExtFileList( const char* szFileName, std::vector<CFileNameString>& szVecList );
std::map<TableEnum, DNTableFileFormat*> m_MapTables;
#ifdef PRE_ADD_REDUCE_TABLE_RESOURCE
DNTableFileFormat* LoadTable( const char *szFileName, std::string strGenerationLabel=std::string(), bool bDontUseItemIDData = true );
#else // PRE_ADD_REDUCE_TABLE_RESOURCE
DNTableFileFormat* LoadTable( const char *szFileName, std::string strGenerationLabel=std::string() );
#endif // PRE_ADD_REDUCE_TABLE_RESOURCE
void UnloadTable(TableEnum Index);
void AddTable(TableEnum Index, DNTableFileFormat *pSox );
void RemoveTable(TableEnum Index);
private:
DNTableFileFormat* ForceLoadSox( const char *szFileName, std::string &szGenerationLabelStr);
DNTableFileFormat* RawLoadSox(const char *szFileName, std::vector<CStream *> &pVecStream);
public:
DNTableFileFormat* GetTable( TableEnum Index );
DNTableFileFormat* ReLoadSox(TableEnum Index);
bool Initialize();
void Finalize();
// FileTable 도움 함수
const char* GetFileName( int nIndex );
int GetMailInfo( int nIndex, MailTableInfoEnum eMailInfo, bool bCashInfo = false, int nInfoIndex = 0 );
#ifdef PRE_ADD_REDUCE_TABLE_RESOURCE
void SetTableFileInfo();
void AddTableFileInfo( TableEnum Index, const char* strFileName, const char* strGenerationLabel = NULL, bool bUseGame = false, bool bDontUseItemIDData = true );
void AddTableByIndex( TableEnum eTableIndex );
void SetTableAutoUnloadForGame( bool bTableUseInGame );
void SetTableAutoUnloadByIndex( TableEnum eTableIndex, float fHoldingTime );
void Process( float fElapsedTime );
private:
struct stFileInfo
{
std::string m_strFileName;
std::string m_strGenerationLabel;
bool m_bUseGame;
bool m_bDontUseItemIDData;
};
std::map<TableEnum, stFileInfo> m_MapTableFileInfo;
bool m_bTableUseInGame;
#endif // PRE_ADD_REDUCE_TABLE_RESOURCE
};
#define GetTableDB() CDnTableDB::GetInstance()
#define GetDNTable(table) CDnTableDB::GetInstance().GetTable( table )
class CPlayerWeightTable : public CSingleton<CPlayerWeightTable> {
public:
CPlayerWeightTable();
virtual ~CPlayerWeightTable();
enum WeightTableIndex {
HP = 0,
SP,
RecoverySP,
StrengthAttack,
AgilityAttack,
IntelligenceAttack,
PhysicalDefense,
MagicDefense,
Critical,
CriticalResistance,
Stiff,
StiffResistance,
Stun,
StunResistance,
MoveSpeed,
MoveSpeedRevision,
DownDelay,
ElementAttack,
ElementDefense,
ElementDefenseMin,
ElementDefenseMax,
SpiritDefault,
SpiritIncreaseRevision,
SpiritDecreaseRevision,
Amount,
};
protected:
float m_fPlayerWeightValue[10][Amount];
public:
float GetValue( int nClassID, WeightTableIndex Index ) { return m_fPlayerWeightValue[nClassID-1][Index]; }
};
#ifdef _GAMESERVER
class CDNGameRoom;
#else
class CDnGameTask;
#endif
class CGlobalWeightTable : public CSingleton<CGlobalWeightTable> {
public:
CGlobalWeightTable();
virtual ~CGlobalWeightTable();
// note by kalliste : 테이블 ID보다 하나 적은 숫자 할당해야 함
enum WeightTableIndex {
CriticalIncrease,
DefenseValue,
CriticalValue,
StiffRevision,
StunRevisioin,
StateRevision,
StageGiveupDurabilityPenalty,
CriticalResistance,
DefenseMax,
CriticalMax,
CriticalResistanceMax,
StiffMax,
StunRevision2,
StunMax,
ScaleWeightValue,
SpiritMax,
ExpPartyBonus,
ExpPenaltyValue1,
ExpPenaltyValue2,
ExpPenaltyMin,
PvPRevision,
RepairDurabilityRevision,
MonsterDeadDurabilityRevision,
EnchantWorldNoticeValue,
DropWorldNoticeValue,
PlayerLevelLimit,
EventToday,
DLRevision,
CostumeMix_MaxStuffCount_KOR,
CostumeMix_MaxStuffCount_JPN,
FinalDamageValue1,
FinalDamageValue2,
FinalDamageValue3,
CharacterSlotMax,
FinalDamageValue4,
CriticalVelocityRevision,
StunVelocityRevision,
DNTVBrowserWidth = 37,
DNTVBrowserHeight = 38,
NxCreditUsableMinLevel = 39,
ElementMinRevision = 40,
// #31367 이슈로 추가됨. 데미지 변경 상태효과 및 공격력 비율 변경 상태효과의 최저값 셋팅됨.
AttackPowerClampLowestRatio = 41,
DamageChangeClampLowestRatio = 42,
MarketRegisterTime_Min = 49,
MarketRegisterTime0 = MarketRegisterTime_Min, // [거래소_무료시간0]
MarketRegisterTime1 = 50, // [거래소 유료시간 1]
MarketRegisterTime2 = 51,
MarketRegisterTime3 = 52,
MarketRegisterTime4 = 53,
MarketRegisterTime5 = 54,
MarketRegisterTime6 = 55,
MarketRegisterTime7 = 56,
MarketRegisterTime8 = 57,
MarketRegisterTime9 = 58,
MarketRegisterTime_Max = MarketRegisterTime9,
MarketItemRegisterCount_Basic = 59,
MarketRegisterCount_Basic = 60,
CoolTimeAccellSE_Max = 61,
DailyMailCount = 69,
PlayerAbsenceTime = 70,
PartyLeaderAbsenceTime = 71,
MaxLevelExpTransGoldValue = 75,
CharmItemEmptySlotCount = 77,
CharmItemOpenTime = 78,
MasterSystem_MasterMinLevel = 81,
MasterSystem_PupilMaxLevel = 82,
MasterSystem_GraduateLevel = 83,
MasterSystem_ClassmateCountExpBonusRate = 84,
MasterSystem_TreasureBoxBonusRate = 85,
MasterSystem_MasterCountExpBonusRate = 86,
CharmItempDisplayDelayTime = 87, //매력 아이템 표시 간격 시간 설정
CostumeRandomMixPreviewChangePartsTime = 88,
MarketPremiumTime_Min = 89,
MarketPremiumTime0 = MarketPremiumTime_Min,
MarketPremiumTime1 = 90,
MarketPremiumTime2 = 91,
MarketPremiumTime3 = 92,
MarketPremiumTime4 = 93,
MarketPremiumTime5 = 94,
MarketPremiumTime6 = 95,
MarketPremiumTime7 = 96,
MarketPremiumTime8 = 97,
MarketPremiumTime9 = 98,
MarketPremiumTime_Max = MarketPremiumTime9,
PvPLevelWeight = 99,
LevelWeight = 100,
DefenseConstant = 200,
CriticalConstant = 201,
FinalDamageConstant = 202,
CriticalIncrease_PVP = 203,
StiffMax_PVP = 204,
DWC_DefenseConstant = 205,
DWC_CriticalConstant = 206,
DWC_FinalDamageConstant = 207,
#if defined(PRE_ADD_DRAGON_FELLOWSHIP_GLYPH)
DragonFellowShipGlyph = 249,
#endif //#if defined(PRE_ADD_DRAGON_FELLOWSHIP_GLYPH)
#ifdef PRE_MOD_ITEM_COMPOUND_DIALOG_RENEWAL
CompoundLimitMaxLevel = 250,
#endif
FarmChatRoomDistance = 303,
FarmChatBalloonDistance = 304,
PartyMarkerDistance = 349,
FatigueLimit = 400,
ShutDownSystemStartTime = 401,
ShutDownSystemEndTime = 402,
ShutDownSystemLimitAge = 403,
PotentialMovealbleCount = 404,
AllGiveCharmItemOpenTime = 405,
ExpUpItem = 406, // 경험치 증가 아이템(절댓값)
PvPExpUpItem = 407, // 콜로세움 경험치 증가 아이템 사용 횟수
#if defined( PRE_PVP_GAMBLEROOM )
PvPGambleFirstWinnerRate = 408, // 도박모드 우승자 상금 비율
PvPGambleSecondWinnerRate = 409, // 도박모드 준우승자 상금 비율
PvPGambleCumulativeRate = 410, // 도박모드 적립금 비율
PvPGambleRoomMaxCount = 411, // 도박모드 최대 생성갯수
#endif
RangeFallGravityAdditionalProjectileRange = 499, // #36693 RangeFallGravity 로 DestroyOrbit 이 셋팅된 발사체인 경우 주어질 추가 사거리 값.
MonsterElementMinRevision = 500, //몬스터 속성 방어 최소 수치
Element_Attack_Min = 501, // PlayerState
Element_Attack_Max = 502, // PlayerState
Element_Defense_Min = 503, // PlayerState + MonsterState
Element_Defense_Max = 504, // PlayerState + MonsterState
Physical_AttackRatio_Min = 505, // PlayerState
Physical_AttackRatio_Max = 506, // PlayerState
Magical_AttackRatio_Min = 507, // PlayerState
Magical_AttackRatio_Max = 508, // PlayerState
Freezing_AddDamageRatio = 509, // 상태효과 제어
Freezing_AdddamageRatio_Max = 510, // 상태효과 제어
Change_DamageTaken_Physical_Min = 511, // Player // 상태효과 제어
Change_DamageTaken_Physical_Max = 512, // Monster // 상태효과 제어
Change_DamageTaken_Magical_Min = 513, // Player // 상태효과 제어
Change_DamageTaken_Magical_Max = 514, // Monster // 상태효과 제어
Element_EqualBasis = 515, // Element 보정 값 , 기존 Level / Basis 값을 쓰는 값들과 달리 Element는 고정형으로 사용한다 = < 기획에서 정함 >
Element_EqualLevel = 516, // Element 보정 값 , 기존 Level / Basis 값을 쓰는 값들과 달리 Element는 고정형으로 사용한다 = < 기획에서 정함 >
Element_Expotent_Limit = 517, // Element 보정영향 받지않는 최소치를 정하기로 기획팀에서 정함
Strength_Ratio_Max = 518,
Strength_Ratio_Min = 519,
Agility_Ratio_Max = 520,
Agility_Ratio_Min = 521,
Intelligence_Ratio_Max = 522,
Intelligence_Ratio_Min = 523,
Stamina_Ratio_Max = 524,
Stamina_Ratio_Min = 525,
Element_Defense_Limit = 526,
Chalange_DarkLair_Heal_Limit = 527,
MoveSpeedRatio_Limit_Max = 528,
MoveSpeedRatio_Limit_Min = 529,
FrameSpeedRatio_Limit_Max = 530,
FrameSpeedRatio_Limit_Min = 531,
Freezing_AddDamageRatio_PVP = 532,
Freezing_AdddamageRatio_PVP_Max = 533,
PvPLadder_LimitLevel = 999,
PvPLadder_ForceMatchingSec = 1000,
PvPLadder_RegularSeason = 1001,
PvPLadder_IncreaseHiddenPointPerSec = 1002,
PvPLadder_SectionRange= 1003,
PvPLadder_MinSampleCount = 1004,
LimitLevel_SendMail = 1005,
LimitLevel_Market = 1006,
LimitLevel_Exchange = 1007,
LimitLevel_MasterSystem = 1008,
Disjoint_ItemLimitLevel = 1010,
Disjoint_LimitUserLevel = 1011,
Shop_Repurchase_Fee = 1012,
GuildWar_Rank_Blind = 1013,
PvPLadder_LimitPoint = 1014,
GuildWarMission_LevelLimit = 1015,
GuildWarMission_Rate = 1016,
FatigueDropItemPenalty_Rate = 1017,
Colosseum_Limit_Rank = 1018,
Login_Title_MapIndex = 1019,
Login_Char_MapIndex = 1020,
Login_Max_CreateCharCount = 1021,
Login_Base_CreateCharCount = 1022,
BestFriend_CloseMail = 1023,
BeginnerGuild_GraduateLevel = 1024,
BeginnerGuild_UserMax = 1025, // 초보자길드 제한인원 (현재 클라이언트에서는 미사용)
BeginnerGuild_MailIndex = 1026, // 초보자길드 가입 보상 관련 메일 인덱스 (현재 클라이언트에서는 미사용)
Login_Gesture1 = 1027,
Login_Gesture2 = 1028,
Login_Gesture3 = 1029,
Login_Gesture4 = 1030,
Login_Gesture5 = 1031,
DoorsMobile_AuthRefreshSec = 1032,
ITEMUPGRADE_COOLTIME_NOMAL_MAGIC_ITEM = 1033,
ITEMUPGRADE_COOLTIME_RARE_EPIC_ITEM = 1034,
ITEMUPGRADE_COOLTIME_ABOVE_UNIQUE = 1035,
Skill_ResetComment_Level = 1036,
MasterSystem_MasterAndPupilAllowLevelGap = 1037,
WorldMessageRedCoolTime = 1038,
MissionHelper_AutoRegisterLevel = 1042,
ItemUnLockWaitTime = 1043, // 아이템 잠금 해제 대기 시간
DragonBuffWaitTime = 1044, // 드래곤버프퀘스트 대기 시간
SERVER_WAREHOUSE_POPUP = 1099, // 템 꺼낼때 확인창 출력여부(0-출력x, 1-출력)
SERVER_WAREHOUSE_INVENCOUNT = 1100, // 기본 서버 일반창고 제공칸수
SERVER_WAREHOUSE_CASHCOUNT = 1101, // 기본 서버 캐쉬창고 제공칸수
SERVER_WAREHOUSE_PAYMENT = 1102, // 사용할 유료화 타입(0-무료(수수료), 1=코인소모)
SERVER_WAREHOUSE_IN_LEVELLIMIT = 1103, // 창고에 아이템 넣을때 레벨 제한
SERVER_WAREHOUSE_OUT_LEVELLIMIT = 1104, // 창고에 아이템 꺼낼때 레벨 제한
AlteiaWorldDailyPlayCount = 1105, // 알테이아 일일 플레이횟수
AlteiaWorldJoinTicketCount = 1106, // 알테이아 입장시 필요한 입장권수
AlteiaWorldSendTicketCount = 1107, // 알테이아 보낼수 있는 입장권수
AlteiaWorldDailyTicketCount = 1108, // 알테이아 일일 지급 입장권수
AlteiaWorldEnterLimitStartTime = 1109, // 알테이아 진입금지 시작시간(분)
AlteiaWorldEnterLimitEndTime = 1110, // 알테이아 진입금지 끝시간(분)
AlteiaWorldEnterLimitLevel = 1111, // 알테이아 입장 가능 레벨
AlteiaWorldAutoDiceTimer = 1112, // 알테이아 자동 주사위 굴림 타이머
Amount = 1200,
};
protected:
float m_fGlobalWeightValue[Amount];
public:
float GetValue( WeightTableIndex Index );
};
class CGlobalWeightIntTable : public CSingleton<CGlobalWeightIntTable> {
public:
CGlobalWeightIntTable();
virtual ~CGlobalWeightIntTable();
// note by kalliste : 테이블 ID보다 하나 적은 숫자 할당해야 함
enum WeightTableIndex {
AlteiaWorldBuffItemID = 99,
AlteiaWorldGoldKeyItemID = 100,
CheckInvenCountBasis = 9999,
InvenCountUnderBasis = 10000,
InvenCountOverBasis = 10001,
WareCountUnderBasis = 10002,
WareCountOverBasis = 10003,
CharmItemEmptyCoinAmount = 10004,
ComebackGiveTerm = 10005,
CadgeMaxCountOneDay = 10006,
ChaosCubeEmptySlotCount = 10007,
ComebackEffectItemID = 10008,
NewbieRewardTime = 10010,
MaxSeedPoint = 10011, // 시드최대크기(귀속화폐)
Amount = 10100,
};
protected:
int m_nGlobalWeightValue[Amount];
public:
int GetValue( WeightTableIndex Index );
};
class CPlayerLevelTable : public CSingleton<CPlayerLevelTable> {
public:
CPlayerLevelTable();
virtual ~CPlayerLevelTable();
enum PlayerLevelTableIndex {
Strength,
Agility,
Intelligence,
Stamina,
Experience,
SuperAmmor,
SkillPoint,
Fatigue,
DeadDurabilityRatio,
KillScore,
AssistScore,
AssistDecision,
AggroPer,
WeekFatigue,
SPDecreaseRatio,
#ifdef PRE_MONITOR_SUPER_NOTE
IllegalAmount,
BanAmount,
#endif
AggroPerPvE,
#if defined(PRE_ADD_VIP)
VIPFatigue,
VIPExp,
#endif // #if defined(PRE_ADD_VIP)
LevelDExp, // 피로도 소모를 통한 하루 습득 경험치.
Amount,
};
protected:
struct LevelValue {
union {
int nValue[Amount];
float fValue[Amount];
};
};
std::map<int, LevelValue *> m_nMapTable;
public:
int GetValue( int nClassID, int nLevel, PlayerLevelTableIndex Index );
float GetValueFloat( int nClassID, int nLevel, PlayerLevelTableIndex Index );
};
#define GetPlayerLevelTable() CPlayerLevelTable::GetInstance()
class CEqualLevelTable : public CSingleton<CEqualLevelTable> {
public:
CEqualLevelTable();
virtual ~CEqualLevelTable();
enum EqualLevelTableIndex {
PhysicalAttackMinRevision,
PhysicalAttackMaxRevision,
MagicAttackMinRevision,
MagicAttackMaxRevision,
PhysicalDefenseRevision,
MagicDefenseRevision,
MaxHPRevision,
MaxSPRevision,
RecoverySPRevision,
StiffRevision,
StiffResistanceRevision,
CriticalRevision,
CriticalResistanceRevision,
StunRevision,
StunResistanceRevision,
SuperAmmorRevision,
MoveSpeedRevision,
ElementAttackRevision,
ElementDefenseRevision,
FinalDamageRevision,
StrengthRevision,
AgilityRevision,
IntelligenceRevision,
StaminaRevision,
Amount,
};
protected:
struct LevelValue {
union {
int nValue[Amount];
float fValue[Amount];
};
};
int m_iMaxMode;
std::map<int, LevelValue *>* m_pMapTable;
public:
// int GetValue( int nClassID, EqualLevelTableIndex Index );
int GetValue( int nMode, int nJobID, EqualLevelTableIndex Index );
float GetValueFloat( int nMode, int nJobID, EqualLevelTableIndex Index );
};
class CEqualBasisTable : public CSingleton<CEqualBasisTable> {
public:
CEqualBasisTable();
virtual ~CEqualBasisTable();
enum EqualBasisTableIndex {
PhysicalAttackMinRevision,
PhysicalAttackMaxRevision,
MagicAttackMinRevision,
MagicAttackMaxRevision,
PhysicalDefenseRevision,
MagicDefenseRevision,
MaxHPRevision,
MaxSPRevision,
RecoverySPRevision,
StiffRevision,
StiffResistanceRevision,
CriticalRevision,
CriticalResistanceRevision,
StunRevision,
StunResistanceRevision,
SuperAmmorRevision,
MoveSpeedRevision,
FinalDamageRevision,
ElementAttackRevision,
ElementDefenseRevision,
StrengthRevision,
AgilityRevision,
IntelligenceRevision,
StaminaRevision,
Amount,
};
protected:
struct LevelValue {
int nValue[Amount];
};
std::map<int, LevelValue *> m_nMapTable;
public:
int GetValue( int nClassID, int nLevel, EqualBasisTableIndex Index );
};
class CFatigueAdjustmentTable : public CSingleton<CFatigueAdjustmentTable> {
public:
CFatigueAdjustmentTable();
virtual ~CFatigueAdjustmentTable();
protected:
std::vector<float*> m_fVecValue;
public:
float GetValue( int nPartyCount, int nStageConstructionLevel );
};
#ifdef PRE_ADD_VIP
class CVIPGradeTable : public CSingleton<CVIPGradeTable>
{
public:
struct SVIPGradeUnit
{
int level;
int nameUIStringID;
int ptsMin;
int ptsMax;
SVIPGradeUnit()
{
level =
nameUIStringID =
ptsMin =
ptsMax = 0;
}
};
CVIPGradeTable();
virtual ~CVIPGradeTable() {}
protected:
std::vector<SVIPGradeUnit> m_VIPGradeList;
public:
const SVIPGradeUnit* GetValue(int pts) const;
};
#endif // PRE_ADD_VIP
class CEqualExponentTable : public CSingleton<CEqualExponentTable> {
public:
CEqualExponentTable();
virtual ~CEqualExponentTable();
enum EqualExponentTableIndex {
PhysicalAttackMinRevision,
PhysicalAttackMaxRevision,
MagicAttackMinRevision,
MagicAttackMaxRevision,
PhysicalDefenseRevision,
MagicDefenseRevision,
MaxHPRevision,
MaxSPRevision,
RecoverySPRevision,
StiffRevision,
StiffResistanceRevision,
CriticalRevision,
CriticalResistanceRevision,
StunRevision,
StunResistanceRevision,
SuperAmmorRevision,
MoveSpeedRevision,
ElementAttackRevision,
ElementDefenseRevision,
FinalDamageRevision,
StrengthRevision,
AgilityRevision,
IntelligenceRevision,
StaminaRevision,
Amount,
};
protected:
struct ModeValue {
float fValue[Amount];
};
std::vector<ModeValue> m_VecTable;
public:
float GetValue( int nMode, EqualExponentTableIndex Index );
};
namespace GuildReward
{
enum GuildRewardType
{
NONE = 0,
GUILDITEM = 1, // 치장형아이템
MAKE_GUILDMARK = 2, // 길드마크제작
MAX_GUILDWARE = 3, // 길드창고슬롯증가
MAX_MEMBER = 4, // 길드원수제한증가
EXTRA_EXP = 5, // 추가경험치
EXTRA_PVPEXP = 6, // 추가콜로세움경험치
EXTRA_FESTPOINT = 7, // 추가길드축제포인트
GUILDWARE_GOLD = 8, // 사냥종료 후 길드창고에 골드 입금
EXTRA_UNIONPOINT = 9, // 추가연합포인트
MOVE_SPEED = 10, // 안전지역 이동속도증가
VEHICLE_SPEED = 11, // 탈 것 이동속도 증가
REDUCE_DURABILITYRATIO = 12, // 내구도 소모 비율 감소
GUILD_GESTURE = 13, // 길드 제스처
#if defined( PRE_ADD_GUILDREWARDITEM )
GUILD_ADDSKILL1 = 14, // 스킬1
GUILD_ADDSKILL2 = 15, // 스킬2
GUILD_ADDSKILL3 = 16, // 스킬3
GUILD_ADDSKILL4 = 17, // 스킬4
#endif
MAX_COUNT,
};
enum GuildRewardPrerequisiteType
{
PrerequisiteType_NONE = 0,
PrerequisiteType_REWARDID,
PrerequisiteType_GUILDMARK,
};
struct GuildRewardInfo
{
int ID;
int _NameID;
int _DescriptionID;
std::string _NameIDParam;
std::string _DescriptionIDParam;
int _TooltipItemID;
int _NeedGold;
int _NeedGuildLevel;
int _Type;
int _TypeParam1;
int _TypeParam2;
int _Period;
bool _GuildMasterLimit;
bool _IsApplicable;
int _PrerequisiteType;
int _PrerequisiteID;
int _NeedJobClass;
bool _CheckInven; //구입시 캐시인벤토리에 TypeParam1의 아이템이 있으면 구입 안됨.
GuildRewardInfo()
{
ID = -1;
_NameID = -1;
_DescriptionID = -1;
_NameIDParam = "";
_DescriptionIDParam = "";
_TooltipItemID = -1;
_NeedGold = 0;
_NeedGuildLevel = 0;
_Type = GuildRewardType::NONE;
_TypeParam1 = 0;
_TypeParam2 = 0;
_Period = 0;
_GuildMasterLimit = false;
_IsApplicable = false;
_PrerequisiteType = 0;
_PrerequisiteID = -1;
_NeedJobClass = -1;
_CheckInven = false;
}
bool IsFunctionality()
{
return (_Type != GUILDITEM);
}
GuildRewardInfo& operator= (const GuildRewardInfo& rValue)
{
ID = rValue.ID;
_NameID = rValue._NameID;
_DescriptionID = rValue._DescriptionID;
_NameIDParam = rValue._NameIDParam;
_DescriptionIDParam = rValue._DescriptionIDParam;
_TooltipItemID = rValue._TooltipItemID;
_NeedGold = rValue._NeedGold;
_NeedGuildLevel = rValue._NeedGuildLevel;
_Type = rValue._Type;
_TypeParam1 = rValue._TypeParam1;
_TypeParam2 = rValue._TypeParam2;
_Period = rValue._Period;
_GuildMasterLimit = rValue._GuildMasterLimit;
_IsApplicable = rValue._IsApplicable;
_PrerequisiteType = rValue._PrerequisiteType;
_PrerequisiteID = rValue._PrerequisiteID;
_NeedJobClass = rValue._NeedJobClass;
_CheckInven = rValue._CheckInven;
return(*this);
}
};
}
class CGuildRewardTable : public CSingleton<CGuildRewardTable> {
public:
typedef std::map<int, GuildReward::GuildRewardInfo> GUILDREWARD_LIST;
CGuildRewardTable();
virtual ~CGuildRewardTable();
protected:
GUILDREWARD_LIST m_GuildRewardList;
public:
bool AddGuildRewardInfo(int nID, const GuildReward::GuildRewardInfo& info);
GuildReward::GuildRewardInfo* GetGuildRewardInfo(int nID);
GUILDREWARD_LIST& GetGuildRewardList() { return m_GuildRewardList; }
};
#if defined(PRE_FIX_NEXTSKILLINFO)
typedef std::map<int, int> SKILL_LEVEL_TABLE_IDS;
struct SKILL_LEVEL_INFO
{
int _MinLevel;
int _MaxLevel;
SKILL_LEVEL_TABLE_IDS _SkillLevelTableIDs;
SKILL_LEVEL_INFO()
{
_MinLevel = 0;
_MaxLevel = 0;
}
void AddSkillLevelTableID(int nLevel, int nTableID)
{
if (_SkillLevelTableIDs.insert(std::make_pair(nLevel, nTableID)).second == true)
UpdateMinMaxLevelInfo();
}
void UpdateMinMaxLevelInfo()
{
int nTempMinLevel = 999;
int nTempMaxLevel = -1;
SKILL_LEVEL_TABLE_IDS::iterator iter = _SkillLevelTableIDs.begin();
SKILL_LEVEL_TABLE_IDS::iterator endIter = _SkillLevelTableIDs.end();
for( ; iter != endIter; ++iter)
{
int iSkillLevel = iter->first;
//최대/최소 스킬 레벨 설정..
if (nTempMinLevel > iSkillLevel)
nTempMinLevel = iSkillLevel;
if (nTempMaxLevel < iSkillLevel)
nTempMaxLevel = iSkillLevel;
}
if (nTempMinLevel != 999)
_MinLevel = nTempMinLevel;
if (nTempMinLevel != -1)
_MaxLevel = nTempMaxLevel;
}
};
typedef std::map<int, SKILL_LEVEL_INFO> SKILL_LEVEL_TABLEID_LIST;
#endif // PRE_FIX_NEXTSKILLINFO
#ifdef PRE_ADD_ITEMCAT_TOOLTIP_INFO
class CItemCategoryInfo : public CSingleton<CItemCategoryInfo>
{
public:
CItemCategoryInfo();
int GetDescIndex(int itemCategoryType) const;
private:
std::map<int, int> m_ItemCategoryInfo; // key : _ItemCategoryType, data : UISTRING index
};
#endif // PRE_ADD_ITEMCAT_TOOLTIP_INFO
//rlkt_ok!
class CPartsSkinCombineTable : public CSingleton<CPartsSkinCombineTable> {
public:
CPartsSkinCombineTable();
virtual ~CPartsSkinCombineTable();
protected:
struct SkinValue {
int nSkinIndex;
int nClassID;
int nSkinID;
};
std::map<int, SkinValue *> m_nMapTable;
public:
int GetValue(int nSkinIndex, int nClassID);
};
class CStageDropTable : public CSingleton<CStageDropTable> {
public:
CStageDropTable();
virtual ~CStageDropTable();
protected:
struct DropValue {
int _StageClearDropId;
int _MinLevel;
int _MaxLevel;
int _Job;
int _DropID;
};
std::map<int, DropValue *> m_nMapTable;
public:
int GetValue(int nDropIndex, int nLevel, int nJob);
};
class CDisjointInfoTable : public CSingleton<CDisjointInfoTable> {
public:
CDisjointInfoTable();
virtual ~CDisjointInfoTable();
protected:
struct DisjointorInfo {
int _EnchantLevel;
int _DisjointDrop;
int _ItemID[20];
};
std::map<int, DisjointorInfo *> m_nMapTable;
public:
std::vector<int> GetValue(int nDisjointID, int nItemLevel);
};
class CDragonJewelSlotTable : public CSingleton<CDragonJewelSlotTable> {
public:
CDragonJewelSlotTable();
virtual ~CDragonJewelSlotTable();
protected:
struct DragonJewelSlotInfo {
int JewelType;
float SuccessRatio;
int SlotType[4];
int Enhanced;
};
std::map<int, DragonJewelSlotInfo *> m_nMapTable;
public:
std::vector<int> GetValue(int nJewelType);
};