private static void combo() { var target = TargetSelector.GetTarget(W.Range, TargetSelector.DamageType.Magical); if (target == null || !target.IsValidTarget()) { return; } Obj_AI_Hero targetR = TargetSelector.GetTarget(R.Range, TargetSelector.DamageType.Magical); var rmana = Config.Item("Rmana").GetValue <Slider>().Value; if (R.IsReady() && player.ManaPercent < rmana && targetR.IsValidTarget(R.Range - 30)) { bool enoughEnemies = Config.Item("Rene").GetValue <Slider>().Value <= player.CountEnemiesInRange(R.Range - 50); if (maoR && ((Config.Item("Rkill").GetValue <bool>() && Damage.GetSpellDamage(player, targetR, SpellSlot.R) + player.CalcDamage(target, Damage.DamageType.Magical, maoRStack) > targetR.Health) || (!enoughEnemies))) { R.Cast(); } if (targetR != null && !maoR && player.ManaPercent > rmana && (enoughEnemies || R.IsInRange(targetR))) { R.Cast(); } } if (W.IsReady() && target.IsValidTarget(W.Range) && Config.Item("UseW").GetValue <bool>()) { W.CastOnUnit(target); } if (E.IsReady() && target.IsValidTarget(E.Range) && Config.Item("UseE").GetValue <bool>()) { E.CastIfHitchanceEquals(target, HitChance.High); } if (Q.IsReady() && Config.Item("UseQ").GetValue <bool>() && target.IsValidTarget(Q.Range)) { Q.CastIfHitchanceEquals(target, HitChance.High); } var rDmg = player.GetSpellDamage(target, SpellSlot.R); if (Config.Item("Rkill").GetValue <bool>() && target.HealthPercent <= rDmg) { R.Cast(); } if (Orbwalker.ActiveMode == Orbwalking.OrbwalkingMode.Combo) { items(); } }
public static float getJayceEHamDmg(Obj_AI_Base target) { double percentage = 5 + (3 * Player.Spellbook.GetSpell(SpellSlot.E).Level); return((float)Player.CalcDamage(target, Damage.DamageType.Magical, ((target.MaxHealth / 100) * percentage) + (Player.FlatPhysicalDamageMod))); }
public static float GetRendDamage(Obj_AI_Base target, int customStacks = -1) { return((float)player.CalcDamage(target, Damage.DamageType.Physical, GetRawRendDamage(target, customStacks)) - 20 * 0.98f); }
public static float GetRealDamage(this SpellSlot slot, Obj_AI_Base target) { // Validate spell level var spellLevel = player.Spellbook.GetSpell(slot).Level; if (spellLevel == 0) { return(0); } spellLevel--; // Helpers var damageType = Damage.DamageType.Physical; float damage = 0; float extraDamage = 0; switch (slot) { case SpellSlot.Q: // First Cast: Varus starts drawing back his next shot, gradually increasing its range and damage. // Second Cast: Varus fires, dealing 10/47/83/120/157 (+1) to 15/70/125/180/235 (+1.6) physical damage, reduced by 15% per enemy hit (minimum 33%). // While preparing to shoot Varus' Movement Speed is slowed by 20%. After 4 seconds, Piercing Arrow fails but refunds half its Mana cost. var chargePercentage = SpellManager.Q.Range / SpellManager.Q.ChargedMaxRange; damage = (new float[] { 10, 47, 83, 120, 157 }[spellLevel] +new float[] { 5, 23, 42, 60, 78 }[spellLevel] *chargePercentage) + (1 + chargePercentage * 6) * player.TotalAttackDamage(); break; case SpellSlot.W: // Passive: Varus' basic attacks deal 10/14/18/22/26 (+0.25) bonus magic damage and apply Blight for 6 seconds (stacks 3 times). damageType = Damage.DamageType.Magical; damage = new float[] { 10, 14, 18, 22, 26 }[spellLevel] +0.25f * player.TotalMagicalDamage(); // Varus' other abilities detonate Blight, dealing magic damage equal to 2/2.75/3.5/4.25/5% (+0.02%) of the target's maximum Health per stack (Max: 360 total damage vs Monsters). if (target.GetBlightStacks() > 0) { extraDamage = (float)player.CalcDamage(target, Damage.DamageType.Magical, (new float[] { 2, 2.75f, 3.5f, 4.25f, 5 }[spellLevel] *target.MaxHealth) * target.GetBlightStacks()); if (target is Obj_AI_Minion) { // Special case: max damage 360 extraDamage = Math.Min(360, extraDamage); } } break; case SpellSlot.E: // Varus fires a hail of arrows that deals 65/100/135/170/205 (+0.6) physical damage and desecrates the ground for 4 seconds. // Desecrated Ground slows enemy Movement Speed by 25/30/35/40/45% and reduces healing effects by 50%. damage = new float[] { 65, 100, 135, 170, 205 }[spellLevel] +0.6f * player.TotalAttackDamage(); break; case SpellSlot.R: // Varus flings out a tendril of corruption that deals 150/250/350 (+1) magic damage and immobilizes the first enemy champion hit for 2 seconds. // The corruption then spreads towards nearby uninfected enemy champions, applying the same damage and immobilize if it reaches them. damageType = Damage.DamageType.Magical; damage = new float[] { 150, 250, 350 }[spellLevel] +player.TotalMagicalDamage(); break; } // No damage set if (damage == 0 && extraDamage == 0) { return(0); } // Calculate damage on target and return (-20 to make it actually more accurate Kappa) return((float)player.CalcDamage(target, damageType, damage) + extraDamage - 20); }
/* public static List<List<Vector3>> GetQPredictions(Vector3 position) * { * foreach (var soldier in AzirSoldier.Where(h => h.IsValid && !h.IsDead)) * { * var d = Player.Distance(soldier); * d = d > Q.Range ? soldier.Distance(position) : Q.Range; * * var startPos = soldier.ServerPosition; * var endPos = soldier.ServerPosition.Extend(position, d); * var line = new Geometry.Line(startPos.To2D(), endPos.To2D(), startPos.Distance(endPos)); * // line.ToPolygon().Points * } * } */ public static double GetWDamage(Obj_AI_Turret turret) { return(Player.CalcDamage( turret, Damage.DamageType.Magical, 80 + 25 * Player.Level + .6 * Player.FlatMagicDamageMod)); }
private static void Farm() { foreach (var minion in ObjectManager.Get <Obj_AI_Minion>() .Where( minion => minion.IsValidTarget() && minion.IsEnemy && minion.Distance(Player.ServerPosition) < spells[Spells.E].Range)) { var qdmg = spells[Spells.Q].GetDamage(minion); var wdmg = spells[Spells.W].GetDamage(minion); var edmg = spells[Spells.E].GetDamage(minion); var markDmg = Player.CalcDamage( minion, Damage.DamageType.Magical, Player.FlatMagicDamageMod * 0.15 + Player.Level * 15); //Killable with Q if (minion.Health - qdmg <= 0 && minion.Distance(Player.ServerPosition) <= spells[Spells.Q].Range && spells[Spells.Q].IsReady() && (config.Item("wFarm").GetValue <bool>())) { spells[Spells.Q].CastOnUnit(minion); } if (minion.Health - wdmg <= 0 && minion.Distance(Player.ServerPosition) <= spells[Spells.W].Range && spells[Spells.W].IsReady() && (config.Item("wFarm").GetValue <bool>())) { spells[Spells.Q].Cast(); return; } if (minion.Health - edmg <= 0 && minion.Distance(Player.ServerPosition) <= spells[Spells.E].Range && spells[Spells.E].IsReady() && (config.Item("eFarm").GetValue <bool>())) { CastE(minion); return; } if (minion.Health - wdmg - qdmg <= 0 && minion.Distance(Player.ServerPosition) <= spells[Spells.W].Range && spells[Spells.Q].IsReady() && spells[Spells.W].IsReady() && (config.Item("qFarm").GetValue <bool>()) && (config.Item("wFarm").GetValue <bool>())) { spells[Spells.Q].Cast(minion); spells[Spells.W].Cast(); return; } if (minion.Health - wdmg - qdmg - markDmg <= 0 && minion.Distance(Player.ServerPosition) <= spells[Spells.W].Range && spells[Spells.Q].IsReady() && spells[Spells.W].IsReady() && (config.Item("qFarm").GetValue <bool>()) && (config.Item("wFarm").GetValue <bool>())) { spells[Spells.Q].Cast(minion); spells[Spells.W].Cast(); return; } if (minion.Health - wdmg - qdmg - markDmg - edmg <= 0 && minion.Distance(Player.ServerPosition) <= spells[Spells.W].Range && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady() && spells[Spells.W].IsReady() && (config.Item("qFarm").GetValue <bool>()) && (config.Item("wFarm").GetValue <bool>()) && (config.Item("eFarm").GetValue <bool>())) { CastE(minion); spells[Spells.Q].Cast(minion); spells[Spells.W].Cast(); return; } } }
public static int GetCustomDamage(string auraname, Obj_AI_Hero target, Obj_AI_Hero source) { switch (auraname) { case "itemsunfirecapeaura": return (int) source.CalcDamage(target, Damage.DamageType.Magical, 25 + (1*source.Level)); case "gangplankattackdotpassive": return (int) source.CalcDamage(target, Damage.DamageType.True, 20 + (10*source.Level) + 1.2 * (source.BaseAttackDamage + source.FlatPhysicalDamageMod)); case "bantamtraptarget": return (int) source.CalcDamage(target, Damage.DamageType.Magical, new[] {50, 81, 112}[source.Level/6] + 0.25 * (source.FlatMagicDamageMod)); } return 10; }
static void Game_OnGameUpdate(EventArgs args) { double temp = 0; foreach ( var c in ObjectManager.Get <Obj_AI_Hero>().Where(x => x.IsVisible && x.IsEnemy && x.IsValid)) //&& x.Distance(ObjectManager.Player) < 2500)) { var dmg = Player.GetAutoAttackDamage(c); var howmanyautos = c.Health / dmg; if (howmanyautos > 3 && Vayne && Player.Spellbook.GetSpell(SpellSlot.W).State != SpellState.NotLearned) { var g = new float[] { 0, 20, 30, 40, 50, 60 }; var h = new double[] { 0, .04, .05, .06, .07, .08 }; howmanyautos = (c.Health) / (dmg + ((g[Player.Spellbook.GetSpell(SpellSlot.W).Level] + (c.MaxHealth * h[Player.Spellbook.GetSpell(SpellSlot.W).Level]))) / 3); } else if (howmanyautos > 7 && Cait) { howmanyautos = (c.Health) / (dmg + (Player.CalcDamage(c, Damage.DamageType.Physical, 1.5 * (Player.BaseAttackDamage + Player.FlatPhysicalDamageMod)) / 7)); } else if (Satan) { if (Player.Spellbook.GetSpell(SpellSlot.E).State != SpellState.NotLearned) { howmanyautos = c.Health / (Player.CalcDamage(c, Damage.DamageType.Magical, Player.Spellbook.GetSpell(SpellSlot.E).Level *10 + Player.FlatMagicDamageMod * .3) + dmg); } } else if (Mf) { howmanyautos = c.Health / (Player.GetSpellDamage(c, SpellSlot.W) + dmg); } else if (Jinx) { var mult = new double[] { 0, 1.30, 1.55, 1.80, 2.05, 2.30 }; temp = atkspd * mult[Player.Spellbook.GetSpell(SpellSlot.Q).Level]; //assume max stack of Q before engaging if (Player.HasBuff("JinxQ")) { howmanyautos = c.Health / (Player.CalcDamage(c, Damage.DamageType.Physical, .1 * (Player.BaseAttackDamage + Player.FlatPhysicalDamageMod)) + dmg); } } else if (Draven) { howmanyautos = c.Health / ((Player.GetSpellDamage(c, SpellSlot.Q)) + dmg); //assume axes 24/7 } else if (KogMaw) { howmanyautos = c.Health / (dmg + Player.GetSpellDamage(c, SpellSlot.W)); } else if (Corki) { howmanyautos = c.Health / (dmg + ((Player.BaseAttackDamage + Player.FlatMagicDamageMod)) * .1); } double howmuchtime = 0; if (temp == 0) { howmuchtime = howmanyautos / (atkspd * Player.AttackSpeedMod); } else { howmuchtime = howmanyautos / (temp); } Drawing.DrawText(c.HPBarPosition.X, c.HPBarPosition.Y - 22, System.Drawing.Color.DeepSkyBlue, "Time: " + String.Format("{0:0.00}", howmuchtime) + " Autos: " + String.Format("{0:0.00}", howmanyautos)); } }
public static float GetRealDamage(SpellSlot slot, Obj_AI_Base target, TransformState state = TransformState.AUTOMATIC) { // Helpers var spellLevel = player.Spellbook.GetSpell(slot).Level; var damageType = Damage.DamageType.Physical; float damage = 0; float extraDamage = 0; // Validate spell level if (spellLevel == 0) { return(0); } spellLevel--; switch (slot) { case SpellSlot.Q: if (state == TransformState.MINI || state == TransformState.AUTOMATIC && player.IsMiniGnar()) { // Throws a boomerang that deals 5/35/65/95/125 (+1.15) physical damage and slows enemies by 15/20/25/30/35% for 2 seconds. // The boomerang returns towards Gnar after hitting an enemy, dealing 50% damage to subsequent targets. Each enemy can only be hit once. damage = new[] { 5, 35, 65, 95, 125 }[spellLevel] +1.15f * player.TotalAttackDamage(); } else if (state == TransformState.MEGA || state == TransformState.AUTOMATIC && player.IsMegaGnar()) { // Throws a boulder that stops when it hits an enemy, slowing all nearby enemies and dealing 5/45/85/125/165 (+1.2) physical damage. damage = new[] { 5, 45, 85, 125, 165 }[spellLevel] +1.2f * (player.BaseAttackDamage + player.FlatPhysicalDamageMod); } break; case SpellSlot.W: if (state == TransformState.MINI || state == TransformState.AUTOMATIC && player.IsMiniGnar()) { // Every 3rd attack or spell on the same target deals an additional 10/20/30/40/50 (+1) + 6/8/10/12/14% of the target's max Health as magic damage // and grants Gnar undefined% Movement Speed that decays over 3 seconds (max 100/150/200/250/300 damage vs. monsters). var buff = target.Buffs.FirstOrDefault(b => b.IsActive && Game.Time < b.EndTime && b.DisplayName == "GnarWProc" && b.Caster.NetworkId == player.NetworkId); if (buff != null && buff.Count == 2) { damageType = Damage.DamageType.Magical; damage = new[] { 10, 20, 30, 40, 50 }[spellLevel] +player.TotalMagicalDamage() + new[] { 0.06f, 0.08f, 0.1f, 0.12f, 0.14f }[spellLevel] *target.MaxHealth; // Special case for minions if (target is Obj_AI_Minion) { var maxDamage = new[] { 100, 150, 200, 250, 300 }[spellLevel]; if (player.CalcDamage(target, damageType, damage) > maxDamage) { damageType = Damage.DamageType.True; damage = maxDamage; } } } } else if (state == TransformState.MEGA || state == TransformState.AUTOMATIC && player.IsMegaGnar()) { // Stuns enemies in an area for 1.25 seconds, dealing 25/45/65/85/105 (+1) physical damage. damage = new[] { 25, 45, 65, 85, 105 }[spellLevel] +(player.BaseAttackDamage + player.FlatPhysicalDamageMod); } break; case SpellSlot.E: if (state == TransformState.MINI || state == TransformState.AUTOMATIC && player.IsMiniGnar()) { // Leaps to a location, gaining 20/30/40/50/60% Attack Speed for 3 seconds. If Gnar lands on a unit he will bounce off it, traveling further. // Deals 20/60/100/140/180 (+undefined) [6% of Gnar's Max Health] physical damage and slows briefly if the unit landed on was an enemy. damage = new[] { 20, 60, 100, 140, 180 }[spellLevel] +0.06f * player.MaxHealth; } else if (state == TransformState.MEGA || state == TransformState.AUTOMATIC && player.IsMegaGnar()) { // Leaps to a location and deals 20/60/100/140/180 (+undefined) [6% of Gnar's Max Health] physical damage to all nearby enemies on landing. // Enemies Gnar lands directly on top of are slowed briefly. damage = new[] { 20, 60, 100, 140, 180 }[spellLevel] +0.06f * player.MaxHealth; } break; case SpellSlot.R: if (state == TransformState.MEGA || state == TransformState.AUTOMATIC && player.IsMegaGnar()) { // Knocks all nearby enemies in the specified direction, dealing 200/300/400 (+0.2) (+0.5) physical damage and slowing them by 45% for 1.25/1.5/1.75 seconds. // Any enemy that hits a wall takes 150% damage and is stunned instead of slowed. damage = new[] { 200, 300, 400 }[spellLevel] +0.2f * player.TotalAttackDamage(); extraDamage = (float)player.CalcDamage(target, Damage.DamageType.Magical, player.BaseAbilityDamage + player.FlatMagicDamageMod); } break; } // No damage set if (damage == 0 && extraDamage == 0) { return(0); } // Calculate damage on target and return (-20 to make it actually more accurate Kappa) return((float)player.CalcDamage(target, damageType, damage) + extraDamage - 20); }
private float GetQDamage(Obj_AI_Base target) { var dmg = new double[] { 30, 55, 80, 105, 130 }[Q.Level - 1] +player.TotalAttackDamage * 0.4f; return((float)player.CalcDamage(target, Damage.DamageType.Physical, dmg)); }
public static float GetItemsDamage(Obj_AI_Hero target) { double damage = 0; if (Items.HasItem(odins.Id) && Items.CanUseItem(odins.Id)) { damage += Damage.GetItemDamage(player, target, Damage.DamageItems.OdingVeils); } if (Items.HasItem(hexgun.Id) && Items.CanUseItem(hexgun.Id)) { damage += Damage.GetItemDamage(player, target, Damage.DamageItems.Hexgun); } var ludenStacks = player.Buffs.FirstOrDefault(buff => buff.Name == "itemmagicshankcharge"); if (ludenStacks != null && (Items.HasItem(Ludens.Id) && ludenStacks.Count == 100)) { damage += player.CalcDamage( target, Damage.DamageType.Magical, Damage.CalcDamage(player, target, Damage.DamageType.Magical, 100 + player.FlatMagicDamageMod * 0.15)); } if (Items.HasItem(lich.Id) && Items.CanUseItem(lich.Id)) { damage += player.CalcDamage( target, Damage.DamageType.Magical, player.BaseAttackDamage * 0.75 + player.FlatMagicDamageMod * 0.5); } if (Items.HasItem(Dfg.Id) && Items.CanUseItem(Dfg.Id)) { damage = damage * 1.2; damage += Damage.GetItemDamage(player, target, Damage.DamageItems.Dfg); } if (Items.HasItem(Bft.Id) && Items.CanUseItem(Bft.Id)) { damage = damage * 1.2; damage += Damage.GetItemDamage(player, target, Damage.DamageItems.BlackFireTorch); } if (Items.HasItem(tiamat.Id) && Items.CanUseItem(tiamat.Id)) { damage += Damage.GetItemDamage(player, target, Damage.DamageItems.Tiamat); } if (Items.HasItem(hydra.Id) && Items.CanUseItem(hydra.Id)) { damage += Damage.GetItemDamage(player, target, Damage.DamageItems.Hydra); } if (Items.HasItem(bilgewater.Id) && Items.CanUseItem(bilgewater.Id)) { damage += Damage.GetItemDamage(player, target, Damage.DamageItems.Bilgewater); } if (Items.HasItem(botrk.Id) && Items.CanUseItem(botrk.Id)) { damage += Damage.GetItemDamage(player, target, Damage.DamageItems.Botrk); } if (Items.HasItem(sheen.Id) && (Items.CanUseItem(sheen.Id) || player.HasBuff("sheen"))) { damage += player.CalcDamage(target, Damage.DamageType.Physical, player.BaseAttackDamage); } if (Items.HasItem(gaunlet.Id) && Items.CanUseItem(gaunlet.Id)) { damage += player.CalcDamage(target, Damage.DamageType.Physical, player.BaseAttackDamage * 1.25); } if (Items.HasItem(trinity.Id) && Items.CanUseItem(trinity.Id)) { damage += player.CalcDamage(target, Damage.DamageType.Physical, player.BaseAttackDamage * 2); } return((float)damage); }
private static void KillSteal() { //&& !HasRBuff() if (_config.Item("KillSteal").GetValue <bool>()) { foreach ( Obj_AI_Hero hero in ObjectManager.Get <Obj_AI_Hero>() .Where( hero => ObjectManager.Player.Distance(hero.ServerPosition) <= spells[Spells.E].Range && !hero.IsMe && hero.IsValidTarget() && hero.IsEnemy && !hero.IsInvulnerable)) { var qdmg = spells[Spells.Q].GetDamage(hero); var wdmg = spells[Spells.W].GetDamage(hero); var edmg = spells[Spells.E].GetDamage(hero); var markDmg = _player.CalcDamage(hero, Damage.DamageType.Magical, _player.FlatMagicDamageMod * 0.15 + _player.Level * 15); float ignitedmg; //Ignite Damage if (_igniteSlot != SpellSlot.Unknown) { ignitedmg = (float)_player.GetSummonerSpellDamage(hero, Damage.SummonerSpell.Ignite); } else { ignitedmg = 0f; } if (hero.HasBuff("katarinaqmark") && hero.Health - wdmg - markDmg < 0 && spells[Spells.W].IsReady() && spells[Spells.W].IsInRange(hero)) { spells[Spells.W].Cast(); } if (hero.Health - ignitedmg < 0 && _igniteSlot.IsReady()) { _player.Spellbook.CastSpell(_igniteSlot, hero); } if (hero.Health - edmg < 0 && spells[Spells.E].IsReady()) { spells[Spells.E].Cast(hero); } if (hero.Health - qdmg < 0 && spells[Spells.Q].IsReady() && spells[Spells.Q].IsInRange(hero)) { spells[Spells.Q].Cast(hero); } if (hero.Health - edmg - wdmg < 0 && spells[Spells.E].IsReady() && spells[Spells.W].IsReady()) { CastE(hero); spells[Spells.W].Cast(); } if (hero.Health - edmg - qdmg < 0 && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady()) { CastE(hero); spells[Spells.Q].Cast(hero); } if (hero.Health - edmg - wdmg - qdmg < 0 && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady() && spells[Spells.W].IsReady()) { CastE(hero); spells[Spells.Q].Cast(hero); spells[Spells.W].Cast(); } if (hero.Health - edmg - wdmg - qdmg - markDmg < 0 && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady() && spells[Spells.W].IsReady()) { CastE(hero); spells[Spells.Q].Cast(hero); spells[Spells.W].Cast(); } if (hero.Health - edmg - wdmg - qdmg - ignitedmg < 0 && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady() && spells[Spells.W].IsReady() && _igniteSlot.IsReady()) { CastE(hero); spells[Spells.Q].Cast(hero); spells[Spells.W].Cast(); _player.Spellbook.CastSpell(_igniteSlot, hero); } } foreach ( Obj_AI_Base target in ObjectManager.Get <Obj_AI_Base>() .Where( target => ObjectManager.Player.Distance(target.ServerPosition) <= spells[Spells.E].Range && !target.IsMe && target.IsTargetable && !target.IsInvulnerable)) { foreach ( Obj_AI_Hero focus in ObjectManager.Get <Obj_AI_Hero>() .Where( focus => focus.Distance(focus.ServerPosition) <= spells[Spells.Q].Range && focus.IsEnemy && !focus.IsMe && !focus.IsInvulnerable && focus.IsValidTarget())) { //Variables var qdmg = spells[Spells.Q].GetDamage(focus); var wdmg = spells[Spells.W].GetDamage(focus); float ignitedmg; //Ignite Damage if (_igniteSlot != SpellSlot.Unknown) { ignitedmg = (float)_player.GetSummonerSpellDamage(focus, Damage.SummonerSpell.Ignite); } else { ignitedmg = 0f; } //Mark Damage var markDmg = _player.CalcDamage(focus, Damage.DamageType.Magical, _player.FlatMagicDamageMod * 0.15 + _player.Level * 15); //Q if (focus.Health - qdmg < 0 && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady() && focus.Distance(target.ServerPosition) <= spells[Spells.Q].Range) { CastE(target); spells[Spells.Q].Cast(focus); } // Q + W if (focus.Distance(target.ServerPosition) <= spells[Spells.W].Range && focus.Health - qdmg - wdmg < 0 && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady()) { CastE(target); spells[Spells.Q].Cast(focus); spells[Spells.W].Cast(); } // Q + W + Mark if (focus.Distance(target.ServerPosition) <= spells[Spells.W].Range && focus.Health - qdmg - wdmg - markDmg < 0 && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady() && spells[Spells.W].IsReady()) { CastE(target); spells[Spells.Q].Cast(focus); spells[Spells.W].Cast(); } // Q + Ignite if (focus.Distance(target.ServerPosition) <= 600 && focus.Health - qdmg - ignitedmg < 0 && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady() && _igniteSlot.IsReady()) { CastE(target); spells[Spells.Q].Cast(focus); _player.Spellbook.CastSpell(_igniteSlot, focus); } // Q + W + Ignite if (focus.Distance(target.ServerPosition) <= spells[Spells.W].Range && focus.Health - qdmg - wdmg - ignitedmg < 0 && spells[Spells.E].IsReady() && spells[Spells.Q].IsReady() && spells[Spells.W].IsReady() && _igniteSlot.IsReady()) { CastE(target); spells[Spells.Q].Cast(focus); spells[Spells.W].Cast(); _player.Spellbook.CastSpell(_igniteSlot, focus); } } } } }
public static float ComboDamage(Obj_AI_Hero hero) { float damage = 0; if (Q.IsReady()) { damage += (float)Damage.GetSpellDamage(player, hero, SpellSlot.Q); } if (E.IsReady()) { damage += (float)Damage.GetSpellDamage(player, hero, SpellSlot.E); } //lich if (Items.HasItem(3100) && Items.CanUseItem(3100)) { damage += (float)player.CalcDamage(hero, Damage.DamageType.Magical, player.BaseAttackDamage * 0.75 + player.FlatMagicDamageMod * 0.5); } //sheen if (Items.HasItem(3057) && (Items.CanUseItem(3057) || player.HasBuff("sheen", true))) { damage += (float)player.CalcDamage(hero, Damage.DamageType.Physical, player.BaseAttackDamage); } //gaunlet if (Items.HasItem(3025) && Items.CanUseItem(3025)) { damage += (float)player.CalcDamage(hero, Damage.DamageType.Physical, player.BaseAttackDamage * 1.25); } //trinity if (Items.HasItem(3078) && Items.CanUseItem(3078)) { damage += (float)player.CalcDamage(hero, Damage.DamageType.Physical, player.BaseAttackDamage * 2); } if ((Items.HasItem(Bft.Id) && Items.CanUseItem(Bft.Id)) || (Items.HasItem(Dfg.Id) && Items.CanUseItem(Dfg.Id))) { damage = (float)(damage * 1.2); } if (Items.HasItem(Bft.Id) && Items.CanUseItem(Bft.Id)) { damage += (float)player.GetItemDamage(hero, Damage.DamageItems.Dfg); } if (Items.HasItem(Dfg.Id) && Items.CanUseItem(Dfg.Id)) { damage += (float)player.GetItemDamage(hero, Damage.DamageItems.Dfg); } if (player.Spellbook.CanUseSpell(player.GetSpellSlot("summonerdot")) == SpellState.Ready) { damage += (float)player.GetSummonerSpellDamage(hero, Damage.SummonerSpell.Ignite); } if (Items.HasItem(3077) && Items.CanUseItem(3077)) { damage += (float)player.GetItemDamage(hero, Damage.DamageItems.Tiamat); } if (Items.HasItem(3074) && Items.CanUseItem(3074)) { damage += (float)player.GetItemDamage(hero, Damage.DamageItems.Hydra); } if (Items.HasItem(3144) && Items.CanUseItem(3144)) { damage += (float)player.GetItemDamage(hero, Damage.DamageItems.Bilgewater); } if (Items.HasItem(3153) && Items.CanUseItem(3153)) { damage += (float)player.GetItemDamage(hero, Damage.DamageItems.Botrk); } if (Items.HasItem(3146) && Items.CanUseItem(3146)) { damage += (float)player.GetItemDamage(hero, Damage.DamageItems.Hexgun); } if (Items.HasItem(3091) && Items.CanUseItem(3091)) { damage += (float)player.CalcDamage(hero, Damage.DamageType.Magical, 42); } return(damage); }
private static float ComboDamage(Obj_AI_Hero hero) { float damage = 0; if (Q.IsReady()) { damage += (float)Damage.GetSpellDamage(me, hero, SpellSlot.Q); } if (E.IsReady()) { damage += (float)Damage.GetSpellDamage(me, hero, SpellSlot.E); } if (W.IsReady()) { double wdot = new double[] { 40, 70, 100, 130, 160 }[W.Level] +(new double[] { 4, 6, 8, 10, 12 }[W.Level] / 100) * me.MaxHealth; damage += (float)me.CalcDamage(hero, Damage.DamageType.Magical, wdot); damage += (float)Damage.GetSpellDamage(me, hero, SpellSlot.W); } if (R.IsReady()) { damage += (float)Damage.GetSpellDamage(me, hero, SpellSlot.R); } if ((Items.HasItem(Bft.Id) && Items.CanUseItem(Bft.Id)) || (Items.HasItem(Dfg.Id) && Items.CanUseItem(Dfg.Id))) { damage = (float)(damage * 1.2); } if (Items.HasItem(Bft.Id) && Items.CanUseItem(Bft.Id)) { damage += (float)me.GetItemDamage(hero, Damage.DamageItems.Dfg); } if (Items.HasItem(Dfg.Id) && Items.CanUseItem(Dfg.Id)) { damage += (float)me.GetItemDamage(hero, Damage.DamageItems.Dfg); } if (me.Spellbook.CanUseSpell(me.GetSpellSlot("summonerdot")) == SpellState.Ready && hero.Health < damage + me.GetSummonerSpellDamage(hero, Damage.SummonerSpell.Ignite)) { damage += (float)me.GetSummonerSpellDamage(hero, Damage.SummonerSpell.Ignite); } if (Items.HasItem(3077) && Items.CanUseItem(3077)) { damage += (float)me.GetItemDamage(hero, Damage.DamageItems.Tiamat); } if (Items.HasItem(3074) && Items.CanUseItem(3074)) { damage += (float)me.GetItemDamage(hero, Damage.DamageItems.Hydra); } if (Items.HasItem(3144) && Items.CanUseItem(3144)) { damage += (float)me.GetItemDamage(hero, Damage.DamageItems.Bilgewater); } if (Items.HasItem(3153) && Items.CanUseItem(3153)) { damage += (float)me.GetItemDamage(hero, Damage.DamageItems.Botrk); } if (Items.HasItem(3146) && Items.CanUseItem(3146)) { damage += (float)me.GetItemDamage(hero, Damage.DamageItems.Hexgun); } if (Items.HasItem(3091) && Items.CanUseItem(3091)) { damage += (float)me.CalcDamage(hero, Damage.DamageType.Magical, 42); } return(damage); }
private static double GetComboDamage(Obj_AI_Hero target) { if (target == null) { return(0); } //Thanks Asuvril double passive = 0; if (Me.Level == 18) { passive = 0.5; } else if (Me.Level >= 15) { passive = 0.45; } else if (Me.Level >= 12) { passive = 0.4; } else if (Me.Level >= 9) { passive = 0.35; } else if (Me.Level >= 6) { passive = 0.3; } else if (Me.Level >= 3) { passive = 0.25; } else { passive = 0.2; } double damage = 0; if (Q.IsReady()) { var qhan = 3 - QStack; damage += Q.GetDamage(target) * qhan + Me.GetAutoAttackDamage(target) * qhan * (1 + passive); } if (W.IsReady()) { damage += W.GetDamage(target); } if (R.IsReady() && Me.HasBuff("RivenFengShuiEngine")) { damage += Me.CalcDamage(target, Damage.DamageType.Physical, (new double[] { 80, 120, 160 }[R.Level - 1] + 0.6 * Me.FlatPhysicalDamageMod) * (1 + (target.MaxHealth - target.Health) / target.MaxHealth > 0.75 ? 0.75 : (target.MaxHealth - target.Health) / target.MaxHealth) * 8 / 3); } return(damage); }
private Obj_AI_Hero GetTarget() { if (Master.Program.IsValid(newTarget, Range)) { return(newTarget); } Obj_AI_Hero bestTarget = null; if (Config.SubMenu("TS").Item("TS_Mode").GetValue <StringList>().SelectedIndex == 0) { float bestRatio = 0; foreach (var Obj in ObjectManager.Get <Obj_AI_Hero>().Where(i => Master.Program.IsValid(i, Range))) { float Prior = 1; switch (Config.SubMenu("TS").Item("TS_Prior" + Obj.ChampionName).GetValue <Slider>().Value) { case 2: Prior = 1.5f; break; case 3: Prior = 1.75f; break; case 4: Prior = 2; break; case 5: Prior = 2.5f; break; } var Ratio = 100 / (1 + Obj.Health) * Prior; if (Ratio > bestRatio) { bestRatio = Ratio; bestTarget = Obj; } } } else { foreach (var Obj in ObjectManager.Get <Obj_AI_Hero>().Where(i => Master.Program.IsValid(i, Range))) { if (bestTarget == null) { bestTarget = Obj; } else { switch (Config.SubMenu("TS").Item("TS_Mode").GetValue <StringList>().SelectedIndex) { case 1: if (Obj.BaseAttackDamage + Obj.FlatPhysicalDamageMod < bestTarget.BaseAttackDamage + bestTarget.FlatPhysicalDamageMod) { bestTarget = Obj; } break; case 2: if (Obj.FlatMagicDamageMod < bestTarget.FlatMagicDamageMod) { bestTarget = Obj; } break; case 3: if (Obj.Health - Player.CalcDamage(Obj, Damage.DamageType.Physical, Obj.Health) < bestTarget.Health - Player.CalcDamage(bestTarget, Damage.DamageType.Physical, bestTarget.Health)) { bestTarget = Obj; } break; case 4: if (Obj.Health - Player.CalcDamage(Obj, Damage.DamageType.Magical, Obj.Health) < bestTarget.Health - Player.CalcDamage(bestTarget, Damage.DamageType.Magical, bestTarget.Health)) { bestTarget = Obj; } break; case 5: if (Obj.Health < bestTarget.Health) { bestTarget = Obj; } break; case 6: if (Player.Distance3D(Obj) < Player.Distance3D(bestTarget)) { bestTarget = Obj; } break; case 7: if (Obj.Position.Distance(Game.CursorPos) + 50 < bestTarget.Position.Distance(Game.CursorPos)) { bestTarget = Obj; } break; } } } } return(bestTarget); }
private static int calcDamage(Obj_AI_Hero target) { //var vTarget = SimpleTs.GetTarget(Q.Range, SimpleTs.DamageType.Physical); // normal damage 2 Auto Attacks var AA = Player.CalcDamage(target, Damage.DamageType.Physical, Player.FlatPhysicalDamageMod + Player.BaseAttackDamage); var damage = AA; if (_igniteSlot != SpellSlot.Unknown && Player.SummonerSpellbook.CanUseSpell(_igniteSlot) == SpellState.Ready) { damage += ObjectManager.Player.GetSummonerSpellDamage(target, Damage.SummonerSpell.Ignite); } if (Items.HasItem(3153) && Items.CanUseItem(3153)) { damage += Player.GetItemDamage(target, Damage.DamageItems.Botrk); //ITEM BOTRK } if (E.IsReady() && Config.Item("UseE").GetValue <bool>()) // edamage { damage += Player.CalcDamage(target, Damage.DamageType.Physical, 10 + (E.Level * 30) + (Player.FlatPhysicalDamageMod * 0.2)); } if (Q.IsReady() && Config.Item("UseQ").GetValue <bool>()) // qdamage { damage += Player.CalcDamage(target, Damage.DamageType.Physical, 30 + (Q.Level * 40) + (Player.FlatPhysicalDamageMod * 0.65)); } if (!IsValorMode() && target.HasBuff("QuinnW") && E.IsReady()) { damage += Player.CalcDamage(target, Damage.DamageType.Physical, 15 + (Player.Level * 10) + (Player.FlatPhysicalDamageMod * 0.5)) * 2; // //if target has buff and E is ready passive*2 } if (!IsValorMode() && !target.HasBuff("QuinnW") && E.IsReady()) // if e ISANT ready then calculate only 1 time passive { damage += Player.CalcDamage(target, Damage.DamageType.Physical, 15 + (Player.Level * 10) + (Player.FlatPhysicalDamageMod * 0.5)); // passive } if (!IsValorMode() && target.HasBuff("QuinnW") && !E.IsReady()) // if e ISANT ready then calculate only 1 time passive { damage += Player.CalcDamage(target, Damage.DamageType.Physical, 15 + (Player.Level * 10) + (Player.FlatPhysicalDamageMod * 0.5)); // passive } if (R.IsReady() && Config.Item("UseR").GetValue <bool>()) // rdamage { if (Player.CalcDamage(target, Damage.DamageType.Physical, (75 + (R.Level * 55) + (Player.FlatPhysicalDamageMod * 0.5)) * (2 - ((target.Health - damage - AA * 3) / target.MaxHealth))) > target.Health) { damage += Player.CalcDamage(target, Damage.DamageType.Physical, (75 + (R.Level * 55) + (Player.FlatPhysicalDamageMod * 0.5)) * (2 - ((target.Health - damage) / target.MaxHealth))); } } return((int)damage); }
private static double getQDmg(Obj_AI_Base target) { return(player.CalcDamage(target, Damage.DamageType.Magical, (SpellManaReq(Q, 30, 16) + 0.18 * player.FlatMagicDamageMod))); }
private static void Combo() { if (Player.IsDead) { return; } var usePacket = Config.Item("usePackets").GetValue <bool>(); var isolatedlist = GetIsolatedTargets(); HitChance hitchance = HarassHitChance(); Obj_AI_Hero target = new Obj_AI_Hero(); if (isolatedlist != null && isolatedlist.Any()) { var isolated = isolatedlist.OrderByDescending( hero => Player.CalcDamage(hero, Damage.DamageType.Physical, 100) / (1 + hero.Health) * TargetSelector.GetPriority(hero)).FirstOrDefault(); target = isolated; isolatedlist.Clear(); } else { target = TargetSelector.GetTarget(E.Range, TargetSelector.DamageType.Physical); } if (target == null || !target.IsValid || !target.IsEnemy || target.IsDead || Player.Distance(target) > E.Range + 100) { target = TargetSelector.GetTarget(E.Range, TargetSelector.DamageType.Physical); } if ((target != null)) { // Normal abilities if (Player.Distance(target) <= Q.Range && Config.Item("UseQCombo").GetValue <bool>() && Q.IsReady()) { Orbwalker.SetAttack(false); Q.Cast(target, usePacket); Orbwalker.SetAttack(true); } if (Wnorm && Player.Distance(target) <= W.Range && Config.Item("UseWCombo").GetValue <bool>() && W.IsReady() && W.GetPrediction(target).Hitchance >= hitchance) { PredictionOutput pred = W.GetPrediction(target); W.Cast(pred.CastPosition, usePacket); } if (Player.Distance(target) <= E.Range && Config.Item("UseECombo").GetValue <bool>() && E.IsReady() && Player.Distance(target) > Q.Range) { PredictionOutput pred = E.GetPrediction(target); if (target.IsValid && !target.IsDead) { E.Cast(pred.CastPosition, usePacket); } } // Use EQ AND EW Synergy if ((Player.Distance(target) <= E.Range + Q.Range && Player.Distance(target) > Q.Range && E.IsReady() && Config.Item("UseEGapclose").GetValue <bool>()) || (Player.Distance(target) <= E.Range + W.Range && Player.Distance(target) > Q.Range && E.IsReady() && W.IsReady() && Config.Item("UseEGapcloseW").GetValue <bool>())) { PredictionOutput pred = E.GetPrediction(target); if (target.IsValid && !target.IsDead) { E.Cast(pred.CastPosition, usePacket); } if (Config.Item("UseRGapcloseW").GetValue <bool>() && R.IsReady()) { R.CastOnUnit(ObjectManager.Player); } } // Ult Usage if (R.IsReady() && !Q.IsReady() && !W.IsReady() && !E.IsReady() && Config.Item("UseRCombo").GetValue <bool>()) { R.Cast(); if (Config.Item("Debugon").GetValue <bool>()) { Game.PrintChat("9 - Basic Ult Cast"); } } // Evolved if (Wevolved && Player.Distance(target) <= WE.Range && Config.Item("UseWCombo").GetValue <bool>() && W.IsReady() && W.GetPrediction(target).Hitchance >= hitchance) { PredictionOutput pred = WE.GetPrediction(target); // W.Cast(pred.CastPosition, usePacket); CastWE(target, pred.UnitPosition.To2D()); } if (Wevolved && Player.Distance(target) <= WE.Range && Config.Item("UseWCombo").GetValue <bool>() && W.IsReady() && W.GetPrediction(target).Hitchance >= HitChance.Collision) { List <Obj_AI_Base> PCollision = W.GetPrediction(target).CollisionObjects; foreach ( Obj_AI_Base PredCollisionChar in PCollision.Where(PredCollisionChar => PredCollisionChar.Distance(target) <= 30)) { W.Cast(PredCollisionChar.Position, usePacket); } } if (Player.Distance(target) <= E.Range && Player.Distance(target) > Q.Range && Config.Item("UseECombo").GetValue <bool>() && E.IsReady()) { PredictionOutput pred = E.GetPrediction(target); if (target.IsValid && !target.IsDead) { E.Cast(pred.CastPosition, usePacket); } } if (Config.Item("UseItems").GetValue <bool>()) { UseItems(target); } } }
internal static float GetRendDamage(Obj_AI_Base target, int customStacks = -1) { // Calculate the damage and return return((float)player.CalcDamage(target, Damage.DamageType.Physical, GetRawRendDamage(target, customStacks)) - sliderLinks["spellReductionE"].Value.Value); }
private void Combo() { Obj_AI_Hero target = TargetSelector.GetTarget(E.Range, TargetSelector.DamageType.Magical); if (target == null) { if (maoR) { if (!turnOff) { turnOff = true; Utility.DelayAction.Add(2600, () => turnOffUlt()); } } return; } if (config.Item("selected", true).GetValue <bool>()) { target = CombatHelper.SetTarget(target, TargetSelector.GetSelectedTarget()); orbwalker.ForceTarget(target); } var manaperc = player.Mana / player.MaxMana * 100; if (player.HasBuff("MaokaiSapMagicMelee") && player.Distance(target) < Orbwalking.GetRealAutoAttackRange(player) + 75) { return; } if (config.Item("useItems").GetValue <bool>()) { ItemHandler.UseItems(target, config, ComboDamage(target)); } if (config.Item("useq", true).GetValue <bool>() && Q.CanCast(target) && config.Item("usee", true).GetValue <bool>() && player.Distance(target) <= config.Item("useqrange", true).GetValue <Slider>().Value&& ((config.Item("useqroot", true).GetValue <bool>() && (!target.HasBuffOfType(BuffType.Snare) && !target.HasBuffOfType(BuffType.Slow) && !target.HasBuffOfType(BuffType.Stun) && !target.HasBuffOfType(BuffType.Suppression))) || !config.Item("useqroot", true).GetValue <bool>())) { Q.Cast(target, config.Item("packets").GetValue <bool>()); } if (config.Item("usew", true).GetValue <bool>()) { if (config.Item("blocke", true).GetValue <bool>() && player.Distance(target) < W.Range && W.IsReady() && E.CanCast(target)) { E.Cast(target, config.Item("packets").GetValue <bool>()); CastR(target); Utility.DelayAction.Add(100, () => W.Cast(target, config.Item("packets").GetValue <bool>())); } else if (W.CanCast(target)) { CastR(target); W.Cast(target, config.Item("packets").GetValue <bool>()); } } if (config.Item("usee", true).GetValue <bool>() && E.CanCast(target)) { if (!config.Item("blocke", true).GetValue <bool>() || config.Item("blocke", true).GetValue <bool>() && !W.IsReady()) { E.Cast(target, config.Item("packets").GetValue <bool>()); } } if (R.IsReady()) { bool enoughEnemies = config.Item("user", true).GetValue <Slider>().Value <= player.CountEnemiesInRange(R.Range - 50); Obj_AI_Hero targetR = TargetSelector.GetTarget(R.Range, TargetSelector.DamageType.Magical); if (maoR && targetR != null && ((config.Item("rks", true).GetValue <bool>() && (Damage.GetSpellDamage(player, targetR, SpellSlot.R) + player.CalcDamage(target, Damage.DamageType.Magical, maoRStack)) > targetR.Health) || manaperc < config.Item("rmana", true).GetValue <Slider>().Value || (!enoughEnemies && player.Distance(targetR) > R.Range - 50))) { R.Cast(config.Item("packets").GetValue <bool>()); } if (targetR != null && !maoR && manaperc > config.Item("rmana", true).GetValue <Slider>().Value&& (enoughEnemies || R.IsInRange(targetR))) { R.Cast(config.Item("packets").GetValue <bool>()); } } var ignitedmg = (float)player.GetSummonerSpellDamage(target, Damage.SummonerSpell.Ignite); bool hasIgnite = player.Spellbook.CanUseSpell(player.GetSpellSlot("SummonerDot")) == SpellState.Ready; if (config.Item("useIgnite").GetValue <bool>() && ignitedmg > target.Health && hasIgnite && !E.CanCast(target)) { player.Spellbook.CastSpell(player.GetSpellSlot("SummonerDot"), target); } }
/// <summary> /// TODO The get rend damage. /// </summary> /// <param name="target"> /// TODO The target. /// </param> /// <param name="customStacks"> /// TODO The custom stacks. /// </param> /// <returns> /// The <see cref="float" />. /// </returns> public static float GetRendDamage(Obj_AI_Base target, int customStacks = -1) { // Calculate the damage and return return((float)Player.CalcDamage(target, Damage.DamageType.Physical, GetRawRendDamage(target, customStacks))); }
private static void CheckDamage(Obj_AI_Base target) { if (target == null) { return; } var ad = Me.GetAutoAttackDamage(target); var ignite = Me.GetSpellSlot("summonerdot"); var tmt = Items.HasItem(3077) && Items.CanUseItem(3077) ? Me.GetItemDamage(target, Damage.DamageItems.Tiamat) : 0; var hyd = Items.HasItem(3074) && Items.CanUseItem(3074) ? Me.GetItemDamage(target, Damage.DamageItems.Hydra) : 0; var bwc = Items.HasItem(3144) && Items.CanUseItem(3144) ? Me.GetItemDamage(target, Damage.DamageItems.Bilgewater) : 0; var brk = Items.HasItem(3153) && Items.CanUseItem(3153) ? Me.GetItemDamage(target, Damage.DamageItems.Botrk) : 0; rr = Me.GetSpellDamage(target, SpellSlot.R) - 20; ra = ad + (ad * (runicpassive[Me.Level] / 100) * runiccount); rq = q.IsReady() ? DamageQ(target) : 0; rw = w.IsReady() ? Me.GetSpellDamage(target, SpellSlot.W) : 0; ri = Me.Spellbook.CanUseSpell(ignite) == SpellState.Ready ? Me.GetSummonerSpellDamage(target, Damage.SummonerSpell.Ignite) : 0; ritems = tmt + hyd + bwc + brk; ua = r.IsReady() ? ra + Me.CalcDamage(target, Damage.DamageType.Physical, Me.BaseAttackDamage + Me.FlatPhysicalDamageMod * 0.2) : ua; uq = r.IsReady() ? rq + Me.CalcDamage(target, Damage.DamageType.Physical, Me.BaseAttackDamage + Me.FlatPhysicalDamageMod * 0.2 * 0.7) : uq; uw = r.IsReady() ? rw + Me.CalcDamage(target, Damage.DamageType.Physical, Me.BaseAttackDamage + Me.FlatPhysicalDamageMod * 0.2 * 1) : uw; rr = r.IsReady() ? Me.GetSpellDamage(target, SpellSlot.R) : 0; }
private static float GetComboDamage(Obj_AI_Base enemy) { // do nothing is there no enemy if (enemy == null) { return(0); } // reset values double damage = 0d; var calcQ_ = _menu.Item("menu.Calc.calcQ").GetValue <bool>(); var calcW_ = _menu.Item("menu.Calc.calcW").GetValue <bool>(); var calcE_ = _menu.Item("menu.Calc.calcE").GetValue <bool>(); var calcR_ = _menu.Item("menu.Calc.calcR").GetValue <bool>(); var calcItems_ = _menu.Item("menu.Calc.calcItems").GetValue <bool>(); var calcSummoners_ = _menu.Item("menu.Calc.calcSummoners").GetValue <bool>(); var AA = _menu.Item("menu.Calc.calcAA").GetValue <Slider>().Value; //Console.WriteLine(Spells.Q.DamageType + " // " + Spells.W.DamageType + " // " + Spells.E.DamageType + " // " + Spells.R.DamageType); // Check Q Spell and Calc #region Q Spell Calc if (Spells.Q.IsReady() && calcQ_) { if (Spells.Q.DamageType == TargetSelector.DamageType.Magical) { damage += Player.CalcDamage(enemy, _Damage.DamageType.Magical, Player.GetSpellDamage(enemy, SpellSlot.Q)) * _percentpenetrationmagic; } else if (Spells.Q.DamageType == TargetSelector.DamageType.Physical) { damage += Player.CalcDamage(enemy, _Damage.DamageType.Physical, Player.GetSpellDamage(enemy, SpellSlot.Q)) * _percentpenetrationarmor; } else if (Spells.Q.DamageType == TargetSelector.DamageType.True) { damage += Player.CalcDamage(enemy, _Damage.DamageType.True, Player.GetSpellDamage(enemy, SpellSlot.Q)); } } #endregion // Check W Spell and Calc #region W Spell Calc if (Spells.W.IsReady() && calcW_) { if (Spells.W.DamageType == TargetSelector.DamageType.Magical) { damage += Player.CalcDamage(enemy, _Damage.DamageType.Magical, Player.GetSpellDamage(enemy, SpellSlot.W)) * _percentpenetrationmagic; } else if (Spells.W.DamageType == TargetSelector.DamageType.Physical) { damage += Player.CalcDamage(enemy, _Damage.DamageType.Physical, Player.GetSpellDamage(enemy, SpellSlot.W)) * _percentpenetrationarmor; } else if (Spells.W.DamageType == TargetSelector.DamageType.True) { damage += Player.CalcDamage(enemy, _Damage.DamageType.True, Player.GetSpellDamage(enemy, SpellSlot.W)); } } #endregion // Check E Spell and Calc #region E Spell Calc if (Spells.E.IsReady() && calcE_) { if (Spells.E.DamageType == TargetSelector.DamageType.Magical) { damage += Player.CalcDamage(enemy, _Damage.DamageType.Magical, Player.GetSpellDamage(enemy, SpellSlot.E)) * _percentpenetrationmagic; } else if (Spells.E.DamageType == TargetSelector.DamageType.Physical) { damage += Player.CalcDamage(enemy, _Damage.DamageType.Physical, Player.GetSpellDamage(enemy, SpellSlot.E)) * _percentpenetrationarmor; } else if (Spells.E.DamageType == TargetSelector.DamageType.True) { damage += Player.CalcDamage(enemy, _Damage.DamageType.True, Player.GetSpellDamage(enemy, SpellSlot.E)); } } #endregion // Check R Spell and Calc #region R Spell Calc if (Spells.R.IsReady() && calcR_) { if (Spells.R.DamageType == TargetSelector.DamageType.Magical) { damage += Player.CalcDamage(enemy, _Damage.DamageType.Magical, Player.GetSpellDamage(enemy, SpellSlot.R)) * _percentpenetrationmagic; } else if (Spells.R.DamageType == TargetSelector.DamageType.Physical) { damage += Player.CalcDamage(enemy, _Damage.DamageType.Physical, Player.GetSpellDamage(enemy, SpellSlot.R)) * _percentpenetrationarmor; } else if (Spells.R.DamageType == TargetSelector.DamageType.True) { damage += Player.CalcDamage(enemy, _Damage.DamageType.True, Player.GetSpellDamage(enemy, SpellSlot.R)); } } #endregion damage += Player.GetAutoAttackDamage(enemy, true) * AA; // no need for Autoattack Damage if (calcItems_) { damage = ActiveItems.CalcDamage(enemy, damage); // active Items thanks xSlaice :) } if (Ignite_Ready() && calcSummoners_) { damage += ObjectManager.Player.GetSummonerSpellDamage(enemy, Damage.SummonerSpell.Ignite); } return((float)damage); }
public static float GetRealDamage(SpellSlot slot, Obj_AI_Base target, BurrowState state = BurrowState.AUTOMATIC) { // Damage holders float damage = 0; float extraDamage = 0; var damageType = Damage.DamageType.Physical; // Validate spell level var spellLevel = player.Spellbook.GetSpell(slot).Level; if (spellLevel == 0) { return(0); } spellLevel--; switch (slot) { case SpellSlot.Q: if (state == BurrowState.UNBURROWED || state == BurrowState.AUTOMATIC && !player.IsBurrowed()) { // Rek'Sai's next 3 basic attacks within 5 seconds deal 15/25/35/45/55 (+0.3) bonus Physical Damage to nearby enemies. damage = new float[] { 15, 25, 35, 45, 55 }[spellLevel] +0.3f * player.TotalAttackDamage(); extraDamage = (float)player.GetAutoAttackDamage(target); } else { // Rek'Sai launches a burst of void-charged earth that explodes on first unit hit, dealing 60/90/120/150/180 (+0.7) Magic Damage // and revealing non-stealthed enemies hit for 2.5 seconds. damageType = Damage.DamageType.Magical; damage = new float[] { 60, 90, 120, 150, 180 }[spellLevel] +0.7f * player.TotalMagicalDamage(); } break; case SpellSlot.W: if (state == BurrowState.BURROWED || state == BurrowState.AUTOMATIC && player.IsBurrowed()) { // Un-burrow, dealing 40/80/120/160/200 (+0.4) Physical Damage and knocking up nearby enemies for up to 1 second based on their proximity to Rek'Sai. // A unit cannot be hit by Un-burrow more than once every 10 seconds. if (!target.HasBurrowBuff()) { damage = new float[] { 40, 80, 120, 160, 200 }[spellLevel] +0.4f * player.TotalAttackDamage(); } } break; case SpellSlot.E: if (state == BurrowState.UNBURROWED || state == BurrowState.AUTOMATIC && !player.IsBurrowed()) { // Rek'Sai bites a target dealing undefined Physical Damage, increasing by up to 100% at maximum Fury. If Rek'Sai has 100 Fury, Furious Bite deals True Damage. // Maximum Damage: undefined damage = new float[] { 0.8f, 0.9f, 1, 1.1f, 1.2f }[spellLevel]; damage *= player.TotalAttackDamage(); damage *= (1 + player.ManaPercent / 100); // True damage on full if (player.HasMaxFury()) { damageType = Damage.DamageType.True; } } break; } // Return 0 on no damage if (damage == 0 && extraDamage == 0) { return(0); } // Calculate damage on target and return (-20 so it's actually accurate lol) return((float)player.CalcDamage(target, damageType, damage) + extraDamage - 20); }
private static float GetComboDamage(Obj_AI_Base enemy) { var damage = 0d; if (Q.IsReady()) { var d = Player.GetSpellDamage(enemy, SpellSlot.Q); if (enemy.HasQBuff() || enemy.HasQRBuff()) { d *= 2; } damage += d; } if (R.IsReady()) { var d = 0d; var level = Player.Spellbook.GetSpell(SpellSlot.R).Level; var maxDamage = new double[] { 200, 400, 600 }[level - 1] +1.3f * Player.FlatMagicDamageMod; switch (R.GetSpellSlot()) { case SpellSlot.Q: var qDmg = Player.CalcDamage( enemy, Damage.DamageType.Magical, new double[] { 100, 200, 300 }[level - 1] +.65f * Player.FlatMagicDamageMod); d = qDmg > maxDamage ? maxDamage : qDmg; break; case SpellSlot.W: d = Player.CalcDamage( enemy, Damage.DamageType.Magical, new double[] { 150, 300, 450 }[level - 1] +.975f * Player.FlatMagicDamageMod); break; case SpellSlot.E: var eDmg = Player.CalcDamage( enemy, Damage.DamageType.Magical, new double[] { 100, 200, 300 }[level - 1] +.65f * Player.FlatMagicDamageMod); d = eDmg > maxDamage ? maxDamage : eDmg; break; } if (enemy.HasQBuff() || enemy.HasQRBuff()) { d += Player.GetSpellDamage(enemy, SpellSlot.Q); } damage += d; } if (E.IsReady()) { damage += Player.GetSpellDamage(enemy, SpellSlot.E); } if (W.IsReady()) { damage += Player.GetSpellDamage(enemy, SpellSlot.W); } if (Items.DFG.IsReady()) { damage += .2f * damage + Player.GetItemDamage(enemy, Damage.DamageItems.Dfg); } if (Items.BFT.IsReady()) { damage += .2f * damage + Player.GetItemDamage(enemy, Damage.DamageItems.BlackFireTorch); } if (Items.FQC.IsReady()) { damage += Player.GetItemDamage(enemy, Damage.DamageItems.FrostQueenClaim); } if (Items.BOTRK.IsReady()) { damage += Player.GetItemDamage(enemy, Damage.DamageItems.Botrk); } if (Items.LT.HasItem()) { damage += Player.GetItemDamage(enemy, Damage.DamageItems.LiandrysTorment); } if (Spells.Ignite.IsReady()) { damage += Player.GetSummonerSpellDamage(enemy, Damage.SummonerSpell.Ignite); } damage += Player.GetAutoAttackDamage(enemy, true); return((float)damage); }
private static float RivenDamageQ(SpellDataInst spell, Obj_AI_Hero src, Obj_AI_Hero dsc) { double dmg = 0; if (spell.IsReady()) { dmg += src.CalcDamage( dsc, Damage.DamageType.Physical, (-10 + (spell.Level * 20) + (0.35 + (spell.Level * 0.05)) * (src.FlatPhysicalDamageMod + src.BaseAttackDamage)) * 3); } return (float) dmg; }
private static void onUpdate(EventArgs args) { if (lck || !menu.Item("Q").GetValue <KeyBind>().Active || !Q.IsReady()) { return; } IEnumerable <Obj_AI_Base> a = ObjectManager.Get <Obj_AI_Base>().Where(obj => obj.IsValidTarget() && me.Distance(obj) < me.AttackRange && HealthPrediction.GetHealthPrediction(obj, (int)((me.AttackCastDelay + 1000 * me.Distance(obj) / me.BasicAttack.MissileSpeed) * (menu.Item("delaymul").GetValue <Slider>().Value / 100f) + menu.Item("delayflat").GetValue <Slider>().Value)) > me.CalcDamage(obj, Damage.DamageType.Physical, me.GetAutoAttackDamage(obj)) * me.PercentArmorPenetrationMod); if (!a.Any()) { return; } Obj_AI_Base tgt = a.OrderByDescending(obj => me.Distance(obj)).Last(); pos = Game.CursorPos; lck = true; int delay = (int)((me.AttackCastDelay + 1000 * me.Distance(tgt) / me.BasicAttack.MissileSpeed) * (menu.Item("delaymul").GetValue <Slider>().Value / 100f) + menu.Item("delayflat").GetValue <Slider>().Value); me.IssueOrder(GameObjectOrder.AttackUnit, tgt); Utility.DelayAction.Add(delay, castQ); }