diff options
author | jackpoz <giacomopoz@gmail.com> | 2020-09-04 22:01:25 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-02-05 12:04:35 +0100 |
commit | d561a691220c2c0856f63ff6cbcd4d0af8c761d5 (patch) | |
tree | 715a20928ae10e5487da34435bbf1f4e52673641 /src | |
parent | 4dff5bd09b73c0a02cf8a95f9e4f528e74a5ef50 (diff) |
Scripts/Obsidian Sanctum: Fix portals not being visible
Change NearestGameObjectEntryInObjectRangeCheck to allow returning GameObject not spawned.
Fixes other occurrences where a similar issue exists.
(cherry picked from commit ca2159bf405fb96a8eba9f1e58bda7ee6c7eb247)
Diffstat (limited to 'src')
6 files changed, 10 insertions, 9 deletions
diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index b53915c47f5..4f66543f1b9 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -388,9 +388,9 @@ inline Creature* GetClosestCreatureWithEntry(WorldObject* source, uint32 entry, return source->FindNearestCreature(entry, maxSearchRange, alive); } -inline GameObject* GetClosestGameObjectWithEntry(WorldObject* source, uint32 entry, float maxSearchRange) +inline GameObject* GetClosestGameObjectWithEntry(WorldObject* source, uint32 entry, float maxSearchRange, bool spawnedOnly = true) { - return source->FindNearestGameObject(entry, maxSearchRange); + return source->FindNearestGameObject(entry, maxSearchRange, spawnedOnly); } template <typename Container> diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 1ac5fc71a49..302a52c885e 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2025,10 +2025,10 @@ Creature* WorldObject::FindNearestCreature(uint32 entry, float range, bool alive return creature; } -GameObject* WorldObject::FindNearestGameObject(uint32 entry, float range) const +GameObject* WorldObject::FindNearestGameObject(uint32 entry, float range, bool spawnedOnly) const { GameObject* go = nullptr; - Trinity::NearestGameObjectEntryInObjectRangeCheck checker(*this, entry, range); + Trinity::NearestGameObjectEntryInObjectRangeCheck checker(*this, entry, range, spawnedOnly); Trinity::GameObjectLastSearcher<Trinity::NearestGameObjectEntryInObjectRangeCheck> searcher(this, go, checker); Cell::VisitGridObjects(this, searcher, range); return go; diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 948c29a87e8..0cf09067b07 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -582,7 +582,7 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation void SummonCreatureGroup(uint8 group, std::list<TempSummon*>* list = nullptr); Creature* FindNearestCreature(uint32 entry, float range, bool alive = true) const; - GameObject* FindNearestGameObject(uint32 entry, float range) const; + GameObject* FindNearestGameObject(uint32 entry, float range, bool spawnedOnly = true) const; GameObject* FindNearestUnspawnedGameObject(uint32 entry, float range) const; GameObject* FindNearestGameObjectOfType(GameobjectTypes type, float range) const; Player* SelectNearestPlayer(float distance) const; diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index bff2785ca1f..bd8bcbe6c07 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -794,11 +794,11 @@ namespace Trinity class NearestGameObjectEntryInObjectRangeCheck { public: - NearestGameObjectEntryInObjectRangeCheck(WorldObject const& obj, uint32 entry, float range) : i_obj(obj), i_entry(entry), i_range(range) { } + NearestGameObjectEntryInObjectRangeCheck(WorldObject const& obj, uint32 entry, float range, bool spawnedOnly = true) : i_obj(obj), i_entry(entry), i_range(range), i_spawnedOnly(spawnedOnly) { } bool operator()(GameObject* go) { - if (go->isSpawned() && go->GetEntry() == i_entry && go->GetGUID() != i_obj.GetGUID() && i_obj.IsWithinDistInMap(go, i_range)) + if ((!i_spawnedOnly || go->isSpawned()) && go->GetEntry() == i_entry && go->GetGUID() != i_obj.GetGUID() && i_obj.IsWithinDistInMap(go, i_range)) { i_range = i_obj.GetDistance(go); // use found GO range as new range limit for next check return true; @@ -810,6 +810,7 @@ namespace Trinity WorldObject const& i_obj; uint32 i_entry; float i_range; + bool i_spawnedOnly; // prevent clone this object NearestGameObjectEntryInObjectRangeCheck(NearestGameObjectEntryInObjectRangeCheck const&) = delete; diff --git a/src/server/scripts/Kalimdor/zone_winterspring.cpp b/src/server/scripts/Kalimdor/zone_winterspring.cpp index 027bfd3f333..42d087b5e8e 100644 --- a/src/server/scripts/Kalimdor/zone_winterspring.cpp +++ b/src/server/scripts/Kalimdor/zone_winterspring.cpp @@ -413,7 +413,7 @@ public: break; case SAY_PRIESTESS_ALTAR_8: // make the gem respawn - if (GameObject* gem = GetClosestGameObjectWithEntry(me, GO_ELUNE_GEM, 10.0f)) + if (GameObject* gem = GetClosestGameObjectWithEntry(me, GO_ELUNE_GEM, 10.0f, false)) { if (gem->isSpawned()) break; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp index 599f0432779..c49a223680a 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp @@ -250,7 +250,7 @@ struct dummy_dragonAI : public ScriptedAI // using a grid search here seem to be more efficient than caching all four guids // in instance script and calculate range to each. - GameObject* portal = me->FindNearestGameObject(GO_TWILIGHT_PORTAL, 50.0f); + GameObject* portal = me->FindNearestGameObject(GO_TWILIGHT_PORTAL, 50.0f, false); switch (me->GetEntry()) { |