diff options
| author | Shauren <shauren.trinity@gmail.com> | 2018-03-28 22:01:22 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2018-03-28 22:01:22 +0200 |
| commit | 42f9deb21ec68e169f7ed1c8cf14092f144b22da (patch) | |
| tree | e022243733903be45592138354d1f49342c811a4 /src/server/game/Entities | |
| parent | 95615a4b0d9af431b559bcca68ce9f9f38381397 (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.cpp | 60 | ||||
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.h | 1 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 12 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Object.h | 3 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 6 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 4 |
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) |
