diff options
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); |
