#ifndef _CHARACTER_RESPAWN_MANAGER_H_ #define _CHARACTER_RESPAWN_MANAGER_H_ #pragma once #include class CCharRespawnMgr { public: enum Const { RESPAWN_DELAY_SEC = 5, SEC_PER_HOUR = 3600, SEC_PER_MIN = 60, MIN_PER_HOUR = 60 }; enum eReturn { RET_FALSE = 0, RET_TRUE = 1, RET_TOWN = 2 }; enum RespawnType { RST_TOWN = 0, // Áװųª Æ÷Å» ÀÌ¿ëÀ¸·Î ¸¶À»¿¡¼­ ºÎȰ (ÀϹÝÀûÀÎ ¸®½ºÆù) RST_FORTRESS = 1, // Áװųª Æ÷Å» ÀÌ¿ëÀ¸·Î ¿ä»õ³ª ¼º ¹× ´ÙÅ© Ä«³ª¹ø ¼®»ó¿¡¼­ ºÎȰ RST_RESURRECTION = 2, // ·¹Àú·º¼ÇÀ¸·Î ºÎȰ RST_BATTLE = 3 // ¹èƲ ±×¶ó¿îµå³ª ¹èƲ ·ÎÇÑ¿¡¼­ ¸®½ºÆù ½Ã }; struct RespawnProtoType { unsigned long m_dwTownID; // ¸¶À», ±æµå ¿ä»õ, ¼º ID, ´ÙÅ© Ä«³ª¹ø ¼®»ó ID(0x800x0000) unsigned long m_dwGID; // ±æµå ¿ä»õ unsigned char m_cNation; // ±¹Àû (ÈÞ¸Õ, ¾ÆÄ­, Á¦3¼¼·Â) unsigned char m_cZone; // Á¸ std::vector m_RespawnPosList; // ¸®½ºÆù À§Ä¡ }; struct RespawnCharInfo { unsigned long m_dwCID; unsigned long m_dwRemainSec; RespawnCharInfo(unsigned long dwCID, unsigned long dwSec) : m_dwCID(dwCID), m_dwRemainSec(dwSec) { } }; typedef std::list RespawnCharList; typedef std::map RespawnProtoTypeMap; typedef std::map RespawnCharMap; ~CCharRespawnMgr(); static CCharRespawnMgr& GetInstance(); // ---------------------------------------------------------------------------- // ¸®½ºÆù ½ºÅ©¸³Æ® (RespawnScript.txt) // ½ºÅ©¸³Æ®ÀÇ 0x40001000 Àº Castle::CASTLE_BIT | (¼ºÀÇ NameID << Castle::CASTLE_NAME_BIT_SHIFT) ÀÔ´Ï´Ù. // ÀÌÈÄ¿¡ ¼º Á¤º¸¸¦ DBÁß°è ¼­¹ö·ÎºÎÅÍ ¹Þ¾Æ¿Í¼­ Map Á¤º¸¿¡ Á¦´ë·ÎµÈ CastleID °¡ key ·Î µé¾î°©´Ï´Ù. bool LoadRespawnFromFile(const char* szFileName = 0); // ¿ä»õ ¸®½ºÆù Æ÷ÀÎÆ® »ç¿ë bool AddCampRespawnPoint(unsigned long dwCampID, unsigned long dwGID, const Position& RespawnPos); bool DeleteCampRespawnPoint(unsigned long dwCampID); // ´ÙÅ© Ä«³ª¹ø ¼®»ó ¸®½ºÆù Æ÷ÀÎÆ® »ç¿ë // TownID ·Î 0x80010000 ó·³ Castle::STATUE_BIT | (¼®»ó Index) << 16) ÀÔ´Ï´Ù. bool AddRealmStatueRespawnPoint(unsigned long dwIndex, unsigned char cNation, const Position& RespawnPos); bool DeleteRealmStatueRespawnPoint(unsigned long dwIndex); // ¼º ¸®½ºÆù Æ÷ÀÎÆ® »ç¿ë // ¼ö¼ºÃø ¼º ¸®½ºÆù Æ÷ÀÎÆ® Ű : CASTLE_BIT | (NameID << Castle::CASTLE_NAME_BIT_SHIFT) // °ø¼ºÃø Àӽà ¸®½ºÆù Æ÷ÀÎÆ® Ű : CASTLE_BIT | SIEGE_BIT | (NameID << Castle::CASTLE_NAME_BIT_SHIFT) | ID(°¹¼öº°) bool SetCastleRespawnPointNation(unsigned long dwCastleNameID, unsigned char cNation); eReturn AddCharacter(unsigned long dwTownID, unsigned long dwCID); // void DelCharacter(unsigned long dwTownID, unsigned long dwCID); void ProcessRespawn(); const Position GetDefaultRespawnPos(unsigned char cNation); const Position GetRespawnPos(unsigned long dwTownID); const Position GetTownRespawnPos(unsigned char cZone, unsigned char cNation); // ---------------------------------------------------------------------------- // Send ÇÔ¼ö bool SendRespawnInfo(unsigned long dwCID); bool SendRespawnAreaInfo(unsigned long dwCID, unsigned long dwTownID, bool bCount=false); private: CCharRespawnMgr(); RespawnProtoTypeMap m_ProtoTypeList; // ÇöÀç Á¸ÀÇ ¸®½ºÆù Æ÷ÀÎÆ® Á¤º¸ RespawnProtoTypeMap m_AllZoneTownList; // Àü Á¸ÀÇ ¸¶À» ¸®½ºÆù Æ÷ÀÎÆ® Á¤º¸ RespawnCharMap m_CharList; static const char* ms_szRespawnScriptFileName; }; #endif