#pragma once #include #include "Protocol_CG.h" #include "PacketStruct_CG.h" #include #include "RewardManager.h" // #define REWARD_MSG_CREATOR_SPECIFIC_TYPE_ALLOCATOR(name) \ name* GetHeaderPointer_##name() { \ DWORD idx = HEADINFO_LASTINDEX-(sizeof(name)-sizeof(INVENTORY_TOTAL_INFO)); \ return new (&m_HeadInfo[idx]) name; \ } struct REWARD_MSG_CREATOR { enum { MAX_HEADINFO_SIZE=64, HEADINFO_LASTINDEX=MAX_HEADINFO_SIZE-1 }; BYTE m_HeadInfo[MAX_HEADINFO_SIZE]; INVENTORY_TOTAL_INFO m_Inventory; REWARD_MSG_CREATOR_SPECIFIC_TYPE_ALLOCATOR(MSG_CG_TRIGGER_REWARD_ACK); #define GetRewardMSG_HeaderPtr(name) GetHeaderPointer_##name }; struct MissionRewardArgs { // ¾Æ·¡ ÇʵåµéÀº ³»ºÎÀûÀ¸·Î »ç¿ëµÇ´Â ÂüÁ¶Á¤º¸µé __PROPERTY( Player*, Player ); __PROPERTY( MissionManager*, MissionManager ); // ´ÙÀ½Àº GetMissionRewardInfoNClassCode() ÀÌÈÄ ³»ºÎÀûÀ¸·Î ¼³Á¤µÈ´Ù. // ÀÌ °ªÀ» »ç¿ëÇØ ´Ù¸¥ RewardXXX¸¦ ºü¸£°Ô »ç¿ëÇÒ ¼ö ÀÖ´Ù. __PROPERTY( MissionRewardInfo::sCLASS*, MissionRewardInfoClassCode ); __PROPERTY( WORD, MissionPoint ); // ¾Æ·¡ ÇʵåµéÀº Ŭ¶ó·ÎºÎÅÍ ÀÔ·ÂµÈ Á¤º¸µé __PROPERTY( BYTE, Num ); //< º¸»ó½ºÅ©¸³Æ®ÀÇ ¹øÈ£ __PROPERTY( BYTE, Type ); //< 0 or 1 __PROPERTY( BYTE, SelectedItem ); //< ¼±ÅÃÇÑ ¾ÆÀÌÅÛµé }; class MissionRewardManager : public util::Singleton { public: MissionRewardManager() {} ~MissionRewardManager() {} VOID Init() { memset(&m_MissionRewardArgs, 0, sizeof(MissionRewardArgs)); //memset(&m_sExtraInfo, 0, sizeof(m_sExtraInfo)); //memset(rewardItemCode, 0, sizeof(rewardItemCode) ); //memset(rewardItemNum, 0, sizeof(rewardItemNum) ); //rewardItemDivine.ClearAll(); } inline MissionRewardArgs& GetMissionRewardArgs() { return m_MissionRewardArgs; } inline VOID SetMissionRewardArgs( MissionRewardArgs& IN rMRI ) { m_MissionRewardArgs = rMRI; } // // m_MissionRewardInfo Á¤º¸¿¡ Àǰаè»êµÈ´Ù. // // MissionManager::MissionPoint °ªÀ» ÀÔ·ÂÇßÀ» ¶§, // ½ºÅ©¸³Æ®¿¡ ÀúÀåµÈ n °³ÀÇ Á¤º¸ Áß ¾î¶² °ÍÀ» Á¦°øÇØ ÁÙÁö ±× À妽º¸¦ ¾òÀ» ¼ö ÀÖ´Ù. // // <¹üÀ§> 060414 ÇöÀç // max(n)=3, n={0,1,2} // <¹Ýȯ°ª> // TRUE: ½ºÅ©¸³Æ®»ó À妽º // FALSE: MissionRewardInfo::MISSION_REWARD_MAX_SIZE BYTE GetTypeOfMissionPoint( ); // // m_MissionRewardInfo Á¤º¸¿¡ Àǰаè»êµÈ´Ù. // // bPreUpdate : BOOL (¹Ì¸® Áõ°¡Ä¡¸¦ °¨¾ÈÇÑ °è»ê¿©ºÎ) // ¿Ï·áµÇ´Â ½ÃÁ¡ÀÇ Ã³¸®»ó MissionPoint¸¦ ¾÷µ¥ÀÌÆ® ¸ÕÀú Çß´ÂÁö ¾ÈÇß´ÂÁöÀÇ Â÷ÀÌ¿¡ µû¶ó 󸮰¡ ´Þ¶óÁú ¼ö ÀÖ´Ù. // ¿¹, óÀ½ ¹Ì¼ÇÀ» ¿Ï·áÇßÀ» °æ¿ì, ¾÷µ¥ÀÌÆ® ÀÌÀü¿¡ ¿Ï·á ȸ¼ö(MissionPoint)´Â 0À̸ç, 1À» °¨¾ÈÇÑ º¸»ó Äڵ带 ã¾Æ¾ß ÇÒ °ÍÀÌ´Ù. // <¹Ýȯ°ª> // TRUE: ½ºÅ©¸³Æ®»ó º¸»óÄÚµå // FALSE: RC::RC_REWARD_FAILED; WORD GetRewardCode( BOOL bPreUpdate ); // // m_MissionRewardInfo Á¤º¸¿¡ Àǰаè»êµÈ´Ù. // <¹Ýȯ°ª> // ³»ºÎÀûÀ¸·Î MissionRewardArgsÀÇ Çʵ尪ÀÎ // MissionRewardInfo::sCLASS* Get(Set)MissionRewardInfoClassCode() // ¿¡ °ªÀ» ÇÒ´çÇØÁØ´Ù. MissionRewardInfo* GetMissionRewardInfoNClassCode(); // // m_MissionRewardInfo Á¤º¸¿¡ Àǰаè»êµÈ´Ù. RC::eREWARD_RESULT RewardExp( EXPTYPE* OUT pExp ); // // m_MissionRewardInfo Á¤º¸¿¡ Àǰаè»êµÈ´Ù. RC::eREWARD_RESULT RewardExp( const MissionRewardInfo::sCLASS* IN pMRIclass, EXPTYPE* OUT pExp ); // // m_MissionRewardInfo Á¤º¸¿¡ Àǰаè»êµÈ´Ù. RC::eREWARD_RESULT RewardHime( MONEY* OUT pMoney ); // // m_MissionRewardInfo Á¤º¸¿¡ Àǰаè»êµÈ´Ù. RC::eREWARD_RESULT RewardHime( const MissionRewardInfo::sCLASS* IN pMRIclass, MONEY* OUT pMoney ); // // m_MissionRewardInfo Á¤º¸¿¡ Àǰаè»êµÈ´Ù. RC::eREWARD_RESULT RewardItem( INVENTORY_TOTAL_INFO& OUT rInvenInfo ); // // m_MissionRewardInfo Á¤º¸¿¡ Àǰаè»êµÈ´Ù. RC::eREWARD_RESULT RewardItem( const MissionRewardInfo::sCLASS* IN pMRIclass, INVENTORY_TOTAL_INFO& OUT rInvenInfo ); //_NA_008679_20160202_REWORK_BATTLEGROUND BOOL RewardBattlegroundMember(Player* const player, const ZONEKEY& zone_key, const MAPCODE& battleground_mapcode, const eBATTLEGROUND_RESULT& result_type); private: private: MissionRewardArgs m_MissionRewardArgs; struct MRI_ExtraInfo { POSTYPE totalCount; POSTYPE divineCount; } m_sExtraInfo; // static SLOTCODE rewardItemCode[MAX_INVENTORY_SLOT_NUM]; static POSTYPE rewardItemNum[MAX_INVENTORY_SLOT_NUM]; };