diff options
author | ariel- <ariel-@users.noreply.github.com> | 2016-08-01 14:55:13 -0300 |
---|---|---|
committer | ariel- <ariel-@users.noreply.github.com> | 2016-08-01 14:55:53 -0300 |
commit | 33fbc453d236d943c24fb10522ac0720c3174c3d (patch) | |
tree | ee218d71a7afd585da0d05d141fdf85973191fff /src | |
parent | bcfa47c0514b51690a5dd222b3b1ac5f20379232 (diff) |
Core/PvP: Gameobject rotation in BGs and Wintergrasp.
- Add a workaround in BattleGround correcting for bad rotations in BG scripts
- Calculate rotation from rotation in Wintergrasp, this function hasn't a rotation parameter and should be added in the future.
- Also removed an ugly hardcode in Battlefield::SpawnGameObject
Closes #17711
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Battlefield/Battlefield.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Battlegrounds/Battleground.cpp | 14 |
2 files changed, 18 insertions, 5 deletions
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index 924b3b43777..f44099f6037 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -797,18 +797,21 @@ Creature* Battlefield::SpawnCreature(uint32 entry, float x, float y, float z, fl GameObject* Battlefield::SpawnGameObject(uint32 entry, float x, float y, float z, float o) { // Get map object - Map* map = sMapMgr->CreateBaseMap(571); // *vomits* + Map* map = sMapMgr->CreateBaseMap(m_MapId); if (!map) return 0; + // Calculate rotation + G3D::Quat rot = G3D::Matrix3::fromEulerAnglesZYX(o, 0.f, 0.f); + // Create gameobject GameObject* go = new GameObject; - if (!go->Create(map->GenerateLowGuid<HighGuid::GameObject>(), entry, map, PHASEMASK_NORMAL, Position(x, y, z, o), G3D::Quat(), 255, GO_STATE_READY)) + if (!go->Create(map->GenerateLowGuid<HighGuid::GameObject>(), entry, map, PHASEMASK_NORMAL, Position(x, y, z, o), rot, 255, GO_STATE_READY)) { TC_LOG_ERROR("bg.battlefield", "Battlefield::SpawnGameObject: Gameobject template %u could not be found in the database! Battlefield has not been created!", entry); TC_LOG_ERROR("bg.battlefield", "Battlefield::SpawnGameObject: Could not create gameobject template %u! Battlefield has not been created!", entry); delete go; - return NULL; + return nullptr; } // Add to world diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 79b07aa5b65..2e66c587e15 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -1350,12 +1350,22 @@ bool Battleground::AddObject(uint32 type, uint32 entry, float x, float y, float Map* map = FindBgMap(); if (!map) return false; + + G3D::Quat rot(rotation0, rotation1, rotation2, rotation3); + // Temporally add safety check for bad spawns and send log (object rotations need to be rechecked in sniff) + if (!rotation0 && !rotation1 && !rotation2 && !rotation3) + { + TC_LOG_DEBUG("bg.battleground", "Battleground::AddObject: gameoobject [entry: %u, object type: %u] for BG (map: %u) has zeroed rotation fields, " + "orientation used temporally, but please fix the spawn", entry, type, m_MapId); + + rot = G3D::Matrix3::fromEulerAnglesZYX(o, 0.f, 0.f); + } + // Must be created this way, adding to godatamap would add it to the base map of the instance // and when loading it (in go::LoadFromDB()), a new guid would be assigned to the object, and a new object would be created // So we must create it specific for this instance GameObject* go = new GameObject; - if (!go->Create(GetBgMap()->GenerateLowGuid<HighGuid::GameObject>(), entry, GetBgMap(), - PHASEMASK_NORMAL, Position(x, y, z, o), G3D::Quat(rotation0, rotation1, rotation2, rotation3), 255, goState)) + if (!go->Create(GetBgMap()->GenerateLowGuid<HighGuid::GameObject>(), entry, GetBgMap(), PHASEMASK_NORMAL, Position(x, y, z, o), rot, 255, goState)) { TC_LOG_ERROR("bg.battleground", "Battleground::AddObject: cannot create gameobject (entry: %u) for BG (map: %u, instance id: %u)!", entry, m_MapId, m_InstanceID); |