diff options
author | Seyden <saiifii@live.de> | 2022-02-07 12:49:45 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-07 12:49:45 +0100 |
commit | 20af35fd1393e24c747fdfa30760f52bd6ee04e6 (patch) | |
tree | f8c9f45cbd9331c57eda948d9d2fd5a92e649bc3 | |
parent | e64e6f4963ae7c6efe54fd5e6124158202478b3f (diff) |
Core/Creatures: Add summoned creatures to summoners transport (#27708)
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 302a52c885e..be19025582d 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1811,6 +1811,18 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert return nullptr; } + Transport* transport = summoner ? summoner->GetTransport() : nullptr; + if (transport) + { + float x, y, z, o; + pos.GetPosition(x, y, z, o); + transport->CalculatePassengerOffset(x, y, z, &o); + summon->m_movementInfo.transport.pos.Relocate(x, y, z, o); + + // This object must be added to transport before adding to map for the client to properly display it + transport->AddPassenger(summon); + } + if (summoner && !(properties && properties->GetFlags().HasFlag(SummonPropertiesFlags::IgnoreSummonerPhase))) PhasingHandler::InheritPhaseShift(summon, summoner); @@ -1838,6 +1850,10 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert if (!AddToMap(summon->ToCreature())) { + // Returning false will cause the object to be deleted - remove from transport + if (transport) + transport->RemovePassenger(summon); + delete summon; return nullptr; } |