2024-12-21 10:04:04 +08:00
# pragma once
# include "DNDataManagerBase.h"
# include "DNTableFile.h"
# if defined(_LOGINSERVER)
# define FLAG_NICK_EQUAL 0
# define FLAG_NICK_INCLUDE 1
# define PROHIBITWORDMAX 64
struct ProhibitWordInfo
{
unsigned int nFlag ;
wchar_t szNick [ PROHIBITWORDMAX ] ;
} ;
# endif // _LOGINSERVER
enum GlobalWeightTableIndex // village, game<6D> <65> DnTableDB.h<> <68> <20> ֱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> serverdef<65> <66> <EFBFBD> ٴ<EFBFBD> <20> ̰<EFBFBD> <CCB0> <EFBFBD> <20> Űܳ<C5B0> <DCB3> <EFBFBD>
{
CharacterSlotMax = 34 , // 34: ij<> <C4B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
CHARACTERNAME_MAXLENGTH = 1010 , //GlobalWeightTable<6C> <65> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <E2B6A7> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> <CEB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
PVPCHANNEL_LIMITLEVEL = 1018 , //GlobalWeightTable<6C> <65> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <E2B6A7> <EFBFBD> <EFBFBD> <20> ε<EFBFBD> <CEB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
Login_Max_CreateCharCount = 1022 , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <D6B4> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ij<> <C4B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> (GlobalWeight 1022)
Login_Base_CreateCharCount = 1023 , // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ⺻<EFBFBD> <E2BABB> <EFBFBD> <EFBFBD> ij<> <C4B3> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> (GlobalWeight 1023)
BeginnerGuild_UserMax = 1026 , // <20> ʺ<EFBFBD> <CABA> ڱ<EFBFBD> <DAB1> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ο <EFBFBD> 1026
BeginnerGuild_GiftMailID = 1027 , // <20> ʺ<EFBFBD> <CABA> ڱ<EFBFBD> <DAB1> <EFBFBD> <20> <> <EFBFBD> Լ<EFBFBD> <D4BC> <EFBFBD> 1027
MasterSystem_MasterAndPupilAllowLevelGap = 1038 // 1038 <09> <> <EFBFBD> <EFBFBD> <EFBFBD> ý<EFBFBD> <C3BD> <EFBFBD> _<EFBFBD> <5F> <EFBFBD> °<EFBFBD> <C2B0> <EFBFBD> <EFBFBD> ڷ<EFBFBD> <DAB7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
} ;
enum GlobalWeightIntTableIndex // village, game<6D> <65> DnTableDB.h<> <68> <20> ֱ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> serverdef<65> <66> <EFBFBD> ٴ<EFBFBD> <20> ̰<EFBFBD> <CCB0> <EFBFBD> <20> Űܳ<C5B0> <DCB3> <EFBFBD>
{
ComebackTerm_Day = 10006 ,
ComebackEffectItemID_Login = 10009 ,
SpecialBoxKeepPeriod = 10010 ,
NewbieReConnectReward_Hour = 10011 ,
} ;
class CDNExtManager
# if defined(_LOGINSERVER) || defined(_MASTERSERVER)
: public CDNDataManagerBase
# endif // #if defined(_LOGINSERVER) || defined(_MASTERSERVER)
{
private :
typedef map < int , TMapInfo * > TMapInfoMap ;
TMapInfoMap m_pMapInfo ;
typedef map < int , TPCBangData * > TMapPCBangData ;
TMapPCBangData m_pPCBangData ;
typedef map < BYTE , TDefaultCreateData * > TMapDefaultCreate ; // first: ClassID
TMapDefaultCreate m_pMapDefaultCreate ;
typedef map < int , int > TNewCharCreate ;
TNewCharCreate m_pMapNewCharCreate ;
# if defined( PRE_ADD_DWC )
typedef map < BYTE , TDWCCreateData * > TMapDWCCreate ; // first: JobCode
TMapDWCCreate m_pMapDWCCreate ;
# endif // #if defined( PRE_ADD_DWC )
typedef map < int , TSkillData * > TMapSkillData ; // <20> ⺻<EFBFBD> <E2BABB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> unlock <20> <> <20> <> ų<EFBFBD> <C5B3> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ų <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> 0<> <30> <EFBFBD> <EFBFBD> <20> ־<EFBFBD> <D6BE> <EFBFBD> .
TMapSkillData m_pMapSkillData ;
map < int , vector < TSkillData * > > m_mapDefaultUnlockSkillsByClass ;
typedef map < BYTE , TCoinCountData * > TMapCoinCount ; // first: Level
TMapCoinCount m_pMapCoinCount ;
typedef map < int , TLevelData * > TMapLevelData ;
TMapLevelData m_pLevelData ;
# if defined(_LOGINSERVER)
typedef std : : map < unsigned int , std : : wstring > TProhibitWord ;
# if defined(PRE_ADD_MULTILANGUAGE)
std : : map < int , TProhibitWord > m_ProhibitWordList ;
# else //#if defined(PRE_ADD_MULTILANGUAGE)
TProhibitWord m_ProhibitWordList ;
# endif //#if defined(PRE_ADD_MULTILANGUAGE)
# endif // #if defined(_LOGINSERVER)
typedef map < int , TWeaponData * > TMapWeaponData ;
TMapWeaponData m_pWeaponData ;
typedef map < int , TPartData * > TMapPartData ;
TMapPartData m_pPartData ;
typedef map < UINT , TPvPGameStartConditionTable * > TPvPGameStartConditionData ;
TPvPGameStartConditionData m_PvPGameStartConditionTable ;
typedef map < UINT , TSchedule > TScheduleData ;
TScheduleData m_ScheduleTable ;
typedef map < UINT , TPvPGameModeTable > TPvPGameModeTableData ;
TPvPGameModeTableData m_PvPGameModeTable ;
std : : map < LadderSystem : : MatchType : : eCode , std : : vector < int > > m_MatchTypePvPGameModeID ;
typedef map < UINT , TPvPMapTable * > TPvPMapTableData ;
TPvPMapTableData m_PvPMapTable ;
typedef map < char , TGuildWarMapInfo > TGuildWarMapInfoData ;
TGuildWarMapInfoData m_GuildWarMapInfo ;
typedef map < int , TMailTableData > TMapMailTableData ;
TMapMailTableData m_MailTableData ;
std : : vector < TGuildWarRewardData * > m_pGuildWarRewardData ;
typedef map < int , TJobTableData > TMapJobTableData ;
TMapJobTableData m_JobTableData ;
typedef map < int , TCashCommodityData * > TMapCashCommodity ; // first: ItemSN
TMapCashCommodity m_pMapCashCommodity ;
typedef map < int , TCashPackageData * > TMapCashPackage ; // first: ItemSN
TMapCashPackage m_pMapCashPackage ;
typedef map < int , TCashLimitData * > TMapCashLimit ; // first: ItemSN
TMapCashLimit m_pMapCashLimit ;
typedef map < int , TVehicleData > TMapVehicleData ; // first: ItemID
TMapVehicleData m_MapVehicle ;
typedef map < int , TVehiclePartsData > TMapVehicleParts ; // first: ItemID
TMapVehicleParts m_MapVehicleParts ;
typedef map < int , TItemData * > TMapItemData ;
TMapItemData m_pItemData ;
typedef map < int , TGlobalWeightData * > TMapGlobalWeight ; // first: ID
TMapGlobalWeight m_pMapGlobalWeight ;
typedef map < int , TGlobalWeightIntData * > TMapGlobalWeightInt ; // first: ID
TMapGlobalWeightInt m_pMapGlobalWeightInt ;
CSyncLock m_Sync ; //m_pMapCashCommodity<74> <79> m_pMapCashPackage<67> <65> ȣ
bool LoadCashCommodity ( bool bReload = false ) ;
bool LoadCashPackage ( bool bReload = false ) ;
bool LoadCashLimit ( ) ;
bool LoadItemData ( ) ;
bool LoadPlayerLevel ( ) ;
bool LoadGlobalWeight ( ) ;
bool LoadGlobalWeightInt ( ) ;
// VehicleTable
bool LoadVehicleData ( ) ;
// VehiclePartsTable
bool LoadVehiclePartsData ( ) ;
bool LoadPvPGameStartConditionTable ( ) ;
bool LoadScheduleTable ( ) ;
bool LoadPvPGameModeTable ( ) ;
bool LoadGuildWarMapInfoTable ( ) ;
bool LoadPvPMapTable ( ) ;
bool LoadMailTableData ( ) ;
bool LoadGuildWarRewardData ( ) ;
bool LoadJobTableData ( ) ;
unsigned int MemoryToRSHashKey ( const wchar_t * pszData , long nSize ) ;
void FindExtFileList ( const char * szFileName , std : : vector < std : : string > & szVecList ) ;
DNTableFileFormat * LoadExtTable ( const char * szFileName ) ;
public :
struct PlayerLevelTableIndex {
enum ePlayerLevelTableIndex {
Strength ,
Agility ,
Intelligence ,
Stamina ,
Experience ,
SuperAmmor ,
SkillPoint ,
Fatigue ,
DeadDurabilityRatio ,
KillScore ,
AssistScore ,
AssistDecision ,
AggroPer ,
WeekFatigue ,
SPDecreaseRatio ,
Amount ,
} ;
} ;
protected :
struct LevelValue {
union {
int nValue [ PlayerLevelTableIndex : : Amount ] ;
float fValue [ PlayerLevelTableIndex : : Amount ] ;
} ;
} ;
std : : map < int , LevelValue * > m_nMapTable ;
public :
CDNExtManager ( void ) ;
~ CDNExtManager ( void ) ;
bool AllLoad ( ) ;
int GetValue ( int nClassID , int nLevel , PlayerLevelTableIndex : : ePlayerLevelTableIndex Index ) ;
float GetValueFloat ( int nClassID , int nLevel , PlayerLevelTableIndex : : ePlayerLevelTableIndex Index ) ;
TPvPGameStartConditionTable * GetPvPGameStartConditionTable ( const UINT uiMaxUser ) ;
TSchedule * GetSchedule ( int nSchedule ) ;
const TPvPGameModeTable * GetPvPGameModeTableByMatchType ( LadderSystem : : MatchType : : eCode MatchType ) ;
UINT GetGuildWarMapInfoID ( char cMonth ) ;
const TPvPMapTable * GetPvPMapTable ( const int nItemID ) ;
const TPvPGameModeTable * GetPvPGameModeTable ( const int nItemID ) ;
bool LoadMapInfo ( ) ;
//MapInfo
int GetMapIndexByGateNo ( int nMapIndex , int nGateNo , int nSelect = 0 ) ;
int GetGateNoByGateNo ( int nMapIndex , int nGateNo , int nSelect = 0 ) ;
GlobalEnum : : eMapTypeEnum GetMapType ( int nMapIndex ) ;
const char * GetMapName ( int nMapIdx ) ;
# if defined(_LOGINSERVER) || defined(_MASTERSERVER)
void SetOnOffServerInfo ( char cWorldSetID , bool bOnline ) ;
int GetWorldID ( ) ;
WCHAR * GetWorldName ( int nWorldID ) ;
bool GetLocalIp ( OUT std : : vector < std : : string > & Out ) ;
# endif // #if defined(_LOGINSERVER) || defined(_MASTERSERVER)
# if defined(_LOGINSERVER)
void GetChannelListByMapIndex ( char cWorldID , int nMapIndex , int nLastMapIndex , sChannelInfo * ChannelArray , BYTE & cCount , TMapChannel * ChannelList ) ;
void GetServerList ( TServerListData * ServerList , BYTE & cCount , bool DenyWorld = false ) ;
// DefaultCreateData
bool LoadDefaultCreateData ( ) ;
bool LoadSkillData ( ) ;
TDefaultCreateData * GetDefaultCreateData ( BYTE cClassID ) ;
TDefaultCreateData * GetDefaultCreateData_2 ( BYTE cClassID ) ;
// TDefaultCreateData* GetDefaultCreateData(BYTE cClassID,bool bIsDarkClass);
int GetCreateDefaultItem ( BYTE cClassID , TCreateCharacterItem * CreateItemArray ) ;
bool IsDefaultParts ( BYTE cClassID , char cEquipType , int nPartID ) ;
bool IsDefaultHairColor ( BYTE cClassID , DWORD dwColor ) ;
bool IsDefaultSkinColor ( BYTE cClassID , DWORD dwColor ) ;
bool IsDefaultEyeColor ( BYTE cClassID , DWORD dwColor ) ;
bool GetCreateDefaultPosition ( BYTE cClassID , int & nPosX , int & nPosY ) ;
bool GetCreateDefaultMapInfo ( BYTE cClassID , int & nMapIndex , int & nTutorialMapIndex , char & cTutorialGateNo ) ;
bool GetCreateDefaultSkill ( BYTE cClassID , int * CreateSkillArray ) ;
bool GetCreateDefaultQuickSlot ( BYTE cClassID , TQuickSlot * QuickSlotArray ) ;
bool GetCreateDefaultGesture ( BYTE cClassID , int * CreateGestureArr ) ;
bool GetCreateDefaultUnlockSkill ( BYTE cClassID , int * CreateUnlockSkillArray ) ;
//rlkt_dark
bool GetCreateDarkSecondClassID ( BYTE cClassID , int & ClassID ) ;
// DefaultCreateData
# if defined( PRE_ADD_DWC )
bool LoadDWCCreateData ( ) ;
TDWCCreateData * GetDWCCreateData ( BYTE cJobCode ) ;
int GetCreateDWCItem ( BYTE cJobCode , TCreateCharacterItem * CreateItemArray ) ;
bool GetCreateDWCPosition ( BYTE cJobCode , int & nPosX , int & nPosY ) ;
bool GetCreateDWCEquip ( BYTE cJobCode , int * CreateEquipArray ) ;
bool GetCreateDWCSkill ( BYTE cJobCode , int * CreateSkillArray ) ;
bool GetCreateDWCQuickSlot ( BYTE cJobCode , TQuickSlot * QuickSlotArray ) ;
bool GetCreateDWCGesture ( BYTE cJobCode , int * CreateGestureArr ) ;
# endif // #if defined( PRE_ADD_DWC )
// CoinCountByLevel
bool LoadCoinCount ( ) ;
int GetRebirthCoin ( BYTE cLevel , char cWorldID ) ;
int GetCashRebirthCoin ( BYTE cLevel , char cWorldID ) ;
bool LoadLevelData ( ) ;
int GetFatigue ( char cClass , char cLevel ) ;
// <20> <> Ģ<EFBFBD> <C4A2>
# if defined(PRE_ADD_MULTILANGUAGE)
bool LoadProhibitWord ( int nLanguage , const char * pszFilePath ) ;
TProhibitWord * GetLanguageSlangFilter ( int nLanguage ) ;
bool CheckProhibitWord ( int nLanguage , const wchar_t * pwszWord ) ;
# else //#if defined(PRE_ADD_MULTILANGUAGE)
bool LoadProhibitWord ( ) ;
bool CheckProhibitWord ( const wchar_t * pwszWord ) ;
# endif //#if defined(PRE_ADD_MULTILANGUAGE)
bool CheckSpecialCharacter ( const wchar_t * pwszWord ) ;
bool LoadWeaponData ( ) ;
TWeaponData * GetWeaponData ( int nWeaponIndex ) ;
bool LoadPartData ( ) ;
TPartData * GetPartData ( int nPartIndex ) ;
int GetItemDurability ( int nItemID ) ;
# endif
// PCBang
bool LoadPCBangData ( ) ;
int GetPCBangDataCount ( ) ;
TPCBangData * GetPCBangData ( int nPCBangType ) ;
int GetPCBangParam1 ( int nPCBangType , int nPCBangGrade ) ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1<> ٸ<EFBFBD> <20> ִ°<D6B4> <C2B0> <EFBFBD> (PCBang::Type::)Exp, Appellation, Fatigue, RebirthCoin, Mission
int GetPCBangParam2 ( int nPCBangType , int nPCBangGrade ) ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 1<> ٸ<EFBFBD> <20> ִ°<D6B4> <C2B0> <EFBFBD> (PCBang::Type::)Exp, Appellation, Fatigue, RebirthCoin, Mission
int GetPCBangNestClearCount ( int nPCBangGrade , int nMapID ) ;
bool GetPCBangClearBoxFlag ( int nPCBangGrade ) ;
// Cash<73> <68>
bool ReLoadCashCommodity ( ) ;
bool ReLoadCashPackage ( ) ;
bool GetCashCommodityData ( int nSN , TCashCommodityData & Data ) ;
int GetCashCommodityPrice ( int nSN ) ;
bool IsReserveCommodity ( int nSN ) ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD>
bool IsPresentCommodity ( int nSN ) ; // <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD>
bool IsOnSaleCommodity ( int nSN ) ; // <20> Ǹ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> ǰ<EFBFBD> <C7B0> <EFBFBD> <EFBFBD>
bool IsLimitCommodity ( int nSN ) ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǹ<EFBFBD> <C7B8> <EFBFBD> <EFBFBD> <EFBFBD>
int GetCashCommodityPeriod ( int nSN ) ;
int GetCashCommodityCount ( int nSN ) ;
int GetCashCommodityReserve ( int nSN ) ; // <20> <> <EFBFBD> Խ<EFBFBD> <20> ־<EFBFBD> <D6BE> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
# if defined( PRE_ADD_NEW_MONEY_SEED )
int GetCashCommoditySeed ( int nSN ) ; // <20> <> <EFBFBD> Խ<EFBFBD> <20> ־<EFBFBD> <D6BE> <EFBFBD> <EFBFBD> <EFBFBD> <20> õ<EFBFBD>
# endif
bool GetCashCommodityName ( int nSN , std : : string & outStr ) ;
bool GetCashCommodityNameW ( int nSN , std : : wstring & outStr ) ;
# if defined(_JP)
bool GetCashCommodityJPSN ( int nSN , std : : string & outStr ) ;
# endif // #if defined(_JP)
int GetCashCommodityItem0 ( int nSN ) ;
int GetCashCommodityVIPPoint ( int nSN ) ; // vippoint<6E> <74> <EFBFBD> <EFBFBD>
bool GetCashCommodityPay ( int nSN ) ;
int GetCashCommodityPaySale ( int nSN ) ;
int GetCashCommodityVIPAutomaticPaySalePrice ( int nSN ) ; // VIP<49> ڵ<EFBFBD> <DAB5> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ΰ<EFBFBD> <CEB0> <EFBFBD>
std : : vector < int > m_VecProhibitSaleList ;
void SetProhibitSaleList ( ) ;
# if defined(PRE_ADD_CASH_REFUND)
bool GetCashCommodityNoRefund ( int nID , int nSN ) ; // ij<> <C4B3> ȯ<> <C8AF> <20> Ұ<EFBFBD> <D2B0> <EFBFBD>
# endif
# if defined(PRE_ADD_SALE_COUPON)
bool GetCashCommodityUseCoupon ( int nSN ) ;
# endif
bool GetCashPackageData ( int nSN , TCashPackageData & Data ) ;
TCashLimitData * GetCashLimitData ( int nSN ) ;
int GetCashBuyAbleCount ( int nSN ) ;
# if defined(PRE_ADD_LIMITED_CASHITEM) && defined(_CASHSERVER)
int GetCashLimitedItemCount ( int nSN ) ;
# endif //#if defined(PRE_ADD_LIMITED_CASHITEM) && defined(_CASHSERVER)
TItemData * GetItemData ( int nItemID ) ;
int GetItemMainType ( int nItemID ) ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ÿ<> <C5B8> <EFBFBD> ߿<EFBFBD> eItemTypeEnum <20> <> <EFBFBD> <EFBFBD>
int GetItemOverlapCount ( int nItemID ) ;
bool IsCashItem ( int nItemID ) ;
// GlobalWeight
TGlobalWeightData * GetGlobalWeightData ( int nID ) ;
float GetGlobalWeightValueFloat ( int nID ) ;
int GetGlobalWeightValue ( int nID ) ;
TGlobalWeightIntData * GetGlobalWeightIntData ( int nID ) ;
float GetGlobalWeightIntValueFloat ( int nID ) ;
int GetGlobalWeightIntValue ( int nID ) ;
// VehicleTable
TVehicleData * GetVehicleData ( int nItemID ) ;
int GetVehicleClassID ( int nItemID ) ;
// VehiclePartsTable
TVehiclePartsData * GetVehiclePartsData ( int nItemID ) ;
int GetVehiclePartsType ( int nItemID ) ;
TMailTableData * GetMailTableData ( int iItemID ) ;
TGuildWarRewardData * GetGuildWarRewardData ( char cType , char cClass ) ;
TJobTableData * GetJobTableData ( int nJobTableID ) ;
time_t GetTimeForTextDate ( std : : string & strDate ) ; // "00/00/00" Text<78> <74> <EFBFBD> <EFBFBD> time_t <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
bool IsOnSaleDate ( int nSN ) ;
void GetXMLAccountDBID ( UINT nAccountDBID , std : : wstring & wstrOut ) ;
void GetXMLAccountName ( WCHAR * pAccountName , std : : wstring & wstrOut ) ;
void GetXMLCharacterDBID ( INT64 biCharacterDBID , std : : wstring & wstrOut ) ;
void GetXMLCharacterName ( WCHAR * pCharacterName , std : : wstring & wstrOut ) ;
void GetXMLItems ( int nItemTotalCount , TSpecialBoxItemInfo * Items , std : : wstring & wstrOut ) ;
///
bool LoadNewCharCreate ( ) ;
} ;
extern CDNExtManager * g_pExtManager ;