hfwhite

war_map.h

Jul 28th, 2025
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.37 KB | Gaming | 0 0
  1. #ifndef __GUILD_WAR_MAP_MANAGER_H
  2. #define __GUILD_WAR_MAP_MANAGER_H
  3.  
  4. #include "constants.h"
  5. #include "guild.h"
  6.  
  7. enum EWarMapTypes
  8. {
  9.     WAR_MAP_TYPE_NORMAL,
  10.     WAR_MAP_TYPE_FLAG,
  11. };
  12.  
  13. typedef struct SWarMapInfo
  14. {
  15.     BYTE        bType;
  16.     long        lMapIndex;
  17.     PIXEL_POSITION  posStart[3];
  18. } TWarMapInfo;
  19.  
  20. namespace warmap
  21. {
  22.     enum
  23.     {
  24.         WAR_FLAG_VNUM_START = 20035,
  25.         WAR_FLAG_VNUM_END = 20037,
  26.  
  27.         WAR_FLAG_VNUM0 = 20035,
  28.         WAR_FLAG_VNUM1 = 20036,
  29.         WAR_FLAG_VNUM2 = 20037,
  30.  
  31.         WAR_FLAG_BASE_VNUM = 20038
  32.     };
  33.  
  34.     inline bool IsWarFlag(DWORD dwVnum)
  35.     {
  36.         if (dwVnum >= WAR_FLAG_VNUM_START && dwVnum <= WAR_FLAG_VNUM_END)
  37.             return true;
  38.  
  39.         return false;
  40.     }
  41.  
  42.     inline bool IsWarFlagBase(DWORD dwVnum)
  43.     {
  44.         return dwVnum == WAR_FLAG_BASE_VNUM ? true : false;
  45.     }
  46. };
  47.  
  48. class CWarMap
  49. {
  50.     public:
  51.         friend class CGuild;
  52.  
  53.         CWarMap(long lMapIndex, const TGuildWarInfo & r_info, TWarMapInfo * pkWarMapInfo, DWORD dwGuildID1, DWORD dwGuildID2);
  54.         ~CWarMap();
  55.  
  56.         bool    GetTeamIndex(DWORD dwGuild, BYTE & bIdx);
  57.  
  58.         void    IncMember(LPCHARACTER ch);
  59.         void    DecMember(LPCHARACTER ch);
  60.         DWORD    GetStartTime();
  61.         bool    GetBeginProtectionStatus();
  62.         void    SetBeginProtectionStatus(bool bNewStat);
  63.  
  64.         CGuild * GetGuild(BYTE bIdx);
  65.         DWORD   GetGuildID(BYTE bIdx);
  66.         int     GetCurrentPlayer(BYTE bIdx);
  67.         BYTE    GetType();
  68.         long    GetMapIndex();
  69.         DWORD   GetGuildOpponent(LPCHARACTER ch);
  70.  
  71.         DWORD   GetWinnerGuild();
  72.         void    UsePotion(LPCHARACTER ch, LPITEM item);
  73.  
  74.         void    Draw(); // °­Á¦ ¹«½ÂºÎ ó¸®
  75.         void    Timeout();
  76.         void    CheckWarEnd();
  77.         bool    SetEnded();
  78.         void    ExitAll();
  79.  
  80.         void    SetBeginEvent(LPEVENT pkEv);
  81.         void    SetBeginProtectionEvent(LPEVENT pkEv);
  82.         void    SetTimeoutEvent(LPEVENT pkEv);
  83.         void    SetEndEvent(LPEVENT pkEv);
  84.         void    SetResetFlagEvent(LPEVENT pkEv);
  85.  
  86.         void    UpdateScore(DWORD g1, int score1, DWORD g2, int score2);
  87.         bool    CheckScore();
  88.  
  89.         int GetRewardGold(BYTE bWinnerIdx);
  90.  
  91.         bool    GetGuildIndex(DWORD dwGuild, int& iIndex);
  92.  
  93.         void    Packet(const void * pv, int size);
  94.         void    Notice(const char * psz);
  95.         void    SendWarPacket(LPDESC d);
  96.         void    SendScorePacket(BYTE bIdx, LPDESC d = NULL);
  97.  
  98.         void    OnKill(LPCHARACTER killer, LPCHARACTER ch);
  99.  
  100.         void    AddFlag(BYTE bIdx, DWORD x=0, DWORD y=0);
  101.         void    AddFlagBase(BYTE bIdx, DWORD x=0, DWORD y=0);
  102.         void    RemoveFlag(BYTE bIdx);
  103.         bool    IsFlagOnBase(BYTE bIdx);
  104.         void    ResetFlag();
  105.  
  106.     private:
  107.         void    UpdateUserCount();
  108.     public:
  109.         void    SendKillNotice(const char * c_szKillerName, const char * c_szVictimName, DWORD dwKillerRace, DWORD dwVictimRace);
  110.  
  111.     private:
  112.         TWarMapInfo m_kMapInfo;
  113.         bool        m_bEnded;
  114.         bool        m_bBeginProtectionCompleted;
  115.         DWORD         m_dwFirstLogonTime;
  116.  
  117.         LPEVENT m_pkBeginEvent;
  118.         LPEVENT m_pkBeginProtectionEvent;
  119.         LPEVENT m_pkTimeoutEvent;
  120.         LPEVENT m_pkEndEvent;
  121.         LPEVENT m_pkResetFlagEvent;
  122.  
  123.         typedef struct STeamData
  124.         {
  125.             DWORD   dwID;
  126.             CGuild * pkGuild;
  127.             int     iMemberCount;
  128.             int     iUsePotionPrice;
  129.             int     iScore;
  130.             LPCHARACTER pkChrFlag;
  131.             LPCHARACTER pkChrFlagBase;
  132.  
  133.             std::set<DWORD> set_pidJoiner;
  134.  
  135.             void Initialize();
  136.  
  137.             int GetAccumulatedJoinerCount(); // ´©ÀûµÈ Âü°¡ÀÚ ¼ö
  138.             int GetCurJointerCount(); // ÇöÀç Âü°¡ÀÚ ¼ö
  139.  
  140.             void AppendMember(LPCHARACTER ch);
  141.             void RemoveMember(LPCHARACTER ch);
  142.         } TeamData;
  143.  
  144.         TeamData    m_TeamData[2];
  145.         int     m_iObserverCount;
  146.         DWORD       m_dwStartTime;
  147.         BYTE        m_bTimeout;
  148.  
  149.         TGuildWarInfo   m_WarInfo;
  150.  
  151.         CHARACTER_SET m_set_pkChr;
  152. };
  153.  
  154. class CWarMapManager : public singleton<CWarMapManager>
  155. {
  156.     public:
  157.         CWarMapManager();
  158.         virtual ~CWarMapManager();
  159.  
  160.         bool        LoadWarMapInfo(const char * c_pszFileName);
  161.         bool        IsWarMap(long lMapIndex);
  162.         TWarMapInfo *   GetWarMapInfo(long lMapIndex);
  163.         bool        GetStartPosition(long lMapIndex, BYTE bIdx, PIXEL_POSITION & pos);
  164.  
  165.         template <typename Func> Func for_each(Func f);
  166.         long        CreateWarMap(const TGuildWarInfo & r_WarInfo, DWORD dwGuildID1, DWORD dwGuildID2);
  167.         void        DestroyWarMap(CWarMap* pMap);
  168.         CWarMap *   Find(long lMapIndex);
  169.         int     CountWarMap() { return m_mapWarMap.size(); }
  170.  
  171.         void        OnShutdown();
  172.  
  173.     private:
  174.         std::map<long, TWarMapInfo *> m_map_kWarMapInfo;
  175.         std::map<long, CWarMap *> m_mapWarMap;
  176. };
  177.  
  178. template <typename Func> Func CWarMapManager::for_each(Func f)
  179. {
  180.     for (itertype(m_mapWarMap) it = m_mapWarMap.begin(); it != m_mapWarMap.end(); ++it)
  181.         f(it->second);
  182.  
  183.     return f;
  184. }
  185.  
  186. #endif
Tags: metin2
Advertisement
Add Comment
Please, Sign In to add comment