diff options
| author | Meji <alvaromegias_46@hotmail.com> | 2021-11-16 11:51:05 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-16 11:51:05 +0100 |
| commit | a832435b9787c1997da87a124ff99bf06251aa07 (patch) | |
| tree | ce0f6a516b0e3d9f36ab5b567d8e7575e83256d6 /src/server/game/Entities | |
| parent | 9451f8058384fc98725018ba50732c62710078c0 (diff) | |
Core/Spells: Implemented SummonPropertiesFlags: UseSummonerFaction & IgnoreSummonerPhase (#27273)
Diffstat (limited to 'src/server/game/Entities')
| -rw-r--r-- | src/server/game/Entities/Creature/TemporarySummon.cpp | 14 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 5 | ||||
| -rw-r--r-- | src/server/game/Entities/Transport/Transport.cpp | 8 |
3 files changed, 16 insertions, 11 deletions
diff --git a/src/server/game/Entities/Creature/TemporarySummon.cpp b/src/server/game/Entities/Creature/TemporarySummon.cpp index 55576d96ec4..96c62d9b924 100644 --- a/src/server/game/Entities/Creature/TemporarySummon.cpp +++ b/src/server/game/Entities/Creature/TemporarySummon.cpp @@ -171,7 +171,6 @@ void TempSummon::InitStats(uint32 duration) if (owner && IsTrigger() && m_spells[0]) { - SetFaction(owner->GetFaction()); SetLevel(owner->getLevel()); if (owner->GetTypeId() == TYPEID_PLAYER) m_ControlledByPlayer = true; @@ -195,10 +194,13 @@ void TempSummon::InitStats(uint32 duration) } } - if (m_Properties->Faction) - SetFaction(m_Properties->Faction); - else if (IsVehicle() && owner) // properties should be vehicle - SetFaction(owner->GetFaction()); + uint32 faction = m_Properties->Faction; + if (m_Properties->GetFlags().HasFlag(SummonPropertiesFlags::UseSummonerFaction)) // TODO: Determine priority between faction and flag + if (owner) + faction = owner->GetFaction(); + + if (faction) + SetFaction(faction); } void TempSummon::InitSummon() @@ -291,7 +293,7 @@ void Minion::InitStats(uint32 duration) SetReactState(REACT_PASSIVE); SetCreatorGUID(GetOwner()->GetGUID()); - SetFaction(GetOwner()->GetFaction()); + SetFaction(GetOwner()->GetFaction()); // TODO: Is this correct? Overwrite the use of SummonPropertiesFlags::UseSummonerFaction GetOwner()->SetMinion(this, true); } diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 0e33e2d5ef4..c255ebbfaf4 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1703,7 +1703,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert mask = UNIT_MASK_MINION; break; default: - if (properties->Flags & 512) // Mirror Image, Summon Gargoyle + if (properties->GetFlags().HasFlag(SummonPropertiesFlags::JoinSummonerSpawnGroup)) mask = UNIT_MASK_GUARDIAN; break; } @@ -1740,8 +1740,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert return nullptr; } - // Set the summon to the summoner's phase - if (summoner) + if (summoner && !(properties && properties->GetFlags().HasFlag(SummonPropertiesFlags::IgnoreSummonerPhase))) PhasingHandler::InheritPhaseShift(summon, summoner); summon->SetCreatedBySpell(spellId); diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index f9af0c5c71c..fd0bf28c85c 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -431,7 +431,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu mask = UNIT_MASK_MINION; break; default: - if (properties->Flags & 512) // Mirror Image, Summon Gargoyle + if (properties->GetFlags().HasFlag(SummonPropertiesFlags::JoinSummonerSpawnGroup)) // Mirror Image, Summon Gargoyle mask = UNIT_MASK_GUARDIAN; break; } @@ -472,7 +472,11 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu return nullptr; } - PhasingHandler::InheritPhaseShift(summon, summoner ? static_cast<WorldObject*>(summoner) : static_cast<WorldObject*>(this)); + WorldObject* phaseShiftOwner = this; + if (summoner && !(properties && properties->GetFlags().HasFlag(SummonPropertiesFlags::IgnoreSummonerPhase))) + phaseShiftOwner = summoner; + + PhasingHandler::InheritPhaseShift(summon, phaseShiftOwner); summon->SetCreatedBySpell(spellId); |
