aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/GameObject
diff options
context:
space:
mode:
authorKittnz <Kittnz@users.noreply.github.com>2019-01-16 20:48:01 +0100
committerGitHub <noreply@github.com>2019-01-16 20:48:01 +0100
commit83e6fde0664cf8ab0c425e574781262893e7b226 (patch)
tree4aecb8e4560b988907581d1ff11cd507b9fee795 /src/server/game/Entities/GameObject
parente0c939b0d411fae5db0a19939ee9aa67b614db74 (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.cpp12
-rw-r--r--src/server/game/Entities/GameObject/GameObjectData.h54
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`