diff options
| author | Kittnz <Kittnz@users.noreply.github.com> | 2019-01-16 20:48:01 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-01-16 20:48:01 +0100 |
| commit | 83e6fde0664cf8ab0c425e574781262893e7b226 (patch) | |
| tree | 4aecb8e4560b988907581d1ff11cd507b9fee795 /src/server/game/Entities/GameObject | |
| parent | e0c939b0d411fae5db0a19939ee9aa67b614db74 (diff) | |
Core/Objects: increase sight range of all Infinite, Gigantic and Large objects & correct general default visibility distance (#22892)
Note: This does not make the object active.
Some info on range
https://trinitycore.atlassian.net/wiki/spaces/tc/pages/74950924/Lua+Scene+Script+Documentation#LuaSceneScriptDocumentation-ActorAOIRange
#21111 #21681 #22891
Thanks Kinzcool & Kelno
Diffstat (limited to 'src/server/game/Entities/GameObject')
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 12 | ||||
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObjectData.h | 54 |
2 files changed, 66 insertions, 0 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 2e15c25baa5..7f07e5f2930 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -400,6 +400,18 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD } } + // Check if GameObject is Infinite + if (goInfo->IsInfiniteGameObject()) + SetVisibilityDistanceOverride(VisibilityDistanceType::Infinite); + + // Check if GameObject is Gigantic + if (goInfo->IsGiganticGameObject()) + SetVisibilityDistanceOverride(VisibilityDistanceType::Gigantic); + + // Check if GameObject is Large + if (goInfo->IsLargeGameObject()) + SetVisibilityDistanceOverride(VisibilityDistanceType::Large); + return true; } diff --git a/src/server/game/Entities/GameObject/GameObjectData.h b/src/server/game/Entities/GameObject/GameObjectData.h index 873e2076ea2..5944f07654a 100644 --- a/src/server/game/Entities/GameObject/GameObjectData.h +++ b/src/server/game/Entities/GameObject/GameObjectData.h @@ -850,6 +850,60 @@ struct GameObjectTemplate default: return 0; } } + + bool IsInfiniteGameObject() const + { + switch (type) + { + case GAMEOBJECT_TYPE_DOOR: return door.InfiniteAOI != 0; + case GAMEOBJECT_TYPE_FLAGSTAND: return flagStand.InfiniteAOI != 0; + case GAMEOBJECT_TYPE_FLAGDROP: return flagDrop.InfiniteAOI != 0; + case GAMEOBJECT_TYPE_TRAPDOOR: return trapdoor.InfiniteAOI != 0; + case GAMEOBJECT_TYPE_NEW_FLAG: return newflag.InfiniteAOI != 0; + default: return false; + } + } + + bool IsGiganticGameObject() const + { + switch (type) + { + case GAMEOBJECT_TYPE_DOOR: return door.GiganticAOI != 0; + case GAMEOBJECT_TYPE_BUTTON: return button.GiganticAOI != 0; + case GAMEOBJECT_TYPE_QUESTGIVER: return questgiver.GiganticAOI != 0; + case GAMEOBJECT_TYPE_CHEST: return chest.GiganticAOI != 0; + case GAMEOBJECT_TYPE_GENERIC: return generic.GiganticAOI != 0; + case GAMEOBJECT_TYPE_TRAP: return trap.GiganticAOI != 0; + case GAMEOBJECT_TYPE_SPELL_FOCUS: return spellFocus.GiganticAOI != 0; + case GAMEOBJECT_TYPE_GOOBER: return goober.GiganticAOI != 0; + case GAMEOBJECT_TYPE_SPELLCASTER: return spellCaster.GiganticAOI != 0; + case GAMEOBJECT_TYPE_FLAGSTAND: return flagStand.GiganticAOI != 0; + case GAMEOBJECT_TYPE_FLAGDROP: return flagDrop.GiganticAOI != 0; + case GAMEOBJECT_TYPE_CONTROL_ZONE: return controlZone.GiganticAOI != 0; + case GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY: return dungeonDifficulty.GiganticAOI != 0; + case GAMEOBJECT_TYPE_TRAPDOOR: return trapdoor.GiganticAOI != 0; + case GAMEOBJECT_TYPE_NEW_FLAG: return newflag.GiganticAOI != 0; + case GAMEOBJECT_TYPE_CAPTURE_POINT: return capturePoint.GiganticAOI != 0; + case GAMEOBJECT_TYPE_GARRISON_SHIPMENT: return garrisonShipment.GiganticAOI != 0; + case GAMEOBJECT_TYPE_UI_LINK: return UILink.GiganticAOI != 0; + case GAMEOBJECT_TYPE_GATHERING_NODE: return gatheringNode.GiganticAOI != 0; + default: return false; + } + } + + bool IsLargeGameObject() const + { + switch (type) + { + case GAMEOBJECT_TYPE_CHEST: return chest.LargeAOI != 0; + case GAMEOBJECT_TYPE_GENERIC: return generic.LargeAOI != 0; + case GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY: return dungeonDifficulty.LargeAOI != 0; + case GAMEOBJECT_TYPE_GARRISON_SHIPMENT: return garrisonShipment.LargeAOI != 0; + case GAMEOBJECT_TYPE_ARTIFACT_FORGE: return artifactForge.LargeAOI != 0; + case GAMEOBJECT_TYPE_GATHERING_NODE: return gatheringNode.LargeAOI != 0; + default: return false; + } + } }; // From `gameobject_template_addon` |
