Core/Objects: Use player as summoner for personal clones
Port From (https://github.com/TrinityCore/TrinityCore/commit/79c605436942d652c50e4cfeac9d1b20a86a2343)
This commit is contained in:
@@ -1473,12 +1473,12 @@ namespace Game.Entities
|
||||
return null;
|
||||
}
|
||||
|
||||
public TempSummon SummonPersonalClone(Position pos, TempSummonType despawnType = TempSummonType.ManualDespawn, TimeSpan despawnTime = default, uint vehId = 0, uint spellId = 0, ObjectGuid privateObjectOwner = default)
|
||||
public TempSummon SummonPersonalClone(Position pos, TempSummonType despawnType = TempSummonType.ManualDespawn, TimeSpan despawnTime = default, uint vehId = 0, uint spellId = 0, Player privateObjectOwner = null)
|
||||
{
|
||||
Map map = GetMap();
|
||||
if (map != null)
|
||||
{
|
||||
TempSummon summon = map.SummonCreature(GetEntry(), pos, null, (uint)despawnTime.TotalMilliseconds, this, spellId, vehId, privateObjectOwner, new SmoothPhasingInfo(GetGUID(), true, true));
|
||||
TempSummon summon = map.SummonCreature(GetEntry(), pos, null, (uint)despawnTime.TotalMilliseconds, privateObjectOwner, spellId, vehId, privateObjectOwner.GetGUID(), new SmoothPhasingInfo(GetGUID(), true, true));
|
||||
if (summon != null)
|
||||
{
|
||||
summon.SetTempSummonType(despawnType);
|
||||
|
||||
@@ -246,10 +246,16 @@ namespace Game.Entities
|
||||
objectsToUpdate.Add(this);
|
||||
|
||||
SmoothPhasing smoothPhasing = GetSmoothPhasing();
|
||||
WorldObject original = GetSummoner();
|
||||
if (original != null)
|
||||
if (smoothPhasing != null && smoothPhasing.IsReplacing(original.GetGUID()))
|
||||
objectsToUpdate.Add(original);
|
||||
if (smoothPhasing != null)
|
||||
{
|
||||
SmoothPhasingInfo infoForSeer = smoothPhasing.GetInfoForSeer(GetDemonCreatorGUID());
|
||||
if (infoForSeer != null && infoForSeer.ReplaceObject.HasValue && smoothPhasing.IsReplacing(infoForSeer.ReplaceObject.Value))
|
||||
{
|
||||
WorldObject original = Global.ObjAccessor.GetWorldObject(this, infoForSeer.ReplaceObject.Value);
|
||||
if (original != null)
|
||||
objectsToUpdate.Add(original);
|
||||
}
|
||||
}
|
||||
|
||||
VisibleChangesNotifier notifier = new(objectsToUpdate);
|
||||
Cell.VisitWorldObjects(this, notifier, GetVisibilityRange());
|
||||
@@ -260,22 +266,29 @@ namespace Game.Entities
|
||||
List<WorldObject> objectsToUpdate = new();
|
||||
objectsToUpdate.Add(this);
|
||||
|
||||
WorldObject original = GetSummoner();
|
||||
WorldObject original = null;
|
||||
SmoothPhasing smoothPhasing = GetSmoothPhasing();
|
||||
if (original != null && smoothPhasing != null && smoothPhasing.IsReplacing(original.GetGUID()))
|
||||
if (smoothPhasing != null)
|
||||
{
|
||||
objectsToUpdate.Add(original);
|
||||
SmoothPhasingInfo infoForSeer = smoothPhasing.GetInfoForSeer(GetDemonCreatorGUID());
|
||||
if (infoForSeer != null && infoForSeer.ReplaceObject.HasValue && smoothPhasing.IsReplacing(infoForSeer.ReplaceObject.Value))
|
||||
original = Global.ObjAccessor.GetWorldObject(this, infoForSeer.ReplaceObject.Value);
|
||||
|
||||
// disable replacement without removing - it is still needed for next step (visibility update)
|
||||
SmoothPhasing originalSmoothPhasing = original.GetSmoothPhasing();
|
||||
if (originalSmoothPhasing != null)
|
||||
originalSmoothPhasing.DisableReplacementForSeer(GetDemonCreatorGUID());
|
||||
if (original != null)
|
||||
{
|
||||
objectsToUpdate.Add(original);
|
||||
|
||||
// disable replacement without removing - it is still needed for next step (visibility update)
|
||||
SmoothPhasing originalSmoothPhasing = original.GetSmoothPhasing();
|
||||
if (originalSmoothPhasing != null)
|
||||
originalSmoothPhasing.DisableReplacementForSeer(GetDemonCreatorGUID());
|
||||
}
|
||||
}
|
||||
|
||||
VisibleChangesNotifier notifier = new(objectsToUpdate);
|
||||
Cell.VisitWorldObjects(this, notifier, GetVisibilityRange());
|
||||
|
||||
if (original != null && smoothPhasing != null && smoothPhasing.IsReplacing(original.GetGUID()))
|
||||
if (original != null) // original is only != null when it was replaced
|
||||
{
|
||||
SmoothPhasing originalSmoothPhasing = original.GetSmoothPhasing();
|
||||
if (originalSmoothPhasing != null)
|
||||
|
||||
Reference in New Issue
Block a user