private static void ObjMissileClientOnDelete(GameObject sender, EventArgs args)
{
if (!sender.IsValid<MissileClient>())
{
return;
}
var missile = (MissileClient)sender;
if (!missile.SpellCaster.IsValid<AIHeroClient>() || missile.SpellCaster.Team == ObjectManager.Player.Team)
{
return;
}
var unit = (AIHeroClient)missile.SpellCaster;
var spellName = missile.SData.Name;
if (OnDeleteMissile != null)
{
foreach (var skillshot in
DetectedSkillshots.Where(
i =>
i.SpellData.MissileSpellName == spellName && i.Unit.NetworkId == unit.NetworkId
&& (missile.EndPosition.To2D() - missile.StartPosition.To2D()).AngleBetween(i.Direction) < 10
&& i.SpellData.CanBeRemoved))
{
OnDeleteMissile(skillshot, missile);
break;
}
}
DetectedSkillshots.RemoveAll(
i =>
(i.SpellData.MissileSpellName == spellName || i.SpellData.ExtraMissileNames.Contains(spellName))
&& i.Unit.NetworkId == unit.NetworkId
&& (missile.EndPosition - missile.StartPosition).To2D().AngleBetween(i.Direction) < 10
&& (i.SpellData.CanBeRemoved || i.SpellData.ForceRemove));
}