diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Maps/Map.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Maps/Map.h | 12 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_list.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 4 |
4 files changed, 16 insertions, 14 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 912a68e5d31..d727ed452f8 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -3093,9 +3093,11 @@ bool Map::CheckRespawn(RespawnInfo* info) return true; } -void Map::Respawn(RespawnInfo* info, CharacterDatabaseTransaction dbTrans) +void Map::Respawn(RespawnInfo const* info, CharacterDatabaseTransaction dbTrans) { - info->respawnTime = GameTime::GetGameTime(); + if (info->respawnTime <= GameTime::GetGameTime()) + return; + const_cast<RespawnInfo*>(info)->respawnTime = GameTime::GetGameTime(); _respawnTimes.increase(info->handle); SaveRespawnInfoDB(*info, dbTrans); } @@ -3156,14 +3158,14 @@ bool Map::AddRespawnInfo(RespawnInfo const& info) return true; } -static void PushRespawnInfoFrom(std::vector<RespawnInfo*>& data, RespawnInfoMap const& map) +static void PushRespawnInfoFrom(std::vector<RespawnInfo const*>& data, RespawnInfoMap const& map) { data.reserve(data.size() + map.size()); for (auto const& pair : map) data.push_back(pair.second); } -void Map::GetRespawnInfo(std::vector<RespawnInfo*>& respawnData, SpawnObjectTypeMask types) const +void Map::GetRespawnInfo(std::vector<RespawnInfo const*>& respawnData, SpawnObjectTypeMask types) const { if (types & SPAWN_TYPEMASK_CREATURE) PushRespawnInfoFrom(respawnData, _creatureRespawnTimesBySpawnId); @@ -3171,7 +3173,7 @@ void Map::GetRespawnInfo(std::vector<RespawnInfo*>& respawnData, SpawnObjectType PushRespawnInfoFrom(respawnData, _gameObjectRespawnTimesBySpawnId); } -RespawnInfo* Map::GetRespawnInfo(SpawnObjectType type, ObjectGuid::LowType spawnId) const +RespawnInfo const* Map::GetRespawnInfo(SpawnObjectType type, ObjectGuid::LowType spawnId) const { RespawnInfoMap const& map = GetRespawnMapForType(type); auto it = map.find(spawnId); diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 601d0db2bc4..5fffa8a11c4 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -775,18 +775,18 @@ class TC_GAME_API Map : public GridRefManager<NGridType> void DeleteRespawnInfoFromDB(SpawnObjectType type, ObjectGuid::LowType spawnId, CharacterDatabaseTransaction dbTrans = nullptr); public: - void GetRespawnInfo(std::vector<RespawnInfo*>& respawnData, SpawnObjectTypeMask types) const; - RespawnInfo* GetRespawnInfo(SpawnObjectType type, ObjectGuid::LowType spawnId) const; + void GetRespawnInfo(std::vector<RespawnInfo const*>& respawnData, SpawnObjectTypeMask types) const; + RespawnInfo const* GetRespawnInfo(SpawnObjectType type, ObjectGuid::LowType spawnId) const; void Respawn(SpawnObjectType type, ObjectGuid::LowType spawnId, CharacterDatabaseTransaction dbTrans = nullptr) { - if (RespawnInfo* info = GetRespawnInfo(type, spawnId)) + if (RespawnInfo const* info = GetRespawnInfo(type, spawnId)) Respawn(info, dbTrans); } - void Respawn(RespawnInfo* info, CharacterDatabaseTransaction dbTrans = nullptr); + void Respawn(RespawnInfo const* info, CharacterDatabaseTransaction dbTrans = nullptr); void RemoveRespawnTime(SpawnObjectType type, ObjectGuid::LowType spawnId, CharacterDatabaseTransaction dbTrans = nullptr, bool alwaysDeleteFromDB = false) { - if (RespawnInfo* info = GetRespawnInfo(type, spawnId)) - DeleteRespawnInfo(info, dbTrans); + if (RespawnInfo const* info = GetRespawnInfo(type, spawnId)) + DeleteRespawnInfo(const_cast<RespawnInfo*>(info), dbTrans); // Some callers might need to make sure the database doesn't contain any respawn time else if (alwaysDeleteFromDB) DeleteRespawnInfoFromDB(type, spawnId, dbTrans); diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp index 72cff2f033f..d0b0f20a6d0 100644 --- a/src/server/scripts/Commands/cs_list.cpp +++ b/src/server/scripts/Commands/cs_list.cpp @@ -633,7 +633,7 @@ public: handler->PSendSysMessage(LANG_LIST_RESPAWNS_ZONE, EnumUtils::ToTitle(type), zoneName, zoneId); handler->PSendSysMessage(LANG_LIST_RESPAWNS_LISTHEADER); - std::vector<RespawnInfo*> respawns; + std::vector<RespawnInfo const*> respawns; map->GetRespawnInfo(respawns, SpawnObjectTypeMask(1 << type)); for (RespawnInfo const* ri : respawns) { diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 284d592a447..d863fcc494d 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1824,12 +1824,12 @@ public: Cell::VisitGridObjects(player, worker, player->GetGridActivationRange()); // Now handle any that had despawned, but had respawn time logged. - std::vector<RespawnInfo*> data; + std::vector<RespawnInfo const*> data; player->GetMap()->GetRespawnInfo(data, SPAWN_TYPEMASK_ALL); if (!data.empty()) { uint32 const gridId = Trinity::ComputeGridCoord(player->GetPositionX(), player->GetPositionY()).GetId(); - for (RespawnInfo* info : data) + for (RespawnInfo const* info : data) if (info->gridId == gridId) player->GetMap()->Respawn(info->type, info->spawnId); } |