94 lines
3.2 KiB
C++
94 lines
3.2 KiB
C++
#pragma once
|
|
#ifndef PROGRAMCOMMON_FATEITEMINFO_PARSER_H
|
|
#define PROGRAMCOMMON_FATEITEMINFO_PARSER_H
|
|
|
|
#include <Singleton.h>
|
|
#include <ScriptCode.IParser.h>
|
|
#include <ReliableRatioRandomizer.h>
|
|
#include <ReliableRatioRandomizerEX.hpp>
|
|
|
|
//==================================================================================================
|
|
|
|
#define MAX_FATE_DURA_RATIO_COUNT 4
|
|
#define MAX_FATE_ATK_DEF_RATIO_COUNT 4
|
|
// CHANGES: f110428.x, remove time specification about 365, and infinity
|
|
#define MAX_FATE_USING_TIME_RATIO_COUNT 3 // list = { 30ÀÏ, 60ÀÏ, 90ÀÏ }
|
|
#define MAX_FATE_SOCKET_COUNT 4 // »èÁ¦ _NA_000251_20100727_SOCKET_SYSTEM
|
|
|
|
|
|
struct LUCKY_ITEM_INFO
|
|
{
|
|
DWORD m_dwIndex;
|
|
DWORD m_dwRefItemIndex;
|
|
|
|
DWORD m_dwDuraRatio[MAX_FATE_DURA_RATIO_COUNT];
|
|
WORD m_wDura_Min[MAX_FATE_DURA_RATIO_COUNT];
|
|
WORD m_wDura_Max[MAX_FATE_DURA_RATIO_COUNT];
|
|
DWORD m_dwFateDuraRatioSum;
|
|
|
|
DWORD m_dwAtkDefRatio[MAX_FATE_ATK_DEF_RATIO_COUNT];
|
|
WORD m_wAtkDef_Min[MAX_FATE_ATK_DEF_RATIO_COUNT];
|
|
WORD m_wAtkDef_Max[MAX_FATE_ATK_DEF_RATIO_COUNT];
|
|
DWORD m_dwAtkDefRatioSum;
|
|
|
|
DWORD m_dwUsingTimeRatio[MAX_FATE_USING_TIME_RATIO_COUNT];
|
|
DWORD m_dwUsingTimeValue[MAX_FATE_USING_TIME_RATIO_COUNT];
|
|
DWORD m_dwUsingTimeRatioSum;
|
|
|
|
BOOL m_bCanUseEnchant;
|
|
BOOL m_bCanUseSocket;
|
|
};
|
|
|
|
typedef const LUCKY_ITEM_INFO sFATE_ITEM_INFO;
|
|
|
|
//==================================================================================================
|
|
|
|
class FateItemInfoParser : public util::Singleton<FateItemInfoParser>, public IParser
|
|
{
|
|
public:
|
|
FateItemInfoParser();
|
|
virtual ~FateItemInfoParser();
|
|
|
|
// IParser interfaces
|
|
virtual BOOL LoadScript(eSCRIPT_CODE script_code, BOOL reloaded);
|
|
virtual void Release();
|
|
|
|
void Unload();
|
|
|
|
sFATE_ITEM_INFO* GetFateItemInfoByIndex(DWORD lucky_index) const;
|
|
sFATE_ITEM_INFO* GetFateItemInfoByRefItemCode(DWORD ref_item_code) const;
|
|
|
|
WORD GetRandomkeyFromFateDuraRatio(DWORD lucky_index);
|
|
WORD GetRandomkeyFromFateAtkDefRatio(DWORD lucky_index);
|
|
DWORD GetRandomkeyFromFateUsingTimeRatio(DWORD lucky_index);
|
|
|
|
void SetFirst() { fate_item_iterator_ = lucky_item_table_.begin(); }
|
|
sFATE_ITEM_INFO* GetNext();
|
|
|
|
private:
|
|
typedef STLX_HASH_MAP<DWORD, LUCKY_ITEM_INFO*> LUCKY_ITEM_INFO_HASH;
|
|
typedef STLX_HASH_MAP<DWORD, ReliableRatioRandomizerEX<MAX_FATE_DURA_RATIO_COUNT>* >
|
|
LUCKY_DURA_RATIO_HASH;
|
|
typedef STLX_HASH_MAP<DWORD, ReliableRatioRandomizerEX<MAX_FATE_ATK_DEF_RATIO_COUNT>* >
|
|
LUCKY_ATK_DEF_RATIO_HASH;
|
|
typedef STLX_HASH_MAP<DWORD, ReliableRatioRandomizer<MAX_FATE_USING_TIME_RATIO_COUNT>* >
|
|
LUCKY_USING_TIME_RATIO_HASH;
|
|
|
|
WORD ValidCheck(LUCKY_ITEM_INFO* lucky_info);
|
|
bool _Load(BOOL reloaded);
|
|
|
|
LUCKY_ITEM_INFO_HASH lucky_item_table_;
|
|
LUCKY_ITEM_INFO_HASH fate_item_ref_item_table_;
|
|
LUCKY_ITEM_INFO_HASH::iterator fate_item_iterator_;
|
|
|
|
LUCKY_DURA_RATIO_HASH fate_item_durability_selector_;
|
|
LUCKY_ATK_DEF_RATIO_HASH fate_item_atkdef_selector_;
|
|
|
|
LUCKY_USING_TIME_RATIO_HASH fate_item_time_selector_;
|
|
|
|
char debug_file_name_[MAX_PATH];
|
|
//
|
|
__DISABLE_COPY(FateItemInfoParser);
|
|
};
|
|
|
|
#endif //PROGRAMCOMMON_FATEITEMINFO_PARSER_H
|