#ifndef _SIEGE_OBJECT_MANAGER_H_ #define _SIEGE_OBJECT_MANAGER_H_ #pragma once #include #include #include #include #include #include // Àü¹æ ÂüÁ¶ class CSendStream; class CDBComponent; class CSiegeObjectDB; class CCampDB; class CSiegeObjectDBMgr { public: static CSiegeObjectDBMgr& GetInstance(); // ŸÀÔ Á¤ÀÇ typedef std::map SiegeObjectMap; // < CID, CSiegeObjectDB* > typedef std::map CampMap; // < CampID, CCampDB* > bool Initialize(CDBComponent& DBComponent); void Process(); void UpdateSiegeCount(); // °ø¼º ½Ã°£ Áö³­ Ƚ¼ö Áõ°¡ ¹× ¾÷µ¥ÀÌÆ® void UpdateRewardFame(); // ¸í¼ºÀ» º¸»óÇÑ´Ù. // ¿ùµå ¿þÆù ÆÄ±«Á¤º¸ÀÇ °ø¼º ½Ã°£ Áö³­ Ƚ¼ö Áõ°¡ void DecreaseWeaponRemainSiegeTime(); // °ø¼º ½Ã°£ÀÌ ³¡³ª´Â ½ÃÁ¡¿¡ È£ÃâµÈ´Ù. // DB ¿¡¼­ ÀоîµéÀÎ °ªÀ¸·Î »ý¼ºÇÏ´Â ÇÔ¼ö CSiegeObjectDB* CreateCastleObject(CastleObjectInfoDB& CastleObject); CSiegeObjectDB* CreateCamp(CampInfoDB& CampInfo, unsigned long dwCID=0); CSiegeObjectDB* CreateMiningCamp(CampInfoDB& CampInfo, unsigned long dwCID=0); CSiegeObjectDB* CreateCampShop(CampInfoDB& CampInfo, unsigned long dwCID=0); CSiegeObjectDB* CreateWorldWeapon(CampInfoDB& CampInfo, unsigned long dwCID=0); // °ÔÀÓ¼­¹öÀÇ ¿äûÀ¸·Î »ý¼ºÇؼ­ DB ¿¡ Ãß°¡ÇÏ´Â ÇÔ¼ö CSiegeObjectDB* CreateCamp(unsigned long dwGID, unsigned char cZone, unsigned char cChannel, POS Pos); CSiegeObjectDB* CreateWorldWeapon(unsigned long dwGID, unsigned short wObjectType, unsigned char cZone, unsigned char cChannel, POS Pos); CSiegeObjectDB* CreateSiegeArms(unsigned long dwOwnerID, unsigned char cNation, unsigned char cZone, unsigned char cChannel, unsigned short wObjectType, unsigned char cUpgradeStep, POS Pos); // Get ÇÔ¼ö CCampDB* GetCamp(unsigned long dwCampID); CSiegeObjectDB* GetSiegeObject(unsigned long dwObjectID); unsigned char GetWorldWeaponNation(unsigned char cZone, unsigned char cChannel) const; // ¿ùµå ¿þÆù ¼ÒÀ¯ ±¹°¡ ¾ò±â void DeleteWorldWeaponNation(unsigned char cZone, unsigned char cChannel); // ¿ùµå ¿þÆù ¼ÒÀ¯ ±¹°¡ ÃʱâÈ­ void UpdateWorldWeaponInfo(unsigned char cZone, unsigned char cChannel, unsigned char cOwenrNation, unsigned char cDestroyedWeaponNation, unsigned char cRemainSiegeTime); bool HasCampByGID(unsigned long dwGID, unsigned long dwExceptCampID=0); // °´Ã¼ »èÁ¦ ÇÔ¼ö bool DeleteSiegeObject(unsigned long dwCID); bool DeleteSiegeObject(CSiegeObjectDB* lpObject); CampMap::iterator DeleteCamp(unsigned long dwCampID); int DestroyCamp(unsigned long dwGID); // ÇØ´ç ±æµåÀÇ ÁøÁö¸¦ ¸ðµÎ ÆÄ±«, ÆÄ±«ÇÑ ÁøÁö¼ö¸¦ ¸®ÅÏ void DestroySiegeArms(unsigned long dwOnwerCID); // ±æµå Å»Åð½Ã ÇØ´ç ij¸¯ÅÍÀÇ °ø¼ºº´±â¸¦ ¾ÆÀÌÅÛÀ¸·Î µ¹·ÁÁÖ±â void DestoryAllSiegeArms(); // °ø¼º ½Ã°£ÀÌ ³¡³µÀ»¶§ ¾ÆÀÌÅÛÀ¸·Î µ¹·ÁÁÖ±â // ¿ä»õ °´Ã¼ º¯Çü ÇÔ¼ö bool ChangeCampType(unsigned long dwCampID, unsigned short wChangeType); // GameServer ·ÎÀÇ Send ÇÔ¼ö void SendWorldWeaponInfo(CSendStream& SendStream, unsigned char cZone, unsigned char cChannel); void SendCampInfo(CSendStream& SendStream, unsigned char cZone, unsigned char cChannel); void SendSiegeArmsInfo(CSendStream& SendStream, unsigned char cZone, unsigned char cChannel); void SendProcessMining(unsigned long dwProcessType); bool SerializeOutCastleObject(CSiegeObjectDB* lpObject_In, char* lpBuffer_Out, unsigned short& wBufferSize_Out); private: CSiegeObjectDBMgr(); ~CSiegeObjectDBMgr(); // CSiegeObjectDBMgr ³»¿¡¼­¸¸ »ç¿ëÇϴ ŸÀÔ Á¤ÀÇ typedef struct _WorldWeaponInfo { unsigned char m_cWorldWeaponNation; // ÇöÀç ÀÖ´Â ¿ùµå ¿þÆùÀÇ ¼ÒÀ¯ ±¹°¡ unsigned char m_cKarRemainSiegeTime; // Ä«¸£Å×¶õÆ® ¿ùµå ¿þÆùÀÌ ºÎ¼­Áö°í³­ ÈÄ Áö³ª¾ßÇÒ °ø¼º½Ã°£ unsigned char m_cMerRemainSiegeTime; // ¸Þ¸£Ä«µð¾Æ ¿ùµå ¿þÆùÀÌ ºÎ¼­Áö°í³­ ÈÄ Áö³ª¾ßÇÒ °ø¼º½Ã°£ } WorldWeaponInfo; typedef std::map WorldWeaponInfoMap; // < dwZoneChannel, WorldWeaponInfo > // dwZoneChannel : Zone(16bit) | Channel(16bit) bool ReadCastleObjectInfoDB(); bool ReadWorldWeaponInfoDB(); bool ReadCampInfoDB(); unsigned long GetBlankIndex(); void CreateDummyCamp(); // ½ÇÁ¦·Î °´Ã¼¸¦ »ý¼ºÇÏ´Â ÇÔ¼ö CSiegeObjectDB* CreateCastleObjectDB(const CastleObjectInfoDB& CastleObject); CSiegeObjectDB* CreateCampDB(const CampInfoDB& CampInfo); CSiegeObjectDB* CreateMiningCampDB(const CampInfoDB& CampInfo); CSiegeObjectDB* CreateCampShopDB(const CampInfoDB& CampInfo); CSiegeObjectDB* CreateWorldWeaponDB(const CampInfoDB& CampInfo); CSiegeObjectDB* CreateCampDB(unsigned long dwCampID, unsigned long dwGID, unsigned char cZone, unsigned char cChannel, Position Pos); CSiegeObjectDB* CreateWorldWeaponDB(unsigned long dwCampID, unsigned long dwGID, unsigned short wObjectType, unsigned char cZone, unsigned char cChannel, Position Pos); CSiegeObjectDB* CreateSiegeArmsDB(unsigned long dwOwnerID, unsigned char cNation, unsigned short wObjectType, unsigned char cUpgradeStep, unsigned char cZone, unsigned char cChannel, Position Pos); void DeleteSiegeObjectDB(CSiegeObjectDB* lpSiegeObjectDB); SiegeObjectMap m_SiegeObjectMap; CampMap m_CampMap; WorldWeaponInfoMap m_WorldWeaponInfoMap; CDBComponent* m_lpDBComponent; }; #endif // _SIEGE_OBJECT_MANAGER_H_