#ifndef __ACHIEVEMENT_ACHIEVEMENTPART_H #define __ACHIEVEMENT_ACHIEVEMENTPART_H #pragma once #include "AchievementInfo.h" #include "CollectTreasureBoxInfo.h" #include //================================================================================================== struct Collect_Condition_Accomplishment_Info : public Collect_Condition_Info { bool is_accomplishment_[MAX_COLLECT_CONDITION]; bool can_collect_treasurebox_; void CalcConditionAccomplish() { can_collect_treasurebox_ = true; for(int j = 0 ; j < Collect_Condition_Accomplishment_Info::MAX_COLLECT_CONDITION ; j++) { can_collect_treasurebox_ = can_collect_treasurebox_ && is_accomplishment_[j]; } } }; //================================================================================================== // class AchievementPart { public: typedef STLX_HASH_MAP ACHIEVEMENT_MAP; typedef ACHIEVEMENT_MAP::iterator ACHIEVEMENT_ITER; typedef std::pair ACHIEVEMENT_RESULT; // AchievementPart(void); ~AchievementPart(void); inline ACHIEVEMENT_ITER Begin() { return infos_.begin(); } inline ACHIEVEMENT_ITER End() { return infos_.end(); } void Init(AchievementNotify* notify); void InitAchievement(); //¾÷Àû °ªÀ» ÃʱâÈ­ ÇÑ´Ù. void InitAccomplishmentRatio(); //¾÷Àû ´Þ¼º·üÀ» ¼³Á¤ÇÑ´Ù. void LoadAchievement(WORD& index, Character_Achievements& achievement_info, ACHIEVEMENT_SERIALIZE eType); //µ¥ÀÌŸ Á÷·ÄÈ­ ½Ã۱â À§ÇØ ¾÷Àû °ªÀ» ¼¼ÆÃÇÑ´Ù. WORD AddAccomplishmentRation(WORD accomplishment_ration); //¾÷Àû ´Þ¼º·üÀ» Àç ±¸¼ºÇÑ´Ù. (´Þ¼º·üÀÌ ¾÷ÀûÀÎ °ª ¼¼ÆÃ) bool IsAccomplishment(WORD index); //¾÷ÀûÀÌ ´Þ¼ºµÇ¾ú´ÂÁö È®ÀÎÇÑ´Ù. AchievementInfo* AddAchievement(WORD index_number); //¾÷ÀûÀ» Ãß°¡ÇÑ´Ù. AchievementInfo* AddAchievement(Achievement_ParserInfo* achievement_parser_info); //¾÷ÀûÀ» Ãß°¡ÇÑ´Ù. AchievementInfo* GetAchievement(WORD index_number); //¾÷Àû °´Ã¼¸¦ ¾ò´Â´Ù. bool SetAchievementValue(Character_Achievement& char_achievement_info, ACHIEVEMENT_VALUE_CHANGE_TYPE type); //¾÷Àû °ªÀ» ¼¼ÆÃÇÑ´Ù. bool SetAchievementValue(WORD index, BYTE object_index, WORD value , ACHIEVEMENT_VALUE_CHANGE_TYPE type); //¾÷Àû °ªÀ» ¼¼ÆÃÇÑ´Ù. bool RewardAchievement(WORD index_number, bool is_reward); //º¸»ó ¹ÞÀº ¼³Á¤À» ¼¼ÆÃÇÑ´Ù. bool Force_RewardAchievement(WORD index_number, bool is_reward); //º¸»ó ¹ÞÀº ¼³Á¤À» ¼¼ÆÃÇÑ´Ù. void AccomplishAchievement(); //´Þ¼º·üÀÌ º¸»óÀÎ ¾÷ÀûÀº ¸ðµÎ º¸»ó ¹Þ±â»óÅ·Π¸¸µç´Ù.(¸¶À̱׷¹À̼ǿ¡ ÇÊ¿ä) #ifdef _SERVER void SetTreasureBoxConditionInfo(Collect_Condition_Info* collect_condition_info); //º¸¹° »óÀÚ Ã¤Áý °¡´É Á¶°ÇÀ» ¼³Á¤ÇÑ´Ù. #endif inline void SetLocationCode(WORD location_code) {location_code_ = location_code;} inline WORD GetLocationCode() {return location_code_;} inline WORD GetAccomplishmentRatio() {return ratio_sum_;} inline bool show_ratio() {return show_ratio_;} #ifdef _SERVER inline bool CanCollectTreasureBox() {return collect_condition_info_.can_collect_treasurebox_;} void CheckTreasureBoxCondition(AchievementInfo* achievement_info, ACHIEVEMENT_VALUE_CHANGE_TYPE type); #endif #if !defined(_SERVER) //_SCJ_ACSYSTEM_OVERLAP_PARENT void SetAchievementPartParentMap(Achievement* achievement); AchievementInfo* FindAchievementInfoToIndex(WORD index_number); #endif //!defined(_SERVER) private: // CHANGES: f110526.5L, changes to shared pool each AchievementInfo static AchievementInfo* AllocInfo(); static BOOL FreeInfo(AchievementInfo* delete_pointer); void InitAccomplishmentAchievement(ACHIEVEMENT_VALUE_CHANGE_TYPE type); //´Þ¼º·üÀÌ ¾÷ÀûÀÎ °ª ¼¼ÆÃ ÇÑ´Ù. // WORD ratio_sum_; //ÇöÀç ´Þ¼ºµÈ ¾÷Àû ºñÀ² ACHIEVEMENT_MAP infos_; //¾÷Àû º¸°ü ACHIEVEMENT_MAP ratios_; //´Þ¼º·üÀÌ ¾÷ÀûÀÎ°Í º¸°ü bool show_ratio_; //´Þ¼º·ü·Î º¸ÀÏÁö ¾÷Àû ¿Ï·á °³¼ö·Î º¸ÀÏÁö WORD location_code_; //Áö¿ª ÄÚµå AchievementParser* parser_; //½ºÅ©¸³Æ® ÆÄ¼­ °´Ã¼ AchievementNotify* notify_; //º¯°æ»çÇ×À» Åëº¸ÇØÁÙ À̺¥Æ® °´Ã¼ #ifdef _SERVER Collect_Condition_Accomplishment_Info collect_condition_info_; #endif }; #endif //__ACHIEVEMENT_ACHIEVEMENTPART_H