Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
10900 lines (9908 sloc) 481 KB
local SLAIO,Stage = 0.02,"BETA"
local SLSChamps = {
["Vayne"] = true,
["Soraka"] = true,
["Blitzcrank"] = true,
["Kalista"] = true,
["Velkoz"] = true,
["Nasus"] = true,
["Jinx"] = true,
["Aatrox"] = true,
["Kindred"] = true,
["Nocturne"] = true,
["Sivir"] = true,
["Vladimir"] = true,
["Orianna"] = true,
["Veigar"] = true,
["KogMaw"] = true,
["Ahri"] = true,
["Khazix"] = true,
["Zed"] = true,
["Anivia"] = true,
["Syndra"] = true,
["Draven"] = true,
}
local SLPatchnew = nil
local spawn = nil
local Spell = {}
local str3 = {[0]="Q",[1]="W",[2]="E",[3]="R"}
local IPred= false
local OpenPredict = false
local SLM = {}
local SLM2 = {}
local lastcheck = 0
local structures = {}
local turrets = {}
local Wards = {}
local Wards2 = {}
local target = nil
local ts = nil
if GetGameVersion():sub(3,4) >= "10" then
SLPatchnew = GetGameVersion():sub(1,4)
else
SLPatchnew = GetGameVersion():sub(1,3)
end
local AutoUpdater = true
require 'DamageLib'
if SLSChamps[myHero.charName] then
require 'IPrediction'
IPred = true
end
local function PredMenu(m,sp)
if not m["CP"] then m:DropDown("CP", "Choose Prediction", 1 ,{"OPred", "GPred", "IPred", "GoSPred","SLPred"}) end
m:DropDown("h"..str3[sp], "Hitchance"..str3[sp], 2, {"Low", "Medium", "High"})
if m.CP:Value() == 2 then
require 'GPrediction'
elseif m.CP:Value() == 1 then
require 'OpenPredict'
OpenPredict = true
end
end
local function GetValue(m,sp)
if not m["CP"] or not m["h"..str3[sp]] then return end
if m.CP:Value() == 5 then
if m["h"..str3[sp]]:Value() == 1 then
return 1
elseif m["h"..str3[sp]]:Value() == 2 then
return 1
elseif m["h"..str3[sp]]:Value() == 3 then
return 2
end
elseif m.CP:Value() == 4 then
if m["h"..str3[sp]]:Value() == 1 then
return 1
elseif m["h"..str3[sp]]:Value() == 2 then
return 1
elseif m["h"..str3[sp]]:Value() == 3 then
return 2
end
elseif m.CP:Value() == 3 then
if m["h"..str3[sp]]:Value() == 1 then
return 1
elseif m["h"..str3[sp]]:Value() == 2 then
return 2
elseif m["h"..str3[sp]]:Value() == 3 then
return 3
end
elseif m.CP:Value() == 2 then
if m["h"..str3[sp]]:Value() == 1 then
return 1
elseif m["h"..str3[sp]]:Value() == 2 then
return 2
elseif m["h"..str3[sp]]:Value() == 3 then
return 3
end
elseif m.CP:Value() == 1 then
if m["h"..str3[sp]]:Value() == 1 then
return .2
elseif m["h"..str3[sp]]:Value() == 2 then
return .45
elseif m["h"..str3[sp]]:Value() == 3 then
return .7
end
end
end
local function GetCollision(m,sp,t)
if not m["CP"] or not m["h"..str3[sp]] then return end
if m.CP:Value() == 5 then
return t.col or false
elseif m.CP:Value() == 4 then
return t.col or false
elseif m.CP:Value() == 4 then
return t.col or false
elseif m.CP:Value() == 3 then
return t.col or false
elseif m.CP:Value() == 2 then
if t.col then
return {"minion","champion"}
else
return nil
end
elseif m.CP:Value() == 1 then
return t.col or false
end
end
local function GetType(m,sp,t)
if not m["CP"] or not m["h"..str3[sp]] then return end
if m.CP:Value() == 3 then
if t.type == "line" then
return "linear"
else
return "circular"
end
else
return t.type or "circular"
end
end
local function CastGenericSkillShot(s,u,t,sp,m)--source,unit,table,spell,menu
if not m["CP"] or not m["h"..str3[sp]] then return end
t.width = t.width or t.radius
t.radius = t.width or t.radius
t.col = GetCollision(m,sp,t)
t.name = t.name or GetCastName(s,sp)
t.count = t.count or 1
t.angle = t.angle or 45
t.delay = t.delay or 0.250
t.speed = t.speed or math.huge
t.range = t.range or 1000
t.type = GetType(m,sp,t)
t.aoe = t.aoe or false
if m.CP:Value() == 1 then
if t.col then
if t.type:lower():find("lin") then
local Pred = GetPrediction(u, t)
if Pred.hitChance >= GetValue(m,sp) and not Pred:mCollision(t.count) and GetDistance(s,Pred.castPos) < t.range then
CastSkillShot(sp,Pred.castPos)
end
elseif t.type:lower():find("cir") then
local Pred = GetCircularAOEPrediction(u, t)
if Pred.hitChance >= GetValue(m,sp) and not Pred:mCollision(t.count) and GetDistance(s,Pred.castPos) < t.range then
CastSkillShot(sp,Pred.castPos)
end
elseif t.type:lower():find("con") then
local Pred = GetConicAOEPrediction(u, t)
if Pred.hitChance >= GetValue(m,sp) and not Pred:mCollision(t.count) and GetDistance(s,Pred.castPos) < t.range then
CastSkillShot(sp,Pred.castPos)
end
end
else
if t.type:lower():find("lin") then
local Pred = GetPrediction(u, t)
if Pred.hitChance >= GetValue(m,sp) and GetDistance(s,Pred.castPos) < t.range then
CastSkillShot(sp,Pred.castPos)
end
elseif t.type:lower():find("cir") then
local Pred = GetCircularAOEPrediction(u, t)
if Pred.hitChance >= GetValue(m,sp) and GetDistance(s,Pred.castPos) < t.range then
CastSkillShot(sp,Pred.castPos)
end
elseif t.type:lower():find("con") then
local Pred = GetConicAOEPrediction(u, t)
if Pred.hitChance >= GetValue(m,sp) and GetDistance(s,Pred.castPos) < t.range then
CastSkillShot(sp,Pred.castPos)
end
end
end
elseif m.CP:Value() == 2 then
local Pred = _G.gPred:GetPrediction(u,s,t,t.aoe,t.col)
if Pred.HitChance >= GetValue(m,sp) then
CastSkillShot(sp,Pred.CastPosition)
end
elseif m.CP:Value() == 3 then
local Predicted = IPrediction.Prediction({name=t.name, range=t.range, speed=t.speed, delay=t.delay, width=t.width, type=t.type, collision=t.col, collisionM=t.col, collisionH=t.col})
local hit, pos = Predicted:Predict(u,s)
if hit >= GetValue(m,sp) then
CastSkillShot(sp, pos)
end
elseif m.CP:Value() == 4 then
local Pred = GetPredictionForPlayer(s.pos,u,u.ms, t.speed, t.delay*1000, t.range, t.width, t.col, true)
if Pred.HitChance == GetValue(m,sp) and GetDistance(s,Pred.PredPos) < t.range then
CastSkillShot(sp, Pred.PredPos)
end
elseif m.CP:Value() == 5 then
local SLhc,SLpos = SLP:Predict({source=s,unit=u,speed=t.speed,range=t.range,delay=t.delay,width=t.width,type=t.type,collision=t.col})
if SLhc and SLhc+.1 >= GetValue(m,sp) and SLpos then
CastSkillShot(sp,SLpos)
end
end
end
local function dRectangleOutline(s, e, w, t, c, v)--start,end,width,thickness,color
local z1 = s+Vector(Vector(e)-s):perpendicular():normalized()*w/2
local z2 = s+Vector(Vector(e)-s):perpendicular2():normalized()*w/2
local z3 = e+Vector(Vector(s)-e):perpendicular():normalized()*w/2
local z4 = e+Vector(Vector(s)-e):perpendicular2():normalized()*w/2
local z5 = s+Vector(Vector(e)-s):perpendicular():normalized()*w
local z6 = s+Vector(Vector(e)-s):perpendicular2():normalized()*w
local c1 = WorldToScreen(0,z1)
local c2 = WorldToScreen(0,z2)
local c3 = WorldToScreen(0,z3)
local c4 = WorldToScreen(0,z4)
local c5 = WorldToScreen(0,z5)
local c6 = WorldToScreen(0,z6)
if v then
DrawLine(c5.x,c5.y,c6.x,c6.y,t+1,ARGB(200,250,192,0))
DrawLine(c2.x,c2.y,c3.x,c3.y,t,c)
DrawLine(c3.x,c3.y,c4.x,c4.y,t,c)
DrawLine(c1.x,c1.y,c4.x,c4.y,t,c)
else
DrawLine(c5.x,c5.y,c6.x,c6.y,t+0.5,ARGB(255,255,0,0))
DrawLine(c2.x,c2.y,c3.x,c3.y,t,ARGB(150,255,255,255))
DrawLine(c3.x,c3.y,c4.x,c4.y,t,ARGB(150,255,255,255))
DrawLine(c1.x,c1.y,c4.x,c4.y,t,ARGB(150,255,255,255))
end
end
function DrawRectangle2(x, y, width, height, color, thickness)
local thickness = thickness or 1
if thickness == 0 then return end
x = x - 1
y = y - 1
width = width + 2
height = height + 2
local halfThick = math.floor(thickness/2)
DrawLine(x - halfThick, y, x + width + halfThick, y, thickness, color)
DrawLine(x, y + halfThick, x, y + height - halfThick, thickness, color)
DrawLine(x + width, y + halfThick, x + width, y + height - halfThick, thickness, color)
DrawLine(x - halfThick, y + height, x + width + halfThick, y + height, thickness, color)
end
local function dRectangleOutline2(s, e, w, t, c, v)--start,end,radius,thickness,color
local z1 = s+Vector(Vector(e)-s):perpendicular():normalized()*w
local z2 = s+Vector(Vector(e)-s):perpendicular2():normalized()*w
local z3 = e+Vector(Vector(s)-e):perpendicular():normalized()*w
local z4 = e+Vector(Vector(s)-e):perpendicular2():normalized()*w
local c1 = WorldToScreen(0,z1)
local c2 = WorldToScreen(0,z2)
local c3 = WorldToScreen(0,z3)
local c4 = WorldToScreen(0,z4)
if v then
DrawLine(c1.x,c1.y,c2.x,c2.y,t+1,ARGB(200,250,192,0))
DrawLine(c2.x,c2.y,c3.x,c3.y,t,c)
DrawLine(c3.x,c3.y,c4.x,c4.y,t,c)
DrawLine(c1.x,c1.y,c4.x,c4.y,t,c)
else
DrawLine(c1.x,c1.y,c2.x,c2.y,t+0.5,ARGB(255,255,0,0))
DrawLine(c2.x,c2.y,c3.x,c3.y,t,ARGB(255,102,102,102))
DrawLine(c3.x,c3.y,c4.x,c4.y,t,ARGB(255,102,102,102))
DrawLine(c1.x,c1.y,c4.x,c4.y,t,ARGB(255,102,102,102))
end
end
local function DrawRectangle(s,e,r,r2,t,c)
local spos = Vector(e) - (Vector(e) - Vector(s)):normalized():perpendicular() * (r2 or 400)
local epos = Vector(e) + (Vector(e) - Vector(s)):normalized():perpendicular() * (r2 or 400)
local ePos = Vector(epos)
local sPos = Vector(spos)
local dVec = Vector(ePos - sPos)
local sVec = dVec:normalized():perpendicular()*((r)*.5)
local TopD1 = WorldToScreen(0,sPos-sVec)
local TopD2 = WorldToScreen(0,sPos+sVec)
local BotD1 = WorldToScreen(0,ePos-sVec)
local BotD2 = WorldToScreen(0,ePos+sVec)
DrawLine(TopD1.x,TopD1.y,TopD2.x,TopD2.y,t,c)
DrawLine(TopD1.x,TopD1.y,BotD1.x,BotD1.y,t,c)
DrawLine(TopD2.x,TopD2.y,BotD2.x,BotD2.y,t,c)
DrawLine(BotD1.x,BotD1.y,BotD2.x,BotD2.y,t,c)
end
local function DrawCone(v1,v2,angle,width,color)
angle = angle * math.pi / 180
v1 = Vector(v1)
v2 = Vector(v2)
local a1 = Vector(Vector(v2)-Vector(v1)):rotated(0,-angle*.5,0)
local a2 = nil
DrawLine3D(v1.x,v1.y,v1.z,v1.x+a1.x,v1.y+a1.y,v1.z+a1.z,width,color)
for i = -angle*.5,angle*.5,angle*.1 do
a2 = Vector(v2-v1):rotated(0,i,0)
DrawLine3D(v1.x+a2.x,v1.y+a2.y,v1.z+a2.z,v1.x+a1.x,v1.y+a1.y,v1.z+a1.z,width,color)
a1 = a2
end
DrawLine3D(v1.x,v1.y,v1.z,v1.x+a1.x,v1.y+a1.y,v1.z+a1.z,width,color)
end
local ta = {_G.HoldPosition, _G.AttackUnit}
local function DisableHoldPosition(boolean)
if boolean then
_G.HoldPosition, _G.AttackUnit = function() end, function() end
else
_G.HoldPosition, _G.AttackUnit = ta[1], ta[2]
end
end
local tabl = {_G.AttackUnit}
local function DisableAttacks(boolean)
if boolean then
_G.AttackUnit = function() end
else
_G.AttackUnit = tabl[1]
end
end
local function AllyMinionsAround(pos, range)
local c = 0
if pos == nil then return 0 end
for k,v in pairs(SLM2) do
if v and v.alive and GetDistanceSqr(pos,v) < range*range and v.team == myHero.team then
c = c + 1
end
end
return c
end
local function CircleSegment(x,y,radius,sAngle,eAngle,color)
for a = sAngle,eAngle do
DrawLine(x,y,x+radius*math.cos(a*math.pi/180),y+radius*math.sin(a*math.pi/180),5,color)
end
end
local function CircleSegment2(x,y,sRadius,eRadius,sAngle,eAngle,color)
for a = sAngle,eAngle do
DrawLine(x+sRadius*math.cos(a*math.pi/180),y+sRadius*math.sin(a*math.pi/180),x+eRadius*math.cos(a*math.pi/180),y+eRadius*math.sin(a*math.pi/180),1,color)
end
end
local function GetLowestUnit(i,range)
if not range then range = myHero.range+myHero.boundingRadius*2 end
local t, p = nil, math.huge
if i.alive and i and i.team ~= myHero.team then
if ValidTarget(i, range) and i.health < p then
t = i
p = i.health
end
end
return t
end
local function GetHighestUnit(i,range)
if not range then range = myHero.range+myHero.boundingRadius*2 end
local t = nil
if i and i.alive and i.team ~= myHero.team then
if ValidTarget(i, range) and not t or GetMaxHP(i) > GetMaxHP(t) then
t = i
end
end
return t
end
local function EnemyMinionsAround(pos, range)
local c = 0
if pos == nil then return 0 end
for k,v in pairs(SLM) do
if v and v.alive and GetDistanceSqr(pos,v) < range*range and v.team == MINION_ENEMY then
c = c + 1
end
end
return c
end
local function JungleMinionsAround(pos, range)
local c = 0
if pos == nil then return 0 end
for k,v in pairs(SLM) do
if v and v.alive and GetDistanceSqr(pos,v) < range*range and v.team == MINION_JUNGLE then
c = c + 1
end
end
return c
end
local function AllyHeroesAround(pos, range)
local c = 0
if not pos or not range then return end
for k,v in pairs(GetAllyHeroes()) do
if v and v.alive and GetDistanceSqr(pos,v) < range*range and v.team == myHero.team then
c = c + 1
end
end
return c
end
local function EnemyHeroesAround(pos, range)
local c = 0
if not pos or not range then return end
for k,v in pairs(GetEnemyHeroes()) do
if v and v.alive and GetDistanceSqr(pos,v) < range*range and v.team == MINION_ENEMY then
c = c + 1
end
end
return c
end
local function Sample(obj)
return {x=obj.pos.x, y=obj.pos.y, z=obj.pos.z, time=GetTickCount()/1000 }
end
OnObjectLoad(function(obj)
if obj and obj.type == Obj_AI_SpawnPoint or obj.type == Obj_AI_Turret or obj.type == Obj_AI_Barracks and obj.alive and obj.team ~= myHero.team then
structures[obj.networkID] = obj
end
if obj and obj.networkID then
if obj.name:lower():find("visionward") then
if ((obj.team == myHero.team) or (obj.team ~= myHero.team )) then
table.insert(Wards,{o=obj})
end
end
if obj.name:lower():find("sightward") then
if ((obj.team == myHero.team) or (obj.team ~= myHero.team )) then
table.insert(Wards2,{o=obj,s=GetTickCount()})
end
end
end
if obj.type == Obj_AI_SpawnPoint and obj.team ~= myHero.team then
spawn = obj
end
end)
OnDeleteObj(function(obj)
if obj and obj.type == Obj_AI_SpawnPoint or obj.type == Obj_AI_Turret or obj.type == Obj_AI_Barracks and obj.team == MINION_ENEMY then
structures[obj.networkID] = nil
end
end)
local function DisableAll(b)
if b then
if _G.IOW then
IOW.movementEnabled = false
IOW.attacksEnabled = false
elseif _G.PW then
PW.movementEnabled = false
PW.attacksEnabled = false
elseif _G.GoSWalkLoaded then
_G.GoSWalk:EnableMovement(false)
_G.GoSWalk:EnableAttack(false)
elseif _G.DAC_Loaded then
DAC:MovementEnabled(false)
DAC:AttacksEnabled(false)
elseif _G.AutoCarry_Loaded then
DACR.movementEnabled = false
DACR.attacksEnabled = false
elseif _G.SLW then
SLW.movementEnabled = false
SLW.attacksEnabled = false
end
BlockF7OrbWalk(true)
BlockF7Dodge(true)
BlockInput(true)
else
if _G.IOW then
IOW.movementEnabled = true
IOW.attacksEnabled = true
elseif _G.PW then
PW.movementEnabled = true
PW.attacksEnabled = true
elseif _G.GoSWalkLoaded then
_G.GoSWalk:EnableMovement(true)
_G.GoSWalk:EnableAttack(true)
elseif _G.DAC_Loaded then
DAC:MovementEnabled(true)
DAC:AttacksEnabled(true)
elseif _G.AutoCarry_Loaded then
DACR.movementEnabled = true
DACR.attacksEnabled = true
elseif _G.SLW then
SLW.movementEnabled = true
SLW.attacksEnabled = true
end
BlockF7OrbWalk(false)
BlockF7Dodge(false)
BlockInput(false)
end
end
local function dArrow(s, e, w, c)--startpos,endpos,width,color
local s2 = e-((s-e):normalized()*75):perpendicular()+(s-e):normalized()*75
local s3 = e-((s-e):normalized()*75):perpendicular2()+(s-e):normalized()*75
DrawLine3D(s.x,s.y,s.z,e.x,e.y,e.z,w,c)
DrawLine3D(s2.x,s2.y,s2.z,e.x,e.y,e.z,w,c)
DrawLine3D(s3.x,s3.y,s3.z,e.x,e.y,e.z,w,c)
end
if not FileExist(COMMON_PATH.. "Analytics.lua") then
DownloadFileAsync("https://raw.githubusercontent.com/LoggeL/GoS/master/Analytics.lua", COMMON_PATH .. "Analytics.lua", function() end)
end
if SLSChamps[myHero.charName] then
if FileExist(COMMON_PATH.. "Analytics.lua") then
require("Analytics")
Analytics("SL-AIO", "SL-Team", true)
end
end
local Name = GetMyHero()
local ChampName = myHero.charName
local Dmg = {}
local Mode = nil
local SReady = {
[0] = false,
[1] = false,
[2] = false,
[3] = false,
}
local function GetADHP(unit)
return GetCurrentHP(unit) + GetDmgShield(unit)
end
local function GetAPHP(unit)
return GetCurrentHP(unit) + GetDmgShield(unit) + GetMagicShield(unit)
end
local function IsLaneCreep(unit)
return unit.team ~= 300
end
local function GetReady()
for s = 0,3 do
if CanUseSpell(myHero,s) == READY then
SReady[s] = true
else
SReady[s] = false
end
end
end
local t = {_G.MoveToXYZ, _G.AttackUnit, _G.CastSkillShot, _G.CastSkillShot2, _G.CastSkillShot3, _G.HoldPosition, _G.CastSpell, _G.CastTargetSpell}
function Stop(state)
if state then
_G.MoveToXYZ, _G.AttackUnit, _G.CastSkillShot, _G.CastSkillShot2, _G.CastSkillShot3, _G.HoldPosition, _G.CastSpell, _G.CastTargetSpell = function() end, function() end,function() end,function() end,function() end,function() end,function() end,function() end
BlockF7OrbWalk(true)
BlockF7Dodge(true)
else
_G.MoveToXYZ, _G.AttackUnit, _G.CastSkillShot, _G.CastSkillShot2, _G.CastSkillShot3, _G.HoldPosition, _G.CastSpell, _G.CastTargetSpell = t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8]
BlockF7OrbWalk(false)
BlockF7Dodge(false)
end
end
Callback.Add("Tick", function()
if lastcheck + 1000 < GetTickCount() then
lastcheck = GetTickCount()
for _,i in pairs(minionManager.objects) do
if i.valid and i.distance < 2000 and i.alive and i.team ~= MINION_ALLY then
SLM[i.networkID] = i
end
end
for _,i in pairs(minionManager.objects) do
if i.valid and i.distance < 2000 and i.alive and i.team == MINION_ALLY then
SLM2[i.networkID] = i
end
end
for _,i in pairs(structures) do
if i.valid and i.alive then
turrets[i.networkID] = i
end
end
end
end)
Callback.Add("Load", function()
Update()
Init()
LoadSLP()
if SLSChamps[ChampName] and L.LC:Value() then
_G[ChampName]()
DmgDraw()
if myHero.charName ~= "Orianna" and myHero.charName ~= "Ahri" and myHero.charName ~= "Anivia" then
Drawings()
end
end
if SLSChamps[ChampName] then
PrintChat("<font color=\"#fd8b12\"><b>["..SLPatchnew.."] [SL-AIO] v.: "..SLAIO.." - <font color=\"#FFFFFF\">" ..ChampName.." <font color=\"#F2EE00\"> Loaded! </b></font>")
else
PrintChat("<font color=\"#fd8b12\"><b>["..SLPatchnew.."] [SL-AIO] v.: "..SLAIO.." - <font color=\"#FFFFFF\">" ..ChampName.." <font color=\"#F2EE00\"> is not Supported </b></font>")
end
if L.LU:Value() then
if SLU.Load.LA:Value() then
Activator()
end
if SLU.Load.LSK:Value() then
SkinChanger()
end
if SLU.Load.LAL:Value() then
AutoLevel()
end
if SLU.Load.LH:Value() then
Humanizer()
end
if SLU.Load.LAW:Value() then
Awareness()
end
if SLU.Load.LRLI:Value() then
Reallifeinfo()
end
if (myHero.charName == "Katarina" or myHero.charName == "LeeSin" or myHero.charName == "Jax" and SLU.Load.LWJ:Value()) then
WardJump()
end
end
if L.LE:Value() then
if not _G.MapPosition then
require('MapPositionGoS')
end
LoadSLE()
end
if L.LWal:Value() then
LoadSLW()
end
Recommend()
SLOrb()
end)
class 'Init'
function Init:__init()
SxcS = MenuConfig("","----["..SLPatchnew.."][v.:"..SLAIO.."|"..Stage.."]----")
L = MenuConfig("Loader", "|SL-AIO| Script-Loader")
L:Info("R","")
L:Boolean("LC", "Load Champion", true)
L:Info("0.1", "")
L:Boolean("LU", "Load Utility", true)
L:Info("0.2", "")
L:Boolean("LE", "Load Evade", false)
L:Info("0.6xc", "")
L:Boolean("LWal", "Load Orbwalker", false)
L:Info("xxx", "")
L:Info("0.7.", "You will have to press 2f6")
L:Info("0.8.", "to apply the changes")
xAntiGapCloser = {}
xGapCloser = {}
MapPositionGOS = {["Vayne"] = true, ["Poppy"] = true, ["Kalista"] = true, ["Kindred"] = true,}
if L.LC:Value() and SLSChamps[ChampName] then
BM = MenuConfig("Champions", "|SL-AIO| "..myHero.charName)
if xAntiGapCloser[ChampName] == true then
BM.M:Menu("AGP", "AntiGapCloser")
end
if xGapCloser[ChampName] == true then
BM.M:Menu("GC", "GapCloser")
end
end
if L.LU:Value() then
SLU = MenuConfig("Utility", "|SL-AIO| Utility")
SLU:Menu("Load", "Utility-Loader")
SLU.Load:Boolean("LA", "Load Activator", true)
SLU.Load:Info("as^dasc", "")
SLU.Load:Boolean("LSK", "Load SkinChanger", true)
SLU.Load:Info("0.3", "")
SLU.Load:Boolean("LAL", "Load AutoLevel", true)
SLU.Load:Info("0.4", "")
SLU.Load:Boolean("LH", "Load Humanizer", true)
SLU.Load:Info("0.5.", "")
SLU.Load:Boolean("LAW", "Load Awareness", true)
SLU.Load:Info("0.6.", "")
SLU.Load:Boolean("LRLI", "Load Real life info", true)
SLU.Load:Info("0.6yc", "")
if myHero.charName == "Katarina" or myHero.charName == "LeeSin" or myHero.charName == "Jax" then
SLU.Load:Boolean("LWJ", "Load Ward Jump", true)
SLU.Load:Info("0.6^c", "")
end
SLU.Load:Info("0.7.", "You will have to press 2f6")
SLU.Load:Info("0.8.", "to apply the changes")
SLU:Menu("Activator", "Activator")
M = SLU["Activator"]
end
if L.LE:Value() then
EMenu = MenuConfig("Evade", "|SL-AIO| Evade")
end
if L.LWal:Value() then
OMenu = MenuConfig("Orbwalk", "|SL-AIO| OrbWalk")
end
if MapPositionGOS[ChampName] == true and FileExist(COMMON_PATH .. "MapPositionGOS.lua") then
if not _G.MapPosition then
require('MapPositionGoS')
end
end
if myHero.charName == "Vayne" or myHero.charName == "Veigar" then
if not OpenPredict then
require 'OpenPredict'
end
end
Zwei = MenuConfig("Creators", "----[ by : SxcS & Zwei ]----")
L:Info("Verison", "Current Version : "..SLAIO.." | "..Stage)
end
class 'Recommend'
function Recommend:__init()
self.RecommendedUtility = {
[1] = {Name = "Radar Hack", Link = "https://raw.githubusercontent.com/qqwer1/GoS-Lua/master/RadarHack.lua", Author = "Noddy", File = "RadarHack"},
[2] = {Name = "Recall Tracker", Link = "https://raw.githubusercontent.com/qqwer1/GoS-Lua/master/RecallTracker.lua", Author = "Noddy", File = "RecallTracker"},
[3] = {Name = "GoSEvade", Link = "https://raw.githubusercontent.com/KeVuong/GoS/master/Evade.lua", Author = "MeoBeo", File = "Evade"},
[4] = {Name = "ChallengerEvade",Link = "https://raw.githubusercontent.com/D3ftsu/GoS/master/ChallengerEvade.lua", Author = "Deftsu", File = "ChallengerEvade"},
}
L:Menu("Re","Recommended Scripts")
L.Re:Info("xx.x", "Load : ")
for n,i in pairs(self.RecommendedUtility) do
L.Re:Boolean("S"..n,"- "..i.Name.." ["..i.Author.."]", false)
end
L.Re:Info("xxx","2x F6 after download")
for n,i in pairs(self.RecommendedUtility) do
if L.Re["S"..n]:Value() and not pcall (require, i.File) then
DownloadFileAsync(i.Link, SCRIPT_PATH .. i.File..".lua", function()
if pcall (require, i.File) then
print("|SL| Downloaded "..i.Name.." from "..i.Author.." succesfully.")
else
print("Error downloading, please install manually")
end
end)
elseif L.Re["S"..n]:Value() and FileExist(SCRIPT_PATH .. i.File .. ".lua") then
require(i.File)
print("|SL| Loaded "..i.Name)
end
end
end
class 'SLOrb'
function SLOrb:__init()
if _G.IOW or _G.PW or _G.DAC_Loaded or _G.AutoCarry_Loaded or _G.SLW then
ModeTable = {
["Combo"] = "Combo",
["Harass"] = "Harass",
["LastHit"] = "LastHit",
["LaneClear"] = "LaneClear",
}
elseif _G.GoSWalkLoaded then
ModeTable = {
[0] = "Combo",
[1] = "Harass",
[3] = "LastHit",
[2] = "LaneClear",
}
else
ModeTable = {}
end
if _G.IOW then
OrbMode = function() return IOW:Mode() end
elseif _G.PW then
OrbMode = function() return PW:Mode() end
elseif _G.DAC_Loaded then
OrbMode = function() return DAC:Mode() end
elseif _G.GoSWalkLoaded then
OrbMode = function() return _G.GoSWalk.CurrentMode end
elseif _G.AutoCarry_Loaded then
OrbMode = function() return DACR:Mode() end
elseif _G.SLW then
OrbMode = function() return SLW:Mode() end
else
OrbMode = function() return nil end
end
Callback.Add("Tick",function()
Mode = ModeTable[OrbMode()]
end)
end
---------------------------------------------------------------------------------------------
-------------------------------------CHAMPS--------------------------------------------------
---------------------------------------------------------------------------------------------
--[[
__ __
\ \ / /
\ \ / /_ _ _ _ _ __ ___
\ \/ / _` | | | | '_ \ / _ \
\ / (_| | |_| | | | | __/
\/ \__,_|\__, |_| |_|\___|
__/ |
|___/
--]]
class 'Vayne'
function Vayne:__init()
Spell = {
[0] = { range = 300 },
[1] = { range = 0 },
[2] = { delay = 0.25, speed = 2000, width = 1, range = 550 },
[3] = { range = 0 }
}
Dmg = {
[0] = function (unit) return CalcDamage(myHero, unit, 5 * GetCastLevel(myHero,0) + 25 + ((GetBaseDamage(myHero) + GetBonusDmg(myHero)) * .5), 0) end,
[1] = function (unit) return CalcDamage(myHero, unit, (1.5 * GetCastLevel(myHero,1) + 4.5) * (GetMaxHP(unit)/100) , 0) end,
[2] = function (unit) return CalcDamage(myHero, unit, 35 * GetCastLevel(myHero,2) + 15 + GetBonusDmg(myHero) * .5, 0) end,
[3] = function (unit) return CalcDamage(myHero, unit, 20 * GetCastLevel(myHero,3) + 10, 0) end,
}
BM:Menu("Q", "[Tumble] Q Settings")
BM.Q:DropDown("QM", "QMode", 1, {"AAReset", "W Proc"})
BM.Q:Boolean('C', 'Use in Combo', true)
BM.Q:Boolean('H', 'Use in Harass', true)
BM.Q:Boolean('JC', 'Use in JungleClear', true)
BM.Q:Boolean('LC', 'Use in LaneClear', false)
BM.Q:Info("q",'')
BM.Q:Boolean("TC", "Dont Tumble into turrets", true)
BM.Q:Info("",'')
BM.Q:Slider('MC', "Use in Combo if Mana > x", 0, 0, 100, 0)
BM.Q:Slider('MH', "Use in Harass if Mana > x", 50, 0, 100, 0)
BM.Q:Slider('MJC', "Use in JungleClear if Mana > x", 10, 0, 100, 0)
BM.Q:Slider('MLC', "Use in LaneClear if Mana > x", 50, 0, 100, 0)
BM:Menu("E", "[Condemn] E Settings")
BM.E:Boolean('C', 'Use in Combo', true)
BM.E:Boolean('H', 'Use in Harass', true)
BM.E:Boolean('JC', 'Use in JungleClear', true)
BM.E:Info("q",'')
BM.E:Boolean("EAE", "Enable Auto E", true)
BM.E:Slider("DTE", "Distance to Enemy for auto E", 50, 0, 100, 5)
BM.E:Boolean("KS", "Enable KS", true)
BM.E:Info("",'')
BM.E:Slider("a", "accuracy", 30, 1, 50, 5)
BM.E:Slider("pd", "Push distance", 480, 1, 550, 5)
BM.E:Slider('MC', "Use in Combo if Mana > x", 0, 0, 100, 0)
BM.E:Slider('MH', "Use in Harass if Mana > x", 50, 0, 100, 0)
BM.E:Slider('MJC', "Use in JungleClear if Mana > x", 10, 0, 100, 0)
BM:Menu("R", "[Final Hour] R Settings")
BM.R:Boolean('C', 'Use Final Hour in Combo', true)
BM.R:Boolean('H', 'Use Final Hour in Harass', false)
BM.R:Info("q",'')
BM.R:Boolean("SI", "Stay Invisble", true)
BM.R:Boolean("DIT", "Draw invisible timer", true)
BM.R:Info("", "")
BM.R:Slider("EAR", "EnemiesAround > x", 1, 1, 5, 1)
BM.R:Slider("AAR", "AlliesAround > x", 0, 0, 5, 1)
BM.R:Slider("MHP", "My Hero HP < x", 100, 0, 100, 5)
BM.R:Slider("EHP", "Enemy HP < x", 100, 0, 100, 5)
BM.R:Slider('MC', "Use in Combo if Mana > x", 0, 0, 100, 0)
BM.R:Slider('MH', "Use in Harass if Mana > x", 50, 0, 100, 0)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AD",BM.TS,false)
self.wstacks = {}
self.invtime = 0
self.R = false
self.QPos = nil
self.QPos2 = nil
self.QPos3 = nil
self.TumbleEndPos = nil
self.TumbleStartPos = nil
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("ProcessSpellComplete", function(un, s) self:AAReset(un, s) end)
Callback.Add("UpdateBuff", function(u,b) self:UpdB(u,b) end)
Callback.Add("RemoveBuff", function(u,b) self:RemB(u,b) end)
Callback.Add("Draw", function() self:Drawi() end)
AntiChannel()
AntiGapCloser()
DelayAction( function ()
if BM["AC"] then BM.AC:Info("ad", "Use Spell(s) : ") BM.AC:Boolean("E","Use E", true) end
if BM["AGC"] then BM.AGC:Info("ad", "Use Spell(s) : ") BM.AGC:Boolean("E","Use E", true) end
end,.001)
end
function Vayne:AntiChannel(unit,range)
if BM.AC.E:Value() and range < Spell[2].range and SReady[2] then
CastTargetSpell(unit,2)
end
end
function Vayne:AntiGapCloser(unit,range)
if BM.AGC.E:Value() and range < Spell[2].range and SReady[2] then
CastTargetSpell(unit,2)
end
end
function Vayne:UpdB(u,b)
if u and b then
if b.Name == "VayneSilveredDebuff" then
self.wstacks[u.networkID] = b.Count
end
if u.isMe and b.Name == "vaynetumblefade" then
self.invtime = GetTickCount()
self.R = true
end
end
end
function Vayne:RemB(u,b)
if u and b then
if b.Name == "VayneSilveredDebuff" then
self.wstacks[u.networkID] = 0
end
if u.isMe and b.Name == "vaynetumblefade" then
self.invtime = 0
self.R = false
end
end
end
function Vayne:GetRTimer()
if self.invtime > 0 then
return math.floor(2-(GetTickCount()-self.invtime)*.001)
end
end
function Vayne:Has2WStacks(u)
for _,i in pairs(self.wstacks) do
if i and i == 2 and u.networkID == _ then
return true
end
end
return false
end
function Vayne:IsStealth()
if self.invtime > 0 then
return true
end
return false
end
function Vayne:IsUnderTurret(pos,range)
if not pos or not range then return end
for _,i in pairs(turrets) do
if i.team ~= myHero.team and i.valid and GetDistance(i,pos) < range and AllyMinionsAround(i,950) < 2 then
return true
end
end
return false
end
function Vayne:GetBestTumblePos(u)
if (Mode == "Combo" and BM.Q.C:Value() and GetPercentMP(myHero) > BM.Q.MH:Value()) or (Mode == "Harass" and BM.Q.H:Value() and GetPercentMP(myHero) > BM.Q.MC:Value()) or (u and u.isMinion and u.team == MINION_JUNGLE and Mode == "LaneClear" and BM.Q.JC:Value() and GetPercentMP(myHero) > BM.Q.MJC:Value()) or (u and u.isMinion and u.team == MINION_ENEMY and Mode == "LaneClear" and BM.Q.LC:Value() and GetPercentMP(myHero) > BM.Q.MLC:Value()) then
if BM.Q.TC:Value() then
if u.type == myHero.type then
if self.QPos and EnemyHeroesAround(self.QPos,150) == 0 and not self.QPos2 and GetDistance(u,self.QPos) < GetDistance(u,self.QPos2) and GetDistance(self.QPos) > GetDistance(self.QPos2) and GetDistance(GetMousePos(),self.QPos) > GetDistance(GetMousePos(),self.QPos2) and not self:IsUnderTurret(self.QPos,950) then
self.QPos2 = nil
return self.QPos
else
self.QPos = nil
if not self:IsUnderTurret(self.QPos2,950) and not self.QPos and self.QPos2 then
return self.QPos2
end
end
else
if u.team == MINION_ENEMY then
if self.QPos and EnemyMinionsAround(self.QPos,150) == 0 and not self.QPos2 and GetDistance(u,self.QPos) < GetDistance(u,self.QPos2) and GetDistance(self.QPos) > GetDistance(self.QPos2) and GetDistance(GetMousePos(),self.QPos) > GetDistance(GetMousePos(),self.QPos2) and not self:IsUnderTurret(self.QPos,950) then
self.QPos2 = nil
return self.QPos
else
self.QPos = nil
if not self:IsUnderTurret(self.QPos2,950) and not self.QPos and self.QPos2 then
return self.QPos2
end
end
elseif u.team == MINION_JUNGLE then
if self.QPos and JungleMinionsAround(self.QPos,150) == 0 and not self.QPos2 and GetDistance(u,self.QPos) < GetDistance(u,self.QPos2) and GetDistance(self.QPos) > GetDistance(self.QPos2) and GetDistance(GetMousePos(),self.QPos) > GetDistance(GetMousePos(),self.QPos2) and not self:IsUnderTurret(self.QPos,950) then
self.QPos2 = nil
return self.QPos
else
self.QPos = nil
if not self:IsUnderTurret(self.QPos2,950) and not self.QPos and self.QPos2 then
return self.QPos2
end
end
end
end
else
if u.type == myHero.type then
if self.QPos and EnemyHeroesAround(self.QPos,150) == 0 and not self.QPos2 and GetDistance(u,self.QPos) < GetDistance(u,self.QPos2) and GetDistance(self.QPos) > GetDistance(self.QPos2) and GetDistance(GetMousePos(),self.QPos) > GetDistance(GetMousePos(),self.QPos2) then
self.QPos2 = nil
return self.QPos
else
self.QPos = nil
if not self.QPos and self.QPos2 then
return self.QPos2
end
end
else
if u.team == MINION_ENEMY then
if self.QPos and EnemyMinionsAround(self.QPos,150) == 0 and not self.QPos2 and GetDistance(u,self.QPos) < GetDistance(u,self.QPos2) and GetDistance(self.QPos) > GetDistance(self.QPos2) and GetDistance(GetMousePos(),self.QPos) > GetDistance(GetMousePos(),self.QPos2) then
self.QPos2 = nil
return self.QPos
else
self.QPos = nil
if not self.QPos and self.QPos2 then
return self.QPos2
end
end
elseif u.team == MINION_JUNGLE then
if self.QPos and JungleMinionsAround(self.QPos,150) == 0 and not self.QPos2 and GetDistance(u,self.QPos) < GetDistance(u,self.QPos2) and GetDistance(self.QPos) > GetDistance(self.QPos2) and GetDistance(GetMousePos(),self.QPos) > GetDistance(GetMousePos(),self.QPos2) then
self.QPos2 = nil
return self.QPos
else
self.QPos = nil
if not self.QPos and self.QPos2 then
return self.QPos2
end
end
end
end
end
end
end
function Vayne:Checks()
if SReady[0] then
self.TumbleEndPos = Vector(myHero) + Vector(Vector(GetMousePos()) - myHero):normalized() * 300
self.TumbleStartPos = Vector(myHero)
else
self.TumbleEndPos = nil
self.TumbleStartPos = nil
end
if self.TumbleEndPos and self.TumbleStartPos then
self.QPos = Vector(myHero)+Vector(Vector(GetMousePos())-myHero):normalized()*225+Vector(Vector(self.TumbleEndPos)-Vector(self.TumbleStartPos)):normalized():perpendicular()*225
self.QPos2 = Vector(myHero)+Vector(Vector(GetMousePos())-myHero):normalized()*225+Vector(Vector(self.TumbleEndPos)-Vector(self.TumbleStartPos)):normalized():perpendicular2()*225
else
self.QPos = nil
self.QPos2 = nil
end
if self:IsStealth() then
DisableAttacks(true)
else
DisableAttacks(false)
end
end
function Vayne:CastE(u)
if SReady[2] and (Mode == "Combo" and BM.E.C:Value() and GetPercentMP(myHero) > BM.E.MH:Value()) or (Mode == "Harass" and BM.E.H:Value() and GetPercentMP(myHero) > BM.E.MC:Value()) or (u and u.isMinion and u.team == MINION_JUNGLE and Mode == "LaneClear" and BM.E.JC:Value() and GetPercentMP(myHero) > BM.E.MJC:Value()) then
if u.valid and u.distance < 800 then
local e = GetPrediction(u, Spell[2])
local ePos = Vector(e.castPos)
local c = math.ceil(BM.E.a:Value())
local cd = math.ceil(BM.E.pd:Value()/c)
for step = 1, c, 5 do
local PP = Vector(ePos) + Vector(Vector(ePos) - Vector(myHero)):normalized()*(cd*step)
if MapPosition:inWall(PP) == true then
CastTargetSpell(u, 2)
end
end
end
end
end
function Vayne:CastR(u)
if (Mode == "Combo" and BM.R.C:Value() and GetPercentMP(myHero) > BM.R.MH:Value()) or (Mode == "Harass" and BM.R.H:Value() and GetPercentMP(myHero) > BM.R.MC:Value()) then
if SReady[3] and ValidTarget(u, 800) and GetPercentHP(myHero) <= BM.R.MHP:Value() and GetPercentHP(u) <= BM.R.EHP:Value() and EnemyHeroesAround(myHero.pos,1000) >= BM.R.EAR:Value() and AllyHeroesAround(myHero.pos,1000) >= BM.R.AAR:Value() then
CastSpell(3)
end
end
end
function Vayne:Tick()
if myHero.dead then return end
target = ts:GetTarget()
GetReady()
self:Checks()
self:AutoE()
self:KS()
if Mode == "Combo" then
self:Combo(target)
elseif Mode == "LaneClear" then
self:JungleClear()
self:LaneClear()
elseif Mode == "Harass" then
self:Harass(target)
else
return
end
end
function Vayne:AutoE()
for _,i in pairs(GetEnemyHeroes()) do
if BM.E.EAE:Value() and SReady[2] and GetDistance(GetPrediction(i,{ delay = .3, speed = math.huge, width = 1, range = 1500}).castPos) < BM.E.DTE:Value() and i.valid then
CastTargetSpell(i,2)
end
end
end
function Vayne:AAReset(un,s)
if s and un.isMe and BM.Q.QM:Value() == 1 and s.name:lower():find("attack") then
local u = s.target
if u and self.TumbleEndPos and self.TumbleStartPos and self:GetBestTumblePos(u) then
if GetDistance(self.TumbleEndPos, u) < 630 and GetDistance(self.TumbleEndPos, u) > 100 and SReady[0] then
CastSkillShot(0, self:GetBestTumblePos(u))
end
if GetDistance(u) > 630 and GetDistance(self.TumbleEndPos, u) < 630 and SReady[0] then
CastSkillShot(0, self:GetBestTumblePos(u))
end
end
end
end
function Vayne:Combo(u)
if u and BM.Q.QM:Value() == 2 and self:Has2WStacks(u) then
if self.TumbleEndPos and self.TumbleStartPos and self:GetBestTumblePos(u) then
if GetDistance(self.TumbleEndPos, u) < 630 and GetDistance(self.TumbleEndPos, u) > 100 and SReady[0] then
CastSkillShot(0, self:GetBestTumblePos(u))
end
if GetDistance(u) > 630 and GetDistance(self.TumbleEndPos, u) < 630 and SReady[0] then
CastSkillShot(0, self:GetBestTumblePos(u))
end
end
end
if u then
self:CastE(u)
self:CastR(u)
end
end
function Vayne:Harass(u)
if u and BM.Q.QM:Value() == 2 and self:Has2WStacks(u) then
if self.TumbleEndPos and self.TumbleStartPos and self:GetBestTumblePos(u) then
if GetDistance(self.TumbleEndPos, u) < 630 and GetDistance(self.TumbleEndPos, u) > 100 and SReady[0] then
CastSkillShot(0, self:GetBestTumblePos(u))
end
if GetDistance(u) > 630 and GetDistance(self.TumbleEndPos, u) < 630 and SReady[0] then
CastSkillShot(0, self:GetBestTumblePos(u))
end
end
end
if u then
self:CastE(u)
self:CastR(u)
end
end
function Vayne:JungleClear()
for _,u in pairs(SLM) do
if u and BM.Q.QM:Value() == 2 and self:Has2WStacks(u) and u.team == MINION_JUNGLE then
if self.TumbleEndPos and self.TumbleStartPos and self:GetBestTumblePos(u) then
if GetDistance(self.TumbleEndPos, u) < 630 and GetDistance(self.TumbleEndPos, u) > 100 and SReady[0] then
CastSkillShot(0, self:GetBestTumblePos(u))
end
if GetDistance(u) > 630 and GetDistance(self.TumbleEndPos, u) < 630 and SReady[0] then
CastSkillShot(0, self:GetBestTumblePos(u))
end
end
end
if u then
self:CastE(u)
end
end
end
function Vayne:LaneClear()
for _,u in pairs(SLM) do
if u and BM.Q.QM:Value() == 2 and self:Has2WStacks(u) and u.team == MINION_ENEMY then
if self.TumbleEndPos and self.TumbleStartPos and self:GetBestTumblePos(u) then
if GetDistance(self.TumbleEndPos, u) < 630 and GetDistance(self.TumbleEndPos, u) > 100 and SReady[0] then
CastSkillShot(0, self:GetBestTumblePos(u))
end
if GetDistance(u) > 630 and GetDistance(self.TumbleEndPos, u) < 630 and SReady[0] then
CastSkillShot(0, self:GetBestTumblePos(u))
end
end
end
end
end
function Vayne:Drawi()
if BM.R.DIT:Value() then
if self.invtime > 0 then
DrawText("Invisble for : "..self:GetRTimer().." sek",20,myHero.pos2D.x-75,myHero.pos2D.y,GoS.White)
end
end
end
function Vayne:KS()
for _,i in pairs(GetEnemyHeroes()) do
if i and i.alive and i.valid and i.distance < Spell[2].range and Dmg[2](i) > GetADHP(i) and BM.E.KS:Value() then
CastTargetSpell(i,2)
end
end
end
--[[
____ _ _ _ _
| __ )| (_) |_ _______ _ __ __ _ _ __ | | __
| _ \| | | __|_ / __| '__/ _` | '_ \| |/ /
| |_) | | | |_ / / (__| | | (_| | | | | <
|____/|_|_|\__/___\___|_| \__,_|_| |_|_|\_\
--]]
class 'Blitzcrank'
function Blitzcrank:__init()
Spell = {
[0] = { delay = 0.25, speed = 1800, width = 70, range = 900, type = "line",col = true },
[1] = { range = 0 },
[2] = { range = 0 },
[3] = { range = 650 }
}
Dmg = {
[0] = function (unit) return CalcDamage(myHero, unit, 0, 55 * GetCastLevel(myHero,0) + 25 + GetBonusAP(myHero)) end,
[2] = function (unit) return CalcDamage(myHero, unit, 0, (GetBaseDamage(myHero) + GetBonusDmg(myHero)) * 2, 0) end,
[3] = function (unit) return CalcDamage(myHero, unit, 0, 125 * GetCastLevel(myHero,3) + 125 + GetBonusAP(myHero)) end,
}
BM:Menu("C", "Combo")
BM.C:Boolean("Q", "Use Q", true)
BM.C:Boolean("W", "Use W", true)
BM.C:Boolean("E", "Use E", true)
BM.C:Boolean("R", "Use R", true)
BM.C:Slider("EAR", "R hit enemies >= x ", 2, 1, 5, 1)
BM:Menu("H", "Harass")
BM.H:Boolean("Q", "Use Q", true)
BM.H:Boolean("E", "Use E", true)
BM:Menu("LC", "LaneClear")
BM.LC:Boolean("Q", "Use Q", true)
BM.LC:Boolean("E", "Use E", true)
BM.LC:Boolean("R", "Use R", true)
BM:Menu("JC", "JungleClear")
BM.JC:Boolean("Q", "Use Q", true)
BM.JC:Boolean("E", "Use E", true)
BM.JC:Boolean("R", "Use R", true)
BM:Menu("KS", "Killsteal")
BM.KS:Boolean("Enable","Enable KS", true)
BM.KS:Boolean("Q", "Use Q", true)
BM.KS:Boolean("R", "Use R", true)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AP",BM.TS,false)
BM:Menu("p", "Prediction")
Callback.Add("Tick", function() self:Tick() end)
AntiChannel()
DelayAction( function ()
if BM["AC"] then
BM.AC:Info("ad", "Use Spell(s) : ")
BM.AC:Boolean("Q","Use Q", true)
BM.AC:Boolean("R","Use R", true)
end
end,.001)
for i = 0,0 do
PredMenu(BM.p, i)
end
end
function Blitzcrank:Tick()
if myHero.dead then return end
target = ts:GetTarget()
if Mode == "Combo" then
self:Combo(target)
elseif Mode == "LaneClear" then
self:LaneClear()
self:JungleClear()
elseif Mode == "Harass" then
self:Harass(target)
else
return
end
end
function Blitzcrank:AntiChannel(unit,range)
if BM.AC.Q:Value() and range < 600 and SReady[3] then
CastSpell(3)
elseif BM.AC.R:Value() and SReady[0] and range < Spell[0].range then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
end
function Blitzcrank:Combo(target)
if SReady[0] and ValidTarget(target, Spell[0].range*1.1) and BM.C.Q:Value() then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
if SReady[1] and ValidTarget(target, 1000) and BM.C.W:Value() and GetDistance(myHero,target) <= 850 and SReady[0] then
CastSpell(1)
end
if SReady[2] and ValidTarget(target, 250) and BM.C.E:Value() then
CastSpell(2)
end
if SReady[3] and ValidTarget(target, GetCastRange(myHero,3)) and EnemiesAround(GetOrigin(myHero), GetCastRange(myHero,3)) >= BM.C.EAR:Value() and BM.C.R:Value() then
CastSpell(3)
end
end
function Blitzcrank:Harass(target)
if SReady[0] and ValidTarget(target, Spell[0].range) and BM.H.Q:Value() then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
if SReady[2] and ValidTarget(target, 300) and BM.H.E:Value() then
CastSpell(2)
end
end
function Blitzcrank:LaneClear()
for _,minion in pairs(SLM) do
if GetTeam(minion) == MINION_ENEMY then
if SReady[0] and ValidTarget(minion, Spell[0].range) and BM.LC.Q:Value() then
CastGenericSkillShot(myHero,minion,Spell[0],0,BM.p)
end
if SReady[2] and ValidTarget(minion, 300) and BM.LC.E:Value() then
CastSpell(2)
end
if SReady[3] and ValidTarget(minion, 600) and BM.LC.R:Value() then
CastSpell(3)
end
end
end
end
function Blitzcrank:JungleClear()
for _,mob in pairs(SLM) do
if GetTeam(mob) == MINION_ENEMY then
if SReady[0] and ValidTarget(mob, Spell[0].range) and BM.JC.Q:Value() then
CastGenericSkillShot(myHero,mob,Spell[0],0,BM.p)
end
if SReady[2] and ValidTarget(mob, 300) and BM.JC.E:Value() then
CastSpell(2)
end
if SReady[3] and ValidTarget(mob, 600) and BM.JC.R:Value() then
CastSpell(3)
end
end
end
end
function Blitzcrank:KS()
if not BM.KS.Enable:Value() then return end
for _,unit in pairs(GetEnemyHeroes()) do
if GetAPHP(unit) < Dmg[0](unit) and SReady[0] and ValidTarget(unit, Spell[0].range) and BM.KS.Q:Value() then
CastGenericSkillShot(myHero,unit,Spell[0],0,BM.p)
end
if GetADHP(unit) < Dmg[2](unit) and SReady[2] and ValidTarget(unit, 300) and BM.KS.E:Value() then
CastSpell(2)
end
if GetAPHP(unit) < Dmg[3](unit) and SReady[3] and ValidTarget(unit, 600) and BM.KS.R:Value() then
CastSpell(3)
end
end
end
--[[
_____ _
/ ____| | |
| (___ ___ _ __ __ _| | ____ _
\___ \ / _ \| '__/ _` | |/ / _` |
____) | (_) | | | (_| | < (_| |
|_____/ \___/|_| \__,_|_|\_\__,_|
--]]
class 'Soraka'
function Soraka:__init()
Spell = {
[0] = { delay = 0.250, speed = math.huge, width = 235, range = 800, type = "circular",col = false },
[1] = { range = 550, ally = true },
[2] = { delay = 1.75, speed = math.huge, width = 310, range = 900, type = "circular", col = false}
}
Dmg = {
[0] = function (unit) return CalcDamage(myHero, unit, 0, 40 * GetCastLevel(myHero,0) + 30 + GetBonusAP(myHero) * .35 ) end,
[2] = function (unit) return CalcDamage(myHero, unit, 0, 40 * GetCastLevel(myHero,2) + 30 + GetBonusAP(myHero) * .4 ) end,
}
BM:Menu("C", "Combo")
BM.C:Boolean("Q", "Use Q", true)
BM.C:Boolean("E", "Use E", true)
BM:Menu("H", "Harass")
BM.H:Boolean("Q", "Use Q", true)
BM.H:Boolean("E", "Use E", true)
BM:Menu("AW", "Auto W")
BM.AW:Boolean("Enable", "Enable Auto W", true)
BM.AW:Info("5620-", "(myHeroHP) To Heal ally")
BM.AW:Slider("myHeroHP", "myHeroHP >= X", 5, 1, 100, 10)
BM.AW:Slider("allyHP", "AllyHP <= X", 85, 1, 100, 10)
BM.AW:Slider("ATRR", "Ally To Enemy Range", 1500, 500, 3000, 10)
DelayAction(function()
for _,i in pairs(GetAllyHeroes()) do
BM.AW:Boolean("h"..GetObjectName(i), "Heal "..GetObjectName(i))
end
end, .001)
BM:Menu("AR", "Auto R")
BM.AR:Boolean("Enable", "Enable Auto R", true)
BM.AR:Info("HealInfo", "(myHeroHP) to Heal me with ult")
BM.AR:Slider("myHeroHP", "myHeroHP <= X", 8, 1, 100, 10)
BM.AR:Slider("allyHP", "AllyHP <= X", 8, 1, 100, 10)
BM.AR:Slider("ATRR", "Ally To Enemy Range", 1500, 500, 3000, 10)
BM:Menu("KS", "Killsteal")
BM.KS:Boolean("Enable", "Enable Killsteal", true)
BM.KS:Boolean("Q", "Use Q", false)
BM.KS:Boolean("E", "Use E", true)
BM:Menu("LC", "LaneClear")
BM.LC:Boolean("Q", "Use Q", true)
BM:Menu("JC", "JungleClear")
BM.JC:Boolean("Q", "Use Q", true)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AP",BM.TS,false)
BM:Menu("p", "Prediction")
BM.p:Slider("aE", "Adjust E Delay", 1.5, .5, 2, .1)
Callback.Add("Tick", function() self:Tick() end)
AntiChannel()
DelayAction( function ()
if BM["AC"] then BM.AC:Info("ad", "Use Spell(s) : ") BM.AC:Boolean("E","Use E", true) end
end,.001)
for i = 0,2,2 do
PredMenu(BM.p, i)
end
end
function Soraka:AntiChannel(unit,range)
if SReady[2] and BM.AC.E:Value() and ValidTarget(unit,Spell[2].range) then
CastSkillShot(2,GetOrigin(unit))
end
end
function Soraka:Tick()
if myHero.dead then return end
Spell[0].delay = BM.p.aE:Value()
target = ts:GetTarget()
GetReady()
self:KS()
self:AutoW()
self:AutoR()
if Mode == "Combo" then
self:Combo(target)
elseif Mode == "LaneClear" then
self:JungleClear()
self:LaneClear()
elseif Mode == "Harass" then
self:Harass(target)
else
return
end
end
function Soraka:Combo(target)
if SReady[0] and ValidTarget(target, Spell[0].range) and BM.C.Q:Value() then
Spell[0].delay = .25 + (GetDistance(myHero,target) / Spell[0].range)*.75
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
if SReady[2] and ValidTarget(target, Spell[2].range) and BM.C.E:Value() then
CastGenericSkillShot(myHero,target,Spell[2],2,BM.p)
end
end
function Soraka:Harass(target)
if SReady[0] and ValidTarget(target, Spell[0].range*1.1) and BM.H.Q:Value() then
Spell[0].delay = .25 + (GetDistance(myHero,target) / Spell[0].range)*.55
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
if SReady[2] and ValidTarget(target, Spell[2].range) and BM.H.E:Value() then
CastGenericSkillShot(myHero,target,Spell[2],2,BM.p)
end
end
function Soraka:KS()
if not BM.KS.Enable:Value() then return end
for _,unit in pairs(GetEnemyHeroes()) do
if GetAPHP(unit) < Dmg[0](unit) and SReady[0] and ValidTarget(unit, Spell[0].range) and BM.KS.Q:Value() then
Spell[0].delay = .25 + (GetDistance(myHero,unit) / Spell[0].range)*.55
CastGenericSkillShot(myHero,unit,Spell[0],0,BM.p)
end
if GetAPHP(unit) < Dmg[2](unit) and SReady[2] and ValidTarget(unit, Spell[2].range) and BM.KS.E:Value() then
CastGenericSkillShot(myHero,unit,Spell[2],2,BM.p)
end
end
end
function Soraka:LaneClear()
for _,minion in pairs(SLM) do
if GetTeam(minion) == MINION_ENEMY then
if SReady[0] and ValidTarget(minion, Spell[0].range*1.1) and BM.LC.Q:Value() then
Spell[0].delay = .25 + (GetDistance(myHero,minion) / Spell[0].range)*.55
CastGenericSkillShot(myHero,minion,Spell[0],0,BM.p)
end
end
end
end
function Soraka:JungleClear()
for _,mob in pairs(SLM) do
if GetTeam(mob) == MINION_JUNGLE then
if SReady[0] and ValidTarget(mob, Spell[0].range*1.1) and BM.JC.Q:Value() then
Spell[0].delay = .25 + (GetDistance(myHero,mob) / Spell[0].range)*.55
CastGenericSkillShot(myHero,mob,Spell[0],0,BM.p)
end
end
end
end
function Soraka:AutoW()
for _,ally in pairs(GetAllyHeroes()) do
if GetDistance(myHero,ally)<GetCastRange(myHero,1) and SReady[1] and GetPercentHP(myHero) >= BM.AW.myHeroHP:Value() and GetPercentHP(ally) <= BM.AW.allyHP:Value() and BM.AW.Enable:Value() and EnemiesAround(GetOrigin(ally), BM.AW.ATRR:Value()) >= 1 and BM.AW["h"..GetObjectName(ally)]:Value() then
CastTargetSpell(ally, 1)
end
end
end
function Soraka:AutoR()
for _,ally in pairs(GetAllyHeroes()) do
if SReady[3] and not ally.dead and GetPercentHP(ally) <= BM.AR.allyHP:Value() and BM.AR.Enable:Value() and EnemiesAround(GetOrigin(ally), BM.AR.ATRR:Value()) >= 1 then
CastSpell(3)
elseif SReady[3] and not myHero.dead and GetPercentHP(myHero) <= BM.AR.myHeroHP:Value() and BM.AR.Enable:Value() and EnemiesAround(GetOrigin(myHero), BM.AR.ATRR:Value()) >= 1 then
CastSpell(3)
end
end
end
class 'Sivir'
function Sivir:__init()
Spell = {
[0] = { delay = 0.250, speed = 1350, width = 85, range = 1075, type = "line", col = false},
}
Dmg = {
[0] = function (unit) return CalcDamage(myHero, unit, 20 * GetCastLevel(myHero,0) + 5 + (.1 * GetCastLevel(myHero,0) + .6) * (GetBonusDmg(myHero) + GetBaseDamage(myHero)), .5*GetBonusAP(myHero)) end,
[1] = function (unit) return CalcDamage(myHero, unit, ((5 * GetCastLevel(myHero,2) + 45)/100) * GetBonusDmg(myHero), 0) end,
}
BM:Menu("C", "Combo")
BM.C:Boolean("Q", "Use Q", true)
BM.C:Boolean("W", "Use W", true)
BM.C:Boolean("R", "Use R", true)
BM.C:Slider("RE", "Use R if x enemies", 2, 1, 5, 1)
BM.C:Slider("RHP", "myHeroHP ", 75, 1, 100, 5)
BM.C:Slider("REHP", "EnemyHP ", 65, 1, 100, 5)
BM:Menu("LC", "LaneClear")
BM.LC:Boolean("Q", "Use Q", true)
BM.LC:Boolean("W", "Use W", true)
BM:Menu("JC", "JungleClear")
BM.JC:Boolean("Q", "Use Q", true)
BM.JC:Boolean("W", "Use W", true)
BM:Menu("KS", "Killsteal")
BM.KS:Boolean("Q", "Use Q", true)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AD",BM.TS,false)
BM:Menu("p", "Prediction")
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("ProcessSpellComplete", function(unit,spell) self:AAReset(unit,spell) end)
HitMe()
for i = 0,0 do
PredMenu(BM.p, i)
end
end
function Sivir:Tick()
if myHero.dead then return end
target = ts:GetTarget()
GetReady()
self:KS()
if Mode == "Combo" then
self:Combo(target)
elseif Mode == "LaneClear" then
self:JungleClear()
self:LaneClear()
else
return
end
end
function Sivir:AAReset(unit, spell)
local ta = spell.target
if unit == myHero and ta ~= nil and spell.name:lower():find("attack") and SReady[1] then
if Mode == "Combo" and BM.C.W:Value() then
if ValidTarget(ta, GetRange(myHero)+GetHitBox(myHero)) then
CastSpell(1)
end
elseif Mode == "LaneClear" and BM.LC.W:Value() and GetTeam(ta) == MINION_ENEMY then
if ValidTarget(ta, GetRange(myHero)+GetHitBox(myHero)) then
CastSpell(1)
end
elseif Mode == "LaneClear" and BM.JC.W:Value() and GetTeam(ta) == MINION_JUNGLE then
if ValidTarget(ta, GetRange(myHero)+GetHitBox(myHero)) then
CastSpell(1)
end
end
end
end
function Sivir:Combo(target)
if SReady[0] and ValidTarget(target, Spell[0].range) and BM.C.Q:Value() then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
if SReady[3] and ValidTarget(target, 800) and BM.C.R:Value() and EnemiesAround(myHero,800) >= BM.C.RE:Value() and GetPercentHP(myHero) < BM.C.RHP:Value() and GetPercentHP(target) < BM.C.REHP:Value() then
CastSpell(3)
end
end
function Sivir:LaneClear()
for _,minion in pairs(SLM) do
if GetTeam(minion) == MINION_ENEMY then
if SReady[0] and ValidTarget(minion, Spell[0].range) and BM.LC.Q:Value() then
CastGenericSkillShot(myHero,minion,Spell[0],0,BM.p)
end
end
end
end
function Sivir:JungleClear()
for _,mob in pairs(SLM) do
if GetTeam(mob) == MINION_JUNGLE then
if SReady[0] and ValidTarget(mob, Spell[0].range) and BM.JC.Q:Value() then
CastGenericSkillShot(myHero,mob,Spell[0],0,BM.p)
end
end
end
end
function Sivir:KS()
for _,target in pairs(GetEnemyHeroes()) do
if SReady[0] and ValidTarget(target, Spell[0].range) and BM.KS.Q:Value() and GetAPHP(target) < Dmg[0](target) then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
end
end
function Sivir:HitMe(k,pos,dt,ty)
DelayAction( function()
CastSpell(2)
end,dt)
end
class 'Nocturne'
function Nocturne:__init()
Spell = {
[0] = { delay = 0.250, speed = 1400, width = 120, range = 1125, type = "line", col = false },
[2] = { range = 425},
[3] = { range = function() return 1750 + GetCastLevel(myHero,3)*750 end},
}
Dmg = {
[0] = function (unit) return CalcDamage(myHero, unit, 45 * GetCastLevel(myHero,0) + 15 + GetBonusDmg(myHero)* .75, 0) end,
[2] = function (unit) return CalcDamage(myHero, unit, 0, 45 * GetCastLevel(myHero,2) + 35 + myHero.ap) end,
[3] = function (unit) return CalcDamage(myHero, unit, 0, 45 * GetCastLevel(myHero,2) + 35 + myHero.ap) end,
}
self.marker = nil
BM:Menu("C", "Combo")
BM.C:Boolean("Q", "Use Q", true)
BM.C:Boolean("E", "Use E", true)
BM.C:DropDown("RM", "R Mode", 2, {"Off","Keypress","Auto"})
BM.C:KeyBinding("RK", "R Keypress", string.byte("T"))
BM:Menu("LC", "LaneClear")
BM.LC:Boolean("Q", "Use Q", true)
BM:Menu("JC", "JungleClear")
BM.JC:Boolean("Q", "Use Q", true)
BM:Menu("KS", "Killsteal")
BM.KS:Boolean("Q", "Use Q", true)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AD",BM.TS,false)
BM:Menu("p", "Prediction")
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("Draw", function() self:Draw() end)
HitMe()
for i = 0,0 do
PredMenu(BM.p, i)
end
end
function Nocturne:Tick()
if myHero.dead then return end
target = ts:GetTarget()
GetReady()
self:KS()
if Mode == "Combo" then
self:Combo(target)
elseif Mode == "LaneClear" then
self:LaneClear()
else
return
end
end
function Nocturne:KS()
self.marker = false
for _,target in pairs(GetEnemyHeroes()) do
if SReady[0] and ValidTarget(target, Spell[0].range) and BM.KS.Q:Value() and GetADHP(target) < Dmg[0](target) then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
if SReady[3] and ValidTarget(target, Spell[3].range()) and GetADHP(target) < Dmg[0](target) + Dmg[3](target) + Dmg[2](target) + myHero.totalDamage*2 then
self.marker = target
if BM.C.RM:Value() == 3 or (BM.C.RM:Value() == 2 and BM.C.RK:Value()) then
CastSpell(3)
DelayAction(function() CastTargetSpell(target,3) end, .2)
end
end
end
end
function Nocturne:Combo(target)
if SReady[0] and ValidTarget(target, Spell[0].range) and BM.C.Q:Value() then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
if SReady[2] and ValidTarget(target, Spell[2].range) and BM.C.E:Value() then
CastTargetSpell(target,2)
end
end
function Nocturne:LaneClear()
for _,minion in pairs(SLM) do
if SReady[0] and ValidTarget(minion, Spell[0].range) then
if GetTeam(minion) == MINION_ENEMY and BM.LC.Q:Value() then
CastGenericSkillShot(myHero,minion,Spell[0],0,BM.p)
elseif GetTeam(minion) == 300 and BM.JC.Q:Value() then
CastGenericSkillShot(myHero,minion,Spell[0],0,BM.p)
end
end
end
end
function Nocturne:Draw()
if self.marker and BM.C.RM:Value() == 2 then
DrawText(self.marker.charName .. " killable press " .. string.char(BM.C.RK:Key()),40,50,50,GoS.Red)
end
end
function Nocturne:HitMe(k,pos,dt,ty)
DelayAction( function()
CastSpell(1)
end,dt)
end
--[[
_
/\ | |
/ \ __ _| |_ _ __ _____ __
/ /\ \ / _` | __| '__/ _ \ \/ /
/ ____ \ (_| | |_| | | (_) > <
/_/ \_\__,_|\__|_| \___/_/\_\
--]]
class "Aatrox"
function Aatrox:__init()
Spell = {
[0] = { delay = 0.2, range = 650, speed = 1500, width = 113, type = "circular", col = false },
[1] = { range = 0 },
[2] = { delay = 0.1, range = 1000, speed = 1000, width = 150, type = "line", col = false },
[3] = { range = 550 }
}
Dmg = {
[0] = function (unit) return CalcDamage(myHero, unit, 35 + GetCastLevel(myHero,0)*45 + GetBonusDmg(myHero)*.6, 0) end,
[1] = function (unit) return CalcDamage(myHero, unit, 25 + GetCastLevel(myHero,1)*35 + GetBonusDmg(myHero), 0) end,
[2] = function (unit) return CalcDamage(myHero, unit, 0, 40 + GetCastLevel(myHero,2)*35 + GetBonusDmg(myHero)*.6 + GetBonusAP(myHero)*.6) end,
[3] = function (unit) return CalcDamage(myHero, unit, 0, 100 + GetCastLevel(myHero,3)*100 + GetBonusAP(myHero)) end,
}
BM:Menu("C", "Combo")
BM.C:Boolean("Q", "Use Q", true)
BM.C:Boolean("W", "Use W", true)
BM.C:Boolean("WE", "Only Toggle if enemy nearby", true)
BM.C:Slider("WT", "Toggle W at % HP", 45, 5, 90, 5)
BM.C:Boolean("E", "Use E", true)
BM.C:Boolean("R", "Use R", true)
BM.C:Slider("RE", "Use R if x enemies", 2, 1, 5, 1)
BM:Menu("H", "Harass")
BM.H:Boolean("E", "Use E", true)
BM:Menu("LC", "LaneClear", true)
BM.LC:Boolean("Q", "Use Q", true)
BM.LC:Boolean("E", "Use E", true)
BM:Menu("JC", "JungleClear")
BM.JC:Boolean("Q", "Use Q", true)
BM.JC:Boolean("E", "Use E", true)
BM:Menu("KS", "Killsteal")
BM.KS:Boolean("Enable", "Enable Killsteal", true)
BM.KS:Boolean("Q", "Use Q", false)
BM.KS:Boolean("E", "Use E", true)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AD",BM.TS,false)
BM:Menu("p", "Prediction")
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("UpdateBuff", function(unit,buff) self:Stat(unit,buff) end)
if GotBuff(myHero, "aatroxwpower") == 1 then
self.W = "dmg"
else
self.W = "heal"
end
for i = 0,2,2 do
PredMenu(BM.p, i)
end
end
function Aatrox:Tick()
if myHero.dead then return end
GetReady()
self:KS()
self:Toggle(target)
target = ts:GetTarget()
if Mode == "Combo" then
self:Combo(target)
elseif Mode == "LaneClear" then
self:LaneClear()
self:JungleClear()
elseif Mode == "LastHit" then
elseif Mode == "Harass" then
self:Harass(target)
else
return
end
end
function Aatrox:Toggle(target)
if SReady[1] and BM.C.W:Value() and (not BM.C.WE:Value() or ValidTarget(target,750)) then
if GetPercentHP(myHero) < BM.C.WT:Value()+1 and self.W == "dmg" then
CastSpell(1)
elseif GetPercentHP(myHero) > BM.C.WT:Value() and self.W == "heal" then
CastSpell(1)
end
end
end
function Aatrox:Combo(target)
if SReady[0] and ValidTarget(target, Spell[0].range*1.1) and BM.C.Q:Value() then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
if SReady[2] and ValidTarget(target, Spell[2].range*1.1) and BM.C.E:Value() then
CastGenericSkillShot(myHero,target,Spell[2],2,BM.p)
end
if SReady[3] and ValidTarget(target, 550) and BM.C.R:Value() and EnemiesAround(myHero,550) >= BM.C.RE:Value() then
CastSpell(3)
end
end
function Aatrox:Harass(target)
if SReady[2] and ValidTarget(target, Spell[2].range*1.1) and BM.H.E:Value() then
local Pred = GetPrediction(target, Spell[2])
if Pred.hitChance >= BM.p.hE:Value()/100 and GetDistance(Pred.castPos,GetOrigin(myHero)) < Spell[2].range then
CastSkillShot(2,Pred.castPos)
end
end
end
function Aatrox:LaneClear()
for _,minion in pairs(SLM) do
if GetTeam(minion) == MINION_ENEMY then
if SReady[0] and ValidTarget(minion, Spell[0].range*1.1) and BM.LC.Q:Value() then
CastGenericSkillShot(myHero,minion,Spell[0],0,BM.p)
end
if SReady[2] and ValidTarget(minion, Spell[2].range*1.1) and BM.LC.E:Value() then
CastGenericSkillShot(myHero,minion,Spell[2],2,BM.p)
end
end
end
end
function Aatrox:JungleClear()
for _,mob in pairs(SLM) do
if GetTeam(mob) == MINION_JUNGLE then
if SReady[0] and ValidTarget(mob, Spell[0].range) and BM.JC.Q:Value() then
CastGenericSkillShot(myHero,minion,Spell[0],0,BM.p)
end
if SReady[1] and BM.C.W:Value() and ValidTarget(mob,750) then
if GetPercentHP(myHero) < BM.C.WT:Value()+1 and self.W == "dmg" then
CastSpell(1)
elseif GetPercentHP(myHero) > BM.C.WT:Value() and self.W == "heal" then
CastSpell(1)
end
end
if SReady[2] and ValidTarget(mob, Spell[2].range) and BM.JC.E:Value() then
CastGenericSkillShot(myHero,minion,Spell[2],2,BM.p)
end
end
end
end
function Aatrox:KS()
if not BM.KS.Enable:Value() then return end
for _,unit in pairs(GetEnemyHeroes()) do
if GetADHP(unit) < Dmg[0](unit) and SReady[0] and ValidTarget(unit, Spell[0].range*1.1) and BM.KS.Q:Value() then
CastGenericSkillShot(myHero,unit,Spell[0],0,BM.p)
end
if GetAPHP(unit) < Dmg[2](unit) and SReady[2] and ValidTarget(unit, Spell[2].range*1.1) and BM.KS.E:Value() then
CastGenericSkillShot(myHero,unit,Spell[2],2,BM.p)
end
end
end
function Aatrox:Stat(unit, buff)
if unit == myHero and buff.Name:lower() == "aatroxwlife" then
self.W = "heal"
elseif unit == myHero and buff.Name:lower() == "aatroxwpower" then
self.W = "dmg"
end
end
-- _ __ _ __ __
-- | |/ /___ __ _( ) \/ |__ ___ __ __
-- | ' </ _ \/ _` |/| |\/| / _` \ V V /
-- |_|\_\___/\__, | |_| |_\__,_|\_/\_/
-- |___/
class 'KogMaw'
function KogMaw:__init()
self.Dmg = {
[-1] = function (unit) return 100 + 25 *myHero.level end,
[0] = function (unit) return CalcDamage(myHero, unit, 0, 50 * GetCastLevel(myHero,0) + 30 + GetBonusAP(myHero)* .5) end,
[1] = function (unit) return CalcDamage(myHero, unit, myHero.totalDamage*.55, 4 * GetCastLevel(myHero,1) + (.02 + myHero.ap*.00075)*unit.maxHealth) end,
[2] = function (unit) return CalcDamage(myHero, unit, 0, 50 * GetCastLevel(myHero,2) + 10 + myHero.ap* 7 ) end,
[3] = function (unit) return CalcDamage(myHero,unit,0,(30 + 40*GetCastLevel(myHero,3) + (myHero.totalDamage-myHero.damage) * .65 + .25 * myHero.ap)*(GetPercentHP(unit)>50 and 1 or (GetPercentHP(unit)<50 and 2 or 3))) end,
}
Spell = {
[0] = { range = 1175, delay = .25, width = 75 , speed = 1650, type = "line",col=true},
[1] = { range = 560 + 30 * myHero.level},
[2] = { range = 1360, delay = .25, width = 120, speed = 1400, type = "line",col=false},
[3] = { range = 1800, delay = 1.2, speed = math.huge , radius = 225, type = "circular",col=false},
}
BM:SubMenu("C", "Combo")
BM.C:Boolean("Q", "Use Q", true)
BM.C:Boolean("W", "Use W", true)
BM.C:Boolean("E", "Use E", true)
BM.C:Boolean("R", "Use R", true)
BM.C:Boolean("P", "Use Passive", true)
BM:SubMenu("L", "LaneClear")
BM.L:Boolean("Q", "Use Q", false)
BM.L:Boolean("W", "Use W", false)
BM.L:Boolean("E", "Use E", false)
BM:SubMenu("J", "JungleClear")
BM.J:Boolean("Q", "Use Q", true)
BM.J:Boolean("W", "Use W", true)
BM.J:Boolean("E", "Use E", false)
BM:SubMenu("H", "Harass")
BM.H:Boolean("Q", "Use Q", true)
BM.H:Boolean("W", "Use W", true)
BM.H:Boolean("E", "Use E", false)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AD",BM.TS,false)
BM:SubMenu("p", "Prediction")
self.Passive = GotBuff(myHero,"KogMawIcathianSurprise") ~= 0
self.dmgPred = {}
self.soonHP = {}
self.WOn = CanUseSpell(myHero,2) == 8
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("Draw", function() self:Draw() end)
Callback.Add("UpdateBuff", function(unit,buffProc) self:UpdateBuff(unit,buffProc) end)
Callback.Add("RemoveBuff", function(unit,buffProc) self:RemoveBuff(unit,buffProc) end)
Callback.Add("ProcessSpellComplete", function(unit,spellProc) self:ProcessSpellComplete(unit,spellProc) end)
DelayAction(function()
for _,i in pairs(GetEnemyHeroes()) do
self.dmgPred[i.networkID] = {}
self.soonHP[i.networkID] = {u = i, h = i.health}
end
end)
for i = 2,3 do
PredMenu(BM.p, i)
end
PredMenu(BM.p, 0)
end
function KogMaw:Tick()
target = ts:GetTarget()
GetReady()
self.WOn = CanUseSpell(myHero,2) == 8
self:Pred()
if Mode == "Combo" and target and target.valid then
self:Combo(target)
elseif Mode == "LaneClear" then
self:LaneClear()
elseif Mode == "Harass" and target and target.valid then
self:Harass(target)
else
return
end
end
function KogMaw:Draw()
for _,i in pairs(GetEnemyHeroes()) do
if i.valid then
DrawDmgOverHpBar(i,i.health,0,self.Dmg[3](i),GoS.White)
end
end
end
function KogMaw:Pred()
for _,i in pairs(self.dmgPred) do
self.soonHP[_].h = self.soonHP[_].u.health
for n,m in pairs(i) do
if os.time() - n > m.s / 1800 then
m = nil
else
self.soonHP[_].h = self.soonHP[_].h - m.d
end
end
end
end
function KogMaw:Combo(unit)
if self.Passive and GetADHP(unit) < self.Dmg[-1](unit) then
MoveToXYZ(unit.pos)
return
end
if SReady[3] and ValidTarget(unit,Spell[3].range) and BM.C.R:Value() and (not SReady[1] or unit.distance > Spell[1].range) and self.soonHP[unit.networkID].h and self.soonHP[unit.networkID].h < self.Dmg[3](unit) then
CastGenericSkillShot(myHero,target,Spell[3],3,BM.p)
end
if SReady[1] and ValidTarget(unit,560 + 30 * myHero.level) and BM.C.W:Value() then
CastSpell(1)
end
if SReady[2] and ValidTarget(unit,Spell[2].range) and BM.C.E:Value() then
CastGenericSkillShot(myHero,target,Spell[2],2,BM.p)
end
if SReady[0] and ValidTarget(unit,Spell[0].range) and BM.C.Q:Value() then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
end
function KogMaw:Harass(unit)
if SReady[1] and ValidTarget(unit,560 + 30 * myHero.level) and BM.H.W:Value() then
CastSpell(1)
end
if SReady[2] and ValidTarget(unit,Spell[2].range) and BM.H.E:Value() then
CastGenericSkillShot(myHero,target,Spell[2],2,BM.p)
end
if SReady[0] and ValidTarget(unit,Spell[0].range) and BM.H.Q:Value() then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
end
function KogMaw:LaneClear()
for _,unit in pairs(SLM) do
if SReady[1] and ValidTarget(unit,560 + 30 * myHero.level) and ((IsLaneCreep(unit) and BM.L.W:Value()) or (not IsLaneCreep(unit) and BM.J.W:Value())) then
CastSpell(1)
end
if SReady[2] and ValidTarget(unit,Spell[2].range) and ((IsLaneCreep(unit) and BM.L.E:Value()) or (not IsLaneCreep(unit) and BM.J.E:Value())) then
CastGenericSkillShot(myHero,target,Spell[2],2,BM.p)
end
if SReady[0] and ValidTarget(unit,Spell[0].range) and ((IsLaneCreep(unit) and BM.L.Q:Value()) or (not IsLaneCreep(unit) and BM.J.Q:Value())) then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
end
end
function KogMaw:ProcessSpellComplete(u,spellProc)
if u.isMe and spellProc.target and spellProc.name:lower():find("attack") and spellProc.target.isHero and spellProc.target.valid then
self.dmgPred[spellProc.target.networkID][os.time()] = {d = (self.Dmg[2](spellProc.target) and self.WOn or myHero.totalDamage), s = spellProc.target.distance}
end
end
function KogMaw:UpdateBuff(u,buffProc)
if u.isMe and buffProc.Name == "KogMawIcathianSurprise" then self.Passive = true end
end
function KogMaw:RemoveBuff(u,buffProc)
if u.isMe and buffProc.Name == "KogMawIcathianSurprise" then self.Passive = false end
end
-- __ __ _ _ _
-- \ \ / /__| ( ) | | _____ ____
-- \ \ / / _ \ |/ | |/ / _ \_ /
-- \ V / __/ | | < (_) / /
-- \_/ \___|_| |_|\_\___/___|
class 'Velkoz'
function Velkoz:__init()
self.Dmg = {
[-1] = function (unit) return 25 + myHero.level*8 + GetBonusAP(myHero) * .5 end,
[0] = function (unit) return CalcDamage(myHero, unit, 40 * GetCastLevel(myHero,0) + 40 + GetBonusAP(myHero), 0)*.6 end,
[1] = function (unit) return CalcDamage(myHero, unit, 20 * GetCastLevel(myHero,1) + 10 + GetBonusDmg(myHero), 1)*.15 end,
[2] = function (unit) return CalcDamage(myHero, unit, 30 * GetCastLevel(myHero,2) - 10 + GetBonusDmg(myHero), 2)*.3 end,
[3] = function (unit) return self:RDmg(unit) end,
}
Spell = {
[-1]= { range = 1300, delay =.25, width = 75, speed = 813},
[0] = { range = 1000, delay =.25, width = 75, speed = 1150},
[1] = { delay = .1, speed = 1700, width = 100, range = 1050,type = "line",col=false},
[2] = { delay = 0.1, speed = 1700, range = 850, radius = 200 ,type = "circular",col=false },
}
BM:SubMenu("C", "Combo")
BM.C:Boolean("Q", "Use Q",true)
BM.C:DropDown("QM","Q Mode", 1, {"New","Old"})
BM.C:DropDown("Z","Split Mode", 1, {"Percise","Performance"}, function() print("Reload to change QMode") end)
BM.C:Boolean("W", "Use W",true)
BM.C:Boolean("E", "Use E",true)
BM.C:Boolean("R", "Use R",true)
BM.C:Boolean("M", "Mouse follow",true)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AP",BM.TS,false)
BM:SubMenu("p", "Prediction")
BM:SubMenu("A", "Advanced")
BM.A:Slider("S", "SplitMod", .075, .05, .1, .005)
BM.A:Slider("C", "QChecks", 20, 5, 50, 1)
BM.A:Boolean("D","Developer Draws", false)
self.cTable = {}
self.Researched = {}
self.Deconstructed = {}
self.QBall = nil
self.ult = not GotBuff(myHero,"VelkozR") == 0
self.DegreeTable={22.5,-22.5,45,-45, 15, -15, 30, -30}
self.QStart = nil
Callback.Add("Tick", function() self:Tick() end)
Callback.Add(BM.C.Z:Value() == 1 and "Draw" or "Tick", function() self:Split() end)
Callback.Add("CreateObj", function(object) self:CreateObj(object) end)
Callback.Add("DeleteObj", function(object) self:DeleteObj(object) end)
Callback.Add("UpdateBuff", function(unit,buffProc) self:UpdateBuff(unit,buffProc) end)
Callback.Add("RemoveBuff", function(unit,buffProc) self:RemoveBuff(unit,buffProc) end)
Callback.Add("ProcessSpellComplete", function(unit,spellProc) self:ProcessSpellComplete(unit,spellProc) end)
--[[AntiChannel()
AntiGapCloser()
DelayAction( function ()
if BM["AC"] then BM.AC:Info("ad", "Use Spell(s) : ") BM.AC:Boolean("E","Use E", true) end
if BM["AGC"] then BM.AGC:Info("ad", "Use Spell(s) : ") BM.AGC:Boolean("E","Use E", true) end
end,.001)
--]]
for i = 1,2 do
PredMenu(BM.p, i)
end
end
function Velkoz:ProcessSpellComplete(unit,spellProc)
if unit == myHero and spellProc.name:lower() == "velkozq" then
self.QStart= Vector(spellProc.startPos)+Vector(Vector(spellProc.endPos)-spellProc.startPos):normalized()*5
end
end
--[[
function Velkoz:AntiChannel(unit,range)
if BM.AC.E:Value() and range < Spell[2].range and SReady[2] then
CastSkillShot(2,unit.pos)
end
end
function Velkoz:AntiGapCloser(unit,range)
if BM.AGC.E:Value() and range < Spell[2].range and SReady[2] then
CastSkillShot(2,unit.pos)
end
end--]]
function Velkoz:Tick()
GetReady()
target = ts:GetTarget()
if Mode == "Combo" then
self:Combo(target)
elseif Mode == "LaneClear" then
-- self:LaneClear()
-- self:JungleClear()
elseif Mode == "LastHit" then
-- self:LastHit()
elseif Mode == "Harass" then
-- self:Harass(target)
else
return
end
end
function Velkoz:Combo(unit)
if Mode == "Combo" and not self.ult then
if SReady[1] and ValidTarget(unit,1050) and BM.C.W:Value() then
CastGenericSkillShot(myHero,unit,Spell[1],1,BM.p)
end
if SReady[2] and ValidTarget(unit,850) and BM.C.E:Value() then
CastGenericSkillShot(myHero,unit,Spell[2],2,BM.p)
end
if SReady[3] and ValidTarget(unit,1500) and unit.distance > 350 and unit.health + unit.shieldAD + unit.shieldAP < self:RDmg(unit) and BM.C.R:Value() then
--SetCursorPos(unit.pos2D.x,unit.pos2D.y)
CastSkillShot(3,unit.pos)
end
elseif Mode == "Combo" and self.ult and unit.valid and WorldToScreen(1,unit.pos).flag and BM.C.M:Value() then
SetCursorPos(unit.pos2D.x,unit.pos2D.y)
end
end
function Velkoz:Split()
local i = target or GetCurrentTarget()
if self.QBall then
if BM.C.QM:Value() == 1 then
local iPredN2 = nil
if BM.p.CP:Value() == 1 and OpenPredict then
iPredN2 = GetPrediction(i,Spell[0],self.QBall.pos).castPos
else
iPredN2 = GetPredictionForPlayer(self.QBall.pos,i,i.ms, Spell[0].speed, Spell[0].delay*1000, Spell[0].range, Spell[0].width, false, true).PredPos
end
self.QBall:Draw(100)
if iPredN2 and GetCastName(myHero,0) ~= "VelkozQ" and GetDistance(self.QBall,iPredN2) < 1500 and GetDistance(self.QBall,iPredN2) > 50 and math.abs(Vector(self.QBall.pos-GetObjectSpellStartPos(self.QBall)):normalized()*Vector(self.QBall.pos-iPredN2):normalized()) < .1 then
CastSpell(0)
end
else
if SReady[0] and GetCastName(myHero,0)~="VelkozQ" and self.QBall and self.QStart then
local split=GetPrediction(i, Spell[-1], GetOrigin(self.QBall))
local BVector = Vector((GetOrigin(self.QBall))-Vector(self.QStart))
local HVector = Vector((GetOrigin(self.QBall))-Vector(split.castPos))
if BM.A.D:Value() then
DrawLine(WorldToScreen(0, self.QStart).x, WorldToScreen(0, self.QStart).y, WorldToScreen(0, self.QBall).x, WorldToScreen(0, self.QBall).y, 3, GoS.White)
DrawLine(WorldToScreen(0, self.QBall).x, WorldToScreen(0, self.QBall).y, WorldToScreen(0, split.castPos).x, WorldToScreen(0, split.castPos).y, 3, GoS.White)
DrawText(Velkoz:ScalarProduct(BVector,HVector)^2,30,500,20,GoS.White)
end
if ValidTarget(i,1600) and Velkoz:ScalarProduct(BVector,HVector)^2 < BM.A.C:Value()*.001 then
CastSpell(0)
end
end
end
elseif not self.ult then
local iPred = nil
if BM.p.CP:Value() == 1 and OpenPredict then
iPred = GetPrediction(i,Spell[-1]).castPos
else
iPred = GetPredictionForPlayer(myHero.pos,i,i.ms, Spell[-1].speed, Spell[-1].delay*1000, Spell[-1].range, Spell[-1].width, true, true).PredPos
end
if iPred then
local iPred2D = WorldToScreen(0,iPred)
local lowest = 9999999
local lowestV = nil
if not i.valid or myHero.dead then return end
local BVec = Vector(iPred) - Vector(myHero.pos)
for l = -math.pi*.5, math.pi*.5, math.pi*.05 do
local sideVec = Vector(BVec):rotated(0,l,0)
local sideVec2 = Vector(sideVec):perpendicular()
if not VectorIntersection(myHero.pos , myHero.pos+sideVec , iPred, iPred+sideVec2) then return end
local JVector = Vector(VectorIntersection(myHero.pos , myHero.pos+sideVec , iPred, iPred+sideVec2 ).x , myHero.pos.y , VectorIntersection( myHero.pos, myHero.pos + sideVec, iPred, iPred + sideVec2).y)
local JVector2D = WorldToScreen(0,JVector)
if GetDistance(JVector) < 1050 and GetDistance(iPred,JVector) < 1050 and CountObjectsOnLineSegment(myHero, Vector(JVector), 125, self.cTable) == 0 and CountObjectsOnLineSegment(i, Vector(JVector), 100, self.cTable) == 0 then
if BM.A.D:Value() then
DrawCircle(JVector,50,1,3,GoS.White)
DrawLine(myHero.pos2D.x,myHero.pos2D.y,JVector2D.x,JVector2D.y,1,GoS.White)
DrawLine(iPred2D.x,iPred2D.y,JVector2D.x,JVector2D.y,1,GoS.White)
end
if JVector and GetDistance(iPred,JVector) < lowest then
lowestV = JVector
lowest = GetDistance(iPred,JVector)
end
end
end
if Mode == "Combo" and lowestV and GetCastName(myHero,0) == "VelkozQ" and BM.C.QM:Value() == 1 then
if GetDistance(lowestV) > 150 then
CastSkillShot(0,lowestV)
else
CastSkillShot(0,i.pos)
end
end
end
if Mode == "Combo" and BM.C.Q:Value() and GetCastName(myHero,0)=="VelkozQ" and ValidTarget(i,1400) and BM.C.QM:Value() == 2 then
local direct=GetPrediction(i,Spell[0])
if direct and direct.hitChance>=20/100 and not direct:mCollision(1) then
self.QStart=GetOrigin(myHero)
CastSkillShot(0,direct.castPos)
end
local BVec = Vector(GetOrigin(i)) - Vector(GetOrigin(myHero))
local dist = math.sqrt(GetDistance(GetOrigin(myHero),GetOrigin(i))^2/2)
for l=1,5 do
local sideVec=Velkoz:getVec(BVec,self.DegreeTable[l]):normalized()*dist
local circlespot = sideVec+GetOrigin(myHero)
local QPred = GetPrediction(i, Spell[0], circlespot)
local QPred2 = GetPrediction(myHero, Spell[0], circlespot)
if not QPred:mCollision(1) and not QPred2:mCollision(1) then
CastSkillShot(0,circlespot)
self.QStart = GetOrigin(myHero)
end
end
end
end
end
function Velkoz:getVec(base, degr)
local x,y,z=base:unpack()
x=x*math.cos(Velkoz:degrad(degr))-z*math.sin(Velkoz:degrad(degr))
z=z*math.cos(Velkoz:degrad(degr))+x*math.sin(Velkoz:degrad(degr))
return Vector(x,y,z)
end
function Velkoz:ScalarProduct(v1,v2)
return (v1.x*v2.x+v1.y*v2.y+v1.z*v2.z)/(v1:len()*v2:len())
end
function Velkoz:degrad(degr)
degr=(degr/180)*math.pi
return degr
end
function Velkoz:RDmg(unit)
local hP = math.min(math.max(1550 - unit.distance,0)/(unit.ms*.8),2.5)/2.5
local pT = (self.Deconstructed[unit.networkID] or 0) + math.floor(hP/0.28)
local damage = hP * (275 + 175*GetCastLevel(myHero,3) + GetBonusAP(myHero) * 1.25)
return self.Researched[unit.networkID] and damage + (pT > 2 and self.Dmg[-1](unit) or 0) or CalcDamage(myHero,unit,0,damage) + (pT > 2 and self.Dmg[-1](unit) or 0)
end
function Velkoz:CreateObj(obj)
if obj.isSpell and obj.spellOwner.isMe and obj.spellName == "VelkozQMissile" then
self.QBall = obj
DelayAction(function() self.QBall = nil end ,2)
end
end
function Velkoz:DeleteObj(obj)
if obj.isSpell and obj.spellOwner.isMe and obj.spellName == "VelkozQMissile" then
self.QBall = nil
end
end
function Velkoz:UpdateBuff(u,buffProc)
if u.isMe and buffProc.Name == "VelkozR" then
self.ult = true
Stop(true)
elseif u.team ~= myHero.team and u.isHero then
if buffProc.Name == "velkozresearchedstack" then
self.Researched[u.networkID] = true
elseif buffProc.Name == "velkozresearchstack" then
self.Deconstructed[u.networkID] = buffProc.Count
end
end
end
function Velkoz:RemoveBuff(u,buffProc)
if u.isMe and buffProc.Name == "VelkozR" then
self.ult = false
Stop(false)
elseif u.team ~= myHero.team and u.isHero then
if buffProc.Name == "velkozresearchedstack" then
self.Researched[u.networkID] = false
elseif buffProc.Name == "velkozresearchstack" then
self.Deconstructed[u.networkID] = nil
end
end
end
-- _ _
-- | (_)_ __ __ __
-- _ | | | '_ \\ \/ /
-- | |_| | | | | |> <
-- \___/|_|_| |_/_/\_\
class 'Jinx'
function Jinx:__init()
Spell = {
[0] = { range = 25 * GetCastLevel(myHero,0) + 600 },
[1] = { delay = 0.6, speed = 3000, width = 85, range = 1500,type = "line",col=true},
[2] = { delay = 1, speed = 887, width = 120, range = 900,type = "circular",col=false},
[3] = { delay = 0.6, speed = 1700, width = 140, range = math.huge,type = "line",col=false},
}
Dmg = {
[1] = function (unit) return CalcDamage(myHero, unit, 50 * GetCastLevel(myHero,0) - 40 + (GetBonusDmg(myHero)+GetBaseDamage(myHero)) * 1.4, 0) end,
[2] = function (unit) return CalcDamage(myHero, unit, 0, 55 * GetCastLevel(myHero,2) + 25 + GetBonusAP(myHero)) end,
[3] = function (unit)
local dmg = 150 + GetCastLevel(myHero,3)*GetBonusDmg(myHero)+(GetMaxHP(unit)-GetCurrentHP(unit))*(.20+GetCastLevel(myHero,3)*.5)
return CalcDamage(myHero,unit, math.min(math.max(dmg*.1,dmg*GetDistance(GetOrigin(myHero),GetOrigin(unit))/1650),dmg), 0) end
}
BM:Menu("C", "Combo")
BM.C:Menu("Q", "Q")
BM.C.Q:DropDown("QL", "Q-Logic", 1, {"Advanced", "Simple"})
BM.C.Q:Boolean("enable", "Enable Q Combo", true)
BM.C:Boolean("W", "Use W", true)
BM.C:Boolean("E", "Use E", true)
BM:Menu("H", "Harass")
BM.H:Menu("Q", "Q")
BM.H.Q:DropDown("QL", "Q-Logic", 1, {"Advanced", "Simple"})
BM.H.Q:Boolean("enable", "Enable Q Harass", true)
BM.H:Boolean("W", "Use W", true)
BM.H:Boolean("E", "Use E", true)
BM:Menu("LC", "LaneClear")
BM.LC:Menu("Q", "Q")
BM.LC.Q:DropDown("QL", "Q-Logic", 1, {"Only Minigun", "Only Rockets"})
BM.LC.Q:Boolean("enable", "Enable Q Laneclear", true)
BM.LC:Boolean("W", "Use W", false)
BM:Menu("JC", "JungleClear")
BM.JC:Menu("Q", "Q")
BM.JC.Q:DropDown("QL", "Q-Logic", 1, {"Only Minigun", "Only Rockets"})
BM.JC.Q:Boolean("enable", "Enable Q Jungleclear", true)
BM.JC:Boolean("W", "Use W", false)
BM:Menu("LH", "LastHit")
BM.LH:Boolean("UMinig", "Use only Minigun", true)
BM:Menu("KS", "Killsteal")
BM.KS:Boolean("Enable", "Enable Killsteal", true)
BM.KS:Boolean("W", "Use W", true)
BM.KS:Boolean("E", "Use E", true)
BM.KS:Boolean("R", "Enable R KS", true)
BM.KS:Slider("mDTT", "R - max Distance to target", 3000, 675, 20000, 10)
BM.KS:Slider("DTT", "R - min Distance to target", 1000, 675, 20000, 10)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AD",BM.TS,false)
BM:Menu("p", "Prediction")
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("ProcessSpellComplete", function(u,s) self:ProcessSpellComplete(u,s) end)
Callback.Add("UpdateBuff", function(unit,buff) self:UpdateBuff(unit,buff) end)
Callback.Add("RemoveBuff", function(unit,buff) self:RemoveBuff(unit,buff) end)
for i = 1,3 do
PredMenu(BM.p, i)
end
end
function Jinx:UpdateBuff(unit, buff)
if unit == myHero and buff.Name == "jinxqicon" then
minigun = true
end
end
function Jinx:RemoveBuff(unit, buff)
if unit == myHero and buff.Name == "jinxqicon" then
minigun = false
end
end
function Jinx:Tick()
if myHero.dead then return end
self.RocketRange = 25 * GetCastLevel(myHero,_Q) + 600
target = ts:GetTarget()
GetReady()
self:KS()
if Mode == "Combo" then
self:Combo(target)
elseif Mode == "Harass" then
self:Harass(target)
elseif Mode == "LaneClear" then
self:LaneClear()
self:JungleClear()
elseif Mode == "LastHit" then
self:LastHit()
else
return
end
end
function Jinx:ProcessSpellComplete(u,s)
if s and s.name:lower():find("attack") and u.isMe then
local target = s.target
if Mode == "Combo" and target then
if BM.C.Q.QL:Value() == 1 and BM.C.Q.enable:Value() then
if SReady[0] and ValidTarget(target, self.RocketRange) and minigun and GetDistance(target) > 550 and GetPercentMP(myHero) > 10 then
CastSpell(0)
elseif SReady[0] and ValidTarget(target, self.RocketRange) and minigun and GetDistance(target) > 550 and EnemiesAround(target, 150) > 2 and GetPercentMP(myHero) > 10 then
CastSpell(0)
elseif SReady[0] and ValidTarget(target, self.RocketRange) and not minigun and GetDistance(target) < 550 and GetPercentMP(myHero) > 10 then
CastSpell(0)
elseif SReady[0] and ValidTarget(target, self.RocketRange) and not minigun and GetPercentMP(myHero) < 10 then
CastSpell(0)
end
elseif BM.C.Q.QL:Value() == 2 and BM.C.Q.enable:Value() then
if SReady[0] and ValidTarget(target, self.RocketRange) and minigun and GetDistance(target) > 550 and GetPercentMP(myHero) > 10 then
CastSpell(0)
elseif SReady[0] and ValidTarget(target, self.RocketRange) and not minigun and GetDistance(target) < 550 and GetPercentMP(myHero) > 10 then
CastSpell(0)
elseif SReady[0] and ValidTarget(target, self.RocketRange) and not minigun and GetPercentMP(myHero) < 10 then
CastSpell(0)
end
end
elseif Mode == "Harass" and target then
if BM.H.Q.QL:Value() == 1 and BM.H.Q.enable:Value() then
if SReady[0] and ValidTarget(target, self.RocketRange) and minigun and GetDistance(target) > 550 and GetPercentMP(myHero) > 10 then
CastSpell(0)
elseif SReady[0] and ValidTarget(target, self.RocketRange) and minigun and GetDistance(target) > 550 and EnemiesAround(target, 150) > 2 and GetPercentMP(myHero) > 10 then
CastSpell(0)
elseif SReady[0] and ValidTarget(target, self.RocketRange) and not minigun and GetDistance(target) < 550 and GetPercentMP(myHero) > 10 then
CastSpell(0)
elseif SReady[0] and ValidTarget(target, self.RocketRange) and not minigun and GetPercentMP(myHero) < 10 then
CastSpell(0)
end
elseif BM.C.Q.QL:Value() == 2 and BM.H.Q.enable:Value() then
if SReady[0] and ValidTarget(target, self.RocketRange) and minigun and GetDistance(target) > 550 and GetPercentMP(myHero) > 10 then
CastSpell(0)
elseif SReady[0] and ValidTarget(target, self.RocketRange) and not minigun and GetDistance(target) < 550 and GetPercentMP(myHero) > 10 then
CastSpell(0)
elseif SReady[0] and ValidTarget(target, self.RocketRange) and not minigun and GetPercentMP(myHero) < 10 then
CastSpell(0)
end
end
end
end
end
function Jinx:Combo(target)
if SReady[1] and ValidTarget(target, Spell[1].range) and BM.C.W:Value() and GetDistance(myHero,target)>100 then
CastGenericSkillShot(myHero,target,Spell[1],1,BM.p)
end
if SReady[2] and ValidTarget(target, Spell[2].range) and BM.C.E:Value() then
CastGenericSkillShot(myHero,target,Spell[2],2,BM.p)
end
end
function Jinx:Harass(target)
if SReady[1] and ValidTarget(target, Spell[1].range) and BM.H.W:Value() and GetDistance(myHero,target)>100 then
CastGenericSkillShot(myHero,target,Spell[1],1,BM.p)
end
if SReady[2] and ValidTarget(target, Spell[2].range) and BM.H.E:Value() then
CastGenericSkillShot(myHero,target,Spell[2],2,BM.p)
end
end
function Jinx:LaneClear()
for _,minion in pairs(SLM) do
if GetTeam(minion) == MINION_ENEMY then
if BM.LC.Q.QL:Value() == 1 and BM.LC.Q.enable:Value() then
if SReady[0] and ValidTarget(minion, self.RocketRange) and not minigun then
CastSpell(0)
end
elseif BM.LC.Q.QL:Value() == 2 and BM.LC.Q.enable:Value() then
if SReady[0] and ValidTarget(minion, self.RocketRange) and minigun then
CastSpell(0)
end
end
if SReady[1] and ValidTarget(minion, Spell[1].range) and BM.LC.W:Value() then
CastGenericSkillShot(myHero,unit,Spell[1],1,BM.p)
end
end
end
end
function Jinx:JungleClear()
for _,mob in pairs(SLM) do
if GetTeam(mob) == MINION_JUNGLE then
if BM.JC.Q.QL:Value() == 1 and BM.JC.Q.enable:Value() then
if SReady[0] and ValidTarget(mob, self.RocketRange) and not minigun then
CastSpell(0)
end
elseif BM.JC.Q.QL:Value() == 2 and BM.JC.Q.enable:Value() then
if SReady[0] and ValidTarget(mob, self.RocketRange) and minigun then
CastSpell(0)
end
end
if SReady[1] and ValidTarget(mob, Spell[1].range) and BM.LC.W:Value() then
CastGenericSkillShot(myHero,unit,Spell[1],1,BM.p)
end
end
end
end
function Jinx:LastHit()
for _,minion in pairs(SLM) do
if GetTeam(minion) == MINION_ENEMY then
if BM.LH.UMinig:Value() and ValidTarget(minion, self.RocketRange) and not minigun and SReady[0] then
CastSpell(0)
end
end
end
end
function Jinx:KS()
if not BM.KS.Enable:Value() then return end
for _,unit in pairs(GetEnemyHeroes()) do
if GetADHP(unit) < Dmg[1](unit) and SReady[1] and ValidTarget(unit, Spell[1].range) and BM.KS.W:Value() then
CastGenericSkillShot(myHero,unit,Spell[1],1,BM.p)
end
if GetAPHP(unit) < Dmg[2](unit) and SReady[2] and ValidTarget(unit, Spell[2].range) and BM.KS.E:Value() then
CastGenericSkillShot(myHero,unit,Spell[2],2,BM.p)
end
if GetADHP(unit) < Dmg[3](unit) and SReady[3] and ValidTarget(unit, BM.KS.mDTT:Value()) and BM.KS.R:Value() and GetDistance(unit) >= BM.KS.DTT:Value() then
CastGenericSkillShot(myHero,unit,Spell[3],3,BM.p)
end
end
end
-- _ __ _ _ _
--| |/ /__ _| (_)___| |_ __ _
--| ' // _` | | / __| __/ _` |
--| . \ (_| | | \__ \ || (_| |
--|_|\_\__,_|_|_|___/\__\__,_|
class 'Kalista'
function Kalista:__init()
self.eTrack = {}
self.soul = nil
self.dragon = nil
self.EpicJgl = nil
self.BigJgl = nil
for _,i in pairs(GetAllyHeroes()) do
if GotBuff(i, "kalistacoopstrikeally") == 1 then
soul = i
end
end
Spell = {
[-1] = { delay = .3, speed = math.huge, width = 1, range = 1500},
[0] = { delay = 0.25, speed = 2000, width = 50, range = 1150,type = "line",col=true},
[1] = { range = 5000 },
[2] = { range = 1000 },
[3] = { range = 1500 }
}
Dmg = {
[0] = function (unit) return CalcDamage(myHero, unit, 60 * GetCastLevel(myHero,0) - 50 + GetBonusDmg(myHero), 0) end,
[2] = function (unit) if not unit then return end return CalcDamage(myHero, unit, (10 * GetCastLevel(myHero,2) + 10 + (GetBonusDmg(myHero)+GetBaseDamage(myHero)) * .6) + ((self.eTrack[GetNetworkID(unit)] or 0)-1) * (({10,14,19,25,32})[GetCastLevel(myHero,2)] + (GetBaseDamage(myHero)+GetBaseDamage(myHero))*({0.2,0.225,0.25,0.275,0.3})[GetCastLevel(myHero,2)]), 0) end,
}
BM:Menu("C", "Combo")
BM.C:Boolean("Q", "Use Q", true)
BM:Menu("H", "Harass")
BM.H:Boolean("Q", "Use Q", true)
BM:Menu("JC", "JungleClear")
BM.JC:Boolean("Q", "Use Q", false)
BM:Menu("LC", "LaneClear")
BM.LC:Boolean("Q", "Use Q", false)
BM:Menu("AE", "Auto E")
BM.AE:Menu("MobOpt", "Mob Option")
BM.AE.MobOpt:Boolean("UseB", "Use on Big Mobs", true)
BM.AE.MobOpt:Boolean("UseE", "Use on Epic Mobs", true)
BM.AE.MobOpt:Boolean("UseM", "Use on Minions", true)
BM.AE.MobOpt:Boolean("UseMode", "Use only in Laneclear mode",false)
BM.AE:Slider("xM", "Kill X Minions", 2, 1, 7, 1)
BM.AE:Boolean("UseC", "Use on Champs", true)
BM.AE:Boolean("UseBD", "Use before death", true)
BM.AE:Boolean("UseL", "Use if leaves range", false)
BM.AE:Slider("OK", "Over kill", 10, 0, 50, 5)
BM.AE:Slider("D", "Delay to use E", 10, 0, 50, 5)
BM:Menu("AR", "Auto R")
BM.AR:Boolean("enable", "Enable Auto R")
BM.AR:Slider("allyHP", "allyHP <= X", 5, 1, 100, 5)
BM:Menu("KS", "Killsteal")
BM.KS:Boolean("Q", "Use Q", true)
BM:Menu("WJ", "WallJump")
BM.WJ:KeyBinding("J", "Wall Jump", string.byte("G"))
BM:Menu("TS", "TargetSelector")
ts = SLTS("AD",BM.TS,false)
BM:Menu("p", "Prediction")
BM.p:Slider("hQ", "HitChance Q", 20, 0, 100, 1)
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("UpdateBuff", function(unit, buff) self:UpdateBuff(unit, buff) end)
Callback.Add("RemoveBuff", function(unit, buff) self:RemoveBuff(unit, buff) end)
Callback.Add("ProcessSpellComplete", function(unit, spell) self:AAReset(unit, spell) end)
for i = 0,0 do
PredMenu(BM.p, i)
end
end
function Kalista:UpdateBuff(unit, buff)
if unit ~= myHero and buff.Name:lower() == "kalistaexpungemarker" and (unit.type==Obj_AI_Hero or unit.type==Obj_AI_Minion or unit.type==Obj_AI_Camp) then
self.eTrack[GetNetworkID(unit)]=buff.Count
elseif buff.Name:lower() == "kalistacoopstrikeally" and GetTeam(unit) == MINION_ALLY then
soul = unit
end
end
function Kalista:RemoveBuff(unit, buff)
if unit ~= myHero and buff.Name:lower() == "kalistaexpungemarker" and (unit.type==Obj_AI_Hero or unit.type==Obj_AI_Minion or unit.type==Obj_AI_Camp) then
self.eTrack[GetObjectName(unit)]=0
elseif buff.Name:lower() == "kalistacoopstrikeally" and GetTeam(unit) == MINION_ALLY then
soul = nil
end
end
function Kalista:Tick()
for _,i in pairs(SLM) do
if i.charName:lower():find("sru_dragon") then
self.dragon = i.charName
end
end
if not self.dragon then
self.EpicJgl = {["SRU_Baron"]=true, ["TT_Spiderboss"]=true}
self.BigJgl = {["SRU_Baron"]=true, ["SRU_Red"]=true, ["SRU_Blue"]=true, ["SRU_Krug"]=true, ["SRU_Murkwolf"]=true, ["SRU_Razorbeak"]=true, ["SRU_Gromp"]=true, ["Sru_Crab"]=true, ["TT_Spiderboss"]=true}
else
self.EpicJgl = {["SRU_Baron"]=true, [self.dragon]=true,["TT_Spiderboss"]=true}
self.BigJgl = {["SRU_Baron"]=true, [self.dragon]=true, ["SRU_Red"]=true, ["SRU_Blue"]=true, ["SRU_Krug"]=true, ["SRU_Murkwolf"]=true, ["SRU_Razorbeak"]=true, ["SRU_Gromp"]=true, ["Sru_Crab"]=true, ["TT_Spiderboss"]=true}
end
if myHero.dead then return end
target = ts:GetTarget()
GetReady()
self:KS()
self:AutoR()
self:WallJump()
if Mode == "LaneClear" then
self:LaneClear()
self:JungleClear()
else
return
end
end
function Kalista:AutoR()
if soul and BM.AR.enable:Value() and GetPercentHP(soul) <= BM.AR.allyHP:Value() and EnemiesAround(GetOrigin(soul), 1000) >= 1 then
CastSpell(3)
end
end
function Kalista:AAReset(unit, spell)
local ta = spell.target
if unit == myHero and ta ~= nil and spell.name:lower():find("attack") and SReady[0] and ValidTarget(ta, Spell[0].range) then
if ((Mode == "Combo" and BM.C.Q:Value()) or (Mode == "Harass" and BM.H.Q:Value()) and GetObjectType(ta) == Obj_AI_Hero) or (Mode == "LaneClear" and ((BM.JC.Q:Value() and (GetObjectType(ta)==Obj_AI_Camp or GetObjectType(ta)==Obj_AI_Minion)) or (BM.LC.Q:Value() and GetObjectType(ta)==Obj_AI_Minion))) then
CastGenericSkillShot(myHero,unit,Spell[0],0,BM.p)
end
end
end
function Kalista:JungleClear()
end
function Kalista:LaneClear()
end
function Kalista:KS()
for _,target in pairs(GetEnemyHeroes()) do
if SReady[0] and ValidTarget(target, Spell[0].range) and BM.KS.Q:Value() and GetADHP(target) < Dmg[0](target) then
CastGenericSkillShot(myHero,unit,Spell[0],0,BM.p)
end
if SReady[2] and ValidTarget(target, 1000) and BM.AE.UseC:Value() and (GetADHP(target) + BM.AE.OK:Value()) < Dmg[2](target) and self.eTrack[GetNetworkID(target)] > 0 then
DelayAction(function()
CastSpell(2)
end, BM.AE.D:Value()*.01)
end
if SReady[2] and ValidTarget(target, 1100) and BM.AE.UseL:Value() and self.eTrack[GetNetworkID(target)] then
local Pred = GetPrediction(target,Spell[-1])
if GetDistance(Pred.castPos,GetOrigin(myHero))>999 then
CastSpell(2)
end
end
end
if not BM.AE.MobOpt.UseMode:Value() or Mode == "LaneClear" then
for _,mob in pairs(SLM) do
if GetTeam(mob) == MINION_JUNGLE then
if SReady[2] and ValidTarget(mob, 750) and Dmg[2](mob) > GetCurrentHP(mob) then
if BM.AE.MobOpt.UseE:Value() and self.EpicJgl[GetObjectName(mob)] then
CastSpell(2)
elseif BM.AE.MobOpt.UseB:Value() and self.BigJgl[GetObjectName(mob)] then
CastSpell(2)
end
end
end
end
self.km = 0
for _,minion in pairs(SLM) do
if GetTeam(minion) == MINION_ENEMY then
if Dmg[2](minion) > GetCurrentHP(minion) and ValidTarget(minion, 1000) and BM.AE.MobOpt.UseM:Value() then
self.km = self.km + 1
end
end
end
if self.km >= BM.AE.xM:Value() then
CastSpell(2)
end
end
if BM.AE.UseBD:Value() and GetPercentHP(myHero)<=2 and SReady[2] then
CastSpell(2)
end
end
function Kalista:WallJump()
if SReady[0] and BM.WJ.J:Value() and GetDistance(GetMousePos(),GetOrigin(myHero))<1500 then
local mou = GetMousePos()
local wallEnd = nil
local wallStart = nil
if not MapPosition:inWall(mou) then
--DrawLine(WorldToScreen(0, GetOrigin(myHero)).x, WorldToScreen(0, GetOrigin(myHero)).y, WorldToScreen(0, mou).x, WorldToScreen(0, mou).y, 3, GoS.White)
local dV = Vector(GetOrigin(myHero))-Vector(mou)
for i = 1, dV:len(), 5 do
if MapPosition:inWall(mou+dV:normalized()*i) and not wallEnd then
wallEnd = Vector(mou+dV:normalized()*i)
elseif wallEnd and not MapPosition:inWall(Vector(mou+dV:normalized()*i)) then
wallStart = Vector(mou+dV:normalized()*i)
DrawCircle(wallStart,50,0,3,GoS.White)
break
end
end
if wallEnd and wallStart then
local WS = WorldToScreen(0,wallStart)
local WE = WorldToScreen(0,wallEnd)
if Vector(wallEnd-wallStart):len() < 290 then
DrawLine(WS.x,WS.y,WE.x,WE.y,3,GoS.Green)
MoveToXYZ(wallStart)
else
DrawLine(WS.x,WS.y,WE.x,WE.y,3,GoS.Red)
DrawCircle(wallEnd,50,0,3,GoS.White)
DrawCircle(wallStart,50,0,3,GoS.White)
end
if GetDistance(GetOrigin(myHero),wallEnd) < 290 then
CastSkillShot(0,wallEnd)
DelayAction(function()
MoveToXYZ(mou)
end, .001)
end
end
end
end
end
-- _ _
-- | \ | | __ _ ___ _ _ ___
-- | \| |/ _` / __| | | / __|
-- | |\ | (_| \__ \ |_| \__ \
-- |_| \_|\__,_|___/\__,_|___/
--
class 'Nasus'
function Nasus:__init()
Dmg = {