Script7


SUBMITTED BY: Alerand

DATE: May 3, 2016, 9:37 a.m.

FORMAT: Text only

SIZE: 29.5 kB

HITS: 19888

  1. --[[
  2. Ez Caitlyn Beta test
  3. ]]
  4. if myHero.charName ~= "Caitlyn" then return end
  5. local Version = 0.9
  6. local AACharged = false
  7. local AARange = 650
  8. local QRange = 1250
  9. local ERange = 925
  10. local ECasted = false
  11. local RRange = (500 * myHero:GetSpellData(_R).level) + 1500
  12. local VP = nil
  13. local MenuTrueFalseQ = false
  14. local MenuTrueFalseE = false
  15. local scriptmsg = '<font color=\"#72427a\">[Ez Scripts]</font><font color=\"#888888\"> - </font><font color=\"#cccbbb\">Ez Caitlyn Loaded.</font>'
  16. -- Bol Tools Tracker --
  17. assert(load(Base64Decode("G0x1YVIAAQQEBAgAGZMNChoKAAAAAAAAAAAAAQQfAAAAAwAAAEQAAACGAEAA5QAAAJ1AAAGGQEAA5UAAAJ1AAAGlgAAACIAAgaXAAAAIgICBhgBBAOUAAQCdQAABhkBBAMGAAQCdQAABhoBBAOVAAQCKwICDhoBBAOWAAQCKwACEhoBBAOXAAQCKwICEhoBBAOUAAgCKwACFHwCAAAsAAAAEEgAAAEFkZFVubG9hZENhbGxiYWNrAAQUAAAAQWRkQnVnc3BsYXRDYWxsYmFjawAEDAAAAFRyYWNrZXJMb2FkAAQNAAAAQm9sVG9vbHNUaW1lAAQQAAAAQWRkVGlja0NhbGxiYWNrAAQGAAAAY2xhc3MABA4AAABTY3JpcHRUcmFja2VyAAQHAAAAX19pbml0AAQSAAAAU2VuZFZhbHVlVG9TZXJ2ZXIABAoAAABzZW5kRGF0YXMABAsAAABHZXRXZWJQYWdlAAkAAAACAAAAAwAAAAAAAwkAAAAFAAAAGABAABcAAIAfAIAABQAAAAxAQACBgAAAHUCAAR8AgAADAAAAAAQSAAAAU2VuZFZhbHVlVG9TZXJ2ZXIABAcAAAB1bmxvYWQAAAAAAAEAAAABAQAAAAAAAAAAAAAAAAAAAAAEAAAABQAAAAAAAwkAAAAFAAAAGABAABcAAIAfAIAABQAAAAxAQACBgAAAHUCAAR8AgAADAAAAAAQSAAAAU2VuZFZhbHVlVG9TZXJ2ZXIABAkAAABidWdzcGxhdAAAAAAAAQAAAAEBAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAAAAQAEDQAAAEYAwACAAAAAXYAAAUkAAABFAAAATEDAAMGAAABdQIABRsDAAKUAAADBAAEAXUCAAR8AgAAFAAAABA4AAABTY3JpcHRUcmFja2VyAAQSAAAAU2VuZFZhbHVlVG9TZXJ2ZXIABAUAAABsb2FkAAQMAAAARGVsYXlBY3Rpb24AAwAAAAAAQHpAAQAAAAYAAAAHAAAAAAADBQAAAAUAAAAMAEAAgUAAAB1AgAEfAIAAAgAAAAQSAAAAU2VuZFZhbHVlVG9TZXJ2ZXIABAgAAAB3b3JraW5nAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAEBAAAAAAAAAAAAAAAAAAAAAAAACAAAAA0AAAAAAAYyAAAABgBAAB2AgAAaQEAAF4AAgEGAAABfAAABF0AKgEYAQQBHQMEAgYABAMbAQQDHAMIBEEFCAN0AAAFdgAAACECAgUYAQQBHQMEAgYABAMbAQQDHAMIBEMFCAEbBQABPwcICDkEBAt0AAAFdgAAACEAAhUYAQQBHQMEAgYABAMbAQQDHAMIBBsFAAA9BQgIOAQEARoFCAE/BwgIOQQEC3QAAAV2AAAAIQACGRsBAAIFAAwDGgEIAAUEDAEYBQwBWQIEAXwAAAR8AgAAOAAAABA8AAABHZXRJbkdhbWVUaW1lcgADAAAAAAAAAAAECQAAADAwOjAwOjAwAAQGAAAAaG91cnMABAcAAABzdHJpbmcABAcAAABmb3JtYXQABAYAAAAlMDIuZgAEBQAAAG1hdGgABAYAAABmbG9vcgADAAAAAAAgrEAEBQAAAG1pbnMAAwAAAAAAAE5ABAUAAABzZWNzAAQCAAAAOgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAATAAAAAAAIKAAAAAEAAABGQEAAR4DAAIEAAAAhAAiABkFAAAzBQAKAAYABHYGAAVgAQQIXgAaAR0FBAhiAwQIXwAWAR8FBAhkAwAIXAAWARQGAAFtBAAAXQASARwFCAoZBQgCHAUIDGICBAheAAYBFAQABTIHCAsHBAgBdQYABQwGAAEkBgAAXQAGARQEAAUyBwgLBAQMAXUGAAUMBgABJAYAAIED3fx8AgAANAAAAAwAAAAAAAPA/BAsAAABvYmpNYW5hZ2VyAAQLAAAAbWF4T2JqZWN0cwAECgAAAGdldE9iamVjdAAABAUAAAB0eXBlAAQHAAAAb2JqX0hRAAQHAAAAaGVhbHRoAAQFAAAAdGVhbQAEBwAAAG15SGVybwAEEgAAAFNlbmRWYWx1ZVRvU2VydmVyAAQGAAAAbG9vc2UABAQAAAB3aW4AAAAAAAMAAAAAAAEAAQEAAAAAAAAAAAAAAAAAAAAAFAAAABQAAAACAAICAAAACkAAgB8AgAABAAAABAoAAABzY3JpcHRLZXkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABUAAAACAAUKAAAAhgBAAMAAgACdgAABGEBAARfAAICFAIAAjIBAAQABgACdQIABHwCAAAMAAAAEBQAAAHR5cGUABAcAAABzdHJpbmcABAoAAABzZW5kRGF0YXMAAAAAAAIAAAAAAAEBAAAAAAAAAAAAAAAAAAAAABYAAAAlAAAAAgATPwAAAApAAICGgEAAnYCAAAqAgICGAEEAxkBBAAaBQQAHwUECQQECAB2BAAFGgUEAR8HBAoFBAgBdgQABhoFBAIfBQQPBgQIAnYEAAcaBQQDHwcEDAcICAN2BAAEGgkEAB8JBBEECAwAdggABFgECAt0AAAGdgAAACoCAgYaAQwCdgIAACoCAhgoAxIeGQEQAmwAAABdAAIAKgMSHFwAAgArAxIeGQEUAh4BFAQqAAIqFAIAAjMBFAQEBBgBBQQYAh4FGAMHBBgAAAoAAQQIHAIcCRQDBQgcAB0NAAEGDBwCHw0AAwcMHAAdEQwBBBAgAh8RDAFaBhAKdQAACHwCAACEAAAAEBwAAAGFjdGlvbgAECQAAAHVzZXJuYW1lAAQIAAAAR2V0VXNlcgAEBQAAAGh3aWQABA0AAABCYXNlNjRFbmNvZGUABAkAAAB0b3N0cmluZwAEAwAAAG9zAAQHAAAAZ2V0ZW52AAQVAAAAUFJPQ0VTU09SX0lERU5USUZJRVIABAkAAABVU0VSTkFNRQAEDQAAAENPTVBVVEVSTkFNRQAEEAAAAFBST0NFU1NPUl9MRVZFTAAEEwAAAFBST0NFU1NPUl9SRVZJU0lPTgAECwAAAGluZ2FtZVRpbWUABA0AAABCb2xUb29sc1RpbWUABAYAAABpc1ZpcAAEAQAAAAAECQAAAFZJUF9VU0VSAAMAAAAAAADwPwMAAAAAAAAAAAQJAAAAY2hhbXBpb24ABAcAAABteUhlcm8ABAkAAABjaGFyTmFtZQAECwAAAEdldFdlYlBhZ2UABA4AAABib2wtdG9vbHMuY29tAAQXAAAAL2FwaS9ldmVudHM/c2NyaXB0S2V5PQAECgAAAHNjcmlwdEtleQAECQAAACZhY3Rpb249AAQLAAAAJmNoYW1waW9uPQAEDgAAACZib2xVc2VybmFtZT0ABAcAAAAmaHdpZD0ABA0AAAAmaW5nYW1lVGltZT0ABAgAAAAmaXNWaXA9AAAAAAACAAAAAAABAQAAAAAAAAAAAAAAAAAAAAAmAAAAKgAAAAMACiEAAADGQEAAAYEAAN2AAAHHwMAB3YCAAArAAIDHAEAAzADBAUABgACBQQEA3UAAAscAQADMgMEBQcEBAIABAAHBAQIAAAKAAEFCAgBWQYIC3UCAAccAQADMgMIBQcECAIEBAwDdQAACxwBAAMyAwgFBQQMAgYEDAN1AAAIKAMSHCgDEiB8AgAASAAAABAcAAABTb2NrZXQABAgAAAByZXF1aXJlAAQHAAAAc29ja2V0AAQEAAAAdGNwAAQIAAAAY29ubmVjdAADAAAAAAAAVEAEBQAAAHNlbmQABAUAAABHRVQgAAQSAAAAIEhUVFAvMS4wDQpIb3N0OiAABAUAAAANCg0KAAQLAAAAc2V0dGltZW91dAADAAAAAAAAAAAEAgAAAGIAAwAAAPyD15dBBAIAAAB0AAQKAAAATGFzdFByaW50AAQBAAAAAAQFAAAARmlsZQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAA="), nil, "bt", _ENV))()
  18. TrackerLoad("UcCRY46ZRhTYhKJD")
  19. -- Bol Tools Tracker --
  20. -- VP
  21. require "VPrediction"
  22. -- VP
  23. function CheckUpdates()
  24. local host = "www.scarjit.de"
  25. local ServerVersionDATA = GetWebResult(host, "/HiranN/BoL/Versions/EzCaitlyn.version")
  26. local ServerVersion = tonumber(ServerVersionDATA)
  27. if ServerVersionDATA then
  28. if ServerVersion then
  29. if ServerVersion > tonumber(Version) then
  30. print(scriptmsg.."<font color=\"#C2FDF3\"><b> Updating, don't press F9.</b></font>")
  31. DL = Download()
  32. file = "/HiranN/BoL/Scripts/EzCaitlyn.lua"
  33. name = GetCurrentEnv().FILE_NAME
  34. DL:newDL(host, file, name, SCRIPT_PATH, function()
  35. print(scriptmsg.."<font color=\"#C2FDF3\"><b> No updates found.</b></font>")
  36. end)
  37. else
  38. print(scriptmsg.."<font color=\"#C2FDF3\"><b> No updates found.</b></font>")
  39. end
  40. end
  41. end
  42. end
  43. function OnLoad()
  44. Menu()
  45. if VIP_USER then SkinLoad() end
  46. ts = TargetSelector(TARGET_LESS_CAST_PRIORITY, 1250, DAMAGE_PHYSICAL)
  47. tsAA = TargetSelector(TARGET_LESS_CAST_PRIORITY, AARange, DAMAGE_PHYSICAL)
  48. tsQ = TargetSelector(TARGET_LESS_CAST_PRIORITY, 1250, DAMAGE_PHYSICAL)
  49. tsW = TargetSelector(TARGET_LESS_CAST_PRIORITY, 260, DAMAGE_PHYSICAL)
  50. tsE = TargetSelector(TARGET_LESS_CAST_PRIORITY, 325, DAMAGE_PHYSICAL)
  51. tsR = TargetSelector(TARGET_LESS_CAST_PRIORITY, 3000, DAMAGE_PHYSICAL)
  52. ts.name = "Caitlyn"
  53. Menu:addTS(ts)
  54. enemyMinions = minionManager(MINION_ENEMY, 285, myHero, MINION_SORT_HEALTH_ASC)
  55. jungleMinions = minionManager(MINION_JUNGLE, 285, myHero, MINION_SORT_MAXHEALTH_DEC)
  56. Tables()
  57. VP = VPrediction()
  58. CheckUpdates()
  59. end
  60. function OnTick ()
  61. Checks()
  62. --print(HitChance)
  63. if Menu.qeSett.Qcollisions then MenuTrueFalseQ = true else MenuTrueFalseQ = false end
  64. if Menu.qeSett.Ecollisions then MenuTrueFalseE = true else MenuTrueFalseE = false end
  65. if Menu.key.comboKey then Combo(Target) end
  66. if Menu.h.useQToggle and Menu.key.harassKey then Harass(Target) end
  67. if Menu.key.clearKey then Clear() end
  68. if Menu.key.lasthitKey then Lasthit() end
  69. if Menu.killsteal.useR then AutoR() end
  70. if not Eready then ECasted = true else ECasted = false end
  71. end
  72. function OnApplyBuff(source, unit, buff)
  73. if source and source.isMe and buff and buff.name and buff.name:find("caitlynheadshot") then
  74. AACharged = true
  75. end
  76. if not source.isMe and not source.team ~= myHero.team and buff.type == 24 or buff.type == 5 or buff.type == 11 or buff.type == 8 then
  77. if unit.networkID ~= myHero.networkID and GetDistance(unit) <= 800 and Menu.wSett.useWAuto then
  78. CastSpell(_W, unit.x, unit.z)
  79. end
  80. end
  81. if unit and unit.team ~= not myHero.team and buff and buff.name == "recall" then
  82. if Menu.draws.RecallTracker then
  83. print("<font color=\"#C2FDF3\"><b>["..unit.charName.."] Is Recalling")
  84. end
  85. end
  86. if unit and buff and buff.name == "SummonerTeleport" then
  87. if unit.team == myHero.team and Menu.draws.TeleportTracker then
  88. print("<font color=\"#C2FDF3\"><b>["..unit.charName.."][Ally] Is Teleporting!")
  89. else
  90. print("<font color=\"#C2FDF3\"><b>["..unit.charName.."][Enemy] Is Teleporting!")
  91. end
  92. end
  93. end
  94. function OnRemoveBuff(unit, buff)
  95. if unit and unit.team ~= myHero.team and buff and buff.name == "recall" then
  96. if Menu.draws.RecallTracker then
  97. print("<font color=\"#C2FDF3\"><b>["..unit.charName.."] Recalled OR Cancelled Recall")
  98. end
  99. end
  100. end
  101. function OnProcessSpell (source, spell, enemy)
  102. if DashesTarget[spell.name] and spell.target and spell.target.isMe then
  103. if Menu.wSett.useWGap then
  104. CastSpell(_W, myHero.x, myHero.z)
  105. end
  106. end
  107. if DashesNoTarget[spell.name] and GetDistance(Target) <= 200 and (spell.target == nil or (spell.target and spell.target.isMe)) then
  108. if Menu.wSett.useWGapNo then
  109. CastSpell(_W, myHero.x, myHero.z)
  110. end
  111. end
  112. end
  113. function Tables()
  114. DashesTarget = {
  115. ['AkaliShadowDance'] = {true, Champ = 'Akali', spellKey = 'R'},
  116. ['Headbutt'] = {true, Champ = 'Alistar', spellKey = 'W'},
  117. ['DianaTeleport'] = {true, Champ = 'Diana', spellKey = 'R'},
  118. ['IreliaGatotsu'] = {true, Champ = 'Irelia', spellKey = 'Q'},
  119. ['JaxLeapStrike'] = {true, Champ = 'Jax', spellKey = 'Q'},
  120. ['JayceToTheSkies'] = {true, Champ = 'Jayce', spellKey = 'Q'},
  121. ['MaokaiUnstableGrowth'] = {true, Champ = 'Maokai', spellKey = 'W'},
  122. ['MonkeyKingNimbus'] = {true, Champ = 'MonkeyKing', spellKey = 'E'},
  123. ['Pantheon_LeapBash'] = {true, Champ = 'Pantheon', spellKey = 'W'},
  124. ['PoppyHeroicCharge'] = {true, Champ = 'Poppy', spellKey = 'E'},
  125. ['QuinnE'] = {true, Champ = 'Quinn', spellKey = 'E'},
  126. ['XenZhaoSweep'] = {true, Champ = 'XinZhao', spellKey = 'E'},
  127. ['blindmonkqtwo'] = {true, Champ = 'LeeSin', spellKey = 'Q'},
  128. ['FizzPiercingStrike'] = {true, Champ = 'Fizz', spellKey = 'Q'},
  129. ['RengarLeap'] = {true, Champ = 'Rengar', spellKey = 'Q/R'},
  130. ['YasuoDashWrapper'] = {true, Champ = 'Yasuo', spellKey = 'E'},
  131. }
  132. DashesNoTarget = {
  133. ['AatroxQ'] = {true, Champ = 'Aatrox', range = 1000, projSpeed = 1200, spellKey = 'Q'},
  134. ['GragasE'] = {true, Champ = 'Gragas', range = 600, projSpeed = 2000, spellKey = 'E'},
  135. ['HecarimUlt'] = {true, Champ = 'Hecarim', range = 1000, projSpeed = 1200, spellKey = 'R'},
  136. ['JarvanIVDragonStrike'] = {true, Champ = 'JarvanIV', range = 770, projSpeed = 2000, spellKey = 'Q'},
  137. ['JarvanIVCataclysm'] = {true, Champ = 'JarvanIV', range = 650, projSpeed = 2000, spellKey = 'R'},
  138. ['KhazixE'] = {true, Champ = 'Khazix', range = 900, projSpeed = 2000, spellKey = 'E'},
  139. ['khazixelong'] = {true, Champ = 'Khazix', range = 900, projSpeed = 2000, spellKey = 'E'},
  140. ['LeblancSlide'] = {true, Champ = 'Leblanc', range = 600, projSpeed = 2000, spellKey = 'W'},
  141. ['LeblancSlideM'] = {true, Champ = 'Leblanc', range = 600, projSpeed = 2000, spellKey = 'WMimic'},
  142. ['LeonaZenithBlade'] = {true, Champ = 'Leona', range = 900, projSpeed = 2000, spellKey = 'E'},
  143. ['UFSlash'] = {true, Champ = 'Malphite', range = 1000, projSpeed = 1800, spellKey = 'R'},
  144. ['RenektonSliceAndDice'] = {true, Champ = 'Renekton', range = 450, projSpeed = 2000, spellKey = 'E'},
  145. ['SejuaniArcticAssault'] = {true, Champ = 'Sejuani', range = 650, projSpeed = 2000, spellKey = 'Q'},
  146. ['ShenShadowDash'] = {true, Champ = 'Shen', range = 575, projSpeed = 2000, spellKey = 'E'},
  147. }
  148. end
  149. function Menu ()
  150. Menu = scriptConfig("Ez Caitlyn", "EZCait")
  151. Menu:addSubMenu("Combo", "c")
  152. Menu.c:addParam("useQ", "Use Q", SCRIPT_PARAM_ONOFF, true)
  153. Menu.c:addParam("useE", "Use E", SCRIPT_PARAM_ONOFF, true)
  154. Menu:addSubMenu("Harass", "h")
  155. Menu.h:addParam("useQToggle", "Auto Q in Harass Mode", SCRIPT_PARAM_ONKEYTOGGLE, false, string.byte("T"))
  156. Menu.h:permaShow("useQToggle")
  157. Menu.h:addParam("useQTSettings", "Q Settings in Toggle", SCRIPT_PARAM_LIST, 1, {"Always", "If E Not Ready", "Soon! Out of AA Range"})
  158. Menu:addSubMenu("Clear", "clearMenu")
  159. Menu.clearMenu:addParam("useQ", "Use Q", SCRIPT_PARAM_ONOFF, false)
  160. Menu.clearMenu:addParam("useE", "Use E", SCRIPT_PARAM_ONOFF, false)
  161. Menu:addSubMenu("Lasthit", "lasthitMenu")
  162. Menu.lasthitMenu:addParam("useQ", "Use Q", SCRIPT_PARAM_ONOFF, false)
  163. Menu.lasthitMenu:addParam("useE", "Use E", SCRIPT_PARAM_ONOFF, false)
  164. Menu:addSubMenu("W Settings", "wSett")
  165. Menu.wSett:addParam("useWAuto", "Auto W on CC'd enemies", SCRIPT_PARAM_ONOFF, true)
  166. Menu.wSett:addParam("useWGap", "Auto W on Targeted Dash Spells", SCRIPT_PARAM_ONOFF, true)
  167. Menu.wSett:addParam("useWGapNo", "Auto W on Non Targeted Dash Spells", SCRIPT_PARAM_ONOFF, true)
  168. Menu:addSubMenu("Q & E Settings", "qeSett")
  169. Menu.qeSett:addParam("Qcollisions", "Use Q Collision", SCRIPT_PARAM_ONOFF, true)
  170. Menu.qeSett:addParam("Ecollisions", "Use E Collision", SCRIPT_PARAM_ONOFF, true)
  171. Menu.qeSett:addParam("blank", "Choose your EQ Settings", SCRIPT_PARAM_INFO, " ")
  172. Menu.qeSett:addParam("useQEList", "EQ Settings", SCRIPT_PARAM_LIST, 1, {"EQ Combo", "Off"})
  173. Menu.qeSett:addParam("useQEQSettings", "Q Settings in EQ Mode", SCRIPT_PARAM_LIST, 1, {"Only in EQ Combo", "Always"})
  174. Menu.qeSett:addParam("useQEESettings", "E Settings in EQ Mode", SCRIPT_PARAM_LIST, 1, {"Only in EQ Combo", "Always"})
  175. Menu.qeSett:addParam("blank", "If EQ Settings is Off ^ This will be Off too.", SCRIPT_PARAM_INFO, "")
  176. Menu.qeSett:addParam("blank", "If you use EQ Settings let this Off!", SCRIPT_PARAM_INFO, " ")
  177. Menu.qeSett:addParam("useQList", "Q Settings", SCRIPT_PARAM_LIST, 1, {"Off", "If E Not Ready", "Always", "Soon! Out of AA Range"})
  178. Menu.qeSett:addParam("blank", "If you use EQ Settings let this Off!", SCRIPT_PARAM_INFO, " ")
  179. Menu.qeSett:addParam("useEList", "E Settings", SCRIPT_PARAM_LIST, 1, {"Off", "If Q Not Ready", "Always", "Soon! Out of AA Range"})
  180. Menu:addSubMenu("Key Settings", "key")
  181. Menu.key:addParam("comboKey", "Combo Key", SCRIPT_PARAM_ONKEYDOWN, false, string.byte(" "))
  182. Menu.key:permaShow("comboKey")
  183. Menu.key:addParam("clearKey", "Clear Key", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("V"))
  184. Menu.key:addParam("lasthitKey", "Lasthit Key", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("X"))
  185. Menu.key:addParam("harassKey", "Harass Mode", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("C"))
  186. Menu.key:permaShow("harassKey")
  187. Menu:addSubMenu("Killsteal", "killsteal")
  188. Menu.killsteal:addParam("blank", "Will Auto R if NOT in Combo Mode", SCRIPT_PARAM_INFO, " ")
  189. Menu.killsteal:addParam("useR", "Killsteal with R", SCRIPT_PARAM_ONOFF, true)
  190. Menu.killsteal:addParam("useRRange", "Use R Above Range", SCRIPT_PARAM_SLICE, 700, 0, 3000)
  191. Menu:addSubMenu("Skinchanger", "skin")
  192. Menu.skin:addParam("blank", "Choose your Skin!", SCRIPT_PARAM_INFO, " ")
  193. Menu:addSubMenu("Drawings", "draws")
  194. Menu.draws:addParam("CDTracker", "Use CD Tracker", SCRIPT_PARAM_ONOFF, true)
  195. Menu.draws:addParam("AARange", "AA Range", SCRIPT_PARAM_ONOFF, true)
  196. Menu.draws:addParam("RecallTracker", "Use Recallmessage", SCRIPT_PARAM_ONOFF, true)
  197. Menu.draws:addParam("TeleportTracker", "Use Teleportmessage", SCRIPT_PARAM_ONOFF, true)
  198. Menu:addParam("kl1", "Author:", SCRIPT_PARAM_INFO, "timo62")
  199. Menu:addParam("kl2", "Your Region:", SCRIPT_PARAM_INFO, GetGameRegion())
  200. Menu:addParam("kl3", "Your BoL ID:", SCRIPT_PARAM_INFO, GetUser())
  201. end
  202. function Combo(enemy)
  203. if ValidTarget(enemy) then
  204. -- Menu EQ Settings
  205. if Menu.qeSett.useQEList == 1 then
  206. if Menu.c.useE and Eready and Menu.c.useQ and Qready and GetDistance(enemy) <= 875 and Menu.qeSett.useQEQSettings == 1 and Menu.qeSett.useQEQSettings == 1 then
  207. CastE(enemy)
  208. CastQ(enemy)
  209. elseif Menu.c.useQ and Qready and not Eready and Menu.qeSett.useQEQSettings == 2 then
  210. CastQ(enemy)
  211. elseif Menu.c.useE and Eready and not Qready and Menu.qeSett.useQEESettings == 2 then
  212. CastE(enemy)
  213. end
  214. end
  215. -- Menu EQ Settings
  216. -- Menu Q Settings
  217. if Menu.qeSett.useQList == 2 and Menu.qeSett.useQEList == 2 then
  218. if Menu.c.useQ and Qready and not Eready then
  219. CastQ(enemy)
  220. end
  221. end
  222. if Menu.qeSett.useQList == 3 and Menu.qeSett.useQEList == 2 then
  223. if Menu.c.useQ and Qready --[[and GetDistance(enemy) >= AARange]] and GetDistance(enemy) <= QRange then
  224. CastQ(enemy)
  225. end
  226. end
  227. -- Menu Q Settings
  228. -- Menu E Settings
  229. if Menu.qeSett.useEList == 2 and Menu.qeSett.useQEList == 2 then
  230. if Menu.c.useE and Eready and not Qready then
  231. CastE(enemy)
  232. end
  233. end
  234. if Menu.qeSett.useEList == 3 and Menu.qeSett.useQEList == 2 then
  235. if Menu.c.useE and Eready --[[and GetDistance(enemy) >= AARange]] and GetDistance(enemy) <= ERange then
  236. CastE(enemy)
  237. end
  238. end
  239. end
  240. end
  241. function Harass (enemy)
  242. if ValidTarget(enemy) then
  243. if Menu.h.useQTSettings == 1 then
  244. CastSpell(_Q, enemy.x, enemy.z)
  245. elseif Menu.h.useQTSettings == 2 then
  246. if not Eready then
  247. CastSpell(_Q, enemy.x, enemy.z)
  248. end
  249. elseif Menu.h.useQTSettings == 3 then
  250. -- Out of AA Range soon
  251. end
  252. end
  253. end
  254. function Clear ()
  255. for _, minion in pairs(enemyMinions.objects) do
  256. if Menu.clearMenu.useE then CastSpell(_E, minion.x, minion.z) end
  257. if Menu.clearMenu.useQ then CastSpell(_Q, minion.x, minion.z) end
  258. end
  259. for _, minion in pairs(jungleMinions.objects) do
  260. if Menu.clearMenu.useE then CastSpell(_E, minion.x, minion.z) end
  261. if Menu.clearMenu.useQ then CastSpell(_Q, minion.x, minion.z) end
  262. end
  263. end
  264. function AutoR()
  265. for i, enemy in ipairs(GetEnemyHeroes()) do
  266. --rDmg calculation is from PewPewPew
  267. local rDmg = (((225*myHero:GetSpellData(_R).level) + (myHero.addDamage * 2)) * (100 / (100 + ((enemy.armor * myHero.armorPenPercent) - myHero.armorPen)))) - (enemy.hpRegen * (1 + (GetDistance(enemy) / 3000)))
  268. --^ from PewPewPew
  269. if Menu.killsteal.useR and ValidTarget(enemy) and GetDistance(enemy) <= Menu.killsteal.useRRange then
  270. if enemy.health <= rDmg then
  271. if not Menu.key.comboKey then
  272. CastSpell(_R, enemy)
  273. end
  274. end
  275. end
  276. end
  277. end
  278. function Lasthit ()
  279. if Menu.lasthitMenu.useE then
  280. for i, minion in pairs (enemyMinions.objects) do
  281. local eDmg = getDmg("E", minion, myHero)
  282. if Eready and eDmg >= (minion.health+20) then
  283. CastSpell(_E, minion.x, minion.z)
  284. end
  285. end
  286. end
  287. if Menu.lasthitMenu.useQ then
  288. for i, minion in pairs (enemyMinions.objects) do
  289. local qDmg = getDmg("Q", minion, myHero)
  290. if Qready and qDmg >= (minion.health+20) then
  291. CastSpell(_Q, minion.x, minion.z)
  292. end
  293. end
  294. end
  295. end
  296. function Checks()
  297. enemyMinions:update()
  298. jungleMinions:update()
  299. ts:update()
  300. tsQ:update()
  301. tsW:update()
  302. tsE:update()
  303. tsR:update()
  304. Qready = (myHero:CanUseSpell(_Q) == READY)
  305. Wready = (myHero:CanUseSpell(_W) == READY)
  306. Eready = (myHero:CanUseSpell(_E) == READY)
  307. Rready = (myHero:CanUseSpell(_R) == READY)
  308. Target = ts.target
  309. TargetR = tsR.target
  310. end
  311. function CastQ(enemy)
  312. if GetDistance(enemy) <= QRange and Qready then
  313. local CastPosition, HitChance, CastPos = VP:GetLineCastPosition(enemy, 0.625, 80, 1300, 2200, myHero, MenuTrueFalseQ)
  314. if HitChance >= 2 and GetDistance(CastPosition) <= QRange and GetDistance(CastPosition) >= 700 then
  315. CastSpell(_Q, CastPosition.x, CastPosition.z)
  316. end
  317. end
  318. end
  319. function CastE(enemy)
  320. if GetDistance(enemy) <= ERange and Eready then
  321. local CastPosition, HitChance, CastPos = VP:GetLineCastPosition(enemy, 0.4, 80, 1000, 2000, myHero, MenuTrueFalseE)
  322. if HitChance >= 2 and GetDistance(CastPosition) <= ERange and GetDistance(CastPosition) >= 700 then
  323. CastSpell(_E, CastPosition.x, CastPosition.z)
  324. end
  325. end
  326. end
  327. -- Credits PvPSuite
  328. function SkinLoad()
  329. Menu.skin:addParam('changeSkin', 'Change Skin', SCRIPT_PARAM_ONOFF, false);
  330. Menu.skin:setCallback('changeSkin', function(nV)
  331. if (nV) then
  332. SetSkin(myHero, Menu.skin.skinID)
  333. else
  334. SetSkin(myHero, -1)
  335. end
  336. end)
  337. Menu.skin:addParam('skinID', 'Skin', SCRIPT_PARAM_LIST, 1, {"Resistance", "Sheriff", "Safari", "Arctic Warfare", "Officer", "Headhunter", "Chroma Pack: Pink", "Chroma Pack: Green", "Chroma Pack: Blue","Lunar", "Classic"})
  338. Menu.skin:setCallback('skinID', function(nV)
  339. if (Menu.skin.changeSkin) then
  340. SetSkin(myHero, nV)
  341. end
  342. end)
  343. if (Menu.skin.changeSkin) then
  344. SetSkin(myHero, Menu.skin.skinID)
  345. end
  346. end
  347. -- Credits PvPSuite
  348. function DrawCircle3D(x, y, z, radius, width, color, quality)
  349. radius = radius or AARange
  350. quality = quality and 2 * math.pi / quality or 2 * math.pi / (radius / 5)
  351. local points = {}
  352. for theta = 0, 2 * math.pi + quality, quality do
  353. local c = WorldToScreen(D3DXVECTOR3(x + radius * math.cos(theta), y, z - radius * math.sin(theta)))
  354. points[#points + 1] = D3DXVECTOR2(c.x, c.y)
  355. end
  356. DrawLines2(points, width or 1, color or 2294967295)
  357. end
  358. function OnDraw()
  359. if Menu.draws.CDTracker then DrawCD() end
  360. if Menu.draws.AARange then DrawCircle3D(myHero.x, myHero.y, myHero.z) end
  361. end
  362. function GetHPBarPos(enemy)
  363. enemy.barData = {PercentageOffset = {x = -0.05, y = 0}}--GetEnemyBarData()
  364. local barPos = GetUnitHPBarPos(enemy)
  365. local barPosOffset = GetUnitHPBarOffset(enemy)
  366. local barOffset = { x = enemy.barData.PercentageOffset.x, y = enemy.barData.PercentageOffset.y }
  367. local barPosPercentageOffset = { x = enemy.barData.PercentageOffset.x, y = enemy.barData.PercentageOffset.y }
  368. local BarPosOffsetX = 171
  369. local BarPosOffsetY = 46
  370. local CorrectionY = 39
  371. local StartHpPos = 31
  372. barPos.x = math.floor(barPos.x + (barPosOffset.x - 0.5 + barPosPercentageOffset.x) * BarPosOffsetX + StartHpPos)
  373. barPos.y = math.floor(barPos.y + (barPosOffset.y - 0.5 + barPosPercentageOffset.y) * BarPosOffsetY + CorrectionY)
  374. local StartPos = Vector(barPos.x , barPos.y, 0)
  375. local EndPos = Vector(barPos.x + 108 , barPos.y , 0)
  376. return Vector(StartPos.x, StartPos.y, 0), Vector(EndPos.x, EndPos.y, 0)
  377. end
  378. function DrawCD()
  379. for i = 1, heroManager.iCount, 1 do
  380. local champ = heroManager:getHero(i)
  381. if champ ~= nil and champ ~= myHero and champ.visible and champ.dead == false then
  382. local barPos = GetHPBarPos(champ)
  383. if OnScreen(barPos.x, barPos.y) then
  384. local cd = {}
  385. cd[0] = math.ceil(champ:GetSpellData(SPELL_1).currentCd)
  386. cd[1] = math.ceil(champ:GetSpellData(SPELL_2).currentCd)
  387. cd[2] = math.ceil(champ:GetSpellData(SPELL_3).currentCd)
  388. cd[3] = math.ceil(champ:GetSpellData(SPELL_4).currentCd)
  389. local spellColor = {}
  390. spellColor[0] = 0xBBFFD700;
  391. spellColor[1] = 0xBBFFD700;
  392. spellColor[2] = 0xBBFFD700;
  393. spellColor[3] = 0xBBFFD700;
  394. if cd[0] == nil or cd[0] == 0 then cd[0] = "Q" spellColor[0] = 0xBBFFFFFF end
  395. if cd[1] == nil or cd[1] == 0 then cd[1] = "W" spellColor[1] = 0xBBFFFFFF end
  396. if cd[2] == nil or cd[2] == 0 then cd[2] = "E" spellColor[2] = 0xBBFFFFFF end
  397. if cd[3] == nil or cd[3] == 0 then cd[3] = "R" spellColor[3] = 0xBBFFFFFF end
  398. if champ:GetSpellData(SPELL_1).level == 0 then spellColor[0] = 0xBBFF0000 end
  399. if champ:GetSpellData(SPELL_2).level == 0 then spellColor[1] = 0xBBFF0000 end
  400. if champ:GetSpellData(SPELL_3).level == 0 then spellColor[2] = 0xBBFF0000 end
  401. if champ:GetSpellData(SPELL_4).level == 0 then spellColor[3] = 0xBBFF0000 end
  402. DrawRectangle(barPos.x-6, barPos.y-40, 80, 15, 0xBB202020)
  403. DrawText("[" .. cd[0] .. "]" ,12, barPos.x-5+2, barPos.y-40, spellColor[0])
  404. DrawText("[" .. cd[1] .. "]", 12, barPos.x+15+2, barPos.y-40, spellColor[1])
  405. DrawText("[" .. cd[2] .. "]", 12, barPos.x+35+2, barPos.y-40, spellColor[2])
  406. DrawText("[" .. cd[3] .. "]", 12, barPos.x+54+2, barPos.y-40, spellColor[3])
  407. end
  408. end
  409. end
  410. end
  411. class 'Download'
  412. function Download:__init()
  413. socket = require("socket")
  414. self.aktivedownloads = {}
  415. self.callbacks = {}
  416. AddTickCallback(function ()
  417. self:RemoveDone()
  418. end)
  419. class("Async")
  420. function Async:__init(host, filepath, localname, drawoffset, localpath)
  421. self.progress = 0
  422. self.host = host
  423. self.filepath = filepath
  424. self.localname = localname
  425. self.offset = drawoffset
  426. self.localpath = localpath
  427. self.CRLF = '\r\n'
  428. self.headsocket = socket.tcp()
  429. self.headsocket:settimeout(1)
  430. self.headsocket:connect(self.host, 80)
  431. self.headsocket:send('HEAD '..self.filepath..' HTTP/1.1'.. self.CRLF ..'Host: '..self.host.. self.CRLF ..'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'.. self.CRLF .. self.CRLF)
  432. self.HEADdata = ""
  433. self.DLdata = ""
  434. self.StartedDownload = false
  435. self.canDL = true
  436. AddTickCallback(function ()
  437. self:tick()
  438. end)
  439. AddDrawCallback(function ()
  440. self:draw()
  441. end)
  442. end
  443. function Async:tick()
  444. if self.progress == 100 then return end
  445. if self.HEADcStatus ~= "timeout" and self.HEADcStatus ~= "closed" then
  446. self.HEADfString, self.HEADcStatus, self.HEADpString = self.headsocket:receive(16);
  447. if self.HEADfString then
  448. self.HEADdata = self.HEADdata..self.HEADfString
  449. elseif self.HEADpString and #self.HEADpString > 0 then
  450. self.HEADdata = self.HEADdata..self.HEADpString
  451. end
  452. elseif self.HEADcStatus == "timeout" then
  453. self.headsocket:close()
  454. --Find Lenght
  455. local begin = string.find(self.HEADdata, "Length: ")
  456. if begin then
  457. self.HEADdata = string.sub(self.HEADdata,begin+8)
  458. local n = 0
  459. local _break = false
  460. for i=1, #self.HEADdata do
  461. local c = tonumber(string.sub(self.HEADdata,i,i))
  462. if c and _break == false then
  463. n = n+1
  464. else
  465. _break = true
  466. end
  467. end
  468. self.HEADdata = string.sub(self.HEADdata,1,n)
  469. self.StartedDownload = true
  470. self.HEADcStatus = "closed"
  471. end
  472. end
  473. if self.HEADcStatus == "closed" and self.StartedDownload == true and self.canDL == true then --Double Check
  474. self.canDL = false
  475. self.DLsocket = socket.tcp()
  476. self.DLsocket:settimeout(1)
  477. self.DLsocket:connect(self.host, 80)
  478. --Start Main Download
  479. self.DLsocket:send('GET '..self.filepath..' HTTP/1.1'.. self.CRLF ..'Host: '..self.host.. self.CRLF ..'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'.. self.CRLF .. self.CRLF)
  480. end
  481. if self.DLsocket and self.DLcStatus ~= "timeout" and self.DLcStatus ~= "closed" then
  482. self.DLfString, self.DLcStatus, self.DLpString = self.DLsocket:receive(1024);
  483. if ((self.DLfString) or (self.DLpString and #self.DLpString > 0)) then
  484. self.DLdata = self.DLdata .. (self.DLfString or self.DLpString)
  485. end
  486. elseif self.DLcStatus and self.DLcStatus == "timeout" then
  487. self.DLsocket:close()
  488. self.DLcStatus = "closed"
  489. self.DLdata = string.sub(self.DLdata,#self.DLdata-tonumber(self.HEADdata)+1)
  490. local file = io.open(self.localpath.."\\"..self.localname, "w+b")
  491. file:write(self.DLdata)
  492. file:close()
  493. self.progress = 100
  494. end
  495. if self.progress ~= 100 and self.DLdata and #self.DLdata > 0 then
  496. self.progress = (#self.DLdata/tonumber(self.HEADdata))*100
  497. end
  498. end
  499. function Async:draw()
  500. if self.progress < 100 then
  501. DrawTextA("Downloading: "..self.localname,15,50,35+self.offset)
  502. DrawRectangleOutline(49,50+self.offset,250,20, ARGB(255,255,255,255),1)
  503. if self.progress ~= 100 then
  504. DrawLine(50,60+self.offset,50+(2.5*self.progress),60+self.offset,18,ARGB(150,255-self.progress*2.5,self.progress*2.5,255-self.progress*2.5))
  505. DrawTextA(tostring(math.round(self.progress).." %"), 15,150,52+self.offset)
  506. end
  507. end
  508. end
  509. end
  510. function Download:newDL(host, file, name, path, callback)
  511. local offset = (#self.aktivedownloads+1)*40
  512. self.aktivedownloads[#self.aktivedownloads+1] = Async(host, file, name, offset-40, path)
  513. if not callback then
  514. callback = (function ()
  515. end)
  516. end
  517. self.callbacks[#self.callbacks+1] = callback
  518. end
  519. function Download:RemoveDone()
  520. if #self.aktivedownloads == 0 then return end
  521. local x = {}
  522. for k, v in pairs(self.aktivedownloads) do
  523. if math.round(v.progress) < 100 then
  524. v.offset = k*40-40
  525. x[#x+1] = v
  526. else
  527. self.callbacks[k]()
  528. end
  529. end
  530. self.aktivedownloads = {}
  531. self.aktivedownloads = x
  532. end

comments powered by Disqus