aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorMeji <alvaromegias_46@hotmail.com>2021-11-16 11:51:05 +0100
committerGitHub <noreply@github.com>2021-11-16 11:51:05 +0100
commita832435b9787c1997da87a124ff99bf06251aa07 (patch)
treece0f6a516b0e3d9f36ab5b567d8e7575e83256d6 /src/server/game/Entities
parent9451f8058384fc98725018ba50732c62710078c0 (diff)
Core/Spells: Implemented SummonPropertiesFlags: UseSummonerFaction & IgnoreSummonerPhase (#27273)
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Creature/TemporarySummon.cpp14
-rw-r--r--src/server/game/Entities/Object/Object.cpp5
-rw-r--r--src/server/game/Entities/Transport/Transport.cpp8
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);