private static void OnProcessSpellCast(Obj_AI_Base sender, GameObjectProcessSpellCastEventArgs args)
{
if (!sender.IsValid<AIHeroClient>() || sender.Team == ObjectManager.Player.Team)
{
return;
}
if (args.SData.Name == "dravenrdoublecast")
{
DetectedSkillshots.RemoveAll(
i => i.Unit.NetworkId == sender.NetworkId && i.SpellData.SpellName == "DravenRCast");
}
var spellData = SpellDatabase.GetByName(args.SData.Name);
if (spellData == null)
{
return;
}
var startPos = new Vector2();
if (spellData.FromObject != "")
{
foreach (var obj in ObjectManager.Get<GameObject>().Where(i => i.Name.Contains(spellData.FromObject)))
{
startPos = obj.Position.To2D();
}
}
else
{
startPos = sender.ServerPosition.To2D();
}
if (spellData.FromObjects != null && spellData.FromObjects.Length > 0)
{
foreach (var obj in
ObjectManager.Get<GameObject>().Where(i => i.IsEnemy && spellData.FromObject.Contains(i.Name)))
{
var start = obj.Position.To2D();
var end = start + spellData.Range * (args.End.To2D() - obj.Position.To2D()).Normalized();
TriggerOnDetectSkillshot(
DetectionType.ProcessSpell,
spellData,
Extensions.GameTimeTickCount - Game.Ping / 2,
start,
end,
sender);
}
}
if (!startPos.IsValid())
{
return;
}
var endPos = args.End.To2D();
if (spellData.SpellName == "LucianQ" && args.Target != null
&& args.Target.NetworkId == ObjectManager.Player.NetworkId)
{
return;
}
var direction = (endPos - startPos).Normalized();
if (startPos.Distance(endPos) > spellData.Range || spellData.FixedRange)
{
endPos = startPos + direction * spellData.Range;
}
if (spellData.ExtraRange != -1)
{
endPos = endPos
+ Math.Min(spellData.ExtraRange, spellData.Range - endPos.Distance(startPos)) * direction;
}
TriggerOnDetectSkillshot(
DetectionType.ProcessSpell,
spellData,
Extensions.GameTimeTickCount - Game.Ping / 2,
startPos,
endPos,
sender);
}