private void LoadSpecialSpell(SpellData spell) { if (ChampionPlugins.ContainsKey(spell.CharName)) { ChampionPlugins[spell.CharName].LoadSpecialSpell(spell); } ChampionPlugins[Constants.AllChampions].LoadSpecialSpell(spell); }
public SpellConfigControl(Menu menu, string label, SpellData spell, bool enableSpell) { _menu = menu; _spell = spell; _menu.AddGroupLabel(label); DodgeCheckBox = new DynamicCheckBox(ConfigDataType.Spells, spell.SpellName, "Dodge", enableSpell, true, SpellConfigProperty.Dodge); DrawCheckBox = new DynamicCheckBox(ConfigDataType.Spells, spell.SpellName, "Draw", true /*enableSpell*/, true, SpellConfigProperty.Draw); SpellRadiusSlider = new DynamicSlider(ConfigDataType.Spells, spell.SpellName, "Radius", (int)spell.Radius, (int)spell.Radius - 100, (int)spell.Radius + 100, true, SpellConfigProperty.Radius); DangerLevelSlider = new StringSlider(ConfigDataType.Spells, spell.SpellName, "Danger Level", (int) spell.Dangerlevel,SpellConfigProperty.DangerLevel, DangerLevels); }
public static SpellConfig GetSpellConfig(this SpellData spell, SpellConfigControl control) { return(new SpellConfig { SData = spell, DangerLevel = spell.Dangerlevel, Dodge = false, 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)); } }
private void Game_OnCastSpell(Spellbook spellbook, SpellbookCastSpellEventArgs args) { if (!spellbook.Owner.IsMe) { return; } var sData = spellbook.GetSpell(args.Slot); string name; if (SpellDetector.ChanneledSpells.TryGetValue(sData.Name, out name)) { //Evade.isChanneling = true; //Evade.channelPosition = GameData.HeroInfo.serverPos2D; LastStopEvadeTime = EvadeUtils.TickCount + Game.Ping + 100; } if (EvadeSpell.LastSpellEvadeCommand != null && EvadeSpell.LastSpellEvadeCommand.Timestamp + Game.Ping + 150 > EvadeUtils.TickCount) { args.Process = false; } LastSpellCast = args.Slot; LastSpellCastTime = EvadeUtils.TickCount; //moved from processPacket /*if (args.Slot == SpellSlot.Recall) * { * lastStopPosition = GameData.MyHero.ServerPosition.To2D(); * }*/ if (Situation.ShouldDodge()) { if (IsDodging && SpellDetector.Spells.Count() > 0) { foreach (KeyValuePair <String, SpellData> entry in SpellDetector.WindupSpells) { SpellData spellData = entry.Value; if (spellData.SpellKey == args.Slot) //check if it's a spell that we should block { args.Process = false; return; } } } } foreach (var evadeSpell in EvadeSpell.EvadeSpells) { if (evadeSpell.IsItem == false && evadeSpell.SpellKey == args.Slot) { if (evadeSpell.EvadeType == EvadeType.Blink || evadeSpell.EvadeType == EvadeType.Dash) { //Block spell cast if flashing/blinking into spells if (args.EndPosition.To2D().CheckDangerousPos(6, true)) //for blink + dash { args.Process = false; return; } if (evadeSpell.EvadeType == EvadeType.Dash) { var extraDelayBuffer = Config.Properties.GetInt(ConfigValue.ExtraPingBuffer); var extraDist = Config.Properties.GetInt(ConfigValue.ExtraCpaDistance); var dashPos = Game.CursorPos.To2D(); //real pos? if (evadeSpell.FixedRange) { var dir = (dashPos - GameData.MyHero.ServerPosition.To2D()).Normalized(); dashPos = GameData.MyHero.ServerPosition.To2D() + dir * evadeSpell.Range; } //Draw.RenderObjects.Add(new Draw.RenderPosition(dashPos, 1000)); var posInfo = EvadeHelper.CanHeroWalkToPos(dashPos, evadeSpell.Speed, extraDelayBuffer + Game.Ping, extraDist); if (posInfo.PosDangerLevel > 0) { args.Process = false; return; } } LastPosInfo = PositionInfo.SetAllUndodgeable(); //really? if (IsDodging || EvadeUtils.TickCount < LastDodgingEndTime + 500) { EvadeCommand.MoveTo(Game.CursorPos.To2D()); //block moveto LastStopEvadeTime = EvadeUtils.TickCount + Game.Ping + 100; } } return; } } }
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)); } }