aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2018-03-28 22:01:22 +0200
committerShauren <shauren.trinity@gmail.com>2018-03-28 22:01:22 +0200
commit42f9deb21ec68e169f7ed1c8cf14092f144b22da (patch)
treee022243733903be45592138354d1f49342c811a4 /src/server/game/Entities
parent95615a4b0d9af431b559bcca68ce9f9f38381397 (diff)
Core/Maps: Implemented getting area id from gameobject spawns
Yes, you can now spawn LK platform anywhere and it will treat you as inside Icecrown Citadel
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp60
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h1
-rw-r--r--src/server/game/Entities/Object/Object.cpp12
-rw-r--r--src/server/game/Entities/Object/Object.h3
-rw-r--r--src/server/game/Entities/Player/Player.cpp6
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp4
6 files changed, 56 insertions, 30 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index f4c2c9fbe40..185d2f1f781 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -2203,8 +2203,8 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player*
uint32 modelId = m_goInfo->displayId;
if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->destructibleBuilding.DestructibleModelRec))
- if (modelData->State0Wmo)
- modelId = modelData->State0Wmo;
+ if (modelData->State1Wmo)
+ modelId = modelData->State1Wmo;
SetDisplayId(modelId);
if (setHealth)
@@ -2231,8 +2231,8 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player*
uint32 modelId = m_goInfo->displayId;
if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->destructibleBuilding.DestructibleModelRec))
- if (modelData->State1Wmo)
- modelId = modelData->State1Wmo;
+ if (modelData->State2Wmo)
+ modelId = modelData->State2Wmo;
SetDisplayId(modelId);
if (setHealth)
@@ -2250,8 +2250,8 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player*
uint32 modelId = m_goInfo->displayId;
if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->destructibleBuilding.DestructibleModelRec))
- if (modelData->State2Wmo)
- modelId = modelData->State2Wmo;
+ if (modelData->State3Wmo)
+ modelId = modelData->State3Wmo;
SetDisplayId(modelId);
// restores to full health
@@ -2348,6 +2348,39 @@ void GameObject::SetDisplayId(uint32 displayid)
UpdateModel();
}
+uint8 GameObject::GetNameSetId() const
+{
+ switch (GetGoType())
+ {
+ case GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING:
+ if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->destructibleBuilding.DestructibleModelRec))
+ {
+ switch (GetDestructibleState())
+ {
+ case GO_DESTRUCTIBLE_INTACT:
+ return modelData->State0NameSet;
+ case GO_DESTRUCTIBLE_DAMAGED:
+ return modelData->State1NameSet;
+ case GO_DESTRUCTIBLE_DESTROYED:
+ return modelData->State2NameSet;
+ case GO_DESTRUCTIBLE_REBUILDING:
+ return modelData->State3NameSet;
+ default:
+ break;
+ }
+ }
+ break;
+ case GAMEOBJECT_TYPE_GARRISON_BUILDING:
+ case GAMEOBJECT_TYPE_GARRISON_PLOT:
+ case GAMEOBJECT_TYPE_PHASEABLE_MO:
+ return GetByteValue(GAMEOBJECT_FLAGS, 1) & 0xF;
+ default:
+ break;
+ }
+
+ return 0;
+}
+
void GameObject::EnableCollision(bool enable)
{
if (!m_model)
@@ -2615,13 +2648,14 @@ public:
explicit GameObjectModelOwnerImpl(GameObject const* owner) : _owner(owner) { }
virtual ~GameObjectModelOwnerImpl() = default;
- virtual bool IsSpawned() const override { return _owner->isSpawned(); }
- virtual uint32 GetDisplayId() const override { return _owner->GetDisplayId(); }
- virtual bool IsInPhase(PhaseShift const& phaseShift) const override { return _owner->GetPhaseShift().CanSee(phaseShift); }
- virtual G3D::Vector3 GetPosition() const override { return G3D::Vector3(_owner->GetPositionX(), _owner->GetPositionY(), _owner->GetPositionZ()); }
- virtual float GetOrientation() const override { return _owner->GetOrientation(); }
- virtual float GetScale() const override { return _owner->GetObjectScale(); }
- virtual void DebugVisualizeCorner(G3D::Vector3 const& corner) const override { _owner->SummonCreature(1, corner.x, corner.y, corner.z, 0, TEMPSUMMON_MANUAL_DESPAWN); }
+ bool IsSpawned() const override { return _owner->isSpawned(); }
+ uint32 GetDisplayId() const override { return _owner->GetDisplayId(); }
+ uint8 GetNameSetId() const override { return _owner->GetNameSetId(); }
+ bool IsInPhase(PhaseShift const& phaseShift) const override { return _owner->GetPhaseShift().CanSee(phaseShift); }
+ G3D::Vector3 GetPosition() const override { return G3D::Vector3(_owner->GetPositionX(), _owner->GetPositionY(), _owner->GetPositionZ()); }
+ float GetOrientation() const override { return _owner->GetOrientation(); }
+ float GetScale() const override { return _owner->GetObjectScale(); }
+ void DebugVisualizeCorner(G3D::Vector3 const& corner) const override { _owner->SummonCreature(1, corner.x, corner.y, corner.z, 0, TEMPSUMMON_MANUAL_DESPAWN); }
private:
GameObject const* _owner;
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index d43306e9983..12ff942a6ba 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -273,6 +273,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
std::string GetAIName() const;
void SetDisplayId(uint32 displayid);
uint32 GetDisplayId() const { return GetUInt32Value(GAMEOBJECT_DISPLAYID); }
+ uint8 GetNameSetId() const;
uint32 GetFaction() const { return GetUInt32Value(GAMEOBJECT_FACTION); }
void SetFaction(uint32 faction) { SetUInt32Value(GAMEOBJECT_FACTION, faction); }
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 5745b9ab5db..6175f8c7a02 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1622,17 +1622,17 @@ void WorldObject::RemoveFromWorld()
uint32 WorldObject::GetZoneId() const
{
- return GetBaseMap()->GetZoneId(GetPhaseShift(), m_positionX, m_positionY, m_positionZ);
+ return GetMap()->GetZoneId(GetPhaseShift(), m_positionX, m_positionY, m_positionZ);
}
uint32 WorldObject::GetAreaId() const
{
- return GetBaseMap()->GetAreaId(GetPhaseShift(), m_positionX, m_positionY, m_positionZ);
+ return GetMap()->GetAreaId(GetPhaseShift(), m_positionX, m_positionY, m_positionZ);
}
void WorldObject::GetZoneAndAreaId(uint32& zoneid, uint32& areaid) const
{
- GetBaseMap()->GetZoneAndAreaId(GetPhaseShift(), zoneid, areaid, m_positionX, m_positionY, m_positionZ);
+ GetMap()->GetZoneAndAreaId(GetPhaseShift(), zoneid, areaid, m_positionX, m_positionY, m_positionZ);
}
InstanceScript* WorldObject::GetInstanceScript()
@@ -2332,12 +2332,6 @@ void WorldObject::ResetMap()
//m_InstanceId = 0;
}
-Map const* WorldObject::GetBaseMap() const
-{
- ASSERT(m_currMap);
- return m_currMap->GetParent();
-}
-
void WorldObject::AddObjectToRemoveList()
{
ASSERT(m_uint32Values);
diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h
index 3dcc769b8ab..13b75f8bc89 100644
--- a/src/server/game/Entities/Object/Object.h
+++ b/src/server/game/Entities/Object/Object.h
@@ -497,9 +497,6 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
Map* FindMap() const { return m_currMap; }
//used to check all object's GetMap() calls when object is not in world!
- //this function should be removed in nearest time...
- Map const* GetBaseMap() const;
-
void SetZoneScript();
ZoneScript* GetZoneScript() const { return m_zoneScript; }
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 4f911497d4f..cc868ccf736 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -1314,7 +1314,7 @@ void Player::Update(uint32 p_time)
}
// not auto-free ghost from body in instances
- if (m_deathTimer > 0 && !GetBaseMap()->Instanceable() && !HasAuraType(SPELL_AURA_PREVENT_RESURRECTION))
+ if (m_deathTimer > 0 && !GetMap()->Instanceable() && !HasAuraType(SPELL_AURA_PREVENT_RESURRECTION))
{
if (p_time >= m_deathTimer)
{
@@ -2132,7 +2132,7 @@ GameObject* Player::GetGameObjectIfCanInteractWith(ObjectGuid const& guid, Gameo
bool Player::IsUnderWater() const
{
return IsInWater() &&
- GetPositionZ() < (GetBaseMap()->GetWaterLevel(GetPhaseShift(), GetPositionX(), GetPositionY()) - 2);
+ GetPositionZ() < (GetMap()->GetWaterLevel(GetPhaseShift(), GetPositionX(), GetPositionY()) - 2);
}
void Player::SetInWater(bool apply)
@@ -5945,7 +5945,7 @@ void Player::CheckAreaExploreAndOutdoor()
return;
bool isOutdoor;
- uint32 areaId = GetBaseMap()->GetAreaId(GetPhaseShift(), GetPositionX(), GetPositionY(), GetPositionZ(), &isOutdoor);
+ uint32 areaId = GetMap()->GetAreaId(GetPhaseShift(), GetPositionX(), GetPositionY(), GetPositionZ(), &isOutdoor);
AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(areaId);
if (sWorld->getBoolConfig(CONFIG_VMAP_INDOOR_CHECK) && !isOutdoor)
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 1d4814f7c9b..847a8e6f51e 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -3045,12 +3045,12 @@ bool Unit::isInAccessiblePlaceFor(Creature const* c) const
bool Unit::IsInWater() const
{
- return GetBaseMap()->IsInWater(GetPhaseShift(), GetPositionX(), GetPositionY(), GetPositionZ());
+ return GetMap()->IsInWater(GetPhaseShift(), GetPositionX(), GetPositionY(), GetPositionZ());
}
bool Unit::IsUnderWater() const
{
- return GetBaseMap()->IsUnderWater(GetPhaseShift(), GetPositionX(), GetPositionY(), GetPositionZ());
+ return GetMap()->IsUnderWater(GetPhaseShift(), GetPositionX(), GetPositionY(), GetPositionZ());
}
void Unit::UpdateUnderwaterState(Map* m, float x, float y, float z)