//////////////////////////////////////////////////////////////////////////////////////////////////// /// /// @file TotalGuideParser.h /// @author hukim /// @email silped@gmail.com /// @brief [2011/06/15 by hukim] This is created.\n /// //////////////////////////////////////////////////////////////////////////////////////////////////// #pragma once #ifndef TOTALGUIDEPARSER_H_ #define TOTALGUIDEPARSER_H_ #include "ScriptCode.IParser.h" #include "Singleton.h" #define MAX_GUIDE_IMAGE_TEXT_SIZE 128 // ÅëÇÕ °¡ÀÌµå ¼¼ºÎ ÆäÀÌÁö struct TotalGuidePage { enum { kMaxSize = 50 }; // »ý¼º °¡´ÉÇÑ ÃÖ´ë °³¼ö BYTE number; // ÆäÀÌÁö ¹øÈ£ CODETYPE head_str_code; // Á¦¸ñ ½ºÆ®¸µ ÄÚµå CODETYPE content_str_code; // ³»¿ë ½ºÆ®¸µ ÄÚµå CODETYPE image_code; // À̹ÌÁö ÄÚµå CODETYPE hold_window_id; // Ȧµåâ ¾ÆÀ̵ð CODETYPE hold_str_code; // Ȧµå½Ã Ãâ·ÂÇÒ ½ºÆ®¸µ ÄÚµå CODETYPE highlight_target_id; // °­Á¶ÇÒ ´ë»ó ¾ÆÀ̵ð CODETYPE highlight_child_target_id; // °­Á¶ÇÒ ´ë»ó¿¡ ¼ÓÇÑ ÀÚ½Ä °´Ã¼ ¾ÆÀ̵ð explicit TotalGuidePage( const BYTE number, const CODETYPE head_str_code, const CODETYPE content_str_code, const CODETYPE image_code, const CODETYPE hold_window_id, const CODETYPE hold_str_code, const CODETYPE highlight_target_id, const CODETYPE highlight_child_target_id); private: __DISABLE_COPY(TotalGuidePage); }; // TotalGuidePage // ÅëÇÕ °¡À̵å struct TotalGuide { typedef WORD Index; enum { kMaxSize = 200 }; // »ý¼º °¡´ÉÇÑ ÃÖ´ë °³¼ö enum { kInvalid = 0 }; enum ConfirmType { kConfirmPerCharacter = 0, // ij¸¯ÅÍ º° kConfirmPerUser = 1 // »ç¿ëÀÚ °èÁ¤ º° }; Index code; // °¡À̵å ÄÚµå CODETYPE name_str_code; // °¡À̵å À̸§ ½ºÆ®¸µ ÄÚµå LEVELTYPE level; // °¡À̵å Ãâ·Â ·¹º§ BYTE page_size; // ÆäÀÌÁö ¼ö ConfirmType confirm_type; // È®ÀÎ Çü½Ä Index category_code; // Ä«Å×°í¸® ÄÚµå explicit TotalGuide( const Index code, const CODETYPE name_str_code, const LEVELTYPE level, const BYTE page_size, const ConfirmType confirm_type, const Index category_code); ~TotalGuide(); // À妽º°¡ ¾Æ´Ï¶ó ÆäÀÌÁö ¹øÈ£¸¦ Ű·Î ÆäÀÌÁö¸¦ ¾ò¾î¿Â´Ù. (ÆäÀÌÁö ¹øÈ£´Â 1ºÎÅÍ ½ÃÀÛ) const TotalGuidePage* GetPage(const BYTE page_number) const; // ÆäÀÌÁö¸¦ Ãß°¡ÇÑ´Ù. Ãß°¡ ½ÇÆÐÇÏ¸é ÆäÀÌÁö´Â »èÁ¦µÈ´Ù. bool AddPage(const TotalGuidePage*& page); private: const TotalGuidePage* page_list_[TotalGuidePage::kMaxSize]; __DISABLE_COPY(TotalGuide); }; // TotalGuide // ÅëÇÕ °¡À̵å Ä«Å×°í¸® struct TotalGuideCategory { enum { kMaxSize = 100 }; // »ý¼º °¡´ÉÇÑ ÃÖ´ë °³¼ö typedef STLX_MAP GuideMap; TotalGuide::Index code; // Ä«Å×°í¸® ÄÚµå CODETYPE name_str_code; // Ä«Å×°í¸® À̸§ ½ºÆ®¸µ ÄÚµå GuideMap guide_map; // °¡ÀÌµå ¸Ê explicit TotalGuideCategory(const TotalGuide::Index code, const CODETYPE name_str_code); ~TotalGuideCategory(); // °¡À̵带 ¾ò´Â´Ù. TotalGuide* GetGuide(const TotalGuide::Index guide_code) const; // °¡À̵带 Ãß°¡ÇÑ´Ù. Ãß°¡ ½ÇÆÐÇÏ¸é °¡À̵å´Â »èÁ¦µÈ´Ù. bool AddGuide(TotalGuide*& guide); private: __DISABLE_COPY(TotalGuideCategory); }; // ÅëÇÕ °¡À̵å Ä«Å×°í¸® °ü¸®ÀÚ struct TotalGuideCategoryManager { typedef STLX_MAP CategoryMap; CategoryMap category_map; // Ä«Å×°í¸® ¸Ê TotalGuideCategoryManager(); ~TotalGuideCategoryManager(); // Ä«Å×°í¸®¸¦ ¾ò´Â´Ù. TotalGuideCategory* GetCategory(const TotalGuide::Index category_code) const; // Ä«Å×°í¸®¸¦ Ãß°¡ÇÑ´Ù. Ãß°¡ ½ÇÆÐÇϸé Ä«Å×°í¸®´Â »èÁ¦µÈ´Ù. bool AddCategory(TotalGuideCategory*& category); // ÃʱâÈ­ ÇÑ´Ù. void Clear(); private: __DISABLE_COPY(TotalGuideCategoryManager); }; class TotalGuideParser; // ÅëÇÕ °¡ÀÌµå ¾Ë¸²Ã¢ struct TotalGuideNotice { friend class TotalGuideParser; enum { kMaxSize = 200 }; // »ý¼º °¡´ÉÇÑ ÃÖ´ë °³¼ö enum ButtonStyle // ¹öư Ãâ·Â ½ºÅ¸ÀÏ { kViewAndNextView = 1, // º¸±â, ´ÙÀ½¿¡ º¸±â µÑ´Ù Ãâ·Â kOK = 2, // È®Àθ¸ Ãâ·Â kView = 3 // º¸±â¸¸ Ãâ·Â }; enum CharStatus // ij¸¯ÅÍ »óÅ { kBoundaryMin = 0, kCreate = 1, // ij¸¯ÅÍ »ý¼º kNpcClick = 2, // NCP Ŭ¸¯ kEnterToMap = 3, // ƯÁ¤ ¸Ê ÁøÀÔ kGetExp = 4, // °æÇèÄ¡ ½Àµæ kGetItem = 5, // ¾ÆÀÌÅÛ ½Àµæ kLevelUp = 6, // ·¹º§¾÷ kFreeChaos = 7, // ÇÁ¸®Ä«¿À kChaos = 8, // Ä«¿À kDead = 9, // ij¸¯ÅÍ »ç¸Á½Ã kCreateGuild = 10, // ±æµå â¼³ kUnderHP = 11, // HP ƯÁ¤ ÆÛ¼¾Æ® ÀÌÇÏ kQuest = 12, // Äù½ºÆ® ¼ö¶ô/¿Ï·á kAccumulatePoint = 14, // Á¢¼ÓÀÚ Æ÷ÀÎÆ® ȹµæ½Ã kRemainGuide = 99, // º¸Áö ¾ÊÀº °¡À̵å Á¤º¸°¡ ÀÖ´Â °æ¿ì kBoundaryMax }; enum RepeatType // ¹Ýº¹ Çü½Ä { kOnce = 0, // Çѹø¸¸ kContinue = 1, // ¹Ýº¹ÇÔ kOnceForRun = 2, // 1ȸ Ãâ·Â ÈÄ ÀçÁ¢¼Ó½Ã±îÁö ¹Ýº¹ ¾ÈÇÔ }; enum OpenType // â¿­±â Çü½Ä { kDoNotOpen = 0, // âÀ» ¿­Áö ¾ÊÀ½ kMiniWindow = 1, // ¹Ì´Ï Á¤º¸Ã¢ kGuideWindow = 2, // °¡À̵åâ kNoticeWindow = 3, // ¾Ë¸²Ã¢ }; enum { kParamMaxSize = 2 }; enum UnderHPType { kNumbericType = 1, kPercentageType = 2, }; enum QuestType { kAcceptQuest = 1, kCompleteQuest = 2, }; enum GetItemType { kItemCode = 1, //ÄÚµå·Î ±¸ºÐ kItemType = 2, //Á¾·ù ¹× °è¿­·Î ±¸ºÐ kItemStatus = 3, //µð¹ÙÀÎ(1)/¿¡Å׸®¾Æ(2)/½ºÅ²(3) kItemRareAndElite = 4, //·¹¾î(1)/¿¤¸®Æ®(2) }; enum ItemStatusType { kDivine = 1, //µð¹ÙÀÎ kEtheriaItem = 2, //¿¡Å׸®¾Æ kShellItem = 3, //½ºÅ² }; enum ItemRareAndEliteType { kRare = 1, //·¹¾î ¾ÆÀÌÅÛ kElite = 2, //¿¤¸®Æ® ¾ÆÀÌÅÛ }; typedef WORD Index; Index code; // ¾Ë¸²Ã¢ ÄÚµå ButtonStyle button_style; // ¹öư Ãâ·Â Çü½Ä CharStatus char_status; // ij¸¯ÅÍ »óÅ LEVELTYPE min_level; // ÃÖ¼Ò ·¹º§ LEVELTYPE max_level; // ÃÖ´ë ·¹º§ RepeatType repeat_type; // ¹Ýº¹ Çü½Ä OpenType open_type; // â ¿­±â Çü½Ä TotalGuide::Index guide_code; // ¿¬°áµÈ °¡À̵å ÄÚµå CODETYPE title_str_code; // Á¦¸ñ ½ºÆ®¸µ ÄÚµå const TotalGuide* guide; // ¿¬°áµÈ °¡À̵å CODETYPE desc_str_code; // ¼³¸í ½ºÆ®¸µ ÄÚµå explicit TotalGuideNotice( const Index code, const ButtonStyle button_style, const CharStatus char_status, const LEVELTYPE min_level, const LEVELTYPE max_level, const RepeatType repeat_type, const OpenType open_type, const TotalGuide::Index guide_code, const CODETYPE title_str_code, const TotalGuide* guide, const DWORD param_list[kParamMaxSize], const CODETYPE desc_str_code); // Ãß°¡ ÆÄ¶ó¹ÌÅ͸¦ ¾ò´Â´Ù. DWORD GetParam(const int index) const; private: DWORD param_list_[kParamMaxSize]; // Ãß°¡ ÆÄ¶ó¹ÌÅÍ ¸ñ·Ï __DISABLE_COPY(TotalGuideNotice); }; // ÅëÇÕ °¡ÀÌµå ¾Ë¸²Ã¢ °ü¸®ÀÚ struct TotalGuideNoticeManager { typedef STLX_MAP NoticeMap; typedef STLX_MULTIMAP CharStatusMap; NoticeMap notice_map; // ¾Ë¸²Ã¢ ¸Ê CharStatusMap char_status_map; // ij¸¯ÅÍ »óÅ ¼øÀ¸·Î Á¤·ÄµÈ ¾Ë¸²Ã¢ ¸Ê TotalGuideNoticeManager(); ~TotalGuideNoticeManager(); // ¾Ë¸²À» ¾ò´Â´Ù. const TotalGuideNotice* GetNotice(const TotalGuideNotice::Index notice_code) const; // ¾Ë¸²À» Ãß°¡ÇÑ´Ù. Ãß°¡ ½ÇÆÐÇÏ¸é ¾Ë¸²Àº »èÁ¦µÈ´Ù. bool AddNotice(const TotalGuideNotice*& notice); // ÃʱâÈ­ ÇÑ´Ù. void Clear(); private: __DISABLE_COPY(TotalGuideNoticeManager); }; // ÅëÇÕ °¡À̵å À̹ÌÁö struct TotalGuideImage { CODETYPE image_code; // À̹ÌÁö ÄÚµå TCHAR name_str[MAX_GUIDE_IMAGE_TEXT_SIZE]; // À̸§ #ifdef _NA_004523_20120323_CHANGE_TO_LOAD_GUIDE_IMAGE RECT image_rect; explicit TotalGuideImage(const CODETYPE code, TCHAR* name_str, RECT image_rect); #else explicit TotalGuideImage(const CODETYPE code, TCHAR* name_str); #endif//_NA_004523_20120323_CHANGE_TO_LOAD_GUIDE_IMAGE ~TotalGuideImage(); private: __DISABLE_COPY(TotalGuideImage); }; // ÅëÇÕ °¡À̵å À̹ÌÁö °ü¸®ÀÚ struct TotalGuideImageManager { typedef STLX_MAP GuideImageMap; TotalGuideImageManager(); ~TotalGuideImageManager(); // °¡À̵å À̹ÌÁö¸¦ ¾ò´Â´Ù. const TotalGuideImage* GetGuideImage(const CODETYPE image_code) const; // À̹ÌÁö¸¦ Ãß°¡ÇÑ´Ù. Ãß°¡ ½ÇÆÐÇϸé À̹ÌÁö´Â »èÁ¦µÈ´Ù. bool AddGuideImage(TotalGuideImage*& guide_image); // ÃʱâÈ­ ÇÑ´Ù. void Clear(); private: GuideImageMap guide_image_map; // À̹ÌÁö ¸Ê __DISABLE_COPY(TotalGuideImageManager); }; // Á¤º¸ ¿­¶÷½Ç ÅëÇÕ °¡ÀÌµå ½Ã½ºÅÛ ÆÄ¼­¸¦ ±¸ÇöÇÑ Å¬·¡½º class TotalGuideParser : public util::Singleton, public IParser { //////////////////////////////////////////////////////////////////////////////////////////////// // REGION : Constructor & Destructor //////////////////////////////////////////////////////////////////////////////////////////////// public: TotalGuideParser(); ~TotalGuideParser(); //////////////////////////////////////////////////////////////////////////////////////////////// // REGION : Public //////////////////////////////////////////////////////////////////////////////////////////////// public: virtual void Release() {} virtual BOOL LoadScript(eSCRIPT_CODE script_code, BOOL is_reload); public: // Ä«Å×°í¸® °ü¸®ÀÚ¸¦ ¾ò´Â´Ù. const TotalGuideCategoryManager& GetCategoryManager() const; // °¡À̵带 ¾ò´Â´Ù. TotalGuide* GetGuide(const TotalGuide::Index guide_code) const; // Ä«Å×°í¸®¸¦ ¾ò´Â´Ù. const TotalGuideCategory* GetCategory(const TotalGuide::Index category_code) const; // ¾Ë¸²Ã¢ °ü¸®ÀÚ¸¦ ¾ò´Â´Ù. const TotalGuideNoticeManager& GetNoticeManager() const; // ¾Ë¸²À» ¾ò´Â´Ù. const TotalGuideNotice* GetNotice(const TotalGuideNotice::Index notice_code) const; // À̹ÌÁö¸¦ ¾ò´Â´Ù. const TotalGuideImageManager* GetImageManager() const { return &image_manager_; } //////////////////////////////////////////////////////////////////////////////////////////////// // REGION : Private //////////////////////////////////////////////////////////////////////////////////////////////// private: // ÅëÇÕ °¡ÀÌµå ½ºÅ©¸³Æ®¸¦ Àоî¿Â´Ù. bool LoadGuide(const bool is_reload); // ÅëÇÕ °¡ÀÌµå ¼¼ºÎ ÆäÀÌÁö ½ºÅ©¸³Æ®¸¦ Àоî¿Â´Ù. bool LoadGuidePage(const bool is_reload); // ÅëÇÕ °¡ÀÌµå ¾Ë¸²Ã¢ ½ºÅ©¸³Æ®¸¦ Àоî¿Â´Ù. bool LoadNotice(const bool is_reload); // ÅëÇÕ °¡À̵å À̹ÌÁö ½ºÅ©¸³Æ®¸¦ Àоî¿Â´Ù. bool LoadGuideImage(const bool is_reload); private: TotalGuideCategoryManager category_manager_; TotalGuideNoticeManager notice_manager_; TotalGuideImageManager image_manager_; __DISABLE_COPY(TotalGuideParser); }; // TotalGuideParser #endif // TOTALGUIDEPARSER_H_