Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Rekomendowane odpowiedzi

Opublikowano

Dlaczego nie mogę pobrać żadnego skryptu wersji datyasuo? Jak klikam by pobrać to wyświetla mi się ze nie mam PERMYSZYNÓW by pobrać. Tak jestem zalogowany. (10171)

Opublikowano

A czy ten skrypt od jakiegoś czasu nie jest tylko dla vipów? Bo był on dla free, ale niedawno widziałem go na forum dla Vipowców.

2d82fcx.jpg
Opublikowano

A czy ten skrypt od jakiegoś czasu nie jest tylko dla vipów? Bo był on dla free, ale niedawno widziałem go na forum dla Vipowców.

To wersja beta.
Opublikowano

Łap
Free

local VERSION = "5 Beta 4.11"

if myHero.charName ~= "Yasuo" then return end
require "VPrediction"
require "Prodiction"
 
Champions = {
    ["Lux"] = {charName = "Lux", skillshots = {
        ["LuxLightBinding"] =  {name = "Light Binding", spellName = "LuxLightBinding", castDelay = 250, projectileName = "LuxLightBinding_mis.troy", projectileSpeed = 1200, range = 1300, radius = 80, type = "line", fuckedUp = false, blockable = true, danger = 1},
        ["LuxLightStrikeKugel"] = {name = "LuxLightStrikeKugel", spellName = "LuxLightStrikeKugel", castDelay = 250, projectileName = "LuxLightstrike_mis.troy", projectileSpeed = 1400, range = 1100, radius = 275, type = "circular", fuckedUp = false, blockable = true, danger = 0},
        ["LuxMaliceCannon"] =  {name = "Lux Malice Cannon", spellName = "LuxMaliceCannon", castDelay = 1375, projectileName = "Enrageweapon_buf_02.troy", projectileSpeed = math.huge, range = 3500, radius = 190, type = "line", fuckedUp = false, blockable = true, danger = 1},
    }},
    ["Nidalee"] = {charName = "Nidalee", skillshots = {
        ["JavelinToss"] = {name = "Javelin Toss", spellName = "JavelinToss", castDelay = 125, projectileName = "nidalee_javelinToss_mis.troy", projectileSpeed = 1300, range = 1500, radius = 60, type = "line", fuckedUp = false, blockable = true, danger = 1}
    }},
    
    ["Akali"] = {charName = "Akali", skillshots = {
        ["AkaliMota"] = {name = "AkaliMota", spellName = "AkaliMota", castDelay = 125, projectileName = "AkaliMota_mis.troy", projectileSpeed = 1300, range = 1500, radius = 60, type = "line", fuckedUp = false, blockable = true, danger = 1}
    }},
    ["Kennen"] = {charName = "Kennen", skillshots = {
        ["KennenShurikenHurlMissile1"] = {name = "Thundering Shuriken", spellName = "KennenShurikenHurlMissile1", castDelay = 180, projectileName = "kennen_ts_mis.troy", projectileSpeed = 1700, range = 1050, radius = 50, type = "line", fuckedUp = false, blockable = true, danger = 0}--could be 4 if you have 2 marks
    }},
    ["Amumu"] = {charName = "Amumu", skillshots = {
        ["BandageToss"] = {name = "Bandage Toss", spellName = "BandageToss", castDelay = 250, projectileName = "Bandage_beam.troy", projectileSpeed = 2000, range = 1100, radius = 80, type = "line", evasiondanger = true, fuckedUp = false, blockable = true, danger = 1}
    }},
    ["Lee Sin"] = {charName = "LeeSin", skillshots = {
        ["BlindMonkQOne"] = {name = "Sonic Wave", spellName = "BlindMonkQOne", castDelay = 250, projectileName = "blindMonk_Q_mis_01.troy", projectileSpeed = 1800, range = 1100, radius = 60+10, type = "line", fuckedUp = false, blockable = true, danger = 1} --if he hit this he will slow you
    }},
    ["Morgana"] = {charName = "Morgana", skillshots = {
        ["DarkBindingMissile"] = {name = "Dark Binding", spellName = "DarkBindingMissile", castDelay = 250, projectileName = "DarkBinding_mis.troy", projectileSpeed = 1200, range = 1300, radius = 80, type = "line", fuckedUp = false, blockable = true, danger = 1},
        ["TormentedSoil"] = {name = "Tormented Soil", spellName = "TormentedSoil", castDelay = 250, projectileName = "", projectileSpeed = 1200, range = 900, radius = 300, type = "circular", blockable = false, danger = 1},
    }},
    ["Ezreal"] = {charName = "Ezreal", skillshots = {
        ["EzrealMysticShot"]             = {name = "Mystic Shot",      spellName = "EzrealMysticShot",      castDelay = 250, projectileName = "Ezreal_mysticshot_mis.troy",  projectileSpeed = 2000, range = 1200,  radius = 80,  type = "line", fuckedUp = false, blockable = true, danger = 0},
        ["EzrealEssenceFlux"]            = {name = "Essence Flux",     spellName = "EzrealEssenceFlux",     castDelay = 250, projectileName = "Ezreal_essenceflux_mis.troy", projectileSpeed = 1500, range = 1050,  radius = 80,  type = "line", fuckedUp = false, blockable = true, danger = 0},
        ["EzrealMysticShotPulse"] = {name = "Mystic Shot",      spellName = "EzrealMysticShotPulse", castDelay = 250, projectileName = "Ezreal_mysticshot_mis.troy",  projectileSpeed = 2000, range = 1200,  radius = 80,  type = "line", fuckedUp = false, blockable = true, danger = 0},
        ["EzrealTrueshotBarrage"]        = {name = "Trueshot Barrage", spellName = "EzrealTrueshotBarrage", castDelay = 1000, projectileName = "Ezreal_TrueShot_mis.troy",    projectileSpeed = 2000, range = 20000, radius = 160, type = "line", fuckedUp = true, blockable = true, danger = 0},
    }},
    ["Ahri"] = {charName = "Ahri", skillshots = {
        ["AhriOrbofDeception"] = {name = "Orb of Deception", spellName = "AhriOrbofDeception", castDelay = 250, projectileName = "Ahri_Orb_mis.troy", projectileSpeed = 1750, range = 900, radius = 100, type = "line", fuckedUp = false, blockable = true, danger = 0},
        ["AhriSeduce"] = {name = "Charm", spellName = "AhriSeduce", castDelay = 250, projectileName = "Ahri_Charm_mis.troy", projectileSpeed = 1600, range = 1000, radius = 60, type = "line", fuckedUp = false, blockable = true, danger = 1}
    }},
    ["Olaf"] = {charName = "Olaf", skillshots = {
        ["OlafAxeThrow"] = {name = "Undertow", spellName = "OlafAxeThrow", castDelay = 250, projectileName = "olaf_axe_mis.troy", projectileSpeed = 1600, range = 1000, radius = 90, type = "line", fuckedUp = false, blockable = true, danger = 1}
    }},
    ["Leona"] = {charName = "Leona", skillshots = { -- Q+ R+
        ["LeonaZenithBlade"] = {name = "Zenith Blade", spellName = "LeonaZenithBlade", castDelay = 250, projectileName = "Leona_ZenithBlade_mis.troy", projectileSpeed = 2000, range = 900, radius = 100, type = "line", fuckedUp = false, blockable = true, danger = 1},
        ["LeonaSolarFlare"] = {name = "Leona Solar Flare", spellName = "LeonaSolarFlare", castDelay = 250, projectileName = "Leona_SolarFlare_cas.troy", projectileSpeed = 650+350, range = 1200, radius = 300, type = "circular", fuckedUp = false, blockable = true, danger = 1}
    }},
    ["Karthus"] = {charName = "Karthus", skillshots = {
        ["LayWaste"] = {name = "Lay Waste", spellName = "LayWaste", castDelay = 250, projectileName = "LayWaste_point.troy", projectileSpeed = 1750, range = 875, radius = 140, type = "circular", blockable = false, danger = 0}
    }},
    ["Chogath"] = {charName = "Chogath", skillshots = {
        ["Rupture"] = {name = "Rupture", spellName = "Rupture", castDelay = 0, projectileName = "rupture_cas_01_red_team.troy", projectileSpeed = 950, range = 950, radius = 250, type = "circular", blockable = false, danger = 1}
    }},
    ["Blitzcrank"] = {charName = "Blitzcrank", skillshots = {
       ["RocketGrabMissile"] = {name = "Rocket Grab", spellName = "RocketGrabMissile", castDelay = 250, projectileName = "FistGrab_mis.troy", projectileSpeed = 1800, range = 1050, radius = 70, type = "line", fuckedUp = false, blockable = true, danger = 1}
    }},
    ["Anivia"] = {charName = "Anivia", skillshots = {
        ["FlashFrostSpell"] = {name = "Flash Frost", spellName = "FlashFrostSpell", castDelay = 250, projectileName = "cryo_FlashFrost_mis.troy", projectileSpeed = 850, range = 1100, radius = 110, type = "line", fuckedUp = false, blockable = true, danger = 1},
        ["FrostBite"] = {name = "FrostBite", spellName = "FrostBite", castDelay = 250, projectileName = "cryo_FrostBite_mis.troy", projectileSpeed = 1200, range = 1100, radius = 110, type = "line", fuckedUp = false, blockable = true, danger = 1},
    }},
    ["Annie"] = {charName = "Annie", skillshots = {
        ["Disintegrate"] = {name = "Disintegrate", spellName = "Disintegrate", castDelay = 250, projectileName = "Disintegrate.troy", projectileSpeed = 1500, range = 875, radius = 140, fuckedUp = false, blockable = true, danger = 0}
    }},
    ["Katarina"] = {charName = "Katarina", skillshots = {
        ["KatarinaR"] = {name = "Death Lotus", spellName = "KatarinaR", range = 550, fuckedUp = true, blockable = true, danger = 1},
        ["KatarinaQ"] = {name = "Bouncing Blades", spellName = "KatarinaQ", range = 675, fuckedUp = false, blockable = true, danger = 1},
    }},    
    ["Zyra"] = {charName = "Zyra", skillshots = {
      --  ["Deadly Bloom"]   = {name = "Deadly Bloom", spellName = "ZyraQFissure", castDelay = 250, projectileName = "zyra_Q_cas.troy", projectileSpeed = 1400, range = 825, radius = 220, type = "circular", fuckedUp = false, blockable = true, danger = 0},
        ["ZyraGraspingRoots"] = {name = "Grasping Roots", spellName = "ZyraGraspingRoots", castDelay = 250, projectileName = "Zyra_E_sequence_impact.troy", projectileSpeed = 1150, range = 1150, radius = 70,  type = "line", fuckedUp = false, blockable = true, danger = 1},
        ["zyrapassivedeathmanager"] = {name = "Zyra Passive", spellName = "zyrapassivedeathmanager", castDelay = 500, projectileName = "zyra_passive_plant_mis.troy", projectileSpeed = 2000, range = 1474, radius = 60,  type = "line", fuckedUp = false, blockable = true, danger = 0},
    }},
    --[[["Gragas"] = {charName = "Gragas", skillshots = {
        ["Barrel Roll"] = {name = "Barrel Roll", spellName = "GragasBarrelRoll", castDelay = 250, projectileName = "gragas_barrelroll_mis.troy", projectileSpeed = 1000, range = 1115, radius = 180, type = "circular", fuckedUp = false, blockable = true, danger = 0},
        ["Barrel Roll Missile"] = {name = "Barrel Roll Missile", spellName = "GragasBarrelRollMissile", castDelay = 0, projectileName = "gragas_barrelroll_mis.troy", projectileSpeed = 1000, range = 1115, radius = 180, type = "circular", fuckedUp = false, blockable = true, danger = 0},
    }},]]--
    ["Gragas"] = {charName = "Gragas", skillshots = {
        ["GragasExplosiveCask"] = {name = "Gragas Ult", spellName="GragasExplosiveCask", blockable=true, danger = 0, range=1050},
        ["GragasBarrelRoll"] = {name = "GragasBarrelRoll", spellName="GragasBarrelRoll", blockable=true, danger = 0, range=950}
    }},
    ["Nautilus"] = {charName = "Nautilus", skillshots = {
        ["NautilusAnchorDrag"] = {name = "Dredge Line", spellName = "NautilusAnchorDrag", castDelay = 250, projectileName = "Nautilus_Q_mis.troy", projectileSpeed = 2000, range = 1080, radius = 80, type = "line", fuckedUp = false, blockable = true, danger = 1},
    }},
    --[[["Urgot"] = {charName = "Urgot", skillshots = {
        ["Acid Hunter"] = {name = "Acid Hunter", spellName = "UrgotHeatseekingLineMissile", castDelay = 175, projectileName = "UrgotLineMissile_mis.troy", projectileSpeed = 1600, range = 1000, radius = 60, type = "line", fuckedUp = false, blockable = true, danger = 0},
        ["Plasma Grenade"] = {name = "Plasma Grenade", spellName = "UrgotPlasmaGrenade", castDelay = 250, projectileName = "UrgotPlasmaGrenade_mis.troy", projectileSpeed = 1750, range = 900, radius = 250, type = "circular", fuckedUp = false, blockable = true, danger = 1},
    }},]]--
    ["Caitlyn"] = {charName = "Caitlyn", skillshots = {
        ["CaitlynPiltoverPeacemaker"] = {name = "Piltover Peacemaker", spellName = "CaitlynPiltoverPeacemaker", castDelay = 625, projectileName = "caitlyn_Q_mis.troy", projectileSpeed = 2200, range = 1300, radius = 90, type = "line", fuckedUp = false, blockable = true, danger = 0},
        ["CaitlynEntrapment"] = {name = "Caitlyn Entrapment", spellName = "CaitlynEntrapment", castDelay = 150, projectileName = "caitlyn_entrapment_mis.troy", projectileSpeed = 2000, range = 950, radius = 80, type = "line", fuckedUp = false, blockable = true, danger = 1},
        ["CaitlynHeadshotMissile"] = {name = "Ace in the Hole", spellName = "CaitlynHeadshotMissile", range = 3000, fuckedUp = true, blockable = true, danger = 1, projectileName = "caitlyn_ult_mis.troy"},
    }},
    ["Mundo"] = {charName = "DrMundo", skillshots = {
        ["InfectedCleaverMissile"] = {name = "Infected Cleaver", spellName = "InfectedCleaverMissile", castDelay = 250, projectileName = "dr_mundo_infected_cleaver_mis.troy", projectileSpeed = 2000, range = 1050, radius = 75, type = "line", fuckedUp = false, blockable = true, danger = 1},
    }},
    ["Brand"] = {charName = "Brand", skillshots = { -- Q+ W+
        ["BrandBlaze"] = {name = "BrandBlaze", spellName = "BrandBlaze", castDelay = 250, projectileName = "BrandBlaze_mis.troy", projectileSpeed = 1600, range = 1100, radius = 80, type = "line", fuckedUp = false, blockable = true, danger = 1},
        ["BrandWildfire"] = {name = "BrandWildfire", spellName = "BrandWildfire", castDelay = 250, projectileName = "BrandWildfire_mis.troy", projectileSpeed = 1000, range = 1100, radius = 250, type = "circular", fuckedUp = false, blockable = true, danger = 0}
    }},
    ["Corki"] = {charName = "Corki", skillshots = {
        ["MissileBarrage"] = {name = "Missile Barrage", spellName = "MissileBarrage", castDelay = 250, projectileName = "corki_MissleBarrage_mis.troy", projectileSpeed = 2000, range = 1300, radius = 40, type = "line", fuckedUp = false, blockable = true, danger = 0},
    }},
    ["TwistedFate"] = {charName = "TwistedFate", skillshots = {
        ["WildCards"] = {name = "Loaded Dice", spellName = "WildCards", castDelay = 250, projectileName = "Roulette_mis.troy", projectileSpeed = 1000, range = 1450, radius = 40, type = "line", fuckedUp = false, blockable = true, danger = 0},
    }},
    ["Swain"] = {charName = "Swain", skillshots = {
        ["SwainShadowGrasp"] = {name = "Nevermove", spellName = "SwainShadowGrasp", castDelay = 250, projectileName = "swain_shadowGrasp_transform.troy", projectileSpeed = 1000, range = 900, radius = 180, type = "circular", fuckedUp = false, blockable = true, danger = 1},
        ["SwainTorment"] = {name = "SwainTorment", spellName = "SwainTorment", castDelay = 250, projectileName = "swain_torment_mis.troy", projectileSpeed = 1000, range = 900, radius = 180, type = "circular", fuckedUp = false, blockable = true, danger = 1}
    }},
    ["Cassiopeia"] = {charName = "Cassiopeia", skillshots = {
        ["CassiopeiaNoxiousBlast"] = {name = "Noxious Blast", spellName = "CassiopeiaNoxiousBlast", castDelay = 250, projectileName = "CassNoxiousSnakePlane_green.troy", projectileSpeed = 500, range = 850, radius = 130, type = "circular", blockable = false, danger = 0},
    }},
    ["Sivir"] = {charName = "Sivir", skillshots = { --hard to measure speed
        ["SivirQ"] = {name = "Boomerang Blade", spellName = "SivirQ", castDelay = 250, projectileName = "Sivir_Base_Q_mis.troy", projectileSpeed = 1350, range = 1175, radius = 101, type = "line", fuckedUp = false, blockable = true, danger = 0},
    }},
    ["Ashe"] = {charName = "Ashe", skillshots = {
        ["EnchantedCrystalArrow"] = {name = "Enchanted Arrow", spellName = "EnchantedCrystalArrow", castDelay = 250, projectileName = "EnchantedCrystalArrow_mis.troy", projectileSpeed = 1600, range = 25000, radius = 130, type = "line", fuckedUp = true, blockable = true, danger = 1},
        ["Volley"] = {name = "Volley", spellName = "Volley", range = 1200, fuckedUp = false, blockable = true, danger = 1},
    }},
    ["KogMaw"] = {charName = "KogMaw", skillshots = {
        ["KogMawLivingArtillery"] = {name = "Living Artillery", spellName = "KogMawLivingArtillery", castDelay = 250, projectileName = "KogMawLivingArtillery_mis.troy", projectileSpeed = 1050, range = 2200, radius = 225, type = "circular", blockable = false, danger = 0}
    }},
    ["Khazix"] = {charName = "Khazix", skillshots = {
        ["KhazixW"] = {name = "KhazixW", spellName = "KhazixW", castDelay = 250, projectileName = "Khazix_W_mis_enhanced.troy", projectileSpeed = 1700, range = 1025, radius = 70, type = "line", fuckedUp = false, blockable = true, danger = 0},
        --["khazixwlong"] = {name = "khazixwlong", spellName = "khazixwlong", castDelay = 250, projectileName = "Khazix_W_mis_enhanced.troy", projectileSpeed = 1700, range = 1025, radius = 70, type = "line", fuckedUp = false, blockable = true, danger = 0},
    }},
    ["Zed"] = {charName = "Zed", skillshots = {
        ["ZedShuriken"] = {name = "ZedShuriken", spellName = "ZedShuriken", castDelay = 250, projectileName = "Zed_Q_Mis.troy", projectileSpeed = 1700, range = 925, radius = 50, type = "line", fuckedUp = false, blockable = true, danger = 0},
        --["ZedShuriken2"] = {name = "ZedShuriken2", spellName = "ZedShuriken!", castDelay = 250, projectileName = "Zed_Q2_Mis.troy", projectileSpeed = 1700, range = 925, radius = 50, type = "line", fuckedUp = false, blockable = true, danger = 0},
    }},
    ["Leblanc"] = {charName = "Leblanc", skillshots = {
        ["LeblancChaosOrb"] = {name = "Ethereal LeblancChaosOrb", spellName = "LeblancChaosOrb", castDelay = 250, projectileName = "Leblanc_ChaosOrb_mis.troy", projectileSpeed = 1600, range = 960, radius = 70, fuckedUp = false,  blockable = true, danger = 1},
        ["LeblancChaosOrbM"] = {name = "Ethereal LeblancChaosOrbM", spellName = "LeblancChaosOrbM", castDelay = 250, projectileName = "Leblanc_ChaosOrb_mis_ult.troy", projectileSpeed = 1600, range = 960, radius = 70, fuckedUp = false,  blockable = true, danger = 1},
        ["LeblancSoulShackle"] = {name = "Ethereal Chains", spellName = "LeblancSoulShackle", castDelay = 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", castDelay = 250, projectileName = "leBlanc_shackle_mis_ult.troy", projectileSpeed = 1600, range = 960, radius = 70, type = "line", fuckedUp = false,  blockable = true, danger = 1},
        ["LeblancMimic"] = {name = "LeblancMimic", spellName="LeblancMimic", blockable="true", danger = 0, range=650}
    }},
    ["Draven"] = {charName = "Draven", skillshots = {
        ["DravenDoubleShot"] = {name = "Stand Aside", spellName = "DravenDoubleShot", castDelay = 250, projectileName = "Draven_E_mis.troy", projectileSpeed = 1400, range = 1100, radius = 130, type = "line", fuckedUp = false, blockable = true, danger = 1},
        ["DravenRCast"] = {name = "DravenR", spellName = "DravenRCast", castDelay = 500, projectileName = "Draven_R_mis!.troy", projectileSpeed = 2000, range = 25000, radius = 160, type = "line", fuckedUp = false, blockable = true, danger = 0},
    }},
    ["Elise"] = {charName = "Elise", skillshots = {
        ["EliseHumanE"] = {name = "Cocoon", spellName = "EliseHumanE", castDelay = 250, projectileName = "Elise_human_E_mis.troy", projectileSpeed = 1450, range = 1100, radius = 70, type = "line", fuckedUp = false, blockable = true, danger = 1}
    }},
    ["Lulu"] = {charName = "Lulu", skillshots = {
        ["LuluQ"] = {name = "LuluQ", spellName = "LuluQ", castDelay = 250, projectileName = "Lulu_Q_Mis.troy", projectileSpeed = 1450, range = 1000, radius = 50, type = "line", fuckedUp = false, blockable = true, danger = 1}
    }},
    ["Thresh"] = {charName = "Thresh", skillshots = {
        ["ThreshQ"] = {name = "ThreshQ", spellName = "ThreshQ", castDelay = 500, projectileName = "Thresh_Q_whip_beam.troy", projectileSpeed = 1900, range = 1100, radius = 65, type = "line", fuckedUp = false, blockable = true, danger = 1} -- 60 real radius
    }},
    ["Shen"] = {charName = "Shen", skillshots = {
        ["ShenShadowDash"] = {name = "ShadowDash", spellName = "ShenShadowDash", castDelay = 0, projectileName = "shen_shadowDash_mis.troy", projectileSpeed = 3000, range = 575, radius = 50, type = "line", blockable = false, danger = 1}
    }},
    ["Quinn"] = {charName = "Quinn", skillshots = {
        ["QuinnQ"] = {name = "QuinnQ", spellName = "QuinnQ", castDelay = 250, projectileName = "Quinn_Q_missile.troy", projectileSpeed = 1550, range = 1050, radius = 80, type = "line", fuckedUp = false, blockable = true, danger = 0}
    }},
    ["Veigar"] = {charName = "Veigar", skillshots = {
        ["VeigarPrimordialBurst"] = {name = "VeigarPrimordialBurst", spellName="VeigarPrimordialBurst", projectileName = "permission_Shadowbolt_mis.troy", fuckedUp = false, blockable= true, danger = 0, range = 650},
        ["VeigarBalefulStrike"] = {name = "VeigarBalefulStrike", spellName="VeigarBalefulStrike", projectileName = "permission__mana_flare_mis.troy.troy", fuckedUp = false, blockable= true, danger = 0, range=650}
    }},
    --[[["Veigar"] = {charName = "Veigar", skillshots = {
        ["VeigarDarkMatter"] = {name = "VeigarDarkMatter", spellName = "VeigarDarkMatter", castDelay = 250, projectileName = "!", projectileSpeed = 900, range = 900, radius = 225, type = "circular", fuckedUp = false, blockable = true, danger = 0}
    }},
    ]]--
    --[[["Diana"] = {charName = "Diana", skillshots = {
        ["Diana Arc"] = {name = "DianaArc", spellName = "DianaArc", castDelay = 250, projectileName = "Diana_Q_trail.troy", projectileSpeed = 1600, range = 1000, radius = 195, type="circular", fuckedUp = false, blockable = true, danger = 0},
    }},]]--
    --[[["Jayce"] = {charName = "Jayce", skillshots = {
        ["Q1"] = {name = "Q1", spellName = "jayceshockblast!", castDelay = 250, projectileName = "JayceOrbLightning.troy", projectileSpeed = 1450, range = 1050, radius = 70, type = "line", fuckedUp = false, blockable = true, danger = 0},
        ["Q2"] = {name = "Q2", spellName = "JayceShockBlast", castDelay = 250, projectileName = "JayceOrbLightningCharged.troy", projectileSpeed = 2350, range = 1600, radius = 70, type = "line", fuckedUp = false, blockable = true, danger = 0},
    }},]]--
    ["Nami"] = {charName = "Nami", skillshots = {
        ["NamiQ"] = {name = "NamiQ", spellName = "NamiQ", castDelay = 250, projectileName = "Nami_Q_mis.troy", projectileSpeed = 1500, range = 1625, radius = 225, type="circular", fuckedUp = false, blockable = true, danger = 1}
    }},
    ["Fizz"] = {charName = "Fizz", skillshots = {
        ["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},
    }},
    ["Varus"] = {charName = "Varus", skillshots = {
        ["VarusQ"] = {name = "Varus Q Missile", spellName = "VarusQ", castDelay = 0, projectileName = "VarusQ_mis.troy", projectileSpeed = 1900, range = 1600, radius = 70, type = "line", fuckedUp = false, blockable = true, danger = 0},
        ["VarusE"] = {name = "Varus E", spellName = "VarusE", castDelay = 250, projectileName = "VarusEMissileLong.troy", projectileSpeed = 1500, range = 925, radius = 275, type = "circular", fuckedUp = false, blockable = true, danger = 1},
        ["VarusR"] = {name = "VarusR", spellName = "VarusR", castDelay = 250, projectileName = "VarusRMissile.troy", projectileSpeed = 1950, range = 1250, radius = 100, type = "line", fuckedUp = false, blockable = true, danger = 1},
    }},
    ["Karma"] = {charName = "Karma", skillshots = {
        ["KarmaQ"] = {name = "KarmaQ", spellName = "KarmaQ", castDelay = 250, projectileName = "TEMP_KarmaQMis.troy", projectileSpeed = 1700, range = 1050, radius = 90, type = "line", fuckedUp = false, blockable = true, danger = 1},
    }},
    ["Aatrox"] = {charName = "Aatrox", skillshots = {--Radius starts from 150 and scales down, so I recommend putting half of it, because you won't dodge pointblank skillshots.
        ["AatroxE"] = {name = "Blade of Torment", spellName = "AatroxE", castDelay = 250, projectileName = "AatroxBladeofTorment_mis.troy", projectileSpeed = 1200, range = 1075, radius = 75, type = "line", fuckedUp = false, blockable = true, danger = 1},
        ["AatroxQ"] = {name = "AatroxQ", spellName = "AatroxQ", castDelay = 250, projectileName = "AatroxQ.troy", projectileSpeed = 450, range = 650, radius = 145, type = "circular", fuckedUp = false, blockable = true, danger = 1},
   }},
    ["Xerath"] = {charName = "Xerath", skillshots = {
        ["XerathArcanopulse"] =  {name = "Xerath Arcanopulse", spellName = "XerathArcanopulse", castDelay = 1375, projectileName = "Xerath_Beam_cas.troy", projectileSpeed = math.huge, range = 1025, radius = 100, type = "line", fuckedUp = false, blockable = true, danger = 0},
        ["xeratharcanopulseextended"] =  {name = "Xerath Arcanopulse Extended", spellName = "xeratharcanopulseextended", castDelay = 1375, projectileName = "Xerath_Beam_cas.troy", projectileSpeed = math.huge, range = 1625, radius = 100, type = "line", fuckedUp = false, blockable = true, danger = 0},
        ["xeratharcanebarragewrapper"] = {name = "xeratharcanebarragewrapper", spellName = "xeratharcanebarragewrapper", castDelay = 250, projectileName = "Xerath_E_cas_green.troy", projectileSpeed = 300, range = 1100, radius = 265, type = "circular", fuckedUp = false, blockable = true, danger = 0},
        ["xeratharcanebarragewrapperext"] = {name = "xeratharcanebarragewrapperext", spellName = "xeratharcanebarragewrapperext", castDelay = 250, projectileName = "Xerath_E_cas_green.troy", projectileSpeed = 300, range = 1600, radius = 265, type = "circular", fuckedUp = false, blockable = true, danger = 0}
    }},
    ["Lucian"] = {charName = "Lucian", skillshots = {
        ["LucianQ"] =  {name = "LucianQ", spellName = "LucianQ", castDelay = 350, projectileName = "Lucian_Q_laser.troy", projectileSpeed = math.huge, range = 570*2, radius = 65, type = "line", fuckedUp = false, blockable = true, danger = 0},
        ["LucianW"] =  {name = "LucianW", spellName = "LucianW", castDelay = 300, projectileName = "Lucian_W_mis.troy", projectileSpeed = 1600, range = 1000, radius = 80, type = "line", fuckedUp = false, blockable = true, danger = 0},
    }},
    ["Rumble"] = {charName = "Rumble", skillshots = {
        ["RumbleGrenade"] =  {name = "RumbleGrenade", spellName = "RumbleGrenade", castDelay = 250, projectileName = "rumble_taze_mis.troy", projectileSpeed = 2000, range = 950, radius = 90, type = "line", fuckedUp = false, blockable = true, danger = 1},
    }},
    ["Nocturne"] = {charName = "Nocturne", skillshots = {
        ["NocturneDuskbringer"] =  {name = "NocturneDuskbringer", spellName = "NocturneDuskbringer", castDelay = 250, projectileName = "NocturneDuskbringer_mis.troy", projectileSpeed = 1400, range = 1125, radius = 60, type = "line", fuckedUp = false, blockable = true, danger = 0},
    }},
    ["MissFortune"] = {charName = "MissFortune", skillshots = {
        ["MissFortuneScattershot"] =  {name = "Scattershot", spellName = "MissFortuneScattershot", castDelay = 250, projectileName = "", projectileSpeed = 1400, range = 800, radius = 200, type = "circular", blockable = false, danger = 0},
        ["MissFortuneBulletTime"] =  {name = "Bullettime", spellName = "MissFortuneBulletTime", castDelay = 250, projectileName = "", projectileSpeed = 1400, range = 1400, radius = 200, type = "line", fuckedUp = false, blockable = true, danger = 0}
    }},
    ["Orianna"] = {charName = "Orianna", skillshots = {
        --["OrianaIzunaCommand"] =  {name = "OrianaIzunaCommand", spellName = "OrianaIzunaCommand!", castDelay = 250, projectileName = "Oriana_Ghost_mis.troy", projectileSpeed = 1200, range = 2000, radius = 80, type = "line", fuckedUp = false, blockable = true, danger = 0},
    }},
    ["Ziggs"] = {charName = "Ziggs", skillshots = { -- Q changed to line in 1.10
        ["ZiggsQ"] =  {name = "ZiggsQ", spellName = "ZiggsQ", castDelay = 1500, projectileName = "ZiggsQ.troy", projectileSpeed = math.huge, range = 1500, radius = 100, type = "line", fuckedUp = false, blockable = true, danger = 0},
        ["ZiggsW"] =  {name = "ZiggsW", spellName = "ZiggsW", castDelay = 250, projectileName = "ZiggsW_mis.troy", projectileSpeed = math.huge, range = 1500, radius = 100, type = "line", fuckedUp = false, blockable = true, danger = 0},
        ["ZiggsE"] =  {name = "ZiggsE", spellName = "ZiggsE", castDelay = 250, projectileName = "ZiggsEMine.troy", projectileSpeed = math.huge, range = 1500, radius = 100, type = "line", fuckedUp = false, blockable = true, danger = 0},
        ["ZiggsR"] =  {name = "ZiggsR", spellName = "ZiggsR", projectileName = "ZiggsR_Mis_Nuke.troy", range = 1500, fuckedUp = true, blockable = true, danger = 0}
    }},
    ["Galio"] = {charName = "Galio", skillshots = {
        ["GalioResoluteSmite"] =  {name = "GalioResoluteSmite", spellName = "GalioResoluteSmite", castDelay = 250, projectileName = "galio_concussiveBlast_mis.troy", projectileSpeed = 850, range = 2000, radius = 200, type = "circular", fuckedUp = false, blockable = true, danger = 1},
    }},
    ["Yasuo"] = {charName = "Yasuo", skillshots = {
        ["yasuoq3w"] =  {name = "Steel Tempest", spellName = "yasuoq3w", castDelay = 300, projectileName = "Yasuo_Q_wind_mis.troy", projectileSpeed = 1200, range = 900, radius = 375, type = "line", fuckedUp = false, blockable = true, danger = 1},
    }},
    ["Kassadin"] = {charName = "Kassadin", skillshots = {
        ["NullLance"] =  {name = "Null Sphere", spellName = "NullLance", castDelay = 300, projectileName = "Null_Lance_mis.troy", projectileSpeed = 1400, range = 650, radius = 1, type = "line", fuckedUp = false, blockable = true, danger = 1},
    }},
    ["Jinx"] = {charName = "Jinx", skillshots = { -- R speed and delay increased
        ["JinxWMissile"] =  {name = "Zap", spellName = "JinxWMissile", castDelay = 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", castDelay = 600+900, projectileName = "Jinx_R_Mis.troy", projectileSpeed = 2500, range = 20000, radius = 120, type = "line", fuckedUp = false, blockable = true, danger = 0}
    }},
    ["Taric"] = {charName = "Taric", skillshots = {
        ["Dazzle"] = {name = "Dazzle", spellName="Dazzle", blockable=true, danger = 0, range=625},
        }},
    ["FiddleSticks"] = {charName = "FiddleSticks", skillshots = {
        ["FiddlesticksDarkWind"] = {name = "DarkWind", spellName="FiddlesticksDarkWind", blockable=true, danger = 0, range=750},
    }},           
    ["Syndra"] = {charName = "Syndra", skillshots = { -- Q added in 1.10
        ["SyndraQ"] = {name = "Q", spellName = "SyndraQ", castDelay = 250, projectileName = "Syndra_Q_cas.troy", projectileSpeed = 500, range = 800, radius = 175, type = "circular", blockable = false, danger = 0},
        ["SyndraR"] = {name = "SyndraR", spellName="SyndraR", blockable=true, danger = 0, range=750}
    }},
    ["Kayle"] = {charName = "Kayle", skillshots = {
        ["JudicatorReckoning"] = {name = "JudicatorReckoning", spellName="JudicatorReckoning", castDelay = 100, projectileName = "Reckoning_mis.troy", projectileSpeed = 1500, range = 875, fuckedUp = false, blockable=true, danger = 1, range=650},
    }},
    ["Heimerdinger"] = {charName = "Heimerdinger", skillshots = {
        ["HeimerdingerW"] =  {name = "HeimerdingerW", spellName = "HeimerdingerW", castDelay = 100, projectileName = "heimerdinger_hexTech_mis.troy", projectileSpeed = 1200, range = 2000, radius = 80, type = "line", blockable = true, danger = 0},
        ["HeimerdingerE"] = {name = "HeimerdingerE", spellName="HeimerdingerE", blockable=true, danger = 0, range=750}
    }},    
    ["Annie"] = {charName = "Annie", skillshots = {
        ["Disintegrate"] = {name = "Disintegrate", spellName = "Disintegrate", castDelay = 250, projectileName = "Disintegrate.troy", projectileSpeed = 1500, range = 875, radius = 140, fuckedUp = false, blockable = true, danger = 1}
    }},
    ["Janna"] = {charName = "Janna", skillshots = {
        ["HowlingGale"] = {name = "HowlingGale", spellName = "HowlingGale", castDelay = 250, projectileName = "HowlingGale_mis.troy", projectileSpeed = 1200, range = 1500, radius = 140, fuckedUp = false, blockable = true, danger = 1}
    }},
    ["Lissandra"] = {charName = "Lissandra", skillshots = {
        ["LissandraQ"] = {name = "LissandraQ", spellName = "LissandraQ", castDelay = 250, projectileName = "Lissandra_Q_mis.troy", projectileSpeed = 1200, range = 1500, radius = 140, fuckedUp = false, blockable = true, danger = 1},
        ["LissandraE"] = {name = "LissandraE", spellName = "LissandraE", castDelay = 250, projectileName = "Lissandra_E_Missle.troy", projectileSpeed = 850, range = 1500, radius = 140, fuckedUp = false, blockable = true, danger = 1}
    }},
    --[[["Pantheon"] = {charName = "Pantheon", skillshots = {
        ["Pantheon_Throw"] = {name = "Pantheon_Throw", spellName = "Pantheon_Throw", castDelay = 250, projectileName = "pantheon_spear_mis.troy", projectileSpeed = 1500, range = 1500, radius = 140, fuckedUp = false, blockable = true, danger = 1}
    }},
    ]]--
    ["Sejuani"] = {charName = "Sejuani", skillshots = {
        ["SejuaniR"] = {name = "SejuaniR", spellName = "SejuaniR", castDelay = 250, projectileName = "Sejuani_R_mis.troy", projectileSpeed = 1500, range = 1500, radius = 140, fuckedUp = false, blockable = true, danger = 1}
    }},
    ["Ryze"] = {charName = "Ryze", skillshots = {
        ["Overload"] = {name = "Overload", spellName = "Overload", castDelay = 250, projectileName = "Overload_mis.troy", projectileSpeed = 1500, range = 1500, radius = 140, fuckedUp = false, blockable = true, danger = 1},
        ["SpellFlux"] = {name = "SpellFlux", spellName = "SpellFlux", castDelay = 250, projectileName = "SpellFlux_mis.troy", projectileSpeed = 1500, range = 1500, radius = 140, fuckedUp = false, blockable = true, danger = 1}
    }},
    ["Malphite"] = {charName = "Malphite", skillshots = {
        ["SeismicShard"] = {name = "SeismicShard", spellName = "SeismicShard", castDelay = 250, projectileName = "SeismicShard_mis.troy", projectileSpeed = 1500, range = 1500, radius = 140, fuckedUp = false, blockable = true, danger = 1}
    }},
    ["Sona"] = {charName = "Sona", skillshots = {
        ["SonaHymnofValor"] = {name = "SonaHymnofValor", spellName = "SonaHymnofValor", castDelay = 250, projectileName = "SonaHymnofValor_beam.troy", projectileSpeed = 1500, range = 1500, radius = 140, fuckedUp = false, blockable = true, danger = 1},
        ["SonaCrescendo"] = {name = "SonaCrescendo", spellName = "SonaCrescendo", castDelay = 250, projectileName = "SonaCrescendo_mis.troy", projectileSpeed = 1500, range = 1500, radius = 500, fuckedUp = false, blockable = true, danger = 1}
    }},
}
 
local Config
local Minions
local FarmMinions
local qBuffName
local q = {
        [0] = {Range = 475, Speed = 20000, Delay = 0.36, Width=375}, 
        [1] = {Range = 900, Speed = 1200, Delay = 0.36, Width=120}
    }
local qColor
local eRange
local wRange
local rRange
local steelTempest
local JungleMinions
local JungleFarmMinions
local isattacking = 0
local animTime = 0
local IsRecalling = false
local knockedUp = 0
local eStack = 0
local qBuffName = "Yasuo_Q_wind_ready_buff.troy"
local farmSafe = false
local VP
local i
local latestVersion=nil
local updateCheck = false
 
function getDownloadVersion(response)
        latestVersion = response
end
 
function getVersion()
        GetAsyncWebResult("dl.dropboxusercontent.com","/s/r6oql44bue1srp9/version.txt",getDownloadVersion)
end 
 
function update()
    if updateCheck == false then
        local PATH = BOL_PATH.."Scripts\\DatYasuo BETA.lua"
        if latestVersion~=nil and latestVersion ~= VERSION then
            updateCheck = true
            PrintChat("UPDATING DatYasuo - "..SCRIPT_PATH:gsub("/", "\\").."DatYasuo.lua")
            DownloadFile(URL, PATH,function ()
                PrintChat("UPDATED - reload please (F9 twice)")
            end)            
        elseif latestVersion == VERSION then
            updateCheck = true
            PrintChat("Your Version of DatYasuo is up to date")        
        end
    end
end
AddTickCallback(update)
 
function OnLoad()
    getVersion()
    if VIP_USER then
        AdvancedCallback:bind('OnTowerFocus', function(tower, unit) OnTowerFocus(tower,unit) end)
        AdvancedCallback:bind('OnTowerIdle', function(tower) OnTowerIdle(tower) end)
    end
 
PrintChat("<font color='#aaff34'>Dat</font><font color='#44BB77'>Yasuo</font> <font color='#99ff88'>"..VERSION.."</font> <font color='#BBBBBB'> by</font> <font color='#9999ff'>Fuggi</font>")
    Menu()
    Init()
 
    --Config:addParam("feedback", "Feedback",SCRIPT_PARAM_ONOFF,false) -- Thanks to Botirk
end
--[[
    AddTickCallback(function()
        if Config.feedback == true then
            Config.feedback = false
        end
    end)   
]]--
function OnProcessSpell(object,spellProc)
--if(object.charName=="Yasuo") then PrintChat(spellProc.name .. " " .. object.charName) end
    if object.isMe and spellProc.name:lower():find("recall") then
        --PrintChat(spellProc.name)
    end    
 
    if myHero.dead then return end
    if object.isMe and spellProc.name:lower():find("attack") then
        animTime = spellProc.animationTime*0.1
    end 
 
if Config.SMother.autoW then 
if object.team ~= player.team and string.find(spellProc.name, "Basic") == nil then
if Champions[object.charName] ~= nil then
                skillshot = Champions[object.charName].skillshots[spellProc.name]
                if  skillshot ~= nil and skillshot.blockable == true and not skillshot.fuckedUp then
range = skillshot.range
if not spellProc.startPos then
                        spellProc.startPos.x = object.x
                        spellProc.startPos.z = object.z                        
                    end                    
                    if GetDistance(spellProc.startPos) <= range then
if GetDistance(spellProc.endPos) <= wRange then
if WREADY and Config.SMblocks[spellProc.name] then
                                --PrintChat("W TEST")
CastSpell(_W, object.x, object.z)
end
end
end
                end
                if skillshot ~= nil and skillshot.fuckedUp then 
                    if fuckedUpObject == nil then
                        fuckedUpSpell = skillshot 
                        fuckedUpObject = object
                    end
                end
end
end
end
    --[[
    if Config.dodge then
        if object.team ~= player.team and not player.dead and string.find(spellProc.name, "Basic") == nil then
            if Champions[object.charName] ~= nil then
                skillshot = Champions[object.charName].skillshots[spellProc.name]
                if skillshot ~= nil then
                    if skillshot.type == "circular" and GetDistance(spellProc.endPos) <= skillshot.radius then
                        dodge(skillshot)
                    end
                end
            end
        end
    end
    ]]
end
 
function fuckedUpSpells()
    if fuckedUpSpell.spellName == "KatarinaR" and fuckedUpObject.charName == "Katarina" then
        local object = fuckedUpObject
        if GetDistance(fuckedUpObject)-wRange < fuckedUpSpell.range then
            if WREADY and Config.SMblocks[fuckedUpSpell.spellName] then
                fuckedUpSpell = nil
                fuckedUpObject = nil
                CastSpell(_W, object.x, object.z)
            end            
        end 
    elseif fuckedUpParticle ~= nil and GetDistance(fuckedUpParticle) < wRange and (fuckedUpSpell.spellName == "EzrealTrueshotBarrage" or fuckedUpSpell.spellName == "EnchantedCrystalArrow" or fuckedUpSpell.spellName == "ZiggsR" or fuckedUpSpell.spellName == "CaitlynHeadshotMissile") then 
            if WREADY and Config.SMblocks[fuckedUpSpell.spellName] and fuckedUpParticle.x > 0 and fuckedUpParticle.z > 0 then
                fuckedUpSpell = nil
                fuckedUpObject = nil
                object = fuckedUpParticle
                PrintChat("FUP: "..fuckedUpParticle.x .."/"..fuckedUpParticle.z.."   MH:"..myHero.x..""..myHero.z)
                fuckedUpParticle = nil                
                CastSpell(_W, object.x, object.z)
            end 
    end
end
 
function canDodge(skillshot)
    PrintChat("D1")
    if ((myHero.ms + eRange)/skillshot.radius) > (skillshot.castDelay + (skillshot.projectileSpeed/GetDistance(skillshot.startPos, skillshot.endPos))) then 
        return true
    else 
        return false
    end
end
 
function dodge(skillshot)
    if canDodge(skillshot) then
        PrintChat("1")
        local Minion = nil
        Minions:update()
        for index, minion in pairs(FarmMinions.objects) do
            if ValidTarget(minion) then
                if GetDistance(skillshot.endPos, minion)+(eRange/2) > skillshot.radius then
                    PrintChat("2")  
                    Minion = minion 
                end
            end
        end 
        E(_E, Minion)
    end
end
 
function Init()
levelSequence = {1,2,3,1,1 ,4,1,2,1,2 ,4,2,2,3,3 ,4,3,3}
    levelSequence2 = {1,2,3,1,1 ,4,1,3,1,3 ,4,3,3,2,2 ,4,2,2}
    levelSequence3 = {1,3,1,2,1 ,4,1,3,1,3 ,4,3,3,2,2 ,4,2,2}
Youmuu, BilgeWaterCutlass, Hydra, RuinedKing, Omen, Tiamat = nil, nil, nil, nil, nil, nil
YoumuuR, BilgeWaterCutlassR, HydraR, RuinedKingR, OmenR, TiamatR = nil, nil, nil, nil, nil, nil
qBuffName = "Yasuo_Q_wind_ready_buff.troy"
dashed = nil
qColor = 0xAA2244
wRange = 400
eRange = 475
rRange = 1200
if myHero:GetSpellData(SUMMONER_1).name:find("SummonerDot") then 
igniteSpell = SUMMONER_1
elseif myHero:GetSpellData(SUMMONER_2).name:find("SummonerDot") then 
igniteSpell = SUMMONER_2
else 
igniteSpell = nil
end
 
SteelTempest = false
Minions = minionManager(MINION_ENEMY, 1250, player, MINION_SORT_HEALTH_ASC)
FarmMinions = minionManager(MINION_ENEMY, eRange, player, MINION_SORT_HEALTH_ASC)
JungleFarmMinions = minionManager(MINION_JUNGLE, eRange, player, MINION_SORT_HEALTH_ASC)
JungleMinions = minionManager(MINION_JUNGLE, 1250, player, MINION_SORT_HEALTH_ASC)
        ts = TargetSelector(TARGET_NEAR_MOUSE, 1300, DAMAGE_PHYSICAL)   
    ts.name = "Yasuo"
    Config:addTS(ts)
 
    Prod = ProdictManager.GetInstance()
    ProdQ = {
        [0] = nil,
        [1] = nil
    }
 
    ProdQ[0] = Prod:AddProdictionObject(_Q, q[0].Range, q[0].Speed, q[0].Delay, q[0].Width, myHero)
    ProdQ[1] = Prod:AddProdictionObject(_Q, q[1].Range, q[1].Speed, q[1].Delay, q[1].Width, myHero)
    VP = VPrediction()
 
    initDone = true
end
 
function Menu()
Config = scriptConfig("DatYasuo", "yasuo")
    Config:addSubMenu("Harass Options", "SMharass")
    Config:addSubMenu("Farm Options", "SMfarm")
    Config:addSubMenu("SBTW Options", "SMsbtw")
    Config:addSubMenu("Auto Ult Options", "SMult")
    Config:addSubMenu("Other Options", "SMother")
    Config:addSubMenu("Blocks", "SMblocks")
    Config:addSubMenu("Drawing Options", "SMdraw")
 
Config:addParam("farm", "Lane Clear", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("V"))
    Config:addParam("smartfarm", "Last Hit", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("T"))
    Config:addParam("harass", "Harass", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("A"))
Config:addParam("sbtw", "Combo", SCRIPT_PARAM_ONKEYDOWN, false, 32)
Config:addParam("flee", "Flee", SCRIPT_PARAM_ONKEYDOWN, false, 88)
    Config:addParam("prodiction", "On:PROdiction, Off:Vprediction", SCRIPT_PARAM_ONOFF, true)
    Config:addParam("dump", "Dump Config", SCRIPT_PARAM_ONOFF, false)
    --Config:addParam("isPressed", "debug", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("G"))
 
Config.SMharass:addParam("autoQ", "Auto-Q", SCRIPT_PARAM_ONKEYTOGGLE, true, string.byte("S"))
    Config.SMharass:addParam("underTower", "Auto-Q under Tower", SCRIPT_PARAM_ONOFF, true)
    Config.SMharass:addParam("DistanceToQ", "max Distance for 3rd Q",SCRIPT_PARAM_SLICE, 750, 475, 900, 0)
 
    Config.SMfarm:addParam("useOldLC", "Use old Lane Clear", SCRIPT_PARAM_ONOFF, true)
    Config.SMfarm:addParam("towerFarm", "safe Lane Clear (VIP only)", SCRIPT_PARAM_ONOFF, true)    
Config.SMfarm:addParam("useQFarm", "Use Q", SCRIPT_PARAM_ONOFF, true)
Config.SMfarm:addParam("useEFarm", "Use E", SCRIPT_PARAM_ONOFF, true)
    Config.SMfarm:addParam("onlyLHE", "Use E only to last hit", SCRIPT_PARAM_ONOFF, true)
    Config.SMfarm:addParam("useAA", "Autoattack",SCRIPT_PARAM_ONOFF, true)
    Config.SMfarm:addParam("useMove", "Move to Mouse", SCRIPT_PARAM_ONOFF, true)
 
Config.SMsbtw:addParam("useQ", "Use Q", SCRIPT_PARAM_ONOFF, true)
Config.SMsbtw:addParam("useE", "Use E to Damage", SCRIPT_PARAM_ONOFF, true)
    Config.SMsbtw:addParam("DistanceToE", "min Distance for GC E",SCRIPT_PARAM_SLICE, 300, 0, 475, 0)
Config.SMsbtw:addParam("useEGap", "Use E as Gap Closer", SCRIPT_PARAM_ONOFF, true)
Config.SMsbtw:addParam("useR", "Use R", SCRIPT_PARAM_ONOFF, true)
    Config.SMsbtw:addParam("useAA", "Autoattack",SCRIPT_PARAM_ONOFF, true)
    Config.SMsbtw:addParam("useMove", "Move to Mouse", SCRIPT_PARAM_ONOFF, true)
 
    Config.SMult:addParam("autoR", "Auto-R KS", SCRIPT_PARAM_ONOFF, false)
    Config.SMult:addParam("autoRPercent", "Auto-R when at % Health",SCRIPT_PARAM_SLICE, 1, 1, 100, 0)
    Config.SMult:addParam("autoRMin", "Auto-R Many Targets", SCRIPT_PARAM_ONOFF, false)
    Config.SMult:addParam("minRTargets", "Auto-R when # knocked up",SCRIPT_PARAM_SLICE, 1, 1, 5, 0)
 
 
    Config.SMother:addParam("usePackets", "Use Packets", SCRIPT_PARAM_ONOFF, true)
    Config.SMother:addParam("killsteal", "Killsteal", SCRIPT_PARAM_ONOFF, true)
Config.SMother:addParam("autoIg", "Auto Ignite Killable", SCRIPT_PARAM_ONOFF, true)
Config.SMother:addParam("autoW", "Auto-Wall", SCRIPT_PARAM_ONOFF, true)
Config.SMother:addParam("autoLevel", "AutoLevel (R>Q>W>E)", SCRIPT_PARAM_ONOFF, false)
    Config.SMother:addParam("autoLevel2", "AutoLevel (R>Q>E>W) Level 2 W", SCRIPT_PARAM_ONOFF, false)
    Config.SMother:addParam("autoLevel3", "AutoLevel (R>Q>E>W) Level 2 E", SCRIPT_PARAM_ONOFF, true)
    --Config:addParam("dodge", "Auto-Dodge", 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
                        Config.SMblocks:addParam(skillshot.spellName, hero.charName .. " - " .. skillshot.name, SCRIPT_PARAM_ONOFF, true)
                    end
                end
            end
        end
    end
 
    Config.SMdraw:addParam("drawAutoQ","Draw autoQ-Range",SCRIPT_PARAM_ONOFF, true)
Config.SMdraw:addParam("drawQ","Draw Q-Range",SCRIPT_PARAM_ONOFF, true)
Config.SMdraw:addParam("drawTarget","Draw Target",SCRIPT_PARAM_ONOFF, true)
    Config.SMdraw:addParam("drawText","Draw Text",SCRIPT_PARAM_ONOFF, true)
    Config.SMdraw:addParam("drawDash","Draw Dashpositions",SCRIPT_PARAM_ONOFF, true)
 
    Config.SMharass:permaShow("autoQ")
    Config:permaShow("smartfarm")
    Config:permaShow("farm")
    Config:permaShow("flee")
    Config:permaShow("sbtw")
end
 
    AddTickCallback(function()
        if Config.dump == true then
            Config.dump = false
            local file = io.open("c:\\dycfg.txt", "w")
            file:write(VERSION.."\n")
            file:write("autoQ \t"..(Config.SMharass.autoQ and "true" or "false").."\n")
            file:write("underTower \t"..(Config.SMharass.underTower and "true" or "false").."\n")
            file:write("DistanceToQ \t"..(Config.SMharass.DistanceToQ and "true" or "false").."\n\n")
        
            file:write("useOldLC \t"..(Config.SMfarm.useOldLC and "true" or "false").."\n")
            file:write("towerFarm \t"..(Config.SMfarm.towerFarm and "true" or "false").."\n")
            file:write("useQFarm \t"..(Config.SMfarm.useQFarm and "true" or "false").."\n")
            file:write("useEFarm \t"..(Config.SMfarm.useEFarm and "true" or "false").."\n")
            file:write("onlyLHE \t"..(Config.SMfarm.onlyLHE and "true" or "false").."\n\n")
 
            file:write("useQ \t"..(Config.SMsbtw.useQ and "true" or "false").."\n")
            file:write("useE \t"..(Config.SMsbtw.useE and "true" or "false").."\n")
            file:write("DistanceToE \t"..(Config.SMsbtw.DistanceToE and "true" or "false").."\n")
            file:write("useEGap \t"..(Config.SMsbtw.useEGap and "true" or "false").."\n")
            file:write("useR \t"..(Config.SMsbtw.useR and "true" or "false").."\n")
            file:write("useAA \t"..(Config.SMsbtw.useAA and "true" or "false").."\n")
            file:write("useMove \t"..(Config.SMsbtw.useMove and "true" or "false").."\n\n")
 
            file:write("autoR \t"..(Config.SMult.autoR and "true" or "false").."\n")
            file:write("autoRPercent \t"..(Config.SMult.autoRPercent and "true" or "false").."\n")
            file:write("autoRMin \t"..(Config.SMult.autoRMin and "true" or "false").."\n")
            file:write("minRTargets \t"..(Config.SMult.minRTargets and "true" or "false").."\n\n")
        
            file:write("usePackets \t"..(Config.SMother.usePackets and "true" or "false").."\n")
            file:write("killsteal \t"..(Config.SMother.killsteal and "true" or "false").."\n")
            file:write("autoIg \t"..(Config.SMother.autoIg and "true" or "false").."\n")
            file:write("autoW \t"..(Config.SMother.autoW and "true" or "false").."\n")
            file:write("autoLevel \t"..(Config.SMother.autoLevel and "true" or "false").."\n")
            file:write("autoLevel2 \t"..(Config.SMother.autoLevel2 and "true" or "false").."\n")
            file:write("autoLevel3 \t"..(Config.SMother.autoLevel2 and "true" or "false"))
            file:close()
            PrintChat("Dumped config in C:\\dycfg.txt")
        end
    end)   
 
function checkItems()
    Hydra = GetInventorySlotItem(3074)
    RuinedKing = GetInventorySlotItem(3153)
    Omen = GetInventorySlotItem(3143)
    Tiamat = GetInventorySlotItem(3077)
    BilgeWaterCutlass = GetInventorySlotItem(3144)
    Youmuu = GetInventorySlotItem(3142)
    HydraR = (Hydra ~= nil and myHero:CanUseSpell(Hydra))
    RuinedKingR = (RuinedKing ~= nil and myHero:CanUseSpell(RuinedKing))
    OmenR = (Omen ~= nil and myHero:CanUseSpell(Omen))
    TiamatR = (Tiamat ~= nil and myHero:CanUseSpell(Tiamat))
    BilgeWaterCutlassR = (BilgeWaterCutlass ~= nil and myHero:CanUseSpell(BilgeWaterCutlass))
    YoumuuR = (Youmuu ~= nil and myHero:CanUseSpell(Youmuu))
end
 
function calcDmg(unit)
    local eDmg = getEDmg(unit)
    local aa = getDmg("AD", unit, myHero)
    local qDmg = myHero:CalcDamage(unit,(GetSpellData(_Q).level*20)+myHero.totalDamage)
    local bwcDamage = (BilgeWaterCutlass and getDmg("BWC",unit,myHero) or 0)
    local brkDamage = (RuinedKing and getDmg("RUINEDKING",unit,myHero,2) or 0)
    local igniteDamage = (igniteSpell and getDmg("IGNITE",unit,myHero) or 0)
    local rshDamage = (Hydra and aa*0.8 or 0)
    local tmtDamage = (Tiamat and aa*0.8 or 0)
    local totalDamage = eDmg + aa + qDmg + bwcDamage + brkDamage + igniteDamage + rshDamage + tmtDamage
    local sustainedDamage = (eDmg + (2*aa) + (2*qDmg))/2
    local color
    local text
 
    if unit.health < totalDamage then
        color = ARGB(255,255,0,0)
        text = "Fuck him up!"
    elseif unit.health < totalDamage + 1.5*sustainedDamage then 
        color = ARGB(255,225,60,0)
        text = "Go for it!"
    elseif unit.health < totalDamage + 2.5*sustainedDamage then 
        color = ARGB(255,160,80,50)
        text = "Meh..."
    else 
        color = ARGB(255,127,127,127)
        text = "Get Backup"
    end
    return color, text
end
 
local pPos = nil 
 
function OnTick()
    if initDone then
        if fuckedUpSpell ~= nil then fuckedUpSpells() end
 
        if IsRecalling then PrintChat("ASD") end
       --dmgCalc()
        if Config.SMother.autoLevel then 
            autoLevelSetSequence(levelSequence)
        elseif Config.SMother.autoLevel2 then 
            autoLevelSetSequence(levelSequence2)
        elseif Config.SMother.autoLevel3 then 
            autoLevelSetSequence(levelSequence3)
        else
            autoLevelSetSequence({0,0,0,0,0 ,0,0,0,0,0 ,0,0,0,0,0 ,0,0,0})
        end
 
        ts:update();
        Target = ts.target
 
 
        QREADY = (myHero:CanUseSpell(_Q) == READY)
        EREADY = (myHero:CanUseSpell(_E) == READY)
        WREADY = (myHero:CanUseSpell(_W) == READY)
        RREADY = (myHero:CanUseSpell(_R) == READY)
        IREADY = (igniteSpell ~= nil and myHero:CanUseSpell(igniteSpell) == READY)
 
        checkItems()
        
        if RREADY and Config.SMult.autoR then 
            AutoR() 
        end
 
        if RREADY and Config.SMult.autoRMin then 
            minAutoR()
        end
        
        if Config.SMother.autoIg and IREADY then 
            AutoI()
        end
        
        if not SteelTempest then
            i = 0
            qColor = 0xAA1155
        else
            i = 1
            qColor = 0xFF4433
        end
 
        if Config.isPressed then
            PrintChat(myHero.x.."  "..myHero.z)
        end
        if VIP_USER and Config.prodiction and Target ~= nil then            
            local pos = ProdQ:GetPrediction(Target)
            if pos ~= nil then pPos = pos end
        end        
 
        if dashed ~= nil and dashed - os.clock() < 0 then dashed = nil end
                
        if not Config.flee and not Config.sbtw then AutoQ() end
 
        if Config.SMother.killsteal then killSteal() end
 
        if Config.sbtw then 
            SBTW() 
        elseif Config.farm then
            farm()
        elseif Config.flee then
            flee()
        elseif Config.smartfarm then
            smartfarm()
        elseif Config.harass then
            harass()
        end 
 
    end
end
 
local harassDash = false
 
function harass()
    if Target ~= nil then
        Minions:update()
        local distance = eRange
        if toMinion == nil and not goBack then
            for index, minion in pairs(Minions.objects) do
                if ValidTarget(minion) then
                    if toMinion ~= nil then
                        if GetDistance(eEndPos(toMinion), minion) < eRange and GetDistance(minion)< GetDistance(Target) then
                            backMinion = minion
                        end
                    end
                    if toMinion == nil and GetDistance(eEndPos(minion),Target) < q[0].Width then 
                        toMinion = minion 
                    end
                end
            end
        end
        if toMinion ~= nil then
            harassDash = true
            if GetDistance(Target) <= eRange then
                backMinion = toMinion
                toMinion = nil
                E(Target)
            else
                E(toMinion)
            end
        end
        if harassDash and backMinion ~= nil then
            toMinion = nil
            if backMinion ~= nil then 
                goBack = true
            end
            harassDash = false
            Q(Target)
        end
        if toMinion ~= nil and backMinion == nil then
            Q(Target)
        end
 
        if goBack then
            goBack=false
            E(backMinion)
        end
        if toMinion == nil and backMinion == nil then
            MoveToMouse()
        end
    else 
        MoveToMouse()
    end
end
 
function selectMinion()
FarmMinions:update()
JungleFarmMinions:update()
local distance = eRange
for index, minion in pairs(FarmMinions.objects) do
if ValidTarget(minion) then
check = GetDistance(minion)
if check < distance then 
distance = check
farmMinion = minion 
end
end
end
for index, minion in pairs(JungleFarmMinions.objects) do
if ValidTarget(minion) then
check = GetDistance(minion)
if check < distance then 
distance = check
farmMinion = minion 
end
end
end
return farmMinion
end
 
function minionCount(distance)
    local count=0
    local check
    FarmMinions:update()
    JungleFarmMinions:update()
    for index, minion in pairs(FarmMinions.objects) do
        if ValidTarget(minion) then
            check = GetDistance(minion)
            if check < distance then 
                count = count + 1
            end
        end
    end 
    for index, minion in pairs(JungleFarmMinions.objects) do
        if ValidTarget(minion) then
            check = GetDistance(minion)
            if check < distance then 
                count = count + 1
            end
        end
    end 
    return count
end
 
function MoveToMouse()
        local MousePos = Vector(mousePos.x, mousePos.y, mousePos.z)
        local Position = myHero + (Vector(MousePos) - myHero):normalized()*300
        myHero:MoveTo(Position.x, Position.z)
end
 
function getEDmg(minion)      
        return myHero:CalcMagicDamage(minion,((GetSpellData(_E).level*20)+50)*(1+0.25*eStack)+(myHero.ap*0.6))
end
 
function killSteal()
    for i = 1, heroManager.iCount, 1 do
        if ksTarget == nil then
            local damage = 0
            local eTarget = heroManager:getHero(i)
            if ValidTarget(eTarget, eRange) then
                local qDmg = myHero:CalcDamage(eTarget,(GetSpellData(_Q).level*20)+myHero.totalDamage)
                local eDmg = getEDmg(eTarget)
                if QREADY then 
                    damage = qDmg
                end
                if EREADY then 
                    damage = damage + eDmg
                end 
                if damage > eTarget.health then
                    ksTarget = eTarget
                end
            end
        end
    end
    if ksTarget and GetDistance(ksTarget)<eRange then
        if ValidTarget(ksTarget) then
            E(ksTarget)
        end
        if ValidTarget(ksTarget) then
            if dashed ~= nil and GetDistance(ksTarget) <= q[0].Width then
                Q(ksTarget)
            end
        end
    else 
      ksTarget = nil
    end
end
 
function smartfarm() -- BY LittleRedEye
    selectMinion()
    for index, minion in pairs(FarmMinions.objects) do
        if ValidTarget(minion) then
            local qDmg = myHero:CalcDamage(minion,(GetSpellData(_Q).level*20)+myHero.totalDamage)
            if QREADY and GetDistance(minion) <= q.Range and Config.SMfarm.useQFarm then
                if qDmg >= minion.health then 
                    Q(minion, false, true)
                    break
                end
            end
            local eDmg = getEDmg(minion)
            if EREADY and GetDistance(minion) <= eRange and Config.SMfarm.useEFarm then
                if eDmg >= minion.health and not UnderTurret(eEndPos(minion), true) then 
                    E(minion)
                break
                end
            end
            local aDmg = getDmg("AD", minion, myHero)
            if GetDistance(minion) <= (myHero.range + 75) then
                if minion.health < aDmg and isattacking - os.clock() < 0 and Config.SMfarm.useAA then
                    myHero:Attack(minion)
                    isattacking = os.clock() + animTime
                    break
                elseif isattacking - os.clock() < 0 and Config.SMfarm.useMove then
                    MoveToMouse()
                end
            end
        end
        break
    end
    if isattacking - os.clock() < 0 and Config.SMfarm.useMove then MoveToMouse() end
end
 
function dodgeTowerMinion(position, distance)
    FarmMinions:update()
    for index, minion in pairs(FarmMinions.objects) do
        if ValidTarget(minion) and GetDistance(eEndPos(minion), position) > distance then
                return minion
        end
    end 
    return nil    
end
 
function eMinion()
    FarmMinions:update()
    JungleFarmMinions:update()
    local distance = eRange
    for index, minion in pairs(FarmMinions.objects) do
        if ValidTarget(minion) then
            local eDmg = getEDmg(minion)
            if eDmg >= minion.health then 
                return minion
            end
        end
    end 
    for index, minion in pairs(JungleFarmMinions.objects) do
        if ValidTarget(minion) then
            local eDmg = getEDmg(minion)
            if eDmg >= minion.health then 
                return minion
            end
        end
    end 
    return nil
end
 
local towerUnit
local Tower
function OnTowerFocus(tower, unit) 
    if GetDistance(tower) < 775+eRange and not (myHero.team == tower.team) and not unit.isMe then
        towerUnit = unit
    end
    if unit.isMe then 
        Tower = tower
    end
end 
 
function OnTowerIdle(tower) 
    if GetDistance(tower) < 775+eRange and not (myHero.team == tower.team) then
        --towerUnit = nil
    end    
    if towerUnit and towerUnit.dead then
        towerUnit = nil
    end
    Tower = nil
end
 
function farm()
    if Tower and Config.SMfarm.towerFarm then
        getOut = dodgeTowerMinion(Tower, 775)
        if getOut ~= nil then
            E(getOut)
        end
    end
    if not Config.SMfarm.useOldLC then
        eMin = eMinion()
        if eMin ~= nil and Config.SMfarm.useEFarm then
            if Config.SMfarm.towerFarm then
                if (not UnderTurret(eEndPos(eMin), true)) or towerUnit~=nil then
                    E(eMin)
                end
            else
                E(eMin)
            end
        end
    end
if ValidTarget(farmMinion, eRange) then
if QREADY then
if Config.SMfarm.useQFarm and dashed ~= nil and minionCount(q[0].Width) > 0 then 
                        Q(farmMinion, false, true) 
                    elseif Config.SMfarm.useQFarm and dashed == nil then 
                        Q(farmMinion, false, true)
                    end
elseif Config.SMfarm.useEFarm and not Config.SMfarm.onlyLHE and EREADY then --and GetDistance(farmMinion) >= (eRange-q[0].Width)
                    if Config.SMfarm.towerFarm then
                        if (not UnderTurret(eEndPos(farmMinion), true)) or towerUnit~=nil then
                            E(farmMinion)
                        end
                    else
                        E(eMin)
                    end
                elseif not QREADY and EREADY and Config.SMfarm.useEFarm and not Config.SMfarm.onlyLHE then
                        if (not UnderTurret(eEndPos(farmMinion), true)) or towerUnit~=nil then
                            E(farmMinion)
                        end
else
if Config.SMfarm.useQFarm and QREADY then Q(farmMinion, false, true) end
if TiamatR and GetDistance(farmMinion) < 400 then CastSpell(Tiamat) end
if HydraR and GetDistance(farmMinion) < 400 then CastSpell(Hydra) end
if Config.SMfarm.useAA then myHero:Attack(farmMinion) end 
end
else
farmMinion = selectMinion()
if Config.SMfarm.useMove then myHero:MoveTo(mousePos.x, mousePos.z) end
end
end
 
function getNearestMinion(unit)
 
local closestMinion = nil
local nearestDistance = 0
 
Minions:update()
JungleMinions:update()
for index, minion in pairs(Minions.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) <= eRange 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) <= eRange 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, eRange) then
if GetDistance(minion) <= eRange 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 eEndPos(unit)
    local endPos = Point(unit.x-myHero.x, unit.z-myHero.z)
    abs = math.sqrt(endPos.x*endPos.x + endPos.y*endPos.y)
    endPos2 = Point(myHero.x + (eRange*(endPos.x/abs)), myHero.z + (eRange*(endPos.y/abs)))
    return endPos2
end
 
function flee()
mPos = getNearestMinion(mousePos)
if EREADY and mPos then
E(mPos) 
else 
myHero:MoveTo(mousePos.x, mousePos.z) 
end
end
 
function OnCreateObj(obj)
    --if GetDistance(obj)<1304 then PrintChat(""..obj.name) end
if obj and obj.name==Champions["Ezreal"].skillshots["EzrealTrueshotBarrage"].projectileName then 
        fuckedUpParticle = obj 
        fuckedUpSpell = Champions["Ezreal"].skillshots["EzrealTrueshotBarrage"]
    end
    if obj and obj.name==Champions["Ashe"].skillshots["EnchantedCrystalArrow"].projectileName then 
        fuckedUpParticle = obj 
        fuckedUpSpell = Champions["Ashe"].skillshots["EnchantedCrystalArrow"]        
    end
    if obj and obj.name==Champions["Ziggs"].skillshots["ZiggsR"].projectileName then 
        fuckedUpParticle = obj 
        fuckedUpSpell = Champions["Ziggs"].skillshots["ZiggsR"]
    end
    if obj and obj.name==Champions["Caitlyn"].skillshots["CaitlynHeadshotMissile"].projectileName then 
        fuckedUpParticle = obj 
        fuckedUpSpell = Champions["Caitlyn"].skillshots["CaitlynHeadshotMissile"]
    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
end
 
function OnDeleteObj(obj)
    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
end
 
 
function OnUpdateBuff(unit, buff)
    if unit.isMe and buff.name == "yasuodashscalar" then
        dashed = buff.endT - 4.85
        eStack = buff.stack
    end
end
 
function OnGainBuff(unit, buff)
    if unit.isMe and buff.name=="yasuodashscalar" then 
        dashed = buff.endT - 4.85
        eStack = 1
end
end
 
function OnLoseBuff(unit, buff)
    if unit.isMe and buff.name=="yasuodashscalar" then 
        eStack = 0
    end
end
 
 
local dashPosition = {
    [0] = {x = 1229, z=8197, to=true },
    [1] = {x = 3920, z=5969, to=true },
    [2] = {x = 3200, z=6800, to=true },
    [3] = {x = 3528, z=7171, to=true },
    [4] = {x = 3423, z=7714, to=false },
    [5] = {x = 1853, z=8244, to=false },
    [6] = {x = 4060, z=7821, to=true },
    [7] = {x = 6886, z=5661, to=true },
    [8] = {x = 7822, z=2936, to=true },
    [9] = {x = 7962, z=2360, to=false },
    [10] = {x = 10795, z=7613, to=true },
    [11] = {x = 10052, z=8377, to=true },
    [12] = {x = 10495, z=7263, to=true },
    [13] = {x = 12174, z=6236, to=false },
    [14] = {x = 7145, z=8763, to=true },
    [15] = {x = 6121, z=11015, to=true },
    [16] = {x = 7958, z=9463, to=true },
    [17] = {x = 6159, z=11476, to=true },
    [18] = {x = 6095, z=12097, to=false },
    [19] = {x = 7495, z=9185, to=false },
    [20] = {x = 3897, z=7215, to=true },
}
function OnDraw()
    if initDone == true then
        if Config.SMdraw.drawDash then
            for index, dp in pairs(dashPosition) do
                if dp.to==true then
                    DrawCircle(dp.x, 0, dp.z, 75, 0x0000ff)        
                else
                    DrawCircle(dp.x, 0, dp.z, 75, 0x00ff00)        
                end
            end
        end
    if Target ~= nil and Config.SMdraw.drawTarget then
    for i=1,3, .5 do
    DrawCircle(Target.x, Target.y, Target.z, 125+i, 0xFF0000)
    end
    end
    if not myHero.dead then
    if Config.SMdraw.drawQ then
                if SteelTempest then
         DrawCircle(myHero.x, myHero.y, myHero.z, q[1].Range, qColor)
                else
                  DrawCircle(myHero.x, myHero.y, myHero.z, q[0].Range, qColor)                
                end
    end
            if Config.SMdraw.drawAutoQ then
                DrawCircle(myHero.x, myHero.y, myHero.z, Config.SMharass.DistanceToQ, 0x33CC33)
            end
    end
        
        if Config.SMdraw.drawText then
            for i = 1, heroManager.iCount, 1 do
                local eTarget = heroManager:getHero(i)
                if ValidTarget(eTarget) and GetDistance(eTarget) < 20000 then
                    local pos = WorldToScreen(D3DXVECTOR3(eTarget.x, eTarget.y, eTarget.z))
                    local color, text = calcDmg(eTarget)
                    DrawText(tostring(text),22,pos.x-35 ,pos.y +20,color)   
                end
            end
        end
    end
end
 
function SBTW()
if RREADY and Config.SMsbtw.useR then
sbtwR()
end
 
if Target ~= nil then
local TargetDistance = GetDistance(Target)
 
if BilgeWaterCutlassR then CastSpell(BilgeWaterCutlass, Target) end
if YoumuuR then CastSpell(Youmuu) end
if OmenR and TargetDistance < 550 then CastSpell(Omen) end
if RuinedKingR then CastSpell(RuinedKing, Target) end
if TiamatR and TargetDistance < 400 then CastSpell(Tiamat) end
if HydraR and TargetDistance < 400 then CastSpell(Hydra) end
 
if dashed~=nil then
            if GetDistance(Target)<q[0].Width then
    dashed = nil
      Q(Target)
            end
end
 
if EREADY and TargetDistance > eRange and Config.SMsbtw.useEGap then
mPos = getNearestMinion(Target)
if mPos then 
E(mPos) 
end
end
 
if dashed == nil and Config.SMsbtw.useQ then
Q(Target)
end
 
if EREADY and Config.SMsbtw.useE and TargetDistance <= eRange and TargetDistance > Config.SMsbtw.DistanceToE then
E(Target)
end
 
if Config.SMsbtw.useAA then myHero:Attack(Target) end
else 
if Config.SMsbtw.useMove then myHero:MoveTo(mousePos.x, mousePos.z) end
end
end
 
function Low(unit)
if unit.health <= (Config.SMult.autoRPercent/100*unit.maxHealth) then
return true
else
return false
end
end
 
function AutoR()
for i = 1, heroManager.iCount, 1 do
local eTarget = heroManager:getHero(i)
if ValidTarget(eTarget, rRange) and Low(eTarget) then
CastSpell(_R)
end
end
end
 
function minAutoR()
    if Config.SMult.minRTargets <= knockedUp then
        CastSpell(_R)
    end
end
 
function sbtwR()
    if ValidTarget(Target, rRange) then
            CastSpell(_R)
    end
end
 
function Q(unit, autoQ, minion)
    if autoQ == nil then autoQ = false end
    if minion == nil then minion = false end
    local bias = 0
    if QREADY and unit ~= nil then
        if SteelTempest then
            bias = 900 - Config.SMharass.DistanceToQ
        else
            bias = 75
        end
        if GetDistance(unit) <= (q.Range-bias) then
            if not minion then
                if not Config.prodiction then
                    if i == 1 then
                        CastPosition, HitChance,  Position = VP:GetLineCastPosition(unit, q.Delay, q.Width, q.Range, q.Speed, myHero)
                    else
                        CastPosition, HitChance = VP:GetPredictedPos(unit, q.Delay, q.Speed, myHero)
                    end
                else
                    CastPosition = pPos
                    HitChance = 2
                end
            else 
                CastPosition = unit
            end
 
            if Config.SMother.usePackets then
                if autoQ and HitChance >= 2 then
                    Packet("S_CAST", {spellId = _Q, toX=CastPosition.x, toY=CastPosition.z, fromX=CastPosition.x, fromY=CastPosition.z}):send()
                elseif not autoQ then
                    Packet("S_CAST", {spellId = _Q, toX=CastPosition.x, toY=CastPosition.z, fromX=CastPosition.x, fromY=CastPosition.z}):send()
                end
            else
                CastSpell(_Q, CastPosition.x, CastPosition.z) 
            end
        end
    end 
end
 
function E(unit)
    if Config.SMother.usePackets then
        Packet("S_CAST", {spellId = _E, targetNetworkId = unit.networkID}):send()
    else
        CastSpell(_E, unit) 
    end
end
 
function AutoQ()
    if not IsRecalling then
    if Config.SMharass.autoQ then
            if Config.SMharass.underTower then
                    Q(Target, true)
            else
                if not UnderTurret(myHero, true) then
                    Q(Target, true)
                end
            end
    end
    end
end
 
function AutoI()
if IREADY then
for i = 1, heroManager.iCount,1 do
local eTarget = heroManager:getHero(i)
if ValidTarget(eTarget) and GetDistance(eTarget) < 600 and eTarget.health <= (50 + (20 * myHero.level)) then
CastSpell(igniteSpell, eTarget)
end
end
end
end
 
 
-- from PQmailers Yasuo
function OnRecall(hero, channelTimeInMs)
    PrintChat("ASDADS")
        if hero.isMe then
                IsRecalling = true
        end
end
 
function OnAbortRecall(hero)
        if hero.isMe then
                IsRecalling = false
        end        
end
 
function OnFinishRecall(hero)
        if hero.isMe then
                IsRecalling = false
        end

end


Jbc moge jeszcze VIP ci wysłać

<3

Koza Gold
 

Opublikowano

Spoko zaraz ci wyśle i zedytuje posta
Wrzucasz do common i nazywasz VPrediction

local version = "2.32"

local autoupdateenabled = true
local UPDATE_HOST = "bitbucket.org"
local UPDATE_PATH = "/honda7/bol/raw/master/Common/VPrediction.lua"
local UPDATE_FILE_PATH = LIB_PATH.."vPrediction.lua"
local UPDATE_URL = "https://"..UPDATE_HOST..UPDATE_PATH
 
local ServerData
if autoupdateenabled then
GetAsyncWebResult(UPDATE_HOST, UPDATE_PATH, function(d) ServerData = d end)
function update()
if ServerData ~= nil then
local ServerVersion
local send, tmp, sstart = nil, string.find(ServerData, "local version = \"")
if sstart then
send, tmp = string.find(ServerData, "\"", sstart+1)
end
if send then
ServerVersion = string.sub(ServerData, sstart+1, send-1)
end
 
if ServerVersion ~= nil and tonumber(ServerVersion) ~= nil and tonumber(ServerVersion) > tonumber(version) then
DownloadFile(UPDATE_URL.."?nocache"..myHero.charName..os.clock(), UPDATE_FILE_PATH, function () print("<font color=\"#FF0000\"><b>vPrediction:</b> successfully updated. ("..version.." => "..ServerVersion..")</font>") end)     
elseif ServerVersion then
print("<font color=\"#FF0000\"><b>vPrediction:</b> You have got the latest version: <u><b>"..version.."</b></u></font>")
end
ServerData = nil
end
end
AddTickCallback(update)
end
 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
local _FAST, _MEDIUM, _SLOW = 1, 2, 3
class 'VPrediction' --{
function VPrediction:__init()
self.version = tonumber(version)
self.showdevmode = false
self.hitboxes = {['RecItemsCLASSIC'] = 65, ['TeemoMushroom'] = 50.0, ['TestCubeRender'] = 65, ['Xerath'] = 65, ['Kassadin'] = 65, ['Rengar'] = 65, ['Thresh'] = 55.0, ['RecItemsTUTORIAL'] = 65, ['Ziggs'] = 55.0, ['ZyraPassive'] = 20.0, ['ZyraThornPlant'] = 20.0, ['KogMaw'] = 65, ['HeimerTBlue'] = 35.0, ['EliseSpider'] = 65, ['Skarner'] = 80.0, ['ChaosNexus'] = 65, ['Katarina'] = 65, ['Riven'] = 65, ['SightWard'] = 1, ['HeimerTYellow'] = 35.0, ['Ashe'] = 65, ['VisionWard'] = 1, ['TT_NGolem2'] = 80.0, ['ThreshLantern'] = 65, ['RecItemsCLASSICMap10'] = 65, ['RecItemsODIN'] = 65, ['TT_Spiderboss'] = 200.0, ['RecItemsARAM'] = 65, ['OrderNexus'] = 65, ['Soraka'] = 65, ['Jinx'] = 65, ['TestCubeRenderwCollision'] = 65, ['Red_Minion_Wizard'] = 48.0, ['JarvanIV'] = 65, ['Blue_Minion_Wizard'] = 48.0, ['TT_ChaosTurret2'] = 88.4, ['TT_ChaosTurret3'] = 88.4, ['TT_ChaosTurret1'] = 88.4, ['ChaosTurretGiant'] = 88.4, ['Dragon'] = 100.0, ['LuluSnowman'] = 50.0, ['Worm'] = 100.0, ['ChaosTurretWorm'] = 88.4, ['TT_ChaosInhibitor'] = 65, ['ChaosTurretNormal'] = 88.4, ['AncientGolem'] = 100.0, ['ZyraGraspingPlant'] = 20.0, ['HA_AP_OrderTurret3'] = 88.4, ['HA_AP_OrderTurret2'] = 88.4, ['Tryndamere'] = 65, ['OrderTurretNormal2'] = 88.4, ['Singed'] = 65, ['OrderInhibitor'] = 65, ['Diana'] = 65, ['HA_FB_HealthRelic'] = 65, ['TT_OrderInhibitor'] = 65, ['GreatWraith'] = 80.0, ['Yasuo'] = 65, ['OrderTurretDragon'] = 88.4, ['OrderTurretNormal'] = 88.4, ['LizardElder'] = 65.0, ['HA_AP_ChaosTurret'] = 88.4, ['Ahri'] = 65, ['Lulu'] = 65, ['ChaosInhibitor'] = 65, ['HA_AP_ChaosTurret3'] = 88.4, ['HA_AP_ChaosTurret2'] = 88.4, ['ChaosTurretWorm2'] = 88.4, ['TT_OrderTurret1'] = 88.4, ['TT_OrderTurret2'] = 88.4, ['TT_OrderTurret3'] = 88.4, ['LuluFaerie'] = 65, ['HA_AP_OrderTurret'] = 88.4, ['OrderTurretAngel'] = 88.4, ['YellowTrinketUpgrade'] = 1, ['MasterYi'] = 65, ['Lissandra'] = 65, ['ARAMOrderTurretNexus'] = 88.4, ['Draven'] = 65, ['FiddleSticks'] = 65, ['SmallGolem'] = 80.0, ['ARAMOrderTurretFront'] = 88.4, ['ChaosTurretTutorial'] = 88.4, ['NasusUlt'] = 80.0, ['Maokai'] = 80.0, ['Wraith'] = 50.0, ['Wolf'] = 50.0, ['Sivir'] = 65, ['Corki'] = 65, ['Janna'] = 65, ['Nasus'] = 80.0, ['Golem'] = 80.0, ['ARAMChaosTurretFront'] = 88.4, ['ARAMOrderTurretInhib'] = 88.4, ['LeeSin'] = 65, ['HA_AP_ChaosTurretTutorial'] = 88.4, ['GiantWolf'] = 65.0, ['HA_AP_OrderTurretTutorial'] = 88.4, ['YoungLizard'] = 50.0, ['Jax'] = 65, ['LesserWraith'] = 50.0, ['Blitzcrank'] = 80.0, ['brush_D_SR'] = 65, ['brush_E_SR'] = 65, ['brush_F_SR'] = 65, ['brush_C_SR'] = 65, ['brush_A_SR'] = 65, ['brush_B_SR'] = 65, ['ARAMChaosTurretInhib'] = 88.4, ['Shen'] = 65, ['Nocturne'] = 65, ['Sona'] = 65, ['ARAMChaosTurretNexus'] = 88.4, ['YellowTrinket'] = 1, ['OrderTurretTutorial'] = 88.4, ['Caitlyn'] = 65, ['Trundle'] = 65, ['Malphite'] = 80.0, ['Mordekaiser'] = 80.0, ['ZyraSeed'] = 65, ['Vi'] = 50, ['Tutorial_Red_Minion_Wizard'] = 48.0, ['Renekton'] = 80.0, ['Anivia'] = 65, ['Fizz'] = 65, ['Heimerdinger'] = 55.0, ['Evelynn'] = 65, ['Rumble'] = 80.0, ['Leblanc'] = 65, ['Darius'] = 80.0, ['OlafAxe'] = 50.0, ['Viktor'] = 65, ['XinZhao'] = 65, ['Orianna'] = 65, ['Vladimir'] = 65, ['Nidalee'] = 65, ['Tutorial_Red_Minion_Basic'] = 48.0, ['ZedShadow'] = 65, ['Syndra'] = 65, ['Zac'] = 80.0, ['Olaf'] = 65, ['Veigar'] = 55.0, ['Twitch'] = 65, ['Alistar'] = 80.0, ['Akali'] = 65, ['Urgot'] = 80.0, ['Leona'] = 65, ['Talon'] = 65, ['Karma'] = 65, ['Jayce'] = 65, ['Galio'] = 80.0, ['Shaco'] = 65, ['Taric'] = 65, ['TwistedFate'] = 65, ['Varus'] = 65, ['Garen'] = 65, ['Swain'] = 65, ['Vayne'] = 65, ['Fiora'] = 65, ['Quinn'] = 65, ['Kayle'] = 65, ['Blue_Minion_Basic'] = 48.0, ['Brand'] = 65, ['Teemo'] = 55.0, ['Amumu'] = 55.0, ['Annie'] = 55.0, ['Odin_Blue_Minion_caster'] = 48.0, ['Elise'] = 65, ['Nami'] = 65, ['Poppy'] = 55.0, ['AniviaEgg'] = 65, ['Tristana'] = 55.0, ['Graves'] = 65, ['Morgana'] = 65, ['Gragas'] = 80.0, ['MissFortune'] = 65, ['Warwick'] = 65, ['Cassiopeia'] = 65, ['Tutorial_Blue_Minion_Wizard'] = 48.0, ['DrMundo'] = 80.0, ['Volibear'] = 80.0, ['Irelia'] = 65, ['Odin_Red_Minion_Caster'] = 48.0, ['Lucian'] = 65, ['Yorick'] = 80.0, ['RammusPB'] = 65, ['Red_Minion_Basic'] = 48.0, ['Udyr'] = 65, ['MonkeyKing'] = 65, ['Tutorial_Blue_Minion_Basic'] = 48.0, ['Kennen'] = 55.0, ['Nunu'] = 65, ['Ryze'] = 65, ['Zed'] = 65, ['Nautilus'] = 80.0, ['Gangplank'] = 65, ['shopevo'] = 65, ['Lux'] = 65, ['Sejuani'] = 80.0, ['Ezreal'] = 65, ['OdinNeutralGuardian'] = 65, ['Khazix'] = 65, ['Sion'] = 80.0, ['Aatrox'] = 65, ['Hecarim'] = 80.0, ['Pantheon'] = 65, ['Shyvana'] = 50.0, ['Zyra'] = 65, ['Karthus'] = 65, ['Rammus'] = 65, ['Zilean'] = 65, ['Chogath'] = 80.0, ['Malzahar'] = 65, ['YorickRavenousGhoul'] = 1.0, ['YorickSpectralGhoul'] = 1.0, ['JinxMine'] = 65, ['YorickDecayedGhoul'] = 1.0, ['XerathArcaneBarrageLauncher'] = 65, ['Odin_SOG_Order_Crystal'] = 65, ['TestCube'] = 65, ['ShyvanaDragon'] = 80.0, ['FizzBait'] = 65, ['ShopKeeper'] = 65, ['Blue_Minion_MechMelee'] = 65.0, ['OdinQuestBuff'] = 65, ['TT_Buffplat_L'] = 65, ['TT_Buffplat_R'] = 65, ['KogMawDead'] = 65, ['TempMovableChar'] = 48.0, ['Lizard'] = 50.0, ['GolemOdin'] = 80.0, ['OdinOpeningBarrier'] = 65, ['TT_ChaosTurret4'] = 88.4, ['TT_Flytrap_A'] = 65, ['TT_Chains_Order_Periph'] = 65, ['TT_NWolf'] = 65.0, ['ShopMale'] = 65, ['OdinShieldRelic'] = 65, ['TT_Chains_Xaos_Base'] = 65, ['LuluSquill'] = 50.0, ['TT_Shopkeeper'] = 65, ['redDragon'] = 100.0, ['MonkeyKingClone'] = 65, ['Odin_skeleton'] = 65, ['OdinChaosTurretShrine'] = 88.4, ['Cassiopeia_Death'] = 65, ['OdinCenterRelic'] = 48.0, ['Ezreal_cyber_1'] = 65, ['Ezreal_cyber_3'] = 65, ['Ezreal_cyber_2'] = 65, ['OdinRedSuperminion'] = 55.0, ['TT_Speedshrine_Gears'] = 65, ['JarvanIVWall'] = 65, ['DestroyedNexus'] = 65, ['ARAMOrderNexus'] = 65, ['Red_Minion_MechCannon'] = 65.0, ['OdinBlueSuperminion'] = 55.0, ['SyndraOrbs'] = 65, ['LuluKitty'] = 50.0, ['SwainNoBird'] = 65, ['LuluLadybug'] = 50.0, ['CaitlynTrap'] = 65, ['TT_Shroom_A'] = 65, ['ARAMChaosTurretShrine'] = 88.4, ['Odin_Windmill_Propellers'] = 65, ['DestroyedInhibitor'] = 65, ['TT_NWolf2'] = 50.0, ['OdinMinionGraveyardPortal'] = 1.0, ['SwainBeam'] = 65, ['Summoner_Rider_Order'] = 65.0, ['TT_Relic'] = 65, ['odin_lifts_crystal'] = 65, ['OdinOrderTurretShrine'] = 88.4, ['SpellBook1'] = 65, ['Blue_Minion_MechCannon'] = 65.0, ['TT_ChaosInhibitor_D'] = 65, ['Odin_SoG_Chaos'] = 65, ['TrundleWall'] = 65, ['HA_AP_HealthRelic'] = 65, ['OrderTurretShrine'] = 88.4, ['OriannaBall'] = 48.0, ['ChaosTurretShrine'] = 88.4, ['LuluCupcake'] = 50.0, ['HA_AP_ChaosTurretShrine'] = 88.4, ['TT_Chains_Bot_Lane'] = 65, ['TT_NWraith2'] = 50.0, ['TT_Tree_A'] = 65, ['SummonerBeacon'] = 65, ['Odin_Drill'] = 65, ['TT_NGolem'] = 80.0, ['Shop'] = 65, ['AramSpeedShrine'] = 65, ['DestroyedTower'] = 65, ['OriannaNoBall'] = 65, ['Odin_Minecart'] = 65, ['Summoner_Rider_Chaos'] = 65.0, ['OdinSpeedShrine'] = 65, ['TT_Brazier'] = 65, ['TT_SpeedShrine'] = 65, ['odin_lifts_buckets'] = 65, ['OdinRockSaw'] = 65, ['OdinMinionSpawnPortal'] = 1.0, ['SyndraSphere'] = 48.0, ['TT_Nexus_Gears'] = 65, ['Red_Minion_MechMelee'] = 65.0, ['SwainRaven'] = 65, ['crystal_platform'] = 65, ['MaokaiSproutling'] = 48.0, ['Urf'] = 65, ['TestCubeRender10Vision'] = 65, ['MalzaharVoidling'] = 10.0, ['GhostWard'] = 1, ['MonkeyKingFlying'] = 65, ['LuluPig'] = 50.0, ['AniviaIceBlock'] = 65, ['TT_OrderInhibitor_D'] = 65, ['yonkey'] = 65, ['Odin_SoG_Order'] = 65, ['RammusDBC'] = 65, ['FizzShark'] = 65, ['LuluDragon'] = 50.0, ['OdinTestCubeRender'] = 65, ['OdinCrane'] = 65, ['TT_Tree1'] = 65, ['ARAMOrderTurretShrine'] = 88.4, ['TT_Chains_Order_Base'] = 65, ['Odin_Windmill_Gears'] = 65, ['ARAMChaosNexus'] = 65, ['TT_NWraith'] = 50.0, ['TT_OrderTurret4'] = 88.4, ['Odin_SOG_Chaos_Crystal'] = 65, ['TT_SpiderLayer_Web'] = 65, ['OdinQuestIndicator'] = 1.0, ['JarvanIVStandard'] = 65, ['TT_DummyPusher'] = 65, ['OdinClaw'] = 65, ['EliseSpiderling'] = 1.0, ['QuinnValor'] = 65, ['UdyrTigerUlt'] = 65, ['UdyrTurtleUlt'] = 65, ['UdyrUlt'] = 65, ['UdyrPhoenixUlt'] = 65, ['ShacoBox'] = 10, ['HA_AP_Poro'] = 65, ['AnnieTibbers'] = 80.0, ['UdyrPhoenix'] = 65, ['UdyrTurtle'] = 65, ['UdyrTiger'] = 65, ['HA_AP_OrderShrineTurret'] = 88.4, ['HA_AP_OrderTurretRubble'] = 65, ['HA_AP_Chains_Long'] = 65, ['HA_AP_OrderCloth'] = 65, ['HA_AP_PeriphBridge'] = 65, ['HA_AP_BridgeLaneStatue'] = 65, ['HA_AP_ChaosTurretRubble'] = 88.4, ['HA_AP_BannerMidBridge'] = 65, ['HA_AP_PoroSpawner'] = 50.0, ['HA_AP_Cutaway'] = 65, ['HA_AP_Chains'] = 65, ['HA_AP_ShpSouth'] = 65, ['HA_AP_HeroTower'] = 65, ['HA_AP_ShpNorth'] = 65, ['ChaosInhibitor_D'] = 65, ['ZacRebirthBloblet'] = 65, ['OrderInhibitor_D'] = 65, ['Nidalee_Spear'] = 65, ['Nidalee_Cougar'] = 65, ['TT_Buffplat_Chain'] = 65, ['WriggleLantern'] = 1, ['TwistedLizardElder'] = 65.0, ['RabidWolf'] = 65.0, ['HeimerTGreen'] = 50.0, ['HeimerTRed'] = 50.0, ['ViktorFF'] = 65, ['TwistedGolem'] = 80.0, ['TwistedSmallWolf'] = 50.0, ['TwistedGiantWolf'] = 65.0, ['TwistedTinyWraith'] = 50.0, ['TwistedBlueWraith'] = 50.0, ['TwistedYoungLizard'] = 50.0, ['Red_Minion_Melee'] = 48.0, ['Blue_Minion_Melee'] = 48.0, ['Blue_Minion_Healer'] = 48.0, ['Ghast'] = 60.0, ['blueDragon'] = 100.0, ['Red_Minion_MechRange'] = 65.0, ['Test_CubeSphere'] = 65,}
self.pathfindingRadius = {['RecItemsCLASSIC'] = 35, ['TeemoMushroom'] = 31.7931, ['TestCubeRender'] = 1, ['Xerath'] = 35, ['Kassadin'] = 35, ['Rengar'] = 35, ['Thresh'] = 36.000, ['RecItemsTUTORIAL'] = 35, ['Ziggs'] = 30, ['ZyraPassive'] = 8.5, ['ZyraThornPlant'] = 8.5, ['KogMaw'] = 30.0000, ['HeimerTBlue'] = 1, ['EliseSpider'] = 35, ['Skarner'] = 50, ['ChaosNexus'] = 35, ['Katarina'] = 35, ['Riven'] = 35, ['SightWard'] = 5, ['HeimerTYellow'] = 1, ['Ashe'] = 35, ['VisionWard'] = 5, ['TT_NGolem2'] = 24.5747, ['ThreshLantern'] = 45.000, ['RecItemsCLASSICMap10'] = 35, ['RecItemsODIN'] = 35, ['TT_Spiderboss'] = 200, ['RecItemsARAM'] = 35, ['OrderNexus'] = 35, ['Soraka'] = 44.2, ['Jinx'] = 35.000, ['TestCubeRenderwCollision'] = 80, ['Red_Minion_Wizard'] = 35.7437, ['JarvanIV'] = 35, ['Blue_Minion_Wizard'] = 35.7437, ['TT_ChaosTurret2'] = 88.4, ['TT_ChaosTurret3'] = 88.4, ['TT_ChaosTurret1'] = 88.4, ['ChaosTurretGiant'] = 88.4, ['Dragon'] = 35.8736, ['LuluSnowman'] = 31.5208, ['Worm'] = 31.5208, ['ChaosTurretWorm'] = 88.4, ['TT_ChaosInhibitor'] = 35, ['ChaosTurretNormal'] = 88.4, ['AncientGolem'] = 31.5208, ['ZyraGraspingPlant'] = 8.5, ['HA_AP_OrderTurret3'] = 88.4, ['HA_AP_OrderTurret2'] = 88.4, ['Tryndamere'] = 35, ['OrderTurretNormal2'] = 88.4, ['Singed'] = 35, ['OrderInhibitor'] = 35, ['Diana'] = 35, ['HA_FB_HealthRelic'] = 35, ['TT_OrderInhibitor'] = 35, ['GreatWraith'] = 40, ['Yasuo'] = 32.0, ['OrderTurretDragon'] = 88.4, ['OrderTurretNormal'] = 88.4, ['LizardElder'] = 31.5208, ['HA_AP_ChaosTurret'] = 88.4, ['Ahri'] = 35, ['Lulu'] = 30, ['ChaosInhibitor'] = 35, ['HA_AP_ChaosTurret3'] = 88.4, ['HA_AP_ChaosTurret2'] = 88.4, ['ChaosTurretWorm2'] = 88.4, ['TT_OrderTurret1'] = 88.4, ['TT_OrderTurret2'] = 88.4, ['TT_OrderTurret3'] = 88.4, ['LuluFaerie'] = 35, ['HA_AP_OrderTurret'] = 88.4, ['OrderTurretAngel'] = 88.4, ['YellowTrinketUpgrade'] = 5, ['MasterYi'] = 35, ['Lissandra'] = 35.0, ['ARAMOrderTurretNexus'] = 88.4, ['Draven'] = 35, ['FiddleSticks'] = 35, ['SmallGolem'] = 24.5747, ['ARAMOrderTurretFront'] = 88.4, ['ChaosTurretTutorial'] = 88.4, ['NasusUlt'] = 50, ['Maokai'] = 50, ['Wraith'] = 24.5747, ['Wolf'] = 31.5208, ['Sivir'] = 35, ['Corki'] = 35, ['Janna'] = 35, ['Nasus'] = 50, ['Golem'] = 24.5747, ['ARAMChaosTurretFront'] = 88.4, ['ARAMOrderTurretInhib'] = 88.4, ['LeeSin'] = 35, ['HA_AP_ChaosTurretTutorial'] = 88.4, ['GiantWolf'] = 31.5208, ['HA_AP_OrderTurretTutorial'] = 88.4, ['YoungLizard'] = 31.5208, ['Jax'] = 35, ['LesserWraith'] = 31.5208, ['Blitzcrank'] = 50, ['brush_D_SR'] = 35, ['brush_E_SR'] = 35, ['brush_F_SR'] = 35, ['brush_C_SR'] = 35, ['brush_A_SR'] = 35, ['brush_B_SR'] = 35, ['ARAMChaosTurretInhib'] = 88.4, ['Shen'] = 35, ['Nocturne'] = 35, ['Sona'] = 35, ['ARAMChaosTurretNexus'] = 88.4, ['YellowTrinket'] = 5, ['OrderTurretTutorial'] = 88.4, ['Caitlyn'] = 35, ['Trundle'] = 25.7666, ['Malphite'] = 50, ['Mordekaiser'] = 50, ['ZyraSeed'] = 54.4, ['Vi'] = 35, ['Tutorial_Red_Minion_Wizard'] = 35.7437, ['Renekton'] = 50.0000, ['Anivia'] = 35, ['Fizz'] = 30, ['Heimerdinger'] = 30.5444, ['Evelynn'] = 35, ['Rumble'] = 50, ['Leblanc'] = 35, ['Darius'] = 25.7666, ['OlafAxe'] = 1, ['Viktor'] = 35, ['XinZhao'] = 35, ['Orianna'] = 35, ['Vladimir'] = 35, ['Nidalee'] = 35, ['Tutorial_Red_Minion_Basic'] = 35.7437, ['ZedShadow'] = 35, ['Syndra'] = 35, ['Zac'] = 43.0749, ['Olaf'] = 35, ['Veigar'] = 30, ['Twitch'] = 35, ['Alistar'] = 50, ['Akali'] = 35, ['Urgot'] = 50, ['Leona'] = 35, ['Talon'] = 35, ['Karma'] = 35, ['Jayce'] = 35, ['Galio'] = 50, ['Shaco'] = 35, ['Taric'] = 35, ['TwistedFate'] = 35, ['Varus'] = 35, ['Garen'] = 35, ['Swain'] = 35, ['Vayne'] = 35, ['Fiora'] = 35, ['Quinn'] = 35, ['Kayle'] = 35, ['Blue_Minion_Basic'] = 35.7437, ['Brand'] = 35, ['Teemo'] = 30, ['Amumu'] = 30, ['Annie'] = 30, ['Odin_Blue_Minion_caster'] = 35.7437, ['Elise'] = 35, ['Nami'] = 35, ['Poppy'] = 35, ['AniviaEgg'] = 54.4, ['Tristana'] = 30, ['Graves'] = 35, ['Morgana'] = 35, ['Gragas'] = 50, ['MissFortune'] = 35, ['Warwick'] = 35, ['Cassiopeia'] = 35, ['Tutorial_Blue_Minion_Wizard'] = 35.7437, ['DrMundo'] = 50, ['Volibear'] = 50.0000, ['Irelia'] = 35, ['Odin_Red_Minion_Caster'] = 35.7437, ['Lucian'] = 40.68, ['Yorick'] = 50, ['RammusPB'] = 35.0000, ['Red_Minion_Basic'] = 35.7437, ['Udyr'] = 35, ['MonkeyKing'] = 35, ['Tutorial_Blue_Minion_Basic'] = 35.7437, ['Kennen'] = 30, ['Nunu'] = 35, ['Ryze'] = 35, ['Zed'] = 35, ['Nautilus'] = 50, ['Gangplank'] = 35, ['shopevo'] = 35, ['Lux'] = 35, ['Sejuani'] = 50, ['Ezreal'] = 35, ['OdinNeutralGuardian'] = 120.000, ['Khazix'] = 35, ['Sion'] = 50, ['Aatrox'] = 35.0, ['Hecarim'] = 50, ['Pantheon'] = 35, ['Shyvana'] = 35, ['Zyra'] = 35, ['Karthus'] = 35, ['Rammus'] = 35.000, ['Zilean'] = 35, ['Chogath'] = 50, ['Malzahar'] = 35, ['YorickRavenousGhoul'] = 35, ['YorickSpectralGhoul'] = 35, ['JinxMine'] = 35, ['YorickDecayedGhoul'] = 35, ['XerathArcaneBarrageLauncher'] = 1, ['Odin_SOG_Order_Crystal'] = 44.2, ['TestCube'] = 1, ['ShyvanaDragon'] = 50, ['FizzBait'] = 35, ['ShopKeeper'] = 35, ['Blue_Minion_MechMelee'] = 55.5208, ['OdinQuestBuff'] = 1, ['TT_Buffplat_L'] = 35, ['TT_Buffplat_R'] = 35, ['KogMawDead'] = 30.0000, ['TempMovableChar'] = 38.08, ['Lizard'] = 31.5208, ['GolemOdin'] = 24.5747, ['OdinOpeningBarrier'] = 1, ['TT_ChaosTurret4'] = 240, ['TT_Flytrap_A'] = 44.2, ['TT_Chains_Order_Periph'] = 35, ['TT_NWolf'] = 31.5208, ['ShopMale'] = 35, ['OdinShieldRelic'] = 35, ['TT_Chains_Xaos_Base'] = 35, ['LuluSquill'] = 31.5208, ['TT_Shopkeeper'] = 35, ['redDragon'] = 35, ['MonkeyKingClone'] = 35, ['Odin_skeleton'] = 44.2, ['OdinChaosTurretShrine'] = 88.4, ['Cassiopeia_Death'] = 40.8, ['OdinCenterRelic'] = 38.08, ['Ezreal_cyber_1'] = 35, ['Ezreal_cyber_3'] = 35, ['Ezreal_cyber_2'] = 35, ['OdinRedSuperminion'] = 45.5208, ['TT_Speedshrine_Gears'] = 35, ['JarvanIVWall'] = 90, ['DestroyedNexus'] = 35, ['ARAMOrderNexus'] = 35, ['Red_Minion_MechCannon'] = 55.7437, ['OdinBlueSuperminion'] = 45.5208, ['SyndraOrbs'] = 35, ['LuluKitty'] = 31.5208, ['SwainNoBird'] = 35, ['LuluLadybug'] = 31.5208, ['CaitlynTrap'] = 35, ['TT_Shroom_A'] = 44.2, ['ARAMChaosTurretShrine'] = 88.4, ['Odin_Windmill_Propellers'] = 44.2, ['DestroyedInhibitor'] = 35, ['TT_NWolf2'] = 31.5208, ['OdinMinionGraveyardPortal'] = 1, ['SwainBeam'] = 40.8, ['Summoner_Rider_Order'] = 35, ['TT_Relic'] = 35, ['odin_lifts_crystal'] = 44.2, ['OdinOrderTurretShrine'] = 88.4, ['SpellBook1'] = 35.36, ['Blue_Minion_MechCannon'] = 55.7437, ['TT_ChaosInhibitor_D'] = 35, ['Odin_SoG_Chaos'] = 44.2, ['TrundleWall'] = 150, ['HA_AP_HealthRelic'] = 35, ['OrderTurretShrine'] = 88.4, ['OriannaBall'] = 35, ['ChaosTurretShrine'] = 88.4, ['LuluCupcake'] = 31.5208, ['HA_AP_ChaosTurretShrine'] = 240, ['TT_Chains_Bot_Lane'] = 35, ['TT_NWraith2'] = 31.5208, ['TT_Tree_A'] = 44.2, ['SummonerBeacon'] = 13.6, ['Odin_Drill'] = 44.2, ['TT_NGolem'] = 24.5747, ['Shop'] = 35, ['AramSpeedShrine'] = 1, ['DestroyedTower'] = 35, ['OriannaNoBall'] = 35, ['Odin_Minecart'] = 44.2, ['Summoner_Rider_Chaos'] = 35, ['OdinSpeedShrine'] = 1, ['TT_Brazier'] = 35, ['TT_SpeedShrine'] = 1, ['odin_lifts_buckets'] = 44.2, ['OdinRockSaw'] = 44.2, ['OdinMinionSpawnPortal'] = 1, ['SyndraSphere'] = 130.0000, ['TT_Nexus_Gears'] = 35, ['Red_Minion_MechMelee'] = 55.5208, ['SwainRaven'] = 35, ['crystal_platform'] = 35, ['MaokaiSproutling'] = 38.08, ['Urf'] = 35.8736, ['TestCubeRender10Vision'] = 1, ['MalzaharVoidling'] = 20.0, ['GhostWard'] = 5, ['MonkeyKingFlying'] = 35, ['LuluPig'] = 31.5208, ['AniviaIceBlock'] = 100, ['TT_OrderInhibitor_D'] = 35, ['yonkey'] = 35, ['Odin_SoG_Order'] = 44.2, ['RammusDBC'] = 35, ['FizzShark'] = 35, ['LuluDragon'] = 31.5208, ['OdinTestCubeRender'] = 1, ['OdinCrane'] = 35, ['TT_Tree1'] = 44.2, ['ARAMOrderTurretShrine'] = 88.4, ['TT_Chains_Order_Base'] = 35, ['Odin_Windmill_Gears'] = 44.2, ['ARAMChaosNexus'] = 35, ['TT_NWraith'] = 24.5747, ['TT_OrderTurret4'] = 240, ['Odin_SOG_Chaos_Crystal'] = 44.2, ['TT_SpiderLayer_Web'] = 35, ['OdinQuestIndicator'] = 1, ['JarvanIVStandard'] = 13.6, ['TT_DummyPusher'] = 1, ['OdinClaw'] = 35, ['EliseSpiderling'] = 1.0, ['QuinnValor'] = 35, ['UdyrTigerUlt'] = 36.68, ['UdyrTurtleUlt'] = 36.68, ['UdyrUlt'] = 36.68, ['UdyrPhoenixUlt'] = 36.68, ['ShacoBox'] = 1, ['HA_AP_Poro'] = 31.5208, ['AnnieTibbers'] = 50, ['UdyrPhoenix'] = 35, ['UdyrTurtle'] = 35, ['UdyrTiger'] = 35, ['HA_AP_OrderShrineTurret'] = 240, ['HA_AP_OrderTurretRubble'] = 35, ['HA_AP_Chains_Long'] = 35, ['HA_AP_OrderCloth'] = 35, ['HA_AP_PeriphBridge'] = 35, ['HA_AP_BridgeLaneStatue'] = 35, ['HA_AP_ChaosTurretRubble'] = 88.4, ['HA_AP_BannerMidBridge'] = 35, ['HA_AP_PoroSpawner'] = 31.5208, ['HA_AP_Cutaway'] = 35, ['HA_AP_Chains'] = 35, ['HA_AP_ShpSouth'] = 35, ['HA_AP_HeroTower'] = 35, ['HA_AP_ShpNorth'] = 35, ['ChaosInhibitor_D'] = 35, ['ZacRebirthBloblet'] = 54.4, ['OrderInhibitor_D'] = 35, ['Nidalee_Spear'] = 35, ['Nidalee_Cougar'] = 35, ['TT_Buffplat_Chain'] = 35, ['WriggleLantern'] = 5, ['TwistedLizardElder'] = 31.5208, ['RabidWolf'] = 31.5208, ['HeimerTGreen'] = 1, ['HeimerTRed'] = 1, ['ViktorFF'] = 35.8736, ['TwistedGolem'] = 24.5747, ['TwistedSmallWolf'] = 31.5208, ['TwistedGiantWolf'] = 31.5208, ['TwistedTinyWraith'] = 31.5208, ['TwistedBlueWraith'] = 24.5747, ['TwistedYoungLizard'] = 31.5208, ['Red_Minion_Melee'] = 35.7437, ['Blue_Minion_Melee'] = 35.7437, ['Blue_Minion_Healer'] = 35.7437, ['Ghast'] = 24.5747, ['blueDragon'] = 35.8736, ['Red_Minion_MechRange'] = 35.7437, ['Test_CubeSphere'] = 35}
self.projectilespeeds = {["Velkoz"]= 2000,["TeemoMushroom"] = math.huge,["TestCubeRender"] = math.huge ,["Xerath"] = 2000.0000 ,["Kassadin"] = math.huge ,["Rengar"] = math.huge ,["Thresh"] = 1000.0000 ,["Ziggs"] = 1500.0000 ,["ZyraPassive"] = 1500.0000 ,["ZyraThornPlant"] = 1500.0000 ,["KogMaw"] = 1800.0000 ,["HeimerTBlue"] = 1599.3999 ,["EliseSpider"] = 500.0000 ,["Skarner"] = 500.0000 ,["ChaosNexus"] = 500.0000 ,["Katarina"] = 467.0000 ,["Riven"] = 347.79999 ,["SightWard"] = 347.79999 ,["HeimerTYellow"] = 1599.3999 ,["Ashe"] = 2000.0000 ,["VisionWard"] = 2000.0000 ,["TT_NGolem2"] = math.huge ,["ThreshLantern"] = math.huge ,["TT_Spiderboss"] = math.huge ,["OrderNexus"] = math.huge ,["Soraka"] = 1000.0000 ,["Jinx"] = 2750.0000 ,["TestCubeRenderwCollision"] = 2750.0000 ,["Red_Minion_Wizard"] = 650.0000 ,["JarvanIV"] = 20.0000 ,["Blue_Minion_Wizard"] = 650.0000 ,["TT_ChaosTurret2"] = 1200.0000 ,["TT_ChaosTurret3"] = 1200.0000 ,["TT_ChaosTurret1"] = 1200.0000 ,["ChaosTurretGiant"] = 1200.0000 ,["Dragon"] = 1200.0000 ,["LuluSnowman"] = 1200.0000 ,["Worm"] = 1200.0000 ,["ChaosTurretWorm"] = 1200.0000 ,["TT_ChaosInhibitor"] = 1200.0000 ,["ChaosTurretNormal"] = 1200.0000 ,["AncientGolem"] = 500.0000 ,["ZyraGraspingPlant"] = 500.0000 ,["HA_AP_OrderTurret3"] = 1200.0000 ,["HA_AP_OrderTurret2"] = 1200.0000 ,["Tryndamere"] = 347.79999 ,["OrderTurretNormal2"] = 1200.0000 ,["Singed"] = 700.0000 ,["OrderInhibitor"] = 700.0000 ,["Diana"] = 347.79999 ,["HA_FB_HealthRelic"] = 347.79999 ,["TT_OrderInhibitor"] = 347.79999 ,["GreatWraith"] = 750.0000 ,["Yasuo"] = 347.79999 ,["OrderTurretDragon"] = 1200.0000 ,["OrderTurretNormal"] = 1200.0000 ,["LizardElder"] = 500.0000 ,["HA_AP_ChaosTurret"] = 1200.0000 ,["Ahri"] = 1750.0000 ,["Lulu"] = 1450.0000 ,["ChaosInhibitor"] = 1450.0000 ,["HA_AP_ChaosTurret3"] = 1200.0000 ,["HA_AP_ChaosTurret2"] = 1200.0000 ,["ChaosTurretWorm2"] = 1200.0000 ,["TT_OrderTurret1"] = 1200.0000 ,["TT_OrderTurret2"] = 1200.0000 ,["TT_OrderTurret3"] = 1200.0000 ,["LuluFaerie"] = 1200.0000 ,["HA_AP_OrderTurret"] = 1200.0000 ,["OrderTurretAngel"] = 1200.0000 ,["YellowTrinketUpgrade"] = 1200.0000 ,["MasterYi"] = math.huge ,["Lissandra"] = 2000.0000 ,["ARAMOrderTurretNexus"] = 1200.0000 ,["Draven"] = 1700.0000 ,["FiddleSticks"] = 1750.0000 ,["SmallGolem"] = math.huge ,["ARAMOrderTurretFront"] = 1200.0000 ,["ChaosTurretTutorial"] = 1200.0000 ,["NasusUlt"] = 1200.0000 ,["Maokai"] = math.huge ,["Wraith"] = 750.0000 ,["Wolf"] = math.huge ,["Sivir"] = 1750.0000 ,["Corki"] = 2000.0000 ,["Janna"] = 1200.0000 ,["Nasus"] = math.huge ,["Golem"] = math.huge ,["ARAMChaosTurretFront"] = 1200.0000 ,["ARAMOrderTurretInhib"] = 1200.0000 ,["LeeSin"] = math.huge ,["HA_AP_ChaosTurretTutorial"] = 1200.0000 ,["GiantWolf"] = math.huge ,["HA_AP_OrderTurretTutorial"] = 1200.0000 ,["YoungLizard"] = 750.0000 ,["Jax"] = 400.0000 ,["LesserWraith"] = math.huge ,["Blitzcrank"] = math.huge ,["ARAMChaosTurretInhib"] = 1200.0000 ,["Shen"] = 400.0000 ,["Nocturne"] = math.huge ,["Sona"] = 1500.0000 ,["ARAMChaosTurretNexus"] = 1200.0000 ,["YellowTrinket"] = 1200.0000 ,["OrderTurretTutorial"] = 1200.0000 ,["Caitlyn"] = 2500.0000 ,["Trundle"] = 347.79999 ,["Malphite"] = 1000.0000 ,["Mordekaiser"] = math.huge ,["ZyraSeed"] = math.huge ,["Vi"] = 1000.0000 ,["Tutorial_Red_Minion_Wizard"] = 650.0000 ,["Renekton"] = math.huge ,["Anivia"] = 1400.0000 ,["Fizz"] = math.huge ,["Heimerdinger"] = 1500.0000 ,["Evelynn"] = 467.0000 ,["Rumble"] = 347.79999 ,["Leblanc"] = 1700.0000 ,["Darius"] = math.huge ,["OlafAxe"] = math.huge ,["Viktor"] = 2300.0000 ,["XinZhao"] = 20.0000 ,["Orianna"] = 1450.0000 ,["Vladimir"] = 1400.0000 ,["Nidalee"] = 1750.0000 ,["Tutorial_Red_Minion_Basic"] = math.huge ,["ZedShadow"] = 467.0000 ,["Syndra"] = 1800.0000 ,["Zac"] = 1000.0000 ,["Olaf"] = 347.79999 ,["Veigar"] = 1100.0000 ,["Twitch"] = 2500.0000 ,["Alistar"] = math.huge ,["Akali"] = 467.0000 ,["Urgot"] = 1300.0000 ,["Leona"] = 347.79999 ,["Talon"] = math.huge ,["Karma"] = 1500.0000 ,["Jayce"] = 347.79999 ,["Galio"] = 1000.0000 ,["Shaco"] = math.huge ,["Taric"] = math.huge ,["TwistedFate"] = 1500.0000 ,["Varus"] = 2000.0000 ,["Garen"] = 347.79999 ,["Swain"] = 1600.0000 ,["Vayne"] = 2000.0000 ,["Fiora"] = 467.0000 ,["Quinn"] = 2000.0000 ,["Kayle"] = math.huge ,["Blue_Minion_Basic"] = math.huge ,["Brand"] = 2000.0000 ,["Teemo"] = 1300.0000 ,["Amumu"] = 500.0000 ,["Annie"] = 1200.0000 ,["Odin_Blue_Minion_caster"] = 1200.0000 ,["Elise"] = 1600.0000 ,["Nami"] = 1500.0000 ,["Poppy"] = 500.0000 ,["AniviaEgg"] = 500.0000 ,["Tristana"] = 2250.0000 ,["Graves"] = 3000.0000 ,["Morgana"] = 1600.0000 ,["Gragas"] = math.huge ,["MissFortune"] = 2000.0000 ,["Warwick"] = math.huge ,["Cassiopeia"] = 1200.0000 ,["Tutorial_Blue_Minion_Wizard"] = 650.0000 ,["DrMundo"] = math.huge ,["Volibear"] = 467.0000 ,["Irelia"] = 467.0000 ,["Odin_Red_Minion_Caster"] = 650.0000 ,["Lucian"] = 2800.0000 ,["Yorick"] = math.huge ,["RammusPB"] = math.huge ,["Red_Minion_Basic"] = math.huge ,["Udyr"] = 467.0000 ,["MonkeyKing"] = 20.0000 ,["Tutorial_Blue_Minion_Basic"] = math.huge ,["Kennen"] = 1600.0000 ,["Nunu"] = 500.0000 ,["Ryze"] = 2400.0000 ,["Zed"] = 467.0000 ,["Nautilus"] = 1000.0000 ,["Gangplank"] = 1000.0000 ,["Lux"] = 1600.0000 ,["Sejuani"] = 500.0000 ,["Ezreal"] = 2000.0000 ,["OdinNeutralGuardian"] = 1800.0000 ,["Khazix"] = 500.0000 ,["Sion"] = math.huge ,["Aatrox"] = 347.79999 ,["Hecarim"] = 500.0000 ,["Pantheon"] = 20.0000 ,["Shyvana"] = 467.0000 ,["Zyra"] = 1700.0000 ,["Karthus"] = 1200.0000 ,["Rammus"] = math.huge ,["Zilean"] = 1200.0000 ,["Chogath"] = 500.0000 ,["Malzahar"] = 2000.0000 ,["YorickRavenousGhoul"] = 347.79999 ,["YorickSpectralGhoul"] = 347.79999 ,["JinxMine"] = 347.79999 ,["YorickDecayedGhoul"] = 347.79999 ,["XerathArcaneBarrageLauncher"] = 347.79999 ,["Odin_SOG_Order_Crystal"] = 347.79999 ,["TestCube"] = 347.79999 ,["ShyvanaDragon"] = math.huge ,["FizzBait"] = math.huge ,["Blue_Minion_MechMelee"] = math.huge ,["OdinQuestBuff"] = math.huge ,["TT_Buffplat_L"] = math.huge ,["TT_Buffplat_R"] = math.huge ,["KogMawDead"] = math.huge ,["TempMovableChar"] = math.huge ,["Lizard"] = 500.0000 ,["GolemOdin"] = math.huge ,["OdinOpeningBarrier"] = math.huge ,["TT_ChaosTurret4"] = 500.0000 ,["TT_Flytrap_A"] = 500.0000 ,["TT_NWolf"] = math.huge ,["OdinShieldRelic"] = math.huge ,["LuluSquill"] = math.huge ,["redDragon"] = math.huge ,["MonkeyKingClone"] = math.huge ,["Odin_skeleton"] = math.huge ,["OdinChaosTurretShrine"] = 500.0000 ,["Cassiopeia_Death"] = 500.0000 ,["OdinCenterRelic"] = 500.0000 ,["OdinRedSuperminion"] = math.huge ,["JarvanIVWall"] = math.huge ,["ARAMOrderNexus"] = math.huge ,["Red_Minion_MechCannon"] = 1200.0000 ,["OdinBlueSuperminion"] = math.huge ,["SyndraOrbs"] = math.huge ,["LuluKitty"] = math.huge ,["SwainNoBird"] = math.huge ,["LuluLadybug"] = math.huge ,["CaitlynTrap"] = math.huge ,["TT_Shroom_A"] = math.huge ,["ARAMChaosTurretShrine"] = 500.0000 ,["Odin_Windmill_Propellers"] = 500.0000 ,["TT_NWolf2"] = math.huge ,["OdinMinionGraveyardPortal"] = math.huge ,["SwainBeam"] = math.huge ,["Summoner_Rider_Order"] = math.huge ,["TT_Relic"] = math.huge ,["odin_lifts_crystal"] = math.huge ,["OdinOrderTurretShrine"] = 500.0000 ,["SpellBook1"] = 500.0000 ,["Blue_Minion_MechCannon"] = 1200.0000 ,["TT_ChaosInhibitor_D"] = 1200.0000 ,["Odin_SoG_Chaos"] = 1200.0000 ,["TrundleWall"] = 1200.0000 ,["HA_AP_HealthRelic"] = 1200.0000 ,["OrderTurretShrine"] = 500.0000 ,["OriannaBall"] = 500.0000 ,["ChaosTurretShrine"] = 500.0000 ,["LuluCupcake"] = 500.0000 ,["HA_AP_ChaosTurretShrine"] = 500.0000 ,["TT_NWraith2"] = 750.0000 ,["TT_Tree_A"] = 750.0000 ,["SummonerBeacon"] = 750.0000 ,["Odin_Drill"] = 750.0000 ,["TT_NGolem"] = math.huge ,["AramSpeedShrine"] = math.huge ,["OriannaNoBall"] = math.huge ,["Odin_Minecart"] = math.huge ,["Summoner_Rider_Chaos"] = math.huge ,["OdinSpeedShrine"] = math.huge ,["TT_SpeedShrine"] = math.huge ,["odin_lifts_buckets"] = math.huge ,["OdinRockSaw"] = math.huge ,["OdinMinionSpawnPortal"] = math.huge ,["SyndraSphere"] = math.huge ,["Red_Minion_MechMelee"] = math.huge ,["SwainRaven"] = math.huge ,["crystal_platform"] = math.huge ,["MaokaiSproutling"] = math.huge ,["Urf"] = math.huge ,["TestCubeRender10Vision"] = math.huge ,["MalzaharVoidling"] = 500.0000 ,["GhostWard"] = 500.0000 ,["MonkeyKingFlying"] = 500.0000 ,["LuluPig"] = 500.0000 ,["AniviaIceBlock"] = 500.0000 ,["TT_OrderInhibitor_D"] = 500.0000 ,["Odin_SoG_Order"] = 500.0000 ,["RammusDBC"] = 500.0000 ,["FizzShark"] = 500.0000 ,["LuluDragon"] = 500.0000 ,["OdinTestCubeRender"] = 500.0000 ,["TT_Tree1"] = 500.0000 ,["ARAMOrderTurretShrine"] = 500.0000 ,["Odin_Windmill_Gears"] = 500.0000 ,["ARAMChaosNexus"] = 500.0000 ,["TT_NWraith"] = 750.0000 ,["TT_OrderTurret4"] = 500.0000 ,["Odin_SOG_Chaos_Crystal"] = 500.0000 ,["OdinQuestIndicator"] = 500.0000 ,["JarvanIVStandard"] = 500.0000 ,["TT_DummyPusher"] = 500.0000 ,["OdinClaw"] = 500.0000 ,["EliseSpiderling"] = 2000.0000 ,["QuinnValor"] = math.huge ,["UdyrTigerUlt"] = math.huge ,["UdyrTurtleUlt"] = math.huge ,["UdyrUlt"] = math.huge ,["UdyrPhoenixUlt"] = math.huge ,["ShacoBox"] = 1500.0000 ,["HA_AP_Poro"] = 1500.0000 ,["AnnieTibbers"] = math.huge ,["UdyrPhoenix"] = math.huge ,["UdyrTurtle"] = math.huge ,["UdyrTiger"] = math.huge ,["HA_AP_OrderShrineTurret"] = 500.0000 ,["HA_AP_Chains_Long"] = 500.0000 ,["HA_AP_BridgeLaneStatue"] = 500.0000 ,["HA_AP_ChaosTurretRubble"] = 500.0000 ,["HA_AP_PoroSpawner"] = 500.0000 ,["HA_AP_Cutaway"] = 500.0000 ,["HA_AP_Chains"] = 500.0000 ,["ChaosInhibitor_D"] = 500.0000 ,["ZacRebirthBloblet"] = 500.0000 ,["OrderInhibitor_D"] = 500.0000 ,["Nidalee_Spear"] = 500.0000 ,["Nidalee_Cougar"] = 500.0000 ,["TT_Buffplat_Chain"] = 500.0000 ,["WriggleLantern"] = 500.0000 ,["TwistedLizardElder"] = 500.0000 ,["RabidWolf"] = math.huge ,["HeimerTGreen"] = 1599.3999 ,["HeimerTRed"] = 1599.3999 ,["ViktorFF"] = 1599.3999 ,["TwistedGolem"] = math.huge ,["TwistedSmallWolf"] = math.huge ,["TwistedGiantWolf"] = math.huge ,["TwistedTinyWraith"] = 750.0000 ,["TwistedBlueWraith"] = 750.0000 ,["TwistedYoungLizard"] = 750.0000 ,["Red_Minion_Melee"] = math.huge ,["Blue_Minion_Melee"] = math.huge ,["Blue_Minion_Healer"] = 1000.0000 ,["Ghast"] = 750.0000 ,["blueDragon"] = 800.0000 ,["Red_Minion_MechRange"] = 3000.0000,}
self.ActiveAttacks = {}
 
if not _G.VPredictionMenu then
print("<font color=\"#FF0000\"><b>vPrediction <u>"..self.version.."</u></b>: Successfully loaded.</font>")
_G.VPredictionMenu = scriptConfig("VPrediction", "VPrediction")
 
_G.VPredictionMenu:addParam("Mode", "Cast Mode", SCRIPT_PARAM_LIST, 2, {"Fast", "Medium", "Slow" })
 
--[[Collision]]
_G.VPredictionMenu:addSubMenu("Collision", "Collision")
_G.VPredictionMenu.Collision:addParam("Buffer", "Collision buffer", SCRIPT_PARAM_SLICE, 20, 0, 100)
_G.VPredictionMenu.Collision:addParam("Minions", "Normal minions", SCRIPT_PARAM_ONOFF, true)
_G.VPredictionMenu.Collision:addParam("Mobs", "Jungle minions", SCRIPT_PARAM_ONOFF, true)
_G.VPredictionMenu.Collision:addParam("Others", "Others", SCRIPT_PARAM_ONOFF, true)
_G.VPredictionMenu.Collision:addParam("CHealth", "Check if minions are about to die (BETA)", SCRIPT_PARAM_ONOFF, false)
_G.VPredictionMenu.Collision:addParam("info", "-", SCRIPT_PARAM_INFO, "^ Can cause fps drops")
 
_G.VPredictionMenu.Collision:addParam("info2", "-", SCRIPT_PARAM_INFO, "-")
_G.VPredictionMenu.Collision:addParam("UnitPos", "Check collision at the unit pos", SCRIPT_PARAM_ONOFF, true)
_G.VPredictionMenu.Collision:addParam("CastPos", "Check collision at the cast pos", SCRIPT_PARAM_ONOFF, true)
_G.VPredictionMenu.Collision:addParam("PredictPos", "Check collision at the predicted pos", SCRIPT_PARAM_ONOFF, false)
 
if self.showdevmode then
_G.VPredictionMenu:addSubMenu("Developers", "Developers")
_G.VPredictionMenu.Developers:addParam("Debug", "Enable debug", SCRIPT_PARAM_ONOFF, false)
_G.VPredictionMenu.Developers:addParam("SC", "Show collision", SCRIPT_PARAM_ONOFF, false)
end
_G.VPredictionMenu:addParam("Version", "Version", SCRIPT_PARAM_INFO, tostring(self.version))
end
 
--[[use waypoints from the last 10 seconds]]
self.WaypointsTime = 10
 
self.EnemyMinions = minionManager(MINION_ENEMY, 2000, myHero.visionPos, MINION_SORT_HEALTH_ASC)
self.JungleMinions = minionManager(MINION_JUNGLE, 2000, myHero.visionPos, MINION_SORT_HEALTH_ASC)
self.OtherMinions = minionManager(MINION_OTHER, 2000, myHero.visionPos, MINION_SORT_HEALTH_ASC)
 
self.TargetsVisible = {}
self.TargetsWaypoints = {}
self.TargetsImmobile = {}
self.TargetsDashing = {}
self.TargetsSlowed = {}
self.DontShoot = {}
 
 
WayPointManager.AddCallback(function(NetworkID) self:OnNewWayPoints(NetworkID) end)
 
AdvancedCallback:bind("OnGainVision", function(unit) self:OnGainVision(unit) end)
AdvancedCallback:bind("OnGainBuff", function(unit, buff) self:OnGainBuff(unit, buff) end)
AdvancedCallback:bind("OnDash", function(unit, dash) self:OnDash(unit, dash) end)
 
AddProcessSpellCallback(function(unit, spell) self:OnProcessSpell(unit, spell) end)
AddProcessSpellCallback(function(unit, spell) self:CollisionProcessSpell(unit, spell) end)
 
AddTickCallback(function() self:OnTick() end)
AddDrawCallback(function() self:OnDraw() end)
self.BlackList = 
{
{name = "aatroxq", duration = 0.75} --[[4 Dashes, OnDash fails]]
}
 
--[[spells that don't allow movement (durations approx)]]
self.spells = {
{name = "katarinar", duration = 1}, --Katarinas R
{name = "drain", duration = 1}, --Fiddle W
{name = "crowstorm", duration = 1}, --Fiddle R
{name = "consume", duration = 0.5}, --Nunu Q
{name = "absolutezero", duration = 1}, --Nunu R
{name = "rocketgrab", duration = 0.5}, --Blitzcrank Q
{name = "staticfield", duration = 0.5}, --Blitzcrank R
{name = "cassiopeiapetrifyinggaze", duration = 0.5}, --Cassio's R
{name = "ezrealtrueshotbarrage", duration = 1}, --Ezreal's R
{name = "galioidolofdurand", duration = 1}, --Ezreal's R
{name = "gragasdrunkenrage", duration = 1}, --""Gragas W
{name = "luxmalicecannon", duration = 1}, --Lux R
{name = "reapthewhirlwind", duration = 1}, --Jannas R
{name = "jinxw", duration = 0.6}, --jinxW
{name = "jinxr", duration = 0.6}, --jinxR
{name = "missfortunebullettime", duration = 1}, --MissFortuneR
{name = "shenstandunited", duration = 1}, --ShenR
{name = "threshe", duration = 0.4}, --ThreshE
{name = "threshrpenta", duration = 0.75}, --ThreshR
{name = "infiniteduress", duration = 1}, --Warwick R
{name = "meditate", duration = 1} --yi W
}
 
self.blinks = {
{name = "ezrealarcaneshift", range = 475, delay = 0.25, delay2=0.8},--Ezreals E
{name = "deceive", range = 400, delay = 0.25, delay2=0.8}, --Shacos Q
{name = "riftwalk", range = 700, delay = 0.25, delay2=0.8},--KassadinR
{name = "gate", range = 5500, delay = 1.5, delay2=1.5},--Twisted fate R
{name = "katarinae", range = math.huge, delay = 0.25, delay2=0.8},--Katarinas E
{name = "elisespideredescent", range = math.huge, delay = 0.25, delay2=0.8},--Elise E
{name = "elisespidere", range = math.huge, delay = 0.25, delay2=0.8},--Elise insta E
}
 
return self
end
 
--R_WAYPOINT new definition
load(Base64Decode("G0x1YVIAAQQEBAgAGZMNChoKAAAAAAAAAAAAAQMMAAAABgBAAAdAQAAHgEAAS8AAAKUAAABKgACCpUAAAEqAgIKlgAAASoAAgwpAgIEfAIAABwAAAAQDAAAAX0cABAcAAABQYWNrZXQABAsAAABkZWZpbml0aW9uAAQLAAAAUl9XQVlQT0lOVAAEBQAAAGluaXQABAcAAABkZWNvZGUABAcAAABlbmNvZGUAAwAAAAIAAAAJAAAAAAAIEAAAAAsAAQBLAAADgUAAAMFAAAABQQAAQUEAAIFBAADBQQAAZEAAAwpAAIAKQECBCkDAgUsAAAAKQACCHwAAAR8AgAAFAAAABA8AAABhZGRpdGlvbmFsSW5mbwADAAAAAAAAAAAEDwAAAHNlcXVlbmNlTnVtYmVyAAQKAAAAbmV0d29ya0lkAAQKAAAAd2F5UG9pbnRzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAA4AAAAAQAHWwAAAApAQIBLwAAAiwAAAEqAAIGMAEEAnYAAAUqAgIGLAAAASoCAgocAQACNgEEBzMBBAN2AAAGNwAABCoAAgIwAQQCdgAABSoAAhIxAQgCdgAABGIBCARfAAICHAEAAjcBCAZtAAAAXQACAhwBAAI0AQwEKgACAgUAAAMcAQAAHQUMADkFAAhkAgQEXQA2Ax0BDABnAAAEXgAyAjUBAAcxAQgDdgAABGcAAhRdACoAZgMMBF8AJgAcBQAANwUMCCgABgAxBQgAdgQABGIBCAhdAB4AHAUAADgFEAgoAAYAMgUQAHYEAAUoAgYgHAUAADUFAAgoAAYAMQUIAHYEAARABRQJKAIGJB8HAAEwBQQBdgQABGEABAhfAAYAGQUUAB4FFAkABAACHwcQAHYGAAUoAgYIXwAKAF4ABgAcBQAAOAUQCCgABgBeAAIAHAUAADsFFAgoAAYAHAUAADUFAAgoAAYAXAPF/XwAAAR8AgAAYAAAABAQAAABwb3MAAwAAAAAAAPA/BA8AAABhZGRpdGlvbmFsSW5mbwAECgAAAG5ldHdvcmtJZAAECAAAAERlY29kZUYABAoAAAB3YXlQb2ludHMAAwAAAAAAABhABAgAAABEZWNvZGUyAAQUAAAAYWRkaXRpb25hbE5ldHdvcmtJZAAECAAAAERlY29kZTEAAwAAAAAAAAAAAwAAAAAAACxAAwAAAAAAAChABAUAAABzaXplAAMAAAAAAAAkQAMAAAAAAAAIQAMAAAAAAAAUQAQPAAAAc2VxdWVuY2VOdW1iZXIABAgAAABEZWNvZGU0AAQOAAAAd2F5cG9pbnRDb3VudAADAAAAAAAAAEAEBwAAAFBhY2tldAAEEAAAAGRlY29kZVdheVBvaW50cwADAAAAAAAAEEAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAADoAAABMAAAAAQAJRQAAAEZAQACGgEAAh8BAAYcAQQFdgAABCEAAgEYAQABMQMEAx4BBAMfAwQFdQIABRgBAAEwAwgDHgEEAx0DCAdUAgAHOgMIBXUCAAUbAQgCHgEEAh0BCAV0AAQEXwACAhgFAAIwBQwMAAoACnUGAAWKAAADjQP5/RgBAAEwAwwDBQAMAXUCAAUYAQABMgMMAx4BBAMfAwwFdQIABRgBAAExAwQDHgEEAxwDEAcdAxAHHgMQBXUCAAUYAQABMQMEAx4BBAMcAxAHHQMQBx8DEAV1AgAFGAEAATEDBAMeAQQDHAMQBxwDFAceAxAFdQIABRgBAAExAwQDHgEEAxwDEAccAxQHHwMQBXUCAAUYAQABfAAABHwCAABUAAAAEAgAAAHAABAsAAABDTG9MUGFja2V0AAQHAAAAUGFja2V0AAQIAAAAaGVhZGVycwAECwAAAFJfV0FZUE9JTlQABAgAAABFbmNvZGVGAAQHAAAAdmFsdWVzAAQKAAAAbmV0d29ya0lkAAQIAAAARW5jb2RlMgAEDwAAAGFkZGl0aW9uYWxJbmZvAAMAAAAAAAAYQAQHAAAAaXBhaXJzAAQIAAAARW5jb2RlMQADAAAAAAAACEAECAAAAEVuY29kZTQABA8AAABzZXF1ZW5jZU51bWJlcgAECgAAAHdheVBvaW50cwADAAAAAAAA8D8EAgAAAHgABAIAAAB5AAMAAAAAAAAAQAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAA=="))()
--
 
function VPrediction:GetTime()
return GetGameTimer()--os.clock()
end
 
--[[Track when we lose or gain vision over an enemy]]
function VPrediction:OnGainVision(unit)
if unit.type == myHero.type then
self.TargetsVisible[unit.networkID] = self:GetTime()
end
end
 
--[[Track when we lose or gain vision over an enemy]]
function VPrediction:OnLoseVision(unit)
if unit.type == myHero.type then
self.TargetsVisible[unit.networkID] = math.huge
end
end
 
function VPrediction:OnGainBuff(unit, buff)
if unit.type == myHero.type and (buff.type == BUFF_STUN or buff.type == BUFF_ROOT or buff.type == BUFF_KNOCKUP or buff.type == BUFF_SUPPRESS) then
self.TargetsImmobile[unit.networkID] = self:GetTime() + buff.duration
elseif unit.type == myHero.type and (buff.type == BUFF_SLOW or buff.type == BUFF_CHARM or buff.type == BUFF_FEAR or buff.type == BUFF_TAUNT) then
self.TargetsSlowed[unit.networkID] = self:GetTime() + buff.duration
end
end
 
function VPrediction:OnDash(unit, dash)
if unit.type == myHero.type then
dash.endPos = dash.target and dash.target or dash.endPos
dash.startT = self:GetTime()
dash.endT = self:GetTime() + dash.duration
self.TargetsDashing[unit.networkID] = dash
end
end
 
function VPrediction:OnProcessSpell(unit, spell)
if unit and unit.type == myHero.type then
for i, s in ipairs(self.spells) do
if spell.name:lower() == s.name then
self.TargetsImmobile[unit.networkID] = self:GetTime() + s.duration
end
end
 
for i, s in ipairs(self.blinks) do
local LandingPos = GetDistance(unit.visionPos, Vector(spell.endPos)) < s.range and Vector(spell.endPos) or Vector(unit.visionPos) + s.range * (Vector(spell.endPos) - Vector(unit.visionPos)):normalized()
if spell.name:lower() == s.name and not IsWall(D3DXVECTOR3(spell.endPos.x, spell.endPos.y, spell.endPos.z)) then
self.TargetsDashing[unit.networkID] = {isblink = true, duration = s.delay, endT = self:GetTime() + s.delay, endT2 = self:GetTime() + s.delay2, startPos = Vector(unit.visionPos), endPos = LandingPos}
end
end
 
for i, s in ipairs(self.BlackList) do
if spell.name:lower() == s.name then
self.DontShoot[unit.networkID] = self:GetTime() + s.duration
end
end
end
end
 
function VPrediction:OnNewWayPoints(NetworkID)
local object = objManager:GetObjectByNetworkId(NetworkID)
if object and object.valid and object.networkID and object.type == myHero.type then
if self.TargetsWaypoints[NetworkID] == nil then
self.TargetsWaypoints[NetworkID] = {}
end
local WaypointsToAdd = WayPointManager:GetWayPoints(object)
if WaypointsToAdd and #WaypointsToAdd >= 1 then
--[[save only the last waypoint (where the player clicked)]]
table.insert(self.TargetsWaypoints[NetworkID], {unitpos = Vector(object.visionPos) , waypoint = WaypointsToAdd[#WaypointsToAdd], time = self:GetTime(), n = #WaypointsToAdd})
end
end
end
 
function VPrediction:IsImmobile(unit, delay, radius, speed, from)
if self.TargetsImmobile[unit.networkID] then
local ExtraDelay = speed == math.huge and  0 or (GetDistance(from, unit) / speed)
if (self.TargetsImmobile[unit.networkID] + (radius / unit.ms)) > (self:GetTime() + delay + ExtraDelay) then
return true, unit
end
end
return false, unit.visionPos
end
 
function VPrediction:isSlowed(unit, delay, speed, from)
if self.TargetsSlowed[unit.networkID] then
if self.TargetsSlowed[unit.networkID] > (self:GetTime() + delay + GetDistance(unit, from) / speed) then
return true
end
end
return false
end
 
function VPrediction:IsDashing(unit, delay, radius, speed, from)
local TargetDashing = false
local CanHit = false
local Position
 
if self.TargetsDashing[unit.networkID] then
local dash = self.TargetsDashing[unit.networkID]
if dash.endT >= self:GetTime() then
TargetDashing = true
if dash.isblink then
if (dash.endT - self:GetTime()) <= (delay + GetDistance(from, dash.endPos)/speed) then
Position = Vector(dash.endPos.x, 0, dash.endPos.z)
CanHit = (unit.ms * (delay + GetDistance(from, dash.endPos)/speed - (dash.endT2 - self:GetTime()))) < radius
end
 
if ((dash.endT - self:GetTime()) >= (delay + GetDistance(from, dash.startPos)/speed)) and not CanHit then
Position = Vector(dash.startPos.x, 0, dash.startPos.z)
CanHit = true
end
 
else
local t1, p1, t2, p2, dist = VectorMovementCollision(dash.startPos, dash.endPos, dash.speed, from, speed, (self:GetTime() - dash.startT) + delay)
t1, t2 = (t1 and 0 <= t1 and t1 <= (dash.endT - self:GetTime() - delay)) and t1 or nil, (t2 and 0 <= t2 and t2 <=  (dash.endT - self:GetTime() - delay)) and t2 or nil 
local t = t1 and t2 and math.min(t1,t2) or t1 or t2
if t then
Position = t==t1 and Vector(p1.x, 0, p1.y) or Vector(p2.x, 0, p2.y)
CanHit = true
else
Position = Vector(dash.endPos.x, 0, dash.endPos.z)
CanHit = (unit.ms * (delay + GetDistance(from, Position)/speed - (dash.endT - self:GetTime()))) < radius
end
end
end
end
return TargetDashing, CanHit, Position
end
 
function VPrediction:GetWaypoints(NetworkID, from, to)
local Result = {}
to = to and to or self:GetTime()
if self.TargetsWaypoints[NetworkID] then
for i, waypoint in ipairs(self.TargetsWaypoints[NetworkID]) do
if from <= waypoint.time  and to >= waypoint.time then
table.insert(Result, waypoint)
end
end
end
return Result, #Result
end
 
function VPrediction:CountWaypoints(NetworkID, from, to)
local R, N = self:GetWaypoints(NetworkID, from, to)
return N
end
 
function VPrediction:GetWaypointsLength(Waypoints)
local result = 0
for i = 1, #Waypoints -1 do
result = result + GetDistance(Waypoints, Waypoints[i + 1])
end
return result
end
 
function VPrediction:CutWaypoints(Waypoints, distance)
local result = {}
local remaining = distance
if distance > 0 then
for i = 1, #Waypoints -1 do
local A, B = Waypoints, Waypoints[i + 1]
local dist = GetDistance(A, B)
if dist >= remaining then
result[1] = Vector(A) + remaining * (Vector( B) - Vector(A)):normalized()
 
for j = i + 1, #Waypoints do
result[j - i + 1] = Waypoints[j]
end
remaining = 0
break
else
remaining = remaining - dist
end
end
else
local A, B = Waypoints[1], Waypoints[2]
result = Waypoints
result[1] = Vector(A) - distance * (Vector( B) - Vector(A)):normalized()
end
 
return result
end
 
function VPrediction:GetCurrentWayPoints(object)
    local wayPoints, lineSegment, distanceSqr, fPoint = WayPointManager:GetRawWayPoints(object), 0, math.huge, nil
    if not wayPoints and not object.visionPos then
return { { x = object.x, y = object.z } }
    elseif not wayPoints and object.visionPos then
return { { x = object.visionPos.x, y = object.visionPos.z } }
end
    for i = 1, #wayPoints - 1 do
        local p1, tmp1, tmp2 = VectorPointProjectionOnLineSegment(wayPoints, wayPoints[i + 1], object.visionPos)
        local distanceSegmentSqr = GetDistanceSqr(p1, object.visionPos)
        if distanceSegmentSqr <= distanceSqr then
            fPoint = p1
            lineSegment = i
            distanceSqr = distanceSegmentSqr
        else
        break --not necessary, but makes it faster
        end
    end
    local result = { fPoint or { x = object.visionPos.x, y = object.visionPos.z } }
    for i = lineSegment + 1, #wayPoints do
        result[#result + 1] = wayPoints
    end
    if #result == 2 and GetDistanceSqr(result[1], result[2]) < 400 then result[2] = nil end
    return result
end
 
--[[Calculate the hero position based on the last waypoints]]
function VPrediction:CalculateTargetPosition(unit, delay, radius, speed, from, spelltype)
local Waypoints = {}
local Position, CastPosition
 
Waypoints = self:GetCurrentWayPoints(unit)
local Waypointslength = self:GetWaypointsLength(Waypoints)
 
if #Waypoints == 1 then
Position, CastPosition = Vector(Waypoints[1].x, 0, Waypoints[1].y), Vector(Waypoints[1].x, 0, Waypoints[1].y)
return Position, CastPosition
elseif (Waypointslength - delay * unit.ms + radius) >= 0 then
local tA = 0
local t
Waypoints = self:CutWaypoints(Waypoints, delay * unit.ms - radius)
 
if speed ~= math.huge then
for i = 1, #Waypoints - 1 do
local A, B = Waypoints, Waypoints[i+1]
if i == #Waypoints - 1 then
B = Vector( B) + radius * Vector(B - A):normalized()
end
local t1, p1, t2, p2, D = VectorMovementCollision(A, B, unit.ms, Vector(from.x, from.z), speed)
local tB = tA + D / unit.ms
t1, t2 = (t1 and tA <= t1 and t1 <= (tB - tA)) and t1 or nil, (t2 and tA <= t2 and t2 <= (tB - tA)) and t2 or nil
t = t1 and t2 and math.min(t1, t2) or t1 or t2
if t then
CastPosition = t==t1 and Vector(p1.x, 0, p1.y) or Vector(p2.x, 0, p2.y)
break
end
tA = tB
end
else
t = 0
CastPosition = Vector(Waypoints[1].x, 0, Waypoints[1].y)
end
 
if t then
if (self:GetWaypointsLength(Waypoints) - t * unit.ms - radius) >= 0 then
Waypoints = self:CutWaypoints(Waypoints, radius + t * unit.ms)
Position = Vector(Waypoints[1].x, 0, Waypoints[1].y)
else
Position = CastPosition
end
elseif unit.type ~= myHero.type then
CastPosition = Vector(Waypoints[#Waypoints].x, 0, Waypoints[#Waypoints].y)
Position = CastPosition
end
 
elseif unit.type ~= myHero.type then
CastPosition = Vector(Waypoints[#Waypoints].x, 0, Waypoints[#Waypoints].y)
Position = CastPosition
end
 
if t and self:isSlowed(unit, 0, math.huge, from) and not self:isSlowed(unit, t, math.huge, from) and Position then
CastPosition = Position
end
 
return Position, CastPosition
end
function VPrediction:MaxAngle(unit, currentwaypoint, from)
local WPtable, n = self:GetWaypoints(unit.networkID, from)
local Max = 0
local CV = (Vector(currentwaypoint.x, 0, currentwaypoint.y) - Vector(unit))
for i, waypoint in ipairs(WPtable) do
local angle = Vector(0, 0, 0):angleBetween(CV, Vector(waypoint.waypoint.x, 0, waypoint.waypoint.y) - Vector(waypoint.unitpos.x, 0, waypoint.unitpos.y))
if angle > Max then
Max = angle
end
end
return Max
end
 
function VPrediction:WayPointAnalysis(unit, delay, radius, range, speed, from, spelltype)
local Position, CastPosition, HitChance
local SavedWayPoints = self.TargetsWaypoints[unit.networkID] and self.TargetsWaypoints[unit.networkID] or {}
local CurrentWayPoints = self:GetCurrentWayPoints(unit)
local VisibleSince = self.TargetsVisible[unit.networkID] and self.TargetsVisible[unit.networkID] or self:GetTime()
 
HitChance = 1
Position, CastPosition = self:CalculateTargetPosition(unit, delay, radius, speed, from, spelltype)
 
if self:CountWaypoints(unit.networkID, self:GetTime() - 0.1) >= 1 or self:CountWaypoints(unit.networkID, self:GetTime() - 1) == 1 then
HitChance = 2
end
 
local N = (_G.VPredictionMenu.Mode == _SLOW) and 3 or 2
local t1 = (_G.VPredictionMenu.Mode == _SLOW) and 1 or 0.5
if self:CountWaypoints(unit.networkID, self:GetTime() - 0.75) >= N then
local angle = self:MaxAngle(unit, CurrentWayPoints[#CurrentWayPoints], self:GetTime() - t1)
if angle > 90 then
HitChance = 1
elseif angle < 30 and self:CountWaypoints(unit.networkID, self:GetTime() - 0.1) >= 1 then
HitChance = 2
end
end
 
N = (_G.VPredictionMenu.Mode == _SLOW) and 2 or 1
if self:CountWaypoints(unit.networkID, self:GetTime() - N) == 0 then
HitChance = 2
end
 
if _G.VPredictionMenu.Mode == _FAST then
HitChance = 2
end
 
if #CurrentWayPoints <= 1 and self:GetTime() - VisibleSince > 1 then
HitChance = 2
end
 
if self:isSlowed(unit, delay, speed, from) then
HitChance = 2
end
 
if Position and CastPosition and ((radius / unit.ms >= delay + GetDistance(from, CastPosition)/speed) or (radius / unit.ms >= delay + GetDistance(from, Position)/speed)) then
HitChance = 3
end
--[[Angle too wide]]
if Vector(from):angleBetween(Vector(unit.visionPos), Vector(CastPosition)) > 60 then
HitChance = 1
end
 
if not Position or not CastPosition then
HitChance = 0
CastPosition = Vector(CurrentWayPoints[#CurrentWayPoints].x, 0, CurrentWayPoints[#CurrentWayPoints].y)
Position = CastPosition
end
 
if GetDistance(myHero.visionPos, unit.visionPos) < 250 then
HitChance = 2
CastPosition = Vector(unit.visionPos.x, 0, unit.visionPos.z)
Position = CastPosition
end
 
if #SavedWayPoints == 0 and (self:GetTime() - VisibleSince) > 3 then
HitChance = 2
end
 
return CastPosition, HitChance, Position
end
 
function VPrediction:GetBestCastPosition(unit, delay, radius, range, speed, from, collision, spelltype)
assert(unit, "VPrediction: Target can't be nil")
 
range = range and range - 4 or math.huge
radius = radius == 0 and 1 or (radius + self:GetHitBox(unit)) - 4
speed = speed and speed or math.huge
from = from and from or Vector(myHero.visionPos)
if from.networkID and from.networkID == myHero.networkID then
from = Vector(myHero.visionPos)
end
local IsFromMyHero = GetDistance(from, myHero.visionPos) < 50 and true or false
 
delay = delay + (0.07 + GetLatency() / 2000) 
 
local Position, CastPosition, HitChance
local TargetDashing, CanHitDashing, DashPosition = self:IsDashing(unit, delay, radius, speed, from)
local TargetImmobile, ImmobilePos = self:IsImmobile(unit, delay, radius, speed, from)
local VisibleSince = self.TargetsVisible[unit.networkID] and self.TargetsVisible[unit.networkID] or self:GetTime()
 
if unit.type ~= myHero.type then
Position, CastPosition = self:CalculateTargetPosition(unit, delay, radius, speed, from, spelltype)
HitChance = 2
else
if collision and _G.VPredictionMenu.Collision.UnitPos and self:CheckMinionCollision(unit, delay, radius - self:GetHitBox(unit) + 4, range, speed, from) then
HitChance = -1
Position, CastPosition = Vector(unit.visionPos.x, unit.visionPos.y, unit.visionPos.z),  Vector(unit.visionPos.x, unit.visionPos.y, unit.visionPos.z)
elseif self.DontShoot[unit.networkID] and self.DontShoot[unit.networkID] > self:GetTime() then
Position, CastPosition = Vector(unit.visionPos.x, unit.visionPos.y, unit.visionPos.z),  Vector(unit.visionPos.x, unit.visionPos.y, unit.visionPos.z)
HitChance = 0
elseif TargetImmobile then
Position, CastPosition = ImmobilePos, ImmobilePos
HitChance = 4
elseif TargetDashing then
if CanHitDashing then
HitChance = 5
else
HitChance = 0
end 
Position, CastPosition = DashPosition, DashPosition
else
CastPosition, HitChance, Position = self:WayPointAnalysis(unit, delay, radius, range, speed, from, spelltype)
end
end
 
--[[Out of range]]
if IsFromMyHero and ((spelltype == "line" and (GetDistanceSqr(from, Position) >= range*range)) or (spelltype == "circular" and (GetDistanceSqr(from, Position) >= (range + radius)^2))  or (GetDistanceSqr(from, CastPosition) > range^2)) then
HitChance = 0
end
radius = radius - self:GetHitBox(unit) + 4
 
if collision and HitChance > 0 then
self.EnemyMinions.range = range + 300 * (delay + range/speed)
self.JungleMinions.range = self.EnemyMinions.range
self.OtherMinions.range = self.EnemyMinions.range
self.EnemyMinions:update()
self.JungleMinions:update()
self.OtherMinions:update()
 
if _G.VPredictionMenu.Collision.UnitPos and self:CheckMinionCollision(Position, delay, radius, range, speed, from) then
HitChance = -1
elseif _G.VPredictionMenu.Collision.UnitPos and self:CheckMinionCollision(CastPosition, delay, radius, range, speed, from) then
HitChance = -1
end
end
return CastPosition, HitChance, Position
end
 
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--Collision
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
 
function VPrediction:GetPredictedHealth(unit, time)
local IncDamage = 0
local i = 1
while i <= #self.ActiveAttacks do
if self:GetTime() <= self.ActiveAttacks.hittime and self.ActiveAttacks.hittime <= self:GetTime() + time and self.ActiveAttacks.Attacker and not self.ActiveAttacks.Attacker.dead and self.ActiveAttacks.Target and self.ActiveAttacks.Target.networkID == unit.networkID then
IncDamage = IncDamage + self.ActiveAttacks.damage
end
i = i + 1
end
return unit.health - IncDamage
end
 
function VPrediction:CollisionProcessSpell(unit, spell)
--[[TODO: Add targetted spells and skillshots when BOl 2.0 is released Kappa]]
if unit and unit.valid and spell.target  and spell.target.type == 'obj_AI_Minion' and unit.team == myHero.team and spell and spell.name and (spell.name:lower():find("attack") or (spell.name == "frostarrow")) and spell.windUpTime and spell.target then
if GetDistanceSqr(unit) < 4000000 then--2000^2
--[[Actually it's better to calculate the hit time taking into account that the unit is moving]]
local time = self:GetTime() + spell.windUpTime + math.max(GetDistance(spell.target.visionPos, unit.visionPos), GetDistance(spell.target, unit)) / self:GetProjectileSpeed(unit) - GetLatency()/2000
local i = 1
while i <= #self.ActiveAttacks do
if self.ActiveAttacks.Attacker and self.ActiveAttacks.Attacker.valid and self.ActiveAttacks.Attacker.networkID == unit.networkID or self.ActiveAttacks.hittime < self:GetTime() then
table.remove(self.ActiveAttacks, i)
else
i = i + 1
end
end
table.insert(self.ActiveAttacks, {Attacker = unit, Target = spell.target, damage = unit:CalcDamage(spell.target, unit.totalDamage), hittime=time})
end
end
end
 
function VPrediction:CheckCol(minion, Position, delay, radius, range, speed, from, draw)
--[[Check first if the minion is going to be dead when skillshots reaches his position]]
if _G.VPredictionMenu.Collision.CHealth and self:GetPredictedHealth(minion,  delay  + GetDistance(from, minion.visionPos) / speed - GetLatency()/1000) < 0 then
return false
end
 
local waypoints = self:GetCurrentWayPoints(minion)
local MPos, CastPosition = #waypoints == 1 and Vector(minion.visionPos) or self:CalculateTargetPosition(minion, delay, radius, speed, from, "line")
if GetDistanceSqr(from, MPos) <= (range)^2 and GetDistanceSqr(from, minion) <= (range + 100)^2 then
local buffer = (#waypoints > 1) and _G.VPredictionMenu.Collision.Buffer or 8
 
if draw then
DrawCircle3D(minion.visionPos.x, myHero.y, minion.visionPos.z, self:GetHitBox(minion) + buffer, 1, ARGB(255, 255, 255, 255))
DrawCircle3D(MPos.x, myHero.y, MPos.z, self:GetHitBox(minion) + buffer, 1, ARGB(255, 255, 255, 255))
self:DLine(MPos, minion.visionPos, Color)
end
 
if #waypoints > 1 then
local proj1, pointLine, isOnSegment = VectorPointProjectionOnLineSegment(from, Position, Vector(MPos))
if (GetDistanceSqr(MPos, proj1) <= (self:GetHitBox(minion) + radius + buffer) ^ 2) then
return true
end
end
 
local proj2, pointLine, isOnSegment = VectorPointProjectionOnLineSegment(from, Position, Vector(minion.visionPos))
if (GetDistanceSqr(minion.visionPos, proj2) <= (self:GetHitBox(minion) + radius + buffer) ^ 2) then
return true
end
end
return false
end
 
function VPrediction:CheckMinionCollision(Position, delay, radius, range, speed, from, draw)
Position = Vector(Position)
from = from and Vector(from) or myHero.visionPos
 
local result = false
if _G.VPredictionMenu.Collision.Minions then
for i, minion in ipairs(self.EnemyMinions.objects) do
if self:CheckCol(minion, Position, delay, radius, range, speed, from, draw) then
if not draw then
return true
else
result = true
end
end
end
end
 
if _G.VPredictionMenu.Collision.Mobs then
for i, minion in ipairs(self.JungleMinions.objects) do
if self:CheckCol(minion, Position, delay, radius, range, speed, from, draw) then
if not draw then
return true
else
result = true
end
end
end
end
 
if _G.VPredictionMenu.Collision.Others then
for i, minion in ipairs(self.OtherMinions.objects) do
if minion.team ~= myHero.team and self:CheckCol(minion, Position, delay, radius, range, speed, from, draw) then
if not draw then
return true
else
result = true
end
end
end
end
 
if draw then
local Direction = Vector(Position - from):perpendicular():normalized()
local Color = result and ARGB(255, 255, 0, 0) or ARGB(255, 0, 255, 0)
local P1r = Vector(from) + radius * Vector(Direction)
local P1l = Vector(from) - radius * Vector(Direction)
local P2r = Vector(from) + radius * Direction - Vector(Direction):perpendicular() * GetDistance(from, Position)
local P2l = Vector(from) - radius * Direction - Vector(Direction):perpendicular() * GetDistance(from, Position)
 
self:DLine(P1r, P1l, Color)
self:DLine(P1r, P2r, Color)
self:DLine(P1l, P2l, Color)
self:DLine(P2r, P2l, Color)
if not result and IsKeyDown(string.byte("T")) then
CastSpell(_Q, Position.x, Position.z)
end
end
 
return false
end
 
function VPrediction:GetCircularCastPosition(unit, delay, radius, range, speed, from, collision)
return self:GetBestCastPosition(unit, delay, radius, range, speed, from, collision, "circular")
end
 
function VPrediction:GetLineCastPosition(unit, delay, radius, range, speed, from, collision)
return self:GetBestCastPosition(unit, delay, radius, range, speed, from, collision, "line")
end
 
function VPrediction:GetPredictedPos(unit, delay, speed, from, collision)
return self:GetBestCastPosition(unit, delay, 1, math.huge, speed, from, collision, "circular")
end
 
function VPrediction:OnTick()
--[[Delete the old saved Waypoints]]
if self.lastick == nil or self:GetTime() - self.lastick > 0.5 then
self.lastick = self:GetTime()
for NID, TargetWaypoints in pairs(self.TargetsWaypoints) do
local i = 1 
while i <= #self.TargetsWaypoints[NID] do
if self.TargetsWaypoints[NID]["time"] + self.WaypointsTime < self:GetTime() then
table.remove(self.TargetsWaypoints[NID], i)
else
i = i + 1
end
end
end
end
end
 
--[[Drawing functions for debug: ]]
function VPrediction:DrawSavedWaypoints(object, time)
local Waypoints = self:GetWaypoints(object.networkID, self:GetTime() - time)
for i, waypoint in ipairs(Waypoints) do
DrawCircle3D(waypoint.waypoint.x, myHero.y, waypoint.waypoint.y, 100, 2, ARGB(255, 255, 255, 255))
DrawText3D(tostring(i), waypoint.waypoint.x, myHero.y, waypoint.waypoint.y, 13, ARGB(255, 255, 255, 255), true)
DrawCircle3D(waypoint.unitpos.x, myHero.y, waypoint.unitpos.y, 100, 2, ARGB(255, 255, 0, 0))
end
end
 
function VPrediction:DrawHitBox(object)
DrawCircle3D(object.x, object.y, object.z, self:GetHitBox(object), 1, ARGB(255, 255, 255, 255))
if object.visionPos then
DrawCircle3D(object.visionPos.x, object.visionPos.y, object.visionPos.z, self:GetHitBox(object), 1, ARGB(255, 0, 255, 0))
end
end
 
function VPrediction:DLine(From, To, Color)
DrawLine3D(From.x, From.y, From.z, To.x, To.y, To.z, 1, Color)
end
 
function VPrediction:OnDraw()
if self.showdevmode and _G.VPredictionMenu.Developers.Debug then
LastGetTarget = LastGetTarget or myHero
local target = GetTarget() or LastGetTarget
LastGetTarget = target
for i, enemy in ipairs(GetEnemyHeroes()) do
self:DrawHitBox(enemy)
end
if _G.VPredictionMenu.Developers.SC then
self.EnemyMinions:update()
self.JungleMinions:update()
self.OtherMinions:update()
self:CheckMinionCollision(Vector(myHero.visionPos) + 1050 * (Vector(mousePos) - Vector(myHero.visionPos)):normalized(), 0.25, 70, 1050, 1800, myHero.visionPos, true)
end
if target then
self:DrawHitBox(target) 
local CastPosition,  HitChance,  Position = self:GetCircularCastPosition(target, 0.6, 70, 900, math.huge)
if HitChance >= -1 then
DrawText3D(tostring(HitChance), CastPosition.x, myHero.y, CastPosition.z, 40, ARGB(255, 255, 255, 255), true)
DrawCircle3D(Position.x, myHero.y, Position.z, 70 + self:GetHitBox(target), 1, ARGB(255, 0, 255, 0))
DrawCircle3D(CastPosition.x, myHero.y, CastPosition.z, 70 + self:GetHitBox(target), 1, ARGB(255, 255, 0, 0))
end
local waypoint = self:GetCurrentWayPoints(target)
for i  = 1, #waypoint-1 do
self:DLine(Vector(waypoint.x, myHero.y, waypoint.y), Vector(waypoint[i+1].x, myHero.y, waypoint[i+1].y), ARGB(255,255,255,255))
end
end
end
end
 
function VPrediction:GetHitBox(object)
return (self.hitboxes[object.charName] ~= nil and self.hitboxes[object.charName] ~= 0) and self.hitboxes[object.charName]  or 65
end
 
function VPrediction:GetPathFindingRadius(object)
return (self.pathfindingRadius[object.charName] ~= nil and self.pathfindingRadius[object.charName] ~= 0) and self.pathfindingRadius[object.charName]  or 35 
end
 
function VPrediction:GetProjectileSpeed(unit)
return self.projectilespeeds[unit.charName] and self.projectilespeeds[unit.charName] or math.huge
end
--}


 

<3

Koza Gold
 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...