#ifndef _CASTLE_H_ #define _CASTLE_H_ #pragma once #include #include #include #include #include // Àü¹æ ÂüÁ¶ class CSiegeObject; class CSendStream; namespace Castle { class CCastle { public: ~CCastle(); // ŸÀÔ Á¤ÀÇ typedef std::map MineralInfoMap; // typedef std::map CastleObjectMap; // // Áß°è ¼­¹ö·Î ºÎÅÍ ¹Þ¾Æ¿Â ¼ºÀÇ Á¤º¸ ¼ÂÆÃ bool SetTaxInfo(const CastleTaxInfo& castleTaxInfo); bool SetMineralInfo(unsigned short wMineralID, unsigned short wAmount, unsigned char cFlag); void UpdateTaxMoveInfo(unsigned long* dwMoveTempMoney, unsigned long* dwResultTaxMoney); void UpdateSiegeCountInfo(unsigned char cSiegeCount, unsigned char cInvincibleCount, unsigned short wTotalSiegeCount); void SendTempTaxInfo(); // Áß°è¼­¹ö·Î Àӽà ¼¼±Ý Á¤º¸ ¾÷µ¥ÀÌÆ® bool SendMineralInfo(CSendStream& SendStream, unsigned char cMineralType=Siege::ACCUMULATED_MINERAL); // ±¤¹° Á¤º¸ Àü¼Û void AllRespawn(unsigned char cExceptNation); // ¼ºÁÖº¯ x¼¿¿¡ ÀÖ´Â »ó´ë±¹Àû ij¸¯Å͸¦ ¸®½ºÆù ½ÃŲ´Ù. bool ChangeCastleMaster(unsigned char cNation); // ¼ÒÀ¯ ±¹°¡ º¯°æ void LoseOwnership(); // ¼º Á߸³È­ void ChangeCastleObjectNation(unsigned char cNation); // ¼ö¼º ¿ÀºêÁ§Æ®µéÀÇ ±¹ÀûÀ» º¯°æ void DestroyAllCastleArms(bool bKillRider); // ¼ö¼º º´±âµéÀ» º´±â °ü¸® NPC ·Î ¸¸µç´Ù. void AddUpgradeItem(unsigned short wItemID, int iIndex, unsigned char cNum); // ¾÷±×·¹ÀÌµå º¸¼® ¾ÆÀÌÅÛ ³Ö±â void DeleteUpgradeItem(int iIndex, unsigned char cNum); // ¾÷±×·¹ÀÌµå º¸¼® ¾ÆÀÌÅÛ »©±â void InitUpgradeItem(); // ¾÷±×·¹ÀÌµå º¸¼® ¾ÆÀÌÅÛ ÃʱâÈ­ void AddTempTaxMoney(unsigned char cType, unsigned long dwMoney); // Àӽà ¼¼±Ý ÃàÀû bool AddMineral(unsigned char cFlag, unsigned short wMineralID, unsigned short wAmount); // ±¤¹° ¼¼±Ý Ãàô void TakeTaxMoney(unsigned char cType, unsigned long dwTaxMoney); // ¼¼±Ý ȸ¼ö bool GainMineral(unsigned short wMineralID, unsigned short wAmount); // ±¤¹° ¼¼±Ý ȸ¼ö bool InsertCastleObject(CSiegeObject* lpCastleObject); // ¼º ¿ÀºêÁ§Æ® Ãß°¡ bool DeleteCastleObject(unsigned long dwCID); // ¼º º´±â »èÁ¦ bool DeleteCastleObject(CSiegeObject* lpCastleObject); // ¼º º´±â »èÁ¦ bool HasCastleArms(unsigned long dwCID); CSiegeObject* GetCastleEmblem() const; CSiegeObject* GetCastleObject(unsigned long dwCastleObjectID); // ¼º ¿ÀºêÁ§Æ® ¾ò¾î¿À±â void UpgradeByEmblem(); void DegradeByEmblem(); void Process(); bool CheckRight(unsigned char cRightType, unsigned long dwCID, unsigned long dwGID); void SetEnableSiege(bool bEnable); void SetTax(unsigned char cType, unsigned char cTax); void SetRight(CastleRight castleRight); bool IsCastleOfNation(unsigned char cNation); bool IsTaxChangable(unsigned char cType); void EnableTaxChange(); bool HasAnotherCastleArms(unsigned long dwCID) const; unsigned long GetCastleID() const { return m_dwCastleID; } unsigned char GetNation() const { return m_cNation; } unsigned char GetNameID() const { return m_cNameID; } unsigned char GetZone() const { return m_cZone; } unsigned char GetChannel() const { return m_cChannel; } const Position& GetBackDoorPos(unsigned long dwPos) const { return m_BackDoorPos[dwPos]; } unsigned char GetTax(unsigned char cType) const { return m_CastleTax[cType].m_cTax; } unsigned long GetTaxMoney(unsigned char cType) const { return m_CastleTax[cType].m_dwTaxMoney; } unsigned char GetSiegeCount() const { return m_cSiegeCount; } unsigned char GetInvincibleCount() const { return m_cInvincibleCount; } unsigned short GetTotalSiegeCount() const { return m_wTotalSiegeCount; } unsigned short GetTotalGainTaxCount() const { return (m_wTotalSiegeCount / Castle::TEMP_TAX_GAIN_COUNT); } unsigned long GetTotalTaxMoney() const { return m_dwTotalTaxMoney; } unsigned short GetUpgradeItemID() const { return m_wItemID; } unsigned char GetUpgradeItemNum() const { return m_cTotalItemNum; } unsigned char GetUpgradeItemNum(int iIndex) const { return m_cItemNum[iIndex]; } unsigned char GetUpgradeStep() const; unsigned short GetMineralNum(unsigned char cMineralType, unsigned short wMineralID) const; void SetBonusRate(float fRate) { m_fBonusRate = fRate; } private: CCastle(const CastleInfoDB& CastleInfo); CastleObjectMap m_CastleObjectMap; // ¼º °ü·Ã ¿ÀºêÁ§Æ®¸Ê unsigned long m_dwCastleID; // ¼º ȤÀº ¸¶À» ID unsigned char m_cNation; // ¼ºÀ» ¼ÒÀ¯ÇÑ ±¹°¡ unsigned char m_cZone; // ¼ºÀÌ ÀÖ´Â Á¸ ¹øÈ£ unsigned char m_cChannel; // ¼ºÀÌ Àִ ä³Î ¹øÈ£ unsigned char m_cNameID; // ¼º À̸§ ID ( 1ºÎÅÍ~~ ) unsigned char m_cSiegeCount; // °ø¼ºÀ» Ä¡¸¥ Ƚ¼ö unsigned char m_cInvincibleCount; // ¹«Àû Ƚ¼ö unsigned short m_wTotalSiegeCount; // ´©Àû °ø¼º Ƚ¼ö unsigned long m_dwTotalTaxMoney; // ´©Àû ¼¼±Ý ȸ¼ö·® unsigned short m_wItemID; // ¾÷±×·¹À̵忡 »ç¿ëÇÒ º¸¼® ¾ÆÀÌÅÛ ID unsigned char m_cTotalItemNum; // ¾÷±×·¹À̵忡 »ç¿ëÇÒ º¸¼® ¾ÆÀÌÅÛ °¹¼ö ÃÑÇÕ unsigned char m_cItemNum[Castle::EMBLEM_UPGRADE_JEWEL_POS_NUM]; // ¾÷±×·¹À̵忡 »ç¿ëÇÒ º¸¼® °³º° ¾ÆÀÌÅÛ °¹¼ö CastleRight m_CastleRight; // ¼º °ü¸® ±ÇÇÑ Position m_BackDoorPos[2]; // µÞ¹® »ç¿ë½Ã ¾È/¹ÛÀ§Ä¡ CastleTaxInfo m_CastleTax[Castle::MAX_TAX_TYPE]; // ¼¼À² ¹× ¼¼±Ý Á¤º¸ MineralInfoMap m_AccumulatedMineralMap; // ´©Àû ±¤¹° ¼¼±Ý MineralInfoMap m_TemporaryMineralMap; // Àӽà ±¤¹° ¼¼±Ý bool m_bEnableSiege; // ÇöÀç °ø¼ºÀÌ °¡´ÉÇѰ¡? float m_fBonusRate; // »ó¡¹° ¾÷±×·¹À̵忡 ÀÇÇÑ ÃÑ ¼¼±Ý ¼öÀÔ º¸³Ê½º (%) unsigned char m_cTempTaxUpdateCount; // Àӽà ¼¼±ÝÀ» DB Áß°è ¼­¹ö·Î º¸³»±âÀü Ä«¿îÅÍ unsigned long m_dwTemporayTempTaxMoney; // DB Áß°è·Î ¾÷µ¥ÀÌÆ®Àü¿¡ ¸ð¾ÆÁø Àӽà ¼¼±Ý friend class CCastleMgr; }; } #endif // _CASTLE_H_