#pragma once #ifndef PROGRAMCOMMON_SOCKETSYSTEM_SOCKETITEMRATIOPARSER_H_ #define PROGRAMCOMMON_SOCKETSYSTEM_SOCKETITEMRATIOPARSER_H_ #include #include #include struct SocketItemRatioInfo { enum { kMaxRatio = 1000 }; struct RatioType { enum { kWeapon = 0, // ¹«±â kArmor = 1, // ¹æ¾î±¸ kRecreateWeapon = 2, // ¼ÒÄÏ ´Ù½Ã »ý¼º ¿äûÀÏ ¶§ ¹«±â kRecreateArmor = 3, // ¼ÒÄÏ ´Ù½Ã »ý¼º ¿äûÀÏ ¶§ ¹æ¾î±¸ kMax = 0xFF, // ÃÖ´ë°ª kInvalid }; typedef WORD Value; }; typedef WORD ItemType; typedef LEVELTYPE ItemLevel; typedef WORD Ratio; RatioType::Value ratio_type_; // ¾ÆÀÌÅÛ Å¸ÀÔ (À§ ³ª¿­ÀÚ °ª ÂüÁ¶) ItemLevel item_level_; // ¾ÆÀÌÅÛ ·¹º§ Ratio socket_creation_ratio_; // ¼ÒÄÏ ¾ÆÀÌÅÛÀÌ µÉ È®·ü (õºÐÀ²) Ratio socket_ratio_[SOCKET_MAX]; // °¢ ¼ÒÄÏ »ý¼º È®·ü (°¢ ¼ÒÄϺ° È®·ü ÇÕÃļ­ 1000) SocketItemRatioInfo() : ratio_type_(RatioType::kInvalid), item_level_(0), socket_creation_ratio_(0) { ::ZeroMemory(socket_ratio_, sizeof(socket_ratio_)); } private: __DISABLE_COPY(SocketItemRatioInfo); }; class SocketItemRatioParser : public util::Singleton, public IParser { typedef WORD SocketRatioKey; typedef stdext::hash_map SocketRatioMap; public: SocketItemRatioParser(); ~SocketItemRatioParser(); public: virtual void Release(); virtual BOOL LoadScript(eSCRIPT_CODE script_code, BOOL is_reload); public: SocketItemRatioInfo::RatioType::Value GetRatioType( const SocketItemRatioInfo::ItemType item_type, const bool is_recreate) const; const SocketItemRatioInfo* FindSocketRatio( const SocketItemRatioInfo::RatioType::Value ratio_type, const SocketItemRatioInfo::ItemLevel item_level) const; private: bool IsValid(const SocketItemRatioInfo& socket_ratio) const; bool LoadSocketItemRatio(const bool is_reload); private: SocketRatioMap socket_ratio_map_; __DISABLE_COPY(SocketItemRatioParser); }; #endif // PROGRAMCOMMON_SOCKETSYSTEM_SOCKETITEMRATIOPARSER_H_