local champions = { ["Aatrox"] = {charName = "Aatrox", skills = { ["0"] = {range = 600}, ["1"] = {range = 0}, ["2"] = {range = 1000}, ["3"] = {range = 550}, }}, ["Ahri"] = {charName = "Ahri", skills = { ["0"] = {range = 880}, ["1"] = {range = 700}, ["2"] = {range = 975}, ["3"] = {range = 450}, }}, ["Akali"] = {charName = "Akali", skills = { ["0"] = {range = 600}, ["1"] = {range = 700}, ["2"] = {range = 325}, ["3"] = {range = 700}, }}, ["Alistar"] = {charName = "Alistar", skills = { ["0"] = {range = 365}, ["1"] = {range = 650}, ["2"] = {range = 575}, ["3"] = {range = 10}, }}, ["Aatrox"] = {charName = "Aatrox", skills = { ["0"] = {range = 600}, ["1"] = {range = 0}, ["2"] = {range = 1000}, ["3"] = {range = 550}, }}, ["Amumu"] = {charName = "Amumu", skills = { ["0"] = {range = 1100}, ["1"] = {range = 300}, ["2"] = {range = 350}, ["3"] = {range = 550}, }}, ["Anivia"] = {charName = "Anivia", skills = { ["0"] = {range = 1075}, ["1"] = {range = 1000}, ["2"] = {range = 650}, ["3"] = {range = 625}, }}, ["Annie"] = {charName = "Annie", skills = { ["0"] = {range = 625}, ["1"] = {range = 560}, ["2"] = {range = 0}, ["3"] = {range = 600}, }}, ["Ashe"] = {charName = "Ashe", skills = { ["0"] = {range = 0}, ["1"] = {range = 1200}, ["2"] = {range = 25000}, ["3"] = {range = 20000}, }}, ["Azir"] = {charName = "Azir", skills = { ["0"] = {range = 875}, ["1"] = {range = 450}, ["2"] = {range = 1100}, ["3"] = {range = 250}, }}, ["Bard"] = {charName = "Bard", skills = { ["0"] = {range = 600}, --TODO ["1"] = {range = 800}, ["2"] = {range = 900}, ["3"] = {range = 3400}, }}, ["Blitzcrank"] = {charName = "Blitzcrank", skills = { ["0"] = {range = 925}, ["1"] = {range = 0}, ["2"] = {range = 0}, ["3"] = {range = 600}, }}, ["Brand"] = {charName = "Brand", skills = { ["0"] = {range = 1050}, ["1"] = {range = 900}, ["2"] = {range = 625}, ["3"] = {range = 750}, }}, ["Braum"] = {charName = "Braum", skills = { ["0"] = {range = 1000}, ["1"] = {range = 650}, ["2"] = {range = 150},--TODO ["3"] = {range = 1250}, }}, ["Caitlyn"] = {charName = "Caitlyn", skills = { ["0"] = {range = 1250}, ["1"] = {range = 800}, ["2"] = {range = 750}, ["3"] = {range = 3000}, }}, ["Cassiopeia"] = {charName = "Cassiopeia", skills = { ["0"] = {range = 850}, ["1"] = {range = 850}, ["2"] = {range = 700}, ["3"] = {range = 825}, }}, ["Chogath"] = {charName = "Chogath", skills = { ["0"] = {range = 950}, ["1"] = {range = 300}, ["2"] = {range = 0}, ["3"] = {range = 175}, }}, ["Corki"] = {charName = "Corki", skills = { ["0"] = {range = 825}, ["1"] = {range = 600}, ["2"] = {range = 600}, ["3"] = {range = 1225}, }}, ["Darius"] = {charName = "Darius", skills = { ["0"] = {range = 360}, --TODO ["1"] = {range = 0}, ["2"] = {range = 535}, ["3"] = {range = 460}, }}, ["Diana"] = {charName = "Diana", skills = { ["0"] = {range = 830}, ["1"] = {range = 0}, ["2"] = {range = 450}, ["3"] = {range = 825}, }}, ["Mundo"] = {charName = "DrMundo", skills = { ["0"] = {range = 975}, ["1"] = {range = 325}, ["2"] = {range = 0}, ["3"] = {range = 0}, }}, ["Draven"] = {charName = "Draven", skills = { ["0"] = {range = 0}, ["1"] = {range = 0}, ["2"] = {range = 1050}, ["3"] = {range = 20000}, }}, ["Ekko"] = {charName = "Ekko", skills = { ["0"] = {range = 1075}, ["1"] = {range = 1600}, ["2"] = {range = 325}, ["3"] = {range = 0}, }}, ["Elise"] = {charName = "Elise", skills = { ["0"] = {range = 625}, ["1"] = {range = 950}, ["2"] = {range = 1075}, ["3"] = {range = 0}, }}, ["Evelynn"] = {charName = "Evelynn", skills = { ["0"] = {range = 500}, ["1"] = {range = 0}, ["2"] = {range = 225}, ["3"] = {range = 650}, }}, ["Diana"] = {charName = "Diana", skills = { ["0"] = {range = 830}, ["1"] = {range = 0}, ["2"] = {range = 450}, ["3"] = {range = 825}, }}, ["Ezreal"] = {charName = "Ezreal", skills = { ["0"] = {range = 1150}, ["1"] = {range = 1000}, ["2"] = {range = 475}, ["3"] = {range = 20000}, }}, ["Fiddlesticks"] = {charName = "Fiddlesticks", skills = { ["0"] = {range = 575}, ["1"] = {range = 575}, ["2"] = {range = 750}, ["3"] = {range = 800}, }}, ["Fiora"] = {charName = "Fiora", skills = { ["0"] = {range = 400}, ["1"] = {range = 500}, ["2"] = {range = 0}, ["3"] = {range = 500}, }}, ["Fizz"] = {charName = "Fizz", skills = { ["0"] = {range = 550}, ["1"] = {range = 0}, ["2"] = {range = 400}, ["3"] = {range = 1275}, }}, ["Galio"] = {charName = "Galio", skills = { ["0"] = {range = 940}, ["1"] = {range = 800}, ["2"] = {range = 1180}, ["3"] = {range = 560}, }}, ["Gangplank"] = {charName = "Ganglank", skills = { ["0"] = {range = 625}, ["1"] = {range = 0}, ["2"] = {range = 1000}, ["3"] = {range = 30000}, }}, ["Garen"] = {charName = "Garen", skills = { ["0"] = {range = 0}, ["1"] = {range = 0}, ["2"] = {range = 325}, ["3"] = {range = 400}, }}, ["Gnar"] = {charName = "Gnar", skills = { ["0"] = {range = 1100}, ["1"] = {range = 0}, ["2"] = {range = 475}, ["3"] = {range = 800}, }}, ["Gragas"] = {charName = "Gragas", skills = { ["0"] = {range = 850}, ["1"] = {range = 0}, ["2"] = {range = 600}, ["3"] = {range = 1150}, }}, ["Graves"] = {charName = "Graves", skills = { ["0"] = {range = 925}, ["1"] = {range = 950}, ["2"] = {range = 425}, ["3"] = {range = 1000}, }}, ["Hecarim"] = {charName = "Hecarim", skills = { ["0"] = {range = 350}, ["1"] = {range = 525}, ["2"] = {range = 0}, ["3"] = {range = 1000}, }}, ["Heimerdinger"] = {charName = "Heimerdinger", skills = { ["0"] = {range = 350}, ["1"] = {range = 1325}, ["2"] = {range = 970}, ["3"] = {range = 0}, }}, ["Illaoi"] = {charName = "Illaoi", skills = { ["0"] = {range = 850}, ["1"] = {range = 0}, ["2"] = {range = 900}, ["3"] = {range = 500}, }}, ["Irelia"] = {charName = "Irelia", skills = { ["0"] = {range = 650}, ["1"] = {range = 0}, ["2"] = {range = 325}, ["3"] = {range = 1000}, }}, ["Janna"] = {charName = "Janna", skills = { ["0"] = {range = 1700}, ["1"] = {range = 600}, ["2"] = {range = 800}, ["3"] = {range = 725}, }}, ["Jarvan"] = {charName = "Jarvan", skills = { ["0"] = {range = 770}, ["1"] = {range = 525}, ["2"] = {range = 800}, ["3"] = {range = 650}, }}, ["Jax"] = {charName = "Jax", skills = { ["0"] = {range = 700}, ["1"] = {range = 0}, ["2"] = {range = 0}, ["3"] = {range = 0}, }}, ["Jayce"] = {charName = "Jayce", skills = { ["0"] = {range = 600}, ["1"] = {range = 285}, ["2"] = {range = 240}, ["3"] = {range = 0}, }}, ["Jinx"] = {charName = "Jinx", skills = { ["0"] = {range = 0}, ["1"] = {range = 1450}, ["2"] = {range = 900}, ["3"] = {range = 25000}, }}, ["Kalista"] = {charName = "Kalista", skills = { ["0"] = {range = 1150}, ["1"] = {range = 5000}, ["2"] = {range = 1000}, ["3"] = {range = 0}, }}, ["Karma"] = {charName = "Karma", skills = { ["0"] = {range = 950}, ["1"] = {range = 675}, ["2"] = {range = 800}, ["3"] = {range = 0}, }}, ["Karthus"] = {charName = "Karthus", skills = { ["0"] = {range = 875}, ["1"] = {range = 1000}, ["2"] = {range = 550}, ["3"] = {range = 0}, }}, ["Kassadin"] = {charName = "Kassadin", skills = { ["0"] = {range = 650}, ["1"] = {range = 0}, ["2"] = {range = 400}, ["3"] = {range = 500}, }}, ["Katarina"] = {charName = "Katarina", skills = { ["0"] = {range = 675}, ["1"] = {range = 400}, ["2"] = {range = 700}, ["3"] = {range = 550}, }}, ["Kayle"] = {charName = "Kayle", skills = { ["0"] = {range = 650}, ["1"] = {range = 900}, ["2"] = {range = 0}, ["3"] = {range = 900}, }}, ["Kennen"] = {charName = "Kennen", skills = { ["0"] = {range = 950}, ["1"] = {range = 900}, ["2"] = {range = 0}, ["3"] = {range = 550}, }}, ["Khazix"] = {charName = "Khazix", skills = { ["0"] = {range = 326}, ["1"] = {range = 1000}, ["2"] = {range = 600}, ["3"] = {range = 0}, }}, ["Kindred"] = {charName = "Kindred", skills = { ["0"] = {range = 340}, ["1"] = {range = 0}, ["2"] = {range = 500}, ["3"] = {range = 500}, }}, ["KogMaw"] = {charName = "KogMaw", skills = { ["0"] = {range = 1175}, ["1"] = {range = 0}, ["2"] = {range = 1200}, ["3"] = {range = 1800}, }}, ["Leblanc"] = {charName = "Leblanc", skills = { ["0"] = {range = 700}, ["1"] = {range = 600}, ["2"] = {range = 925}, ["3"] = {range = 0}, }}, ["Lee Sin"] = {charName = "LeeSin", skills = { ["0"] = {range = 1000}, ["1"] = {range = 700}, ["2"] = {range = 425}, ["3"] = {range = 375}, }}, ["Leona"] = {charName = "Leona", skills = { ["0"] = {range = 0}, ["1"] = {range = 450}, ["2"] = {range = 875}, ["3"] = {range = 1200}, }}, ["Lissandra"] = {charName = "Lissandra", skills = { ["0"] = {range = 725}, ["1"] = {range = 450}, ["2"] = {range = 1050}, ["3"] = {range = 550}, }}, ["Lucian"] = {charName = "Lucian", skills = { ["0"] = {range = 500}, ["1"] = {range = 1000}, ["2"] = {range = 445}, ["3"] = {range = 1400}, }}, ["Lulu"] = {charName = "Lulu", skills = { ["0"] = {range = 925}, ["1"] = {range = 650}, ["2"] = {range = 650}, ["3"] = {range = 900}, }}, ["Lux"] = {charName = "Lux", skills = { ["0"] = {range = 1175}, ["1"] = {range = 1075}, ["2"] = {range = 1100}, ["3"] = {range = 3340}, }}, ["Malphite"] = {charName = "Malphite", skills = { ["0"] = {range = 625}, ["1"] = {range = 0}, ["2"] = {range = 400}, ["3"] = {range = 1000}, }}, ["Malzahar"] = {charName = "Malzahar", skills = { ["0"] = {range = 900}, ["1"] = {range = 800}, ["2"] = {range = 650}, ["3"] = {range = 700}, }}, ["Maokai"] = {charName = "Maokai", skills = { ["0"] = {range = 600}, ["1"] = {range = 525}, ["2"] = {range = 1100}, ["3"] = {range = 500}, }}, ["Master Yi"] = {charName = "MasterYi", skills = { ["0"] = {range = 600}, ["1"] = {range = 0}, ["2"] = {range = 0}, ["3"] = {range = 0}, }}, ["MissFortune"] = {charName = "MissFortune", skills = { ["0"] = {range = 650}, ["1"] = {range = 0}, ["2"] = {range = 1000}, ["3"] = {range = 400}, }}, ["Mordekaiser"] = {charName = "Mordekaiser", skills = { ["0"] = {range = 0}, ["1"] = {range = 1000}, ["2"] = {range = 700}, ["3"] = {range = 650}, }}, ["Morgana"] = {charName = "Morgana", skills = { ["0"] = {range = 1175}, ["1"] = {range = 900}, ["2"] = {range = 750}, ["3"] = {range = 625}, }}, ["Nami"] = {charName = "Nami", skills = { ["0"] = {range = 875}, ["1"] = {range = 725}, ["2"] = {range = 800}, ["3"] = {range = 2750}, }}, ["Nasus"] = {charName = "Nasus", skills = { ["0"] = {range = 0}, ["1"] = {range = 600}, ["2"] = {range = 650}, ["3"] = {range = 0}, }}, ["Nautilus"] = {charName = "Nautilus", skills = { ["0"] = {range = 950}, ["1"] = {range = 0}, ["2"] = {range = 600}, ["3"] = {range = 825}, }}, ["Zyra"] = {charName = "Zyra", skills = { ["0"] = {range = 800}, ["1"] = {range = 850}, ["2"] = {range = 1100}, ["3"] = {range = 700}, }}, ["Zilean"] = {charName = "Zilean", skills = { ["0"] = {range = 900}, ["1"] = {range = 0}, ["2"] = {range = 700}, ["3"] = {range = 900}, }}, ["Ziggs"] = {charName = "Ziggs", skills = { ["0"] = {range = 850}, ["1"] = {range = 1000}, ["2"] = {range = 900}, ["3"] = {range = 5300}, }}, ["Zed"] = {charName = "Zed", skills = { ["0"] = {range = 900}, ["1"] = {range = 650}, ["2"] = {range = 290}, ["3"] = {range = 625}, }}, ["Zac"] = {charName = "Zac", skills = { ["0"] = {range = 550}, ["1"] = {range = 350}, ["2"] = {range = 300}, ["3"] = {range = 300}, }}, ["Yorick"] = {charName = "Yorick", skills = { ["0"] = {range = 0}, ["1"] = {range = 600}, ["2"] = {range = 550}, ["3"] = {range = 850}, }}, ["Yasuo"] = {charName = "Yasuo", skills = { ["0"] = {range = 475}, ["1"] = {range = 400}, ["2"] = {range = 475}, ["3"] = {range = 1200}, }}, ["XinZhao"] = {charName = "XinZhao", skills = { ["0"] = {range = 0}, ["1"] = {range = 0}, ["2"] = {range = 650}, ["3"] = {range = 500}, }}, ["Xerath"] = {charName = "Xerath", skills = { ["0"] = {range = 750}, ["1"] = {range = 1100}, ["2"] = {range = 1050}, ["3"] = {range = 3200}, }}, ["MonkeyKing"] = {charName = "MonkeyKing", skills = { ["0"] = {range = 0}, ["1"] = {range = 0}, ["2"] = {range = 650}, ["3"] = {range = 315}, }}, ["Warwick"] = {charName = "Warwick", skills = { ["0"] = {range = 400}, ["1"] = {range = 1250}, ["2"] = {range = 1600}, ["3"] = {range = 700}, }}, ["Volibear"] = {charName = "Volibear", skills = { ["0"] = {range = 0}, ["1"] = {range = 350}, ["2"] = {range = 425}, ["3"] = {range = 500}, }}, ["Vladimir"] = {charName = "Vladimir", skills = { ["0"] = {range = 600}, ["1"] = {range = 350}, ["2"] = {range = 610}, ["3"] = {range = 625}, }}, ["Viktor"] = {charName = "Viktor", skills = { ["0"] = {range = 600}, ["1"] = {range = 700}, ["2"] = {range = 525}, ["3"] = {range = 700}, }}, ["Vi"] = {charName = "Vi", skills = { ["0"] = {range = 250}, ["1"] = {range = 0}, ["2"] = {range = 0}, ["3"] = {range = 800}, }}, ["VelKoz"] = {charName = "VelKoz", skills = { ["0"] = {range = 1050}, ["1"] = {range = 1050}, ["2"] = {range = 850}, ["3"] = {range = 1575}, }}, ["Veigar"] = {charName = "Veigar", skills = { ["0"] = {range = 900}, ["1"] = {range = 900}, ["2"] = {range = 725}, ["3"] = {range = 650}, }}, ["Vayne"] = {charName = "Vayne", skills = { ["0"] = {range = 300}, ["1"] = {range = 0}, ["2"] = {range = 710}, ["3"] = {range = 0}, }}, ["Varus"] = {charName = "Varus", skills = { ["0"] = {range = 925}, ["1"] = {range = 0}, ["2"] = {range = 925}, ["3"] = {range = 1100}, }}, ["Urgot"] = {charName = "Urgot", skills = { ["0"] = {range = 1000}, ["1"] = {range = 0}, ["2"] = {range = 900}, ["3"] = {range = 550}, }}, ["Udyr"] = {charName = "Udyr", skills = { ["0"] = {range = 0}, ["1"] = {range = 0}, ["2"] = {range = 0}, ["3"] = {range = 325}, }}, ["Twitch"] = {charName = "Twitch", skills = { ["0"] = {range = 0}, ["1"] = {range = 950}, ["2"] = {range = 1200}, ["3"] = {range = 0}, }}, ["TwistedFate"] = {charName = "TwistedFate", skills = { ["0"] = {range = 10000}, ["1"] = {range = 0}, ["2"] = {range = 0}, ["3"] = {range = 5500}, }}, ["Tryndamere"] = {charName = "Tryndamere", skills = { ["0"] = {range = 0}, ["1"] = {range = 850}, ["2"] = {range = 650}, ["3"] = {range = 0}, }}, ["Trundle"] = {charName = "Trundle", skills = { ["0"] = {range = 0}, ["1"] = {range = 750}, ["2"] = {range = 1000}, ["3"] = {range = 650}, }}, ["Tristana"] = {charName = "Tristana", skills = { ["0"] = {range = 0}, ["1"] = {range = 900}, ["2"] = {range = 550}, ["3"] = {range = 550}, }}, ["Thresh"] = {charName = "Thresh", skills = { ["0"] = {range = 1075}, ["1"] = {range = 950}, ["2"] = {range = 800}, ["3"] = {range = 450}, }}, ["Teemo"] = {charName = "Teemo", skills = { ["0"] = {range = 680}, ["1"] = {range = 0}, ["2"] = {range = 0}, ["3"] = {range = 300}, }}, ["Taric"] = {charName = "Taric", skills = { ["0"] = {range = 750}, ["1"] = {range = 400}, ["2"] = {range = 625}, ["3"] = {range = 400}, }}, ["TahmKench"] = {charName = "TahmKench", skills = { ["0"] = {range = 800}, ["1"] = {range = 250}, ["2"] = {range = 0}, ["3"] = {range = 4500}, }}, ["Syndra"] = {charName = "Syndra", skills = { ["0"] = {range = 800}, ["1"] = {range = 925}, ["2"] = {range = 650}, ["3"] = {range = 675}, }}, ["Swain"] = {charName = "Swain", skills = { ["0"] = {range = 625}, ["1"] = {range = 900}, ["2"] = {range = 625}, ["3"] = {range = 0}, }}, ["Soraka"] = {charName = "Soraka", skills = { ["0"] = {range = 810}, ["1"] = {range = 550}, ["2"] = {range = 925}, ["3"] = {range = math.huge}, }}, ["Sona"] = {charName = "Sona", skills = { ["0"] = {range = 825}, ["1"] = {range = 1000}, ["2"] = {range = 360}, ["3"] = {range = 900}, }}, ["Skarner"] = {charName = "Skarner", skills = { ["0"] = {range = 350}, ["1"] = {range = 0}, ["2"] = {range = 980}, ["3"] = {range = 350}, }}, ["Sivir"] = {charName = "Sivir", skills = { ["0"] = {range = 1200}, ["1"] = {range = 0}, ["2"] = {range = 0}, ["3"] = {range = 1000}, }}, ["Sion"] = {charName = "Sion", skills = { ["0"] = {range = 10000}, ["1"] = {range = 0}, ["2"] = {range = 800}, ["3"] = {range = 7500}, }}, ["Singed"] = {charName = "Singed", skills = { ["0"] = {range = 0}, ["1"] = {range = 1000}, ["2"] = {range = 125}, ["3"] = {range = 0}, }}, ["Shyvana"] = {charName = "Shyvana", skills = { ["0"] = {range = 0}, ["1"] = {range = 325}, ["2"] = {range = 925}, ["3"] = {range = 1000}, }}, ["Shen"] = {charName = "Shen", skills = { ["0"] = {range = 475}, ["1"] = {range = 0}, ["2"] = {range = 600}, ["3"] = {range = math.huge}, }}, ["Shaco"] = {charName = "Shaco", skills = { ["0"] = {range = 400}, ["1"] = {range = 425}, ["2"] = {range = 625}, ["3"] = {range = 0}, }}, ["Sejuani"] = {charName = "Sejuani", skills = { ["0"] = {range = 650}, ["1"] = {range = 350}, ["2"] = {range = 1000}, ["3"] = {range = 1175}, }}, ["Ryze"] = {charName = "Ryze", skills = { ["0"] = {range = 900}, ["1"] = {range = 600}, ["2"] = {range = 600}, ["3"] = {range = 0}, }}, ["Rumble"] = {charName = "Rumble", skills = { ["0"] = {range = 600}, ["1"] = {range = 0}, ["2"] = {range = 850}, ["3"] = {range = 1750}, }}, ["Riven"] = {charName = "Riven", skills = { ["0"] = {range = 275}, ["1"] = {range = 260}, ["2"] = {range = 250}, ["3"] = {range = 0}, }}, ["Rengar"] = {charName = "Rengar", skills = { ["0"] = {range = 0}, ["1"] = {range = 500}, ["2"] = {range = 1000}, ["3"] = {range = 2000}, }}, ["Renekton"] = {charName = "Renekton", skills = { ["0"] = {range = 325}, ["1"] = {range = 0}, ["2"] = {range = 450}, ["3"] = {range = 0}, }}, ["RekSai"] = {charName = "RekSai", skills = { ["0"] = {range = 325}, ["1"] = {range = 1650}, ["2"] = {range = 250}, ["3"] = {range = math.huge}, }}, ["Rammus"] = {charName = "Rammus", skills = { ["0"] = {range = 0}, ["1"] = {range = 0}, ["2"] = {range = 325}, ["3"] = {range = 0}, }}, ["Quinn"] = {charName = "Quinn", skills = { ["0"] = {range = 1025}, ["1"] = {range = 2100}, ["2"] = {range = 675}, ["3"] = {range = 0}, }}, ["Poppy"] = {charName = "Poppy", skills = { ["0"] = {range = 430}, ["1"] = {range = 400}, ["2"] = {range = 475}, ["3"] = {range = 500}, }}, ["Pantheon"] = {charName = "Pantheon", skills = { ["0"] = {range = 600}, ["1"] = {range = 600}, ["2"] = {range = 400}, ["3"] = {range = 5500}, }}, ["Orianna"] = {charName = "Orianna", skills = { ["0"] = {range = 815}, ["1"] = {range = 0}, ["2"] = {range = 1095}, ["3"] = {range = 0}, }}, ["Olaf"] = {charName = "Olaf", skills = { ["0"] = {range = 1000}, ["1"] = {range = 0}, ["2"] = {range = 325}, ["3"] = {range = 0}, }}, ["Nunu"] = {charName = "Nunu", skills = { ["0"] = {range = 125}, ["1"] = {range = 700}, ["2"] = {range = 550}, ["3"] = {range = 650}, }}, ["Nocturne"] = {charName = "Nocturne", skills = { ["0"] = {range = 1125}, ["1"] = {range = 0}, ["2"] = {range = 425}, ["3"] = {range = 2500}, }}, ["Nidalee"] = {charName = "Nidalee", skills = { ["0"] = {range = 1500}, ["1"] = {range = 900}, ["2"] = {range = 600}, ["3"] = {range = 0}, }} } local scriptVersion = 0.01 local allyHeroes, enemyHeroes = GetAllyHeroes(), GetEnemyHeroes() local allyCount, enemyCount = #allyHeroes, #enemyHeroes function Print(msg) print("[Heroes Can Draw Too!] " .. msg .. "") end function OnLoad() Print("Welcome! Enjoy!") Update() Menu() AddDrawCallback(function() OnDraw() end) end function Menu() menu = scriptConfig("Heroes Can Draw Too!", "DrawHeroesMenu") menu:addSubMenu(">Ally Drawings", "ally") if allyCount > 0 then for i = 1, allyCount do local allyhero = allyHeroes[i] if champions[allyhero.charName] ~= nil then menu.ally:addParam("info"..allyhero.charName, " -- "..allyhero.charName.." --", SCRIPT_PARAM_INFO, "") menu.ally:addParam("allyonoffq"..allyhero.charName, "Q Range", SCRIPT_PARAM_ONOFF, true) menu.ally:addParam("allyonoffw"..allyhero.charName, "W Range", SCRIPT_PARAM_ONOFF, true) menu.ally:addParam("allyonoffe"..allyhero.charName, "E Range", SCRIPT_PARAM_ONOFF, true) menu.ally:addParam("allyonoffr"..allyhero.charName, "R Range", SCRIPT_PARAM_ONOFF, true) end end end menu:addSubMenu(">Enemy Drawings", "enemy") if enemyCount > 0 then for i = 1, enemyCount do local hero = enemyHeroes[i] if champions[hero.charName] ~= nil then menu.enemy:addParam("info"..hero.charName, " -- "..hero.charName.." --", SCRIPT_PARAM_INFO, "") menu.enemy:addParam("enemyonoffq"..hero.charName, "Q Range", SCRIPT_PARAM_ONOFF, true) menu.enemy:addParam("enemyonoffw"..hero.charName, "W Range", SCRIPT_PARAM_ONOFF, true) menu.enemy:addParam("enemyonoffe"..hero.charName, "E Range", SCRIPT_PARAM_ONOFF, true) menu.enemy:addParam("enemyonoffr"..hero.charName, "R Range", SCRIPT_PARAM_ONOFF, true) end end end menu:addSubMenu(">Draw Colors", "color") menu.color:addParam("allycolorinfo", " -- Ally Colors --", SCRIPT_PARAM_INFO, "" ) menu.color:addParam("allycolorq", "Color Q", SCRIPT_PARAM_COLOR, { 255, 0x66, 0x33, 0x00 }) menu.color:addParam("allycolorw", "Color W", SCRIPT_PARAM_COLOR, { 255, 0x66, 0x33, 0x00 }) menu.color:addParam("allycolore", "Color E", SCRIPT_PARAM_COLOR, { 255, 0x66, 0x33, 0x00 }) menu.color:addParam("allycolorr", "Color R", SCRIPT_PARAM_COLOR, { 255, 0x66, 0x33, 0x00 }) menu.color:addParam("enemycolorinfo", " -- Enemy Colors --", SCRIPT_PARAM_INFO, "" ) menu.color:addParam("enemycolorq", "Color Q", SCRIPT_PARAM_COLOR, { 255, 0x66, 0x33, 0x00 }) menu.color:addParam("enemycolorw", "Color W", SCRIPT_PARAM_COLOR, { 255, 0x66, 0x33, 0x00 }) menu.color:addParam("enemycolore", "Color E", SCRIPT_PARAM_COLOR, { 255, 0x66, 0x33, 0x00 }) menu.color:addParam("enemycolorr", "Color R", SCRIPT_PARAM_COLOR, { 255, 0x66, 0x33, 0x00 }) menu:addParam("empty", "", SCRIPT_PARAM_INFO, "") menu:addParam("drawtoggle", "Turn Off All Draw Ranges", SCRIPT_PARAM_ONOFF, false) menu:addParam("empty", "------------------------------------------------------", SCRIPT_PARAM_INFO, "") menu:addParam("infobox", " Author: UnknownHeroes", SCRIPT_PARAM_INFO, "") menu:addParam("infobox2", " Patch: 6.1", SCRIPT_PARAM_INFO, "") menu:addParam("infobox3", " Version: " .. scriptVersion .. " ", SCRIPT_PARAM_INFO, "") end function OnDraw() if allyCount > 0 then for i = 1, allyCount do local allyhero = allyHeroes[i] if champions[allyhero.charName] ~= nil then for index, skillshot in pairs(champions[allyhero.charName].skills) do if not menu.drawtoggle then if allyhero.visible == true and not allyhero.dead then if menu.ally["allyonoffq"..allyhero.charName] then DrawCircle(allyhero.x, allyhero.y, allyhero.z, champions[allyhero.charName].skills["0"].range, ARGB(table.unpack(menu.color.allycolorq))) end if menu.ally["allyonoffw"..allyhero.charName] then DrawCircle(allyhero.x, allyhero.y, allyhero.z, champions[allyhero.charName].skills["1"].range, ARGB(table.unpack(menu.color.allycolorw))) end if menu.ally["allyonoffe"..allyhero.charName] then DrawCircle(allyhero.x, allyhero.y, allyhero.z, champions[allyhero.charName].skills["2"].range, ARGB(table.unpack(menu.color.allycolore))) end if menu.ally["allyonoffr"..allyhero.charName] then DrawCircle(allyhero.x, allyhero.y, allyhero.z, champions[allyhero.charName].skills["3"].range, ARGB(table.unpack(menu.color.allycolorr))) end end end end end end end if enemyCount > 0 then for i = 1, enemyCount do local hero = enemyHeroes[i] if champions[hero.charName] ~= nil then for index, skillshot in pairs(champions[hero.charName].skills) do if not menu.drawtoggle then if hero.visible == true and not hero.dead then if menu.enemy["enemyonoffq"..hero.charName] then DrawCircle(hero.x, hero.y, hero.z, champions[hero.charName].skills["0"].range, ARGB(table.unpack(menu.color.enemycolorq))) end if menu.enemy["enemyonoffw"..hero.charName] then DrawCircle(hero.x, hero.y, hero.z, champions[hero.charName].skills["1"].range, ARGB(table.unpack(menu.color.enemycolorw))) end if menu.enemy["enemyonoffe"..hero.charName] then DrawCircle(hero.x, hero.y, hero.z, champions[hero.charName].skills["2"].range, ARGB(table.unpack(menu.color.enemycolore))) end if menu.enemy["enemyonoffr"..hero.charName] then DrawCircle(hero.x, hero.y, hero.z, champions[hero.charName].skills["3"].range, ARGB(table.unpack(menu.color.enemycolorr))) end end end end end end end end function DrawCircle(x, y, z, radius, color) local vPos1 = Vector(x, y, z) local vPos2 = Vector(cameraPos.x, cameraPos.y, cameraPos.z) local tPos = vPos1 - (vPos1 - vPos2):normalized() * radius local sPos = WorldToScreen(D3DXVECTOR3(tPos.x, tPos.y, tPos.z)) if OnScreen({ x = sPos.x, y = sPos.y }, { x = sPos.x, y = sPos.y }) then DrawCircleNextLvl(x, y, z, radius, 1, color, 300) end end function DrawCircleNextLvl(x, y, z, radius, width, color, chordlength) radius = radius or 300 quality = math.max(40, Round(180 / math.deg((math.asin((chordlength / (2 * radius))))))) quality = 2 * math.pi / quality radius = radius * .92 local points = {} for theta = 0, 2 * math.pi + quality, quality do local c = WorldToScreen(D3DXVECTOR3(x + radius * math.cos(theta), y, z - radius * math.sin(theta))) points[#points + 1] = D3DXVECTOR2(c.x, c.y) end DrawLines2(points, width or 1, color or 4294967295) end function Round(number) if number >= 0 then return math.floor(number+.5) else return math.ceil(number-.5) end end function Update() local ToUpdate = { } ToUpdate.Version = scriptVersion ToUpdate.UseHttps = true ToUpdate.Host = "raw.githubusercontent.com" ToUpdate.VersionPath = "/UnknownHeroe/BoL/master//version/HeroesDraw.version" ToUpdate.ScriptPath = "/UnknownHeroe/BoL/master/HeroesDraw.lua" ToUpdate.SavePath = SCRIPT_PATH .. "/" .. _ENV.FILE_NAME ToUpdate.CallbackUpdate = function(NewVersion, OldVersion) Print("Script Updated To Version " .. NewVersion .. "! Double Tap F9!") end ToUpdate.CallbackNoUpdate = function(OldVersion) Print("No Updates Found, Current Version " .. ToUpdate.Version .. "!") end ToUpdate.CallbackNewVersion = function(NewVersion) Print("New Version Found (" .. NewVersion .. ")! Please Wait Until It's Downloaded!") end ToUpdate.CallbackError = function(NewVersion) Print("Error While Downloading! Please Try Again.") end ScriptUpdate(ToUpdate.Version, ToUpdate.UseHttps, ToUpdate.Host, ToUpdate.VersionPath, ToUpdate.ScriptPath, ToUpdate.SavePath, function() end, function() end, function() end, function() end) ScriptUpdate(ToUpdate.Version, ToUpdate.UseHttps, ToUpdate.Host, ToUpdate.VersionPath, ToUpdate.ScriptPath, LIB_PATH .. "/HeroesDraw.lua", ToUpdate.CallbackUpdate, ToUpdate.CallbackNoUpdate, ToUpdate.CallbackNewVersion, ToUpdate.CallbackError) end class("ScriptUpdate") function ScriptUpdate:__init(LocalVersion, UseHttps, Host, VersionPath, ScriptPath, SavePath, CallbackUpdate, CallbackNoUpdate, CallbackNewVersion, CallbackError) self.LocalVersion = LocalVersion self.Host = Host self.VersionPath = '/BoL/TCPUpdater/GetScript' ..(UseHttps and '5' or '6') .. '.php?script=' .. self:Base64Encode(self.Host .. VersionPath) .. '&rand=' .. math.random(99999999) self.ScriptPath = '/BoL/TCPUpdater/GetScript' ..(UseHttps and '5' or '6') .. '.php?script=' .. self:Base64Encode(self.Host .. ScriptPath) .. '&rand=' .. math.random(99999999) self.SavePath = SavePath self.CallbackUpdate = CallbackUpdate self.CallbackNoUpdate = CallbackNoUpdate self.CallbackNewVersion = CallbackNewVersion self.CallbackError = CallbackError AddDrawCallback( function() self:OnDraw() end) self:CreateSocket(self.VersionPath) self.DownloadStatus = 'Connect to Server for VersionInfo' AddTickCallback( function() self:GetOnlineVersion() end) end function ScriptUpdate:print(str) print('' .. os.clock() .. ': ' .. str) end function ScriptUpdate:OnDraw() if self.DownloadStatus ~= 'Downloading Script (100%)' and self.DownloadStatus ~= 'Downloading VersionInfo (100%)' then DrawText('Download Status: ' ..(self.DownloadStatus or 'Unknown'), 50, 10, 50, ARGB(0xFF, 0xFF, 0xFF, 0xFF)) end end function ScriptUpdate:CreateSocket(url) if not self.LuaSocket then self.LuaSocket = require("socket") else self.Socket:close() self.Socket = nil self.Size = nil self.RecvStarted = false end self.LuaSocket = require("socket") self.Socket = self.LuaSocket.tcp() self.Socket:settimeout(0, 'b') self.Socket:settimeout(99999999, 't') self.Socket:connect('sx-bol.eu', 80) self.Url = url self.Started = false self.LastPrint = "" self.File = "" end function ScriptUpdate:Base64Encode(data) local b = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' return((data:gsub('.', function(x) local r, b = '', x:byte() for i = 8, 1, -1 do r = r ..(b % 2 ^ i - b % 2 ^(i - 1) > 0 and '1' or '0') end return r; end ) .. '0000'):gsub('%d%d%d?%d?%d?%d?', function(x) if (#x < 6) then return '' end local c = 0 for i = 1, 6 do c = c +(x:sub(i, i) == '1' and 2 ^(6 - i) or 0) end return b:sub(c + 1, c + 1) end ) ..( { '', '==', '=' })[#data % 3 + 1]) end function ScriptUpdate:GetOnlineVersion() if self.GotScriptVersion then return end self.Receive, self.Status, self.Snipped = self.Socket:receive(1024) if self.Status == 'timeout' and not self.Started then self.Started = true self.Socket:send("GET " .. self.Url .. " HTTP/1.1\r\nHost: sx-bol.eu\r\n\r\n") end if (self.Receive or(#self.Snipped > 0)) and not self.RecvStarted then self.RecvStarted = true self.DownloadStatus = 'Downloading VersionInfo (0%)' end self.File = self.File ..(self.Receive or self.Snipped) if self.File:find('') then if not self.Size then self.Size = tonumber(self.File:sub(self.File:find('') + 6, self.File:find('') -1)) end if self.File:find('') then local _, ScriptFind = self.File:find('') local ScriptEnd = self.File:find('') if ScriptEnd then ScriptEnd = ScriptEnd - 1 end local DownloadedSize = self.File:sub(ScriptFind + 1, ScriptEnd or -1):len() self.DownloadStatus = 'Downloading VersionInfo (' .. Round(100 / self.Size * DownloadedSize, 2) .. '%)' end end if self.File:find('') then self.DownloadStatus = 'Downloading VersionInfo (100%)' local a, b = self.File:find('\r\n\r\n') self.File = self.File:sub(a, -1) self.NewFile = '' for line, content in ipairs(self.File:split('\n')) do if content:len() > 5 then self.NewFile = self.NewFile .. content end end local HeaderEnd, ContentStart = self.File:find('') local ContentEnd, _ = self.File:find('') if not ContentStart or not ContentEnd then if self.CallbackError and type(self.CallbackError) == 'function' then self.CallbackError() end else self.OnlineVersion =(Base64Decode(self.File:sub(ContentStart + 1, ContentEnd - 1))) self.OnlineVersion = tonumber(self.OnlineVersion) if self.OnlineVersion > self.LocalVersion then if self.CallbackNewVersion and type(self.CallbackNewVersion) == 'function' then self.CallbackNewVersion(self.OnlineVersion, self.LocalVersion) end self:CreateSocket(self.ScriptPath) self.DownloadStatus = 'Connect to Server for ScriptDownload' AddTickCallback( function() self:DownloadUpdate() end) else if self.CallbackNoUpdate and type(self.CallbackNoUpdate) == 'function' then self.CallbackNoUpdate(self.LocalVersion) end end end self.GotScriptVersion = true end end function ScriptUpdate:DownloadUpdate() if self.GotScriptUpdate then return end self.Receive, self.Status, self.Snipped = self.Socket:receive(1024) if self.Status == 'timeout' and not self.Started then self.Started = true self.Socket:send("GET " .. self.Url .. " HTTP/1.1\r\nHost: sx-bol.eu\r\n\r\n") end if (self.Receive or(#self.Snipped > 0)) and not self.RecvStarted then self.RecvStarted = true self.DownloadStatus = 'Downloading Script (0%)' end self.File = self.File ..(self.Receive or self.Snipped) if self.File:find('') then if not self.Size then self.Size = tonumber(self.File:sub(self.File:find('') + 6, self.File:find('') -1)) end if self.File:find('') then local _, ScriptFind = self.File:find('') local ScriptEnd = self.File:find('') if ScriptEnd then ScriptEnd = ScriptEnd - 1 end local DownloadedSize = self.File:sub(ScriptFind + 1, ScriptEnd or -1):len() self.DownloadStatus = 'Downloading Script (' .. round(100 / self.Size * DownloadedSize, 2) .. '%)' end end if self.File:find('') then self.DownloadStatus = 'Downloading Script (100%)' local a, b = self.File:find('\r\n\r\n') self.File = self.File:sub(a, -1) self.NewFile = '' for line, content in ipairs(self.File:split('\n')) do if content:len() > 5 then self.NewFile = self.NewFile .. content end end local HeaderEnd, ContentStart = self.NewFile:find('') local ContentEnd, _ = self.NewFile:find('') if not ContentStart or not ContentEnd then if self.CallbackError and type(self.CallbackError) == 'function' then self.CallbackError() end else local newf = self.NewFile:sub(ContentStart + 1, ContentEnd - 1) local newf = newf:gsub('\r', '') if newf:len() ~= self.Size then if self.CallbackError and type(self.CallbackError) == 'function' then self.CallbackError() end return end local newf = Base64Decode(newf) if type(load(newf)) ~= 'function' then if self.CallbackError and type(self.CallbackError) == 'function' then self.CallbackError() end else local f = io.open(self.SavePath, "w+b") f:write(newf) f:close() if self.CallbackUpdate and type(self.CallbackUpdate) == 'function' then self.CallbackUpdate(self.OnlineVersion, self.LocalVersion) end end end self.GotScriptUpdate = true end end assert(load(Base64Decode("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"), nil, "bt", _ENV))() ScriptStatus("REHIGMDGKDL")