Sida

Untitled

Apr 7th, 2013
11,787
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.28 KB | None | 0 0
  1. -- [[¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯]] --
  2. -- [[                                               ]] --
  3. -- [[           Sida's Lux - Double Rainbow         ]] --
  4. -- [[                                               ]] --
  5. -- [[_______________________________________________]] --
  6.  
  7. if myHero.charName ~= "Lux" then return end
  8. local qPart, ePart, lastE = nil, nil, 0
  9. local qSpeed, qDelay = 1.2, 234
  10. local eSpeed, eDelay = 3.4, 220
  11. local rSpeed, rDelay = 10, 500
  12. local ts
  13. local enemyMinions
  14. local sparks = {}
  15. local jungle = {
  16.                 Vilemaw = {obj = nil, name = "TT_Spiderboss7.1.1"},
  17.                 Baron = {obj = nil, name = "Worm12.1.1"},
  18.                 Dragon = {obj = nil, name = "Dragon6.1.1"},
  19.                 Golem1 = {obj = nil, name = "AncientGolem1.1.1"},
  20.                 Golem2 = {obj = nil, name = "AncientGolem7.1.1"},
  21.                 --LizardElder1 = {obj = nil, name = "LizardElder4.1.1"},
  22.                 --LizardElder2 = {obj = nil, name = "LizardElder10.1.1"},
  23. }
  24.  
  25. LuxConfig = scriptConfig("Sida's Lux - Double Rainbow", "SidasLux")
  26. LuxConfig:addParam("combo", "Combo", SCRIPT_PARAM_ONKEYDOWN, false, 32)
  27. LuxConfig:addParam("harass", "Harras", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("X"))
  28. LuxConfig:addParam("autoE", "Auto-pop E", SCRIPT_PARAM_ONOFF, true)
  29. LuxConfig:addParam("killSteal", "Kill Steal", SCRIPT_PARAM_ONOFF, true)
  30. LuxConfig:addParam("attackSpark", "Attack Spark", SCRIPT_PARAM_ONOFF, true)
  31. LuxConfig:addParam("useUlt", "Auto Ult On Caged Enemy", SCRIPT_PARAM_ONOFF, true)
  32. LuxConfig:addParam("useE", "Auto E On Caged Enemy", SCRIPT_PARAM_ONOFF, true)
  33. LuxConfig:addParam("jungleSteal", "Jungle Steal", SCRIPT_PARAM_ONOFF, true)
  34. LuxConfig:addParam("movement", "Move To Mouse", SCRIPT_PARAM_ONOFF, true)
  35. LuxConfig:addParam("draw", "Draw Circles", SCRIPT_PARAM_ONOFF, true)
  36. ts = TargetSelector(TARGET_LOW_HP_PRIORITY, 1190, DAMAGE_MAGIC, true)
  37. ts.name = "Lux"
  38. LuxConfig:addTS(ts)
  39. enemyMinions = minionManager(MINION_ENEMY, 1190, player, MINION_SORT_HEALTH_ASC)
  40.  
  41. function OnTick()
  42.     ts:update()
  43.     enemyMinions:update()
  44.     if LuxConfig.autoE then checkE() end
  45.     if LuxConfig.killSteal then ultSteal() end
  46.     foundQ()
  47.     if LuxConfig.jungleSteal then checkJungleKillable() end
  48.     if ts.target and ValidTarget(ts.target, 1190, true) then
  49.         if LuxConfig.combo then Combo() end
  50.         if LuxConfig.harass then Harass() end
  51.     elseif LuxConfig.movement and (LuxConfig.harass or LuxConfig.combo) then
  52.         myHero:MoveTo(mousePos.x, mousePos.z)
  53.     end
  54. end
  55.  
  56. function OnLoad()
  57.     for i = 0, objManager.maxObjects do
  58.         local obj = objManager:getObject(i)
  59.         for _, mob in pairs(jungle) do
  60.             if obj and obj.valid and obj.name:find(mob.name) then
  61.                 mob.obj = obj
  62.             end
  63.         end
  64.     end
  65. end
  66.  
  67. function Harass()
  68.     castE(ts.target)
  69.     if LuxConfig.attackSpark and hasSpark() then
  70.         myHero:Attack(ts.target)
  71.     elseif LuxConfig.movement then
  72.         myHero:MoveTo(mousePos.x, mousePos.z)
  73.     end
  74. end
  75.  
  76. function Combo()
  77.     castQ(ts.target)
  78.     if not CanCast(_Q) then castE(ts.target) end
  79.     if LuxConfig.attackSpark and hasSpark() then
  80.         myHero:Attack(ts.target)
  81.     elseif LuxConfig.movement then
  82.         myHero:MoveTo(mousePos.x, mousePos.z)
  83.     end
  84. end
  85.  
  86. function castE(target)
  87.     if CanCast(_E) then
  88.         local ePos = getPred(eSpeed, eDelay, target)
  89.         if ePos and GetDistance(ePos) <= 1300 then
  90.             CastSpell(_E, ePos.x, ePos.z)
  91.         end
  92.     end
  93. end
  94.  
  95. function castQ(target)
  96.     if CanCast(_Q) then
  97.         local qPos = getPred(qSpeed, qDelay, target)
  98.         if qPos and GetDistance(qPos) <= 1170 and not willHitMinion(qPos, 130) then
  99.             CastSpell(_Q, qPos.x, qPos.z)
  100.         end
  101.     end
  102. end
  103.  
  104. function ultSteal()
  105.     for i = 1, heroManager.iCount do
  106.         local enemy = heroManager:getHero(i)
  107.         if CanCast(_R) and ValidTarget(enemy, 3000, true) and enemy.health < getDmg("R",enemy,myHero) - 50 then
  108.             local rPos = getPred(rSpeed, rDelay, enemy)
  109.             if rPos ~= nil and GetDistance(rPos) < 3000 then
  110.                 CastSpell(_R, rPos.x, rPos.z)
  111.             end
  112.         end
  113.     end
  114. end
  115.  
  116. function foundQ()
  117.     if qPart ~= nil and qPart.valid then
  118.         if CanCast(_E) and LuxConfig.useE then CastSpell(_E, qPart.x, qPart.z) end
  119.         if CanCast(_R) and LuxConfig.useUlt then CastSpell(_R, qPart.x, qPart.z) end
  120.     end
  121. end
  122.  
  123. function OnCreateObj(obj)
  124.     if obj ~= nil and obj.valid then
  125.         if obj.name:lower():find("luxlightbinding") and isObjectOnEnemy(obj) then
  126.             qPart = obj
  127.         elseif obj.name:lower():find("luxlightstrike") and GetTickCount() < lastE + 2000 then
  128.             ePart = obj;
  129.         elseif obj.name:find("LuxDebuff") then
  130.             table.insert(sparks, obj)
  131.         else
  132.             checkJungleCreated(obj)
  133.         end
  134.     end
  135. end
  136.  
  137. function OnDeleteObj(obj)
  138.     if obj == qPart then
  139.         qPart = nil
  140.     elseif obj == ePart then
  141.         ePart = nil
  142.     else
  143.         deleteSpark(obj)
  144.         checkJungleDeleted(obj)
  145.     end
  146. end
  147.  
  148. function OnProcessSpell(unit, spell)
  149.     if unit.isMe and spell ~= nil and spell.name:lower():find("luxlightstrike") then
  150.         lastE = GetTickCount()
  151.     end
  152. end
  153.  
  154. function isObjectOnEnemy(obj)
  155.     for i = 1, heroManager.iCount do
  156.         local enemy = heroManager:getHero(i)
  157.         if enemy.team ~= myHero.team and not enemy.dead and GetDistance(enemy, obj) < 50 then
  158.             return true
  159.         end
  160.     end
  161.     return false
  162. end
  163.  
  164. function CanCast(spell)
  165.     return myHero:CanUseSpell(spell) == READY
  166. end
  167.  
  168. function getPred(speed, delay, target)
  169.     if target == nil then return nil end
  170.     local travelDuration = (delay + GetDistance(myHero, target)/speed)
  171.     travelDuration = (delay + GetDistance(GetPredictionPos(target, travelDuration))/speed)
  172.     travelDuration = (delay + GetDistance(GetPredictionPos(target, travelDuration))/speed)
  173.     travelDuration = (delay + GetDistance(GetPredictionPos(target, travelDuration))/speed)  
  174.     return GetPredictionPos(target, travelDuration)
  175. end
  176.  
  177. function checkJungleDeleted(obj)
  178.     for _, mob in pairs(jungle) do
  179.         if obj ~= nil and obj.name == mob.name then mob.obj = nil end
  180.     end
  181. end
  182.  
  183. function checkJungleCreated(obj)
  184.     for _, mob in pairs(jungle) do
  185.         if obj ~= nil and obj.name == mob.name then mob.obj = obj end
  186.     end
  187. end
  188.  
  189. function checkJungleKillable()
  190.     for _, mob in pairs(jungle) do
  191.         if mob.obj ~= nil and mob.obj.valid and not mob.obj.dead
  192.         and GetDistance(mob.obj) < 2999 and CanCast(_R)
  193.         and mob.obj.health < getDmg("R",mob.obj,myHero) then
  194.             CastSpell(_R, mob.obj.x, mob.obj.z)
  195.         end
  196.     end
  197. end
  198.  
  199. function checkE()
  200.     if ePart ~= nil and ePart.valid then
  201.         for i = 1, heroManager.iCount do
  202.             local enemy = heroManager:getHero(i)
  203.             if ValidTarget(enemy, 1190, true) and GetDistance(ePart, enemy) < 300 then
  204.                 CastSpell(_E)
  205.             end
  206.         end
  207.     end
  208. end
  209.  
  210. function OnDraw()
  211.     if not LuxConfig.draw then return end
  212.     if ts.target ~= nil then
  213.         DrawCircle(ts.target.x, ts.target.y, ts.target.z, 150, 0xFF00FF00)
  214.         DrawCircle(ts.target.x, ts.target.y, ts.target.z, 151, 0xFF00FF00)
  215.         DrawCircle(ts.target.x, ts.target.y, ts.target.z, 152, 0xFF00FF00)
  216.         DrawCircle(ts.target.x, ts.target.y, ts.target.z, 153, 0xFF00FF00)
  217.         --local qPos = getPred(rSpeed, rDelay, ts.target)
  218.         --if qPos ~= nil then DrawCircle(qPos.x, qPos.y, qPos.z, 100, 0xFFFFFF) end
  219.     end
  220.     DrawCircle(myHero.x, myHero.y, myHero.z, 550, 0xFFFFFF)
  221. end
  222.  
  223. function deleteSpark(obj)
  224.     for _, spark in pairs(sparks) do
  225.         if spark == obj then
  226.             spark = nil
  227.         end
  228.     end
  229. end
  230.  
  231. function hasSpark()
  232.     for _, spark in pairs(sparks) do
  233.         if spark ~= nil and spark.valid and GetDistance(ts.target) < 540 + getHitBoxRadius(ts.target) and GetDistance(spark, ts.target) < 100 then
  234.             return true
  235.         end
  236.     end
  237.     return false
  238. end
  239.  
  240. function willHitMinion(predic, width)
  241.     local hitCount = 0
  242.     for _, minionObjectE in pairs(enemyMinions.objects) do
  243.          if minionObjectE ~= nil and string.find(minionObjectE.name,"Minion_") == 1 and minionObjectE.team ~= player.team and minionObjectE.dead == false then
  244.              if predic ~= nil and player:GetDistance(minionObjectE) < 900 then
  245.                  ex = player.x
  246.                  ez = player.z
  247.                  tx = predic.x
  248.                  tz = predic.z
  249.                  dx = ex - tx
  250.                  dz = ez - tz
  251.                  if dx ~= 0 then
  252.                  m = dz/dx
  253.                  c = ez - m*ex
  254.                  end
  255.                  mx = minionObjectE.x
  256.                  mz = minionObjectE.z
  257.                  distanc = (math.abs(mz - m*mx - c))/(math.sqrt(m*m+1))
  258.                  if distanc < width and math.sqrt((tx - ex)*(tx - ex) + (tz - ez)*(tz - ez)) > math.sqrt((tx - mx)*(tx - mx) + (tz - mz)*(tz - mz)) then
  259.                     hitCount = hitCount + 1
  260.                     if hitCount > 1 then
  261.                         return true
  262.                     end
  263.                  end
  264.              end
  265.          end
  266.      end
  267.      return false
  268. end
  269.  
  270. function getHitBoxRadius(target)
  271.     return GetDistance(target.minBBox, target.maxBBox)/2
  272. end
  273.  
  274. PrintChat("Sida's Lux Enabled")
Advertisement
Add Comment
Please, Sign In to add comment