if myHero.charName ~= "Yasuo" then return end
function Print(message) print("GosuMechanics:Yasuo : ".. message.."") end
require 'VPrediction'
----------------------------------------------------------------------------------------------------------------------
-----------------------------------================================--------------------------------------------------
Champions = {
["Aatrox"] = {charName = "Aatrox", skillshots = {
["AatroxE"] = {spellKey = _E, name = "Blade of Torment", spellName = "AatroxE", spellDelay = 250, projectileName = "AatroxBladeofTorment_mis.troy", projectileSpeed = 1200, range = 1075, radius = 100, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["AatroxW"] = {spellKey = _W, spellName = "AatroxW", checkName = true, name = "AatroxW", isAutoBuff = true, range = 125, isSelfCast = true, noAnimation = true},
["AatroxQ"] = {name = "AatroxQ", spellName = "AatroxQ", spellDelay = 250, projectileName = "AatroxQ.troy", projectileSpeed = 450, range = 650, radius = 145, type = "CIRCULAR", fuckedUp = false, blockable = true, danger = 1},
["AatroxR"] = { spellKey = _R, isSelfCast = true, isAutoBuff = true, spellName = "AatroxR", name = "AatroxR", range = 125},
}},
["Ahri"] = {charName = "Ahri", skillshots = {
["AhriOrbofDeception"] = {spellKey = _Q, name = "Orb of Deception", spellName = "AhriOrbofDeception", spellDelay = 250, projectileName = "Ahri_Orb_mis.troy", projectileSpeed = 1750, range = 800, radius = 100, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Orb of Deception Back"] = {name = "Orb of Deception Back", spellName = "AhriOrbofDeception!", spellDelay = 750, projectileName = "Ahri_Orb_mis_02.troy", projectileSpeed = 915, range = 800, radius = 100, type = "LINE"},
["AhriSeduce"] = {spellKey = _E, isTrueRange = true, isCollision = true, name = "Charm", spellName = "AhriSeduce", spellDelay = 250, projectileName = "Ahri_Charm_mis.troy", projectileSpeed = 1600, range = 1075, radius = 60, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["AhriFoxFire"] = { spellKey = _W, isSelfCast = true, spellName = "AhriFoxFire", name = "AhriFoxFire", range = 750, projectileSpeed = 1400},
}},
["Alistar"] = {charName = "Alistar", skillshots = {
--unfinished
["Headbutt"] = {spellKey = _W, isTargeted = true, name = "Headbutt", spellName = "Headbutt", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 650, type = "LINE"},
["Pulverize"] = {spellKey = _Q, isSelfCast = true, name = "Pulverize", spellName = "Pulverize", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 250, type = "CIRCULAR"},
}},
["Amumu"] = {charName = "Amumu", skillshots = {
["BandageToss"] = {spellKey = _Q, isCollision = true, name = "Bandage Toss", spellName = "BandageToss", spellDelay = 250, projectileName = "Bandage_beam.troy", projectileSpeed = 2000, range = 1100, radius = 80, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Tantrum"] = {spellKey = _E, isSelfCast = true, name = "Tantrum", spellName = "Tantrum", spellDelay = 250, range = 200, type = "CIRCULAR"},
["AuraofDespair"] = { spellKey = _W, isSelfCast = true, heroHasNoBuff = "AuraofDespair", spellName = "AuraofDespair", name = "AuraofDespair", range = 300, },
}},
["Anivia"] = {charName = "Anivia", skillshots = {
["FlashFrostSpell"] = {spellKey = _Q, name = "Flash Frost", spellName = "FlashFrostSpell", spellDelay = 250, projectileName = "cryo_FlashFrost_mis.troy", projectileSpeed = 850, range = 1100, radius = 110, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Frostbite"] = {spellKey = _E, isTargeted = true, targetHasBuff = "chilled", name = "Frostbite", spellName = "Frostbite", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 700, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Glacial Storm"] = {spellKey = _R, name = "Glacial Storm", spellName = "GlacialStorm", spellDelay = 250, projectileName = "Ahri_Orb_mis.troy", range = 615, radius = 400, type = "CIRCULAR"},
}},
["Akali"] = {charName = "Akali", skillshots = {
--unfinished
["AkaliQ"] = {spellKey = _Q, isTargeted = true, name = "AkaliQ", spellName = "AkaliQ", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 600, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Crescent Slash"] = {spellKey = _E, isSelfCast = true, name = "Crescent Slash", spellName = "CrescentSlash", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 325, type = "CIRCULAR"},
["Shadow Dance"] = {spellKey = _R, isTargeted = true, name = "Shadow Dance", spellName = "Shadow Dance", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 800, type = "LINE"},
}},
["Ashe"] = {charName = "Ashe", skillshots = {
["EnchantedCrystalArrow"] = { name = "Enchanted Arrow", spellName = "EnchantedCrystalArrow", spellDelay = 250, projectileName = "EnchantedCrystalArrow_mis.troy", projectileSpeed = 1600, range = 25000, radius = 130, type = "LINE", fuckedup = false, blockable = true, danger = 1},
["Volley"] = {spellKey = _W, isTrueRange = true, name = "Volley", spellName = "Volley", spellDelay = 250, range = 1200, radius = 200, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["FrostShot"] = { spellKey = _Q, isSelfCast = true, isAutoBuff = true, heroHasNoBuff = "FrostShot", noAnimation = true, spellName = "FrostShot", name = "FrostShot", range = 600, projectileName = "IceArrow_mis.troy",},
}},
["Annie"] = {charName = "Annie", skillshots = {
--unfinished
["Disintegrate"] = {spellKey = _Q, isTargeted = true, name = "Disintegrate", spellName = "Disintegrate", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 625, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["MoltenShield"] = { spellKey = _E, isSelfCast = true, spellName = "MoltenShield", name = "MoltenShield", range = math.huge, },
["Incinerate"] = {spellKey = _W, isTrueRange = true, name = "Incinerate", spellName = "Incinerate", spellDelay = 500, projectileName = "Thresh_Q_whip_beam.troy", range = 625, radius = 200, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["InfernalGuardian"] = { spellKey = _R, type = "CIRCULAR", checkName = true, spellName = "InfernalGuardian", name = "InfernalGuardian", range = 600, radius = 290},
}},
["Blitzcrank"] = {charName = "Blitzcrank", skillshots = {
["RocketGrabMissile"] = {spellKey = _Q, isCollision = true, isTrueRange = true, name = "Rocket Grab", spellName = "RocketGrabMissile", spellDelay = 250, projectileName = "FistGrab_mis.troy", projectileSpeed = 1800, range = 1050, radius = 70, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Power Fist"] = {spellKey = _E, isSelfCast = true, targetHasBuff = "rocketgrab2", name = "Power Fist", spellName = "PowerFist", spellDelay = 250, range = math.huge,},
["Static Field"] = {spellKey = _R, isSelfCast = true, name = "Static Field", spellName = "StaticField", spellDelay = 250, range = 550, type = "CIRCULAR"},
}},
["Brand"] = {charName = "Brand", skillshots = {
["BrandBlaze"] = {spellKey = _Q, isCollision = true, name = "BrandBlaze", spellName = "BrandBlaze", spellDelay = 250, projectileName = "BrandBlaze_mis.troy", projectileSpeed = 1600, range = 900, radius = 80, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Pillar of Flame"] = {spellKey = _W, name = "Pillar of Flame", spellName = "BrandFissure", spellDelay = 875, projectileName = "BrandPOF_tar_green.troy", range = 900, radius = 240, type = "CIRCULAR"},
["BrandWildfire"] = {name = "BrandWildfire", spellName = "BrandWildfire", castDelay = 250, projectileName = "BrandWildfire_mis.troy", projectileSpeed = 1000, range = 1100, radius = 250, type = "circular", fuckedUp = false, blockable = true, danger = 1},
}},
["Caitlyn"] = {charName = "Caitlyn", skillshots = {
["CaitlynPiltoverPeacemaker"] = {spellKey = _Q, name = "Piltover Peacemaker", spellName = "CaitlynPiltoverPeacemaker", spellDelay = 625, projectileName = "caitlyn_Q_mis.troy", projectileSpeed = 2200, range = 1300, radius = 90, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Caitlyn Entrapment"] = {name = "Caitlyn Entrapment", spellName = "CaitlynEntrapment", spellDelay = 150, projectileName = "caitlyn_entrapment_mis.troy", projectileSpeed = 2000, range = 950, radius = 80, type = "LINE"},
["CaitlynHeadshotMissile"] = {name = "Ace in the Hole", spellName = "CaitlynHeadshotMissile", range = 3000, fuckedup = false, blockable = true, danger = 1, projectileName = "caitlyn_ult_mis.troy"},
}},
["Cassiopeia"] = {charName = "Cassiopeia", skillshots = {
["Noxious Blast"] = {spellKey = _Q, name = "Noxious Blast", spellName = "Noxious Blast", spellDelay = 600, range = 850, radius = 75, type = "CIRCULAR"},
["CassiopeiaTwinFang"] = {spellKey = _E, isTargeted = true, targetHasBuff = "poison", name = "Twin Fang", spellName = "CassiopeiaTwinFang", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", projectileSpeed = 1800, range = 700, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["Chogath"] = {charName = "Chogath", skillshots = {
["Rupture"] = {spellKey = _Q, name = "Rupture", spellName = "Rupture", spellDelay = 875, projectileName = "rupture_cas_01_red_team.troy", range = 950, radius = 125, type = "CIRCULAR"},
["Feast"] = { spellKey = _R, isTargeted = true, isExecute = true, spellName = "Feast", name = "Feast", range = 150, },
--["Rupture"] = { spellKey = _Q, castType = 0, spellName = "Rupture", name = "Rupture", range = 950, projectileName = "AnnieBasicAttack_mis.troy",},
--["VorpalSpikes"] = { spellKey = _E, castType = 0, spellName = "VorpalSpikes", name = "VorpalSpikes", range = 40, projectileName = "TristanaBasicAttack_mis.troy", radius = 170,},
["FeralScream"] = { spellKey = _W, type = "LINE", spellName = "FeralScream", name = "FeralScream", range = 700, radius = 200 },
}},
["Corki"] = {charName = "Corki", skillshots = {
["PhosphorusBomb"] = {spellKey = _Q, name = "Phosphorus Bomb", spellName = "PhosphorusBomb", spellDelay = 750, spellAnimationDelay = 250, projectileName = "LayWaste_point.troy", range = 825, radius = 250, type = "CIRCULAR", fuckedUp = false, blockable = true, danger = 1},
["GGun"] = { spellKey = _E, type = "LINE", spellName = "GGun", name = "GGun", range = 600, radius = 200, noAnimation = true,},
["Missile Barrage"] = {spellKey = _R, isCollision = true, heroHasBuff = "corkimissilebarragenc", isTrueRange = true, name = "Missile Barrage", spellName = "MissileBarrage", spellDelay = 250, projectileName = "corki_MissleBarrage_mis.troy", projectileSpeed = 2000, range = 1300, radius = 40, type = "LINE"},
["MissileBarrageBig"] = {spellKey = _R, isCollision = true, name = "Missile Barrage big", heroHasBuff = "mbcheck2", spellName = "MissileBarrageBig", spellDelay = 250, projectileName = "Corki_MissleBarrage_DD_mis.troy", projectileSpeed = 2000, range = 1600, radius = 60, type = "LINE", fuckedUp = false, blockable = true, danger = 1}
}},
["Darius"] = {charName = "Darius", skillshots = {
--unfinished
["Noxian Guillotine"] = {spellKey = _R, isTargeted = true, isExecute = true, name = "Noxian Guillotine", spellName = "NoxianGuillotine", spellDelay = 250, range = 460, type = "LINE"},
["Crippling Strike"] = {spellKey = _W, isSelfCast = true, isAutoReset = true, name = "Crippling Strike", spellName = "Crippling Strike", spellDelay = 250, range = 125, type = "CIRCULAR"},
["DariusAxeGrabCone"] = {spellKey = _E, isTrueRange = true, name = "Apprehend", spellName = "DariusAxeGrabCone", spellDelay = 320, range = 570, radius = 200, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["DariusCleave"] = {spellKey = _Q, isSelfCast = true, name = "Decimate", spellName = "DariusCleave", spellDelay = 230, range = 425, type = "CIRCULAR"},
}},
["Diana"] = {charName = "Diana", skillshots = {
--["Diana Arc"] = {spellKey = _Q, name = "DianaArc", spellName = "DianaArc", spellDelay = 250, projectileName = "Diana_Q_trail.troy", projectileSpeed = 1600, range = 830, radius = 100, type = "CIRCULAR"},
["DianaArc"] = {spellKey = _Q, name = "DianaArc", spellName = "DianaArc", spellDelay = 250, projectileName = "Diana_Q_trail.troy", range = 830, radius = 200, type = "CIRCULAR", fuckedUp = false, blockable = true, danger = 1},
["Pale Cascade"] = {spellKey = _W, isSelfCast = true, isShield = true, name = "Pale Cascade", spellName = "PaleCascade", spellDelay = 230, range = 200, type = "CIRCULAR", noAnimation = true,
damage = function () return 25 + myHero.ap * .3 + 15 * myHero:GetSpellData(_W).level end},
["Lunar Rush"] = {spellKey = _R, isTargeted = true, name = "Lunar Rush", spellName = "LunarRush", spellDelay = 250, range = 825, type = "LINE"},
}},
["Draven"] = {charName = "Draven", skillshots = {
["DravenFury"] = { spellKey = _W, isSelfCast = true, isAutoBuff = true, noAnimation = true, spellName = "DravenFury", name = "DravenFury", range = 550, },
["DravenSpinning"] = { spellKey = _Q, isSelfCast = true, isAutoBuff = true, noAnimation = true, spellName = "DravenSpinning", name = "DravenSpinning", range = 550, },
["DravenDoubleShot"] = {spellKey = _E, name = "Stand Aside", spellName = "DravenDoubleShot", spellDelay = 250, projectileName = "Draven_E_mis.troy", projectileSpeed = 1400, range = 1100, radius = 130, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["DravenRCast"] = {spellKey = _R, isExecute = true, name = "DravenR", spellName = "DravenRCast", spellDelay = 500, projectileName = "Draven_R_mis!.troy", projectileSpeed = 2000, range = 25000, radius = 160, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["Elise"] = {charName = "Elise", skillshots = {
["EliseHumanE"] = {spellKey = _E, isCollision = true, name = "Cocoon", checkName = true, spellName = "EliseHumanE", spellDelay = 250, projectileName = "Elise_human_E_mis.troy", projectileSpeed = 1450, range = 1100, radius = 70, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["EliseHumanQ"] = {spellKey = _Q, isTargeted = true, checkName = true, name = "Neurotoxin", spellName = "EliseHumanQ", spellDelay = 250, range = 625, type = "LINE", fuckedUp = false, blockable = true, danger = 1, fuckedUp = false, blockable = true, danger = 1},
["Venomous Bite"] = {spellKey = _Q, isTargeted = true, checkName = true, name = "Venomous Bite", spellName = "EliseSpiderQCast", spellDelay = 250, range = 475, type = "LINE"},
["Skittering Frenzy"] = {spellKey = _W, isSelfCast = true, checkName = true, name = "Skittering Frenzy", spellName = "EliseSpiderW", spellDelay = 250, range = 300, type = "CIRCULAR"},
["EliseHumanW"] = {spellKey = _W, isCollision = true, name = "Volatile Spiderling", checkName = true, spellName = "EliseHumanW", spellDelay = 250, projectileName = "Elise_human_E_mis.troy", projectileSpeed = 1450, range = 950, radius = 100, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["Ezreal"] = {charName = "Ezreal", skillshots = {
["EzrealMysticShot"] = {spellKey = _Q, isCollision = true, name = "Mystic Shot", spellName = "EzrealMysticShot", spellDelay = 250, projectileName = "Ezreal_mysticshot_mis.troy", projectileSpeed = 2000, range = 1100, radius = 80, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["EzrealEssenceFlux"] = {spellKey = _W, name = "Essence Flux", spellName = "EzrealEssenceFlux", spellDelay = 250, projectileName = "Ezreal_essenceflux_mis.troy", projectileSpeed = 1500, range = 900, radius = 80, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["EzrealMysticShotPulse"] = {name = "Mystic ShotPulse(E)", spellName = "EzrealMysticShotPulse", spellDelay = 250, projectileName = "Ezreal_mysticshot_mis.troy", projectileSpeed = 2000, range = 1200, radius = 80, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["EzrealTrueshotBarrage"] = {spellKey = _R, isExecute = true, name = "Trueshot Barrage", spellName = "EzrealTrueshotBarrage", spellDelay = 1000, projectileName = "Ezreal_TrueShot_mis.troy", projectileSpeed = 2000, range = 20000, radius = 160, type = "LINE", fuckedup = false, blockable = true, danger = 1},
}},
["Evelynn"] = {charName = "Evelynn", skillshots = {
--unfinished
["Ravage"] = {spellKey = _E, isTargeted = true, name = "Ravage", spellName = "Ravage", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 225, type = "LINE"},
["Dark Frenzy"] = {spellKey = _W, isSelfCast = true, name = "Dark Frenzy", spellName = "DarkFrenzy", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 125, type = "LINE"},
["Hate Spike"] = {spellKey = _Q, isSelfCast = true, name = "Hate Spike", spellName = "HateSpike", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 500, type = "LINE"},
}},
["Heimerdinger"] = {charName = "Heimerdinger", skillshots = {
["HextechMicroRockets"] = {spellKey = _W, isCollision = true, name = "Hextech Micro-Rockets", spellName = "HextechMicroRockets", spellDelay = 250, projectileName = "Ezreal_mysticshot_mis.troy", projectileSpeed = 1200, range = 1100, radius = 80, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["CH-2ElectronStormGrenade"] = {spellKey = _E, name = "CH-2 Electron Storm Grenade", spellName = "CH-2ElectronStormGrenade", spellDelay = 250, projectileName = "Ezreal_essenceflux_mis.troy", projectileSpeed = 1750, range = 925, radius = 80, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["FiddleSticks"] = {charName = "FiddleSticks", skillshots = {
["DarkWind"] = {spellKey = _E, isTargeted = true, name = "Dark Wind", spellName = "DarkWind", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 750, projectileSpeed = 1500, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["Fiora"] = {charName = "Fiora", skillshots = {
["FioraQ"] = { spellKey = _Q, isTargeted = true, spellName = "FioraQ", name = "FioraQ", range = 600,},
["FioraFlurry"] = { spellKey = _E, isSelfCast = true, isAutoBuff = true, noAnimation = true, spellName = "FioraFlurry", name = "FioraFlurry", range = 500, projectileSpeed = 0, projectileName = "AnnieBasicAttack_mis.troy",},
["FioraDance"] = { spellKey = _R, isTargeted = true, isExecute = true, spellName = "FioraDance", name = "FioraDance", range = 400, },
--["FioraRiposte"] = { spellKey = _W, castType = 0, spellName = "FioraRiposte", name = "FioraRiposte", range = 20, projectileSpeed = 0, projectileName = "AnnieBasicAttack_mis.troy",},
}},
["Fizz"] = {charName = "Fizz", skillshots = {
["Leap Strike"] = {spellKey = _Q, isTargeted = true, name = "Leap Strike", spellName = "LeapStrike", spellDelay = 250, range = 700,},
["Seastone Trident"] = {spellKey = _W, isSelfCast = true, isAutoBuff = true, noAnimation = true, name = "Seastone Trident", spellName = "SeastoneTrident", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 600, type = "CIRCULAR"},
--["Fizz Ultimate"] = {name = "Fizz ULT", spellName = "FizzMarinerDoom", spellDelay = 250, projectileName = "Fizz_UltimateMissile.troy", projectileSpeed = 1350, range = 1275, radius = 80, type = "LINE"},
["FizzMarinerDoom"] = {name = "Fizz ULT", spellName = "FizzMarinerDoom", castDelay = 250, projectileName = "Fizz_UltimateMissile.troy", projectileSpeed = 1350, range = 1275, radius = 80, type = "line", fuckedUp = false, blockable = true, danger = 1},
}},
["Galio"] = {charName = "Galio", skillshots = {
["GalioResoluteSmite"] = { spellKey = _Q, name = "GalioResoluteSmite", spellName = "GalioResoluteSmite", spellDelay = 250, projectileName = "galio_concussiveBlast_mis.troy", projectileSpeed = 850, range = 2000, radius = 200, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["GalioRighteousGust"] = { spellKey = _E, type = "LINE", spellName = "GalioRighteousGust", name = "GalioRighteousGust", range = 1180, projectileSpeed = 1200, radius = 120,},
["GalioBulwark"] = { spellKey = _W, isTargeted = true, isShield = true, spellName = "GalioBulwark", name = "GalioBulwark", range = 800, },
["GalioIdolOfDurand"] = { spellKey = _R, isSelfCast = true, channelDuration = 2000, spellName = "GalioIdolOfDurand", name = "GalioIdolOfDurand", range = 600, },
}},
["Gangplank"] = {charName = "Gangplank", skillshots = {
["RaiseMorale"] = { spellKey = _E, isSelfCast = true, isAutoBuff = true, spellName = "RaiseMorale", name = "RaiseMorale", range = 125, projectileName = "pirate_raiseMorale_mis.troy",},
--["CannonBarrage"] = { spellKey = _R, castType = 0, spellName = "CannonBarrage", name = "CannonBarrage", range = 20000, projectileName = "missing_instant.troy",},
["Parley"] = { spellKey = _Q, isTargeted = true, spellName = "Parley", name = "Parley", range = 625, projectileName = "pirate_parley_mis.troy",},
--["RemoveScurvy"] = { spellKey = _W, castType = 0, spellName = "RemoveScurvy", name = "RemoveScurvy", range = 20,},
}},
["Gragas"] = {charName = "Gragas", skillshots = {
["GragasBarrelRoll"] = {spellKey = _Q, name = "Barrel Roll", spellName = "GragasBarrelRoll", spellDelay = 250, projectileName = "gragas_barrelroll_mis.troy", projectileSpeed = 1000, range = 950, radius = 100, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Barrel Roll Missile"] = {name = "Barrel Roll Missile", spellName = "GragasBarrelRollMissile", spellDelay = 0, projectileName = "gragas_barrelroll_mis.troy", projectileSpeed = 1000, range = 1115, radius = 180, type = "CIRCULAR"},
}},
--edit
["Graves"] = {charName = "Graves", skillshots = {
["GravesClusterShot"] = {spellKey = _Q, name = "Buckshot", spellName = "GravesClusterShot", spellDelay = 250, projectileName = "Graves_ClusterShot_mis.troy", projectileSpeed = 1750, range = 900, radius = 60, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["SmokeScreen"] = {spellKey = _W, name = "Smoke Screen", spellName = "SmokeScreen", spellDelay = 250, projectileName = "Graves_SmokeGrenade_mis.troy", projectileSpeed = 1500, range = 950, radius = 300, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["GravesChargeShot"] = {spellKey = _R, isExecute = true, name = "Collateral Damage", spellName = "GravesChargeShot", spellDelay = 250, projectileName = "Graves_ChargedShot_mis.troy", projectileSpeed = 1500, range = 1000, radius = 100, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["Irelia"] = {charName = "Irelia", skillshots = {
["IreliaGatotsu"] = { spellKey = _Q, isTargeted = true, spellName = "IreliaGatotsu", name = "IreliaGatotsu", range = 650,},
["IreliaEquilibriumStrike"] = { spellKey = _E, isTargeted = true, spellName = "IreliaEquilibriumStrike", name = "IreliaEquilibriumStrike", range = 425,
castReq = function (target) return myHero.health < target.health end},
["IreliaTranscendentBlades"] = { spellKey = _R, type = "LINE", spellName = "IreliaTranscendentBlades", name = "IreliaTranscendentBlades", range = 1200, projectileSpeed = 1600, projectileName = "Irelia_ult_dagger_mis.troy", radius = 120, fuckedUp = false, blockable = true, danger = 1},
["IreliaHitenStyle"] = { spellKey = _W, isSelfCast = true, noAnimation = true, spellName = "IreliaHitenStyle", name = "IreliaHitenStyle", range = math.huge,},
}},
["Janna"] = {charName = "Janna", skillshots = {
["HowlingGale"] = { spellKey = _Q, type = "LINE", spellName = "HowlingGale", name = "HowlingGale", range = 1100, projectileName = "HowlingGale_mis.troy", radius = 150, fuckedUp = false, blockable = true, danger = 1},
["Zephyr"] = {spellKey = _W, isTargeted = true, name = "Zephyr", spellName = "Zephyr", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 600, projectileSpeed = 1500, type = "LINE"},
["Eye Of The Storm"] = {spellKey = _E, isTargeted = true, isShield = true, name = "Eye Of The Storm", spellName = "EyeOfTheStorm", spellDelay = 250, range = 800, type = "CIRCULAR",
damage = function () return 40 + 40 * myHero:GetSpellData(_E).level + myHero.ap * .7 end
},
}},
["Jax"] = {charName = "Jax", skillshots = {
--unfinished
["Leap Strike"] = {spellKey = _Q, isTargeted = true, name = "Leap Strike", spellName = "LeapStrike", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 700, type = "CIRCULAR"},
["Empower"] = {spellKey = _W, isSelfCast = true, isAutoReset = true, name = "Empower", spellName = "Empower", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 125, type = "CIRCULAR"},
}},
["Jayce"] = {charName = "Jayce", skillshots = {
["JayceToTheSkies"] = {spellKey = _Q, isTargeted = true, checkName = true, name = "JayceQ", spellName = "JayceToTheSkies", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 600, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Thundering Blow"] = {spellKey = _E, isTargeted = true, checkName = true, name = "Thundering Blow", spellName = "JayceThunderingBlow", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 240, type = "LINE"},
["Hyper Charge"] = {spellKey = _W, isSelfCast = true, checkName = true, isAutoReset = true, name = "Hyper Charge", spellName = "jaycehypercharge", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 500, type = "CIRCULAR"},
["JayceStaticField"] = {spellKey = _W, isSelfCast = true, checkName = true, name = "Lightning Field", spellName = "JayceStaticField", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 285, type = "CIRCULAR"},
["jayceshockblast"] = {spellKey = _Q, isCollision = true, checkName = true, name = "JayceShockBlast", spellName = "jayceshockblast", spellDelay = 250, projectileName = "JayceOrbLightning.troy", projectileSpeed = 1450, range = 1050, radius = 70, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["JayceShockBlastCharged"] = {name = "JayceShockBlastCharged", spellName = "JayceShockBlast", spellDelay = 250, projectileName = "JayceOrbLightningCharged.troy", projectileSpeed = 2350, range = 1600, radius = 70, type = "LINE"},
}},
["Jinx"] = {charName = "Jinx", skillshots = {
["JinxWMissile"] = {spellKey = _W, isCollision = true, name = "Zap", spellName = "JinxWMissile", spellDelay = 600, projectileName = "Jinx_W_mis.troy", projectileSpeed = 3300, range = 1450, radius = 70, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["JinxRWrapper"] = {name = "Super Mega Death Rocket", spellName = "JinxRWrapper", spellDelay = 600, projectileName = "Jinx_R_Mis.troy", projectileSpeed = 2200, range = 20000, radius = 120, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["Karthus"] = {charName = "Karthus", skillshots = {
["Lay Waste"] = {spellKey = _Q, name = "Lay Waste", spellName = "LayWaste", spellDelay = 750, spellAnimationDelay = 250, projectileName = "LayWaste_point.troy", range = 875, radius = 50, type = "CIRCULAR"},
}},
["Karma"] = {charName = "Karma", skillshots = {
--unfinished
["Focused Resolve"] = {spellKey = _W, isTargeted = true, name = "Focused Resolve", spellName = "FocusedResolve", spellDelay = 250, range = 650, projectileName = "swain_shadowGrasp_transform.troy", type = "LINE"},
["Mantra"] = {spellKey = _R, isSelfCast = true, name = "Mantra", spellName = "Mantra", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 950, type = "CIRCULAR"},
["KarmaQ"] = {spellKey = _Q, isCollision = true, name = "KarmaQ", spellName = "KarmaQ", spellDelay = 250, projectileName = "TEMP_KarmaQMis.troy", projectileSpeed = 1700, range = 950, radius = 90, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["KarmaSolKimShield"] = { spellKey = _E, isTargeted = true, isShield = true, spellName = "KarmaSolKimShield", name = "KarmaSolKimShield", range = 800, noAnimation = true,
damage = function () return 40 + myHero.ap * .5 + 40 * myHero:GetSpellData(_E).level end},
}},
["Kassadin"] = {charName = "Kassadin", skillshots = {
--unfinished
["NullSphere"] = {spellKey = _Q, isTargeted = true, name = "Null Sphere", spellName = "NullSphere", spellDelay = 250, range = 650, projectileName = "swain_shadowGrasp_transform.troy", type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Nether Blade"] = {spellKey = _W, isSelfCast = true, isAutoReset = true, isAutoBuff = true, noAnimation = true, name = "Nether Blade", spellName = "NetherBlade", spellDelay = 250, range = 250, type = "CIRCULAR"},
["Force Pulse"] = {spellKey = _E, isTrueRange = true, name = "Force Pulse", spellName = "ForcePulse", spellDelay = 250, range = 700, radius = 200, type = "LINE"},
}},
["Katarina"] = {charName = "Katarina", skillshots = {
["KatarinaE"] = { spellKey = _E, isTargeted = true, spellName = "KatarinaE", name = "KatarinaE", range = 700, projectileSpeed = 0, projectileName = "AnnieBasicAttack_mis.troy",},
["KatarinaW"] = { spellKey = _W, isSelfCast = true, spellName = "KatarinaW", name = "KatarinaW", range = 375, projectileSpeed = 1400, projectileName = "Disintegrate_mis.troy",},
["KatarinaR"] = { spellKey = _R, isSelfCast = true, channelDuration = 2500, spellName = "KatarinaR", name = "KatarinaR", range = 550, projectileName = "katarina_deathLotus_mis.troy", fuckedup = false, blockable = true, danger = 1},
["KatarinaQ"] = { spellKey = _Q, isTargeted = true, spellName = "KatarinaQ", name = "KatarinaQ", range = 675, projectileSpeed = 1100, projectileName = "katarina_bouncingBlades_mis.troy", fuckedUp = false, blockable = true, danger = 1},
}},
["Kayle"] = {charName = "Kayle", skillshots = {
--unfinished
["Reckoning"] = {spellKey = _Q, isTargeted = true, name = "Reckoning", spellName = "Reckoning", spellDelay = 250, range = 650, fuckedUp = false, blockable = true, danger = 1},
["DivineBlessing"] = {spellKey = _W, isTargeted = true, isHeal = true, name = "Divine Blessing", spellName = "DivineBlessing", spellDelay = 250, range = 900, type = "LINE"},
["Righteous Fury"] = {spellKey = _E, isSelfCast = true, noAnimation = true, name = "Righteous Fury", spellName = "RighteousFury", spellDelay = 250, range = 650},
["JudicatorIntervention"] = { spellKey = _R, isTargeted = true, isShield = true, isUntargetable = true, spellName = "JudicatorIntervention", name = "JudicatorIntervention", range = 900,},
}},
["Kennen"] = {charName = "Kennen", skillshots = {
["KennenShurikenHurlMissile1"] = {spellKey = _Q, isCollision = true, name = "Thundering Shuriken", spellName = "KennenShurikenHurlMissile1", spellDelay = 180, projectileName = "kennen_ts_mis.troy", projectileSpeed = 1700, range = 1050, radius = 50, type = "LINE", fuckedUp = false, blockable = true, danger = 1}
}},
["Khazix"] = {charName = "Khazix", skillshots = {
["KhazixQ"] = {spellKey = _Q, isTargeted = true, name = "KhazixQ", spellName = "KhazixQ", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 375, type = "LINE"},
["KhazixW"] = {spellKey = _W, isCollision = true, name = "KhazixW", spellName = "KhazixW", spellDelay = 250, projectileName = "Khazix_W_mis_enhanced.troy", projectileSpeed = 1700, range = 1000, radius = 70, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["khazixwlong"] = {name = "khazixwlong", spellName = "khazixwlong", spellDelay = 250, projectileName = "Khazix_W_mis_enhanced.troy", projectileSpeed = 1700, range = 1025, radius = 70, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["KogMaw"] = {charName = "KogMaw", skillshots = {
["CausticSpittle"] = {spellKey = _Q, isTargeted = true, name = "Caustic Spittle", spellName = "CausticSpittle", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 625, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Bio-Arcane Barrage"] = {spellKey = _W, isSelfCast = true, isAutoBuff = true, name = "Bio-Arcane Barrage", spellName = "BioArcaneBarrage", spellDelay = 250, range = 600, type = "CIRCULAR"},
["KogMawVoidOozeMissile"] = {spellKey = _E, name = "Void Ooze", spellName = "KogMawVoidOozeMissile", spellDelay = 250, projectileName = "KogMawVoidOoze_mis.troy", projectileSpeed = 1450, range = 1200, radius = 100, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Living Artillery"] = {spellKey = _R, name = "Living Artillery", spellName = "KogMawLivingArtillery", spellDelay = 850, projectileName = "KogMawLivingArtillery_mis.troy", range = 2200, radius = 100, type = "CIRCULAR"}
}},
["Leblanc"] = {charName = "Leblanc", skillshots = {
--unfinished
["SigilQ"] = {spellKey = _Q, isTargeted = true, name = "Sigil of Silence", spellName = "SigilQ", spellDelay = 250, projectileName = "non.troy", range = 700, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["LeblancChaosOrbM"] = {spellKey = _R, isTargeted = true, checkName = true, name = "Sigil of Silence R", spellName = "LeblancChaosOrbM", spellDelay = 250, projectileName = "non.troy", range = 700, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["LeblancSoulShackle"] = {spellKey = _E, isCollision = true, name = "Ethereal Chains", spellName = "LeblancSoulShackle", spellDelay = 250, projectileName = "leBlanc_shackle_mis.troy", projectileSpeed = 1600, range = 960, radius = 70, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["LeblancSoulShackleM"] = {name = "Ethereal Chains R", spellName = "LeblancSoulShackleM", spellDelay = 250, projectileName = "leBlanc_shackle_mis_ult.troy", projectileSpeed = 1600, range = 960, radius = 70, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["LeeSin"] = {charName = "LeeSin", skillshots = {
["BlindMonkQOne"] = {spellKey = _Q, isCollision = true, checkName = true, name = "Sonic Wave", spellName = "BlindMonkQOne", spellDelay = 250, projectileName = "blindMonk_Q_mis_01.troy", projectileSpeed = 1800, range = 975, radius = 70, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["blindmonkqtwo"] = {spellKey = _Q, checkName = true, isSelfCast = true, name = "Sonic Wave2", spellName = "blindmonkqtwo", spellDelay = 250, range = 975, radius = 70, type = "LINE"},
["BlindMonkEOne"] = { spellKey = _E, isSelfCast = true, spellName = "BlindMonkEOne", name = "BlindMonkEOne", range = 350, },
["BlindMonkRKick"] = { spellKey = _R, isTargeted = true, isExecute = true, spellName = "BlindMonkRKick", name = "BlindMonkRKick", range = 375, projectileSpeed = 1500,},
}},
["Leona"] = {charName = "Leona", skillshots = {
["LeonaShieldOfDaybreakAttack"] = {spellKey = _Q, isTargeted = true, isAutoReset = true, name = "Shield of Daybreak", spellName = "LeonaShieldOfDaybreakAttack", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 125, type = "CIRCULAR"},
["LeonaSolarBarrier"] = { spellKey = _W, isSelfCast = true, spellName = "LeonaSolarBarrier", name = "LeonaSolarBarrier", range = 275, },
["Zenith Blade"] = {spellKey = _E, name = "Zenith Blade", spellName = "LeonaZenithBlade", spellDelay = 250, projectileName = "Leona_ZenithBlade_mis.troy", projectileSpeed = 2000, range = 900, radius = 80, type = "LINE"},
["Leona Solar Flare"] = {spellKey = _R, name = "Leona Solar Flare", spellName = "LeonaSolarFlare", spellDelay = 250, projectileName = "Leona_SolarFlare_cas.troy", projectileSpeed = 2000, range = 1200, radius = 300, type = "CIRCULAR"}
}},
["Lissandra"] = {charName = "Lissandra", skillshots = {
["LissandraW"] = { spellKey = _W, isSelfCast = true, isRoot = true, spellName = "LissandraW", name = "LissandraW", range = 450, },
["LissandraR"] = { spellKey = _R, isTargeted = true, isStun = true, spellName = "LissandraR", name = "LissandraR", range = 550, },
--find projectile speed
["LissandraQ"] = { spellKey = _Q, type = "LINE", spellName = "LissandraQ", name = "LissandraQ", projectileName = "Lissandra_Q_Shards.troy", projectileSpeed = 1400, range = 725, radius = 75, fuckedUp = false, blockable = true, danger = 1},
--["LissandraE"] = { spellKey = _E, castType = 0, spellName = "LissandraE", name = "LissandraE", range = 25000, projectileSpeed = 850, projectileName = "Lissandra_E_Missile.troy", radius = 110,},
["LissandraE"] = {name = "LissandraE", spellName = "LissandraE", castDelay = 250, projectileName = "Lissandra_E_Missle.troy", projectileSpeed = 850, range = 1500, radius = 140, fuckedUp = false, blockable = true, danger = 1},
}},
["Lucian"] = {charName = "Lucian", skillshots = {
["LucianQ"] = {spellKey = _Q, name = "LucianQ", isTargeted = true, spellName = "LucianQ", spellDelay = 350, projectileName = "Lucian_Q_laser.troy", range = 570, radius = 65, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["LucianW"] = {spellKey = _W, name = "LucianW", spellName = "LucianW", spellDelay = 300, projectileName = "Lucian_W_mis.troy", projectileSpeed = 1600, range = 1000, radius = 80, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["Lulu"] = {charName = "Lulu", skillshots = {
["LuluQ"] = {spellKey = _Q, name = "LuluQ", spellName = "LuluQ", spellDelay = 250, projectileName = "Lulu_Q_Mis.troy", projectileSpeed = 1450, range = 1000, radius = 50, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["LuluW"] = { spellKey = _W, isTargeted = true, isStun = true, spellName = "LuluW", name = "LuluW", range = 650, },
["LuluE"] = { spellKey = _E, isTargeted = true, isShield = true, spellName = "LuluE", name = "LuluE", range = 650,
damage = function () return 40 + 40 * myHero:GetSpellData(_E).level + myHero.ap * .6 end,},
["LuluR"] = { spellKey = _R, isTargeted = true, isShield = true, spellName = "LuluR", name = "LuluR", range = 900,
damage = function () return 150 + 150 * myHero:GetSpellData(_W).level + myHero.ap * .5 end,},
}},
["Lux"] = {charName = "Lux", skillshots = {
["LuxLightBinding"] = {spellKey = _Q, isCollision = true, name = "Light Binding", spellName = "LuxLightBinding", spellDelay = 250, projectileName = "LuxLightBinding_mis.troy", projectileSpeed = 1200, range = 1175, radius = 80, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["LuxLightStrikeKugel"] = {spellKey = _W, name = "LuxLightStrikeKugel", spellName = "LuxLightStrikeKugel", spellDelay = 250, projectileName = "LuxLightstrike_mis.troy", projectileSpeed = 1400, range = 1100, radius = 275, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["LuxMaliceCannon"] = {spellKey = _R, isExecute = true, name = "Lux Malice Cannon", spellName = "LuxMaliceCannon", spellDelay = 950, projectileName = "Enrageweapon_buf_02.troy", range = 3500, radius = 190, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
--["LuxPrismaticWave"] = { spellKey = _W, castType = 0, spellName = "LuxPrismaticWave", name = "LuxPrismaticWave", range = 10000, radius = 150,},
}},
["MasterYi"] = {charName = "Master Yi", skillshots = {
--unfinished
["Alpha Strike"] = {spellKey = _Q, isTargeted = true, isUntargetable = true, name = "Alpha Strike", spellName = "AlphaStrike", spellDelay = 250, range = 600,},
["Wuju Style"] = {spellKey = _E, isSelfCast = true, isAutoBuff = true, noAnimation = true, name = "Wuju Style", spellName = "WujuStyle", },
["Meditate"] = { spellKey = _W, isSelfCast = true, isAutoReset = true, spellName = "Meditate", name = "Meditate", range = 200, },
}},
["Malzahar"] = {charName = "Malzahar", skillshots = {
["Null Zone"] = {spellKey = _W, name = "Null Zone", spellName = "NullZone", spellDelay = 600, range = 800, radius = 250, type = "CIRCULAR"},
["Malefic Visions"] = {spellKey = _E, isTargeted = true, name = "Malefic Visions", spellName = "MaleficVisions", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 650, type = "LINE"},
["Nether Grasp"] = {spellKey = _R, isTargeted = true, channelDuration = 2500, name = "Nether Grasp", spellName = "NetherGrasp", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 700, type = "LINE"},
}},
["Malphite"] = {charName = "Malphite", skillshots = {
["SeismicShard"] = {spellKey = _Q, isTargeted = true, name = "Seismic Shard", spellName = "SeismicShard", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 625, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Ground Slam"] = {spellKey = _E, isSelfCast = true, name = "Ground Slam", spellName = "GroundSlam", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 200, type = "CIRCULAR"},
["Brutal Strikes"] = {spellKey = _W, isSelfCast = true, noAnimation = true, isAutoBuff = true, name = "Brutal Strikes", spellName = "BrutalStrikes", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 200, type = "CIRCULAR"},
["UFSlash"] = {name = "UFSlash", spellName = "UFSlash", spellDelay = 250, projectileName = "TEST", projectileSpeed = 1800, range = 1000, radius = 160, type = "LINE"},
}},
["Maokai"] = {charName = "Maokai", skillshots = {
["MaokaiUnstableGrowth"] = { spellKey = _W, isTargeted = true, spellName = "MaokaiUnstableGrowth", name = "MaokaiUnstableGrowth", range = 650, },
["MaokaiTrunkLine"] = { spellKey = _Q, type = "LINE", spellName = "MaokaiTrunkLine", name = "MaokaiTrunkLine", range = 600, projectileSpeed = 1200, radius = 110, fuckedUp = false, blockable = true, danger = 1},
["MaokaiDrain3"] = { spellKey = _R, type = "CIRCULAR", spellName = "MaokaiDrain3", name = "MaokaiDrain3", range = 625, radius = 575,},
["MaokaiSapling2"] = { spellKey = _E, type = "LINE", spellName = "MaokaiSapling2", name = "MaokaiSapling2", range = 1100, projectileSpeed = 1750, projectileName = "Maokai_sapling_mis.troy", radius = 175},
}},
["Mordekaiser"] = {charName = "Mordekaiser", skillshots = {
["MordekaiserMaceOfSpades"] = { spellKey = _Q, isAutoReset = true, spellName = "MordekaiserMaceOfSpades", name = "MordekaiserMaceOfSpades", range = 125,},
["MordekaiserCreepingDeathCast"] = { spellKey = _W, isTargeted = true, isShield = true, spellName = "MordekaiserCreepingDeathCast", name = "MordekaiserCreepingDeathCast", range = 750, projectileName = "mordekaiser_creepingDeath_mis.troy", radius = 200,},
["MordekaiserChildrenOfTheGrave"] = { spellKey = _R, isTargeted = true, isExecute = true, spellName = "MordekaiserChildrenOfTheGrave", name = "MordekaiserChildrenOfTheGrave", range = 850,},
["MordekaiserSyphonOfDestruction"] = { spellKey = _E, type = "LINE", spellName = "MordekaiserSyphonOfDestruction", name = "MordekaiserSyphonOfDestruction", range = 700, radius = 200},
}},
["Morgana"] = {charName = "Morgana", skillshots = {
["DarkBindingMissile"] = {spellKey = _Q, isCollision = true, name = "Dark Binding", spellName = "DarkBindingMissile", spellDelay = 250, projectileName = "DarkBinding_mis.troy", projectileSpeed = 1200, range = 1300, radius = 80, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["TormentedSoil"] = { spellKey = _W, spellName = "TormentedSoil", name = "TormentedSoil", range = 900, radius = 175, type = "CIRCULAR"},
--["SoulShackles"] = { spellKey = _R, castType = 0, spellName = "SoulShackles", name = "SoulShackles", range = 625, projectileName = "AnnieBasicAttack_mis.troy",},
--["BlackShield"] = { spellKey = _E, castType = 0, spellName = "BlackShield", name = "BlackShield", range = 750, projectileName = "AnnieBasicAttack_mis.troy",},
}},
["DrMundo"] = {charName = "DrMundo", skillshots = {
["InfectedCleaverMissile"] = {spellKey = _Q, isCollision = true, name = "Infected Cleaver", spellName = "InfectedCleaverMissile", spellDelay = 250, projectileName = "dr_mundo_infected_cleaver_mis.troy", projectileSpeed = 2000, range = 1000, radius = 75, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
--["BurningAgony"] = { spellKey = _W, isSelfCast = true, spellName = "BurningAgony", name = "BurningAgony", range = 325, projectileName = "AnnieBasicAttack_mis.troy",},
["Sadism"] = { spellKey = _R, isSelfCast = true, isHeal = true, spellName = "Sadism", name = "Sadism", range = math.huge, projectileName = "dr_mundo_sadism_cas_02.troy",},
["Masochism"] = { spellKey = _E, isSelfCast = true, isAutoBuff = true, spellName = "Masochism", name = "Masochism", range = 300, },
}},
["Nami"] = {charName = "Nami", skillshots = {
["NamiQ"] = {spellKey = _Q, name = "NamiQ", spellName = "NamiQ", spellDelay = 850, projectileName = "Nami_Q_mis.troy", range = 875, radius = 100, type = "CIRCULAR", fuckedUp = false, blockable = true, danger = 1},
["Ebb and Flow"] = {spellKey = _W, isTargeted = true, name = "Ebb and Flow", spellName = "EbbAndFlow", spellDelay = 250, range = 725,},
["TidecallersBlessing"] = {spellKey = _E, isSelfCast = true, name = "TidecallersBlessing", spellName = "TidecallersBlessing", spellDelay = 250, range = 800, type = "CIRCULAR"},
}},
["Nasus"] = {charName = "Nasus", skillshots = {
--unfinished
["NasusW"] = {spellKey = _W, isTargeted = true, name = "Wither", spellName = "NasusW", spellDelay = 250, range = 600, type = "LINE"},
["NasusE"] = {spellKey = _E, spellName = "NasusE", name = "NasusE", range = 650, radius = 400, type = "CIRCULAR" },
["NasusQ"] = {spellKey = _Q, isSelfCast = true, isAutoReset = true, name = "Siphoning Strike", spellName = "NasusQ", spellDelay = 250, range = 125, type = "CIRCULAR"},
}},
["Nautilus"] = {charName = "Nautilus", skillshots = {
["NautilusAnchorDrag"] = {spellKey = _Q, isCollision = true, name = "Dredge Line", spellName = "NautilusAnchorDrag", spellDelay = 250, projectileName = "Nautilus_Q_mis.troy", projectileSpeed = 2000, range = 1080, radius = 80, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["NautilusPiercingGaze"] = { spellKey = _W, isSelfCast = true, isShield = true, spellName = "NautilusPiercingGaze", name = "NautilusPiercingGaze", range = math.huge, },
["NautilusSplashZone"] = { spellKey = _E, isSelfCast = true, spellName = "NautilusSplashZone", name = "NautilusSplashZone", range = 600, },
["NautilusGrandLine"] = { spellKey = _R, isTargeted = true, spellName = "NautilusGrandLine", name = "NautilusGrandLine", range = 825, projectileSpeed = 1400, },
}},
["Nidalee"] = {charName = "Nidalee", skillshots = {
["JavelinToss"] = {spellKey = _Q, isCollision = true, name = "Javelin Toss", spellName = "JavelinToss", spellDelay = 125, projectileName = "nidalee_javelinToss_mis.troy", projectileSpeed = 1300, range = 1500, radius = 60, type = "LINE", checkName = true, fuckedUp = false, blockable = true, danger = 1},
["PrimalSurge"] = { spellKey = _E, isTargeted = true, isHeal = true, spellName = "PrimalSurge", name = "PrimalSurge", range = 600, checkName = true, },
["Bushwhack"] = { spellKey = _W, type = "CIRCULAR", spellName = "Bushwhack", name = "Bushwhack", range = 900, radius = 70, checkName = true, },
["Swipe"] = { spellKey = _E, type = "LINE", spellName = "Swipe", name = "Swipe", range = 400, radius = 200, checkName = true, },
["Pounce"] = { spellKey = _W, isSelfCast = true, spellName = "Pounce", name = "Pounce", range = 375, checkName = true, },
["Takedown"] = { spellKey = _Q, isSelfCast = true, isAutoReset = true, spellName = "Takedown", name = "Takedown", range = 500, checkName = true, },
--["AspectOfTheCougar"] = { spellKey = _R, castType = 0, spellName = "AspectOfTheCougar", name = "AspectOfTheCougar", range = 20, projectileName = "TeemoBasicAttack_mis.troy",},
}},
["Nocturne"] = {charName = "Nocturne", skillshots = {
["NocturneDuskbringer"] = {spellKey = _Q, name = "NocturneDuskbringer", spellName = "NocturneDuskbringer", spellDelay = 250, projectileName = "NocturneDuskbringer_mis.troy", projectileSpeed = 1400, range = 1200, radius = 60, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Unspeakable Horror"] = {spellKey = _E, isTargeted = true, name = "UnspeakableHorror", spellName = "UnspeakableHorror", spellDelay = 250, range = 425, type = "LINE"},
}},
["Olaf"] = {charName = "Olaf", skillshots = {
["OlafAxeThrow"] = {spellKey = _Q, name = "Undertow", spellName = "OlafAxeThrow", spellDelay = 250, projectileName = "olaf_axe_mis.troy", projectileSpeed = 1600, range = 1000, radius = 90, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Reckless Swing"] = {spellKey = _E, isTargeted = true, name = "Reckless Swing", spellName = "RecklessSwing", spellDelay = 250, range = 325, type = "LINE"},
["Vicious Strikes"] = {spellKey = _W, isSelfCast = true, isAutoBuff = true, noAnimation = true, name = "Vicious Strikes", spellName = "ViciousStrikes", range = 200},
}},
["Orianna"] = {charName = "Orianna", skillshots = {
--["OrianaReturn"] = { spellKey = ExtraSpell5, castType = 1, spellName = "OrianaReturn", name = "OrianaReturn", range = 10000, projectileSpeed = 2250, projectileName = "Oriana_Ghost_mis_return.troy", radius = 200,},
--["OrianaRedact"] = { spellKey = ExtraSpell3, castType = 3, spellName = "OrianaRedact", name = "OrianaRedact", range = 1500, projectileSpeed = 2250, projectileName = "Oriana_Ghost_mis_protect.troy", radius = 80,},
--["OrianaIzuna"] = { spellKey = ExtraSpell1, castType = 3, spellName = "OrianaIzuna", name = "OrianaIzuna", range = 2000, projectileSpeed = 1350, projectileName = "Oriana_Ghost_mis.troy", radius = 80,},
--["OrianaDetonateCommand"] = { spellKey = _R, castType = 0, spellName = "OrianaDetonateCommand", name = "OrianaDetonateCommand", range = 410, projectileSpeed = 1200, radius = 80,},
["OrianaIzunaCommand"] = { spellKey = _Q, type = "LINE", spellName = "OrianaIzunaCommand", name = "OrianaIzunaCommand", range = 825, projectileSpeed = 1200, radius = 80,},
["OrianaRedactCommand"] = { spellKey = _E, isTargeted = true, isShield = true, spellName = "OrianaRedactCommand", name = "OrianaRedactCommand", range = 1120, projectileSpeed = 1200, radius = 80,},
["OrianaDissonanceCommand"] = { spellKey = _W, isSelfCast = true, spellName = "OrianaDissonanceCommand", name = "OrianaDissonanceCommand", range = math.huge, radius = 80,},
}},
["Pantheon"] = {charName = "Pantheon", skillshots = {
--unfinished
["SpearShot"] = {spellKey = _Q, isTargeted = true, name = "Spear Shot", spellName = "SpearShot", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 600, type = "CIRCULAR", fuckedUp = false, blockable = true, danger = 1},
["Aegis of Zeonia"] = {spellKey = _W, isTargeted = true, name = "Aegis of Zeonia", spellName = "PantheonW", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 600, type = "LINE"},
["Pantheon_Heartseeker"] = {spellKey = _E, channelDuration = 750, name = "Heartseeker Strike", spellName = "Pantheon_Heartseeker", spellDelay = 250, projectileName = "Thresh_Q_whip_beam.troy", projectileSpeed = 2000, range = 600, radius = 200, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["Poppy"] = {charName = "Poppy", skillshots = {
--unfinished
["Devastating Blow"] = {spellKey = _Q, isTargeted = true, name = "Devastating Blow", spellName = "DevastatingBlow", spellDelay = 250, range = 125, projectileName = "swain_shadowGrasp_transform.troy", type = "LINE"},
["Heroic Charge"] = {spellKey = _E, isTargeted = true, name = "Heroic Charge", spellName = "HeroicCharge", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 525, type = "LINE"},
["Paragon of Demacia"] = {spellKey = _W, isSelfCast = true, isAutoBuff = true, noAnimation = true, name = "Paragon of Demacia", spellName = "PoppyW", spellDelay = 250, range = 300,},
}},
["Quinn"] = {charName = "Quinn", skillshots = {
["QuinnQ"] = {spellKey = _Q, isCollision = true, name = "QuinnQ", spellName = "QuinnQ", spellDelay = 250, projectileName = "Quinn_Q_missile.troy", projectileSpeed = 1550, range = 1050, radius = 80, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["QuinnE"] = { spellKey = _E, isTargeted = true, spellName = "QuinnE", name = "QuinnE", range = 750, },
}},
["Rumble"] = {charName = "Rumble", skillshots = {
["RumbleGrenade"] = {spellKey = _E, name = "RumbleGrenade", spellName = "RumbleGrenade", spellDelay = 250, projectileName = "rumble_taze_mis.troy", projectileSpeed = 2000, range = 800, radius = 90, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Flamespitter"] = {spellKey = _Q, name = "Flamespitter", spellName = "Flamespitter", spellDelay = 250, range = 650, radius = 90, type = "CIRCULAR"},
["RumbleShield"] = { spellKey = _W, isSelfCast = true, isShield = true, spellName = "RumbleShield", name = "RumbleShield", range = math.huge,
damage = function () return 20 + 30 * myHero:GetSpellData(_W).level + myHero.ap * .4 end,},
}},
["Rengar"] = {charName = "Rengar", skillshots = {
--unfinished
["RengarE"] = {spellKey = _E, isTargeted = true, name = "Bola Strike", spellName = "RengarE", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 575, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Savagery"] = {spellKey = _Q, isSelfCast = true, isAutoReset = true, name = "Savagery", spellName = "Savagery", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 125, type = "CIRCULAR"},
--["Empowered Savagery"] = {spellKey = _Q, isSelfCast = true, isAutoReset = true, hasBuff="" ,name = "Empowered Savagery", spellName = "EmpoweredSavagery", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 125, type = "CIRCULAR"},
["Battle Roar"] = {spellKey = _W, isSelfCast = true, noAnimation = true, name = "Battle Roar", spellName = "RengarQ", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 500, type = "CIRCULAR"},
}},
["Renekton"] = {charName = "Renekton", skillshots = {
--unfinished
["Ruthless Predator"] = {spellKey = _W, isTargeted = true, isAutoReset = true, name = "Ruthless Predator", spellName = "RuthlessPredator", spellDelay = 250, range = 125, projectileName = "swain_shadowGrasp_transform.troy", type = "LINE"},
["Cull the Meek"] = {spellKey = _Q, isSelfCast = true, isTrueRange = true, name = "Cull the Meek", spellName = "RenektonQ", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 225, type = "CIRCULAR"},
["Slice And Dice"] = {spellKey = _E, name = "Slice", spellName = "Slice", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 450, radius = 200, type = "LINE"},
}},
["Riven"] = {charName = "Riven", skillshots = {
--unfinished
["Ki Burst"] = {spellKey = _W, isSelfCast = true, name = "Ki Burst", spellName = "RivenW", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 125, type = "CIRCULAR"},
["Broken Wings"] = {spellKey = _Q, name = "Broken Wings", spellName = "RivenTriCleave", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 260, radius = 200, type = "LINE"},
["Valor"] = {spellKey = _E, name = "Valor", spellName = "Valor", spellDelay = 250, projectileName = "Thresh_Q_whip_beam.troy", range = 325, radius = 200, type = "LINE"},
["RivenR"] = {spellKey = _R, name = "Blade of the Exile", spellName = "RivenR", spellDelay = 250, projectileName = "Thresh_Q_whip_beam.troy", range = 900, radius = 200, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["Ryze"] = {charName = "Ryze", skillshots = {
--unfinished
["Overload"] = {spellKey = _Q, isTargeted = true, name = "Overload", spellName = "Overload", spellDelay = 250, range = 600, projectileName = "Overload_mis.troy", type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Rune Prison"] = {spellKey = _W, isTargeted = true, name = "Rune Prison", spellName = "RunePrison", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 600, type = "LINE"},
["SpellFlux"] = {spellKey = _E, isTargeted = true, name = "Spell Flux", spellName = "SpellFlux", spellDelay = 250, projectileName = "SpellFlux_mis.troy", range = 600, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Desperate Power"] = {spellKey = _R, isSelfCast = true, name = "Desperate Power", spellName = "Desperate Power", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 600, type = "CIRCULAR"},
}},
["Sejuani"] = {charName = "Sejuani", skillshots = {
["SejuaniR"] = {name = "SejuaniR", spellName = "SejuaniGlacialPrisonCast", spellDelay = 250, projectileName = "Sejuani_R_mis.troy", projectileSpeed = 1600, range = 1200, radius = 110, type = "LINE"},
}},
["Shaco"] = {charName = "Shaco", skillshots = {
["TwoShivPoison"] = { spellKey = _E, isTargeted = true, spellName = "TwoShivPoison", name = "TwoShivPoison", range = 625, projectileName = "JesterDagger.troy", fuckedUp = false, blockable = true, danger = 1},
--["HallucinateFull"] = { spellKey = _R, castType = 0, spellName = "HallucinateFull", name = "HallucinateFull", range = 500, projectileName = "AnnieBasicAttack_mis.troy",},
--["Deceive"] = { spellKey = _Q, castType = 0, spellName = "Deceive", name = "Deceive", range = 25000, projectileName = "AnnieBasicAttack_mis.troy",},
--["JackInTheBox"] = { spellKey = _W, type = "CIRCULAR", spellName = "JackInTheBox", name = "JackInTheBox", range = 425, projectileName = "TristannaBasicAttack4_mis.troy",},
}},
["Shen"] = {charName = "Shen", skillshots = {
["ShadowDash"] = {name = "ShadowDash", spellName = "ShenShadowDash", spellDelay = 0, projectileName = "shen_shadowDash_mis.troy", projectileSpeed = 3000, range = 575, radius = 50, type = "LINE"},
["ShenVorpalStar"] = { spellKey = _Q, isTargeted = true, spellName = "ShenVorpalStar", name = "ShenVorpalStar", range = 475, projectileSpeed = 1500, projectileName = "shen_vorpalStar_mis.troy"},
["ShenFeint"] = { spellKey = _W, isShield = true, isSelfCast = true, spellName = "ShenFeint", name = "ShenFeint", range = math.huge,
damage = function () return 20 + 40 * myHero:GetSpellData(_W).level + myHero.ap * .6 end,},
--["ShenStandUnited"] = { spellKey = _R, castType = 0, spellName = "ShenStandUnited", name = "ShenStandUnited", range = 25000, projectileName = "AnnieBasicAttack_mis.troy",},
}},
["Shyvana"] = {charName = "Shyvana", skillshots = {
["ShyvanaDoubleAttack"] = { spellKey = _Q, isSelfCast = true, isAutoReset = true, spellName = "ShyvanaDoubleAttack", name = "ShyvanaDoubleAttack", range = 125, },
["ShyvanaFireball"] = { spellKey = _E, spellName = "ShyvanaFireball", name = "ShyvanaFireball", range = 925, projectileSpeed = 1200, projectileName = "shyvana_flameBreath_mis.troy", radius = 60, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["ShyvanaImmolationAura"] = { spellKey = _W, isSelfCast = true, noAnimation = true, spellName = "ShyvanaImmolationAura", name = "ShyvanaImmolationAura", range = 150, },
}},
["Skarner"] = {charName = "Skarner", skillshots = {
--unfinished
["Crystal Slash"] = {spellKey = _Q, isSelfCast = true, name = "Crystal Slash", spellName = "CrystalSlash", spellDelay = 250, range = 300, type = "CIRCULAR"},
["Fracture"] = {spellKey = _E, name = "Fracture", spellName = "Fracture", spellDelay = 250, projectileName = "TEMP_KarmaQMis.troy", projectileSpeed = 1700, range = 900, radius = 45, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["SkarnerExoskeleton"] = { spellKey = _W, isSelfCast = true, isShield = true, spellName = "SkarnerExoskeleton", name = "SkarnerExoskeleton", range = math.huge,
damage = function () return 25 + 55 * myHero:GetSpellData(_W).level + myHero.ap * .8 end,}
}},
["Sion"] = {charName = "Sion", skillshots = {
["CrypticGaze"] = { spellKey = _Q, isTargeted = true, isStun = true, spellName = "CrypticGaze", name = "CrypticGaze", range = 550, projectileName = "CrypticGaze_mis.troy",},
--["DeathsCaressFull"] = { spellKey = _W, castType = 0, spellName = "DeathsCaressFull", name = "DeathsCaressFull", range = 1, projectileName = "AnnieBasicAttack_mis.troy",},
--["Cannibalism"] = { spellKey = _R, castType = 0, spellName = "Cannibalism", name = "Cannibalism", range = 1,},
--["Enrage"] = { spellKey = _E, castType = 0, spellName = "Enrage", name = "Enrage", range = 1, projectileName = "FuryoftheAncient_mis.troy",},
}},
["Sivir"] = {charName = "Sivir", skillshots = { --hard to measure speed
--unfinished
["SivirQ"] = {spellKey = _Q, name = "Boomerang Blade", spellName = "SivirQ", spellDelay = 250, projectileName = "Sivir_Base_Q_mis.troy", projectileSpeed = 1350, range = 1075, radius = 101, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Ricochet"] = {spellKey = _W, isSelfCast = true, isAutoReset = true, name = "Ricochet", spellName = "Ricochet", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 550, type = "LINE"},
}},
["Sona"] = {charName = "Sona", skillshots = {
["HymnofValor"] = {spellKey = _Q, isSelfCast = true, name = "Hymn of Valor", spellName = "HymnofValor", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 700, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["SonaAriaofPerseverance"] = { spellKey = _W, isSelfCast = true, isHeal = true, spellName = "SonaAriaofPerseverance", name = "SonaAriaofPerseverance", range = 1000,},
["SonaCrescendo"] = {name = "Crescendo", spellName = "SonaCrescendo", spellDelay = 250, projectileName = "SonaCrescendo_mis.troy", projectileSpeed = 2400, range = 1000, radius = 150, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["Soraka"] = {charName = "Soraka", skillshots = {
["Infuse"] = {spellKey = _E, isTargeted = true, name = "Infuse", spellName = "Infuse", spellDelay = 250, range = 725, type = "LINE"},
["Starcall"] = {spellKey = _Q, isSelfCast = true, isTrueRange = true, name = "Starcall", spellName = "Starcall", spellDelay = 250, range = 675, type = "CIRCULAR"},
["AstralBlessing"] = {spellKey = _W, isTargeted = true, isHeal = true, spellName = "AstralBlessing", name = "AstralBlessing", range = 750},
["Wish"] = { spellKey = _R, isTargeted = true, isHeal = true, spellName = "Wish", name = "Wish", range = math.huge},
}},
["Swain"] = {charName = "Swain", skillshots = {
--unfinished
["Decrepify"] = {spellKey = _Q, isTargeted = true, name = "Decrepify", spellName = "Decrepify", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 625, radius = 125, type = "LINE", fuckedUp = false, blockable = true, danger = 1, fuckedUp = false, blockable = true, danger = 1},
["Nevermove"] = {spellKey = _W, name = "Nevermove", spellName = "SwainShadowGrasp", spellDelay = 875, projectileName = "swain_shadowGrasp_transform.troy", range = 900, radius = 125, type = "CIRCULAR"},
["Torment"] = {spellKey = _E, isTargeted = true, name = "Torment", spellName = "Torment", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", projectileSpeed = 1000, range = 625, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["Syndra"] = {charName = "Syndra", skillshots = {
["SyndraQ"] = {name = "SyndraQ", spellName = "SyndraQ", spellDelay = 200, projectileName = "Syndra_Q_cas.troy", projectileSpeed = 300, range = 800, radius = 180, type = "CIRCULAR", fuckedUp = false, blockable = true, danger = 1}
}},
["Talon"] = {charName = "Talon", skillshots = {
--unfinished
["Noxian Diplomacy"] = {spellKey = _Q, isSelfCast = true, isAutoReset = true, name = "Noxian Diplomacy", spellName = "TalonQ", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 125, type = "CIRCULAR"},
["Cutthroat"] = {spellKey = _E, isTargeted = true, name = "Cutthroat", spellName = "Cutthroat", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 700, type = "CIRCULAR"},
["Rake"] = {spellKey = _W, name = "Rake", spellName = "Rake", spellDelay = 250, projectileName = "Thresh_Q_whip_beam.troy", projectileSpeed = 2000, range = 600, radius = 200, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["ShadowAssault"] = {spellKey = _R, isSelfCast = true, name = "Shadow Assault", spellName = "ShadowAssault", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 500, type = "CIRCULAR", fuckedUp = false, blockable = true, danger = 1},
}},
["Taric"] = {charName = "Taric", skillshots = {
["Imbue"] = { spellKey = _Q, isTargeted = true, isHeal = true, spellName = "Imbue", name = "Imbue", range = 750, },
["Dazzle"] = {spellKey = _E, isTargeted = true, name = "Dazzle", spellName = "Dazzle", spellDelay = 250, range = 625, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Shatter"] = {spellKey = _W, isSelfCast = true, name = "Shatter", spellName = "Shatter", spellDelay = 250, range = 200, type = "CIRCULAR"},
["Radiance"] = {spellKey = _R, isSelfCast = true, name = "Radiance", spellName = "Radiance", spellDelay = 250, range = 200, type = "CIRCULAR"},
}},
["Teemo"] = {charName = "Teemo", skillshots = {
--insert projectile speed
["BlindingDart"] = {spellKey = _Q, isTargeted = true, name = "BlindingDart", spellName = "BlindingDart", spellDelay = 250, projectileName = "BlindShot_mis.troy", projectileSpeed = 1900, range = 680, fuckedUp = false, blockable = true, danger = 1}
}},
["Thresh"] = {charName = "Thresh", skillshots = {
["ThreshQ"] = {spellKey = _Q, isCollision = true, name = "ThreshQ", spellName = "ThreshQ", spellDelay = 500, projectileName = "Thresh_Q_whip_beam.troy", projectileSpeed = 1900, range = 1075, radius = 65, type = "LINE", fuckedUp = false, blockable = true, danger = 1}
}},
["Tristana"] = {charName = "Tristana", skillshots = {
--unfinished
["Explosive Shot"] = {spellKey = _E, isTargeted = true, isAutoReset = true, name = "Explosive Shot", spellName = "ExplosiveShot", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 700, type = "LINE"},
["Rapid Fire"] = {spellKey = _Q, isSelfCast = true, name = "Rapid Fire", spellName = "RapidFire", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 700, type = "CIRCULAR"},
["BusterShot"] = {spellKey = _R, isTargeted = true, isExecute = true, name = "Buster Shot", spellName = "BusterShot", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 645, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["Trundle"] = {charName = "Trundle", skillshots = {
["TrundlePain"] = { spellKey = _R, isTargeted = true, spellName = "TrundlePain", name = "TrundlePain", range = 700,},
["trundledesecrate"] = { spellKey = _W, spellName = "trundledesecrate", name = "trundledesecrate", range = 900, radius = 1000, type = "CIRCULAR"},
["TrundleTrollSmash"] = { spellKey = _Q, isSelfCast = true, isAutoReset = true, spellName = "TrundleTrollSmash", name = "TrundleTrollSmash", range = 125,},
["TrundleCircle"] = { spellKey = _E, spellName = "TrundleCircle", name = "TrundleCircle", range = 1000, radius = 62, type = "CIRCULAR"},
}},
["Tryndamere"] = {charName = "Tryndamere", skillshots = {
["UndyingRage"] = { spellKey = _R, isSelfCast = true, isShield = true, spellName = "UndyingRage", name = "UndyingRage", range = math.huge,},
}},
["TwistedFate"] = {charName = "TwistedFate", skillshots = {
["WildCards"] = {spellKey = _Q, name = "Loaded Dice", spellName = "WildCards", spellDelay = 250, projectileName = "Roulette_mis.troy", projectileSpeed = 1000, range = 1450, radius = 40, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Pick A Card"] = {spellKey = _W, isSelfCast = true, checkName = true, name = "Pick A Card", spellName = "PickACard", spellDelay = 250, projectileName = "Thresh_Q_whip_beam.troy", projectileSpeed = 1500, range = 700, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Gold Card"] = {spellKey = _W, isSelfCast = true, checkName = true, name = "Gold Card", spellName = "goldcardlock", spellDelay = 250, projectileName = "TwistedFate_Base_W_GoldCard.troy", projectileSpeed = 1500, range = math.huge, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Blue Card"] = {spellKey = _W, isSelfCast = true, checkName = true, name = "Blue Card", spellName = "bluecardlock", spellDelay = 250, projectileName = "TwistedFate_Base_W_BlueCard.troy", projectileSpeed = 1500, range = math.huge, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Red Card"] = {spellKey = _W, isSelfCast = true, checkName = true, name = "Red Card", spellName = "redcardlock", spellDelay = 250, projectileName = "TwistedFate_Base_W_RedCard.troy", projectileSpeed = 1500, range = math.huge, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["Twitch"] = {charName = "Twitch", skillshots = {
["TwitchVenomCask"] = { spellKey = _W, type = "LINE", spellName = "TwitchVenomCask", name = "TwitchVenomCask", projectileName = "Twitch_Venom_Splash.troy", projectileSpeed = 1400, range = 900, radius = 200, fuckedUp = false, blockable = true, danger = 1},
["HideInShadows"] = { spellKey = _Q, isSelfCast = true, isAutoBuff = true, noAnimation = ture, spellName = "HideInShadows", name = "HideInShadows", range = 550, },
["Expunge"] = { spellKey = _E, isSelfCast = true, spellName = "Expunge", name = "Expunge", range = 1200, fuckedUp = false, blockable = true, danger = 1},
--["FullAutomatic"] = { spellKey = _R, castType = 0, spellName = "FullAutomatic", name = "FullAutomatic", range = 1200,},
}},
["Udyr"] = {charName = "Udyr", skillshots = {
["UdyrPhoenixStance"] = { spellKey = _R, isSelfCast = true, noAnimation = true, isAutoBuff = true, spellName = "UdyrPhoenixStance", name = "UdyrPhoenixStance", range = math.huge,},
["UdyrTurtleStance"] = { spellKey = _W, isSelfCast = true, noAnimation = true, isShield = true, spellName = "UdyrTurtleStance", name = "UdyrTurtleStance", range = math.huge,},
["UdyrBearStance"] = { spellKey = _E, isSelfCast = true, noAnimation = true, spellName = "UdyrBearStance", name = "UdyrBearStance", range = math.huge,},
["UdyrTigerStance"] = { spellKey = _Q, isSelfCast = true, noAnimation = true, isAutoBuff = true, spellName = "UdyrTigerStance", name = "UdyrTigerStance", range = math.huge,},
}},
["Urgot"] = {charName = "Urgot", skillshots = {
["UrgotHeatseekingLineMissile"] = {name = "Acid Hunter", spellName = "UrgotHeatseekingLineMissile", spellDelay = 175, projectileName = "UrgotLineMissile_mis.troy", projectileSpeed = 1600, range = 1000, radius = 60, type = "LINE", fuckedUp = false, blockable = true, danger = 1, fuckedUp = false, blockable = true, danger = 1},
["UrgotPlasmaGrenade"] = {name = "Plasma Grenade", spellName = "UrgotPlasmaGrenade", spellDelay = 250, projectileName = "UrgotPlasmaGrenade_mis.troy", projectileSpeed = 1750, range = 900, radius = 250, type = "CIRCULAR", fuckedUp = false, blockable = true, danger = 1},
}},
["MonkeyKing"] = {charName = "MonkeyKing", skillshots = {
--unfinished
["MonkeyKingNimbus"] = {spellKey = _E, isTargeted = true, name = "Nimbus Strike", spellName = "MonkeyKingNimbus", spellDelay = 250, range = 625, type = "LINE"},
["MonkeyKingQAttack"] = {spellKey = _Q, isSelfCast = true, isAutoReset = true, isTrueRange = true, name = "Crushing Blow", spellName = "MonkeyKingQAttack", spellDelay = 250, range = 325, type = "CIRCULAR"},
}},
["Vladimir"] = {charName = "Vladimir", skillshots = {
--["VladimirSanguinePool"] = { spellKey = _W, castType = 0, spellName = "VladimirSanguinePool", name = "VladimirSanguinePool", range = 1050, projectileName = "DarkWind_mis.troy", radius = 120,},
["VladimirHemoplague"] = { spellKey = _R, type = "CIRCULAR", spellName = "VladimirHemoplague", name = "VladimirHemoplague", range = 700, projectileSpeed = 1200, projectileName = "VladHemoPlague_cas.troy", radius = 175,},
["VladimirTidesofBlood"] = { spellKey = _E, isSelfCast = true, spellName = "VladimirTidesofBlood", name = "VladimirTidesofBlood", range = 610, projectileSpeed = 1100, projectileName = "VladTidesofBlood_mis.troy", radius = 120,},
["VladimirTransfusion"] = { spellKey = _Q, isTargeted = true, spellName = "VladimirTransfusion", name = "VladimirTransfusion", range = 600,},
}},
["Volibear"] = {charName = "Volibear", skillshots = {
["VolibearQ"] = { spellKey = _Q, isAutoReset = true, spellName = "VolibearQ", name = "VolibearQ", range = 125, },
["VolibearR"] = { spellKey = _R, isAutoBuff = true, spellName = "VolibearR", name = "VolibearR", range = 125, },
["VolibearE"] = { spellKey = _E, isSelfCast = true, spellName = "VolibearE", name = "VolibearE", range = 425, projectileName = "FerosciousHowl_cas3.troy",},
["VolibearW"] = { spellKey = _W, isTargeted = true, isExecute = true, spellName = "VolibearW", name = "VolibearW", range = 400, },
}},
["Warwick"] = {charName = "Warwick", skillshots = {
--unfinished
["Hungering Strike"] = {spellKey = _Q, isTargeted = true, name = "Hungering Strike", spellName = "HungeringStrike", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 400, type = "LINE"},
["Hunters Call"] = {spellKey = _W, isSelfCast = true, isAutoBuff = true, noAnimation = true, name = "Hunters Call", spellName = "HuntersCall", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 300, type = "CIRCULAR"},
}},
["Varus"] = {charName = "Varus", skillshots = {
["VarusQ!"] = {spellKey = _Q, name = "Varus Q Missile", spellName = "VarusQ!", spellDelay = 0, projectileName = "VarusQ_mis.troy", projectileSpeed = 1900, range = 1600, radius = 70, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["VarusE"] = {spellKey = _E, name = "Varus E", spellName = "VarusE", spellDelay = 250, projectileName = "VarusEMissileLong.troy", projectileSpeed = 1500, range = 925, radius = 275, type = "CIRCULAR", fuckedUp = false, blockable = true, danger = 1},
["VarusR"] = {name = "VarusR", spellName = "VarusR", spellDelay = 250, projectileName = "VarusRMissile.troy", projectileSpeed = 1950, range = 1250, radius = 100, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["Vayne"] = {charName = "Vayne", skillshots = {
--["VayneInquisition"] = { spellKey = _R, castType = 0, spellName = "VayneInquisition", name = "VayneInquisition", range = 1, projectileName = "AnnieBasicAttack_mis.troy",},
--["VayneCondemn"] = { spellKey = _E, castType = 0, spellName = "VayneCondemn", name = "VayneCondemn", range = 550, projectileSpeed = 1200, projectileName = "vayne_E_mis.troy",},
--["VayneSilveredBolts"] = { spellKey = _W, castType = 0, spellName = "VayneSilveredBolts", name = "VayneSilveredBolts", range = 10000, radius = 50,},
["VayneTumble"] = { isAutoReset = true, isDash = true, spellName = "VayneTumble", name = "VayneTumble", range = 300, },
["VayneCondemn"] = {name = "VayneCondemn", spellName = "VayneCondemn", castDelay = 250, projectileName = "vayne_E_mis.troy", projectileSpeed = 1200, range = 550, radius = 450, fuckedUp = false, blockable = true, danger = 1}
}},
["Veigar"] = {charName = "Veigar", skillshots = {
["BalefulStrike"] = {spellKey = _Q, isTargeted = true, name = "Baleful Strike", spellName = "BalefulStrike", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 650, projectileSpeed = 1500, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["Dark Matter"] = {spellKey = _W, name = "VeigarDarkMatter", targetHasBuff = "Stun", spellName = "VeigarDarkMatter", spellDelay = 1250, projectileName = "!", range = 900, radius = 112, type = "CIRCULAR"},
["Primordial Burst"] = {spellKey = _R, isTargeted = true, isExecute = true, name = "Primordial Burst", spellName = "PrimordialBurst", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 650, projectileSpeed = 1500, type = "LINE"},
}},
["Vi"] = {charName = "Vi", skillshots = {
--unfinished
["Excessive Force"] = {spellKey = _E, isSelfCast = true, isAutoReset = true, name = "Excessive Force", spellName = "ExcessiveForce", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 125, type = "CIRCULAR"},
}},
["XinZhao"] = {charName = "XinZhao", skillshots = {
["Talon Strike"] = {spellKey = _Q, isSelfCast = true, isAutoReset = true, name = "Talon Strike", spellName = "TalonStrike", spellDelay = 250, range = 175, type = "LINE"},
["Battle Cry"] = {spellKey = _W, isSelfCast = true, isAutoBuff = true, noAnimation = true, name = "Battle Cry", spellName = "BattleCry", spellDelay = 250, range = 300,},
["Crescent Sweep"] = {spellKey = _R, isSelfCast = true, name = "Crescent Sweep", spellName = "CrescentSweep", spellDelay = 250, range = 300, type = "CIRCULAR"},
["Audacious Charge"] = { spellKey = _E, isTargeted = true, spellName = "XinZhaoCharge", name = "Audacious Charge", range = 600, },
}},
["Xerath"] = {charName = "Xerath", skillshots = {
["XerathMageSpear"] = { spellKey = _E, type = "LINE", isCollision = true, isStun = true, spellName = "XerathMageSpear", name = "XerathMageSpear", projectileName = "Xerath_Base_E_mis.troy", range = 1050, projectileSpeed = 1600, radius = 70, fuckedUp = false, blockable = true, danger = 1},
["XerathArcanopulseChargeUp"] = { spellKey = _Q, type = "LINE", spellName = "XerathArcanopulseChargeUp", heroHasNoBuff = "XerathArcanopulseChargeUp", name = "XerathArcanopulseChargeUp", range = 1000, radius = 100, },
["XerathArcanopulseChargeUp2"] = { spellKey = _Q, type = "LINE", spellName = "XerathArcanopulseChargeUp2", heroHasBuff = "XerathArcanopulseChargeUp", name = "XerathArcanopulseChargeUp2", range = 750, radius = 100, fuckedUp = false, blockable = true, danger = 1},
--range function
["XerathArcaneBarrage2"] = { spellKey = _W, type = "CIRCULAR", spellName = "XerathArcaneBarrage2", name = "XerathArcaneBarrage2", range = 1100, spellDelay = 750, radius = 200, fuckedUp = false, blockable = true, danger = 1},
["XerathLocusOfPower2"] = { spellKey = _R, type = "CIRCULAR", spellName = "XerathLocusOfPower2", name = "XerathLocusOfPower2", projectileName = "Xerath_Base_R_mis.troy", range = 5600, radius = 100, spellDelay = 750, fuckedUp = false, blockable = true, danger = 1},
}},
["Yasuo"] = {charName = "Yasuo", skillshots = {
["Steel Tempest"] = {spellKey = _Q, name = "Steel Tempest", isTrueRange = true, spellName = "SteelTempest", spellDelay = 250, projectileName = "Yasuo_Q_WindStrike.troy", range = 475, radius = 50, type = "LINE"},
["yasuoq3w"] = {spellKey = _Q, name = "Steel Tempest3", checkName = true, spellName = "yasuoq3w", spellDelay = 250, projectileName = "Yasuo_Q_wind_mis.troy", projectileSpeed = 1500, range = 900, radius = 100, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
["Yorick"] = {charName = "Yorick", skillshots = {
["YorickDecayed"] = { spellKey = _W, spellName = "YorickDecayed", name = "YorickDecayed", range = 600, radius = 100, type = "CIRCULAR"},
--["YorickReviveAlly"] = { spellKey = _R, castType = 0, spellName = "YorickReviveAlly", name = "YorickReviveAlly", range = 850, projectileSpeed = 1500,},
["YorickSpectral"] = { spellKey = _Q, isSelfCast = true, isAutoReset = true, noAnimation = true, spellName = "YorickSpectral", name = "YorickSpectral", range = 125,},
["YorickRavenous"] = { spellKey = _E, isTargeted = true, spellName = "YorickRavenous", name = "YorickRavenous", range = 550, },
}},
["Zed"] = {charName = "Zed", skillshots = {
["ZedShuriken"] = {spellKey = _Q, name = "ZedShuriken", spellName = "ZedShuriken", spellDelay = 250, projectileName = "Zed_Q_Mis.troy", projectileSpeed = 1700, range = 925, radius = 50, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["ZedShadowSlash"] = { spellKey = _E, isSelfCast = true, spellName = "ZedShadowSlash", name = "ZedShadowSlash", range = 290,},
}},
["Ziggs"] = {charName = "Ziggs", skillshots = {
["ZiggsQ"] = {spellKey = _Q, isCollision = true, name = "ZiggsQ", spellName = "ZiggsQ", spellDelay = 250, projectileName = "ZiggsQ.troy", projectileSpeed = 1700, range = 1400, radius = 155, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["ZiggsW"] = {spellKey = _W, name = "ZiggsW", spellName = "ZiggsW", spellDelay = 250, projectileName = "ZiggsW_mis.troy", projectileSpeed = 1700, range = 1000, radius = 325, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["ZiggsE"] = {spellKey = _E, name = "ZiggsE", spellName = "ZiggsE", spellDelay = 250, projectileName = "ZiggsE_Mis_Large.troy", projectileSpeed = 1700, range = 900, radius = 250, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["ZiggsR"] = { spellKey = _R, isExecute = true, type = "LINE", spellName = "ZiggsR", name = "ZiggsR", range = 5000, projectileSpeed = 1750, projectileName = "ZiggsR_Mis_Nuke.troy", radius = 550, fuckedup = false, blockable = true, danger = 1},
}},
["Zilean"] = {charName = "Zilean", skillshots = {
--unfinished
["TimeBomb"] = {spellKey = _Q, isTargeted = true, name = "Time Bomb", spellName = "TimeBomb", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 700, radius = 330, type = "CIRCULAR", fuckedUp = false, blockable = true, danger = 1},
["Rewind"] = {spellKey = _W, isSelfCast = true, name = "Rewind", spellName = "Rewind", spellDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", range = 700, type = "CIRCULAR"},
["ChronoShift"] = { spellKey = _R, isTargeted = true, isShield = true, spellName = "ChronoShift", name = "ChronoShift", range = 900, },
}},
["Zyra"] = {charName = "Zyra", skillshots = {
["Deadly Bloom"] = {spellKey = _Q, name = "Deadly Bloom", spellName = "ZyraQFissure", spellDelay = 625, projectileName = "zyra_Q_cas.troy", range = 800, radius = 220, type = "CIRCULAR"},
["Rampant Growth"] = {spellKey = _W, name = "Rampant Growth", spellName = "Rampant Growth", spellDelay = 625, projectileName = "zyra_Q_cas.troy", range = 850, radius = 220, type = "CIRCULAR"},
["ZyraGraspingRoots"] = {spellKey = _E, name = "Grasping Roots", spellName = "ZyraGraspingRoots", spellDelay = 250, projectileName = "Zyra_E_sequence_impact.troy", projectileSpeed = 1150, range = 1150, radius = 70, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
["ZyraBrambleZone"] = { spellKey = _R, type = "CIRCULAR", spellName = "ZyraBrambleZone", name = "ZyraBrambleZone", range = 700, spellDelay = 250, radius = 400},
["zyrapassivedeathmanager"] = { spellKey = _Q, checkName = true, name = "Zyra Passive", spellName = "zyrapassivedeathmanager", spellDelay = 500, projectileName = "zyra_passive_plant_mis.troy", projectileSpeed = 2000, range = 1474, radius = 60, type = "LINE", fuckedUp = false, blockable = true, danger = 1},
}},
}
Interrupt = {
["Katarina"] = {charName = "Katarina", stop = {["KatarinaR"] = {name = "Death lotus", spellName = "KatarinaR", ult = true }}},
["Nunu"] = {charName = "Nunu", stop = {["AbsoluteZero"] = {name = "Absolute Zero", spellName = "AbsoluteZero", ult = true }}},
["Malzahar"] = {charName = "Malzahar", stop = {["AlZaharNetherGrasp"] = {name = "Nether Grasp", spellName = "AlZaharNetherGrasp", ult = true}}},
["Caitlyn"] = {charName = "Caitlyn", stop = {["CaitlynAceintheHole"] = {name = "Ace in the hole", spellName = "CaitlynAceintheHole", ult = true, projectileName = "caitlyn_ult_mis.troy"}}},
["FiddleSticks"] = {charName = "FiddleSticks", stop = {["Crowstorm"] = {name = "Crowstorm", spellName = "Crowstorm", ult = true}}},
["Galio"] = {charName = "Galio", stop = {["GalioIdolOfDurand"] = {name = "Idole of Durand", spellName = "GalioIdolOfDurand", ult = true}}},
["Janna"] = {charName = "Janna", stop = {["ReapTheWhirlwind"] = {name = "Monsoon", spellName = "ReapTheWhirlwind", ult = true}}},
["MissFortune"] = {charName = "MissFortune", stop = {["MissFortune"] = {name = "Bullet time", spellName = "MissFortuneBulletTime", ult = true}}},
["MasterYi"] = {charName = "MasterYi", stop = {["MasterYi"] = {name = "Meditate", spellName = "Meditate", ult = false}}},
["Pantheon"] = {charName = "Pantheon", stop = {["PantheonRJump"] = {name = "Skyfall", spellName = "PantheonRJump", ult = true}}},
["Shen"] = {charName = "Shen", stop = {["ShenStandUnited"] = {name = "Stand united", spellName = "ShenStandUnited", ult = true}}},
["Urgot"] = {charName = "Urgot", stop = {["UrgotSwap2"] = {name = "Position Reverser", spellName = "UrgotSwap2", ult = true}}},
["Varus"] = {charName = "Varus", stop = {["VarusQ"] = {name = "Piercing Arrow", spellName = "Varus", ult = false}}},
["Warwick"] = {charName = "Warwick", stop = {["InfiniteDuress"] = {name = "Infinite Duress", spellName = "InfiniteDuress", ult = true}}},
}
isAGapcloserUnit = {
['Ahri'] = {true, spell = _R, range = 450, projSpeed = 2200, },
['Aatrox'] = {true, spell = _Q, range = 1000, projSpeed = 1200, },
['Akali'] = {true, spell = _R, range = 800, projSpeed = 2200, },
['Alistar'] = {true, spell = _W, range = 650, projSpeed = 2000, },
['Amumu'] = {true, spell = _Q, range = 1100, projSpeed = 1800, },
['Corki'] = {true, spell = _W, range = 800, projSpeed = 650, },
['Diana'] = {true, spell = _R, range = 825, projSpeed = 2000, },
['Darius'] = {true, spell = _R, range = 460, projSpeed = math.huge, },
['Fiora'] = {true, spell = _Q, range = 600, projSpeed = 2000, },
['Fizz'] = {true, spell = _Q, range = 550, projSpeed = 2000, },
['Gragas'] = {true, spell = _E, range = 600, projSpeed = 2000, },
['Graves'] = {true, spell = _E, range = 425, projSpeed = 2000, exeption = true },
['Hecarim'] = {true, spell = _R, range = 1000, projSpeed = 1200, },
['Irelia'] = {true, spell = _Q, range = 650, projSpeed = 2200, },
['JarvanIV'] = {true, spell = _Q, range = 770, projSpeed = 2000, },
['Jax'] = {true, spell = _Q, range = 700, projSpeed = 2000, },
['Jayce'] = {true, spell = 'JayceToTheSkies', range = 600, projSpeed = 2000, },
['Khazix'] = {true, spell = _E, range = 900, projSpeed = 2000, },
['Leblanc'] = {true, spell = _W, range = 600, projSpeed = 2000, },
--['LeeSin'] = {true, spell = 'blindmonkqtwo', range = 1300, projSpeed = 1800, },
['Leona'] = {true, spell = _E, range = 900, projSpeed = 2000, },
['Lucian'] = {true, spell = _E, range = 425, projSpeed = 2000, },
['Malphite'] = {true, spell = _R, range = 1000, projSpeed = 1500, },
['Maokai'] = {true, spell = _W, range = 525, projSpeed = 2000, },
['MonkeyKing'] = {true, spell = _E, range = 650, projSpeed = 2200, },
['Pantheon'] = {true, spell = _W, range = 600, projSpeed = 2000, },
['Poppy'] = {true, spell = _E, range = 525, projSpeed = 2000, },
['Riven'] = {true, spell = _E, range = 150, projSpeed = 2000, },
['Renekton'] = {true, spell = _E, range = 450, projSpeed = 2000, },
['Sejuani'] = {true, spell = _Q, range = 650, projSpeed = 2000, },
['Shen'] = {true, spell = _E, range = 575, projSpeed = 2000, },
['Shyvana'] = {true, spell = _R, range = 1000, projSpeed = 2000, },
['Tristana'] = {true, spell = _W, range = 900, projSpeed = 2000, },
['Tryndamere'] = {true, spell = 'Slash', range = 650, projSpeed = 1450, },
['XinZhao'] = {true, spell = _E, range = 650, projSpeed = 2000, },
['Yasuo'] = {true, spell = _E, range = 475, projSpeed = 1000, },
['Vayne'] = {true, spell = _Q, range = 300, projSpeed = 1000, },
}
local count = 0
local isSx
local isSac
local Minions
local SteelTempest
local eStack = 0
local qBuffName = "Yasuo_Q_wind_ready_buff.troy"
local farmSafe = false
local i
local attacked = false
local isattacking = 0
local animTime = 0
local IsRecalling = false
--local animTime = 0
local Tower = nil
local towerUnit = nil
local Tdashing = false
local Tdashing2 = false
local Eduration = 0.5
local Eduration2 = 0
local ePos, sPos, myPos = nil, nil ,nil
local TargetPos = nil
local dashPoint = nil
local UsingPot = false
local lastRemove = 0
------------------------------------------------------
-- Callbacks
------------------------------------------------------
function OnLoad()
if VIP_USER then
AdvancedCallback:bind('OnTowerFocus', function(tower, unit) OnTowerFocus(tower,unit) end)
AdvancedCallback:bind('OnTowerIdle', function(tower) OnTowerIdle(tower) end)
AdvancedCallback:bind('OnApplyBuff', function(source, unit, buff) OnApplyBuff(source, unit, buff) end)
AdvancedCallback:bind('OnUpdateBuff', function(unit, buff) OnUpdateBuff(unit, buff) end)
AdvancedCallback:bind('OnRemoveBuff', function(unit, buff) OnLoseBuff(unit, buff) end)
end
Variables()
Menu()
PriorityOnLoad()
LoadOrbwalker()
IgniteCheck()
Tower = GetTurrets()
ItemNames = {
[3303] = "ArchAngelsDummySpell",
[3007] = "ArchAngelsDummySpell",
[3144] = "BilgewaterCutlass",
[3188] = "ItemBlackfireTorch",
[3153] = "ItemSwordOfFeastAndFamine",
[3405] = "TrinketSweeperLvl1",
[3411] = "TrinketOrbLvl1",
[3166] = "TrinketTotemLvl1",
[3450] = "OdinTrinketRevive",
[2041] = "ItemCrystalFlask",
[2054] = "ItemKingPoroSnack",
[2138] = "ElixirOfIron",
[2137] = "ElixirOfRuin",
[2139] = "ElixirOfSorcery",
[2140] = "ElixirOfWrath",
[3184] = "OdinEntropicClaymore",
[2050] = "ItemMiniWard",
[3401] = "HealthBomb",
[3363] = "TrinketOrbLvl3",
[3092] = "ItemGlacialSpikeCast",
[3460] = "AscWarp",
[3361] = "TrinketTotemLvl3",
[3362] = "TrinketTotemLvl4",
[3159] = "HextechSweeper",
[2051] = "ItemHorn",
[2003] = "RegenerationPotion",
[3146] = "HextechGunblade",
[3187] = "HextechSweeper",
[3190] = "IronStylus",
[2004] = "FlaskOfCrystalWater",
[3139] = "ItemMercurial",
[3222] = "ItemMorellosBane",
[3042] = "Muramana",
[3043] = "Muramana",
[3180] = "OdynsVeil",
[3056] = "ItemFaithShaker",
[2047] = "OracleExtractSight",
[3364] = "TrinketSweeperLvl3",
[2052] = "ItemPoroSnack",
[3140] = "QuicksilverSash",
[3143] = "RanduinsOmen",
[3074] = "ItemTiamatCleave",
[3800] = "ItemRighteousGlory",
[2045] = "ItemGhostWard",
[3342] = "TrinketOrbLvl1",
[3040] = "ItemSeraphsEmbrace",
[3048] = "ItemSeraphsEmbrace",
[2049] = "ItemGhostWard",
[3345] = "OdinTrinketRevive",
[2044] = "SightWard",
[3341] = "TrinketSweeperLvl1",
[3069] = "shurelyascrest",
[3599] = "KalistaPSpellCast",
[3185] = "HextechSweeper",
[3077] = "ItemTiamatCleave",
[2009] = "ItemMiniRegenPotion",
[2010] = "ItemMiniRegenPotion",
[3023] = "ItemWraithCollar",
[3290] = "ItemWraithCollar",
[2043] = "VisionWard",
[3340] = "TrinketTotemLvl1",
[3090] = "ZhonyasHourglass",
[3154] = "wrigglelantern",
[3142] = "YoumusBlade",
[3157] = "ZhonyasHourglass",
[3512] = "ItemVoidGate",
[3131] = "ItemSoTD",
[3137] = "ItemDervishBlade",
[3352] = "RelicSpotter",
[3350] = "TrinketTotemLvl2",
[3085] = "AtmasImpalerDummySpell",
}
--[[Items = {
["QSS"] = { id = 3140, range = 2500 },
["MercScim"] = { id = 3139, range = 2500 },
}]]
Items = {
["ELIXIR"] = { id = 2140, range = 2140, target = false},
["QSS"] = { id = 3140, range = 2500, target = false},
["MercScim"] = { id = 3139, range = 2500, target = false},
["BRK"] = { id = 3153, range = 450, target = true},
["BWC"] = { id = 3144, range = 450, target = true},
--["DFG"] = { id = 3128, range = 750, target = false},
["HXG"] = { id = 3146, range = 700, target = false},
["ODYNVEIL"] = { id = 3180, range = 525, target = false},
["DVN"] = { id = 3131, range = 200, target = false},
["ENT"] = { id = 3184, range = 350, target = false},
["HYDRA"] = { id = 3074, range = 350, target = false},
["TIAMAT"] = { id = 3077, range = 350, target = false},
["RanduinsOmen"] = { id = 3143, range = 500, target = false},
["YGB"] = { id = 3142, range = 600, target = false},
}
___GetInventorySlotItem = rawget(_G, "GetInventorySlotItem")
_G.GetInventorySlotItem = GetSlotItem
local ToUpdate = {}
ToUpdate.Version = 1.38
DelayAction(function()
ToUpdate.UseHttps = true
ToUpdate.Host = "raw.githubusercontent.com"
ToUpdate.VersionPath = "/GosuMechanics/BoL/master/GosuYasuo.version"
ToUpdate.ScriptPath = "/GosuMechanics/BoL/master/GosuYasuo.lua"
ToUpdate.SavePath = SCRIPT_PATH.._ENV.FILE_NAME
ToUpdate.CallbackUpdate = function(NewVersion,OldVersion) Print("Updated to v("..NewVersion.."). .Please reload script.") end
ToUpdate.CallbackNoUpdate = function(OldVersion) Print("No Updates Found.") end
ToUpdate.CallbackNewVersion = function(NewVersion) Print("New Version found ("..NewVersion.."). Please wait until its downloaded") end
ToUpdate.CallbackError = function(NewVersion) Print("Error while Downloading. Please try again.") end
SxScriptUpdate(ToUpdate.Version,ToUpdate.UseHttps, ToUpdate.Host, ToUpdate.VersionPath, ToUpdate.ScriptPath, ToUpdate.SavePath, ToUpdate.CallbackUpdate,ToUpdate.CallbackNoUpdate, ToUpdate.CallbackNewVersion,ToUpdate.CallbackError)
end, 0.5)
Print("Version "..ToUpdate.Version.." loaded.")
end
function LoadOrbwalker()
if _G.Reborn_Initialised then
print("GosuMechanics:Yasuo : Reborn loaded and authed")
isSac = true
loaded = true
Settings:addSubMenu("["..myHero.charName.."] - Orbwalker", "Orbwalker")
Settings.Orbwalker:addParam("info", "SAC:R detected", SCRIPT_PARAM_INFO, "")
elseif _G.Reborn_Loaded and not _G.Reborn_Initialised and count < 30 then
if printedWaiting == false then
print("GosuMechanics:Yasuo : Waiting for Reborn auth")
printedWaiting = true
end
DelayAction(LoadOrbwalker, 1)
count = count + 1
else
if count >= 30 then
print("GosuMechanics:Yasuo : SAC failed to auth")
end
require 'SxOrbWalk'
print("SxOrbWalk: Loading...")
Settings:addSubMenu("["..myHero.charName.."] - Orbwalker", "Orbwalker")
SxOrb:LoadToMenu(Settings.Orbwalker)
isSx = true
print("SxOrbWalk: Loaded")
loaded = true
end
end
function OnTick()
ts:update()
target = ts.target
Checks()
ComboKey = Settings.combo.comboKey
HarassKey = Settings.harass.harassKey
HarassToggle = Settings.harass.harassToggle
JungleClearKey = Settings.jungle.jungleKey
LaneClearKey = Settings.lane.laneKey
FarmKey = Settings.farm.farmKey
if Tdashing ~= false and os.clock() > Eduration2 then
Tdashing = false
end
if Tdashing2 ~= false and os.clock() > Eduration3 then
Tdashing2 = false
end
if dashed ~= nil and dashed - os.clock() < 0 then
posAfterE = nil
dashed = nil
end
if ComboKey then
Combo()
end
if HarassKey then
Harass()
end
if FarmKey then
LastHit()
end
if JungleClearKey then
JungleClear()
end
if LaneClearKey then
LaneClear()
end
if Settings.ks.killSteal then
KillSteal()
end
if Settings.ks.autoR then
autoRkillable()
end
if Settings.ks.autoIgnite then
AutoIgnite()
end
if Settings.esc.run then
flee()
end
if Settings.misc.autoPot then
AutoPots()
end
if Settings.harass.harassToggle then
AutoQenemy()
end
if Settings.esc.qminion then AutoQenemyminion() end
if Settings.esc.useQjungle then
AutoQminion()
end
if Settings.esc.run and Settings.esc.useQminion then
AutoQenemyminion()
end
if Settings.Egap.smartEgap then
smartEgap()
end
if Settings.combo.ults.autoult then AutoUlt() end
GetItemSlot()
end
function OnDraw()
if not myHero.dead and not Settings.drawing.mDraw then
if SkillQ12.ready and Settings.drawing.qDraw then
DrawCircle2(myHero.x, myHero.y, myHero.z, SkillQ12.range, RGB(Settings.drawing.qColor[2], Settings.drawing.qColor[3], Settings.drawing.qColor[4]))
end
if SkillQ3.ready and Settings.drawing.qDraw then
DrawCircle2(myHero.x, myHero.y, myHero.z, SkillQ3.range, RGB(Settings.drawing.qColor[2], Settings.drawing.qColor[3], Settings.drawing.qColor[4]))
end
if SkillW.ready and Settings.drawing.wDraw then
DrawCircle2(myHero.x, myHero.y, myHero.z, SkillW.range, RGB(Settings.drawing.wColor[2], Settings.drawing.wColor[3], Settings.drawing.wColor[4]))
end
if SkillE.ready and Settings.drawing.eDraw then
DrawCircle2(myHero.x, myHero.y, myHero.z, SkillE.range, RGB(Settings.drawing.eColor[2], Settings.drawing.eColor[3], Settings.drawing.eColor[4]))
end
if SkillR.ready and Settings.drawing.rDraw then
DrawCircle2(myHero.x, myHero.y, myHero.z, SkillR.range, RGB(Settings.drawing.rColor[2], Settings.drawing.rColor[3], Settings.drawing.rColor[4]))
end
if Settings.drawing.myHero then
DrawCircle2(myHero.x, myHero.y, myHero.z, TrueRange(), RGB(Settings.drawing.myColor[2], Settings.drawing.myColor[3], Settings.drawing.myColor[4]))
end
if Settings.drawing.Target and target ~= nil then
DrawCircle2(target.x, target.y, target.z, 80, ARGB(255, 10, 255, 10))
end
end
end
class "SxScriptUpdate"
function SxScriptUpdate:__init(LocalVersion,UseHttps, Host, VersionPath, ScriptPath, SavePath, CallbackUpdate, CallbackNoUpdate, CallbackNewVersion,CallbackError)
self.LocalVersion = LocalVersion
self.Host = Host
self.VersionPath = '/BoL/TCPUpdater/GetScript'..(UseHttps and '5' or '6')..'.php?script='..self:Base64Encode(self.Host..VersionPath)..'&rand='..math.random(99999999)
self.ScriptPath = '/BoL/TCPUpdater/GetScript'..(UseHttps and '5' or '6')..'.php?script='..self:Base64Encode(self.Host..ScriptPath)..'&rand='..math.random(99999999)
self.SavePath = SavePath
self.CallbackUpdate = CallbackUpdate
self.CallbackNoUpdate = CallbackNoUpdate
self.CallbackNewVersion = CallbackNewVersion
self.CallbackError = CallbackError
AddDrawCallback(function() self:OnDraw() end)
self:CreateSocket(self.VersionPath)
self.DownloadStatus = 'Connect to Server for VersionInfo'
AddTickCallback(function() self:GetOnlineVersion() end)
end
function SxScriptUpdate:print(str)
print(''..os.clock()..': '..str)
end
function SxScriptUpdate:OnDraw()
if self.DownloadStatus ~= 'Downloading Script (100%)' and self.DownloadStatus ~= 'Downloading VersionInfo (100%)'then
DrawText('Download Status: '..(self.DownloadStatus or 'Unknown'),50,10,50,ARGB(0xFF,0xFF,0xFF,0xFF))
end
end
function SxScriptUpdate:CreateSocket(url)
if not self.LuaSocket then
self.LuaSocket = require("socket")
else
self.Socket:close()
self.Socket = nil
self.Size = nil
self.RecvStarted = false
end
self.LuaSocket = require("socket")
self.Socket = self.LuaSocket.tcp()
self.Socket:settimeout(0, 'b')
self.Socket:settimeout(99999999, 't')
self.Socket:connect('sx-bol.eu', 80)
self.Url = url
self.Started = false
self.LastPrint = ""
self.File = ""
end
function SxScriptUpdate:Base64Encode(data)
local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
return ((data:gsub('.', function(x)
local r,b='',x:byte()
for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end
return r;
end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x)
if (#x < 6) then return '' end
local c=0
for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end
return b:sub(c+1,c+1)
end)..({ '', '==', '=' })[#data%3+1])
end
function SxScriptUpdate:GetOnlineVersion()
if self.GotScriptVersion then return end
self.Receive, self.Status, self.Snipped = self.Socket:receive(1024)
if self.Status == 'timeout' and not self.Started then
self.Started = true
self.Socket:send("GET "..self.Url.." HTTP/1.1\r\nHost: sx-bol.eu\r\n\r\n")
end
if (self.Receive or (#self.Snipped > 0)) and not self.RecvStarted then
self.RecvStarted = true
self.DownloadStatus = 'Downloading VersionInfo (0%)'
end
self.File = self.File .. (self.Receive or self.Snipped)
if self.File:find('') then
if not self.Size then
self.Size = tonumber(self.File:sub(self.File:find('')+6,self.File:find('')-1))
end
if self.File:find('') then
local _,ScriptFind = self.File:find('')
local ScriptEnd = self.File:find('')
if ScriptEnd then ScriptEnd = ScriptEnd - 1 end
local DownloadedSize = self.File:sub(ScriptFind+1,ScriptEnd or -1):len()
self.DownloadStatus = 'Downloading VersionInfo ('..math.round(100/self.Size*DownloadedSize,2)..'%)'
end
end
if self.File:find('') then
self.DownloadStatus = 'Downloading VersionInfo (100%)'
local a,b = self.File:find('\r\n\r\n')
self.File = self.File:sub(a,-1)
self.NewFile = ''
for line,content in ipairs(self.File:split('\n')) do
if content:len() > 5 then
self.NewFile = self.NewFile .. content
end
end
local HeaderEnd, ContentStart = self.File:find('')
local ContentEnd, _ = self.File:find('')
if not ContentStart or not ContentEnd then
if self.CallbackError and type(self.CallbackError) == 'function' then
self.CallbackError()
end
else
self.OnlineVersion = (Base64Decode(self.File:sub(ContentStart + 1,ContentEnd-1)))
self.OnlineVersion = tonumber(self.OnlineVersion)
if self.OnlineVersion > self.LocalVersion then
if self.CallbackNewVersion and type(self.CallbackNewVersion) == 'function' then
self.CallbackNewVersion(self.OnlineVersion,self.LocalVersion)
end
self:CreateSocket(self.ScriptPath)
self.DownloadStatus = 'Connect to Server for ScriptDownload'
AddTickCallback(function() self:DownloadUpdate() end)
else
if self.CallbackNoUpdate and type(self.CallbackNoUpdate) == 'function' then
self.CallbackNoUpdate(self.LocalVersion)
end
end
end
self.GotScriptVersion = true
end
end
function SxScriptUpdate:DownloadUpdate()
if self.GotSxScriptUpdate then return end
self.Receive, self.Status, self.Snipped = self.Socket:receive(1024)
if self.Status == 'timeout' and not self.Started then
self.Started = true
self.Socket:send("GET "..self.Url.." HTTP/1.1\r\nHost: sx-bol.eu\r\n\r\n")
end
if (self.Receive or (#self.Snipped > 0)) and not self.RecvStarted then
self.RecvStarted = true
self.DownloadStatus = 'Downloading Script (0%)'
end
self.File = self.File .. (self.Receive or self.Snipped)
if self.File:find('') then
if not self.Size then
self.Size = tonumber(self.File:sub(self.File:find('')+6,self.File:find('')-1))
end
if self.File:find('') then
local _,ScriptFind = self.File:find('')
local ScriptEnd = self.File:find('')
if ScriptEnd then ScriptEnd = ScriptEnd - 1 end
local DownloadedSize = self.File:sub(ScriptFind+1,ScriptEnd or -1):len()
self.DownloadStatus = 'Downloading Script ('..math.round(100/self.Size*DownloadedSize,2)..'%)'
end
end
if self.File:find('') then
self.DownloadStatus = 'Downloading Script (100%)'
local a,b = self.File:find('\r\n\r\n')
self.File = self.File:sub(a,-1)
self.NewFile = ''
for line,content in ipairs(self.File:split('\n')) do
if content:len() > 5 then
self.NewFile = self.NewFile .. content
end
end
local HeaderEnd, ContentStart = self.NewFile:find('')
local ContentEnd, _ = self.NewFile:find('')
if not ContentStart or not ContentEnd then
if self.CallbackError and type(self.CallbackError) == 'function' then
self.CallbackError()
end
else
local newf = self.NewFile:sub(ContentStart+1,ContentEnd-1)
local newf = newf:gsub('\r','')
if newf:len() ~= self.Size then
if self.CallbackError and type(self.CallbackError) == 'function' then
self.CallbackError()
end
return
end
local newf = Base64Decode(newf)
if type(load(newf)) ~= 'function' then
if self.CallbackError and type(self.CallbackError) == 'function' then
self.CallbackError()
end
else
local f = io.open(self.SavePath,"w+b")
f:write(newf)
f:close()
if self.CallbackUpdate and type(self.CallbackUpdate) == 'function' then
self.CallbackUpdate(self.OnlineVersion,self.LocalVersion)
end
end
end
self.GotSxScriptUpdate = true
end
end
------------------------------------------------------
-- Functions
------------------------------------------------------
function Combo()
local target = ts.target
if target ~= nil and target.type == myHero.type and target.visible and not target.dead then
if ValidTarget(target) and GetDistance(target) <= SkillQ.range then
if Settings.combo.comboItems then
UseItems(target)
end
if Settings.combo.useQ12 and SkillQ12.ready and GetDistance(target) <= SkillQ12.range then
CastQ12(target)
elseif IsDashing() and GetDistance(target) <= SkillE.range then
CastQ12(target)
end
if Settings.combo.useQ3 and SkillQ3.ready and GetDistance(target) <= SkillQ3.range and not IsDashing() then
CastQ3(target)
elseif IsDashing() and GetDistance(target) <= SkillE.range then
CastQ3(target)
end
if ValidTarget(target, SkillE.range) and SkillE.ready and Settings.combo.useE and GetDistance(target) >= Settings.combo.DistanceToE and not TargetDashed(target) then
CastSpell(_E, target)
end
if Settings.combo.comboKey and Settings.combo.ults.useR and SkillR.ready then
if ValidTarget(target, SkillR.range) and target.health <= ((Settings.combo.ults.low/100*target.maxHealth)*1.5) then
CastR(target)
end
end
end
local TargetDistance = GetDistance(target)
if TargetDistance > SkillE.range and Settings.combo.useEGap then
mPos = getNearestMinion(target)
if SkillE.ready and mPos then
CastSpell(_E, mPos)
end
end
if TargetDistance >= Settings.combo.DistanceToE then
object = getNearestMinion(mousePos)
if SkillE.ready and Settings.combo.dash and object then
if object.networkID ~= target.networkID then
CastSpell(_E, object)
end
end
end
end
end
function TargetDashed(unit)
if TargetHaveBuff("YasuoDashWrapper", unit) then
return true
end
return false
end
function Low(unit)
if unit and unit ~= nil and unit.type == myHero.type then
if unit.health <= ((Settings.combo.ults.low/100*unit.maxHealth)*1.5) and GetDistance(unit) <= SkillR.range then
return true
else
return false
end
end
end
function LastHit(unit)
enemyMinions:update()
if FarmKey then
for i, minion in pairs(enemyMinions.objects) do
if ValidTarget(minion) then
local qDmg = myHero:CalcDamage(minion,(GetSpellData(_Q).level*20)+myHero.totalDamage)
if SkillQ12.ready and GetDistance(minion) <= SkillQ12.range and Settings.farm.useQ12 then
if qDmg >= minion.health then
CastQ12(minion, true)
end
end
if SkillQ3.ready and GetDistance(minion) <= SkillQ3.range and Settings.farm.useQ3 then
local qDmg = myHero:CalcDamage(minion,(GetSpellData(_Q).level*20)+myHero.totalDamage)
if qDmg >= minion.health then
CastQ3(minion, true)
end
end
if SkillE.ready and GetDistance(minion) <= SkillE.range and Settings.farm.useE then
local eDmg = getEDmg(minion)
if eDmg >= minion.health and (not UnderTurret(eEndPos(minion),true)) or towerUnit~=nil then
CastSpell(_E, minion)
end
end
end
end
end
end
function Harass(unit)
if Settings.harass.useQ12 then CastQ12(target) end
if Settings.harass.useQ3 then CastQ3(target) end
end
function LaneClear()
enemyMinions:update()
if LaneClearKey then
for i, minion in pairs(enemyMinions.objects) do
if ValidTarget(minion) and minion ~= nil then
local qDmg = myHero:CalcDamage(minion,(GetSpellData(_Q).level*20)+myHero.totalDamage)
if SkillQ12.ready and GetDistance(minion) <= SkillQ12.range and Settings.lane.useQ then
local BestPos, BestHit = GetBestLineFarmPosition(SkillQ12.range, SkillQ12.width, enemyMinions.objects)
if BestPos ~= nil and BestHit >= 2 and qDmg >= minion.health then
CastSpell(_Q, BestPos.x, BestPos.z)
else
CastSpell(_Q, BestPos.x, BestPos.z)
end
end
if SkillQ3.ready and GetDistance(minion) <= SkillQ3.range and Settings.lane.useQ3 then
local qDmg = myHero:CalcDamage(minion,(GetSpellData(_Q).level*20)+myHero.totalDamage)
local BestPos, BestHit = GetBestLineFarmPosition(SkillQ3.range, SkillQ3.width, enemyMinions.objects)
if BestPos ~= nil and BestHit >= 2 and qDmg >= minion.health then
CastSpell(_Q, BestPos.x, BestPos.z)
else
CastSpell(_Q, BestPos.x, BestPos.z)
end
end
if Settings.lane.useE == 1 and GetDistance(minion, myHero) <= SkillE.range and SkillE.ready then
local eDmg = getEDmg(minion)
if eDmg >= minion.health and (not UnderTurret(eEndPos(minion),true)) or towerUnit~=nil then
CastSpell(_E, minion)
elseif Settings.lane.useE == 2 and (not UnderTurret(eEndPos(minion),true)) or towerUnit~=nil and GetDistance(minion, myHero) <= SkillE.range then
CastSpell(_E, minion)
end
end
if Settings.lane.laneItems then UseItems(minion) end
end
end
end
end
function JungleClear()
if Settings.jungle.jungleKey then
local JungleMob = GetJungleMob()
if JungleMob ~= nil then
if SkillQ.ready and GetDistance(JungleMob) <= SkillQ.range and Settings.jungle.useQ then
CastSpell(_Q, JungleMob.x, JungleMob.z)
end
if SkillE.range and GetDistance(JungleMob) <= SkillE.range and Settings.jungle.useE then
CastSpell(_E, JungleMob)
end
end
end
end
function flee()
mPos = getNearestMinion(mousePos)
if SkillE.ready and mPos then
CastSpell(_E, mPos)
else
myHero:MoveTo(mousePos.x, mousePos.z)
end
end
function smartEgap()
mPos = getNearestMinion(mousePos)
if ValidTarget(Target) and GetDistance(Target) >= SkillE.range and SkillE.ready and mPos then
CastSpell(_E, mPos)
else
myHero:MoveTo(mousePos.x, mousePos.z)
end
if not SkillQ.ready then
mPos = getNearestMinion(mousePos)
if SkillE.ready and mPos then
CastSpell(_E, mPos)
else
myHero:MoveTo(mousePos.x, mousePos.z)
end
end
end
function CastQ12(unit, minion)
if SkillQ12.ready and ValidTarget(unit,500) then
local CastPosition, HitChance, Position = VP:GetLineCastPosition(unit, 0.25, 55, 475, 1500, myHero, false)
if HitChance >= Settings.misc.pred.hc12 and not IsDashing() then
CastSpell(_Q, CastPosition.x, CastPosition.z)
end
end
end
function CastQ3(unit, minion)
if SkillQ3.ready and ValidTarget(unit,1000) then
local AOECastPosition, MainTargetHitChance, nTargets = VP:GetLineAOECastPosition(unit, 0.75, 90, 1000, 1500, myHero, false)
if MainTargetHitChance >= Settings.misc.pred.hc3 and nTargets >= 1 and not IsDashing() then
CastSpell(_Q, AOECastPosition.x, AOECastPosition.z)
end
end
end
function AutoQminion(unit, minion)
local JungleMob = GetJungleMob()
if JungleMob ~= nil then
if SkillQ12.ready and Settings.esc.useQjungle and GetDistance(JungleMob) <= SkillQ12.range then
CastSpell(_Q, JungleMob.x, JungleMob.z)
end
end
end
function AutoQenemyminion(unit, minion)
enemyMinions:update()
for index, minion in pairs(enemyMinions.objects) do
if ValidTarget(minion) then
if SkillQ12.ready and Settings.esc.useQminion and GetDistance(minion) <= SkillQ12.range then
CastQ12(minion)
end
end
end
end
function AutoQenemy()
if ValidTarget(target, SkillQ.range) and Settings.harass.useQ12 and Settings.harass.underTower then
CastQ12(target)
elseif not Settings.harass.underTower and not UnderTurret(enemy) then
CastQ12(target)
end
if ValidTarget(target, SkillQ3.range) and Settings.harass.useQ3 and Settings.harass.underTower then
CastQ3(target)
elseif not Settings.harass.underTower and not UnderTurret(enemy) and ValidTarget(target, SkillQ3.range) then
CastQ3(target)
end
end
function autoRkillable()
for i = 1, heroManager.iCount, 1 do
local eTarget = heroManager:getHero(i)
if Settings.ks.autoR then
if ValidTarget(eTarget, SkillR.range) and Low(eTarget) then
CastR(target)
end
end
end
end
function AutoUlt()
if Settings.combo.ults.autoult and Settings.combo.ults.Ult3 > 0 and #EnemiesKnocked() >= Settings.combo.ults.Ult3 then
CastR(target)
end
end
function CastR(target)
if SkillR.ready and ValidTarget(target, SkillR.range) and KnockedUnits[target.networkID] ~= nil and GetGameTimer() > KnockedUnits[target.networkID].startTime + Settings.combo.ults.delayR then
CastSpell(_R, target)
end
end
function EnemiesKnocked()
local Knockeds = {}
for i, enemy in ipairs(GetEnemyHeroes()) do
if ValidTarget(enemy, SkillR.range) and KnockedUnits[enemy.networkID] ~= nil then table.insert(Knockeds, enemy) end
end
return Knockeds
end
function KillSteal()
for idx, enemy in ipairs(GetEnemyHeroes()) do
if ValidTarget(enemy, SkillQ.range) then
local qDmg = myHero:CalcDamage(enemy,(GetSpellData(_Q).level*20)+myHero.totalDamage)
local eDmg = getEDmg(enemy)
if SkillQ.ready and GetDistance(enemy) <= SkillQ12.range then
if qDmg >= enemy.health then
CastSpell(_Q, enemy)
end
end
if SkillE.ready and GetDistance(enemy) <= (SkillE.range-50) then
if eDmg >= enemy.health and (not UnderTurret(eEndPos(enemy),true)) or towerUnit~=nil then
CastSpell(_E, enemy)
end
end
end
end
end
function IsDashing()
return Tdashing
end
function IsDashing2()
return Dashing
end
function IgniteCheck()
if myHero:GetSpellData(SUMMONER_1).name:find("summonerdot") then ignite = SUMMONER_1
Settings.ks:addParam("autoIgnite", "Auto Ignite", SCRIPT_PARAM_ONOFF, true)
elseif myHero:GetSpellData(SUMMONER_2).name:find("summonerdot") then ignite = SUMMONER_2
Settings.ks:addParam("autoIgnite", "Auto Ignite", SCRIPT_PARAM_ONOFF, true)
end
end
function AutoIgnite()
if Settings.ks.autoIgnite and ignite ~= nil and IREADY then
local igniteDamage = 50 + 20 * myHero.level
for i = 1, heroManager.iCount, 1 do
local target = heroManager:getHero(i)
if ValidTarget(target, 600) and target.team ~= myHero.team then
if igniteDamage > (target.health - 25) then
CastSpell(ignite, target)
end
end
end
end
end
function getEDmg(minion)
return myHero:CalcMagicDamage(minion,((GetSpellData(_E).level*20)+50)*(1+0.25*eStack)+(myHero.ap*0.6))
end
function eEndPos(unit)
if unit ~= nil then
if GetDistance(myHero,unit) < 410 then
dashPointT = myHero + (Vector(unit) - myHero):normalized() * 485
else
dashPointT = myHero + (Vector(unit) - myHero):normalized() * (GetDistance(myHero,unit) + 65)
end
return dashPointT
end
end
function getNearestMinion(unit)
local closestMinion = nil
local nearestDistance = 0
enemyMinions:update()
JungleMinions:update()
for index, minion in pairs(enemyMinions.objects) do
if minion ~= nil and minion.valid and string.find(minion.name,"Minion_") == 1 and minion.team ~= player.team and minion.dead == false then
if GetDistance(minion) <= SkillE.range then
--PrintChat(GetDistance(eEndPos(minion), unit) .. " - ".. GetDistance(unit))
if GetDistance(eEndPos(minion), unit) < GetDistance(unit) and nearestDistance < GetDistance(minion) then
nearestDistance = GetDistance(minion)
closestMinion = minion
end
end
end
end
for index, minion in pairs(JungleMinions.objects) do
if minion ~= nil and minion.valid and minion.dead == false then
if GetDistance(minion) <= SkillE.range then
if GetDistance(eEndPos(minion), unit) < GetDistance(unit) and nearestDistance < GetDistance(minion) then
nearestDistance = GetDistance(minion)
closestMinion = minion
end
end
end
end
for i = 1, heroManager.iCount, 1 do
local minion = heroManager:getHero(i)
if ValidTarget(minion, SkillE.range) then
if GetDistance(minion) <= SkillE.range then
if GetDistance(eEndPos(minion), unit) < GetDistance(unit) and nearestDistance < GetDistance(minion) then
nearestDistance = GetDistance(minion)
closestMinion = minion
end
end
end
end
return closestMinion
end
function OnApplyBuff(source, unit, buff)
--if buff and unit ~= myHero then print(buff.name) end
if not unit or not buff then return end
if unit and unit.isMe and buff.name == "RegenerationPotion" then
UsingPot = true
end
if unit.isMe and buff.name=="yasuodashscalar" then
--PrintChat("E:" .. eStack)
dashed = (buff.endTime - buff.startTime)
eStack = 1
end
if unit and source and buff and buff.name and unit.team and buff.type then
if (buff.type == 29 or buff.type == 30) and unit.team ~= myHero.team then
KnockedUnits[unit.networkID] = buff
end
end
if unit.isMe and Settings.misc.useqss then
if buff.name and buff.type == 5 or buff.type == 12 or buff.type == 11 or buff.type == 25 or buff.type == 7 or buff.type == 22 or buff.type == 21 or buff.type == 8
or buff.name == "MordekaiserChildrenOfTheGrave" or buff.name == "SkarnerImpale" or buff.name == "LuxLightBindingMis" or buff.name == "Wither" or buff.name == "SonaCrescendo"
or buff.name == "DarkBindingMissile" or buff.name == "CurseoftheSadMummy" or buff.name == "EnchantedCrystalArrow" or buff.name == "BlindingDart" or buff.name == "LuluWTwo"
or buff.name == "AhriSeduce" or buff.name == "CassiopeiaPetrifyingGaze" or buff.name == "Terrify" or buff.name == "HowlingGale" or buff.name == "JaxCounterStrike" or buff.name == "KennenShurikenStorm"
or buff.name == "LeblancSoulShackle" or buff.name == "LeonaSolarFlare" or buff.name == "LissandraR" or buff.name == "AlZaharNetherGrasp" or buff.name == "MonkeyKingDecoy"
or buff.name == "NamiQ" or buff.name == "OrianaDetonateCommand" or buff.name == "Pantheon_LeapBash" or buff.name == "PuncturingTaunt" or buff.name == "SejuaniGlacialPrisonStart"
or buff.name == "SwainShadowGrasp" or buff.name == "Imbue" or buff.name == "ThreshQ" or buff.name == "UrgotSwap2" or buff.name == "VarusR" or buff.name == "VeigarEventHorizon"
or buff.name == "ZedUlt" or buff.name == "ViR" or buff.name == "InfiniteDuress" or buff.name == "ZyraGraspingRoots" or(buff.type == 10 and buff.name and buff.name:lower():find("fleeslow"))or (buff.name:lower():find("summonerexhaust")) then
UseQSS(myHero, true)
end
end
end
function OnRemoveBuff(unit, buff)
if not unit or not buff or unit.type ~= myHero.type then return end
if unit and unit.isMe and buff.name == "RegenerationPotion" then
UsingPot = false
end
if unit and source and buff and buff.name and unit.team and buff.type then
if (buff.type == 29 or buff.type == 30) and unit.team ~= myHero.team then
KnockedUnits[unit.networkID] = nil
end
end
if unit.isMe and buff.name=="yasuodashscalar" then
--PrintChat("E:" .. eStack)
eStack = 0
end
end
------------------------------------------------------
-- Checks, menu & stuff
------------------------------------------------------
function Checks()
SkillQ12.ready = (myHero:CanUseSpell(_Q) == READY and ( myHero:GetSpellData(_Q).name == "YasuoQW" or myHero:GetSpellData(_Q).name == "yasuoq2w"))
SkillQ3.ready = (myHero:CanUseSpell(_Q) == READY and myHero:GetSpellData(_Q).name == "yasuoq3w")
SkillQ.ready = (myHero:CanUseSpell(_Q) == READY)
SkillW.ready = (myHero:CanUseSpell(_W) == READY)
SkillE.ready = (myHero:CanUseSpell(_E) == READY)
SkillR.ready = (myHero:CanUseSpell(_R) == READY)
IREADY = (ignite ~= nil and myHero:CanUseSpell(ignite) == READY)
qBuffName = "Yasuo_Q_wind_ready_buff.troy"
dashed = nil
end
function Menu()
Settings = scriptConfig("GosuMechanics", "Yasuo")
Settings:addSubMenu("["..myHero.charName.."] - Combo Settings", "combo")
Settings.combo:addParam("comboKey", "Beast Mode", SCRIPT_PARAM_ONKEYDOWN, false, 32)
Settings.combo:addParam("useQ12", "Use "..SkillQ12.name.." ", SCRIPT_PARAM_ONOFF, true)
Settings.combo:addParam("useQ3", "Use "..SkillQ3.name.." ", SCRIPT_PARAM_ONOFF, true)
Settings.combo:addParam("useE", "Use "..SkillE.name.." ", SCRIPT_PARAM_ONOFF, true)
Settings.combo:addParam("useEGap", "Use E as Gap Closer", SCRIPT_PARAM_ONOFF, true)
Settings.combo:addParam("dash", "Dash Always", SCRIPT_PARAM_ONOFF, true)
Settings.combo:addParam("DistanceToE", "min Distance for GapClose",SCRIPT_PARAM_SLICE, 300, 0, 475, 0)
Settings.combo:addParam("comboItems", "Use Items in Combo", SCRIPT_PARAM_ONOFF, true)
Settings.combo:addSubMenu("["..myHero.charName.."] - Ult Settings", "ults")
Settings.combo.ults:addParam("useR", "Use "..SkillR.name.." if Killable ", SCRIPT_PARAM_ONOFF, true)
Settings.combo.ults:addParam("low", "when enemy hp is below", SCRIPT_PARAM_SLICE, 50, 0, 100, 0)
Settings.combo.ults:addParam("autoult", "AutoR Toggle", SCRIPT_PARAM_ONOFF, true)
Settings.combo.ults:addParam("Ult3", "When x enemy in air", SCRIPT_PARAM_SLICE, 3, 0, 5, 0)
Settings.combo.ults:addParam("delayR", "Delay R Cast", SCRIPT_PARAM_SLICE, 0.5, 0, 2, 1)
Settings.combo.ults:permaShow("autoult")
Settings.combo:addSubMenu("["..myHero.charName.."] - Wombo Combo Ult", "WC")
_Initiator(Settings.combo.WC):CheckGapcloserSpells():AddCallback(
function(target)
if SkillR.ready then
CastSpell(_R)
--print("Initiator Test")
end
end
)
Settings:addSubMenu("["..myHero.charName.."] - Harass Settings", "harass")
Settings.harass:addParam("harassKey", "Harass", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("C"))
Settings.harass:addParam("harassToggle", "Harass Toggle", SCRIPT_PARAM_ONKEYTOGGLE, false, GetKey("L"))
Settings.harass:addParam("useQ12", "Use "..SkillQ.name.." ", SCRIPT_PARAM_ONOFF, true)
Settings.harass:addParam("useQ3", "Use "..SkillQ3.name.." ", SCRIPT_PARAM_ONOFF, true)
Settings.harass:addParam("useE", "Use "..SkillE.name.." ", SCRIPT_PARAM_ONOFF, true)
Settings.harass:addParam("underTower", "AutoQ UnderTower", SCRIPT_PARAM_ONOFF, true)
Settings.harass:permaShow("harassToggle")
Settings:addSubMenu("["..myHero.charName.."] - LastHit", "farm")
Settings.farm:addParam("farmKey", "LastHit", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("A"))
Settings.farm:addParam("useQ12", "use "..SkillQ12.name.." ", SCRIPT_PARAM_ONOFF, true)
Settings.farm:addParam("useQ3", "use "..SkillQ3.name.." ", SCRIPT_PARAM_ONOFF, true)
Settings.farm:addParam("useE", "use "..SkillE.name.." ", SCRIPT_PARAM_ONOFF, true)
Settings:addSubMenu("["..myHero.charName.."] - Lane Clear Settings", "lane")
Settings.lane:addParam("laneKey", "Lane Clear", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("X"))
Settings.lane:addParam("useQ", "LaneClear with "..SkillQ.name.." ", SCRIPT_PARAM_ONOFF, true)
Settings.lane:addParam("useQ3", "LaneClear with "..SkillQ3.name.." ", SCRIPT_PARAM_ONOFF, true)
Settings.lane:addParam("useE", "Use"..SkillE.name.." ", SCRIPT_PARAM_LIST, 1, {"LastHit", "Always"})
Settings.lane:addParam("laneItems", "Use Items in LaneClear", SCRIPT_PARAM_ONOFF, true)
Settings:addSubMenu("["..myHero.charName.."] - Jungle Clear Settings", "jungle")
Settings.jungle:addParam("jungleKey", "Jungle Clear", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("X"))
Settings.jungle:addParam("useQ", "use "..SkillQ.name.." ", SCRIPT_PARAM_ONOFF, true)
Settings.jungle:addParam("useE", "use "..SkillE.name.." ", SCRIPT_PARAM_ONOFF, true)
Settings:addSubMenu("["..myHero.charName.."] - Escape Settings", "esc")
Settings.esc:addParam("run", "Escape Key", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("Z"))
Settings.esc:addParam("useQminion", "AutoQ EnemyMinion", SCRIPT_PARAM_ONOFF, true)
Settings.esc:addParam("qminion", "AutoQ EnemyMinion Toggle", SCRIPT_PARAM_ONKEYTOGGLE, false, GetKey("K"))
Settings.esc:addParam("useQjungle", "AutoQ JungleMob Toggle", SCRIPT_PARAM_ONKEYTOGGLE, true, GetKey("J"))
Settings.esc:permaShow("qminion")
Settings.esc:permaShow("useQjungle")
Settings:addSubMenu("["..myHero.charName.."] - E GapClose Settings", "Egap")
Settings.Egap:addParam("smartEgap", "(Test) EGap/Cheese Strat", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("E"))
Settings:addSubMenu("["..myHero.charName.."] - KillSteal Settings", "ks")
Settings.ks:addParam("killSteal", "Use Smart Kill Steal", SCRIPT_PARAM_ONOFF, true)
Settings.ks:addParam("autoR", "Auto-R KS", SCRIPT_PARAM_ONOFF, true)
Settings.ks:permaShow("killSteal")
Settings.ks:permaShow("autoR")
Settings:addSubMenu("["..myHero.charName.."] - Draw Settings", "drawing")
Settings.drawing:addParam("mDraw", "Disable All Range Draws", SCRIPT_PARAM_ONOFF, false)
Settings.drawing:addParam("Target", "Draw Circle on Target", SCRIPT_PARAM_ONOFF, true)
Settings.drawing:addParam("myHero", "Draw My Range", SCRIPT_PARAM_ONOFF, true)
Settings.drawing:addParam("myColor", "Draw My Range Color", SCRIPT_PARAM_COLOR, {255, 74, 26, 255})
Settings.drawing:addParam("qDraw", "Draw "..SkillQ.name.." Range", SCRIPT_PARAM_ONOFF, true)
Settings.drawing:addParam("qColor", "Draw "..SkillQ.name.." Color", SCRIPT_PARAM_COLOR, {255, 74, 26, 255})
Settings.drawing:addParam("wDraw", "Draw "..SkillW.name.." Range", SCRIPT_PARAM_ONOFF, true)
Settings.drawing:addParam("wColor", "Draw "..SkillW.name.." Color", SCRIPT_PARAM_COLOR, {255, 74, 26, 255})
Settings.drawing:addParam("eDraw", "Draw "..SkillE.name.." Range", SCRIPT_PARAM_ONOFF, true)
Settings.drawing:addParam("eColor", "Draw "..SkillE.name.." Color", SCRIPT_PARAM_COLOR, {255, 74, 26, 255})
Settings.drawing:addParam("rDraw", "Draw "..SkillR.name.." Range", SCRIPT_PARAM_ONOFF, true)
Settings.drawing:addParam("rColor", "Draw "..SkillR.name.." Color", SCRIPT_PARAM_COLOR, {255, 74, 26, 255})
draw = Draw()
draw:LoadMenu(Settings.drawing)
Settings:addSubMenu("["..myHero.charName.."] - Misc Settings", "misc")
Settings.misc:addParam("autoPot", "Auto-Pots", SCRIPT_PARAM_ONOFF, true)
Settings.misc:addParam("usePots", "use when at % hp", SCRIPT_PARAM_SLICE, 50, 1, 100, 0)
Settings.misc:addParam("useqss", "Auto-QSS", SCRIPT_PARAM_ONOFF, true)
Settings.misc:addParam("delay", "Activation delay", SCRIPT_PARAM_SLICE, 0, 0, 250, 0)
Settings.misc:permaShow("useqss")
Settings.misc:addSubMenu("[" .. myHero.charName.. "] - Auto-Interrupt", "interrupt")
Settings.misc.interrupt:addParam("r", "Interrupt with Yasuoq3w", SCRIPT_PARAM_ONOFF, true)
for i, a in pairs(GetEnemyHeroes()) do
if Interrupt[a.charName] ~= nil then
for i, spell in pairs(Interrupt[a.charName].stop) do
Settings.misc.interrupt:addParam(spell.spellName, a.charName.." - "..spell.name, SCRIPT_PARAM_ONOFF, true)
end
end
end
Settings.misc:addSubMenu("[" .. myHero.charName.. "] - Anti Gap-Closer", "gapClose")
for _, enemy in pairs(GetEnemyHeroes()) do
if isAGapcloserUnit[enemy.charName] ~= nil then
Settings.misc.gapClose:addParam(enemy.charName, enemy.charName .. " - " .. enemy:GetSpellData(isAGapcloserUnit[enemy.charName].spell).name, SCRIPT_PARAM_ONOFF, true)
end
end
Settings.misc:addSubMenu("[" .. myHero.charName.. "] - Use E-vade", "E")
_Evader(Settings.misc.E):CheckCC():AddCallback(
function(target)
if SkillE.ready and ValidTarget(target) then
local object = getNearestMinion(mousePos)
if ValidTarget(object) and object.networkID ~= target.networkID then
CastSpell(_E, object)
--print("E-vade Test")
end
end
end
)
Settings.misc:addSubMenu("["..myHero.charName.."] - WindWall Settings", "blocks")
Settings.misc.blocks:addParam("autoW", "Use Auto "..SkillW.name.." ", SCRIPT_PARAM_ONOFF, true)
for i = 1, heroManager.iCount,1 do
local hero = heroManager:getHero(i)
if hero.team ~= player.team then
if Champions[hero.charName] ~= nil then
for index, skillshot in pairs(Champions[hero.charName].skillshots) do
if skillshot.blockable == true then
Settings.misc.blocks:addParam(skillshot.spellName, hero.charName .. " - " .. skillshot.name, SCRIPT_PARAM_ONOFF, true)
end
end
end
end
end
Settings.misc.blocks:addParam("autoWdelay", "WindWall Humanizer", SCRIPT_PARAM_SLICE, 0.5, 0, 2, 1)
Settings.misc:addSubMenu("["..myHero.charName.."] - Prediction Settings", "pred")
Settings.misc.pred:addParam("hc12", "SteelTempest HitChance", SCRIPT_PARAM_SLICE, 1, 0, 2, 0)
Settings.misc.pred:addParam("hc3", "EmpwrdTempest HitChance", SCRIPT_PARAM_SLICE, 1, 0, 2, 0)
ts:AddToMenu(Menu)
end
-- Barasia, vadash, viseversa
function DrawCircleNextLvl(x, y, z, radius, width, color, chordlength)
radius = radius or 300
quality = math.max(8,round(180/math.deg((math.asin((chordlength/(2*radius)))))))
quality = 2 * math.pi / quality
radius = radius*.92
local points = {}
for theta = 0, 2 * math.pi + quality, quality do
local c = WorldToScreen(D3DXVECTOR3(x + radius * math.cos(theta), y, z - radius * math.sin(theta)))
points[#points + 1] = D3DXVECTOR2(c.x, c.y)
end
DrawLines2(points, width or 1, color or 4294967295)
end
function round(num)
if num >= 0 then return math.floor(num+.5) else return math.ceil(num-.5) end
end
function DrawCircle(x, y, z, radius, color)
local vPos1 = Vector(x, y, z)
local vPos2 = Vector(cameraPos.x, cameraPos.y, cameraPos.z)
local tPos = vPos1 - (vPos1 - vPos2):normalized() * radius
local sPos = WorldToScreen(D3DXVECTOR3(tPos.x, tPos.y, tPos.z))
if OnScreen({ x = sPos.x, y = sPos.y }, { x = sPos.x, y = sPos.y }) then
DrawCircleNextLvl(x, y, z, radius, 1, color, 300)
end
end
function DrawCircle2(x, y, z, radius, color)
local vPos1 = Vector(x, y, z)
local vPos2 = Vector(cameraPos.x, cameraPos.y, cameraPos.z)
local tPos = vPos1 - (vPos1 - vPos2):normalized() * radius
local sPos = WorldToScreen(D3DXVECTOR3(tPos.x, tPos.y, tPos.z))
if OnScreen({ x = sPos.x, y = sPos.y }, { x = sPos.x, y = sPos.y }) then
DrawCircleNextLvl(x, y, z, radius, 1, color, 75)
end
end
class "Draw"
function Draw:__init()
self.Menu = nil
end
function Draw:LoadMenu(menu)
self.Settings = menu
self.Settings:addParam("dmg","Draw Damage", SCRIPT_PARAM_ONOFF, true)
AddDrawCallback(function() self:OnDraw() end)
end
function Draw:OnDraw()
if myHero.dead then return end
if self.Settings.dmg then self:DrawDamageCalculation() end
end
function Draw:DrawDamageCalculation()
for idx, enemy in ipairs(GetEnemyHeroes()) do
local p = WorldToScreen(D3DXVECTOR3(enemy.x, enemy.y, enemy.z))
if ValidTarget(enemy) and enemy.visible and OnScreen(p.x, p.y) then
local dmg = (getDmg("Q", enemy, myHero)+getDmg("E", enemy, myHero)+getDmg("R", enemy, myHero)+getDmg("IGNITE", enemy, myHero))
local q = getDmg("Q", enemy, myHero)
local e = getDmg("E", enemy, myHero)
local r = getDmg("R", enemy, myHero)
if dmg >= enemy.health then
self:DrawLineHPBar(dmg, "FUCK HIM! OR I WILL FUCK YOU!", enemy, true)
else
local spells = ""
if q then spells = "Q+" end
if e then spells = spells .. "E+" end
if r then spells = spells .. "R" end
self:DrawLineHPBar(dmg, spells, enemy, true)
end
end
end
end
function Draw:GetHPBarPos(enemy)
enemy.barData = {PercentageOffset = {x = -0.05, y = 0}}
local barPos = GetUnitHPBarPos(enemy)
local barPosOffset = GetUnitHPBarOffset(enemy)
local barOffset = { x = enemy.barData.PercentageOffset.x, y = enemy.barData.PercentageOffset.y }
local barPosPercentageOffset = { x = enemy.barData.PercentageOffset.x, y = enemy.barData.PercentageOffset.y }
local BarPosOffsetX = -50
local BarPosOffsetY = 46
local CorrectionY = 39
local StartHpPos = 31
barPos.x = math.floor(barPos.x + (barPosOffset.x - 0.5 + barPosPercentageOffset.x) * BarPosOffsetX + StartHpPos)
barPos.y = math.floor(barPos.y + (barPosOffset.y - 0.5 + barPosPercentageOffset.y) * BarPosOffsetY + CorrectionY)
local StartPos = Vector(barPos.x , barPos.y, 0)
local EndPos = Vector(barPos.x + 108 , barPos.y , 0)
return Vector(StartPos.x, StartPos.y, 0), Vector(EndPos.x, EndPos.y, 0)
end
function Draw:DrawLineHPBar(damage, text, unit, enemyteam)
if unit.dead or not unit.visible then return end
local p = WorldToScreen(D3DXVECTOR3(unit.x, unit.y, unit.z))
if not OnScreen(p.x, p.y) then return end
local thedmg = 0
local line = 2
local linePosA = {x = 0, y = 0 }
local linePosB = {x = 0, y = 0 }
local TextPos = {x = 0, y = 0 }
if damage >= unit.maxHealth then
thedmg = unit.maxHealth - 1
else
thedmg = damage
end
thedmg = math.round(thedmg)
local StartPos, EndPos = self:GetHPBarPos(unit)
local Real_X = StartPos.x + 24
local Offs_X = (Real_X + ((unit.health - thedmg) / unit.maxHealth) * (EndPos.x - StartPos.x - 2))
if Offs_X < Real_X then Offs_X = Real_X end
local mytrans = 350 - math.round(255*((unit.health-thedmg)/unit.maxHealth))
if mytrans >= 255 then mytrans=254 end
local my_bluepart = math.round(400*((unit.health-thedmg)/unit.maxHealth))
if my_bluepart >= 255 then my_bluepart=254 end
if enemyteam then
linePosA.x = Offs_X-150
linePosA.y = (StartPos.y-(30+(line*15)))
linePosB.x = Offs_X-150
linePosB.y = (StartPos.y-10)
TextPos.x = Offs_X-148
TextPos.y = (StartPos.y-(30+(line*15)))
else
linePosA.x = Offs_X-125
linePosA.y = (StartPos.y-(30+(line*15)))
linePosB.x = Offs_X-125
linePosB.y = (StartPos.y-15)
TextPos.x = Offs_X-122
TextPos.y = (StartPos.y-(30+(line*15)))
end
DrawLine(linePosA.x, linePosA.y, linePosB.x, linePosB.y , 2, ARGB(mytrans, 255, my_bluepart, 0))
DrawText(tostring(thedmg).." "..tostring(text), 15, TextPos.x, TextPos.y , ARGB(mytrans, 255, my_bluepart, 0))
end
function Variables()
SkillQ12 = { name = "Steel Tempest", range = 475, delay = 0.25, speed = 1500, width = 55 }
SkillQ3 = { name = "Empowered Tempest", range = 1000, delay = 0.75, speed = 1500, width = 90, radius = 90 }
SkillQ = { name = "Steel Tempest", range = 475, delay = 0.25, speed = 1500, width = 55, ready = false }
SkillW = { name = "Wind Wall", range = 475, delay = 0.4, speed = math.huge, width = 400, ready = false }
SkillE = { name = "Sweeping Blade", range = 475, delay = 0.25, speed = 1200, width = nil, ready = false }
SkillR = { name = "Last Breath", range = 1200, delay = 0.4, speed = math.huge, ready = false }
enemyMinions = minionManager(MINION_ENEMY, 1300, myHero, MINION_SORT_HEALTH_ASC)
JungleMinions = minionManager(MINION_JUNGLE, 1300, myHero, MINION_SORT_HEALTH_ASC)
Minions = minionManager(MINION_ENEMY, 1300, player, MINION_SORT_HEALTH_ASC)
ts = _SimpleTargetSelector(TARGET_LESS_CAST_PRIORITY, 1100, DAMAGE_PHYSICAL, true)
VP = VPrediction()
DashedUnits = {}
KnockedUnits = {}
JungleMobs = {}
JungleFocusMobs = {}
if GetGame().map.shortName == "twistedTreeline" then
TwistedTreeline = true
else
TwistedTreeline = false
end
_G.oldDrawCircle = rawget(_G, 'DrawCircle')
_G.DrawCircle = DrawCircle2
priorityTable = {
AP = {
"Annie", "Ahri", "Akali", "Anivia", "Annie", "Brand", "Cassiopeia", "Diana", "Evelynn", "FiddleSticks", "Fizz", "Gragas", "Heimerdinger", "Karthus",
"Kassadin", "Katarina", "Kayle", "Kennen", "Leblanc", "Lissandra", "Lux", "Malzahar", "Mordekaiser", "Morgana", "Nidalee", "Orianna",
"Ryze", "Sion", "Swain", "Syndra", "Teemo", "TwistedFate", "Veigar", "Viktor", "Vladimir", "Xerath", "Ziggs", "Zyra", "Velkoz"
},
Support = {
"Alistar", "Blitzcrank", "Janna", "Karma", "Leona", "Lulu", "Nami", "Nunu", "Sona", "Soraka", "Taric", "Thresh", "Zilean", "Braum"
},
Tank = {
"Amumu", "Chogath", "DrMundo", "Galio", "Hecarim", "Malphite", "Maokai", "Nasus", "Rammus", "Sejuani", "Nautilus", "Shen", "Singed", "Skarner", "Volibear",
"Warwick", "Yorick", "Zac"
},
AD_Carry = {
"Ashe", "Caitlyn", "Corki", "Draven", "Ezreal", "Graves", "Jayce", "Jinx", "KogMaw", "Lucian", "MasterYi", "MissFortune", "Pantheon", "Quinn", "Shaco", "Sivir",
"Talon","Tryndamere", "Tristana", "Twitch", "Urgot", "Varus", "Vayne", "Yasuo", "Zed"
},
Bruiser = {
"Aatrox", "Darius", "Elise", "Fiora", "Gangplank", "Garen", "Irelia", "JarvanIV", "Jax", "Khazix", "LeeSin", "Nocturne", "Olaf", "Poppy",
"Renekton", "Rengar", "Riven", "Rumble", "Shyvana", "Trundle", "Udyr", "Vi", "MonkeyKing", "XinZhao"
}
}
Items = {
BRK = { id = 3153, range = 450, reqTarget = true, slot = nil },
BWC = { id = 3144, range = 400, reqTarget = true, slot = nil },
DFG = { id = 3128, range = 750, reqTarget = true, slot = nil },
HGB = { id = 3146, range = 400, reqTarget = true, slot = nil },
RSH = { id = 3074, range = 350, reqTarget = false, slot = nil },
STD = { id = 3131, range = 350, reqTarget = false, slot = nil },
TMT = { id = 3077, range = 350, reqTarget = false, slot = nil },
YGB = { id = 3142, range = 350, reqTarget = false, slot = nil },
BFT = { id = 3188, range = 750, reqTarget = true, slot = nil },
RND = { id = 3143, range = 275, reqTarget = false, slot = nil }
}
if not TwistedTreeline then
JungleMobNames = {
["SRU_MurkwolfMini2.1.3"] = true,
["SRU_MurkwolfMini2.1.2"] = true,
["SRU_MurkwolfMini8.1.3"] = true,
["SRU_MurkwolfMini8.1.2"] = true,
["SRU_BlueMini1.1.2"] = true,
["SRU_BlueMini7.1.2"] = true,
["SRU_BlueMini21.1.3"] = true,
["SRU_BlueMini27.1.3"] = true,
["SRU_RedMini10.1.2"] = true,
["SRU_RedMini10.1.3"] = true,
["SRU_RedMini4.1.2"] = true,
["SRU_RedMini4.1.3"] = true,
["SRU_KrugMini11.1.1"] = true,
["SRU_KrugMini5.1.1"] = true,
["SRU_RazorbeakMini9.1.2"] = true,
["SRU_RazorbeakMini9.1.3"] = true,
["SRU_RazorbeakMini9.1.4"] = true,
["SRU_RazorbeakMini3.1.2"] = true,
["SRU_RazorbeakMini3.1.3"] = true,
["SRU_RazorbeakMini3.1.4"] = true
}
FocusJungleNames = {
["SRU_Blue1.1.1"] = true,
["SRU_Blue7.1.1"] = true,
["SRU_Murkwolf2.1.1"] = true,
["SRU_Murkwolf8.1.1"] = true,
["SRU_Gromp13.1.1"] = true,
["SRU_Gromp14.1.1"] = true,
["Sru_Crab16.1.1"] = true,
["Sru_Crab15.1.1"] = true,
["SRU_Red10.1.1"] = true,
["SRU_Red4.1.1"] = true,
["SRU_Krug11.1.2"] = true,
["SRU_Krug5.1.2"] = true,
["SRU_Razorbeak9.1.1"] = true,
["SRU_Razorbeak3.1.1"] = true,
["SRU_Dragon6.1.1"] = true,
["SRU_Baron12.1.1"] = true
}
else
FocusJungleNames = {
["TT_NWraith1.1.1"] = true,
["TT_NGolem2.1.1"] = true,
["TT_NWolf3.1.1"] = true,
["TT_NWraith4.1.1"] = true,
["TT_NGolem5.1.1"] = true,
["TT_NWolf6.1.1"] = true,
["TT_Spiderboss8.1.1"] = true
}
JungleMobNames = {
["TT_NWraith21.1.2"] = true,
["TT_NWraith21.1.3"] = true,
["TT_NGolem22.1.2"] = true,
["TT_NWolf23.1.2"] = true,
["TT_NWolf23.1.3"] = true,
["TT_NWraith24.1.2"] = true,
["TT_NWraith24.1.3"] = true,
["TT_NGolem25.1.1"] = true,
["TT_NWolf26.1.2"] = true,
["TT_NWolf26.1.3"] = true
}
end
for i = 0, objManager.maxObjects do
local object = objManager:getObject(i)
if object and object.valid and not object.dead then
if FocusJungleNames[object.name] then
JungleFocusMobs[#JungleFocusMobs+1] = object
elseif JungleMobNames[object.name] then
JungleMobs[#JungleMobs+1] = object
end
end
end
end
function SetPriority(table, hero, priority)
for i=1, #table, 1 do
if hero.charName:find(table[i]) ~= nil then
TS_SetHeroPriority(priority, hero.charName)
end
end
end
function arrangePrioritys()
for i, enemy in ipairs(GetEnemyHeroes()) do
SetPriority(priorityTable.AD_Carry, enemy, 1)
SetPriority(priorityTable.AP, enemy, 2)
SetPriority(priorityTable.Support, enemy, 3)
SetPriority(priorityTable.Bruiser, enemy, 4)
SetPriority(priorityTable.Tank, enemy, 5)
end
end
function arrangePrioritysTT()
for i, enemy in ipairs(GetEnemyHeroes()) do
SetPriority(priorityTable.AD_Carry, enemy, 1)
SetPriority(priorityTable.AP, enemy, 1)
SetPriority(priorityTable.Support, enemy, 2)
SetPriority(priorityTable.Bruiser, enemy, 2)
SetPriority(priorityTable.Tank, enemy, 3)
end
end
function UseItems(unit)
if unit ~= nil then
for _, item in pairs(Items) do
item.slot = GetInventorySlotItem(item.id)
if item.slot ~= nil then
if item.reqTarget and GetDistance(unit) < item.range then
CastSpell(item.slot, unit)
elseif not item.reqTarget then
if (GetDistance(unit) - getHitBoxRadius(myHero) - getHitBoxRadius(unit)) < 50 then
CastSpell(item.slot)
end
end
end
end
end
end
function getHitBoxRadius(target)
return GetDistance(target.minBBox, target.maxBBox)/2
end
function PriorityOnLoad()
if heroManager.iCount < 10 or (TwistedTreeline and heroManager.iCount < 6) then
print("GosuMechanics: Too few champions to arrange priority.")
elseif heroManager.iCount == 6 then
arrangePrioritysTT()
else
arrangePrioritys()
end
end
function GetJungleMob()
for _, Mob in pairs(JungleFocusMobs) do
if ValidTarget(Mob, 1300) then return Mob end
end
for _, Mob in pairs(JungleMobs) do
if ValidTarget(Mob, 1300) then return Mob end
end
end
function OnCreateObj(obj)
if obj.valid then
if FocusJungleNames[obj.name] then
JungleFocusMobs[#JungleFocusMobs+1] = obj
elseif JungleMobNames[obj.name] then
JungleMobs[#JungleMobs+1] = obj
end
end
--if GetDistance(obj)<50 then PrintChat(""..obj.name) end
if GetDistance(obj)<100 and obj.name:lower():find("yasuo") and obj.name:lower():find("trail") then
--PrintChat("BLA")
attacked = true
end
if obj and GetDistance(obj)<=50 then
if obj.name == qBuffName then
SteelTempest = true
end
end
if obj.name=="Yasuo_base_R_indicator.beam.troy" then
knockedUp = knockedUp + 1
end
if GetDistance(myHero, obj) < 50 and obj.name:lower():find("teleporthome") then
isRecalling = true
end
end
function OnDeleteObj(obj)
for i, Mob in pairs(JungleMobs) do
if obj.name == Mob.name then
table.remove(JungleMobs, i)
end
end
for i, Mob in pairs(JungleFocusMobs) do
if obj.name == Mob.name then
table.remove(JungleFocusMobs, i)
end
end
if obj.name=="Yasuo_base_R_indicator.beam.troy" then
knockedUp = knockedUp - 1
end
if obj and GetDistance(obj)<=50 then
if obj.name == qBuffName then
SteelTempest = false
end
end
if GetDistance(myHero, obj) < 50 and obj.name:lower():find("teleporthome") then
DelayAction(function() isRecalling = false end, 0.5)
end
end
function lowHp(unit)
if unit.health <= (Settings.misc.usePots/100*myHero.maxHealth) then
return true
else
return false
end
end
function AutoPots()
if REGPOT and lowHp(myHero) and not UsingPot and not IsRecalling then
CastSpell(REGPOT)
end
end
function GetItemSlot()
for slot = ITEM_1, ITEM_7 do
local currentItemName = myHero:GetSpellData(slot).name
if currentItemName == "RegenerationPotion" then
REGPOT = slot
end
end
end
function UseQSS(unit, scary)
if lastRemove > os.clock() - 1 then return end
for i, Item in pairs(Items) do
local Item = Items[i]
if GetInventoryItemIsCastable(Item.id) and GetDistanceSqr(unit) <= Item.range * Item.range then
if Item.id == 3139 or Item.id == 3140 then
if scary then
DelayAction(function()
CastItem(Item.id)
end, Settings.misc.delay/1000)
lastRemove = os.clock()
return true
end
end
end
end
end
function UseItems(unit, scary)
if not ValidTarget(unit) and unit ~= myHero then return end
for i, Item in pairs(Items) do
local Item = Items[i]
if Item.id ~= 3140 and Item.id ~= 3139 then
if GetInventoryItemIsCastable(Item.id) and GetDistanceSqr(unit) <= Item.range * Item.range then
if Item.id == 3143 or Item.id == 3077 or Item.id == 3074 or Item.id == 3131 or Item.id == 3142 or Item.id == 2140 then
CastItem(Item.id)
else
CastItem(Item.id, unit) return true
end
end
end
end
end
function CountEnemyHeroInRange(range, object)
object = object or myHero
range = range and range * range or myHero.range * myHero.range
local enemyInRange = 0
for i = 1, heroManager.iCount, 1 do
local hero = heroManager:getHero(i)
if ValidTarget(hero) and not hero.dead and hero.visible and hero.team ~= myHero.team and GetDistanceSqr(object, hero) <= range then
enemyInRange = enemyInRange + 1
end
end
return enemyInRange
end
function CountAllysInRange(range, object)
local allyInRange = 0
local allies = GetAllyHeroes()
if object ~= nil and range then
for i, ally in pairs(allies) do
if not ally.dead and ValidTarget(ally) and range > GetDistance(ally, object) then
allyInRange = allyInRange + 1
end
end
end
return allyInRange
end
function CountEnemiesNearUnitReg(unit, range)
local count = 0
for i, enemy in pairs(sEnemies) do
if not enemy.dead and enemy.visible then
if GetDistanceSqr(unit, enemy) < range * range then
count = count + 1
end
end
end
return count
end
function GetSlotItemFromName(itemname)
local slot
for i = 6, 12 do
local item = myHero:GetSpellData(i).name
if ((#item > 0) and (item:lower() == itemname:lower())) then
slot = i
end
end
return slot
end
function GetSlotItem(id, unit)
unit = unit or myHero
if (not ItemNames[id]) then
return ___GetInventorySlotItem(id, unit)
end
local name = ItemNames[id]
for slot = ITEM_1, ITEM_7 do
local item = unit:GetSpellData(slot).name
if ((#item > 0) and (item:lower() == name:lower())) then
return slot
end
end
end
function TrueRange()
return myHero.range + GetDistance(myHero, myHero.minBBox)
end
function GetBestLineFarmPosition(range, width, objects)
local BestPos
local BestHit = 0
for i, object in ipairs(objects) do
local EndPos = Vector(myHero.pos) + range * (Vector(object) - Vector(myHero.pos)):normalized()
local hit = CountObjectsOnLineSegment(myHero.pos, EndPos, width, objects)
if hit > BestHit then
BestHit = hit
BestPos = Vector(object)
if BestHit == #objects then
break
end
end
end
return BestPos, BestHit
end
function CountObjectsOnLineSegment(StartPos, EndPos, width, objects)
local n = 0
for i, object in ipairs(objects) do
local pointSegment, pointLine, isOnSegment = VectorPointProjectionOnLineSegment(StartPos, EndPos, object)
if isOnSegment and GetDistanceSqr(pointSegment, object) < width * width then
n = n + 1
end
end
return n
end
function GetBestCircularFarmPosition(range, radius, objects)
local BestPos
local BestHit = 0
for i, object in ipairs(objects) do
local hit = CountObjectsNearPos(object.visionPos or object, range, radius, objects)
if hit > BestHit then
BestHit = hit
BestPos = Vector(object)
if BestHit == #objects then
break
end
end
end
return BestPos, BestHit
end
function CountObjectsNearPos(pos, range, radius, objects)
local n = 0
for i, object in ipairs(objects) do
if GetDistance(pos, object) <= radius then
n = n + 1
end
end
return n
end
for i, enemy in ipairs(GetEnemyHeroes()) do
enemy.barData = {PercentageOffset = {x = 0, y = 0} }
end
function findClosestEnemy(obj)
local closestEnemy = nil
local currentEnemy = nil
for i, currentEnemy in pairs(sEnemies) do
if ValidTarget(currentEnemy) then
if closestEnemy == nil then
closestEnemy = currentEnemy
end
if GetDistanceSqr(currentEnemy.pos, obj) < GetDistanceSqr(closestEnemy.pos, obj) then
closestEnemy = currentEnemy
end
end
end
return closestEnemy
end
function OnProcessSpell(object,spell)
--if(object.charName=="Yasuo") then PrintChat(spellProc.name .. " " .. object.charName) end
if object.isMe and spell.name:lower():find("recall") then
--PrintChat(spellProc.name)
end
local unit = object
if unit.isMe and spell.name == "YasuoDashWrapper" then
lastE = os.clock() * 1000
ePos, sPos, myPos = Vector(spell.endPos.x, spell.endPos.y, spell.endPos.z), Vector(spell.startPos.x, spell.startPos.y, spell.startPos.z), Vector(myHero.pos.x, myHero.pos.y, myHero.pos.z)
TargetPos = Vector(spell.target.pos.x, spell.target.pos.y, spell.target.pos.z)
if GetDistance(sPos,TargetPos) < 410 then
dashPoint = sPos + (TargetPos - sPos):normalized() * 475
else
dashPoint = sPos + (TargetPos - sPos):normalized() * (GetDistance(sPos,TargetPos) + 65)
end
Eduration2 = os.clock() + 0.5
Eduration3 = os.clock() + 0.3
if EStacks == 1 then EStacks = 2 end
Tdashing = true
Tdashing2 = true
end
if myHero.dead then return end
--if object.isMe and spellProc.name:lower():find("attack") then
--animTime = spellProc.animationTime*0.1
--end
if Settings.misc.blocks.autoW then
if object.team ~= player.team and string.find(spell.name, "Basic") == nil then
if Champions[object.charName] ~= nil then
skillshot = Champions[object.charName].skillshots[spell.name]
if skillshot ~= nil and skillshot.blockable == true then
range = skillshot.range
if not spell.startPos then
spell.startPos.x = object.x
spell.startPos.z = object.z
end
if GetDistance(spell.startPos) <= range then
if GetDistance(spell.endPos) <= SkillW.range then
if SkillW.ready and Settings.misc.blocks[spell.name] then
DelayAction(function ()
CastSpell(_W, object.x, object.z)
end, Settings.misc.blocks.autoWdelay / 1000)
end
end
end
end
end
end
end
if myHero.dead then return end
if object.team == myHero.team then return end
if Interrupt[object.charName] ~= nil then
spell = Interrupt[object.charName].stop[spell.name]
if spell ~= nil then
if Settings.misc.interrupt[spell.name] then
if ValidTarget(unit) and GetDistance(object) < SkillQ3.range and SkillQ3.ready and Settings.misc.interrupt.r then
CastQ3(unit)
end
end
end
end
local unit = object
if unit.type == myHero.type and unit.team ~= myHero.team and isAGapcloserUnit[unit.charName] and GetDistance(unit) < 2000 and spell ~= nil then
if spell.name == (type(isAGapcloserUnit[unit.charName].spell) == 'number' and unit:GetSpellData(isAGapcloserUnit[unit.charName].spell).name or isAGapcloserUnit[unit.charName].spell) and Settings.misc.gapClose[unit.charName] then
if spell.target ~= nil and spell.target and spell.target.networkID == myHero.networkID or isAGapcloserUnit[unit.charName].spell == 'blindmonkqtwo' then
CastQ3(object)
elseif not spell.target then
local startPos1 = Vector(unit.visionPos) + 300 * (Vector(spell.endPos) - Vector(unit.visionPos)):normalized()
local startPos2 = Vector(unit.visionPos) + 100 * (Vector(spell.endPos) - Vector(unit.visionPos)):normalized()
if (GetDistanceSqr(myHero.visionPos, unit.visionPos) > GetDistanceSqr(myHero.visionPos, endPos1) or GetDistanceSqr(myHero.visionPos, unit.visionPos) > GetDistanceSqr(myHero.visionPos, endPos2)) then
CastQ3(startPos1.x, startPos2.z)
end
end
end
end
end
function OnProcessAttack(object,spell)
--if(object.charName=="Yasuo") then PrintChat(spellProc.name .. " " .. object.charName) end
if object.isMe and spell.name:lower():find("recall") then
--PrintChat(spellProc.name)
end
local unit = object
if unit and spell and unit.isMe and spell.name and spell.name:lower():find("attack") and spell.target and not spell.target.dead and Settings.combo.useQ12 and Settings.combo.comboKey and not IsDashing() then
local t = spell.target
DelayAction(function() CastSpell(_Q, t.x, t.z) end, spell.windUpTime + GetLatency() / 2000)
end
local unit = object
if unit.isMe and spell.name == "YasuoDashWrapper" then
lastE = os.clock() * 1000
ePos, sPos, myPos = Vector(spell.endPos.x, spell.endPos.y, spell.endPos.z), Vector(spell.startPos.x, spell.startPos.y, spell.startPos.z), Vector(myHero.pos.x, myHero.pos.y, myHero.pos.z)
TargetPos = Vector(spell.target.pos.x, spell.target.pos.y, spell.target.pos.z)
if GetDistance(sPos,TargetPos) < 410 then
dashPoint = sPos + (TargetPos - sPos):normalized() * 475
else
dashPoint = sPos + (TargetPos - sPos):normalized() * (GetDistance(sPos,TargetPos) + 65)
end
Eduration2 = os.clock() + 0.5
Eduration3 = os.clock() + 0.3
if EStacks == 1 then EStacks = 2 end
Tdashing = true
Tdashing2 = true
end
if myHero.dead then return end
--if object.isMe and spellProc.name:lower():find("attack") then
--animTime = spellProc.animationTime*0.1
--end
if Settings.misc.blocks.autoW then
if object.team ~= player.team and string.find(spell.name, "Basic") == nil then
if Champions[object.charName] ~= nil then
skillshot = Champions[object.charName].skillshots[spell.name]
if skillshot ~= nil and skillshot.blockable == true then
range = skillshot.range
if not spell.startPos then
spell.startPos.x = object.x
spell.startPos.z = object.z
end
if GetDistance(spell.startPos) <= range then
if GetDistance(spell.endPos) <= SkillW.range then
if SkillW.ready and Settings.misc.blocks[spell.name] then
DelayAction(function ()
CastSpell(_W, object.x, object.z)
end, Settings.misc.blocks.autoWdelay / 1000)
end
end
end
end
end
end
end
if myHero.dead then return end
if object.team == myHero.team then return end
if Interrupt[object.charName] ~= nil then
spell = Interrupt[object.charName].stop[spell.name]
if spell ~= nil then
if Settings.misc.interrupt[spell.name] then
if ValidTarget(unit) and GetDistance(object) < SkillQ3.range and SkillQ3.ready and Settings.misc.interrupt.r then
CastQ3(unit)
end
end
end
end
local unit = object
if unit.type == myHero.type and unit.team ~= myHero.team and isAGapcloserUnit[unit.charName] and GetDistance(unit) < 2000 and spell ~= nil then
if spell.name == (type(isAGapcloserUnit[unit.charName].spell) == 'number' and unit:GetSpellData(isAGapcloserUnit[unit.charName].spell).name or isAGapcloserUnit[unit.charName].spell) and Settings.misc.gapClose[unit.charName] then
if spell.target ~= nil and spell.target and spell.target.networkID == myHero.networkID or isAGapcloserUnit[unit.charName].spell == 'blindmonkqtwo' then
CastQ3(object)
elseif not spell.target then
local startPos1 = Vector(unit.visionPos) + 300 * (Vector(spell.endPos) - Vector(unit.visionPos)):normalized()
local startPos2 = Vector(unit.visionPos) + 100 * (Vector(spell.endPos) - Vector(unit.visionPos)):normalized()
if (GetDistanceSqr(myHero.visionPos, unit.visionPos) > GetDistanceSqr(myHero.visionPos, endPos1) or GetDistanceSqr(myHero.visionPos, unit.visionPos) > GetDistanceSqr(myHero.visionPos, endPos2)) then
CastQ3(startPos1.x, startPos2.z)
end
end
end
end
end
function GetPriority(enemy)
return 1 + math.max(0, math.min(1.5, TS_GetPriority(enemy) * 0.25))
end
function _GetDistanceSqr(p1, p2)
p2 = p2 or player
if p1 and p1.networkID and (p1.networkID ~= 0) and p1.visionPos then p1 = p1.visionPos end
if p2 and p2.networkID and (p2.networkID ~= 0) and p2.visionPos then p2 = p2.visionPos end
return GetDistanceSqr(p1, p2)
end
class "_SimpleTargetSelector" --ICreative's SimpleLib
-- _SimpleTS
function _SimpleTargetSelector:__init(mode, range, damageType)
self.TS = TargetSelector(mode, range, damageType)
self.target = nil
self.range = range
self.Menu = nil
self.multiplier = 1.4
self.selected = nil
AddTickCallback(function() self:update() end)
AddMsgCallback(
function(msg, key)
if msg == WM_LBUTTONDOWN then
local best = nil
for i, enemy in ipairs(GetEnemyHeroes()) do
if ValidTarget(enemy) then
if GetDistanceSqr(enemy, mousePos) < math.pow(150, 2) then
local p = WorldToScreen(D3DXVECTOR3(enemy.x, enemy.y, enemy.z))
if OnScreen(p.x, p.y) then
if best == nil then
best = enemy
elseif GetPriority(best) > GetPriority(enemy) then
best = enemy
end
end
end
end
end
if best then
if self.selected and self.selected.networkID == best.networkID then
print("Target Selector: " .. "New target unselected: "..best.charName.. "")
self.selected = nil
else
print("Target Selector: " .. "New target selected: "..best.charName.. "")
self.selected = best
end
end
end
end
)
end
function _SimpleTargetSelector:update()
self.TS.range = self.range
self.TS:update()
self.target = self.TS.target
if ValidTarget(self.selected, self.range * self.multiplier) and self.selected.type == myHero.type then
self.target = self.selected
end
end
function _SimpleTargetSelector:AddToMenu(Menu)
if Settings then
Settings:addSubMenu(myHero.charName.." - Target Selector Settings", "TS")
self.Settings = Settings.TS
self.Settings:addTS(self.TS)
end
end
local EnemiesInGame = {}--ICreative's SimpleLib
function IsGapclose(enemy, spelltype)--ICreative's SimpleLib
if IsValidTarget(enemy) and KNOCKUP_SPELLS[enemy.charName] ~= nil then
for champ, spell in pairs(KNOCKUP_SPELLS) do
if enemy.charName == champ and spell == spelltype then
return true
end
end
end
return false
end
function IsChanelling(enemy, spelltype)--ICreative's SimpleLib
if IsValidTarget(enemy) and CHANELLING_SPELLS[enemy.charName] ~= nil then
for champ, spell in pairs(CHANELLING_SPELLS) do
if enemy.charName == champ and spell == spelltype then
return true
end
end
end
return false
end
function IsCC(enemy, spelltype)--ICreative's SimpleLib
if IsValidTarget(enemy) and EVADE_SPELLS[enemy.charName] ~= nil then
for champ, spell in pairs(EVADE_SPELLS) do
if enemy.charName == champ and spell == spelltype then
return true
end
end
end
return false
end
function ExtraTime()--ICreative's SimpleLib
return -0.07--Latency() - 0.1
end
function Latency()--ICreative's SimpleLib
return GetLatency()/2000
end
class "_Initiator"--ICreative's SimpleLib
local CHANELLING_SPELLS = {
["Caitlyn"] = "R",
["Katarina"] = "R",
["MasterYi"] = "W",
["Fiddlesticks"] = "R",
["Galio"] = "R",
["Lucian"] = "R",
["MissFortune"] = "R",
["VelKoz"] = "R",
["Nunu"] = "R",
["Shen"] = "R",
["Karthus"] = "R",
["Malzahar"] = "R",
["Pantheon"] = "R",
["Warwick"] = "R",
["Xerath"] = "R",
}
local KNOCKUP_SPELLS = {
["Aatrox"] = "Q",
["Alistar"] = "W",
["Alistar"] = "Q",
["Blitzcrank"] = "Q",
["Blitzcrank"] = "E",
["Chogath"] = "Q",
["Corki"] = "W",
["Diana"] = "R",
["Fizz"] = "R",
["Gnar"] = "E",
["Gragas"] = "E",
["Hecarim"] = "R",
["JarvanIV"] = "Q",
["JarvanIV"] = "R",
["KhaZix"] = "E",
["LeeSin"] = "R",
["Malphite"] = "R",
["MonkeyKing"] = "R",
["Nautilus"] = "Q",
["Orianna"] = "R",
["Pantheon"] = "R",
["Poppy"] = "E",
["Rammus"] = "Q",
["RekSai"] = "E",
["Renekton"] = "E",
["Riven"] = "Q",
["Rengar"] = "R",
["Sejuani"] = "Q",
["Sion"] = "R",
["Sion"] = "Q",
["Shyvana"] = "R",
["Talon"] = "E",
["Thresh"] = "E",
["Tristana"] = "R",
["Volibear"] = "Q",
["Vi"] = "Q",
["Vi"] = "R",
["XinZhao"] = "R",
["Yasuo"] = "Q",
["Zac"] = "E",
}
--CLASS INITIATOR--ICreative's SimpleLib
function _Initiator:__init(menu)
self.Callbacks = {}
self.ActiveSpells = {}
assert(menu, "_Initiator: menu is invalid!")
self.Settings = menu
if #GetAllyHeroes() > 0 and self.Settings~=nil then
for idx, ally in ipairs(GetAllyHeroes()) do
self.Settings:addParam(ally.charName.."Q", ally.charName.." (Q)", SCRIPT_PARAM_ONOFF, false)
self.Settings:addParam(ally.charName.."W", ally.charName.." (W)", SCRIPT_PARAM_ONOFF, false)
self.Settings:addParam(ally.charName.."E", ally.charName.." (E)", SCRIPT_PARAM_ONOFF, false)
self.Settings:addParam(ally.charName.."R", ally.charName.." (R)", SCRIPT_PARAM_ONOFF, false)
end
self.Settings:addParam("Time", "Time Limit to Initiate", SCRIPT_PARAM_SLICE, 2.5, 0, 8, 0)
AddProcessSpellCallback(
function(unit, spell)
if not myHero.dead and unit and spell and spell.name and not unit.isMe and unit.type and unit.team and GetDistanceSqr(myHero, unit) < 2000 * 2000 then
if unit.type == myHero.type and unit.team == myHero.team then
local spelltype, casttype = getSpellType(unit, spell.name)
if spelltype == "Q" or spelltype == "W" or spelltype == "E" or spelltype == "R" then
if self.Settings[unit.charName..spelltype] then
table.insert(self.ActiveSpells, {Time = os.clock() - Latency(), Unit = unit})
end
end
end
end
end
)
AddTickCallback(
function()
if #self.ActiveSpells > 0 then
for i = #self.ActiveSpells, 1, -1 do
local spell = self.ActiveSpells[i]
if os.clock() + Latency() - spell.Time <= self.Settings.Time then
self:TriggerCallbacks(spell.Unit)
else
table.remove(self.ActiveSpells, i)
end
end
end
end
)
end
end
function _Initiator:CheckChannelingSpells()
if #GetAllyHeroes() > 0 then
for idx, ally in ipairs(GetAllyHeroes()) do
for champ, spell in pairs(CHANELLING_SPELLS) do
if ally.charName == champ then
self.Settings[ally.charName..spell] = true
end
end
end
end
return self
end
function _Initiator:CheckGapcloserSpells()
if #GetAllyHeroes() > 0 then
for idx, ally in ipairs(GetAllyHeroes()) do
for champ, spell in pairs(KNOCKUP_SPELLS) do
if ally.charName == champ then
self.Settings[ally.charName..spell] = true
end
end
end
end
return self
end
function _Initiator:AddCallback(cb)
table.insert(self.Callbacks, cb)
return self
end
function _Initiator:TriggerCallbacks(unit)
for i, callback in ipairs(self.Callbacks) do
callback(unit)
end
end
class "_Evader"
local EVADE_SPELLS = {
["Ahri"] = "E",
["Amumu"] = "Q",
["Amumu"] = "R",
["Anivia"] = "Q",
["Annie"] = "R",
["Ashe"] = "R",
["Bard"] = "Q",
["Blitzcrank"] = "Q",
["Brand"] = "Q",
["Brand"] = "W",
["Brand"] = "E",
["Braum"] = "Q",
["Caitlyn"] = "Q",
["Caitlyn"] = "R",
["Lucian"] = "R",
["MissFortune"] = "R",
["VelKoz"] = "R",
["Cassiopeia"] = "Q",
["Cassiopeia"] = "W",
["Cassiopeia"] = "R",
["Chogath"] = "Q",
["Darius"] = "E",
["Draven"] = "E",
["DrMundo"] = "Q",
["Ekko"] = "W",
["Elise"] = "Q",
["Elise"] = "E",
["Evelynn"] = "R",
["Ezreal"] = "Q",
["Ezreal"] = "W",
["Ezreal"] = "R",
["Fizz"] = "E",
["Fizz"] = "R",
["Galio"] = "R",
["Gnar"] = "R",
["Gragas"] = "R",
["Graves"] = "R",
["Graves"] = "Q",
["Janna"] = "Q",
["Jinx"] = "W",
["Jinx"] = "R",
["KhaZix"] = "W",
["KogMaw"] = "Q",
["KogMaw"] = "W",
["KogMaw"] = "E",
["KogMaw"] = "R",
["Leblanc"] = "E",
["LeeSin"] = "Q",
["Leona"] = "E",
["Leona"] = "R",
["Lux"] = "Q",
["Lux"] = "R",
["Malphite"] = "R",
["Morgana"] = "Q",
["Nami"] = "Q",
["Nautilus"] = "Q",
["Nidalee"] = "Q",
["Orianna"] = "R",
["Rengar"] = "E",
["Riven"] = "W",
["Riven"] = "R",
["Sejuani"] = "R",
["Sion"] = "E",
["Shen"] = "E",
--["Shyvana"] = "R",
["Sona"] = "R",
["Soraka"] = "Q",
["Soraka"] = "W",
["Soraka"] = "E",
["Swain"] = "W",
["Taric"] = "R",
["Thresh"] = "Q",
["Varus"] = "R",
["Veigar"] = "E",
["Vi"] = "Q",
["Xerath"] = "E",
["Xerath"] = "R",
["Yasuo"] = "Q",
["Zyra"] = "E",
["Quinn"] = "E",
["Rumble"] = "E",
["Zed"] = "Q",
}
--CLASS EVADER--ICreative's SimpleLib
function _Evader:__init(menu)
assert(menu, "_Evader: menu is invalid!")
self.Callbacks = {}
self.ActiveSpells = {}
self.Settings = menu
if #GetEnemyHeroes() > 0 and self.Settings~=nil then
for idx, enemy in ipairs(GetEnemyHeroes()) do
self.Settings:addParam(enemy.charName.."Q", enemy.charName.." (Q)", SCRIPT_PARAM_ONOFF, false)
self.Settings:addParam(enemy.charName.."W", enemy.charName.." (W)", SCRIPT_PARAM_ONOFF, false)
self.Settings:addParam(enemy.charName.."E", enemy.charName.." (E)", SCRIPT_PARAM_ONOFF, false)
self.Settings:addParam(enemy.charName.."R", enemy.charName.." (R)", SCRIPT_PARAM_ONOFF, false)
end
self.Settings:addParam("Time", "Time Limit to Evade", SCRIPT_PARAM_SLICE, 0.7, 0, 4, 1)
self.Settings:addParam("Humanizer", "% of Humanizer", SCRIPT_PARAM_SLICE, 0, 0, 100)
AddProcessSpellCallback(
function(unit, spell)
if not myHero.dead and unit and spell and spell.name and not unit.isMe and unit.type and unit.team and GetDistanceSqr(myHero, unit) < 2000 * 2000 then
if unit.type == myHero.type and unit.team ~= myHero.team then
local spelltype, casttype = getSpellType(unit, spell.name)
if spelltype == "Q" or spelltype == "W" or spelltype == "E" or spelltype == "R" then
if self.Settings[unit.charName..spelltype] then
DelayAction(
function()
table.insert(self.ActiveSpells, {Time = os.clock() - Latency(), Unit = unit, Spell = spell, SpellType = spelltype})
self:CheckHitChampion(unit, spell, spelltype)
end
,
math.max(spell.windUpTime * self.Settings.Humanizer/100 - 2 * Latency(), 0)
)
end
end
end
end
end
)
AddTickCallback(
function()
if #self.ActiveSpells > 0 then
for i = #self.ActiveSpells, 1, -1 do
local sp = self.ActiveSpells[i]
if os.clock() + Latency() - sp.Time <= self.Settings.Time then
local unit = sp.Unit
local spell = sp.Spell
local spelltype = sp.SpellType
self:CheckHitChampion(unit, spell, spelltype)
else
table.remove(self.ActiveSpells, i)
end
end
end
end
)
end
return self
end
function _Evader:CheckHitChampion(unit, spell, spelltype, champion)
if unit and spell and spelltype and unit.valid then
local hitchampion = false
local champion = champion ~= nil and champion or myHero
if skillData[unit.charName] ~= nil and skillData[unit.charName][spelltype] ~= nil then
local shottype = skillData[unit.charName][spelltype].type
local radius = skillData[unit.charName][spelltype].radius
local maxdistance = skillData[unit.charName][spelltype].maxdistance
if shottype == 0 then hitchampion = spell.target and spell.target.networkID == champion.networkID or false
elseif shottype == 1 then hitchampion = checkhitlinepass(unit, spell.endPos, radius, maxdistance, champion, champion.boundingRadius)
elseif shottype == 2 then hitchampion = checkhitlinepoint(unit, spell.endPos, radius, maxdistance, champion, champion.boundingRadius)
elseif shottype == 3 then hitchampion = checkhitaoe(unit, spell.endPos, radius, maxdistance, champion, champion.boundingRadius)
elseif shottype == 4 then hitchampion = checkhitcone(unit, spell.endPos, radius, maxdistance, champion, champion.boundingRadius)
elseif shottype == 5 then hitchampion = checkhitwall(unit, spell.endPos, radius, maxdistance, champion, champion.boundingRadius)
elseif shottype == 6 then hitchampion = checkhitlinepass(unit, spell.endPos, radius, maxdistance, champion, champion.boundingRadius) or checkhitlinepass(unit, Vector(unit)*2-spell.endPos, radius, maxdistance, champion, champion.boundingRadius)
elseif shottype == 7 then hitchampion = checkhitcone(spell.endPos, unit, radius, maxdistance, champion, champion.boundingRadius)
end
else
if spell.target ~= nil and spell.target.networkID == champion.networkID then hitchampion = true end
if spell.endPos ~= nil then
local pointSegment, pointLine, isOnSegment = VectorPointProjectionOnLineSegment(Vector(unit), Vector(spell.endPos.x, unit.y, spell.endPos.y), champion)
if isOnSegment and GetDistanceSqr(pointSegment, champion) < math.pow(300, 2) then
hitchampion = true
end
end
end
if hitchampion then
self:TriggerCallbacks(unit, spell)
end
end
end
function _Evader:CheckCC()
if #GetEnemyHeroes() > 0 then
for idx, enemy in ipairs(GetEnemyHeroes()) do
for champ, spell in pairs(EVADE_SPELLS) do
if enemy.charName == champ then
self.Settings[enemy.charName..spell] = true
end
end
end
end
return self
end
function _Evader:AddCallback(cb)
table.insert(self.Callbacks, cb)
return self
end
function _Evader:TriggerCallbacks(unit, spell)
for i, callback in ipairs(self.Callbacks) do
callback(unit, spell)
end
end