Fixes/Crashes:

command "cometome"
Using call pet on hunter
crash when casting some spells.
This commit is contained in:
hondacrx
2023-03-20 05:50:18 -04:00
parent 12897e80e8
commit bd437fc87a
4 changed files with 21 additions and 20 deletions
@@ -649,7 +649,7 @@ namespace Game.AI
SmartEvents.OnSpellFailed => Marshal.SizeOf(typeof(SmartEvent.SpellCast)), SmartEvents.OnSpellFailed => Marshal.SizeOf(typeof(SmartEvent.SpellCast)),
SmartEvents.OnSpellStart => Marshal.SizeOf(typeof(SmartEvent.SpellCast)), SmartEvents.OnSpellStart => Marshal.SizeOf(typeof(SmartEvent.SpellCast)),
SmartEvents.OnDespawn => 0, SmartEvents.OnDespawn => 0,
_ => Marshal.SizeOf(typeof(SmartEvent.Raw)), _ => Marshal.SizeOf(typeof(SmartEvent.Raw)),
}; };
int rawCount = Marshal.SizeOf(typeof(SmartEvent.Raw)) / sizeof(uint); int rawCount = Marshal.SizeOf(typeof(SmartEvent.Raw)) / sizeof(uint);
+1 -1
View File
@@ -283,7 +283,7 @@ namespace Game.Entities
} }
else if (PetSaveMode.FirstActiveSlot <= slot && slot <= PetSaveMode.LastActiveSlot) else if (PetSaveMode.FirstActiveSlot <= slot && slot <= PetSaveMode.LastActiveSlot)
{ {
var activePetIndex = Array.FindIndex(petStable.ActivePets, pet => pet?.PetNumber == petnumber); var activePetIndex = Array.FindIndex(petStable.ActivePets, pet => pet?.PetNumber == petInfo.PetNumber);
Cypher.Assert(activePetIndex != -1); Cypher.Assert(activePetIndex != -1);
@@ -60,25 +60,29 @@ namespace Game.Movement
owner.AddUnitState(UnitState.RoamingMove); owner.AddUnitState(UnitState.RoamingMove);
MoveSplineInit init = new(owner); MoveSplineInit init = new(owner);
if (_generatePath)
new Action(() =>
{ {
PathGenerator path = new(owner); if (_generatePath)
bool result = path.CalculatePath(_destination.posX, _destination.posY, _destination.posZ, false);
if (result && !path.GetPathType().HasFlag(PathType.NoPath))
{ {
if (_closeEnoughDistance.HasValue) PathGenerator path = new(owner);
path.ShortenPathUntilDist(_destination, _closeEnoughDistance.Value); bool result = path.CalculatePath(_destination.posX, _destination.posY, _destination.posZ, false);
if (result && !path.GetPathType().HasFlag(PathType.NoPath))
{
if (_closeEnoughDistance.HasValue)
path.ShortenPathUntilDist(_destination, _closeEnoughDistance.Value);
init.MovebyPath(path.GetPath()); init.MovebyPath(path.GetPath());
return; return;
}
} }
}
Position dest = _destination; Position dest = _destination;
if (_closeEnoughDistance.HasValue) if (_closeEnoughDistance.HasValue)
owner.MovePosition(dest, Math.Min(_closeEnoughDistance.Value, dest.GetExactDist(owner)), MathF.PI + owner.GetRelativeAngle(dest)); owner.MovePosition(dest, Math.Min(_closeEnoughDistance.Value, dest.GetExactDist(owner)), MathF.PI + owner.GetRelativeAngle(dest));
init.MoveTo(dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ(), false); init.MoveTo(dest.GetPositionX(), dest.GetPositionY(), dest.GetPositionZ(), false);
})();
if (_speed.HasValue) if (_speed.HasValue)
init.SetVelocity(_speed.Value); init.SetVelocity(_speed.Value);
+2 -5
View File
@@ -98,9 +98,6 @@ namespace Game.Spells
for (var i = 0; i < SpellConst.MaxEffects; ++i) for (var i = 0; i < SpellConst.MaxEffects; ++i)
m_destTargets[i] = new SpellDestination(m_caster); m_destTargets[i] = new SpellDestination(m_caster);
m_targets = new SpellCastTargets();
m_appliedMods = new List<Aura>();
} }
public virtual void Dispose() public virtual void Dispose()
@@ -7964,11 +7961,11 @@ namespace Game.Spells
public SpellMisc m_misc; public SpellMisc m_misc;
public object m_customArg; public object m_customArg;
public SpellCastVisual m_SpellVisual; public SpellCastVisual m_SpellVisual;
public SpellCastTargets m_targets; public SpellCastTargets m_targets = new();
public sbyte m_comboPointGain; public sbyte m_comboPointGain;
public SpellCustomErrors m_customError; public SpellCustomErrors m_customError;
public List<Aura> m_appliedMods; public List<Aura> m_appliedMods = new();
WorldObject m_caster; WorldObject m_caster;
public SpellValue m_spellValue; public SpellValue m_spellValue;