Clone of PhatAC @ https://github.com/floaterxk/PhatAC

World.h 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #pragma once
  2. #include "LandBlock.h"
  3. #include "NetworkDefs.h"
  4. enum eGUIDClass {
  5. ePresetGUID = 0,
  6. ePlayerGUID = 1,
  7. eStaticGUID = 2,
  8. eDynamicGUID = 3,
  9. eItemGUID = 4
  10. };
  11. typedef struct DungeonDesc_s
  12. {
  13. WORD wBlockID;
  14. const char* szDungeonName;
  15. const char* szAuthor;
  16. const char* szDescription;
  17. loc_t origin;
  18. heading_t angles;
  19. } DungeonDesc_t;
  20. typedef struct TeleTownList_s
  21. {
  22. std::string m_teleString; //! String representing the town name
  23. loc_t loc;
  24. heading_t heading;
  25. } TeleTownList_t;
  26. typedef std::vector<TeleTownList_s> TeletownVector;
  27. typedef std::map<DWORD, loc_t> LocationMap;
  28. typedef std::vector<CLandBlock *> LandblockVector;
  29. typedef std::map<WORD, DungeonDesc_t> DungeonDescMap;
  30. //
  31. class CWorld
  32. {
  33. public:
  34. CWorld();
  35. ~CWorld();
  36. void CreateEntity(CPhysicsObj*);
  37. void InsertTeleportLocation(TeleTownList_s l);
  38. std::string GetTeleportList();
  39. TeleTownList_s GetTeleportLocation(std::string location);
  40. void InsertEntity(CPhysicsObj*, BOOL bSilent = FALSE);
  41. void Test();
  42. CLandBlock* ActivateBlock(WORD wHeader);
  43. void RemoveEntity(CPhysicsObj*);
  44. void Think();
  45. void BroadcastPVS(DWORD dwCell, void *_data, DWORD _len, WORD _group = OBJECT_MSG, DWORD ignore_ent = 0, BOOL _game_event = 0);
  46. void BroadcastGlobal(void *_data, DWORD _len, WORD _group, DWORD ignore_ent = 0, BOOL _game_event = 0);
  47. void BroadcastGlobal(BinaryWriter *food, WORD _group, DWORD ignore_ent = 0, BOOL _game_event = 0, BOOL del = 1);
  48. void ClearAllSpawns();
  49. CLandBlock* GetLandblock(WORD wHeader);
  50. loc_t FindDungeonDrop();
  51. loc_t FindDungeonDrop(WORD wBlockID);
  52. LocationMap* GetDungeons();
  53. BOOL DungeonExists(WORD wBlockID);
  54. DungeonDescMap* GetDungeonDescs();
  55. DungeonDesc_t* GetDungeonDesc(WORD wBlockID);
  56. DungeonDesc_t* GetDungeonDesc(const char* szDungeonName);
  57. void SetDungeonDesc(WORD wBlockID, const char* szDungeonName, const char* szAuthor, const char* szDescription, loc_t origin, heading_t angles);
  58. //
  59. void JuggleEntity(WORD, CPhysicsObj* pEntity);
  60. //
  61. PlayerMap* GetPlayers();
  62. CBasePlayer* FindPlayer(DWORD);
  63. CBasePlayer* FindPlayer(const char *);
  64. CPhysicsObj* FindWithinPVS(CPhysicsObj *pSource, DWORD dwGUID);
  65. void EnumNearby(CPhysicsObj *pSource, float fRange, std::list<CPhysicsObj *> *pResults);
  66. //
  67. DWORD GenerateGUID(eGUIDClass);
  68. void SaveWorld();
  69. const char* GetMOTD();
  70. void SetNewGameMode(class CGameMode *pGameMode);
  71. class CGameMode *GetGameMode();
  72. private:
  73. void LoadStateFile();
  74. void SaveStateFile();
  75. void LoadDungeonsFile();
  76. void SaveDungeonsFile();
  77. void LoadMOTD();
  78. void InitializeHintGUIDs();
  79. void EnumerateDungeonsFromCellData();
  80. CLandBlock* m_pBlocks[256 * 256]; // 256 x 256 array of landblocks.
  81. LandblockVector m_vBlocks; // Vector of active landblocks.
  82. LandblockVector m_vSpawns; // Vector of spawned landblocks.
  83. TeletownVector m_vTeleTown; //Vector of Teletowns
  84. PlayerMap m_mAllPlayers; // Global list of players.
  85. LocationMap m_mDungeons; // Global list of dungeons.
  86. DungeonDescMap m_mDungeonDescs; // Dungeon Descriptors
  87. DWORD m_dwHintStaticGUID;
  88. DWORD m_dwHintPlayerGUID;
  89. DWORD m_dwHintItemGUID;
  90. DWORD m_dwHintDynamicGUID;
  91. double m_fLastSave;
  92. std::string m_strMOTD;
  93. class CGameMode *m_pGameMode;
  94. };