#ifndef __ACHIEVEMENT_ACHIEVEMENTINFO_H #define __ACHIEVEMENT_ACHIEVEMENTINFO_H #pragma once #include "AchievementParser.h" #include "AchievementNotify.h" #if !defined(_SERVER) //_SCJ_ACSYSTEM_OVERLAP_PARENT class Achievement; class AchievementInfo; typedef STLX_MAP ACHIEVEMENT_INFO_MAP; typedef ACHIEVEMENT_INFO_MAP::iterator ACHIEVEMENT_INFO_MAP_ITER; #ifdef _NA_008226_AC_PARENTMAP_LIST_SKIP const int PARENT_LIMIT_DEPTH = 100; #else const int PARENT_LIMIT_DEPTH = 30; #endif //_NA_008226_AC_PARENTMAP_LIST_SKIP #endif //!defined(_SERVER) enum ACHIEVEMENT_VALUE_CHANGE_TYPE { ACHIEVEMENT_VALUE_SET, //°ª º¯°æ ACHIEVEMENT_VALUE_APPEND, //°ª Ãß°¡ ACHIEVEMENT_VALUE_INIT, //ÃʱⰪ ¼³Á¤ }; struct AchievementObjectInfo { WORD Achievement_; //´Þ¼º ¸ñÇ¥ °ª (ÀÌ °ª ÀÌ»óÀÌ¸é ´Þ¼º) WORD value_; //¼öÇàÇÑ ÇöÀç °ª }; class AchievementInfo { public: AchievementInfo(); ~AchievementInfo(void); private: enum Achievement_Status {EMPTY = 0, //¾÷ÀûÀ» Çϳªµµ ´Þ¼ºÇÏÁö ¾ÊÀº »óÅ NORMAL, //¾÷Àû¼öÄ¡°¡ Á¸Àç ÇÏÁö¸¸ °ÔÀÓ Ç÷¹ÀÌÁß º¯°æµÇÁö´Â ¾ÊÀº»óÅ MODIFICATION}; //Ãß°¡·Î ¾÷Àû ¼öÄ¡°¡ º¯°æµÈ»óÅ public: inline bool IsEmpty() {return status_ == EMPTY;} inline bool IsNormal() {return status_ == NORMAL;} inline bool IsModification() {return status_ == MODIFICATION;} public: void Init(Achievement_ParserInfo* achievement_parser_info, AchievementNotify* notify); void InitValue(); //¾÷Àû °ü·ÃµÈ °ª¸¸ ÃʱâÈ­ ÇÑ´Ù. bool IsAccomplishment(BYTE object_index); //ÇØ´ç object °¡ ´Þ¼ºµÇ¾ú´ÂÁö È®ÀÎÇÑ´Ù. bool IsAccomplishment() const; //¾÷ÀûÀÌ ´Þ¼ºµÇ¾ú´ÂÁö ¿©ºÎ bool IsAccomplishmentReward(); //º¸»óÁß¿¡ ¾÷Àû·ü º¸»óÀÌ ÀÖ´ÂÁö È®ÀÎÇÑ´Ù. bool SetValue(BYTE object_index, WORD object_value, ACHIEVEMENT_VALUE_CHANGE_TYPE type); void SetValue(WORD object_value[MAX_ACHIEVEMENT_OBJECT], ACHIEVEMENT_VALUE_CHANGE_TYPE type); void GetValue(WORD object_value[MAX_ACHIEVEMENT_OBJECT]); void SetReward(bool reward_value, ACHIEVEMENT_VALUE_CHANGE_TYPE type);//º¸»ó ¿©ºÎ º¯°æ WORD GetAccomplishmentRatio(); //º¸»óÀÌ ´Þ¼º·üÀÌ¸é ´Þ¼º·ü ¼öÄ¡¸¦ ¸®ÅÏÇÑ´Ù. void SetNotifyObject(AchievementNotify* notify) {notify = notify_;} const AchievementObjectInfo* const GetAchievementObjectFormIndex(BYTE object_index); public: inline WORD GetLocationCode() {return location_code_;} inline WORD GetIndex() const {return index_number_;} inline bool IsReward() {return is_reward_;} inline WORD GetObjectType() {return object_type_;} inline AchievementObjectInfo GetObjectInfo(BYTE Index) {return obejct_value_[Index];} inline Achievement_ParserInfo_Reward GetRewardInfo(BYTE Index) {return rewards_[Index];} #if !defined(_SERVER) inline DWORD GetStringCode() {return object_string_code_;} inline DWORD GetToolTipCode(){return tooltip_string_code_;} inline DWORD GetIconCode() {return icon_code_;} //_SCJ_ACSYSTEM_OVERLAP_PARENT void SetAchievementInfoParentMap(Achievement* achievement); inline ACHIEVEMENT_INFO_MAP& GetParentMap() {return parent_ac_map_;} inline ACHIEVEMENT_INFO_MAP& GetChildMap() {return child_ac_map_;} bool IsShowRewardToParentMap(); // ¼±Çà°úÁ¦ Æ÷ÇÔÇØ¼­ º¸»ó¹öư º¸ÀÏÁö AchievementInfo* GetRewardToParentMap(); // ¼±Çà°úÁ¦ Æ÷ÇÔÇØ¼­ º¸»ó¹ÞÀ» °úÁ¦ #endif //_NA_001990_ACSYSTEM_ADD inline DWORD GetClassType() {return class_type_;} inline WORD GetParentCode(BYTE index){return parent_ac_code_[index];} private: void NotifyChangedValue(BYTE object_index, WORD previous_value, WORD current_value); //¾÷ÀûÀÇ °ªÀÌ º¯°æµÇ¾úÀ»¶§ À̺¥Æ®¸¦ ³¯¸°´Ù. void Notifyreward(bool is_reward, RC::eAC_RESULT rc); //¾÷ÀûÀÇ º¸»ó ¿©ºÎ À̺¥Æ®¸¦ ³¯¸°´Ù. static bool _Sort_Index(AchievementInfo*& info_left, AchievementInfo*& info_right); #if !defined(_SERVER) //defined(_SCJ_ACSYSTEM_OVERLAP_PARENT) void SetParentMap(Achievement* achievement); void MakeParentMap(Achievement* achievement, ACHIEVEMENT_INFO_MAP* map_pointer, int depth); void SetChildMap(Achievement* achievement); void AddChildMap(AchievementInfo* achievement_info); #endif //!defined(_SERVER) private: Achievement_Status status_; //¾÷Àû °ªÀÇ »óŸ¦ °¡¸£Å²´Ù. WORD index_number_; //¾÷Àû index bool is_reward_; //º¸»ó ¿©ºÎ WORD location_code_; //Áö¿ªÁ¤º¸ WORD object_type_; //°úÁ¦Å¸ÀÔ #if !defined(_SERVER) DWORD object_string_code_; //°úÁ¦ ¸í DWORD tooltip_string_code_; //ÅøÆÁ DWORD icon_code_; //¾ÆÀÌÄÜ ¹øÈ£ //_SCJ_ACSYSTEM_OVERLAP_PARENT ACHIEVEMENT_INFO_MAP parent_ac_map_; // ¼±Çà AC°úÁ¦ ¸®½ºÆ® ACHIEVEMENT_INFO_MAP child_ac_map_; // ÇǼ±Çà(ÈÄÇà)AC¸ñ·Ï #endif //_NA_001990_ACSYSTEM_ADD DWORD class_type_; //Ŭ·¡½º±¸ºÐ WORD parent_ac_code_[MAX_ACHIEVEMENT_PARENT_CODE]; //¼±ÇàACÄÚµå Achievement_ParserInfo_Reward rewards_[MAX_ACHIEVEMENT_REWARD]; //º¸»ó Á¤º¸ AchievementObjectInfo obejct_value_[MAX_ACHIEVEMENT_OBJECT]; //°úÁ¦ Á¤º¸ AchievementNotify* notify_; //º¯°æ »çÇ×À» Å뺸ÇÒ À̺¥Æ® °´Ã¼ }; #endif //__ACHIEVEMENT_ACHIEVEMENTINFO_H