Guest User

char_manager.h

a guest
Sep 5th, 2023
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.49 KB | None | 0 0
  1. #ifndef __INC_METIN_II_GAME_CHARACTER_MANAGER_H__
  2. #define __INC_METIN_II_GAME_CHARACTER_MANAGER_H__
  3.  
  4. #include "../../common/stl.h"
  5. #include "../../common/length.h"
  6. #include "vid.h"
  7.  
  8. class CDungeon;
  9. class CHARACTER;
  10. class CharacterVectorInteractor;
  11. class CHARACTER_MANAGER : public singleton<CHARACTER_MANAGER>
  12. {
  13. public:
  14. typedef TR1_NS::unordered_map<std::string, LPCHARACTER> NAME_MAP;
  15. CHARACTER_MANAGER();
  16. virtual ~CHARACTER_MANAGER();
  17. void Destroy();
  18. void GracefulShutdown();
  19. DWORD AllocVID();
  20. LPCHARACTER CreateCharacter(const char * name, DWORD dwPID = 0);
  21. void DestroyCharacter(LPCHARACTER ch);
  22. void DestroyCharacterInMap(long lMapIndex);
  23. void Update(int iPulse);
  24. LPCHARACTER SpawnMob(DWORD dwVnum, long lMapIndex, long x, long y, long z, bool bSpawnMotion = false, int iRot = -1, bool bShow = true);
  25. LPCHARACTER SpawnMobRange(DWORD dwVnum, long lMapIndex, int sx, int sy, int ex, int ey, bool bIsException=false, bool bSpawnMotion = false , bool bAggressive = false);
  26. LPCHARACTER SpawnGroup(DWORD dwVnum, long lMapIndex, int sx, int sy, int ex, int ey, LPREGEN pkRegen = NULL, bool bAggressive_ = false, LPDUNGEON pDungeon = NULL);
  27. bool SpawnGroupGroup(DWORD dwVnum, long lMapIndex, int sx, int sy, int ex, int ey, LPREGEN pkRegen = NULL, bool bAggressive_ = false, LPDUNGEON pDungeon = NULL);
  28. bool SpawnMoveGroup(DWORD dwVnum, long lMapIndex, int sx, int sy, int ex, int ey, int tx, int ty, LPREGEN pkRegen = NULL, bool bAggressive_ = false);
  29. LPCHARACTER SpawnMobRandomPosition(DWORD dwVnum, long lMapIndex);
  30. void SelectStone(LPCHARACTER pkChrStone);
  31. NAME_MAP & GetPCMap() { return m_map_pkPCChr; }
  32. LPCHARACTER Find(DWORD dwVID);
  33. LPCHARACTER Find(const VID & vid);
  34. LPCHARACTER FindPC(const char * name);
  35. LPCHARACTER FindByPID(DWORD dwPID);
  36. bool AddToStateList(LPCHARACTER ch);
  37. void RemoveFromStateList(LPCHARACTER ch);
  38. void DelayedSave(LPCHARACTER ch);
  39. bool FlushDelayedSave(LPCHARACTER ch);
  40. void ProcessDelayedSave();
  41. template<class Func> Func for_each_pc(Func f);
  42. void KillLog(DWORD dwVnum);
  43. void RegisterRaceNum(DWORD dwVnum);
  44. void RegisterRaceNumMap(LPCHARACTER ch);
  45. void UnregisterRaceNumMap(LPCHARACTER ch);
  46. bool GetCharactersByRaceNum(DWORD dwRaceNum, CharacterVectorInteractor & i);
  47. LPCHARACTER FindSpecifyPC(unsigned int uiJobFlag, long lMapIndex, LPCHARACTER except=NULL, int iMinLevel = 1, int iMaxLevel = PLAYER_MAX_LEVEL_CONST);
  48. void SetMobItemRate(int value) { m_iMobItemRate = value; }
  49. void SetMobDamageRate(int value) { m_iMobDamageRate = value; }
  50. void SetMobGoldAmountRate(int value) { m_iMobGoldAmountRate = value; }
  51. void SetMobGoldDropRate(int value) { m_iMobGoldDropRate = value; }
  52. void SetMobExpRate(int value) { m_iMobExpRate = value; }
  53. void SetMobItemRatePremium(int value) { m_iMobItemRatePremium = value; }
  54. void SetMobGoldAmountRatePremium(int value) { m_iMobGoldAmountRatePremium = value; }
  55. void SetMobGoldDropRatePremium(int value) { m_iMobGoldDropRatePremium = value; }
  56. void SetMobExpRatePremium(int value) { m_iMobExpRatePremium = value; }
  57. void SetUserDamageRatePremium(int value) { m_iUserDamageRatePremium = value; }
  58. void SetUserDamageRate(int value ) { m_iUserDamageRate = value; }
  59. int GetMobItemRate(LPCHARACTER ch);
  60. int GetMobDamageRate(LPCHARACTER ch);
  61. int GetMobGoldAmountRate(LPCHARACTER ch);
  62. int GetMobGoldDropRate(LPCHARACTER ch);
  63. int GetMobExpRate(LPCHARACTER ch);
  64. int GetUserDamageRate(LPCHARACTER ch);
  65. void SendScriptToMap(long lMapIndex, const std::string & s);
  66. bool BeginPendingDestroy();
  67. void FlushPendingDestroy();
  68. private:
  69. int m_iMobItemRate;
  70. int m_iMobDamageRate;
  71. int m_iMobGoldAmountRate;
  72. int m_iMobGoldDropRate;
  73. int m_iMobExpRate;
  74. int m_iMobItemRatePremium;
  75. int m_iMobGoldAmountRatePremium;
  76. int m_iMobGoldDropRatePremium;
  77. int m_iMobExpRatePremium;
  78. int m_iUserDamageRate;
  79. int m_iUserDamageRatePremium;
  80. int m_iVIDCount;
  81. TR1_NS::unordered_map<DWORD, LPCHARACTER> m_map_pkChrByVID;
  82. TR1_NS::unordered_map<DWORD, LPCHARACTER> m_map_pkChrByPID;
  83. NAME_MAP m_map_pkPCChr;
  84. char dummy1[1024];
  85. CHARACTER_SET m_set_pkChrState;
  86. CHARACTER_SET m_set_pkChrForDelayedSave;
  87. LPCHARACTER m_pkChrSelectedStone;
  88. std::map<DWORD, DWORD> m_map_dwMobKillCount;
  89. std::set<DWORD> m_set_dwRegisteredRaceNum;
  90. std::map<DWORD, CHARACTER_SET> m_map_pkChrByRaceNum;
  91. bool m_bUsePendingDestroy;
  92. CHARACTER_SET m_set_pkChrPendingDestroy;
  93. #ifdef ENABLE_REWARD_SYSTEM
  94.  
  95. public:
  96. void LoadRewardData();
  97. void SetRewardData(BYTE rewardIndex, const char* playerName, bool isP2P);
  98. bool IsRewardEmpty(BYTE rewardIndex);
  99. void SendRewardInfo(LPCHARACTER ch);
  100. protected:
  101. std::map<BYTE, TRewardInfo> m_rewardData;
  102.  
  103. #endif
  104. };
  105.  
  106. template<class Func>
  107. Func CHARACTER_MANAGER::for_each_pc(Func f)
  108. {
  109. TR1_NS::unordered_map<DWORD, LPCHARACTER>::iterator it;
  110.  
  111. for (it = m_map_pkChrByPID.begin(); it != m_map_pkChrByPID.end(); ++it)
  112. f(it->second);
  113.  
  114. return f;
  115. }
  116.  
  117. class CharacterVectorInteractor : public CHARACTER_VECTOR
  118. {
  119. public:
  120. CharacterVectorInteractor() : m_bMyBegin(false) { }
  121. CharacterVectorInteractor(const CHARACTER_SET & r);
  122. virtual ~CharacterVectorInteractor();
  123. private:
  124. bool m_bMyBegin;
  125. };
  126.  
  127. #define M2_DESTROY_CHARACTER(ptr) CHARACTER_MANAGER::instance().DestroyCharacter(ptr)
  128. #endif
  129.  
  130.  
Advertisement
Add Comment
Please, Sign In to add comment