Core/Auras: Mount speed auras are now properly selected when teleporting (dungeon enter/exit, regular teleport, ...)

Port From (https://github.com/TrinityCore/TrinityCore/commit/3010f2ca5dea532c851d5472157bbfdf0531e0d0)
This commit is contained in:
hondacrx
2021-11-07 21:12:53 -05:00
parent f60ff57739
commit 7f668d03b3
6 changed files with 98 additions and 58 deletions
+25 -3
View File
@@ -742,7 +742,8 @@ namespace Game.Entities
if (!mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Ground))
continue;
}
else if (!mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Underwater))
// player is on water surface
else if (!mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Float))
continue;
}
else if (isInWater)
@@ -783,7 +784,25 @@ namespace Game.Entities
return null;
}
public override void ProcessPositionDataChanged(PositionFullTerrainStatus data)
public void UpdateMountCapability()
{
var mounts = GetAuraEffectsByType(AuraType.Mounted);
foreach (AuraEffect aurEff in mounts)
{
aurEff.RecalculateAmount();
if (aurEff.GetAmount() == 0)
aurEff.GetBase().Remove();
else
{
var capability = CliDB.MountCapabilityStorage.LookupByKey(aurEff.GetAmount());
if (capability != null) // aura may get removed by interrupt flag, reapply
if (!HasAura(capability.ModSpellAuraID))
CastSpell(this, capability.ModSpellAuraID, new CastSpellExtraArgs(aurEff));
}
}
}
public override void ProcessPositionDataChanged(PositionFullTerrainStatus data)
{
base.ProcessPositionDataChanged(data);
ProcessTerrainStatusUpdate(data.LiquidStatus, data.LiquidInfo);
@@ -800,7 +819,7 @@ namespace Game.Entities
public virtual void ProcessTerrainStatusUpdate(ZLiquidStatus status, Optional<LiquidData> liquidData)
{
if (IsFlying() || !IsControlledByPlayer())
if (!IsControlledByPlayer())
return;
SetInWater(status.HasAnyFlag(ZLiquidStatus.Swimming));
@@ -817,6 +836,9 @@ namespace Game.Entities
if (curLiquid != null && curLiquid.SpellID != 0 && (!player || !player.IsGameMaster()))
CastSpell(this, curLiquid.SpellID, true);
_lastLiquid = curLiquid;
// mount capability depends on liquid state change
UpdateMountCapability();
}
}