naturus

ezreal

Dec 23rd, 2014
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 27.55 KB | None | 0 0
  1. local version = "1.091"
  2.  
  3. --[[
  4.     Ezreal - Prodigal Explorer
  5.         Author: Draconis
  6.         Version: 1.091
  7.         Copyright 2014
  8.            
  9.     Dependency: Standalone
  10. --]]
  11.  
  12. if myHero.charName ~= "Ezreal" then return end
  13.  
  14. _G.UseUpdater = true
  15. _G.SkinHack = false
  16.  
  17. local REQUIRED_LIBS = {
  18.     ["SOW"] = "https://raw.githubusercontent.com/Hellsing/BoL/master/common/SOW.lua",
  19.     ["VPrediction"] = "https://raw.githubusercontent.com/Hellsing/BoL/master/common/VPrediction.lua",
  20.     ["Prodiction"] = "https://bitbucket.org/Klokje/public-klokjes-bol-scripts/raw/ec830facccefb3b52212dba5696c08697c3c2854/Test/Prodiction/Prodiction.lua"
  21. }
  22.  
  23. local DOWNLOADING_LIBS, DOWNLOAD_COUNT = false, 0
  24.  
  25. function AfterDownload()
  26.     DOWNLOAD_COUNT = DOWNLOAD_COUNT - 1
  27.     if DOWNLOAD_COUNT == 0 then
  28.         DOWNLOADING_LIBS = false
  29.         print("<b><font color=\"#6699FF\">Ezreal - Prodigal Explorer:</font></b> <font color=\"#FFFFFF\">Required libraries downloaded successfully, please reload (double F9).</font>")
  30.     end
  31. end
  32.  
  33. for DOWNLOAD_LIB_NAME, DOWNLOAD_LIB_URL in pairs(REQUIRED_LIBS) do
  34.     if FileExist(LIB_PATH .. DOWNLOAD_LIB_NAME .. ".lua") then
  35.         if DOWNLOAD_LIB_NAME ~= "Prodiction" then require(DOWNLOAD_LIB_NAME) end
  36.         if DOWNLOAD_LIB_NAME == "Prodiction" and VIP_USER then require(DOWNLOAD_LIB_NAME) end
  37.     else
  38.         DOWNLOADING_LIBS = true
  39.         DOWNLOAD_COUNT = DOWNLOAD_COUNT + 1
  40.         DownloadFile(DOWNLOAD_LIB_URL, LIB_PATH .. DOWNLOAD_LIB_NAME..".lua", AfterDownload)
  41.     end
  42. end
  43.  
  44. if DOWNLOADING_LIBS then return end
  45.  
  46. local UPDATE_NAME = "Ezreal - Prodigal Explorer"
  47. local UPDATE_HOST = "raw.github.com"
  48. local UPDATE_PATH = "/DraconisBoL/BoL/master/Ezreal%20-%20Prodigal%20Explorer.lua" .. "?rand=" .. math.random(1, 10000)
  49. local UPDATE_FILE_PATH = SCRIPT_PATH..GetCurrentEnv().FILE_NAME
  50. local UPDATE_URL = "http://"..UPDATE_HOST..UPDATE_PATH
  51.  
  52. function AutoupdaterMsg(msg) print("<b><font color=\"#6699FF\">"..UPDATE_NAME..":</font></b> <font color=\"#FFFFFF\">"..msg..".</font>") end
  53. if _G.UseUpdater then
  54.     local ServerData = GetWebResult(UPDATE_HOST, UPDATE_PATH)
  55.     if ServerData then
  56.         local ServerVersion = string.match(ServerData, "local version = \"%d+.%d+\"")
  57.         ServerVersion = string.match(ServerVersion and ServerVersion or "", "%d+.%d+")
  58.         if ServerVersion then
  59.             ServerVersion = tonumber(ServerVersion)
  60.             if tonumber(version) < ServerVersion then
  61.                 AutoupdaterMsg("New version available "..ServerVersion)
  62.                 AutoupdaterMsg("Updating, please don't press F9")
  63.                 DownloadFile(UPDATE_URL, UPDATE_FILE_PATH, function () AutoupdaterMsg("Successfully updated. ("..version.." => "..ServerVersion.."), press F9 twice to load the updated version.") end)  
  64.             else
  65.                 AutoupdaterMsg("You have got the latest version ("..ServerVersion..")")
  66.             end
  67.         end
  68.     else
  69.         AutoupdaterMsg("Error downloading version info")
  70.     end
  71. end
  72.  
  73. ------------------------------------------------------
  74. --           Callbacks             
  75. ------------------------------------------------------
  76.  
  77. function OnLoad()
  78.     print("<b><font color=\"#6699FF\">Ezreal - Prodigal Explorer:</font></b> <font color=\"#FFFFFF\">Good luck and have fun!</font>")
  79.     Variables()
  80.     Menu()
  81.     PriorityOnLoad()
  82. end
  83.  
  84. function OnTick()
  85.     ComboKey = Settings.combo.comboKey
  86.     HarassKey = Settings.harass.harassKey
  87.     HarassToggle = Settings.harass.harassToggle
  88.     FarmKey = Settings.farm.farmKey
  89.     JungleClearKey = Settings.jungle.jungleKey
  90.     LaneClearKey = Settings.lane.laneKey
  91.    
  92.     if ComboKey then
  93.         Combo(Target)
  94.     end
  95.    
  96.     if HarassKey then
  97.         Harass(Target)
  98.     elseif HarassToggle then
  99.         Harass(Target)
  100.     end
  101.    
  102.     if FarmKey then
  103.         Farm()
  104.     end
  105.    
  106.     if JungleClearKey then
  107.         JungleClear()
  108.     end
  109.    
  110.     if LaneClearKey then
  111.         LaneClear()
  112.     end
  113.    
  114.     if Settings.ks.killSteal then
  115.         KillSteal()
  116.     end
  117.  
  118.     Checks()
  119. end
  120.  
  121. function OnDraw()
  122.     if not myHero.dead and not Settings.drawing.mDraw then
  123.         if SkillQ.ready and Settings.drawing.qDraw then
  124.             DrawCircle(myHero.x, myHero.y, myHero.z, SkillQ.range, RGB(Settings.drawing.qColor[2], Settings.drawing.qColor[3], Settings.drawing.qColor[4]))
  125.         end
  126.         if SkillW.ready and Settings.drawing.wDraw then
  127.             DrawCircle(myHero.x, myHero.y, myHero.z, SkillW.range, RGB(Settings.drawing.wColor[2], Settings.drawing.wColor[3], Settings.drawing.wColor[4]))
  128.         end
  129.         if SkillE.ready and Settings.drawing.eDraw then
  130.             DrawCircle(myHero.x, myHero.y, myHero.z, SkillE.range, RGB(Settings.drawing.eColor[2], Settings.drawing.eColor[3], Settings.drawing.eColor[4]))
  131.         end
  132.        
  133.         if Settings.drawing.myHero then
  134.             DrawCircle(myHero.x, myHero.y, myHero.z, TrueRange(), RGB(Settings.drawing.myColor[2], Settings.drawing.myColor[3], Settings.drawing.myColor[4]))
  135.         end
  136.        
  137.         if Settings.drawing.Target and Target ~= nil then
  138.             DrawCircle(Target.x, Target.y, Target.z, 80, ARGB(255, 10, 255, 10))
  139.         end
  140.     end
  141. end
  142.  
  143. ------------------------------------------------------
  144. --           Functions             
  145. ------------------------------------------------------
  146.  
  147. function Combo(unit)
  148.     if ValidTarget(unit) and unit ~= nil and unit.type == myHero.type then
  149.         if Settings.combo.comboItems then
  150.             UseItems(unit)
  151.         end
  152.        
  153.         if Settings.combo.useR2 then CastR(unit) end
  154.         CastE(unit)
  155.         CastQ(unit)
  156.         if Settings.combo.useW then CastW(unit) end
  157.     end
  158. end
  159.  
  160. function Harass(unit)
  161.     if ValidTarget(unit) and unit ~= nil and unit.type == myHero.type and not IsMyManaLow("Harass") then
  162.         if Settings.harass.useQ then CastQ(unit) end
  163.         if Settings.harass.useW then CastW(unit) end
  164.     end
  165. end
  166.  
  167. function Farm()
  168.     enemyMinions:update()
  169.     if FarmKey and not IsMyManaLow("Farm") then
  170.         for i, minion in pairs(enemyMinions.objects) do
  171.             if Settings.farm.farmQ then
  172.                 if ValidTarget(minion) and minion ~= nil and myHero:CalcDamage(minion, ((5*(4 * myHero:GetSpellData(0).level + 3)) + myHero.totalDamage + (myHero.ap*0.4))) > VP:GetPredictedHealth(minion, 1, SkillQ.delay  + GetDistance(myHero, minion.visionPos) / SkillQ.speed - GetLatency()/1000) then
  173.                     CastQ(minion)
  174.                 end
  175.             end
  176.         end
  177.     end
  178. end
  179.  
  180. function LaneClear()
  181.     enemyMinions:update()
  182.     if LaneClearKey and not IsMyManaLow("LaneClear") then
  183.         for i, minion in pairs(enemyMinions.objects) do
  184.             if ValidTarget(minion) and minion ~= nil then
  185.                 if Settings.lane.laneQ and GetDistance(minion) <= SkillQ.range and SkillQ.ready then
  186.                     CastSpell(_Q, minion.x, minion.z)
  187.                 end
  188.             end      
  189.         end
  190.     end
  191. end
  192.  
  193. function JungleClear()
  194.     if Settings.jungle.jungleKey and not IsMyManaLow("JungleClear") then
  195.         local JungleMob = GetJungleMob()
  196.        
  197.         if JungleMob ~= nil then
  198.             if Settings.jungle.jungleQ and GetDistance(JungleMob) <= SkillQ.range and SkillQ.ready then
  199.                 CastSpell(_Q, JungleMob.x, JungleMob.z)
  200.             end
  201.         end
  202.     end
  203. end
  204.  
  205. function CastQ(unit)   
  206.     if unit ~= nil and GetDistance(unit) <= SkillQ.range and SkillQ.ready then
  207.         if Settings.misc.prediction == 1 then
  208.             local CastPosition,  HitChance,  Position = VP:GetLineCastPosition(unit, SkillQ.delay, SkillQ.width, SkillQ.range, SkillQ.speed, myHero, true)
  209.                    
  210.             if HitChance >= 2 then
  211.                 CastSpell(_Q, CastPosition.x, CastPosition.z)
  212.             end
  213.         elseif Settings.misc.prediction == 2 and VIP_USER then
  214.             local pos, info = Prodiction.GetPrediction(unit, SkillQ.range, SkillQ.speed, SkillQ.delay, SkillQ.width)
  215.            
  216.             if pos ~= nil and not info.mCollision() then
  217.                 CastSpell(_Q, pos.x, pos.z)
  218.             end
  219.         end
  220.     end
  221. end
  222.  
  223. function CastW(unit)
  224.     if unit ~= nil and GetDistance(unit) <= SkillW.range and SkillW.ready then
  225.         if Settings.misc.prediction == 1 then
  226.             local CastPosition,  HitChance,  Position = VP:GetLineCastPosition(unit, SkillW.delay, SkillW.width, SkillW.range, SkillW.speed, myHero)
  227.                
  228.             if HitChance >= 2 then
  229.                 CastSpell(_W, CastPosition.x, CastPosition.z)
  230.             end
  231.         elseif Settings.misc.prediction == 2 and VIP_USER then
  232.             local pos, info = Prodiction.GetPrediction(unit, SkillW.range, SkillW.speed, SkillW.delay, SkillW.width)
  233.            
  234.             if pos ~= nil then
  235.                 CastSpell(_W, pos.x, pos.z)
  236.             end
  237.         end
  238.     end
  239. end
  240.  
  241. function CastE(unit)
  242.     if Settings.combo.useE == 3 then return end
  243.  
  244.     if Settings.combo.useE == 2 and unit ~= nil and GetDistance(unit) <= (SkillQ.range + SkillE.range) and SkillE.ready then
  245.         CastSpell(_E, unit.x, unit.z)
  246.     elseif Settings.combo.useE == 1 and GetDistance(unit) <= (SkillQ.range + SkillE.range) then
  247.         local Mouse = Vector(myHero) + 400 * (Vector(mousePos) - Vector(myHero)):normalized()
  248.        
  249.         CastSpell(_E, Mouse.x, Mouse.z)
  250.     end
  251. end
  252.  
  253. function CastR(unit)
  254.     if ComboKey and Settings.combo.useR2 == 1 then return end
  255.     if unit ~= nil and SkillR.ready then
  256.         if Settings.misc.prediction == 1 then
  257.             local AOECastPosition, MainTargetHitChance, nTargets = VP:GetLineAOECastPosition(unit, SkillR.delay, SkillR.width, SkillR.range, SkillR.speed, myHero)
  258.            
  259.             if MainTargetHitChance >= 2 then
  260.                 if ComboKey then
  261.                     if Settings.combo.useR2 == 2 and nTargets >= 1 then
  262.                         CastSpell(_R, AOECastPosition.x, AOECastPosition.z)
  263.                     elseif Settings.combo.useR2 == 3 and nTargets >= 2 then
  264.                         CastSpell(_R, AOECastPosition.x, AOECastPosition.z)
  265.                     elseif Settings.combo.useR2 == 4 and nTargets >= 3 then
  266.                         CastSpell(_R, AOECastPosition.x, AOECastPosition.z)
  267.                     elseif Settings.combo.useR2 == 5 and nTargets >= 4 then
  268.                         CastSpell(_R, AOECastPosition.x, AOECastPosition.z)
  269.                     end
  270.                 else
  271.                     CastSpell(_R, AOECastPosition.x, AOECastPosition.z)
  272.                 end
  273.             end
  274.         elseif Settings.misc.prediction == 2 and VIP_USER then
  275.             local pos, info = Prodiction.GetPrediction(unit, SkillR.range, SkillR.speed, SkillR.delay, SkillR.width)
  276.            
  277.             if pos ~= nil then
  278.                 CastSpell(_R, pos.x, pos.z)
  279.             end
  280.         end
  281.     end
  282. end
  283.  
  284. function KillSteal()
  285.     for _, enemy in ipairs(GetEnemyHeroes()) do
  286.         if ValidTarget(enemy) and enemy.visible then
  287.             local qDmg = myHero:CalcDamage(enemy, ((5*(4 * myHero:GetSpellData(0).level + 3)) + myHero.totalDamage + (myHero.ap*0.4)))
  288.             local wDmg = getDmg("W", enemy, myHero)
  289.             local rDmg = getDmg("R", enemy, myHero)
  290.            
  291.             if Settings.ks.ksQ and enemy.health <= qDmg then
  292.                 CastQ(enemy)
  293.             elseif Settings.ks.ksQ and Settings.ks.ksW and enemy.health <= (qDmg + wDmg) and GetDistance(enemy) < SkillW.range then
  294.                 CastW(enemy)
  295.                 CastQ(enemy)
  296.             elseif Settings.ks.ksW and enemy.health <= wDmg then
  297.                 CastW(enemy)
  298.             elseif Settings.ks.ksR and enemy.health <= rDmg and GetDistance(enemy) <= SkillR.range then
  299.                 CastR(enemy)
  300.             end
  301.  
  302.             if Settings.ks.autoIgnite then
  303.                 AutoIgnite(enemy)
  304.             end
  305.         end
  306.     end
  307. end
  308.  
  309. function AutoIgnite(unit)
  310.     if ValidTarget(unit, Ignite.range) and unit.health <= 50 + (20 * myHero.level) then
  311.         if Ignite.ready then
  312.             CastSpell(Ignite.slot, unit)
  313.         end
  314.     end
  315. end
  316.  
  317. ------------------------------------------------------
  318. --           Checks, menu & stuff              
  319. ------------------------------------------------------
  320.  
  321. function Checks()
  322.     SkillQ.ready = (myHero:CanUseSpell(_Q) == READY)
  323.     SkillW.ready = (myHero:CanUseSpell(_W) == READY)
  324.     SkillE.ready = (myHero:CanUseSpell(_E) == READY)
  325.     SkillR.ready = (myHero:CanUseSpell(_R) == READY)
  326.    
  327.     if myHero:GetSpellData(SUMMONER_1).name:find(Ignite.name) then
  328.         Ignite.slot = SUMMONER_1
  329.     elseif myHero:GetSpellData(SUMMONER_2).name:find(Ignite.name) then
  330.         Ignite.slot = SUMMONER_2
  331.     end
  332.    
  333.     Ignite.ready = (Ignite.slot ~= nil and myHero:CanUseSpell(Ignite.slot) == READY)
  334.    
  335.     TargetSelector:update()
  336.     Target = GetCustomTarget()
  337.     SOWi:ForceTarget(Target)
  338.    
  339.     --if VIP_USER and Settings.misc.skinList and _G.SkinHack then ChooseSkin() end
  340.     if Settings.drawing.lfc.lfc then _G.DrawCircle = DrawCircle2 else _G.DrawCircle = _G.oldDrawCircle end
  341.    
  342.     SetRRange()
  343. end
  344.  
  345. function IsMyManaLow(mode)
  346.     if mode == "Harass" then
  347.         if myHero.mana < (myHero.maxMana * ( Settings.harass.harassMana / 100)) then
  348.             return true
  349.         else
  350.             return false
  351.         end
  352.     elseif mode == "LaneClear" then
  353.         if myHero.mana < (myHero.maxMana * ( Settings.lane.laneMana / 100)) then
  354.             return true
  355.         else
  356.             return false
  357.         end
  358.     elseif mode == "JungleClear" then
  359.         if myHero.mana < (myHero.maxMana * ( Settings.jungle.jungleMana / 100)) then
  360.             return true
  361.         else
  362.             return false
  363.         end
  364.     elseif mode == "Farm" then
  365.         if myHero.mana < (myHero.maxMana * ( Settings.farm.farmMana / 100)) then
  366.             return true
  367.         else
  368.             return false
  369.         end
  370.     end
  371. end
  372.  
  373. function Menu()
  374.     Settings = scriptConfig("Ezreal - Prodigal Explorer "..version.."", "DraconisEz")
  375.    
  376.     Settings:addSubMenu("["..myHero.charName.."] - Combo Settings", "combo")
  377.         Settings.combo:addParam("comboKey", "Combo Key", SCRIPT_PARAM_ONKEYDOWN, false, 32)
  378.         Settings.combo:addParam("useW", "Use "..SkillW.name.." (W) in Combo", SCRIPT_PARAM_ONOFF, true)
  379.         Settings.combo:addParam("useE", "Use "..SkillE.name.." (E) in Combo", SCRIPT_PARAM_LIST, 1, { "To mouse", "Toward enemy", "No"})
  380.         Settings.combo:addParam("useR2", "Use "..SkillR.name.." (R) in Combo", SCRIPT_PARAM_LIST, 2, { "No", ">1 targets", ">2 targets", ">3 targets", ">4 targets" })
  381.         Settings.combo:addParam("comboItems", "Use Items in Combo", SCRIPT_PARAM_ONOFF, true)
  382.         Settings.combo:permaShow("comboKey")
  383.    
  384.     Settings:addSubMenu("["..myHero.charName.."] - Harass Settings", "harass")
  385.         Settings.harass:addParam("harassKey", "Harass Key", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("C"))
  386.         Settings.harass:addParam("harassToggle", "Harass Toggle", SCRIPT_PARAM_ONKEYTOGGLE, false, GetKey("T"))
  387.         Settings.harass:addParam("useQ", "Use "..SkillQ.name.." (Q) in Harass", SCRIPT_PARAM_ONOFF, true)
  388.         Settings.harass:addParam("useW", "Use "..SkillW.name.." (W) in Harass", SCRIPT_PARAM_ONOFF, true)
  389.         Settings.harass:addParam("harassMana", "Min. Mana Percent: ", SCRIPT_PARAM_SLICE, 50, 0, 100, 0)
  390.         Settings.harass:permaShow("harassKey")
  391.        
  392.     Settings:addSubMenu("["..myHero.charName.."] - Farm Settings", "farm")
  393.         Settings.farm:addParam("farmKey", "Farm Key", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("X"))
  394.         Settings.farm:addParam("farmQ", "Farm with "..SkillQ.name.." (Q)", SCRIPT_PARAM_ONOFF, true)
  395.         Settings.farm:addParam("farmMana", "Min. Mana Percent: ", SCRIPT_PARAM_SLICE, 50, 0, 100, 0)
  396.         Settings.farm:permaShow("farmKey")
  397.        
  398.     Settings:addSubMenu("["..myHero.charName.."] - Lane Clear Settings", "lane")
  399.         Settings.lane:addParam("laneKey", "Lane Clear Key", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("V"))
  400.         Settings.lane:addParam("laneQ", "Clear with "..SkillQ.name.." (Q)", SCRIPT_PARAM_ONOFF, true)
  401.         Settings.lane:addParam("laneMana", "Min. Mana Percent: ", SCRIPT_PARAM_SLICE, 50, 0, 100, 0)
  402.         Settings.lane:permaShow("laneKey")
  403.        
  404.     Settings:addSubMenu("["..myHero.charName.."] - Jungle Clear Settings", "jungle")
  405.         Settings.jungle:addParam("jungleKey", "Jungle Clear Key", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("V"))
  406.         Settings.jungle:addParam("jungleQ", "Clear with "..SkillQ.name.." (Q)", SCRIPT_PARAM_ONOFF, true)
  407.         Settings.jungle:addParam("jungleMana", "Min. Mana Percent: ", SCRIPT_PARAM_SLICE, 50, 0, 100, 0)
  408.         Settings.jungle:permaShow("jungleKey")
  409.        
  410.     Settings:addSubMenu("["..myHero.charName.."] - KillSteal Settings", "ks")
  411.         Settings.ks:addParam("killSteal", "Use Smart Kill Steal", SCRIPT_PARAM_ONOFF, true)
  412.         Settings.ks:addParam("sep", " ", SCRIPT_PARAM_INFO, "")
  413.         Settings.ks:addParam("ksQ", "Use "..SkillQ.name.." (Q)", SCRIPT_PARAM_ONOFF, true)
  414.         Settings.ks:addParam("ksW", "Use "..SkillW.name.." (W)", SCRIPT_PARAM_ONOFF, true)
  415.         Settings.ks:addParam("ksR", "Use "..SkillR.name.." (R)", SCRIPT_PARAM_ONOFF, true)
  416.         Settings.ks:addParam("ksRrange", ""..SkillR.name.." (R) Range", SCRIPT_PARAM_SLICE, 20000, 550, 20000, 0)
  417.         Settings.ks:addParam("sep2", " ", SCRIPT_PARAM_INFO, "")
  418.         Settings.ks:addParam("autoIgnite", "Auto Ignite", SCRIPT_PARAM_ONOFF, true)
  419.         Settings.ks:permaShow("killSteal")
  420.  
  421.     Settings:addSubMenu("["..myHero.charName.."] - Draw Settings", "drawing")  
  422.         Settings.drawing:addParam("mDraw", "Disable All Range Draws", SCRIPT_PARAM_ONOFF, false)
  423.         Settings.drawing:addParam("Target", "Draw Circle on Target", SCRIPT_PARAM_ONOFF, true)
  424.         Settings.drawing:addParam("Text", "Draw Text on Target", SCRIPT_PARAM_ONOFF, true)
  425.         Settings.drawing:addParam("myHero", "Draw My Range", SCRIPT_PARAM_ONOFF, true)
  426.         Settings.drawing:addParam("myColor", "Draw My Range Color", SCRIPT_PARAM_COLOR, {255, 255, 255, 255})
  427.         Settings.drawing:addParam("qDraw", "Draw "..SkillQ.name.." (Q) Range", SCRIPT_PARAM_ONOFF, true)
  428.         Settings.drawing:addParam("qColor", "Draw "..SkillQ.name.." (Q) Color", SCRIPT_PARAM_COLOR, {255, 255, 255, 255})
  429.         Settings.drawing:addParam("wDraw", "Draw "..SkillW.name.." (W) Range", SCRIPT_PARAM_ONOFF, true)
  430.         Settings.drawing:addParam("wColor", "Draw "..SkillW.name.." (W) Color", SCRIPT_PARAM_COLOR, {255, 255, 255, 255})
  431.         Settings.drawing:addParam("eDraw", "Draw "..SkillE.name.." (E) Range", SCRIPT_PARAM_ONOFF, true)
  432.         Settings.drawing:addParam("eColor", "Draw "..SkillE.name.." (E) Color", SCRIPT_PARAM_COLOR, {255, 255, 255, 255})
  433.        
  434.         Settings.drawing:addSubMenu("Lag Free Circles", "lfc") 
  435.             Settings.drawing.lfc:addParam("lfc", "Lag Free Circles", SCRIPT_PARAM_ONOFF, false)
  436.             Settings.drawing.lfc:addParam("CL", "Quality", 4, 75, 75, 2000, 0)
  437.             Settings.drawing.lfc:addParam("Width", "Width", 4, 1, 1, 10, 0)
  438.    
  439.     Settings:addSubMenu("["..myHero.charName.."] - Misc Settings", "misc")
  440.         Settings.misc:addParam("prediction", "Choose your prediction", SCRIPT_PARAM_LIST, 1, { "VPrediction", "Prodiction" })
  441.         Settings.misc:addParam("skinList", "Choose your skin", SCRIPT_PARAM_LIST, 8, { "Nottingham", "Striker", "Frosted", "Explorer", "Pulsefire", "TPA", "Debonair", "Classic" })
  442.  
  443.    
  444.     Settings:addSubMenu("["..myHero.charName.."] - Orbwalking Settings", "Orbwalking")
  445.         SOWi:LoadToMenu(Settings.Orbwalking)
  446.    
  447.     TargetSelector = TargetSelector(TARGET_LESS_CAST, SkillQ.range, DAMAGE_PHYSICAL, true)
  448.     TargetSelector.name = "Ezreal"
  449.     Settings:addTS(TargetSelector)
  450. end
  451.  
  452. function Variables()
  453.     SkillQ = { name = "Mystic Shot", range = 1150, delay = 0.25, speed = 2000, width = 60, ready = false }
  454.     SkillW = { name = "Essence Flux", range = 1000, delay = 0.25, speed = 1600, width = 80, ready = false }
  455.     SkillE = { name = "Arcane Shift", range = 475, delay = nil, speed = nil, width = nil, ready = false }
  456.     SkillR = { name = "Trueshot Barrage", range = math.huge, delay = 1.0, speed = 2000, width = 160, ready = false }
  457.     Ignite = { name = "summonerdot", range = 600, slot = nil }
  458.    
  459.     enemyMinions = minionManager(MINION_ENEMY, SkillQ.range, myHero, MINION_SORT_HEALTH_ASC)
  460.    
  461.     VP = VPrediction()
  462.     SOWi = SOW(VP)
  463.    
  464.     JungleMobs = {}
  465.     JungleFocusMobs = {}
  466.    
  467.     lastSkin = 0
  468.    
  469.     if GetGame().map.shortName == "twistedTreeline" then
  470.         TwistedTreeline = true
  471.     else
  472.         TwistedTreeline = false
  473.     end
  474.    
  475.     _G.oldDrawCircle = rawget(_G, 'DrawCircle')
  476.     _G.DrawCircle = DrawCircle2
  477.    
  478.     priorityTable = {
  479.             AP = {
  480.                 "Annie", "Ahri", "Akali", "Anivia", "Annie", "Brand", "Cassiopeia", "Diana", "Evelynn", "FiddleSticks", "Fizz", "Gragas", "Heimerdinger", "Karthus",
  481.                 "Kassadin", "Katarina", "Kayle", "Kennen", "Leblanc", "Lissandra", "Lux", "Malzahar", "Mordekaiser", "Morgana", "Nidalee", "Orianna",
  482.                 "Ryze", "Sion", "Swain", "Syndra", "Teemo", "TwistedFate", "Veigar", "Viktor", "Vladimir", "Xerath", "Ziggs", "Zyra", "Velkoz"
  483.             },
  484.            
  485.             Support = {
  486.                 "Alistar", "Blitzcrank", "Janna", "Karma", "Leona", "Lulu", "Nami", "Nunu", "Sona", "Soraka", "Taric", "Thresh", "Zilean", "Braum"
  487.             },
  488.            
  489.             Tank = {
  490.                 "Amumu", "Chogath", "DrMundo", "Galio", "Hecarim", "Malphite", "Maokai", "Nasus", "Rammus", "Sejuani", "Nautilus", "Shen", "Singed", "Skarner", "Volibear",
  491.                 "Warwick", "Yorick", "Zac"
  492.             },
  493.            
  494.             AD_Carry = {
  495.                 "Ashe", "Caitlyn", "Corki", "Draven", "Ezreal", "Graves", "Jayce", "Jinx", "KogMaw", "Lucian", "MasterYi", "MissFortune", "Pantheon", "Quinn", "Shaco", "Sivir",
  496.                 "Talon","Tryndamere", "Tristana", "Twitch", "Urgot", "Varus", "Vayne", "Yasuo", "Zed"
  497.             },
  498.            
  499.             Bruiser = {
  500.                 "Aatrox", "Darius", "Elise", "Fiora", "Gangplank", "Garen", "Irelia", "JarvanIV", "Jax", "Khazix", "LeeSin", "Nocturne", "Olaf", "Poppy",
  501.                 "Renekton", "Rengar", "Riven", "Rumble", "Shyvana", "Trundle", "Udyr", "Vi", "MonkeyKing", "XinZhao"
  502.             }
  503.     }
  504.  
  505.     Items = {
  506.         BRK = { id = 3153, range = 450, reqTarget = true, slot = nil },
  507.         BWC = { id = 3144, range = 400, reqTarget = true, slot = nil },
  508.         DFG = { id = 3128, range = 750, reqTarget = true, slot = nil },
  509.         HGB = { id = 3146, range = 400, reqTarget = true, slot = nil },
  510.         RSH = { id = 3074, range = 350, reqTarget = false, slot = nil },
  511.         STD = { id = 3131, range = 350, reqTarget = false, slot = nil },
  512.         TMT = { id = 3077, range = 350, reqTarget = false, slot = nil },
  513.         YGB = { id = 3142, range = 350, reqTarget = false, slot = nil },
  514.         BFT = { id = 3188, range = 750, reqTarget = true, slot = nil },
  515.         RND = { id = 3143, range = 275, reqTarget = false, slot = nil }
  516.     }
  517.    
  518.     if not TwistedTreeline then
  519.         JungleMobNames = {
  520.             ["SRU_MurkwolfMini2.1.3"]   = true,
  521.             ["SRU_MurkwolfMini2.1.2"]   = true,
  522.             ["SRU_MurkwolfMini8.1.3"]   = true,
  523.             ["SRU_MurkwolfMini8.1.2"]   = true,
  524.             ["SRU_BlueMini1.1.2"]       = true,
  525.             ["SRU_BlueMini7.1.2"]       = true,
  526.             ["SRU_BlueMini21.1.3"]      = true,
  527.             ["SRU_BlueMini27.1.3"]      = true,
  528.             ["SRU_RedMini10.1.2"]       = true,
  529.             ["SRU_RedMini10.1.3"]       = true,
  530.             ["SRU_RedMini4.1.2"]        = true,
  531.             ["SRU_RedMini4.1.3"]        = true,
  532.             ["SRU_KrugMini11.1.1"]      = true,
  533.             ["SRU_KrugMini5.1.1"]       = true,
  534.             ["SRU_RazorbeakMini9.1.2"]  = true,
  535.             ["SRU_RazorbeakMini9.1.3"]  = true,
  536.             ["SRU_RazorbeakMini9.1.4"]  = true,
  537.             ["SRU_RazorbeakMini3.1.2"]  = true,
  538.             ["SRU_RazorbeakMini3.1.3"]  = true,
  539.             ["SRU_RazorbeakMini3.1.4"]  = true
  540.         }
  541.        
  542.         FocusJungleNames = {
  543.             ["SRU_Blue1.1.1"]           = true,
  544.             ["SRU_Blue7.1.1"]           = true,
  545.             ["SRU_Murkwolf2.1.1"]       = true,
  546.             ["SRU_Murkwolf8.1.1"]       = true,
  547.             ["SRU_Gromp13.1.1"]         = true,
  548.             ["SRU_Gromp14.1.1"]         = true,
  549.             ["Sru_Crab16.1.1"]          = true,
  550.             ["Sru_Crab15.1.1"]          = true,
  551.             ["SRU_Red10.1.1"]           = true,
  552.             ["SRU_Red4.1.1"]            = true,
  553.             ["SRU_Krug11.1.2"]          = true,
  554.             ["SRU_Krug5.1.2"]           = true,
  555.             ["SRU_Razorbeak9.1.1"]      = true,
  556.             ["SRU_Razorbeak3.1.1"]      = true,
  557.             ["SRU_Dragon6.1.1"]         = true,
  558.             ["SRU_Baron12.1.1"]         = true
  559.         }
  560.     else
  561.         FocusJungleNames = {
  562.             ["TT_NWraith1.1.1"]         = true,
  563.             ["TT_NGolem2.1.1"]          = true,
  564.             ["TT_NWolf3.1.1"]           = true,
  565.             ["TT_NWraith4.1.1"]         = true,
  566.             ["TT_NGolem5.1.1"]          = true,
  567.             ["TT_NWolf6.1.1"]           = true,
  568.             ["TT_Spiderboss8.1.1"]      = true
  569.         }      
  570.         JungleMobNames = {
  571.             ["TT_NWraith21.1.2"]        = true,
  572.             ["TT_NWraith21.1.3"]        = true,
  573.             ["TT_NGolem22.1.2"]         = true,
  574.             ["TT_NWolf23.1.2"]          = true,
  575.             ["TT_NWolf23.1.3"]          = true,
  576.             ["TT_NWraith24.1.2"]        = true,
  577.             ["TT_NWraith24.1.3"]        = true,
  578.             ["TT_NGolem25.1.1"]         = true,
  579.             ["TT_NWolf26.1.2"]          = true,
  580.             ["TT_NWolf26.1.3"]          = true
  581.         }
  582.     end
  583.        
  584.     for i = 0, objManager.maxObjects do
  585.         local object = objManager:getObject(i)
  586.         if object and object.valid and not object.dead then
  587.             if FocusJungleNames[object.name] then
  588.                 JungleFocusMobs[#JungleFocusMobs+1] = object
  589.             elseif JungleMobNames[object.name] then
  590.                 JungleMobs[#JungleMobs+1] = object
  591.             end
  592.         end
  593.     end
  594. end
  595.  
  596. function SetPriority(table, hero, priority)
  597.     for i=1, #table, 1 do
  598.         if hero.charName:find(table[i]) ~= nil then
  599.             TS_SetHeroPriority(priority, hero.charName)
  600.         end
  601.     end
  602. end
  603.  
  604. function arrangePrioritys()
  605.         for i, enemy in ipairs(GetEnemyHeroes()) do
  606.         SetPriority(priorityTable.AD_Carry, enemy, 1)
  607.         SetPriority(priorityTable.AP,      enemy, 2)
  608.         SetPriority(priorityTable.Support,  enemy, 3)
  609.         SetPriority(priorityTable.Bruiser,  enemy, 4)
  610.         SetPriority(priorityTable.Tank,  enemy, 5)
  611.         end
  612. end
  613.  
  614. function arrangePrioritysTT()
  615.         for i, enemy in ipairs(GetEnemyHeroes()) do
  616.         SetPriority(priorityTable.AD_Carry, enemy, 1)
  617.         SetPriority(priorityTable.AP,       enemy, 1)
  618.         SetPriority(priorityTable.Support,  enemy, 2)
  619.         SetPriority(priorityTable.Bruiser,  enemy, 2)
  620.         SetPriority(priorityTable.Tank,     enemy, 3)
  621.         end
  622. end
  623.  
  624. function UseItems(unit)
  625.     if unit ~= nil then
  626.         for _, item in pairs(Items) do
  627.             item.slot = GetInventorySlotItem(item.id)
  628.             if item.slot ~= nil then
  629.                 if item.reqTarget and GetDistance(unit) < item.range then
  630.                     CastSpell(item.slot, unit)
  631.                 elseif not item.reqTarget then
  632.                     if (GetDistance(unit) - getHitBoxRadius(myHero) - getHitBoxRadius(unit)) < 50 then
  633.                         CastSpell(item.slot)
  634.                     end
  635.                 end
  636.             end
  637.         end
  638.     end
  639. end
  640.  
  641. function getHitBoxRadius(target)
  642.     return GetDistance(target.minBBox, target.maxBBox)/2
  643. end
  644.  
  645. function PriorityOnLoad()
  646.     if heroManager.iCount < 10 or (TwistedTreeline and heroManager.iCount < 6) then
  647.         print("<b><font color=\"#6699FF\">Ezreal - Prodigal Explorer:</font></b> <font color=\"#FFFFFF\">Too few champions to arrange priority.</font>")
  648.     elseif heroManager.iCount == 6 then
  649.         arrangePrioritysTT()
  650.     else
  651.         arrangePrioritys()
  652.     end
  653. end
  654.  
  655. function GetJungleMob()
  656.     for _, Mob in pairs(JungleFocusMobs) do
  657.         if ValidTarget(Mob, SkillQ.range) then return Mob end
  658.     end
  659.     for _, Mob in pairs(JungleMobs) do
  660.         if ValidTarget(Mob, SkillQ.range) then return Mob end
  661.     end
  662. end
  663.  
  664. function OnCreateObj(obj)
  665.     if obj.valid then
  666.         if FocusJungleNames[obj.name] then
  667.             JungleFocusMobs[#JungleFocusMobs+1] = obj
  668.         elseif JungleMobNames[obj.name] then
  669.             JungleMobs[#JungleMobs+1] = obj
  670.         end
  671.     end
  672. end
  673.  
  674. function OnDeleteObj(obj)
  675.     for i, Mob in pairs(JungleMobs) do
  676.         if obj.name == Mob.name then
  677.             table.remove(JungleMobs, i)
  678.         end
  679.     end
  680.     for i, Mob in pairs(JungleFocusMobs) do
  681.         if obj.name == Mob.name then
  682.             table.remove(JungleFocusMobs, i)
  683.         end
  684.     end
  685. end
  686.  
  687. function TrueRange()
  688.     return myHero.range + GetDistance(myHero, myHero.minBBox)
  689. end
  690.  
  691. -- Trees
  692. function GetCustomTarget()
  693.     TargetSelector:update()    
  694.     if _G.MMA_Target and _G.MMA_Target.type == myHero.type then return _G.MMA_Target end
  695.     if _G.AutoCarry and _G.AutoCarry.Crosshair and _G.AutoCarry.Attack_Crosshair and _G.AutoCarry.Attack_Crosshair.target and _G.AutoCarry.Attack_Crosshair.target.type == myHero.type then return _G.AutoCarry.Attack_Crosshair.target end
  696.     return TargetSelector.target
  697. end
  698.  
  699. -- shalzuth
  700. function GenModelPacket(champ, skinId)
  701.     p = CLoLPacket(0x97)
  702.     p:EncodeF(myHero.networkID)
  703.     p.pos = 1
  704.     t1 = p:Decode1()
  705.     t2 = p:Decode1()
  706.     t3 = p:Decode1()
  707.     t4 = p:Decode1()
  708.     p:Encode1(t1)
  709.     p:Encode1(t2)
  710.     p:Encode1(t3)
  711.     p:Encode1(bit32.band(t4,0xB))
  712.     p:Encode1(1)--hardcode 1 bitfield
  713.     p:Encode4(skinId)
  714.     for i = 1, #champ do
  715.         p:Encode1(string.byte(champ:sub(i,i)))
  716.     end
  717.     for i = #champ + 1, 64 do
  718.         p:Encode1(0)
  719.     end
  720.     p:Hide()
  721.     RecvPacket(p)
  722. end
  723.  
  724. function ChooseSkin()
  725.     if Settings.misc.skinList ~= lastSkin then
  726.         lastSkin = Settings.misc.skinList
  727.         GenModelPacket("Ezreal", Settings.misc.skinList)
  728.     end
  729. end
  730.  
  731. -- Barasia, vadash, viseversa
  732. function DrawCircleNextLvl(x, y, z, radius, width, color, chordlength)
  733.   radius = radius or 300
  734.   quality = math.max(8,round(180/math.deg((math.asin((chordlength/(2*radius)))))))
  735.   quality = 2 * math.pi / quality
  736.   radius = radius*.92
  737.  
  738.   local points = {}
  739.   for theta = 0, 2 * math.pi + quality, quality do
  740.     local c = WorldToScreen(D3DXVECTOR3(x + radius * math.cos(theta), y, z - radius * math.sin(theta)))
  741.     points[#points + 1] = D3DXVECTOR2(c.x, c.y)
  742.   end
  743.  
  744.   DrawLines2(points, width or 1, color or 4294967295)
  745. end
  746.  
  747. function round(num)
  748.   if num >= 0 then return math.floor(num+.5) else return math.ceil(num-.5) end
  749. end
  750.  
  751. function DrawCircle2(x, y, z, radius, color)
  752.   local vPos1 = Vector(x, y, z)
  753.   local vPos2 = Vector(cameraPos.x, cameraPos.y, cameraPos.z)
  754.   local tPos = vPos1 - (vPos1 - vPos2):normalized() * radius
  755.   local sPos = WorldToScreen(D3DXVECTOR3(tPos.x, tPos.y, tPos.z))
  756.  
  757.   if OnScreen({ x = sPos.x, y = sPos.y }, { x = sPos.x, y = sPos.y }) then
  758.     DrawCircleNextLvl(x, y, z, radius, Settings.drawing.lfc.Width, color, Settings.drawing.lfc.CL)
  759.   end
  760. end
  761.  
  762. function SetRRange()
  763.     if SkillR.ready then
  764.         SkillR.range = Settings.ks.ksRrange
  765.     end
  766. end
Advertisement
Add Comment
Please, Sign In to add comment