private void LoadSpecialSpell(SpellData spell) { if (ChampionPlugins.ContainsKey(spell.CharName)) { ChampionPlugins[spell.CharName].LoadSpecialSpell(spell); } ChampionPlugins[Constants.AllChampions].LoadSpecialSpell(spell); }
public static SpellConfig GetSpellConfig(this SpellData spell, SpellConfigControl control) { return(new SpellConfig { DangerLevel = spell.Dangerlevel, Dodge = true, Draw = true, Radius = spell.Radius, PlayerName = spell.CharName }); }
public static void CreateSpellData( Obj_AI_Base hero, Vector3 spellStartPos, Vector3 spellEndPos, SpellData spellData, GameObject obj = null, float extraEndTick = 0.0f, bool processSpell = true, SpellType spellType = SpellType.None, bool checkEndExplosion = true, float spellRadius = 0) { if (checkEndExplosion && spellData.HasEndExplosion) { CreateSpellData(hero, spellStartPos, spellEndPos, spellData, obj, extraEndTick, false, spellData.SpellType, false); CreateSpellData(hero, spellStartPos, spellEndPos, spellData, obj, extraEndTick, true, SpellType.Circular, false); return; } if (spellStartPos.Distance(MyHero.Position) < spellData.Range + ConfigValue.ExtraDetectionRange.GetInt()) { Vector2 startPosition = spellStartPos.To2D(); Vector2 endPosition = spellEndPos.To2D(); Vector2 direction = (endPosition - startPosition).Normalized(); float endTick = 0; if (spellType == SpellType.None) { spellType = spellData.SpellType; } if (spellData.FixedRange) //for diana q { if (endPosition.Distance(startPosition) > spellData.Range) { endPosition = startPosition + direction * spellData.Range; } } if (spellType == SpellType.Line) { endTick = spellData.SpellDelay + (spellData.Range / spellData.ProjectileSpeed) * 1000; endPosition = startPosition + direction * spellData.Range; if (spellData.UseEndPosition) { var range = spellEndPos.To2D().Distance(spellStartPos.To2D()); endTick = spellData.SpellDelay + (range / spellData.ProjectileSpeed) * 1000; endPosition = spellEndPos.To2D(); } if (obj != null) { endTick -= spellData.SpellDelay; } } else if (spellType == SpellType.Circular) { endTick = spellData.SpellDelay; if (spellData.ProjectileSpeed == 0) { endPosition = hero.ServerPosition.To2D(); } else if (spellData.ProjectileSpeed > 0) { if (spellData.SpellType == SpellType.Line && spellData.HasEndExplosion && spellData.UseEndPosition == false) { endPosition = startPosition + direction * spellData.Range; } endTick = endTick + 1000 * startPosition.Distance(endPosition) / spellData.ProjectileSpeed; } } else if (spellType == SpellType.Arc) { endTick = endTick + 1000 * startPosition.Distance(endPosition) / spellData.ProjectileSpeed; if (obj != null) { endTick -= spellData.SpellDelay; } } else if (spellType == SpellType.Cone) { return; } else { return; } endTick += extraEndTick; Spell newSpell = new Spell(); newSpell.StartTime = EvadeUtils.TickCount; newSpell.EndTime = EvadeUtils.TickCount + endTick; newSpell.StartPos = startPosition; newSpell.EndPos = endPosition; newSpell.Height = spellEndPos.Z + spellData.ExtraDrawHeight; newSpell.Direction = direction; newSpell.HeroId = hero.NetworkId; newSpell.Info = spellData; newSpell.SpellType = spellType; newSpell.Radius = spellRadius > 0 ? spellRadius : newSpell.GetSpellRadius(); if (obj != null) { newSpell.SpellObject = obj; newSpell.ProjectileId = obj.NetworkId; } int spellId = CreateSpell(newSpell, processSpell); Core.DelayAction(() => DeleteSpell(spellId), (int)(endTick + spellData.ExtraEndTime)); } }