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("["..SLPatchnew.."] [SL-AIO] v.: "..SLAIO.." - " ..ChampName.." Loaded! ")
else
PrintChat("["..SLPatchnew.."] [SL-AIO] v.: "..SLAIO.." - " ..ChampName.." is not Supported ")
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)= 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 = {
[0] = function (unit) return CalcDamage(myHero, unit, self.qDmg, 0) end,
[2] = function (unit) return CalcDamage(myHero, unit, 0, 40 * GetCastLevel(myHero,2) + 15 + GetBonusAP(myHero) * .6) end,
[3] = function (unit) return CalcDamage(myHero, unit, 0, math.min((.02 * GetCastLevel(myHero,3) + .01) * GetMaxHP(unit)),240) end,
}
Spell = {
[0] = { delay = 0.3, range = 250},
[1] = { delay = .2, range = 600 },
[2] = { delay = .1, speed = math.huge, range = 650, radius = 395,type = "circular",col=false},
[3] = { range = 200 }
}
BM:SubMenu("c", "Combo")
BM.c:Boolean("Q", "Use Q", true)
BM.c:Boolean("QP", "Use HP Pred for Q", true)
BM.c:Slider("QDM", "Q DMG mod", 0, -10, 10, 1)
BM.c:Boolean("W", "Use W", true)
BM.c:Slider("WHP", "Use W at %HP", 20, 1, 100, 1)
BM.c:Boolean("E", "Use E", true)
BM.c:Boolean("R", "Use R", true)
BM.c:Slider("RHP", "Use R at %HP", 20, 1, 100, 1)
BM:SubMenu("f", "Farm")
BM.f:DropDown("QM", "Auto Q in" ,1 , {"Always" , "Laneclear", "LastHit"})
BM.f:Boolean("dQ", "Draw Q on creeps", true)
BM:SubMenu("ks", "Killsteal")
BM.ks:Boolean("KSQ","Killsteal with Q", true)
BM.ks:Boolean("KSE","Killsteal with E", true)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AP",BM.TS,false)
BM:SubMenu("p","Prediction")
--Var
self.qDmg = 0
self.Stacks = GetBuffData(myHero, "NasusQStacks").Stacks
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("Draw", function() self:Draw() end)
for i = 2,2 do
PredMenu(BM.p, i)
end
end
-- Start
function Nasus:Tick()
if myHero.dead then return end
target = ts:GetTarget()
GetReady()
self.qDmg = self:getQdmg()
self:KS()
self:Farm()
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 Nasus:Draw()
if myHero.dead or not BM.f.dQ:Value() then return end
for _, creep in pairs(SLM) do
--if Nasus:ValidCreep(creep,1000) then DrawText(math.floor(CalcDamage(myHero,creep,self.qDmg,0)),10,WorldToScreen(0,GetOrigin(creep)).x,WorldToScreen(0,GetOrigin(creep)).y,GoS.White) end
if Nasus:ValidCreep(creep,1000) and GetCurrentHP(creep)0 then base = base + GetBaseDamage(myHero)*2
elseif (Ready(GetItemSlot(myHero,3057))) and GetItemSlot(myHero,3057)>0 then base = base + GetBaseDamage(myHero)
elseif (Ready(GetItemSlot(myHero,3057))) and GetItemSlot(myHero,3025)>0 then base = base + GetBaseDamage(myHero)*1.25
end
return base
end
function Nasus:ValidCreep(creep, range)
if creep and not IsDead(creep) and GetTeam(creep) ~= MINION_ALLY and IsTargetable(creep) and GetDistance(GetOrigin(myHero), GetOrigin(creep)) < range then
return true
else
return false
end
end
-- _ ___ _ _
--| |/ (_)_ __ __| |_ __ ___ __| |
--| ' /| | '_ \ / _` | '__/ _ \/ _` |
--| . \| | | | | (_| | | | __/ (_| |
--|_|\_\_|_| |_|\__,_|_| \___|\__,_|
--
class "Kindred"
function Kindred:__init()
Spell = {
[0] = {range = 500, dash = 340, mana = 35},
[1] = {range = 800, duration = 8, mana = 40},
[2] = {range = 500, mana = 70, mana = 70},
[3] = {range = 400, range2 = 500, mana = 100},
}
Dmg =
{
[0] = function(Unit) return CalcDamage(myHero, Unit, 30+30*GetCastLevel(myHero, 0)+(GetBaseDamage(myHero) + GetBonusDmg(myHero))*0.20) end,
[1] = function(Unit) return CalcDamage(myHero, Unit, 20+5*GetCastLevel(myHero, 1)+0.40*(GetBaseDamage(myHero) + GetBonusDmg(myHero))+0.40*self:PassiveDmg(Unit)) end,
[2] = function(Unit) if GetTeam(Unit) == MINION_JUNGLE then
return CalcDamage(myHero, Unit, math.max(300,30+30*GetCastLevel(myHero, 2)+(GetBaseDamage(myHero) + GetBonusDmg(myHero))*0.20+GetMaxHP(Unit)*0.05))
else
return CalcDamage(myHero, Unit, 30+30*GetCastLevel(myHero, 2)+(GetBaseDamage(myHero) + GetBonusDmg(myHero))*0.20+GetMaxHP(Unit)*0.05)
end
end,
}
self.BaseAS = GetBaseAttackSpeed(myHero)
self.AAPS = self.BaseAS*GetAttackSpeed(myHero)
self.WolfAA = Spell[1].duration*self.AAPS
basePos = Vector(0,0,0)
if GetTeam(myHero) == 100 then
basePos = Vector(415,182,415)
else
basePos = Vector(14302,172,14387.8)
end
self.Recalling = false
self.Farsight = false
self.Passive = 0
OnTick(function(myHero) self:Tick() end)
OnProcessSpellComplete(function(unit, spell) self:OnProcComplete(unit, spell) end)
OnProcessSpell(function(unit, spell) self:OnProc(unit, spell) end)
Flash = (GetCastName(myHero, SUMMONER_1):lower():find("summonerflash") and SUMMONER_1 or (GetCastName(myHero, SUMMONER_2):lower():find("summonerflash") and SUMMONER_2 or nil)) -- Ty Platy
BM:Menu("Combo", "Combo")
BM.Combo:Boolean("Q", "Use Q", true)
BM.Combo:Boolean("W", "Use W", true)
BM.Combo:Boolean("E", "Use E", true)
BM.Combo:Boolean("QE", "Gapcloser", true)
BM:Menu("JunglerClear", "JunglerClear")
BM.JunglerClear:Boolean("Q", "Use Q", true)
BM.JunglerClear:Boolean("W", "Use W", true)
BM.JunglerClear:Boolean("E", "Use E", true)
BM.JunglerClear:Slider("MM", "Mana manager", 50, 1, 100)
BM:Menu("LaneClear", "LaneClear")
BM.LaneClear:Boolean("Q", "Use Q", true)
BM.LaneClear:Boolean("W", "Use W", true)
BM.LaneClear:Boolean("E", "Use E", true)
BM.LaneClear:Slider("MM", "Mana manager", 50, 1, 100)
BM:Menu("Misc", "Misc")
BM.Misc:Boolean("B", "Buy Farsight", true)
BM.Misc:KeyBinding("FQ", "Flash-Q", string.byte("T"))
BM.Misc:Key("WP", "Jumps", string.byte("G"))
BM:Menu("ROptions", "R Options")
BM.ROptions:Boolean("R", "Use R?", true)
BM.ROptions:Slider("EA", "Enemies around", 3, 1, 5)
BM.ROptions:Boolean("RU", "Use R on urself", true)
BM:Menu("QOptions", "Q Options")
BM.QOptions:Boolean("QC", "AA reset Combo", true)
BM.QOptions:Boolean("QL", "AA reset LaneClear", true)
BM.QOptions:Boolean("QJ", "AA reset JunglerClear", true)
BM.QOptions:Boolean("C", "Cancel animation?", false)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AD",BM.TS,false)
DelayAction(function()
for i, allies in pairs(GetAllyHeroes()) do
BM.ROptions:Boolean("Pleb"..GetObjectName(allies), "Use R on "..GetObjectName(allies), true)
end
end, 0.001)
end
function Kindred:Tick()
if not IsDead(myHero) then
GetReady()
target = ts:GetTarget()
if Mode == "Combo" then
self:Combo(target)
elseif Mode == "LaneClear" then
self:LaneClear()
end
self:AutoR()
if BM.Misc.FQ:Value() then
if SReady[0] and Ready(Flash) and BM.Combo.Q:Value() then
CastSkillShot(Flash, GetMousePos())
DelayAction(function() CastSkillShot(0, GetMousePos()) end, 1)
end
end
if BM.Misc.WP:Value() then
if self:WallBetween(GetOrigin(myHero), GetMousePos(), Spell[0].dash) and SReady[0] then
CastSkillShot(0, GetMousePos())
end
end
self.Passive = GetBuffData(myHero,"kindredmarkofthekindredstackcounter").Stacks
if BM.Misc.B:Value() then
if not self.Farsight and GetLevel(myHero) >= 9 and GetDistance(myHero,basePos) < 550 then
BuyItem(3363)
self.Farsight = true
end
end
end
end
function Kindred:Combo(Unit)
local AfterQ = GetOrigin(myHero) +(Vector(GetMousePos()) - GetOrigin(myHero)):normalized()*Spell[0].dash
if SReady[2] and SReady[0] and BM.Combo.QE:Value() and GetDistance(Unit) > Spell[0].range and GetDistance(AfterQ, Unit) <= 450 then
CastSkillShot(0, GetMousePos())
DelayAction(function() CastTargetSpell(Unit, 2) end, 1)
end
if SReady[0] and BM.Combo.Q:Value() and ValidTarget(Unit, Spell[0].range) and BM.QOptions.QC:Value() == false or (GetDistance(Unit) > Spell[0].range and GetDistance(AfterQ, Unit) <= 450) then
CastSkillShot(0, GetMousePos())
end
if SReady[1] and BM.Combo.W:Value() and ValidTarget(Unit, Spell[1].range) then
CastSpell(1)
end
if SReady[2] and BM.Combo.E:Value() and ValidTarget(Unit, Spell[2].range) then
CastTargetSpell(Unit, 2)
end
end
function Kindred:LaneClear()
local QMana = (Spell[0].mana*100)/GetMaxMana(myHero)
local WMana = (Spell[1].mana*100)/GetMaxMana(myHero)
local EMana = (Spell[2].mana*100)/GetMaxMana(myHero)
for _, mob in pairs(SLM) do
if GetTeam(mob) == MINION_JUNGLE then
if BM.QOptions.QJ:Value() == false and SReady[0] and BM.JunglerClear.Q:Value() and ValidTarget(mob, Spell[0].range) and GetCurrentHP(mob) >= Dmg[0](mob) --[[and (GetPercentMP(myHero)- QMana) >= BM.JunglerClear.MM:Value()]] then
CastSkillShot(0, GetMousePos())
end
if SReady[1] and ValidTarget(mob, Spell[1].range) and IsTargetable(mob) and BM.JunglerClear.W:Value() and (GetPercentMP(myHero)- WMana) >= BM.JunglerClear.MM:Value() and self:TotalHp(Spell[1].range, myHero) >= Dmg[1](mob) + ((8/self.AAPS)*CalcDamage(myHero, mob, GetBaseDamage(myHero) + GetBonusDmg(myHero)+self:PassiveDmg(mob))) then
CastSpell(1)
end
if SReady[2] and ValidTarget(mob, Spell[2].range) and BM.JunglerClear.E:Value() and (GetPercentMP(myHero)- EMana) >= BM.JunglerClear.MM:Value() and GetCurrentHP(mob) >= Dmg[2](mob) + (CalcDamage(myHero, mob, GetBaseDamage(myHero) + GetBonusDmg(myHero))*3) then
CastTargetSpell(mob, 2)
end
end
if GetTeam(mob) == MINION_ENEMY then
if BM.QOptions.QL:Value() == false and SReady[0] and BM.LaneClear.Q:Value() and (GetPercentMP(myHero)- QMana) >= BM.LaneClear.MM:Value() and ValidTarget(mob, Spell[0].range) and GetCurrentHP(mob) >= Dmg[0](mob) then
CastSkillShot(0, GetMousePos())
end
if SReady[1] and ValidTarget(mob, Spell[1].range) and BM.LaneClear.W:Value() and (GetPercentMP(myHero)- WMana) >= BM.LaneClear.MM:Value() and self:TotalHp(Spell[1].range, myHero) >= Dmg[1](mob) + ((8/self.AAPS)*CalcDamage(myHero, mob, GetBaseDamage(myHero) + GetBonusDmg(myHero)+self:PassiveDmg(mob))) then
CastSpell(1)
end
if SReady[2] and ValidTarget(mob, Spell[2].range) and BM.LaneClear.E:Value() and (GetPercentMP(myHero)- EMana) >= BM.LaneClear.MM:Value() and GetCurrentHP(mob) >= Dmg[2](mob) + (CalcDamage(myHero, mob, GetBaseDamage(myHero) + GetBonusDmg(myHero))*3) then
CastTargetSpell(mob, 2)
end
end
end
end
function Kindred:AutoR()
if BM.ROptions.R:Value() and not self.Recalling and not IsDead(myHero) and SReady[3] then
for i, allies in pairs(GetAllyHeroes()) do
if GetPercentHP(allies) <= 20 and BM.ROptions["Pleb"..GetObjectName(allies)] and not IsDead(allies) and GetDistance(allies) <= Spell[3].range2 and EnemiesAround(allies, 1500) >= BM.ROptions.EA:Value() then
CastTargetSpell(myHero, 3)
end
end
if GetPercentHP(myHero) <= 20 and BM.ROptions.RU:Value() and EnemiesAround(myHero, 1500) >= BM.ROptions.EA:Value() then
CastTargetSpell(myHero, 3)
end
end
end
function Kindred:OnProcComplete(unit, spell)
local QMana = (Spell[0].mana*100)/GetMaxMana(myHero)
if unit == myHero then
if spell.name:lower():find("attack") then
if Mode == "LaneClear" then
for _, mob in pairs(SLM) do
if BM.QOptions.QL:Value() and ValidTarget(mob, 500) and GetTeam(mob) == MINION_ENEMY and BM.LaneClear.Q:Value() and (GetPercentMP(myHero)- QMana) >= BM.LaneClear.MM:Value() and SReady[0] then
CastSkillShot(0, GetMousePos())
end
if BM.QOptions.QJ:Value() and ValidTarget(mob, 500) and GetTeam(mob) == MINION_JUNGLE and BM.JunglerClear.Q:Value() and (GetPercentMP(myHero)- QMana) >= BM.JunglerClear.MM:Value() and SReady[0] then
CastSkillShot(0, GetMousePos())
end
end
elseif Mode == "Combo" then
if BM.QOptions.QC:Value() and SReady[0] and BM.Combo.Q:Value() and ValidTarget(target, 500) then
CastSkillShot(0, GetMousePos())
end
end
end
end
end
function Kindred:OnProc(unit, spell)
if unit == myHero and spell.name == "KindredQ" and BM.QOptions.C:Value() then
DelayAction(function() CastEmote(EMOTE_DANCE) end, .001)
end
end
function Kindred:OnUpdate(unit, buff)
if unit == myHero then
if buff.Name == "recall" or buff.Name == "OdinRecall" then
self.Recalling = true
end
--[[if buff.Name == "kindredmarkofthekindredstackcounter" then
self.Passive = self.Passive + buff.Stacks
end]]
end
end
function Kindred:OnRemove(unit, buff)
if unit == myHero and buff.Name == "recall" or buff.Name == "OdinRecall" then
self.Recalling = false
end
end
function Kindred:PassiveDmg(unit)
if self.Passive ~= 0 then
local PassiveDmg = self.Passive * 1.25
if GetTeam(unit) == MINION_JUNGLE then
return CalcDamage(myHero, unit, math.max(75+10*self.Passive, GetCurrentHP(unit)*(PassiveDmg/100)))
else
return CalcDamage(myHero, unit, GetCurrentHP(unit)*(PassiveDmg/100))
end
else return 0
end
end
function Kindred:TotalHp(range, pos)
local hp = 0
for _, mob in pairs(SLM) do
if not IsDead(mob) and IsTargetable(mob) and (GetTeam(mob) == MINION_JUNGLE or GetTeam(mob) == MINION_ENEMY) and GetDistance(mob, pos) <= range then
hp = hp + GetCurrentHP(mob)
end
end
return hp
end
function Kindred:WallBetween(p1, p2, distance) --p1 and p2 are Vectors3d
local Check = p1 + (Vector(p2) - p1):normalized()*distance/2
local Checkdistance = p1 +(Vector(p2) - p1):normalized()*distance
if MapPosition:inWall(Check) and not MapPosition:inWall(Checkdistance) then
return true
end
end
class "Khazix"
function Khazix:__init()
Spell = {
[0] = { range = 325, evolved = false},
[1] = { delay = 0.25, speed = 1700, width = 70, range = 1025,type = "line",col=true},
[2] = { delay = 0.25, speed = 1500, width = 0, range = 750,type="circular",col=true},
}
Dmg = {
[-1] = function (unit) return CalcDamage(myHero, unit, 0, ({15,20,25,35,45,55,65,75,85,95,110,125,140,150,160,170,180,190})[myHero.level] + myHero.ap *.5) end,
[0] = function (unit) return CalcDamage(myHero, unit, (55 + 15 * GetCastLevel(myHero,0) + GetBonusDmg(myHero) * 1.2)*(self.Isolated[unit.networkID] and 1.3 or 1) + (Spell[0].evolved and 10 * myHero.level + GetBonusDmg(myHero)*1.04 or 0),0) end,
[1] = function (unit) return CalcDamage(myHero, unit, 50 + 30 * GetCastLevel(myHero,1) + GetBonusDmg(myHero), 0) end,
[2] = function (unit) return CalcDamage(myHero, unit, 30 + 35 * GetCastLevel(myHero,2) + GetBonusDmg(myHero) * .2 ,0) end,
}
self.Dashes =
{
["Vayne"] = {Spellslot = 0, Range = 300, Name = "Q"},
["Riven"] = {Spellslot = 2, Range = 325, Name = "E"},
["Ezreal"] = {Spellslot = 2, Range = 450, Name = "E"},
["Caitlyn"] = {Spellslot = 2, Range = 400, Name = "E"},
["Kassadin"] = {Spellslot = 3, Range = 700, Name = "R"},
["Graves"] = {Spellslot = 2, Range = 425, Name = "E"},
["Renekton"] = {Spellslot = 2, Range = 450, Name = "E"},
["Aatrox"] = {Spellslot = 0, Range = 650, Name = "Q"},
["Gragas"] = {Spellslot = 2, Range = 600, Name = "E"},
["Khazix"] = {Spellslot = 2, Range = 600, Name = "E"},
["Lucian"] = {Spellslot = 2, Range = 425, Name = "E"},
["Sejuani"] = {Spellslot = 0, Range = 650, Name = "Q"},
["Shen"] = {Spellslot = 2, Range = 575, Name = "E"},
["Tryndamere"] = {Spellslot = 2, Range = 660, Name = "E"},
["Tristana"] = {Spellslot = 1, Range = 900, Name = "W"},
["Corki"] = {Spellslot = 1, Range = 800, Name = "W"},
}
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:SubMenu("R", "R Options")
BM.C.R:Boolean("R", "Use R", true)
BM:Menu("H", "Harass")
BM.H:Boolean("Q", "Use Q", true)
BM.H:Boolean("W", "Use W", true)
BM:Menu("L", "LaneClear")
BM.L:Boolean("Q", "Use Q", true)
BM.L:Boolean("W", "Use W", true)
BM.L:Boolean("E", "Use E", false)
BM:Menu("H", "LastHit")
BM.H:Boolean("Q", "Use Q", true)
BM:Menu("KS", "KillSteal")
BM.KS:Boolean("Q", "Use Q", true)
BM.KS:Boolean("W", "Use W", true)
BM:Menu("J", "Jump Settings")
BM.J:Boolean("S","Save Jump", true)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AD",BM.TS,false)
BM:Menu("p", "HitChance")
for i, k in pairs(GetEnemyHeroes()) do
if self.Dashes[k.charName] then
BM.J:Boolean(k.networkID, "Follow "..k.charName.." "..self.Dashes[k.charName].Name, true)
end
end
self.Passive = GotBuff(myHero,"KhazixPDamage") ~= 0
self.IsStealth = GotBuff(myHero,"KhazixR") ~= 0
self.Isolated = {}
self.Point = nil
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("UpdateBuff", function(unit, buff) self:OnUpdate(unit, buff) end)
Callback.Add("RemoveBuff", function(unit, buff) self:OnRemove(unit, buff) end)
Callback.Add("CreateObj", function(o) self:CreateObj(o) end)
Callback.Add("DeleteObj", function(o) self:DeleteObj(o) end)
for i = 1,2 do
PredMenu(BM.p, i)
end
end
function Khazix:Tick()
target = ts:GetTarget()
GetReady()
if GetCastName(myHero, 0) == "KhazixQLong" then
Spell[0].range = 375
Spell[0].evolved = true
end
if GetCastName(myHero, 2) == "KhazixELong" then
Spell[2].range = 950
Spell[2].evolved = true
end
self:KS()
if Mode == "Combo" and target and target.valid then
self:Combo(target)
elseif Mode == "LaneClear" then
self:LaneClear()
elseif Mode == "LastHit" then
self:LastHit()
elseif Mode == "Harass" and target and target.valid then
self:Harass(target)
else
return
end
end
function Khazix:KS()
for _,unit in pairs(GetEnemyHeroes()) do
if BM.KS.Q:Value() and ValidTarget(unit, Spell[0].range) and SReady[0] and Dmg[0](unit) > GetADHP(unit) then
CastTargetSpell(unit,0)
elseif BM.KS.W:Value() and ValidTarget(unit, Spell[1].range) and SReady[1] and Dmg[1](unit) > GetADHP(unit) then
self:UseW(unit)
end
end
end
function Khazix:Combo(unit)
self:UseQ(unit)
if BM.C.W:Value() and GetDistance(unit) > GetHitBox(myHero) + Spell[0].range + GetHitBox(unit) and (not (self.Dashes[unit.charName] and CanUseSpell(unit, self.Dashes[unit.charName].Spellslot) == READY) or unit.distance > Spell.E.range*.75 or unit.health < Dmg[0](unit)*2 or not BM.J.S:Value()) then
self:UseE(unit)
end
if not SReady[2] or GetDistance(unit) < GetHitBox(myHero)+ Spell[0].range + GetHitBox(unit) then
self:UseW(unit)
end
self:UseR(unit)
end
function Khazix:Harass(unit)
if ValidTarget(unit, myHero.boundingRadius + Spell[0].range + unit.boundingRadius) and SReady[0] and BM.H.Q:Value() then
CastTargetSpell(unit,0)
elseif SReady[1] and ValidTarget(creep,Spell[1].range) and BM.H.W:Value() then
self:UseW(unit)
end
end
function Khazix:LastHit()
for _,creep in pairs(SLM) do
if SReady[0] and ValidTarget(creep,Spell[0].range) and BM.H.Q:Value() and Dmg[0](creep) > creep.health then
CastTargetSpell(creep,0)
end
end
end
function Khazix:LaneClear()
for _,creep in pairs(SLM) do
if SReady[0] and ValidTarget(creep,Spell[0].range) and BM.L.Q:Value() then
CastTargetSpell(creep,0)
elseif SReady[1] and ValidTarget(creep,Spell[1].range) and BM.L.W:Value() then
CastGenericSkillShot(myHero,creep,Spell[1],1,BM.p)
elseif SReady[2] and ValidTarget(creep,Spell[2].range) and BM.L.E:Value() then
CastGenericSkillShot(myHero,creep,Spell[2],2,BM.p)
end
end
end
function Khazix:UseQ(Unit)
if ValidTarget(Unit, myHero.boundingRadius + Spell[0].range + Unit.boundingRadius) and SReady[0] and BM.C.Q:Value() then
CastTargetSpell(Unit, 0)
end
end
function Khazix:UseW(Unit)
if ValidTarget(Unit, Spell[1].range) and SReady[1] then
CastGenericSkillShot(myHero,Unit,Spell[1],1,BM.p)
end
end
function Khazix:UseE(Unit)
if ValidTarget(Unit, Spell[2].range) and SReady[2] and BM.C.E:Value() then
CastSkillShot(2, GetOrigin(Unit))
end
end
function Khazix:UseR(Unit)
if BM.C.R.R:Value() and ValidTarget(Unit, Spell[2].range) and SReady[3] and not self.Passive and not SReady[2] or self.IsStealth then
CastSpell(3)
end
end
function Khazix:Proc(unit, spellProc)
if self.Dashes[unit.charName] and Mode == "Combo" and SReady[2] and spellProc.name == GetCastName(unit, self.Dashes[unit.charName].Spellslot) and unit == target and GetDistance(spellProc.endPos) > myHero.boundingRadius +Spell[0].range + unit.boundingRadius and GetDistance(spellProc.endPos) < Spell[2].range and BM.J[unit.networkID]:Value() and GetDistance(spellProc.startPos) < GetDistance(spellProc.endPos) then
CastSkillShot(2, spellProc.endPos)
end
end
function Khazix:OnUpdate(unit, buffproc)
if unit.isMe and buffproc then
if buffproc.Name == "KhazixPDamage" then
self.Passive = true
elseif buffproc.Name == "KhazixR" then
self.IsStealth = true
end
end
end
function Khazix:OnRemove(unit, buffproc)
if unit.isMe and buffproc then
if buffproc.Name == "KhazixPDamage" then
self.Passive = false
elseif buffproc.Name == "KhazixR" then
self.IsStealth = false
end
end
end
function Khazix:CreateObj(o)
if o.name:lower():find("indicator") and o.name:lower():find("singleenemy") then
for _,i in pairs(GetEnemyHeroes()) do
if GetDistance(i,o) < 20 then
self.Isolated[i.networkID] = true
end
end
end
end
function Khazix:DeleteObj(o)
if o.name:lower():find("indicator") and o.name:lower():find("singleenemy") then
for _,i in pairs(GetEnemyHeroes()) do
if GetDistance(i,o) < 20 then
self.Isolated[i.networkID] = false
end
end
end
end
class 'Vladimir'
function Vladimir:__init()
Spell = {
[0] = { range = 600 },
[1] = { range = 150 },
[2] = { range = 600 },
[3] = { delay = 0.25, speed = math.huge, range = 700, radius = 175,type = "circular",col=false},
}
Dmg = {
[0] = function(unit) return CalcDamage(myHero, unit, 0, 15 * GetCastLevel(myHero,0) + 60 + GetBonusAP(myHero) * .55)*(GetCurrentMana(myHero)<2 and 1 or 2) end,
[2] = function(unit) return CalcDamage(myHero, unit, 0, 15 * GetCastLevel(myHero,2) + 15 + GetBonusAP(myHero) * 0.35 + GetMaxHP(myHero)*.025) end,
[3] = function(unit) return CalcDamage(myHero, unit, 0, 100 * GetCastLevel(myHero,3) + 50 + GetBonusAP(myHero) * .7) end,
}
BM:Menu("C", "Combo")
BM.C:Boolean("Q", "Use Q", true)
BM.C:Boolean("E", "Use E", true)
BM.C:Boolean("R", "Use R", true)
BM.C:Boolean("REA", "Use if R will hit > x enemies", 2, 1, 5, 1)
BM.C:Boolean("DP", "Draw exact Passive", true)
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:Menu("JC", "JungleClear")
BM.JC:Boolean("Q", "Use Q", true)
BM.JC:Boolean("E", "Use E", true)
BM:Menu("KS", "Killsteal")
BM.KS:Boolean("Q", "Use Q", true)
BM.KS:Boolean("E", "Use E", true)
BM.KS:Boolean("R", "Use R", false)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AP",BM.TS,false)
BM:Menu("p", "Prediction")
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("Draw", function() self:Draw() end)
Callback.Add("UpdateBuff", function(unit,buff) self:UpdateBuff(unit,buff) end)
Callback.Add("RemoveBuff", function(unit,buff) self:RemoveBuff(unit,buff) end)
HitMe()
self.ECharge = nil
self.AA = AttackUnit
for i = 3,3 do
PredMenu(BM.p, i)
end
end
function Vladimir:HitMe(k,pos,dt,ty)
DelayAction( function()
CastSpell(1)
end,dt)
end
function Vladimir:Draw()
if not myHero.dead and BM.C.DP:Value() then
DrawText(math.round(GetCurrentMana(myHero),2),20,myHero.pos2D.x,myHero.pos2D.y,GoS.White)
end
end
function Vladimir:Tick()
if myHero.dead then return end
target = ts:GetTarget()
GetReady()
self:KS()
if self.ECharge and GetGameTimer() - self.ECharge > 1 then
CastSkillShot2(2,myHero.pos)
end
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 Vladimir:Combo(target)
if SReady[0] and ValidTarget(target, Spell[0].range) and BM.C.Q:Value() then
CastTargetSpell(target,0)
end
if SReady[2] or self.ECharge and ValidTarget(target, Spell[2].range) and BM.C.E:Value() then
CastSkillShot(2,myHero.pos)
end
if SReady[3] and ValidTarget(target, Spell[3].range) and BM.C.R:Value() and EnemiesAround(GetOrigin(target), Spell[3].radius) >= BM.C.REA:Value() then
CastGenericSkillShot(myHero,unit,Spell[3],3,BM.p)
end
end
function Vladimir:Harass(target)
if SReady[0] and ValidTarget(target, Spell[0].range) and BM.H.Q:Value() then
CastTargetSpell(target,0)
end
if (SReady[2] or (self.ECharge and GetGameTimer() - self.ECharge < 1)) and ValidTarget(target, Spell[2].range) and BM.H.E:Value() then
CastSkillShot(2,myHero.pos)
end
end
function Vladimir: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
CastTargetSpell(minion,0)
end
if (SReady[2] or (self.ECharge and GetGameTimer() - self.ECharge < 1)) and ValidTarget(minion, Spell[2].range) and BM.LC.E:Value() then
CastSkillShot(2,myHero.pos)
end
end
end
end
function Vladimir: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
CastTargetSpell(mob,0)
end
if (SReady[2] or (self.ECharge and GetGameTimer() - self.ECharge < 1)) and ValidTarget(mob, Spell[2].range) and BM.JC.E:Value() then
CastSkillShot(2,myHero.pos)
end
end
end
end
function Vladimir: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
CastTargetSpell(target,0)
end
if (SReady[2] or (self.ECharge and GetGameTimer() - self.ECharge < 1)) and ValidTarget(target, Spell[2].range) and BM.KS.E:Value() and GetAPHP(target) < Dmg[2](target) then
CastSkillShot(2,myHero.pos)
end
if SReady[3] and ValidTarget(target, Spell[3].range) and BM.KS.R:Value() and GetAPHP(target) < Dmg[3](target) then
local Pred = GetCircularAOEPrediction(target, Spell[3])
if Pred.hitChance >= BM.p.hR:Value()/100 and GetDistance(Pred.castPos,GetOrigin(myHero)) < Spell[3].range then
CastSkillShot(3,Pred.castPos)
end
end
end
end
function Vladimir:UpdateBuff(unit,buff)
if unit.isMe and buff.Name == "VladimirE" then
self.ECharge = GetGameTimer()
AttackUnit = function () end
elseif unit.isMe and buff.Name == "VladimirSanguinePool" then
AttackUnit = function () end
end
end
function Vladimir:RemoveBuff(unit,buff)
if unit.isMe and buff.Name == "VladimirE" then
self.ECharge = nil
AttackUnit = self.AA
elseif unit.isMe and buff.Name == "VladimirSanguinePool" then
AttackUnit = self.AA
end
end
class 'Orianna'
function Orianna:__init()
Spell = {
[0] = { range = 815, delay = 0, radius = 80, speed = 1200,type = "line",col=false },
[1] = { radius = 255, range = 815 },
[2] = { range = 1095, radius = 80 },
[3] = { radius = 410, range = 815 },
}
Dmg = {
[0] = function(unit) return CalcDamage(myHero, unit, 0, 30+30*GetCastLevel(myHero,0) + 0.5 * myHero.ap) end,
[1] = function(unit) return CalcDamage(myHero, unit, 0, 25+45*GetCastLevel(myHero,1) + 0.7 * myHero.ap) end,
[2] = function(unit) return CalcDamage(myHero, unit, 0, 30+30*GetCastLevel(myHero,2) + 0.3 * myHero.ap) end,
[3] = function(unit) return CalcDamage(myHero, unit, 0, 75+75*GetCastLevel(myHero,3) + 0.7 * myHero.ap) end,
}
self.o = {}
self.Ball = myHero
BM:Menu("C", "Combo")
BM.C:Boolean("Q", "Use Q", true)
BM.C:Boolean("W", "Use W", true)
BM.C:Slider("Wm", "Use W if hit x unit(s)", 2, 1, 5, 1)
BM.C:Boolean("E", "Use E", true)
BM.C:Boolean("R", "Use R", true)
BM.C:Slider("Rm", "Use R if hit x unit(s)", 2, 1, 5, 1)
BM:Menu("H", "Harass")
BM.H:Boolean("Q", "Use Q", true)
BM.H:Boolean("W", "Use W", true)
BM.H:Slider("Wm", "Use W if hit x unit(s)", 1, 1, 5, 1)
BM:Menu("LC", "LaneClear")
BM.LC:Boolean("Q", "Use Q", true)
BM.LC:Boolean("W", "Use W", true)
BM.LC:Slider("Wm", "Use W if hit x unit(s)", 3, 1, 15, 1)
BM:Menu("JC", "JungleClear")
BM.JC:Boolean("Q", "Use Q", true)
BM.JC:Boolean("W", "Use W", true)
BM.JC:Slider("Wm", "Use W if hit x unit(s)", 1, 1, 4, 1)
BM.JC:Boolean("E", "Use E", true)
BM:Menu("KS", "Killsteal")
BM.KS:Boolean("Q", "Use Q", true)
BM.KS:Boolean("W", "Use W", true)
BM.KS:Boolean("E", "Use E", true)
BM.KS:Boolean("R", "Use R", false)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AP",BM.TS,false)
BM:Menu("p", "Prediction")
BM:Menu("Dr", "Drawings")
BM.Dr:Boolean("UD", "Use Drawings", false)
BM.Dr:ColorPick("Cc", "Circle color", {255,102,102,102})
BM.Dr:DropDown("DQ", "Draw Quality", 3, {"High", "Medium", "Low"})
BM.Dr:Slider("CW", "Circle width", 1, 1, 5, 1)
BM.Dr:Boolean("B", "Draw Ball", true)
BM.Dr:Boolean("Q", "Draw Q", true)
BM.Dr:Boolean("W", "Draw W", true)
BM.Dr:Boolean("E", "Draw E", true)
BM.Dr:Boolean("R", "Draw R", true)
Callback.Add("CreateObj", function(obj) self:CO(obj) end)
Callback.Add("DeleteObj", function(obj) self:DO(obj) end)
Callback.Add("Draw", function() self:D() end)
Callback.Add("Tick", function() self:T() end)
Callback.Add("UpdateBuff", function(unit,buffProc) self:UB(unit,buffProc) end)
for i = 0,0 do
PredMenu(BM.p, i)
end
end
function Orianna:CO(obj)
if obj.name == "missile" then
if not self.o[obj.networkID] then self.o[obj.networkID] = {} end
self.o[obj.networkID].o = obj
end
if obj.name == "Orianna_Base_Q_yomu_ring_green.troy" then
self.Ball = obj
end
end
function Orianna:DO(obj)
if obj.name == "missile" then
self.o[obj.networkID] = nil
end
end
function Orianna:UB(unit,buffProc)
if unit.isMe and buffProc.Name == "orianaghostself" then
self.Ball = myHero
end
end
function Orianna:T()
if myHero.dead then return end
for _,i in pairs(self.o) do
if i.o.spellOwner.isMe and i.o.spellName == "OrianaIzuna" then
self.Ball = i.o
end
end
target = ts:GetTarget()
GetReady()
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 Orianna:D()
if BM.Dr.UD:Value() then
if BM.Dr.B:Value() then
for _,i in pairs(self.o) do
DrawCircle(self.Ball.pos,100,BM.Dr.CW:Value(),BM.Dr.DQ:Value()*20,BM.Dr.Cc:Value())
end
end
if BM.Dr.Q:Value() and SReady[0] then
DrawCircle(myHero.pos,Spell[0].range,BM.Dr.CW:Value(),BM.Dr.DQ:Value()*20,BM.Dr.Cc:Value())
end
if BM.Dr.W:Value() and SReady[1] then
DrawCircle(self.Ball.pos,Spell[1].radius,BM.Dr.CW:Value(),BM.Dr.DQ:Value()*20,BM.Dr.Cc:Value())
end
if BM.Dr.E:Value() and SReady[2] then
DrawCircle(myHero.pos,Spell[2].range,BM.Dr.CW:Value(),BM.Dr.DQ:Value()*20,BM.Dr.Cc:Value())
end
if BM.Dr.R:Value() and SReady[3] then
DrawCircle(self.Ball.pos,Spell[3].radius,BM.Dr.CW:Value(),BM.Dr.DQ:Value()*20,BM.Dr.Cc:Value())
end
end
end
function Orianna: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[1] and BM.C.W:Value() and EnemiesAround(self.Ball.pos, Spell[1].radius) >= BM.C.Wm:Value() then
CastSpell(1)
end
if SReady[2] and ValidTarget(target, Spell[2].range) and BM.C.E:Value() then
local VP = VectorPointProjectionOnLineSegment(Vector(myHero), Vector(self.Ball), Vector(target))
if GetDistance(VP, target) < Spell[2].radius then
CastSpell(2)
end
end
if SReady[3] and BM.C.R:Value() and EnemiesAround(self.Ball.pos, Spell[3].radius) >= BM.C.Rm:Value() then
CastSpell(3)
end
end
function Orianna: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[1] and BM.H.W:Value() and EnemiesAround(self.Ball.pos, Spell[1].radius) >= BM.H.Wm:Value() then
CastSpell(1)
end
end
function Orianna:LaneClear()
for _,minion in pairs(SLM) do
if minion.team == 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[1] and BM.LC.W:Value() and EnemyMinionsAround(self.Ball.pos, Spell[1].radius) >= BM.LC.Wm:Value() then
CastSpell(1)
end
end
end
end
function Orianna:JungleClear()
for _,minion in pairs(SLM) do
if minion.team == MINION_JUNGLE then
if SReady[0] and ValidTarget(minion, Spell[0].range) and BM.JC.Q:Value() then
CastGenericSkillShot(myHero,minion,Spell[0],0,BM.p)
end
if SReady[1] and BM.JC.W:Value() and JungleMinionsAround(self.Ball.pos, Spell[1].radius) >= BM.JC.Wm:Value() then
CastSpell(1)
end
if SReady[2] and ValidTarget(minion, Spell[2].range) and BM.JC.E:Value() then
local VP = VectorPointProjectionOnLineSegment(Vector(myHero), Vector(self.Ball), Vector(minion))
if GetDistance(VP, minion) < Spell[2].radius then
CastSpell(2)
end
end
end
end
end
function Orianna:KS()
for _,target in pairs(GetEnemyHeroes()) do
if SReady[0] and ValidTarget(target, Spell[0].range) and BM.C.Q:Value() and GetAPHP(target) < Dmg[0](target) then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
if SReady[1] and BM.C.W:Value() and EnemiesAround(self.Ball.pos, Spell[1].radius) >= BM.C.Wm:Value() and GetAPHP(target) < Dmg[1](target) then
CastSpell(1)
end
if SReady[2] and ValidTarget(target, Spell[2].range) and BM.C.E:Value() and GetAPHP(target) < Dmg[2](target) then
local VP = VectorPointProjectionOnLineSegment(Vector(myHero), Vector(self.Ball), Vector(target))
if GetDistance(VP, target) < Spell[2].radius then
CastSpell(2)
end
end
if SReady[3] and BM.C.R:Value() and EnemiesAround(self.Ball.pos, Spell[3].radius) >= BM.C.Rm:Value() and GetAPHP(target) < Dmg[3](target) then
CastSpell(3)
end
end
end
class 'Veigar'
function Veigar:__init()
self.CCType = {
[5] = "Stun",
[8] = "Taunt",
[11] = "Snare",
[21] = "Fear",
[22] = "Charm",
[24] = "Suppression",
}
Spell = {
[-1] = { delay = 0.1, speed = math.huge, width = 50, range = math.huge},
[0] = { delay = 0.1, speed = 2000, width = 100, range = 950},
[1] = { delay = 0.1, speed = math.huge, range = 900 , radius = 225},
[2] = { delay = 0.6, speed = math.huge, range = 725 , radius = 400},
[3] = { range = 650 },
}
Dmg = {
[0] = function(u) return CalcDamage(myHero, u, 0, 30+40*GetCastLevel(myHero,0) + 0.6 * myHero.ap) end,
[1] = function(u) return CalcDamage(myHero, u, 0, 50+50*GetCastLevel(myHero,1) + myHero.ap) end,
[3] = function(u) return CalcDamage(myHero, u, 0, (75*GetCastLevel(myHero,3) + 100)*math.max((100-GetPercentHP(u))*1.5,200)*.01) end,
}
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:SubMenu("H", "Harass")
BM.H:Boolean("Q", "Use Q", true)
BM.H:Boolean("W", "Use W", true)
BM.H:Boolean("E", "Use E", true)
BM:SubMenu("LC", "LaneClear")
BM.LC:Boolean("W", "Use W", true)
BM:SubMenu("JC", "JungleClear")
BM.JC:Boolean("W", "Use W", true)
BM:SubMenu("p", "Prediction")
BM.p:Slider("hQ", "HitChance Q", 20, 0, 100, 1)
BM.p:Slider("hW", "Hitchance W", 20, 0, 100, 1)
BM.p:Slider("hE", "HitChance E", 20, 0, 100, 1)
BM:SubMenu("KS", "Killsteal")
BM.KS:Boolean("Q", "Use Q", true)
BM.KS:Boolean("W", "Use W", true)
BM.KS:Boolean("R", "Use R", true)
BM:SubMenu("f", "Farm")
BM.f:Boolean("AQ", "Auto Q farm", true)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AP",BM.TS,false)
BM:Boolean("AW", "Auto W on immobile", true)
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("UpdateBuff", function(u,b) self:UpdateBuff(u,b) end)
Callback.Add("RemoveBuff", function(u,b) self:RemoveBuff(u,b) end)
self.CC = false
end
function Veigar:UpdateBuff(u,b)
if u and u.team == MINION_ENEMY and b and u.isHero then
if self.CCType[b.Type] then
self.CC = true
end
end
end
function Veigar:RemoveBuff(u,b)
if u and u.team == MINION_ENEMY and b and u.isHero then
if self.CCType[b.Type] then
self.CC = false
end
end
end
function Veigar:Tick()
if myHero.dead then return end
target = ts:GetTarget()
GetReady()
self:KS()
self:FarmQ()
self:AutoW(target)
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 Veigar:Combo(u)
if u then
if BM.C.Q:Value() and SReady[0] and ValidTarget(u, Spell[0].range+10) then
local QPred = GetPrediction(u,Spell[0])
if QPred.hitChance >= (BM.p.hQ:Value()/100) then
CastSkillShot(0,QPred.castPos)
end
end
if BM.C.W:Value() and SReady[1] and ValidTarget(u, Spell[1].range) then
local WPred = GetCircularAOEPrediction(u, Spell[1])
if WPred.hitChance >= (BM.p.hW:Value()/100) then
CastSkillShot(1,WPred.castPos)
end
end
if BM.C.E:Value() then
self:castE(u)
end
end
end
function Veigar:Harass(u)
if u then
if BM.H.Q:Value() and SReady[0] and ValidTarget(u, Spell[0].range+10) then
local QPred = GetPrediction(u,Spell[0])
if QPred.hitChance >= (BM.p.hQ:Value()/100) and (not QPred:mCollision() or #QPred:mCollision() < 2) then
CastSkillShot(0,QPred.castPos)
end
end
if BM.H.W:Value() and SReady[1] and ValidTarget(u, Spell[1].range) then
local WPred = GetCircularAOEPrediction(u, Spell[1])
if WPred.hitChance >= (BM.p.hW:Value()/100) then
CastSkillShot(1,WPred.castPos)
end
end
if BM.H.E:Value() then
self:castE(u)
end
end
end
function Veigar:LaneClear()
for _,i in pairs(SLM) do
if i.team == MINION_ENEMY and BM.LC.W:Value() and SReady[1] and ValidTarget(i, Spell[1].range) then
local WPred = GetCircularAOEPrediction(i, Spell[1])
if WPred.hitChance >= (BM.p.hW:Value()/100) then
CastSkillShot(1,WPred.castPos)
end
end
end
end
function Veigar:JungleClear()
for _,i in pairs(SLM) do
if i.team == MINION_JUNGLE and BM.JC.W:Value() and SReady[1] and ValidTarget(i, Spell[1].range) then
local WPred = GetCircularAOEPrediction(i, Spell[1])
if WPred.hitChance >= (BM.p.hW:Value()/100) then
CastSkillShot(1,WPred.castPos)
end
end
end
end
function Veigar:KS()
for _,i in pairs(GetEnemyHeroes()) do
if BM.KS.Q:Value() and SReady[0] and ValidTarget(i, Spell[0].range) and GetAPHP(i) < Dmg[0](i) then
local QPred = GetPrediction(i,Spell[0])
if QPred.hitChance >= (BM.p.hQ:Value()/100) and (not QPred:mCollision() or #QPred:mCollision() < 2) then
CastSkillShot(0,QPred.castPos)
end
end
if BM.KS.W:Value() and SReady[1] and ValidTarget(i, Spell[1].range) and GetAPHP(i) < Dmg[1](i) then
local WPred = GetCircularAOEPrediction(i, Spell[1])
if WPred.hitChance >= (BM.p.hW:Value()/100) then
CastSkillShot(1,WPred.castPos)
end
end
if BM.KS.R:Value() and SReady[3] and ValidTarget(i, Spell[3].range) and GetAPHP(i) < Dmg[3](i) then
CastTargetSpell(i,3)
end
end
end
function Veigar:AutoW(u)
if u and BM.AW:Value() and SReady[1] and ValidTarget(u,Spell[1].range) and self.CC then
local WPred = GetCircularAOEPrediction(u, Spell[1])
if WPred.hitChance >= (BM.p.hW:Value()/100) then
CastSkillShot(1,WPred.castPos)
end
end
end
function Veigar:castE(u)
if u and SReady[2] and ValidTarget(u, 725) then
local EPred = GetCircularAOEPrediction(u, Spell[2])
local EMove = GetPrediction(u, Spell[-1])
if GetDistance(EMove.castPos , myHero.pos) < GetDistance(u.pos,myHero.pos) then
EPred.castPos = Vector(EPred.castPos)+((Vector(EPred.castPos)-myHero.pos):normalized()*325)
else
EPred.castPos = Vector(EPred.castPos)+((myHero.pos-Vector(EPred.castPos)):normalized()*325)
end
CastSkillShot(2,EPred.castPos)
end
end
function Veigar:FarmQ()
if BM.f.AQ:Value() and SReady[0] and Mode ~= "Combo" then
for _,i in pairs(SLM) do
if i.team ~= MINION_ALLY and ValidTarget(i,Spell[0].range) and GetAPHP(i) < Dmg[0](i) then
local QPred = GetPrediction(i,Spell[0])
if not QPred:mCollision() or #QPred:mCollision() < 2 then
CastSkillShot(0,QPred.castPos)
end
end
end
end
end
class 'Ahri'
function Ahri:__init()
self.CCType = {
[5] = "Stun",
[8] = "Taunt",
[11] = "Snare",
[21] = "Fear",
[22] = "Charm",
[24] = "Suppression",
}
Spell = {
[0] = { delay = 0.25, speed = 1700, width = 100, range = 1000,type = "line",col=false},
[2] = { delay = 0.25, speed = 1600, width = 60 , range = 1000,type = "line",col=true},
[3] = { range = 450},
}
Dmg = {
[0] = function(u) return CalcDamage(myHero, u, 0, 15+25*GetCastLevel(myHero,0) + 0.35 * myHero.ap) end,
[1] = function(u) return CalcDamage(myHero, u, 0, 15+25*GetCastLevel(myHero,1) + 0.4 * myHero.ap) end,
[2] = function(u) return CalcDamage(myHero, u, 0, 25+35*GetCastLevel(myHero,2) + 0.5 * myHero.ap) end,
[3] = function(u) return CalcDamage(myHero, u, 0, (30+40*GetCastLevel(myHero,3) + 0.3 * myHero.ap)*(self.R[myHero.networkID] or 1)) end,
}
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:Menu("R", "R")
BM.C.R:Boolean("E", "Enabled", true)
BM.C.R:Slider("EAR", "EnemiesAround > x", 2, 1, 5, 1)
BM.C.R:Slider("AAR", "AlliesAround > x", 0, 0, 5, 1)
BM.C.R:Slider("MHP", "My Hero HP < x", 100, 0, 100, 5)
BM.C.R:Slider("EHP", "Enemy HP < x", 30, 0, 100, 5)
BM.C.R:DropDown("RM", "Ulti Mode", 1, {"Sideways", "MousePos"})
BM:SubMenu("H", "Harass")
BM.H:Boolean("Q", "Use Q", true)
BM.H:Boolean("W", "Use W", true)
BM.H:Boolean("E", "Use E", true)
BM:SubMenu("LC", "LaneClear")
BM.LC:Boolean("Q", "Use Q", true)
BM.LC:Boolean("W", "Use W", true)
BM.LC:Boolean("E", "Use E", true)
BM:SubMenu("JC", "JungleClear")
BM.JC:Boolean("Q", "Use Q", true)
BM.JC:Boolean("W", "Use W", true)
BM.JC:Boolean("E", "Use E", true)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AP",BM.TS,false)
BM:SubMenu("p", "Prediction")
BM:SubMenu("KS", "Killsteal")
BM.KS:Boolean("Q", "Use Q", true)
BM.KS:Boolean("W", "Use W", true)
BM.KS:Boolean("E", "Use E", true)
BM.KS:Menu("R", "R")
BM.KS.R:Boolean("E", "Enabled", false)
BM.KS.R:DropDown("RM", "Ulti Mode", 1, {"Sideways", "MousePos"})
BM:SubMenu("Dr", "Drawings")
BM.Dr:Boolean("UD", "Use Drawings", true)
BM.Dr:ColorPick("Cc", "Circle color", {255,102,102,102})
BM.Dr:DropDown("DQ", "Draw Quality", 3, {"High", "Medium", "Low"})
BM.Dr:Slider("CW", "Circle width", 1, 1, 5, 1)
BM.Dr:Boolean("DQL", "Draw Q Line", true)
BM.Dr:Boolean("Q", "Draw Q", true)
BM.Dr:Boolean("E", "Draw E", true)
BM.Dr:Boolean("R", "Draw R", true)
BM:Boolean("AQ", "Auto Q on immobile", true)
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("UpdateBuff", function(u,b) self:UpdateBuff(u,b) end)
Callback.Add("RemoveBuff", function(u,b) self:RemoveBuff(u,b) end)
Callback.Add("Draw", function() self:D() end)
Callback.Add("CreateObj", function(o) self:CreateObj(o) end)
Callback.Add("DeleteObj", function(o) self:DeleteObj(o) 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)
self.CC = false
self.o = {}
self.R = {}
self.sp = {
["AhriOrbMissile"]={type="Line"},
["AhriOrbReturn"]={type="return"},
}
for i = 0,2,2 do
PredMenu(BM.p,i)
end
end
function Ahri:AntiChannel(unit,range)
if BM.AC.E:Value() and range < Spell[2].range and SReady[2] then
CastGenericSkillShot(myHero,unit,Spell[2],2,BM.p)
end
end
function Ahri:AntiGapCloser(unit,range)
if BM.AGC.E:Value() and range < Spell[2].range and SReady[2] then
CastGenericSkillShot(myHero,unit,Spell[2],2,BM.p)
end
end
function Ahri:CreateObj(o)
if o.spellOwner.isMe and o and o.isSpell then
if (o.spellName == "AhriOrbMissile") or (o.spellName == "AhriOrbReturn") then
if not self.o[o.spellName] then self.o[o.spellName] = {} end
self.o[o.spellName].o = o
self.o[o.spellName].s = self.sp[o.spellName]
end
end
end
function Ahri:DeleteObj(o)
if o.spellOwner.isMe and o and o.isSpell then
if (o.spellName == "AhriOrbMissile") or (o.spellName == "AhriOrbReturn") then
self.o[o.spellName] = nil
end
end
end
function Ahri:UpdateBuff(u,b)
if u and u.isMe and b then
if b.Name == "AhriTumble" then
self.R[u.networkID] = b.Count
end
end
if u and u.team == MINION_ENEMY and b and u.isHero then
if self.CCType[b.Type] then
self.CC = true
end
end
end
function Ahri:RemoveBuff(u,b)
if u and u.isMe and b then
if b.Name == "AhriTumble" then
self.R[u.networkID] = 0
end
end
if u and u.team == MINION_ENEMY and b and u.isHero then
if self.CCType[b.Type] then
self.CC = false
end
end
end
function Ahri:D()
if BM.Dr.UD:Value() then
for _,i in pairs(self.o) do
if i.o and i.o.valid and BM.Dr.DQL:Value() then
if i.s.type == "Line" then
dRectangleOutline(Vector(i.o.pos), Vector(i.o.endPos), 100+myHero.boundingRadius, BM.Dr.CW:Value(), BM.Dr.Cc:Value(), true)
else
dRectangleOutline(Vector(i.o.pos), Vector(myHero.pos), 100+myHero.boundingRadius, BM.Dr.CW:Value(), BM.Dr.Cc:Value(), true)
end
end
end
if BM.Dr.Q:Value() and SReady[0] then
DrawCircle(myHero.pos,Spell[0].range,BM.Dr.CW:Value(),BM.Dr.DQ:Value()*20,BM.Dr.Cc:Value())
end
if BM.Dr.E:Value() and SReady[2] then
DrawCircle(myHero.pos,Spell[2].range,BM.Dr.CW:Value(),BM.Dr.DQ:Value()*20,BM.Dr.Cc:Value())
end
if BM.Dr.R:Value() and SReady[3] then
DrawCircle(myHero.pos,Spell[3].range,BM.Dr.CW:Value(),BM.Dr.DQ:Value()*20,BM.Dr.Cc:Value())
end
end
end
function Ahri:Tick()
for _,i in pairs(self.o) do
self:CleanObj(_,i)
end
if myHero.dead then return end
target = ts:GetTarget()
GetReady()
self:KS()
self:AutoQ()
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 Ahri:Combo(u)
if u then
if BM.C.Q:Value() and SReady[0] and ValidTarget(u, Spell[0].range) then
CastGenericSkillShot(myHero,u,Spell[0],0,BM.p)
end
if BM.C.W:Value() and SReady[1] and ValidTarget(u, myHero.range+myHero.boundingRadius) then
CastSpell(1)
end
if BM.C.E:Value() and SReady[2] and ValidTarget(u, Spell[2].range) then
CastGenericSkillShot(myHero,u,Spell[2],2,BM.p)
end
if BM.C.R.E:Value() and SReady[3] and ValidTarget(u, 1000) and GetPercentHP(myHero) <= BM.C.R.MHP:Value() and GetPercentHP(u) <= BM.C.R.EHP:Value() and EnemyHeroesAround(myHero.pos,1000) >= BM.C.R.EAR:Value() and AllyHeroesAround(myHero.pos,1000) >= BM.C.R.AAR:Value() then
if BM.C.R.RM:Value() == 1 then
local RPos = Vector(u) - (Vector(u) - Vector(myHero)):perpendicular():normalized() * GetDistance(myHero,u)
CastSkillShot(3,RPos)
elseif BM.C.R.RM:Value() == 2 then
CastSkillShot(3,GetMousePos())
end
end
end
end
function Ahri:Harass(u)
if u then
if BM.H.Q:Value() and SReady[0] and ValidTarget(u, Spell[0].range) then
CastGenericSkillShot(myHero,u,Spell[0],0,BM.p)
end
if BM.H.W:Value() and SReady[1] and ValidTarget(u, myHero.range+myHero.boundingRadius) then
CastSpell(1)
end
if BM.H.E:Value() and SReady[2] and ValidTarget(u, Spell[2].range) then
CastGenericSkillShot(myHero,u,Spell[2],2,BM.p)
end
end
end
function Ahri:LaneClear()
for _,i in pairs(SLM) do
if i.team == MINION_ENEMY then
if BM.LC.Q:Value() and SReady[0] and ValidTarget(i, Spell[0].range) then
CastGenericSkillShot(myHero,i,Spell[0],0,BM.p)
end
if BM.LC.W:Value() and SReady[1] and ValidTarget(i, myHero.range+myHero.boundingRadius) then
CastSpell(1)
end
if BM.LC.E:Value() and SReady[2] and ValidTarget(i, Spell[2].range) then
CastGenericSkillShot(myHero,i,Spell[2],2,BM.p)
end
end
end
end
function Ahri:JungleClear()
for _,i in pairs(SLM) do
if i.team == MINION_JUNGLE then
if BM.JC.Q:Value() and SReady[0] and ValidTarget(i, Spell[0].range) then
CastGenericSkillShot(myHero,i,Spell[0],0,BM.p)
end
if BM.JC.W:Value() and SReady[1] and ValidTarget(i, myHero.range+myHero.boundingRadius) then
CastSpell(1)
end
if BM.JC.E:Value() and SReady[2] and ValidTarget(i, Spell[2].range) then
CastGenericSkillShot(myHero,i,Spell[2],2,BM.p)
end
end
end
end
function Ahri:KS()
for _,i in pairs(GetEnemyHeroes()) do
if BM.KS.Q:Value() and SReady[0] and ValidTarget(i, Spell[0].range) and GetAPHP(i) < Dmg[0](i) then
CastGenericSkillShot(myHero,i,Spell[0],0,BM.p)
end
if BM.KS.W:Value() and SReady[1] and ValidTarget(i, myHero.range+myHero.boundingRadius) and GetAPHP(i) < Dmg[1](i) then
CastSpell(1)
end
if BM.KS.E:Value() and SReady[2] and ValidTarget(i, Spell[2].range) and GetAPHP(i) < Dmg[2](i) then
CastGenericSkillShot(myHero,i,Spell[2],2,BM.p)
end
if BM.KS.R.E:Value() and SReady[3] and ValidTarget(i, 1000) and GetAPHP(i) < Dmg[3](i) then
if BM.KS.R.RM:Value() == 1 then
local RPos = Vector(i) - (Vector(i) - Vector(myHero)):perpendicular():normalized() * GetDistance(myHero,i)
CastSkillShot(3,RPos)
elseif BM.KS.R.RM:Value() == 2 then
CastSkillShot(3,GetMousePos())
end
end
end
end
function Ahri:AutoQ()
for _,i in pairs(GetEnemyHeroes()) do
if i and BM.AQ:Value() and SReady[0] and ValidTarget(i,Spell[0].range) and self.CC then
CastGenericSkillShot(myHero,i,Spell[0],0,BM.p)
end
end
end
function Ahri:CleanObj(_,i)
if i.o and not i.o.valid then
self.o[_] = nil
end
end
class 'Zed'
function Zed:__init()
self.CCType = {
[5] = "Stun",
[8] = "Taunt",
[11] = "Snare",
[21] = "Fear",
[22] = "Charm",
[24] = "Suppression",
}
Spell = {
[0] = { delay = 0.25, speed = 2000, width = 60, range = 900,type = "line",col=false},
[1] = {range = 700},
[2] = { range = 284},
[3] = { range = 625},
}
Dmg = {
[0] = function(u) return CalcDamage(myHero, u, 35+40*GetCastLevel(myHero,0)+(myHero.totalDamage+5*GetCastLevel(myHero,1)),0) end,
[2] = function(u) return CalcDamage(myHero, u,30+30*GetCastLevel(myHero,2) + 0.8 * (myHero.totalDamage+5*GetCastLevel(myHero,1)),0) end,
[3] = function(u) return CalcDamage(myHero, u, 30+30*GetCastLevel(myHero,2) + 0.8 * (myHero.totalDamage+5*GetCastLevel(myHero,1))+35+40*GetCastLevel(myHero,0)+(myHero.totalDamage+5*GetCastLevel(myHero,1))+((0.15*GetCastLevel(myHero,3) + 0.05) * (math.sqrt(math.pow((100/(100+GetArmor(u))),2))) * (u.health-u.maxHealth)/100) + (myHero.totalDamage+5*GetCastLevel(myHero,1)), 0) end,
}
self.duration = {5,7.5}
BM:SubMenu("C", "Combo")
BM.C:Boolean("Q", "Use Q", true)
BM.C:Boolean("W", "Use W", true)
BM.C:Boolean("W2", "Use W2", true)
BM.C:Slider("W2D", "W2 Delay", 30, 0, 100, 5)
BM.C:Boolean("E", "Use E", true)
BM.C:Menu("R", "R")
BM.C.R:Boolean("E", "Enable R", true)
BM.C.R:Boolean("E2", "Enable R2", true)
BM.C.R:Boolean("UOIK", "Use Only if killable", true)
BM.C.R:Slider("EAR", "EnemiesAround > x", 1, 1, 5, 1)
BM.C.R:Slider("AAR", "AlliesAround > x", 0, 0, 5, 1)
BM.C.R:Slider("MHP", "My Hero HP < x", 100, 0, 100, 5)
BM.C.R:Slider("EHP", "Enemy HP < x", 75, 0, 100, 5)
BM:SubMenu("H", "Harass")
BM.H:Boolean("Q", "Use Q", true)
BM.H:Boolean("W", "Use W", true)
BM.H:Boolean("E", "Use E", true)
BM:SubMenu("LC", "LaneClear")
BM.LC:Boolean("Q", "Use Q", true)
BM.LC:Boolean("W", "Use W", true)
BM.LC:Boolean("E", "Use E", true)
BM:SubMenu("JC", "JungleClear")
BM.JC:Boolean("Q", "Use Q", true)
BM.JC:Boolean("W", "Use W", true)
BM.JC:Boolean("E", "Use E", true)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AD",BM.TS,false)
BM:SubMenu("p", "Prediction")
BM:SubMenu("KS", "Killsteal")
BM.KS:Boolean("Q", "Use Q", true)
BM.KS:Boolean("E", "Use E", true)
BM:Boolean("AQ", "Auto Q on immobile", true)
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("UpdateBuff", function(u,b) self:UpdateBuff(u,b) end)
Callback.Add("RemoveBuff", function(u,b) self:RemoveBuff(u,b) end)
Callback.Add("ProcessSpell", function(u,s) self:ProcessSpell(u,s) end)
self.CC = false
self.W = {}
self.R = {}
self.WPos = false
self.W2Pos = false
self.RPos = false
self.R2Pos = false
for i = 0,0 do
PredMenu(BM.p,i)
end
end
function Zed:CleanTable()
for _,i in pairs(self.W) do
DelayAction(function() table.remove(self.W,_) self.WPos = false self.W2Pos = false end,self.duration[1])
end
for _,i in pairs(self.R) do
DelayAction(function() table.remove(self.R,_) self.RPos = false self.R2Pos = false end,self.duration[2])
end
end
function Zed:UpdateBuff(u,b)
if u and u.team == MINION_ENEMY and b and u.isHero then
if self.CCType[b.Type] then
self.CC = true
end
end
end
function Zed:RemoveBuff(u,b)
if u and u.team == MINION_ENEMY and b and u.isHero then
if self.CCType[b.Type] then
self.CC = false
end
end
end
function Zed:ProcessSpell(u,s)
if u and u.isMe and s then
if s.name:lower():find("zedw") then
table.insert(self.W, {pos=Vector(s.endPos)})
elseif s.name:lower():find("zedw2") then
table.insert(self.W, {pos=Vector(s.startPos)})
end
if s.name:lower():find("zedr") then
table.insert(self.R, {pos=Vector(s.startPos)})
elseif s.name:lower():find("zedr2") then
table.insert(self.R,{pos=myHero.pos})
end
end
end
function Zed:Tick()
self:CleanTable()
if myHero.dead then return end
target = ts:GetTarget()
GetReady()
self:KS()
self:AutoQ()
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 Zed:Combo(target)
if target and not target.dead then
for _,i in pairs(self.W) do
if i.pos then
if SReady[0] and BM.LC.Q:Value() and GetDistance(i.pos,target) < Spell[0].range then
CastGenericSkillShot(i.pos,target,Spell[0],0,BM.p)
end
if SReady[2] and BM.LC.E:Value() and GetDistance(i.pos,target) < Spell[2].range then
CastSpell(2)
end
self.WPos = true
else
self.WPos = false
end
end
for _,i in pairs(self.R) do
if i.pos then
if SReady[0] and BM.LC.Q:Value() and GetDistance(i.pos,target) < Spell[0].range then
CastGenericSkillShot(i.pos,target,Spell[0],0,BM.p)
end
if SReady[2] and BM.LC.E:Value() and GetDistance(i.pos,target) < Spell[2].range then
CastSpell(2)
end
self.RPos = true
else
self.RPos = false
end
end
if not self.WPos and not self.RPos then
if SReady[0] and BM.JC.Q:Value() and target.distance < Spell[0].range then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
if SReady[2] and BM.JC.E:Value() and target.distance < Spell[2].range then
CastSpell(2)
end
end
if GotBuff(myHero,"ZedWHandler") == 0 and not self.WPos and SReady[1] and target.distance < Spell[1].range then
local pos = Vector(target) - (Vector(target) - Vector(myHero)):perpendicular():normalized() * target.distance*.5
CastSkillShot(1,pos)
self.WPos = true
self.W2Pos = false
end
if GotBuff(myHero,"ZedWHandler") == 1 and not self.W2Pos and SReady[1] and target.distance < Spell[1].range+500 then
DelayAction(function()
CastSpell(1)
self.WPos = false
self.W2Pos = true
end,BM.C.W2D:Value()*.001)
end
if GotBuff(target,"zedrtargetmark") == 0 and BM.C.R.E:Value() and SReady[3] and ValidTarget(target, Spell[3].range) and GetPercentHP(myHero) <= BM.C.R.MHP:Value() and GetPercentHP(target) <= BM.C.R.EHP:Value() and EnemyHeroesAround(myHero.pos,1000) >= BM.C.R.EAR:Value() and AllyHeroesAround(myHero.pos,1000) >= BM.C.R.AAR:Value() then
if BM.C.R.UOIK:Value() and Dmg[3](target)> target.health then
CastTargetSpell(target,3)
self.RPos = true
self.R2Pos = false
elseif not BM.C.R.UOIK:Value() then
CastTargetSpell(target,3)
self.RPos = true
self.R2Pos = false
end
end
if BM.C.R.E2:Value() and SReady[3] and target.health < 100 and GotBuff(target,"zedrtargetmark") == 1 then
CastSpell(3)
self.RPos = false
self.R2Pos = true
end
end
end
function Zed:Harass(target)
if target and not target.dead then
for _,i in pairs(self.W) do
if i.pos then
if SReady[0] and BM.H.Q:Value() and GetDistance(i.pos,target) < Spell[0].range then
CastGenericSkillShot(i.pos,target,Spell[0],0,BM.p)
end
if SReady[2] and BM.H.E:Value() and GetDistance(i.pos,target) < Spell[2].range then
CastSpell(2)
end
self.WPos = true
else
self.WPos = false
end
end
for _,i in pairs(self.R) do
if i.pos then
if SReady[0] and BM.H.Q:Value() and GetDistance(i.pos,target) < Spell[0].range then
CastGenericSkillShot(i.pos,target,Spell[0],0,BM.p)
end
if SReady[2] and BM.H.E:Value() and GetDistance(i.pos,target) < Spell[2].range then
CastSpell(2)
end
self.RPos = true
else
self.RPos = false
end
end
if not self.WPos and not self.RPos then
if SReady[0] and BM.H.Q:Value() and target.distance < Spell[0].range then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
if SReady[2] and BM.H.E:Value() and target.distance < Spell[2].range then
CastSpell(2)
end
end
if not self.WPos and SReady[1] and target.distance < Spell[1].range then
local pos = Vector(target) - (Vector(target) - Vector(myHero)):perpendicular():normalized() * target.distance*.5
CastSkillShot(1,pos)
self.WPos = true
end
end
end
function Zed:LaneClear()
for t,target in pairs(SLM) do
if target.team == MINION_ENEMY and not target.dead then
for _,i in pairs(self.W) do
if i.pos then
if SReady[0] and BM.LC.Q:Value() and GetDistance(i.pos,target) < Spell[0].range then
CastGenericSkillShot(i.pos,target,Spell[0],0,BM.p)
end
if SReady[2] and BM.LC.E:Value() and GetDistance(i.pos,target) < Spell[2].range then
CastSpell(2)
end
self.WPos = true
else
self.WPos = false
end
end
for _,i in pairs(self.R) do
if i.pos then
if SReady[0] and BM.LC.Q:Value() and GetDistance(i.pos,target) < Spell[0].range then
CastGenericSkillShot(i.pos,target,Spell[0],0,BM.p)
end
if SReady[2] and BM.LC.E:Value() and GetDistance(i.pos,target) < Spell[2].range then
CastSpell(2)
end
self.RPos = true
else
self.RPos = false
end
end
if not self.WPos and not self.RPos then
if SReady[0] and BM.LC.Q:Value() and target.distance < Spell[0].range then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
if SReady[2] and BM.LC.E:Value() and target.distance < Spell[2].range then
CastSpell(2)
end
end
if not self.WPos and SReady[1] and target.distance < Spell[1].range then
local pos = Vector(target) - (Vector(target) - Vector(myHero)):perpendicular():normalized() * target.distance*.5
CastSkillShot(1,pos)
self.WPos = true
end
end
end
end
function Zed:JungleClear()
for t,target in pairs(SLM) do
if target.team == MINION_JUNGLE and not target.dead then
for _,i in pairs(self.W) do
if i.pos then
if SReady[0] and BM.JC.Q:Value() and GetDistance(i.pos,target) < Spell[0].range then
CastGenericSkillShot(i.pos,target,Spell[0],0,BM.p)
end
if SReady[2] and BM.JC.E:Value() and GetDistance(i.pos,target) < Spell[2].range then
CastSpell(2)
end
self.WPos = true
else
self.WPos = false
end
end
for _,i in pairs(self.R) do
if i.pos then
if SReady[0] and BM.JC.Q:Value() and GetDistance(i.pos,target) < Spell[0].range then
CastGenericSkillShot(i.pos,target,Spell[0],0,BM.p)
end
if SReady[2] and BM.JC.E:Value() and GetDistance(i.pos,target) < Spell[2].range then
CastSpell(2)
end
self.RPos = true
else
self.RPos = false
end
end
if not self.WPos and not self.RPos then
if SReady[0] and BM.JC.Q:Value() and target.distance < Spell[0].range then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
if SReady[2] and BM.JC.E:Value() and target.distance < Spell[2].range then
CastSpell(2)
end
end
if not self.WPos and SReady[1] and target.distance < Spell[1].range then
local pos = Vector(target) - (Vector(target) - Vector(myHero)):perpendicular():normalized() * target.distance*.5
CastSkillShot(1,pos)
self.WPos = true
end
end
end
end
function Zed:AutoQ()
for k,e in pairs(GetEnemyHeroes()) do
if self.CC and BM.AQ:Value() then
for _,i in pairs(self.W) do
if i.pos then
if SReady[0] and GetDistance(i.pos,e) < Spell[0].range then
CastGenericSkillShot(i.pos,e,Spell[0],0,BM.p)
end
if SReady[2] and GetDistance(i.pos,e) < Spell[2].range then
CastSpell(2)
end
self.WPos = true
else
self.WPos = false
end
end
for _,i in pairs(self.R) do
if i.pos then
if SReady[0] and GetDistance(i.pos,e) < Spell[0].range then
CastGenericSkillShot(i.pos,e,Spell[0],0,BM.p)
end
if SReady[2] and GetDistance(i.pos,e) < Spell[2].range then
CastSpell(2)
end
self.RPos = true
else
self.RPos = false
end
end
if not self.WPos and not self.RPos then
if SReady[0] and e.distance < Spell[0].range then
CastGenericSkillShot(myHero,e,Spell[0],0,BM.p)
end
end
end
end
end
function Zed:KS()
for k,target in pairs(GetEnemyHeroes()) do
if target and not target.dead then
for _,i in pairs(self.W) do
if i.pos then
if SReady[0] and BM.KS.Q:Value() and GetDistance(i.pos,target) < Spell[0].range and Dmg[0](target) > target.health then
CastGenericSkillShot(i.pos,target,Spell[0],0,BM.p)
end
if SReady[2] and BM.KS.E:Value() and GetDistance(i.pos,target) < Spell[2].range and Dmg[2](target) > target.health then
CastSpell(2)
end
self.WPos = true
else
self.WPos = false
end
end
for _,i in pairs(self.R) do
if i.pos then
if SReady[0] and BM.KS.Q:Value() and GetDistance(i.pos,target) < Spell[0].range and Dmg[0](target) > target.health then
CastGenericSkillShot(i.pos,target,Spell[0],0,BM.p)
end
if SReady[2] and BM.KS.E:Value() and GetDistance(i.pos,target) < Spell[2].range and Dmg[2](target) > target.health then
CastSpell(2)
end
self.RPos = true
else
self.RPos = false
end
end
if not self.WPos and not self.RPos then
if SReady[0] and BM.KS.Q:Value() and target.distance < Spell[0].range and Dmg[0](target) > target.health then
CastGenericSkillShot(myHero,target,Spell[0],0,BM.p)
end
if SReady[2] and BM.KS.E:Value() and target.distance < Spell[2].range and Dmg[2](target) > target.health then
CastSpell(2)
end
end
end
end
end
class 'Anivia'
function Anivia:__init()
self.CCType = {
[5] = "Stun",
[8] = "Taunt",
[11] = "Snare",
[21] = "Fear",
[22] = "Charm",
[24] = "Suppression",
}
self.CCType2 = {
[5] = "Stun",
[10] = "Slow",
}
Spell = {
[0] = { delay=0.25,range=1075,radius=110,speed=850,type = "line",col=false},
[1] = { range = 1000},
[2] = { range = 650},
[3] = { range = 750, width = 200,width2 = 200},
}
Dmg = {
[0] = function(unit) return (30+30*GetCastLevel(myHero,0)*2+myHero.ap)+(35+25*GetCastLevel(myHero,0)+0.4*myHero.ap) end,
[2] = function(unit) return (25+30*GetCastLevel(myHero,2)+0.5*myHero.ap)*(self.AniviaStun2[unit.networkID] and self.AniviaStun2[unit.networkID]+1 or 1) end,
[3] = function(unit) return 40+40*GetCastLevel(myHero,3)+0.25*myHero.ap end,
}
BM:SubMenu("C", "Combo")
BM.C:Boolean("Q", "Use Q", true)
BM.C:Boolean("E", "Use E", true)
BM.C:Menu("R", "R")
BM.C.R:Boolean("E", "Enabled", true)
BM.C.R:Slider("EAR", "EnemiesAround > x", 1, 1, 5, 1)
BM.C.R:Slider("AAR", "AlliesAround > x", 0, 0, 5, 1)
BM.C.R:Slider("MHP", "My Hero HP < x", 100, 0, 100, 5)
BM.C.R:Slider("EHP", "Enemy HP < x", 100, 0, 100, 5)
BM.C.R:Slider("MM", "Mana > x", 10, 0, 100, 5)
BM:SubMenu("H", "Harass")
BM.H:Boolean("Q", "Use Q", true)
BM.H:Boolean("E", "Use E", true)
BM.H:Menu("R", "R")
BM.H.R:Boolean("E", "Enabled", true)
BM.H.R:Slider("EAR", "EnemiesAround > x", 1, 1, 5, 1)
BM.H.R:Slider("AAR", "AlliesAround > x", 0, 0, 5, 1)
BM.H.R:Slider("MHP", "My Hero HP < x", 100, 0, 100, 5)
BM.H.R:Slider("EHP", "Enemy HP < x", 100, 0, 100, 5)
BM.H.R:Slider("MM", "Mana > x", 10, 0, 100, 5)
BM:SubMenu("LC", "LaneClear")
BM.LC:Boolean("Q", "Use Q", true)
BM.LC:Boolean("E", "Use E", true)
BM.LC:Boolean("R", "Use R", true)
BM:SubMenu("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("TS", "TargetSelector")
ts = SLTS("AP",BM.TS,false)
BM:SubMenu("p", "Prediction")
BM:SubMenu("KS", "Killsteal")
BM.KS:Boolean("Q", "Use Q", true)
BM.KS:Boolean("E", "Use E", true)
BM.KS:Boolean("R", "Use R", true)
BM:SubMenu("Dr", "Drawings")
BM.Dr:Boolean("UD", "Use Drawings", true)
BM.Dr:ColorPick("Cc", "Circle color", {255,102,102,102})
BM.Dr:DropDown("DQ", "Draw Quality", 3, {"High", "Medium", "Low"})
BM.Dr:Slider("CW", "Circle width", 1, 1, 5, 1)
BM.Dr:Boolean("DQC", "Draw Q Circle", true)
BM.Dr:Boolean("Q", "Draw Q", true)
BM.Dr:Boolean("W", "Draw W", true)
BM.Dr:Boolean("E", "Draw E", true)
BM.Dr:Boolean("R", "Draw R", true)
BM:Boolean("AQ", "Auto Q on immobile", true)
BM:Boolean("AE", "Auto E on Slowed,Stuned", true)
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("UpdateBuff", function(u,b) self:UpdateBuff(u,b) end)
Callback.Add("RemoveBuff", function(u,b) self:RemoveBuff(u,b) end)
Callback.Add("Draw", function() self:D() end)
Callback.Add("CreateObj", function(o) self:CreateObj(o) end)
Callback.Add("DeleteObj", function(o) self:DeleteObj(o) end)
Callback.Add("ProcessSpell", function(u,s) self:ProcSp(u,s) end)
AntiChannel()
AntiGapCloser()
DelayAction( function ()
if BM["AC"] then BM.AC:Info("ad", "Use Spell(s) : ") BM.AC:Boolean("Q","Use Q", true) BM.AC:Boolean("W","Use W", true) end
if BM["AGC"] then BM.AGC:Info("ad", "Use Spell(s) : ") BM.AGC:Boolean("Q","Use Q", true) BM.AGC:Boolean("W","Use W", true)end
end,.001)
self.CC = false
self.AniviaStun = false
self.AniviaStun2 = {}
self.o = {}
self.R = {}
self.R2Casted = false
self.Q2Casted = false
for i = 0,0 do
PredMenu(BM.p,i)
end
end
function Anivia:CleanObj(_,i)
if i.o and not i.o.valid then
self.o[_] = nil
self.Q2Casted = false
end
end
function Anivia:AntiChannel(unit,range)
if BM.AC.Q:Value() and range < Spell[0].range then
if not self.Q2Casted then
CastGenericSkillShot(myHero,unit,Spell[0],0,BM.p)
end
for _,i in pairs(self.o) do
if self.Q2Casted and EnemyHeroesAround(i.o.pos,120+myHero.boundingRadius) > 0 then
CastSpell(0)
end
end
end
if BM.AC.W:Value() and range < Spell[1].range then
CastSkillShot(1,unit.pos)
end
end
function Anivia:AntiGapCloser(unit,range)
if BM.AGC.Q:Value() and range < Spell[0].range then
if not self.Q2Casted then
CastGenericSkillShot(myHero,unit,Spell[0],0,BM.p)
end
for _,i in pairs(self.o) do
if self.Q2Casted and EnemyHeroesAround(i.o.pos,120+myHero.boundingRadius) > 0 then
CastSpell(0)
end
end
end
if BM.AGC.W:Value() and range < Spell[1].range then
CastSkillShot(1,unit.pos)
end
end
function Anivia:CreateObj(o)
if o.spellOwner.isMe and o and o.isSpell then
if o.spellName == "FlashFrostSpell" then
if not self.o[o.spellName] then self.o[o.spellName] = {} end
self.o[o.spellName].o = o
self.Q2Casted = true
end
end
end
function Anivia:DeleteObj(o)
if o.spellOwner.isMe and o and o.isSpell then
if o.spellName == "FlashFrostSpell" then
self.o[o.spellName] = nil
self.Q2Casted = false
end
end
end
function Anivia:UpdateBuff(u,b)
if u and u.team == MINION_ENEMY and b and u.isHero then
if self.CCType[b.Type] then
self.CC = true
end
end
if u and u.team == MINION_ENEMY and b and u.isHero then
if self.CCType2[b.Type] then
self.AniviaStun = true
end
end
if u and u.team == MINION_ENEMY and b and u.isHero then
if self.CCType2[b.Type] then
self.AniviaStun2[u.networkID] = b.Count
end
end
if u and u.isMe and b and u.isHero then
if b.Name == "GlacialStorm" then
self.R2Casted = true
end
end
end
function Anivia:RemoveBuff(u,b)
if u and u.team == MINION_ENEMY and b and u.isHero then
if self.CCType[b.Type] then
self.CC = false
end
end
if u and u.team == MINION_ENEMY and b and u.isHero then
if self.CCType2[b.Type] then
self.AniviaStun = false
end
end
if u and u.team == MINION_ENEMY and b and u.isHero then
if self.CCType2[b.Type] then
self.AniviaStun2[u.networkID] = 0
end
end
if u and u.isMe and b and u.isHero then
if b.Name == "GlacialStorm" then
for _,i in pairs(self.R) do
self.R[_] = nil
end
self.R2Casted = false
end
end
end
function Anivia:ProcSp(u,s)
if u.isMe and u and s then
if s.name == "GlacialStorm" then
if not self.R[s.name] then self.R[s.name] = {} end
self.R[s.name].s = s
self.R[s.name].st = GetGameTimer()
end
end
end
function Anivia:D()
if BM.Dr.UD:Value() then
for _,i in pairs(self.o) do
if i.o and i.o.valid and BM.Dr.DQC:Value() then
DrawCircle(i.o.pos,120+myHero.boundingRadius,BM.Dr.CW:Value(),BM.Dr.DQ:Value()*20,GoS.White)
end
end
if BM.Dr.Q:Value() and SReady[0] then
DrawCircle(myHero.pos,Spell[0].range,BM.Dr.CW:Value(),BM.Dr.DQ:Value()*20,BM.Dr.Cc:Value())
end
if BM.Dr.W:Value() and SReady[1] then
DrawCircle(myHero.pos,Spell[1].range,BM.Dr.CW:Value(),BM.Dr.DQ:Value()*20,BM.Dr.Cc:Value())
end
if BM.Dr.E:Value() and SReady[2] then
DrawCircle(myHero.pos,Spell[2].range,BM.Dr.CW:Value(),BM.Dr.DQ:Value()*20,BM.Dr.Cc:Value())
end
if BM.Dr.R:Value() and SReady[3] then
DrawCircle(myHero.pos,Spell[3].range,BM.Dr.CW:Value(),BM.Dr.DQ:Value()*20,BM.Dr.Cc:Value())
end
end
end
function Anivia:Tick()
for _,i in pairs(self.o) do
self:CleanObj(_,i)
end
for _,i in pairs(self.R) do
if i and i.st and i.st + 3 > GetGameTimer() then
Spell[3].width = Spell[3].width2 + (GetGameTimer() - i.st)* 67
elseif i and i.st and i.st + 3 == GetGameTimer() then
Spell[3].width = Spell[3].width
end
end
if not self.R2Casted then
Spell[3].width = Spell[3].width2
end
if myHero.dead then return end
target = ts:GetTarget()
GetReady()
self:KS()
self:AutoQ()
self:AutoE()
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 Anivia:Combo(u)
if u then
if BM.C.Q:Value() and SReady[0] and ValidTarget(u, Spell[0].range) then
if not self.Q2Casted then
CastGenericSkillShot(myHero,u,Spell[0],0,BM.p)
end
for _,i in pairs(self.o) do
if self.Q2Casted and EnemyHeroesAround(i.o.pos,120+myHero.boundingRadius) > 0 then
CastSpell(0)
end
end
end
if BM.C.E:Value() and SReady[2] and ValidTarget(u, Spell[2].range) and self.AniviaStun then
CastTargetSpell(u,2)
end
if not self.R2Casted and BM.C.R.E:Value() and SReady[3] and ValidTarget(u, 1000) and GetPercentMP(myHero) >= BM.C.R.MM:Value() and GetPercentHP(myHero) <= BM.C.R.MHP:Value() and GetPercentHP(u) <= BM.C.R.EHP:Value() and EnemyHeroesAround(myHero.pos,1000) >= BM.C.R.EAR:Value() and AllyHeroesAround(myHero.pos,1000) >= BM.C.R.AAR:Value() then
CastSkillShot(3,u.pos)
end
for _,i in pairs(self.R) do
if self.R2Casted and i.p and BM.C.R.E:Value() and SReady[3] or EnemyHeroesAround(i.s.endPos,Spell[3].width) == 0 then
CastSpell(3)
end
end
end
end
function Anivia:Harass(u)
if u then
if BM.H.Q:Value() and SReady[0] and ValidTarget(u, Spell[0].range) then
if not self.Q2Casted then
CastGenericSkillShot(myHero,u,Spell[0],0,BM.p)
end
for _,i in pairs(self.o) do
if self.Q2Casted and EnemyHeroesAround(i.o.pos,120+myHero.boundingRadius) > 0 then
CastSpell(0)
end
end
end
if BM.H.E:Value() and SReady[2] and ValidTarget(u, Spell[2].range) and self.AniviaStun then
CastTargetSpell(u,2)
end
if not self.R2Casted and BM.H.R.E:Value() and SReady[3] and ValidTarget(u, 1000) and GetPercentMP(myHero) >= BM.H.R.MM:Value() and GetPercentHP(myHero) <= BM.H.R.MHP:Value() and GetPercentHP(u) <= BM.H.R.EHP:Value() and EnemyHeroesAround(myHero.pos,1000) >= BM.H.R.EAR:Value() and AllyHeroesAround(myHero.pos,1000) >= BM.H.R.AAR:Value() then
CastSkillShot(3,u.pos)
end
for _,i in pairs(self.R) do
if self.R2Casted and i.p and BM.H.R.E:Value() and SReady[3] or EnemyHeroesAround(i.s.endPos,Spell[3].width) == 0 then
CastSpell(3)
end
end
end
end
function Anivia:LaneClear()
for k,unit in pairs(SLM) do
if unit.team == MINION_ENEMY then
if BM.LC.Q:Value() and SReady[0] and ValidTarget(unit, Spell[0].range) then
if not self.Q2Casted then
CastGenericSkillShot(myHero,unit,Spell[0],0,BM.p)
end
for _,i in pairs(self.o) do
if self.Q2Casted and EnemyMinionsAround(i.o.pos,120+myHero.boundingRadius) > 0 then
CastSpell(0)
end
end
end
if BM.LC.E:Value() and SReady[2] and ValidTarget(unit, Spell[2].range) and self.AniviaStun then
CastTargetSpell(unit,2)
end
if not self.R2Casted and BM.LC.R:Value() and SReady[3] and ValidTarget(unit, 1000) then
CastSkillShot(3,unit.pos)
end
for _,i in pairs(self.R) do
if self.R2Casted and i.p and BM.LC.R:Value() and SReady[3] or EnemyMinionsAround(i.s.endPos,Spell[3].width) == 0 then
CastSpell(3)
end
end
end
end
end
function Anivia:JungleClear()
for k,unit in pairs(SLM) do
if unit.team == MINION_JUNGLE then
if BM.JC.Q:Value() and SReady[0] and ValidTarget(unit, Spell[0].range) then
if not self.Q2Casted then
CastGenericSkillShot(myHero,unit,Spell[0],0,BM.p)
end
for _,i in pairs(self.o) do
if self.Q2Casted and EnemyMinionsAround(i.o.pos,120+myHero.boundingRadius) > 0 then
CastSpell(0)
end
end
end
if BM.JC.E:Value() and SReady[2] and ValidTarget(unit, Spell[2].range) and self.AniviaStun then
CastTargetSpell(unit,2)
end
if not self.R2Casted and BM.JC.R:Value() and SReady[3] and ValidTarget(unit, 1000) then
CastSkillShot(3,unit.pos)
end
for _,i in pairs(self.R) do
if self.R2Casted and i.p and BM.JC.R:Value() and SReady[3] or JungleMinionsAround(i.s.endPos,Spell[3].width) == 0 then
CastSpell(3)
end
end
end
end
end
function Anivia:KS()
for k,unit in pairs(GetEnemyHeroes()) do
if BM.KS.Q:Value() and SReady[0] and ValidTarget(unit, Spell[0].range) and GetAPHP(unit) < Dmg[0](unit) then
if not self.Q2Casted then
CastGenericSkillShot(myHero,unit,Spell[0],0,BM.p)
end
for _,i in pairs(self.o) do
if self.Q2Casted and EnemyHeroesAround(i.o.pos,120+myHero.boundingRadius) > 0 then
CastSpell(0)
end
end
end
if BM.KS.E:Value() and SReady[2] and ValidTarget(unit, Spell[2].range) and GetAPHP(unit) < Dmg[2](unit) then
CastTargetSpell(unit,2)
end
if not self.R2Casted and GetAPHP(unit) < Dmg[3](unit) and BM.KS.E:Value() and SReady[3] and ValidTarget(u, 1000) then
CastSkillShot(3,unit.pos)
end
for _,i in pairs(self.R) do
if self.R2Casted and i.p and BM.C.R.E:Value() and SReady[3] or EnemyHeroesAround(i.s.endPos,Spell[3].width) == 0 then
CastSpell(3)
end
end
end
end
function Anivia:AutoQ()
for m,unit in pairs(GetEnemyHeroes()) do
if unit and BM.AQ:Value() and SReady[0] and ValidTarget(unit,Spell[0].range) and (self.CC or self.AniviaStun) then
if not self.Q2Casted then
CastGenericSkillShot(myHero,unit,Spell[0],0,BM.p)
end
for _,i in pairs(self.o) do
if self.Q2Casted and EnemyHeroesAround(i.o.pos,120+myHero.boundingRadius) > 0 then
CastSpell(0)
end
end
end
end
end
function Anivia:AutoE()
for m,unit in pairs(GetEnemyHeroes()) do
if unit and BM.AE:Value() and SReady[2] and ValidTarget(unit,Spell[2].range) and self.AniviaStun then
CastTargetSpell(unit,2)
end
end
end
class 'Syndra'
function Syndra:__init()
self.CCType = {
[5] = "Stun",
[8] = "Taunt",
[11] = "Snare",
[21] = "Fear",
[22] = "Charm",
[24] = "Suppression",
}
Spell = {
[-1] = {delay=0,range=950,width=50,speed=2500},
[0] = {delay=0.6,range=800,width=150,speed=math.huge,type="circular",col=false},
[1] = {delay=0.25,range=925,width=210,speed=1450,type="circular",col=false},
[2] = {delay=0,range=650,width=100,speed=2000,type="line",col=false},
[3] = { range = 750},
}
Dmg = {
[0] = function(unit) return 5+45*GetCastLevel(myHero,0)+.75*myHero.ap end,
[1] = function(unit) return 40+40*GetCastLevel(myHero,1)+.7*myHero.ap end,
[2] = function(unit) return 25+45*GetCastLevel(myHero,2)+.4*myHero.ap end,
[3] = function(unit) return (45+45*GetCastLevel(myHero,3)+.2*myHero.ap)*(self.count+3 or 3) end,
}
self.EpicJgl = {["SRU_Baron"]="Baron", ["SRU_Dragon"]="Dragon", ["SRU_RiftHerald"]="Herald", ["TT_Spiderboss"]="Vilemaw"}
self.BigJgl = {["SRU_Red"]="Red Buff", ["SRU_Blue"]="Blue Buff", ["SRU_Krug"]="Krugs", ["SRU_Murkwolf"]="Wolves", ["SRU_Razorbeak"]="Razor", ["SRU_Gromp"]="Gromp", ["Sru_Crab"]="Scuttles"}
BM:SubMenu("C", "Combo")
BM.C:DropDown("CM", "Combo Mode", 1, {"Q-E-W", "W-Q-E"})
BM.C:Boolean("Q", "Use Q", true)
BM.C:Boolean("W", "Use W", true)
BM.C:Boolean("E", "Use E", true)
BM:SubMenu("H", "Harass")
BM.H:Boolean("Q", "Use Q", true)
BM.H:Boolean("W", "Use W", true)
BM.H:Boolean("E", "Use E", true)
BM:SubMenu("LC", "LaneClear")
BM.LC:Boolean("Q", "Use Q", true)
BM.LC:Boolean("W", "Use W", false)
BM.LC:Boolean("E", "Use E", false)
BM:SubMenu("JC", "JungleClear")
BM.JC:Boolean("Q", "Use Q", true)
BM.JC:Boolean("W", "Use W", true)
BM.JC:Boolean("E", "Use E", true)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AP",BM.TS,false)
BM:SubMenu("p", "Prediction")
BM:SubMenu("KS", "Killsteal")
BM.KS:Boolean("Q", "Use Q", true)
BM.KS:Boolean("W", "Use W", true)
BM.KS:Boolean("E", "Use E", true)
BM.KS:Boolean("R", "Use R", true)
BM:SubMenu("Es", "Escape")
BM.Es:Boolean("E", "Enable", true)
BM.Es:Key("K", "Key", string.byte("G"))
BM.Es:Boolean("Q", "Use Q", true)
BM.Es:Boolean("W", "Use W", true)
BM.Es:Boolean("E", "Use E", true)
BM:Menu("JS","JungleSteal")
BM.JS:Boolean("Q", "Use Q", true)
BM.JS:Boolean("W", "Use W", true)
BM.JS:Boolean("E", "Use E", true)
DelayAction(function()
BM.JS:Menu("S", "Enable for : ")
for _,i in pairs(self.EpicJgl) do
BM.JS.S:Boolean(_,i,true)
end
for _,i in pairs(self.BigJgl) do
BM.JS.S:Boolean(_,i,false)
end
end,.001)
BM:Boolean("DS", "Draw Spheres", true)
BM:Boolean("AQ", "Auto Q on immobile", true)
BM:Boolean("AW", "Auto W on immobile", true)
Callback.Add("Draw", function() self:Draw() end)
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("UpdateBuff", function(u,b) self:UpdateBuff(u,b) end)
Callback.Add("RemoveBuff", function(u,b) self:RemoveBuff(u,b) end)
Callback.Add("CreateObj", function(o) self:CreateObj(o) end)
Callback.Add("DeleteObj", function(o) self:DeleteObj(o) 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)
self.CC = false
self.o = {}
self.count = 0
self.WCast = 0
for i = 0,2 do
PredMenu(BM.p,i)
end
end
function Syndra:AntiChannel(unit,range)
if BM.AC.E:Value() and range < Spell[2].range then
CastSkillShot(2,unit.pos)
end
end
function Syndra:AntiGapCloser(unit,range)
if BM.AGC.E:Value() and range < Spell[2].range then
CastSkillShot(2,unit.pos)
end
end
function Syndra:CreateObj(o)
if o.name == "Seed" and o.charName == "SyndraSphere" then
self.count = self.count+1
if not self.o[o.networkID] then self.o[o.networkID] = {} end
self.o[o.networkID].o = o
end
end
function Syndra:DeleteObj(o)
if o.name == "Seed" then
self.count = self.count-1
self.o[o.networkID] = nil
end
end
function Syndra:UpdateBuff(u,b)
if u and u.team == MINION_ENEMY and b and u.isHero then
if self.CCType[b.Type] then
self.CC = true
end
end
end
function Syndra:RemoveBuff(u,b)
if u and u.team == MINION_ENEMY and b and u.isHero then
if self.CCType[b.Type] then
self.CC = false
end
end
end
function Syndra:Draw()
if BM.DS:Value() then
for _,i in pairs(self.o) do
if self:QCheck() and i and i.o.alive and i.o and i.o.valid and SReady[2] and i.o.distance < Spell[-1].range+Spell[2].range then
local Vec = Vector(myHero) + Vector((Vector(i.o)-myHero)):normalized()*(Spell[-1].range+Spell[2].range/2)
DrawLine3D(i.o.pos.x,i.o.pos.y,i.o.pos.z,Vec.x,Vec.y,Vec.z,1,GoS.White)
DrawCircle(i.o.pos,i.o.boundingRadius*1.5,1,20,GoS.White)
DrawCircle(Vec,i.o.boundingRadius*1.5,1,20,GoS.White)
end
end
end
end
function Syndra:Tick()
if self.count < 0 then self.count = 0 end
if myHero.dead then return end
target = ts:GetTarget()
GetReady()
self:KS()
self:AutoQ()
self:AutoW()
self:Escape()
self:JungleSteal()
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 Syndra:QCheck()
for _,v in pairs(self.o) do
if v and v.o and v.o.valid and v.o.distance < Spell[1].range then
return true
end
end
return false
end
function Syndra:CastW(u)
for _,i in pairs(SLM) do
if not self:QCheck() then
if SReady[1] and i.distance < Spell[1].range and i.valid and u and ValidTarget(u,Spell[1].range) and u.valid and u.visible and IsTargetable(u) then
if self.WCast+1000 < GetTickCount() and GetCastName(myHero,1) == "SyndraW" then
self.WCast = GetTickCount()
CastSkillShot(1,i.pos)
end
if GetCastName(myHero,1) ~= "SyndraW" then
CastGenericSkillShot(myHero,u,Spell[1],1,BM.p)
end
end
else
for _,v in pairs(self.o) do
if v then
if SReady[1] and v.o.distance < Spell[1].range and v.o.valid and u and ValidTarget(u,Spell[1].range) and u.valid and u.visible and IsTargetable(u) then
if self.WCast+1000 < GetTickCount() and GetCastName(myHero,1) == "SyndraW" then
self.WCast = GetTickCount()
CastSkillShot(1,v.o.pos)
end
if GetCastName(myHero,1) ~= "SyndraW" then
CastGenericSkillShot(myHero,u,Spell[1],1,BM.p)
end
end
end
end
end
end
end
function Syndra:CastE(u)
for _,i in pairs(self.o) do
if self:QCheck() and i and i.o and u.distance < Spell[-1].range+Spell[2].range and u.valid and SReady[2] then
local Vec = Vector(myHero) + Vector((Vector(i.o)-myHero)):normalized()*(Spell[-1].range+Spell[2].range/2)
local vp = VectorPointProjectionOnLineSegment(Vector(myHero.pos),Vector(Vec),Vector(u.pos))
if vp and GetDistance(u,vp) < Spell[-1].width and i.o.distance < Spell[2].range then
CastSkillShot(2,i.o.pos)
end
end
end
if not self:QCheck() and u.valid and u.distance < Spell[2].range and SReady[2] then
CastGenericSkillShot(myHero,u,Spell[2],2,BM.p)
end
end
function Syndra:Combo(u)
if u then
if BM.C.CM:Value() == 1 then
if BM.C.Q:Value() and SReady[0] and ValidTarget(u, Spell[0].range) then
CastGenericSkillShot(myHero,u,Spell[0],0,BM.p)
end
if BM.C.E:Value() and SReady[2] and ValidTarget(u, Spell[2].range) then
self:CastE(u)
end
if BM.C.W:Value() and SReady[1] and ValidTarget(u, Spell[1].range) then
self:CastW(u)
end
else
if BM.C.W:Value() and SReady[1] and ValidTarget(u, Spell[1].range) then
self:CastW(u)
end
if BM.C.Q:Value() and SReady[0] and ValidTarget(u, Spell[0].range) then
CastGenericSkillShot(myHero,u,Spell[0],0,BM.p)
end
if BM.C.E:Value() and SReady[2] and ValidTarget(u, Spell[2].range) then
self:CastE(u)
end
end
end
end
function Syndra:Harass(u)
if u then
if BM.H.Q:Value() and SReady[0] and ValidTarget(u, Spell[0].range) then
CastGenericSkillShot(myHero,u,Spell[0],0,BM.p)
end
if BM.H.W:Value() and SReady[1] and ValidTarget(u, Spell[1].range) then
self:CastW(u)
end
if BM.H.E:Value() and SReady[2] and ValidTarget(u, Spell[2].range) then
self:CastE(u)
end
end
end
function Syndra:LaneClear()
for _,i in pairs(SLM) do
if i.team == MINION_ENEMY then
if BM.LC.Q:Value() and SReady[0] and ValidTarget(i, Spell[0].range) then
CastGenericSkillShot(myHero,i,Spell[0],0,BM.p)
end
if BM.LC.W:Value() and SReady[1] and ValidTarget(i, Spell[1].range) then
self:CastW(i)
end
if BM.LC.E:Value() and SReady[2] and ValidTarget(i, Spell[2].range) then
self:CastE(i)
end
end
end
end
function Syndra:JungleClear()
for _,i in pairs(SLM) do
if i.team == MINION_JUNGLE then
if BM.JC.Q:Value() and SReady[0] and ValidTarget(i, Spell[0].range) then
CastGenericSkillShot(myHero,i,Spell[0],0,BM.p)
end
if BM.JC.W:Value() and SReady[1] and ValidTarget(i, Spell[1].range) then
self:CastW(i)
end
if BM.JC.E:Value() and SReady[2] and ValidTarget(i, Spell[2].range) then
self:CastE(i)
end
end
end
end
function Syndra:JungleSteal()
for _,i in pairs(SLM) do
if i.team == MINION_JUNGLE then
if i.valid and i.distance < 1000 and ((BM.JS.S[i.charName] and BM.JS.S[i.charName]:Value()) or (i.charName:find("Dragon") and BM.JS.S["SRU_Dragon"]:Value())) then
if BM.JS.Q:Value() and SReady[0] and ValidTarget(i, Spell[0].range) and Dmg[0](i) > GetAPHP(i) then
CastGenericSkillShot(myHero,i,Spell[0],0,BM.p)
end
if BM.JS.W:Value() and SReady[1] and ValidTarget(i, Spell[1].range) and Dmg[1](i) > GetAPHP(i) then
self:CastW(i)
end
if BM.JC.E:Value() and SReady[2] and ValidTarget(i, Spell[2].range) and Dmg[2](i) > GetAPHP(i) then
self:CastE(i)
end
end
end
end
end
function Syndra:Escape()
if BM.Es.K:Value() and BM.Es.E:Value() then
MoveToXYZ(GetMousePos())
for _,i in pairs(GetEnemyHeroes()) do
if BM.Es.Q:Value() and SReady[0] and ValidTarget(i, Spell[0].range) then
CastGenericSkillShot(myHero,i,Spell[0],0,BM.p)
end
if BM.Es.W:Value() and SReady[1] and ValidTarget(i, Spell[1].range) then
self:CastW(i)
end
if BM.Es.E:Value() and SReady[2] and ValidTarget(i, Spell[2].range) then
self:CastE(i)
end
end
end
end
function Syndra:AutoQ()
for _,i in pairs(GetEnemyHeroes()) do
if i and BM.AQ:Value() and SReady[0] and ValidTarget(i,Spell[0].range) and self.CC then
CastGenericSkillShot(myHero,i,Spell[0],0,BM.p)
end
end
end
function Syndra:AutoW()
for _,i in pairs(GetEnemyHeroes()) do
if i and BM.AW:Value() and SReady[1] and ValidTarget(i,Spell[1].range) and self.CC then
self:CastW(i)
end
end
end
function Syndra:KS()
for _,i in pairs(GetEnemyHeroes()) do
if BM.KS.Q:Value() and SReady[0] and ValidTarget(i, Spell[0].range) and GetAPHP(i) < Dmg[0](i) then
CastGenericSkillShot(myHero,i,Spell[0],0,BM.p)
end
if BM.KS.W:Value() and SReady[1] and ValidTarget(i, Spell[1].range) and GetAPHP(i) < Dmg[1](i) then
self:CastW(i)
end
if BM.KS.E:Value() and SReady[2] and ValidTarget(i, Spell[2].range) and GetAPHP(i) < Dmg[2](i) then
self:CastE(i)
end
if BM.KS.R:Value() and SReady[3] and ValidTarget(i, Spell[3].range) and GetAPHP(i) < Dmg[3](i) then
CastTargetSpell(i,3)
end
end
end
class 'Draven'
function Draven:__init()
self.EpicJgl = {["SRU_Baron"]="Baron", ["SRU_Dragon"]="Dragon", ["SRU_RiftHerald"]="Herald", ["TT_Spiderboss"]="Vilemaw"}
self.BigJgl = {["SRU_Red"]="Red Buff", ["SRU_Blue"]="Blue Buff", ["SRU_Krug"]="Krugs", ["SRU_Murkwolf"]="Wolves", ["SRU_Razorbeak"]="Razor", ["SRU_Gromp"]="Gromp", ["Sru_Crab"]="Scuttles"}
Spell = {
[0] = { range = myHero.range+myHero.boundingRadius*2},
[1] = { range = 800 },
[2] = { range = 1050,delay = 0.25, radius = 130, speed = 1400},
[3] = { range = 25000,delay = 0.5, radius = 160, speed = 2000},
}
Dmg = {
[0] = function(unit) return CalcDamage(myHero, unit, myHero.totalDamage+myHero.totalDamage*(.35+.1*GetCastLevel(myHero,0)), 0) end,
[2] = function(unit) return CalcDamage(myHero, unit, 25+45*GetCastLevel(myHero,2)+.5*myHero.totalDamage, 0) end,
[3] = function(unit) return CalcDamage(myHero, unit, 75+100*GetCastLevel(myHero,3)+1.1*myHero.totalDamage, 0) 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:Menu("H", "Harass")
BM.H:Boolean("Q", "Use Q", true)
BM.H:Boolean("W", "Use W", true)
BM.H:Boolean("E", "Use E", true)
BM:Menu("LC", "LaneClear")
BM.LC:Boolean("Q", "Use Q", true)
BM.LC:Boolean("W", "Use W", false)
BM.LC:Boolean("E", "Use E", false)
BM:Menu("JC", "JungleClear")
BM.JC:Boolean("Q", "Use Q", true)
BM.JC:Boolean("W", "Use W", true)
BM.JC:Boolean("E", "Use E", false)
BM:Menu("JS","JungleSteal")
BM.JS:Boolean("E", "Use E", true)
BM.JS:Boolean("R", "Use R", false)
DelayAction(function()
BM.JS:Menu("S", "Enable for : ")
for _,i in pairs(self.EpicJgl) do
BM.JS.S:Boolean(_,i,true)
end
for _,i in pairs(self.BigJgl) do
BM.JS.S:Boolean(_,i,false)
end
end,.001)
BM:Menu("KS", "Killsteal")
BM.KS:Boolean("E", "Use E", true)
BM.KS:Boolean("R", "Use R", true)
BM.KS:Slider("MaR", "Max Range To KS with R", 10000, 0, 25000, 100)
BM.KS:Slider("MiR", "Min Range To KS with R", 2500, 0, 25000, 100)
BM:Menu("DS", "Catch Settings")
BM.DS:Boolean("E", "Enable Catch", true)
BM.DS:Slider("CR", "Catch Radius", 500,100,1000,5)
BM.DS:Boolean("UW", "Use W if not catchable", true)
BM.DS:Boolean("ED", "Enable Draw", true)
BM.DS:Boolean("DCR", "Draw Catch Radius", true)
BM:Boolean("AW", "Use W on Slow", true)
BM:Menu("TS", "TargetSelector")
ts = SLTS("AD",BM.TS,false)
BM:Menu("p", "Prediction")
Callback.Add("CreateObj", function(o) self:CO(o) end)
Callback.Add("DeleteObj", function(o) self:DO(o) end)
Callback.Add("Draw", function() self:D() end)
Callback.Add("Tick", function() self:T() end)
Callback.Add("UpdateBuff", function(u,b) self:UB(u,b) end)
Callback.Add("RemoveBuff", function(u,b) self:RB(u,b) end)
self.o = {}
self.CC = false
self.pos = nil
self.R = false
_G.DravenLoaded = true
for i = 2,3 do
PredMenu(BM.p, i)
end
end
function Draven:CO(o)
if o and o.name:lower():find("reticle_self") then
if not self.o[o.name] then self.o[o.name] = {} end
self.o[o.name].o = o
end
end
function Draven:DO(o)
if o and o.name:lower():find("reticle_self") then
self.o[o.name] = nil
end
end
function Draven:UB(u,b)
if u and u.isMe and b then
if b.Type == 10 then
self.CC = true
end
if b.Name == "DravenRDoublecast" then
self.R = true
end
end
end
function Draven:RB(u,b)
if u and u.isMe and b then
if b.Type == 10 then
self.CC = false
end
if b.Name == "DravenRDoublecast" then
self.R = false
end
end
end
function Draven:D()
for _, i in pairs(self.o) do
if BM.DS.ED:Value() then
if i.o then
DrawCircle(i.o.pos,75,1.5,20,ARGB(255,0,180,100))
end
end
end
if BM.DS.DCR:Value() and BM.DS.ED:Value() then
DrawCircle(GetMousePos(),BM.DS.CR:Value(),1.5,20,ARGB(255,0,180,100))
end
end
function Draven:T()
if myHero.dead then return end
target = ts:GetTarget()
GetReady()
self:KS()
self:Catch()
self:AutoW()
self:JungleSteal()
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 Draven:Combo(u)
if u then
if BM.C.Q:Value() and SReady[0] and ValidTarget(u, Spell[0].range) then
CastSpell(0)
end
if BM.C.W:Value() and SReady[1] and ValidTarget(u, Spell[0].range) then
CastSpell(1)
end
if BM.C.E:Value() and SReady[2] and ValidTarget(u, Spell[2].range) then
CastGenericSkillShot(myHero,u,Spell[2],2,BM.p)
end
end
end
function Draven:Harass(u)
if u then
if BM.H.Q:Value() and SReady[0] and ValidTarget(u, Spell[0].range) then
CastSpell(0)
end
if BM.H.W:Value() and SReady[1] and ValidTarget(u, Spell[0].range) then
CastSpell(1)
end
if BM.H.E:Value() and SReady[2] and ValidTarget(u, Spell[2].range) then
CastGenericSkillShot(myHero,u,Spell[2],2,BM.p)
end
end
end
function Draven:LaneClear()
for _,i in pairs(SLM) do
if i.team == MINION_ENEMY then
if BM.LC.Q:Value() and SReady[0] and ValidTarget(i, Spell[0].range) then
CastSpell(0)
end
if BM.LC.W:Value() and SReady[1] and ValidTarget(i, Spell[0].range) then
CastSpell(1)
end
if BM.LC.E:Value() and SReady[2] and ValidTarget(i, Spell[2].range) then
CastGenericSkillShot(myHero,i,Spell[2],2,BM.p)
end
end
end
end
function Draven:JungleClear()
for _,i in pairs(SLM) do
if i.team == MINION_JUNGLE then
if BM.JC.Q:Value() and SReady[0] and ValidTarget(i, Spell[0].range) then
CastSpell(0)
end
if BM.JC.W:Value() and SReady[1] and ValidTarget(i, Spell[0].range) then
CastSpell(1)
end
if BM.JC.E:Value() and SReady[2] and ValidTarget(i, Spell[2].range) then
CastGenericSkillShot(myHero,i,Spell[2],2,BM.p)
end
end
end
end
function Draven:KS()
for _,i in pairs(GetEnemyHeroes()) do
if BM.KS.E:Value() and SReady[2] and ValidTarget(i, Spell[2].range) and GetADHP(i) < Dmg[2](i) then
CastGenericSkillShot(myHero,i,Spell[2],2,BM.p)
end
if BM.KS.R:Value() and SReady[3] and ValidTarget(i, Spell[3].range) and GetADHP(i) < Dmg[3](i) and i.distance > BM.KS.MiR:Value() and i.distance < BM.KS.MaR:Value() and not self.R then
CastGenericSkillShot(myHero,i,Spell[3],3,BM.p)
end
end
end
function Draven:JungleSteal()
for _,i in pairs(SLM) do
if i.team == MINION_JUNGLE then
if i.valid and ((BM.JS.S[i.charName] and BM.JS.S[i.charName]:Value()) or (i.charName:find("Dragon") and BM.JS.S["SRU_Dragon"]:Value())) then
if BM.JS.E:Value() and SReady[2] and ValidTarget(i, Spell[2].range) and GetADHP(i) < Dmg[2](i) then
CastGenericSkillShot(myHero,i,Spell[2],2,BM.p)
end
if BM.JS.R:Value() and SReady[3] and ValidTarget(i, Spell[3].range) and GetADHP(i) < Dmg[3](i) and not self.R then
CastGenericSkillShot(myHero,i,Spell[3],3,BM.p)
end
end
end
end
end
function Draven:AutoW()
if SReady[1] and self.CC and BM.AW:Value() then
CastSpell(1)
end
for _,i in pairs(self.o) do
if SReady[1] and BM.DS.UW:Value() and i.o and self.pos and BM.DS.E:Value() and GetDistance(i.o.pos,GetMousePos()) < BM.DS.CR:Value() and i.o.distance/2000+GetWindUp(myHero)*1000 < i.o.distance/myHero.ms then
CastSpell(1)
end
end
end
function Draven:Catch()
for _, i in pairs(self.o) do
if i.o and BM.DS.E:Value() then
self.pos = Vector(i.o.pos) + Vector(Vector(myHero.pos)-i.o.pos):normalized():perpendicular()*75
if GetDistance(i.o.pos,GetMousePos()) < BM.DS.CR:Value() and self.pos then
MoveToXYZ(self.pos)
end
end
end
end
function Draven:CleanObj()
for _, i in pairs(self.o) do
if i.o and not i.o.valid then
self.o[_] = nil
end
end
end
---------------------------------------------------------------------------------------------
-------------------------------------UTILITY-------------------------------------------------
---------------------------------------------------------------------------------------------
--DamageDraw (Paint.lua)
class 'DmgDraw'
function DmgDraw:__init()
self.dmgSpell = {}
self.spellName= {"Q","W","E","R"}
self.dC = { {200,255,255,0}, {200,0,255,0}, {200,255,0,0}, {200,0,0,255} }
self.aa = {}
self.dCheck = {}
self.dX = {}
self.Own = nil
BM:SubMenu("D","Damage Draw")
BM.D:Boolean("dAA","Count AA to kill", true)
BM.D:Boolean("dAAc","Consider Crit", true)
BM.D:Slider("dR","Draw Range", 1500, 500, 3000, 100)
if SLSChamps[ChampName] then
self.Own = true
for i=1,4,1 do
if Dmg[i-1] then
BM.D:Boolean(self.spellName[i], "Draw "..self.spellName[i], true)
BM.D:ColorPick(self.spellName[i].."c", "Color for "..self.spellName[i], self.dC[i])
end
end
else
self.Own = false
for i=1,4,1 do
if getdmg(self.spellName[i],myHero,myHero,1,3)~=0 then
BM.D:Boolean(self.spellName[i], "Draw "..self.spellName[i], true)
BM.D:ColorPick(self.spellName[i].."c", "Color for "..self.spellName[i], self.dC[i])
end
end
end
DelayAction( function()
for _,champ in pairs(GetEnemyHeroes()) do
self.dmgSpell[GetObjectName(champ)]={0, 0, 0, 0}
self.dX[GetObjectName(champ)] = {{0,0}, {0,0}, {0,0}, {0,0}}
end
Callback.Add("Tick", function() self:Set() end)
Callback.Add("Draw", function() self:Draw() end)
end, .001)
end
function DmgDraw:Set()
for _,champ in pairs(GetEnemyHeroes()) do
self.dCheck[GetObjectName(champ)]={false,false,false,false}
local last = GetPercentHP(champ)*1.04
local lock = false
GetReady()
for i=1,4,1 do
if BM.D[self.spellName[i]] and BM.D[self.spellName[i]]:Value() and (SReady[i-1] or CanUseSpell(myHero,i-1) == 8) and GetDistance(GetOrigin(myHero),GetOrigin(champ)) < BM.D.dR:Value() then
if self.Own then
self.dmgSpell[GetObjectName(champ)][i] = Dmg[i-1](champ)
else
self.dmgSpell[GetObjectName(champ)][i] = getdmg(self.spellName[i],champ,myHero,GetCastLevel(myHero,i-1))
end
self.dCheck[GetObjectName(champ)][i]=true
else
self.dmgSpell[GetObjectName(champ)][i] = 0
self.dCheck[GetObjectName(champ)][i]=false
end
self.dX[GetObjectName(champ)][i][2] = self.dmgSpell[GetObjectName(champ)][i]/(GetMaxHP(champ)+GetDmgShield(champ))*104
self.dX[GetObjectName(champ)][i][1] = last - self.dX[GetObjectName(champ)][i][2]
last = last - self.dX[GetObjectName(champ)][i][2]
if lock then
self.dX[GetObjectName(champ)][i][1] = 0
self.dX[GetObjectName(champ)][i][2] = 0
end
if self.dX[GetObjectName(champ)][i][1]<=0 and not lock then
self.dX[GetObjectName(champ)][i][1] = 0
self.dX[GetObjectName(champ)][i][2] = last + self.dX[GetObjectName(champ)][i][2]
lock = true
end
end
if BM.D.dAA:Value() and BM.D.dAAc:Value() then
self.aa[GetObjectName(champ)] = math.ceil(GetCurrentHP(champ)/(CalcDamage(myHero, champ, GetBaseDamage(myHero)+GetBonusDmg(myHero),0)*(GetCritChance(myHero)+1)))
elseif BM.D.dAA:Value() and not BM.D.dAAc:Value() then
self.aa[GetObjectName(champ)] = math.ceil(GetCurrentHP(champ)/(CalcDamage(myHero, champ, GetBaseDamage(myHero)+GetBonusDmg(myHero),0)))
end
end
end
function DmgDraw:Draw()
for _,champ in pairs(GetEnemyHeroes()) do
local bar = GetHPBarPos(champ)
if bar.x ~= 0 and bar.y ~= 0 then
for i=4,1,-1 do
if self.dCheck[GetObjectName(champ)] and self.dCheck[GetObjectName(champ)][i] then
FillRect(bar.x+self.dX[GetObjectName(champ)][i][1],bar.y,self.dX[GetObjectName(champ)][i][2],9,BM.D[self.spellName[i].."c"]:Value())
FillRect(bar.x+self.dX[GetObjectName(champ)][i][1],bar.y-1,2,11,GoS.Black)
end
end
if BM.D.dAA:Value() and bar.x ~= 0 and bar.y ~= 0 and self.aa[GetObjectName(champ)] then
DrawText(self.aa[GetObjectName(champ)].." AA", 15, bar.x + 75, bar.y + 25, GoS.White)
end
end
end
end
class 'Drawings'
function Drawings:__init()
if not SLSChamps[ChampName] then return end
self.SNames={[0]="Q",[1]="W",[2]="E",[3]="R"}
BM:SubMenu("Dr", "Drawings")
BM.Dr:Boolean("UD", "Use Drawings", true)
BM.Dr:ColorPick("CP", "Circle color", {255,102,102,102})
BM.Dr:DropDown("DQM", "Draw Quality", 3, {"High", "Medium", "Low"})
BM.Dr:Slider("DWi", "Circle width", 1, 1, 5, 1)
for i=0,3 do
if Spell and Spell[i] and Spell[i].range and Spell[i].range > 200 then
BM.Dr:Boolean("D"..self.SNames[i], "Draw "..self.SNames[i], true)
end
end
Callback.Add("Draw", function() self:Draw() end)
end
function Drawings:Draw()
for l=0,3 do
if Spell and Spell[l] and Spell[l].range and Spell[l].range > 200 then
if BM.Dr.UD:Value() and SReady[l] and BM.Dr["D"..self.SNames[l]]:Value() then
DrawCircle(myHero.pos, Spell[l].range, BM.Dr.DWi:Value(), BM.Dr.DQM:Value()*20, BM.Dr.CP:Value())
end
end
end
end
class 'HitMe'
function HitMe:__init()
self.str = {[-4] = "R2", [-3] = "P", [-2] = "Q3", [-1] = "Q2", [_Q] = "Q", [_W] = "W", [_E] = "E", [_R] = "R"}
BM:SubMenu("SB","Spellblock")
self.s = {
["AatroxQ"]={charName="Aatrox",slot=0,type="Circle",delay=0.6,range=650,radius=250,speed=2000,addHitbox=true,danger=3,dangerous=true,proj="nil",killTime=0.225,displayname="Dark Flight",mcollision=false},
["AatroxE"]={charName="Aatrox",slot=2,type="Line",delay=0.25,range=1075,radius=35,speed=1250,addHitbox=true,danger=3,dangerous=false,proj="AatroxEConeMissile",killTime=0,displayname="Blade of Torment",mcollision=false},
["AhriOrbofDeception"]={charName="Ahri",slot=0,type="Line",delay=0.25,range=1000,radius=100,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="AhriOrbMissile",killTime=0,displayname="Orb of Deception",mcollision=false},
["AhriOrbReturn"]={charName="Ahri",slot=0,type="Return",delay=0,range=1000,radius=100,speed=915,addHitbox=true,danger=2,dangerous=false,proj="AhriOrbReturn",killTime=0,displayname="Orb of Deception2",mcollision=false},
["AhriSeduce"]={charName="Ahri",slot=2,type="Line",delay=0.25,range=1000,radius=60,speed=1600,addHitbox=true,danger=3,dangerous=true,proj="AhriSeduceMissile",killTime=0,displayname="Charm",mcollision=true},
["Pulverize"]={charName="Alistar",slot=0,type="Circle",delay=0.25,range=1000,radius=200,speed=math.huge,addHitbox=true,danger=5,dangerous=true,proj="nil",killTime=0.25,displayname="Pulverize",mcollision=false},
["BandageToss"]={charName="Amumu",slot=0,type="Line",delay=0.25,range=1000,radius=90,speed=2000,addHitbox=true,danger=3,dangerous=true,proj="SadMummyBandageToss",killTime=0,displayname="Bandage Toss",mcollision=true},
["CurseoftheSadMummy"]={charName="Amumu",slot=3,type="Circle",delay=0.25,range=0,radius=550,speed=math.huge,addHitbox=false,danger=5,dangerous=true,proj="nil",killTime=1.25,displayname="Curse of the Sad Mummy",mcollision=false},
["FlashFrost"]={charName="Anivia",slot=0,type="Line",delay=0.25,range=1200,radius=110,speed=850,addHitbox=true,danger=3,dangerous=true,proj="FlashFrostSpell",killTime=0,displayname="Flash Frost",mcollision=false},
["Incinerate"]={charName="Annie",slot=1,type="Cone",delay=0.25,range=825,radius=80,speed=math.huge,angle=50,addHitbox=false,danger=2,dangerous=false,proj="nil",killTime=0,displayname="",mcollision=false},
["InfernalGuardian"]={charName="Annie",slot=3,type="Circle",delay=0.25,range=600,radius=251,speed=math.huge,addHitbox=true,danger=5,dangerous=true,proj="nil",killTime=0.3,displayname="",mcollision=false},
-- ["Volley"]={charName="Ashe",slot=1,type="Line",delay=0.25,range=1200,radius=60,speed=1500,addHitbox=true,danger=2,dangerous=false,proj="VolleyAttack",killTime=0,displayname="",mcollision=false},
["EnchantedCrystalArrow"]={charName="Ashe",slot=3,type="Line",delay=0.2,range=20000,radius=130,speed=1600,addHitbox=true,danger=5,dangerous=true,proj="EnchantedCrystalArrow",killTime=0,displayname="Enchanted Arrow",mcollision=false},
["AurelionSolQ"]={charName="AurelionSol",slot=0,type="Line",delay=0.25,range=1500,radius=180,speed=850,addHitbox=true,danger=2,dangerous=false,proj="AurelionSolQMissile",killTime=0,displayname="AurelionSolQ",mcollision=false},
["AurelionSolR"]={charName="AurelionSol",slot=3,type="Line",delay=0.3,range=1420,radius=120,speed=4500,addHitbox=true,danger=3,dangerous=true,proj="AurelionSolRBeamMissile",killTime=0,displayname="AurelionSolR",mcollision=false},
["BardQ"]={charName="Bard",slot=0,type="Line",delay=0.25,range=850,radius=60,speed=1600,addHitbox=true,danger=3,dangerous=true,proj="BardQMissile",killTime=0,displayname="BardQ",mcollision=true},
["BardR"]={charName="Bard",slot=3,type="Circle",delay=0.5,range=3400,radius=350,speed=2100,addHitbox=true,danger=2,dangerous=false,proj="BardR",killTime=1,displayname="BardR",mcollision=false},
["RocketGrab"]={charName="Blitzcrank",slot=0,type="Line",delay=0.2,range=1050,radius=70,speed=1800,addHitbox=true,danger=4,dangerous=true,proj="RocketGrabMissile",killTime=0,displayname="Rocket Grab",mcollision=true},
["StaticField"]={charName="Blitzcrank",slot=3,type="Circle",delay=0.25,range=0,radius=600,speed=math.huge,addHitbox=false,danger=2,dangerous=false,proj="nil",killTime=0.2,displayname="Static Field",mcollision=false},
["BrandQ"]={charName="Brand",slot=0,type="Line",delay=0.25,range=1050,radius=60,speed=1600,addHitbox=true,danger=3,dangerous=true,proj="BrandQMissile",killTime=0,displayname="Sear",mcollision=true},
["BrandW"]={charName="Brand",slot=1,type="Circle",delay=0.85,range=900,radius=240,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0.275,displayname="Pillar of Flame"}, -- doesnt work
["BraumQ"]={charName="Braum",slot=0,type="Line",delay=0.25,range=1000,radius=60,speed=1700,addHitbox=true,danger=3,dangerous=true,proj="BraumQMissile",killTime=0,displayname="Winter's Bite",mcollision=true},
["BraumRWrapper"]={charName="Braum",slot=3,type="Line",delay=0.5,range=1250,radius=115,speed=1400,addHitbox=true,danger=4,dangerous=true,proj="braumrmissile",killTime=0,displayname="Glacial Fissure",mcollision=false},
["CaitlynPiltoverPeacemaker"]={charName="Caitlyn",slot=0,type="Line",delay=0.6,range=1300,radius=90,speed=1800,addHitbox=true,danger=2,dangerous=false,proj="CaitlynPiltoverPeacemaker",killTime=0,displayname="Piltover Peacemaker",mcollision=false},
["CaitlynEntrapment"]={charName="Caitlyn",slot=2,type="Line",delay=0.4,range=1000,radius=70,speed=1600,addHitbox=true,danger=1,dangerous=false,proj="CaitlynEntrapmentMissile",killTime=0,displayname="90 Caliber Net",mcollision=true},
["CassiopeiaQ"]={charName="Cassiopeia",slot=0,type="Circle",delay=0.75,range=850,radius=150,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="CassiopeiaNoxiousBlast",killTime=0.2,displayname="Noxious Blast",mcollision=false},
["CassiopeiaR"]={charName="Cassiopeia",slot=3,type="Cone",delay=0.6,range=825,radius=80,speed=math.huge,angle=80,addHitbox=false,danger=5,dangerous=true,proj="CassiopeiaPetrifyingGaze",killTime=0,displayname="Petrifying Gaze",mcollision=false},
["Rupture"]={charName="Chogath",slot=0,type="Circle",delay=.25,range=950,radius=250,speed=math.huge,addHitbox=true,danger=3,dangerous=false,proj="Rupture",killTime=1.75,displayname="Rupture",mcollision=false},
["PhosphorusBomb"]={charName="Corki",slot=0,type="Circle",delay=0.3,range=825,radius=250,speed=1000,addHitbox=true,danger=2,dangerous=false,proj="PhosphorusBombMissile",killTime=0.35,displayname="Phosphorus Bomb",mcollision=false},
["CarpetBombMega"]={charName="Corki",slot=2,type="Line",delay=0.2,range=1900,radius=140,speed=1600,addHitbox=true,danger=2,dangerous=false,proj="CarpetBombMega",killTime=0,displayname="Special Delivery",mcollision=false},
["MissileBarrage"]={charName="Corki",slot=3,type="Line",delay=0.2,range=1300,radius=40,speed=2000,addHitbox=true,danger=2,dangerous=false,proj="MissileBarrageMissile",killTime=0,displayname="Missile Barrage",mcollision=true},
["MissileBarrage2"]={charName="Corki",slot=3,type="Line",delay=0.2,range=1500,radius=40,speed=2000,addHitbox=true,danger=2,dangerous=false,proj="MissileBarrageMissile2",killTime=0,displayname="Missile Barrage big",mcollision=true},
["DariusCleave"]={charName="Darius",slot=0,type="Circle",delay=0.75,range=0,radius=425 - 50,speed=math.huge,addHitbox=true,danger=3,dangerous=false,proj="DariusCleave",killTime=0,displayname="Cleave",mcollision=false},
["DariusAxeGrabCone"]={charName="Darius",slot=2,type="Cone",delay=0.25,range=550,radius=80,speed=math.huge,angle=30,addHitbox=false,danger=3,dangerous=true,proj="DariusAxeGrabCone",killTime=0,displayname="Apprehend",mcollision=false},
["DianaArc"]={charName="Diana",slot=0,type="Circle",delay=0.25,range=835,radius=195,speed=1400,addHitbox=true,danger=3,dangerous=true,proj="DianaArcArc",killTime=0,displayname="",mcollision=false},
["DianaArcArc"]={charName="Diana",slot=0,type="Arc",delay=0.25,range=835,radius=195,speed=1400,addHitbox=true,danger=3,dangerous=true,proj="DianaArcArc",killTime=0,displayname="",mcollision=false},
["InfectedCleaverMissileCast"]={charName="DrMundo",slot=0,type="Line",delay=0.25,range=1050,radius=60,speed=2000,addHitbox=true,danger=3,dangerous=false,proj="InfectedCleaverMissile",killTime=0,displayname="Infected Cleaver",mcollision=true},
["DravenDoubleShot"]={charName="Draven",slot=2,type="Line",delay=0.25,range=1100,radius=130,speed=1400,addHitbox=true,danger=3,dangerous=true,proj="DravenDoubleShotMissile",killTime=0,displayname="Stand Aside",mcollision=false},
["DravenRCast"]={charName="Draven",slot=3,type="Line",delay=0.5,range=25000,radius=160,speed=2000,addHitbox=true,danger=5,dangerous=true,proj="DravenR",killTime=0,displayname="Whirling Death",mcollision=false},
["EkkoQ"]={charName="Ekko",slot=0,type="Line",delay=0.25,range=925,radius=60,speed=1650,addHitbox=true,danger=4,dangerous=true,proj="ekkoqmis",killTime=0,displayname="Timewinder",mcollision=false},
["EkkoW"]={charName="Ekko",slot=1,type="Circle",delay=3.75,range=1600,radius=375,speed=1650,addHitbox=false,danger=3,dangerous=false,proj="EkkoW",killTime=1.2,displayname="Parallel Convergence",mcollision=false},
["EkkoR"]={charName="Ekko",slot=3,type="Circle",delay=0.25,range=1600,radius=375,speed=1650,addHitbox=true,danger=3,dangerous=false,proj="EkkoR",killTime=0.2,displayname="Chronobreak",mcollision=false},
["EliseHumanE"]={charName="Elise",slot=2,type="Line",delay=0.25,range=925,radius=55,speed=1600,addHitbox=true,danger=4,dangerous=true,proj="EliseHumanE",killTime=0,displayname="Cocoon",mcollision=true},
["EvelynnR"]={charName="Evelynn",slot=3,type="Circle",delay=0.25,range=650,radius=350,speed=math.huge,addHitbox=true,danger=5,dangerous=true,proj="EvelynnR",killTime=0.2,displayname="Agony's Embrace"},
["EzrealMysticShot"]={charName="Ezreal",slot=0,type="Line",delay=0.25,range=1300,radius=50,speed=1975,addHitbox=true,danger=2,dangerous=false,proj="EzrealMysticShotMissile",killTime=0,displayname="Mystic Shot",mcollision=true},
["EzrealEssenceFlux"]={charName="Ezreal",slot=1,type="Line",delay=0.25,range=1000,radius=80,speed=1300,addHitbox=true,danger=2,dangerous=false,proj="EzrealEssenceFluxMissile",killTime=0,displayname="Essence Flux",mcollision=false},
["EzrealTrueshotBarrage"]={charName="Ezreal",slot=3,type="Line",delay=1,range=20000,radius=150,speed=2000,addHitbox=true,danger=3,dangerous=true,proj="EzrealTrueshotBarrage",killTime=0,displayname="Trueshot Barrage",mcollision=false},
["FioraW"]={charName="Fiora",slot=1,type="Line",delay=0.5,range=800,radius=70,speed=3200,addHitbox=true,danger=2,dangerous=false,proj="FioraWMissile",killTime=0,displayname="Riposte",mcollision=false},
["FizzMarinerDoom"]={charName="Fizz",slot=3,type="Line",delay=0.25,range=1150,radius=120,speed=1350,addHitbox=true,danger=5,dangerous=true,proj="FizzMarinerDoomMissile",killTime=0,displayname="Chum the Waters",mcollision=false},
["FizzMarinerDoomMissile"]={charName="Fizz",slot=3,type="Circle",delay=0.25,range=800,radius=300,speed=1350,addHitbox=true,danger=5,dangerous=true,proj="FizzMarinerDoomMissile",killTime=0,displayname="Chum the Waters End",mcollision=false},
["GalioResoluteSmite"]={charName="Galio",slot=0,type="Circle",delay=0.25,range=900,radius=200,speed=1300,addHitbox=true,danger=2,dangerous=false,proj="GalioResoluteSmite",killTime=0.2,displayname="Resolute Smite",mcollision=false},
["GalioRighteousGust"]={charName="Galio",slot=2,type="Line",delay=0.25,range=1100,radius=120,speed=1200,addHitbox=true,danger=2,dangerous=false,proj="GalioRighteousGust",killTime=0,displayname="Righteous Ghost",mcollision=false},
["GalioIdolOfDurand"]={charName="Galio",slot=3,type="Circle",delay=0.25,range=0,radius=550,speed=math.huge,addHitbox=false,danger=5,dangerous=true,proj="nil",killTime=1,displayname="Idol of Durand",mcollision=false},
["GnarQ"]={charName="Gnar",slot=0,type="Line",delay=0.25,range=1200,radius=60,speed=1225,addHitbox=true,danger=2,dangerous=false,proj="gnarqmissile",killTime=0,displayname="Boomerang Throw",mcollision=false},
["GnarQReturn"]={charName="Gnar",slot=0,type="Line",delay=0,range=1200,radius=75,speed=1225,addHitbox=true,danger=2,dangerous=false,proj="GnarQMissileReturn",killTime=0,displayname="Boomerang Throw2",mcollision=false},
["GnarBigQ"]={charName="Gnar",slot=0,type="Line",delay=0.5,range=1150,radius=90,speed=2100,addHitbox=true,danger=2,dangerous=false,proj="GnarBigQMissile",killTime=0,displayname="Boulder Toss",mcollision=true},
["GnarBigW"]={charName="Gnar",slot=1,type="Line",delay=0.6,range=600,radius=80,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="GnarBigW",killTime=0,displayname="Wallop",mcollision=false},
["GnarE"]={charName="Gnar",slot=2,type="Circle",delay=0,range=473,radius=150,speed=903,addHitbox=true,danger=2,dangerous=false,proj="GnarE",killTime=0.2,displayname="GnarE",mcollision=false},
["GnarBigE"]={charName="Gnar",slot=2,type="Circle",delay=0.25,range=475,radius=200,speed=1000,addHitbox=true,danger=2,dangerous=false,proj="GnarBigE",killTime=0.2,displayname="GnarBigE",mcollision=false},
["GnarR"]={charName="Gnar",slot=3,type="Circle",delay=0.25,range=0,radius=500,speed=math.huge,addHitbox=false,danger=5,dangerous=true,proj="nil",killTime=0.3,displayname="GnarUlt",mcollision=false},
["GragasQ"]={charName="Gragas",slot=0,type="Circle",delay=0.25,range=1100,radius=275,speed=1300,addHitbox=true,danger=2,dangerous=false,proj="GragasQMissile",killTime=4.25,displayname="Barrel Roll",mcollision=false,killName="GragasQToggle"},
["GragasE"]={charName="Gragas",slot=2,type="Line",delay=0,range=800,radius=200,speed=800,addHitbox=true,danger=2,dangerous=false,proj="GragasE",killTime=0.5,displayname="Body Slam",mcollision=true},
["GragasR"]={charName="Gragas",slot=3,type="Circle",delay=0.25,range=1050,radius=375,speed=1800,addHitbox=true,danger=5,dangerous=true,proj="GragasRBoom",killTime=0.3,displayname="Explosive Cask",mcollision=false},
["GravesBasicAttack"]={charName="Graves",slot=-2,type="Cone",delay=0.2,range=750,radius=140,speed=math.huge,angle=45,addHitbox=true,danger=1,dangerous=false,proj="GravesBasicAttackSpread",killTime=1,displayname="Auto Attack",mcollision=false},
["GravesQLineMis"]={charName="Graves",slot=0,type="Rectangle",delay=0.2,range=750,radius=140,radius2=300,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="GravesQLineMis",killTime=1,displayname="Buckshot Rectangle",mcollision=false},
["GravesClusterShotSoundMissile"]={charName="Graves",slot=0,type="Line",delay=0.2,range=750,radius=60,speed=2000,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0,displayname="Buckshot",mcollision=false},
["GravesQReturn"]={charName="Graves",slot=0,type="Line",delay=0,range=750,radius=60,speed=1150,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0,displayname="Buckshot return",mcollision=false},
["GravesSmokeGrenade"]={charName="Graves",slot=1,type="Circle",delay=0.25,range=925,radius=275,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="GravesSmokeGrenadeBoom",killTime=4.5,displayname="SmokeScreen",mcollision=false},
["GravesChargeShot"]={charName="Graves",slot=3,type="Line",delay=0.2,range=1000,radius=100,speed=2100,addHitbox=true,danger=5,dangerous=true,proj="GravesChargeShotShot",killTime=0,displayname="CollateralDmg",mcollision=false},
["GravesChargeShotFxMissile"]={charName="Graves",slot=3,type="Cone",delay=0,range=1000,radius=100,speed=2100,angle=60,addHitbox=true,danger=5,dangerous=true,proj="nil",killTime=0,displayname="CollateralDmg end",mcollision=false},
["HecarimUlt"]={charName="Hecarim",slot=3,type="Line",delay=0.2,range=1100,radius=300,speed=1200,addHitbox=true,danger=5,dangerous=true,proj="HecarimUltMissile",killTime=0.55,displayname="HecarimR",mcollision=false},
["HeimerdingerTurretEnergyBlast"]={charName="Heimerdinger",slot=0,type="Line",delay=0.4,range=1000,radius=70,speed=1000,addHitbox=true,danger=2,dangerous=false,proj="HeimerdingerTurretEnergyBlast",killTime=0,displayname="Turret",mcollision=false},
["HeimerdingerW"]={charName="Heimerdinger",slot=1,type="Cone",delay=0.25,range=800,radius=70,speed=1800,angle=10,addHitbox=true,danger=2,dangerous=false,proj="HeimerdingerWAttack2",killTime=0,displayname="HeimerUltW",mcollision=true},
["HeimerdingerE"]={charName="Heimerdinger",slot=2,type="Circle",delay=0.25,range=925,radius=100,speed=1200,addHitbox=true,danger=2,dangerous=false,proj="heimerdingerespell",killTime=0.3,displayname="HeimerdingerE",mcollision=false},
["IllaoiQ"]={charName="Illaoi",slot=0,type="Line",delay=0.75,range=750,radius=160,speed=math.huge,addHitbox=true,danger=3,dangerous=true,proj="illaoiemis",killTime=0,displayname="",mcollision=false},
["IllaoiE"]={charName="Illaoi",slot=2,type="Line",delay=0.25,range=1100,radius=50,speed=1900,addHitbox=true,danger=3,dangerous=true,proj="illaoiemis",killTime=0,displayname="",mcollision=true},
["IllaoiR"]={charName="Illaoi",slot=3,type="Circle",delay=0.5,range=0,radius=450,speed=math.huge,addHitbox=false,danger=3,dangerous=true,proj="nil",killTime=0.2,displayname="",mcollision=false},
["IreliaTranscendentBlades"]={charName="Irelia",slot=3,type="Line",delay=0,range=1200,radius=65,speed=1600,addHitbox=true,danger=2,dangerous=false,proj="IreliaTranscendentBlades",killTime=0,displayname="Transcendent Blades",mcollision=false},
["IvernQ"]={charName="Ivern",slot=0,type="Line",delay=0.25,range=1100,radius=65,speed=1300,addHitbox=true,danger=3,dangerous=true,proj="IvernQ",killTime=0,displayname="",mcollision=true},
["HowlingGaleSpell"]={charName="Janna",slot=0,type="Line",delay=0.25,range=1700,radius=120,speed=800,addHitbox=true,danger=2,dangerous=false,proj="HowlingGaleSpell",killTime=0,displayname="HowlingGale",mcollision=false},
["JarvanIVDragonStrike"]={charName="JarvanIV",slot=0,type="Line",delay=0.6,range=770,radius=70,speed=math.huge,addHitbox=true,danger=3,dangerous=false,proj="nil",killTime=0,displayname="DragonStrike",mcollision=false},
["JarvanIVEQ"]={charName="JarvanIV",slot=0,type="Line",delay=0.25,range=880,radius=70,speed=1450,addHitbox=true,danger=3,dangerous=true,proj="nil",killTime=0,displayname="DragonStrike2",mcollision=false},
["JarvanIVDemacianStandard"]={charName="JarvanIV",slot=2,type="Circle",delay=0.5,range=860,radius=175,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="JarvanIVDemacianStandard",killTime=1.5,displayname="Demacian Standard",mcollision=false},
["JayceShockBlast"]={charName="Jayce",slot=0,type="Line",delay=0.25,range=1300,radius=70,speed=1450,addHitbox=true,danger=2,dangerous=false,proj="JayceShockBlastMis",killTime=0,displayname="ShockBlast",mcollision=true},
["JayceShockBlastWallMis"]={charName="Jayce",slot=0,type="Line",delay=0.25,range=1300,radius=70,speed=2350,addHitbox=true,danger=2,dangerous=false,proj="JayceShockBlastWallMis",killTime=0,displayname="ShockBlastCharged",mcollision=true},
["JhinW"]={charName="Jhin",slot=1,type="Line",delay=0.75,range=2550,radius=40,speed=5000,addHitbox=true,danger=3,dangerous=true,proj="JhinWMissile",killTime=0,displayname="",mcollision=false},
["JhinRShot"]={charName="Jhin",slot=3,type="Line",delay=0.25,range=3500,radius=80,speed=5000,addHitbox=true,danger=3,dangerous=true,proj="JhinRShotMis",killTime=0,displayname="JhinR",mcollision=false},
["JinxW"]={charName="Jinx",slot=1,type="Line",delay=0.3,range=1600,radius=60,speed=2500,addHitbox=true,danger=3,dangerous=true,proj="JinxWMissile",killTime=.6,displayname="Zap",mcollision=true},
["JinxE"]={charName="Jinx",slot=2,type="Rectangle",delay=0.25,range=1600,radius=100,radius2=275,speed=math.huge,addHitbox=true,danger=3,dangerous=true,proj="JinxEHit",killTime=5,displayname="Zap",mcollision=true},
["JinxR"]={charName="Jinx",slot=3,type="Line",delay=0.6,range=20000,radius=140,speed=1700,addHitbox=true,danger=5,dangerous=true,proj="JinxR",killTime=0,displayname="Death Rocket",mcollision=false},
["KalistaMysticShot"]={charName="Kalista",slot=0,type="Line",delay=0.25,range=1200,radius=40,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="kalistamysticshotmis",killTime=0,displayname="MysticShot",mcollision=true},
["KarmaQ"]={charName="Karma",slot=0,type="Line",delay=0.25,range=1050,radius=60,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="KarmaQMissile",killTime=0,displayname="",mcollision=true},
["KarmaQMantra"]={charName="Karma",slot=0,type="Line",delay=0.25,range=950,radius=80,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="KarmaQMissileMantra",killTime=0,displayname="",mcollision=true},
["KarthusLayWasteA1"]={charName="Karthus",slot=0,type="Circle",delay=0.625,range=875,radius=200,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0.2,displayname="Lay Waste 1",mcollision=false},
["KarthusLayWasteA2"]={charName="Karthus",slot=0,type="Circle",delay=0.625,range=875,radius=200,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0.2,displayname="Lay Waste 2",mcollision=false},
["KarthusLayWasteA3"]={charName="Karthus",slot=0,type="Circle",delay=0.625,range=875,radius=200,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0.2,displayname="Lay Waste 3",mcollision=false},
["KarthusWallOfPain"]={charName="Karthus",slot=2,type="Rectangle",delay=0.25,range=600,radius=160,radius2=500,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=5,displayname="Wall of Pain",mcollision=false},
["RiftWalk"]={charName="Kassadin",slot=3,type="Circle",delay=0.25,range=450,radius=270,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="RiftWalk",killTime=0.3,displayname="",mcollision=false},
["KennenShurikenHurlMissile1"]={charName="Kennen",slot=0,type="Line",delay=0.18,range=1050,radius=50,speed=1650,addHitbox=true,danger=2,dangerous=false,proj="KennenShurikenHurlMissile1",killTime=0,displayname="Thundering Shuriken",mcollision=true},
["KhazixW"]={charName="Khazix",slot=1,type="Line",delay=0.25,range=1025,radius=70,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="KhazixWMissile",killTime=0,displayname="",mcollision=true},
["KledE"]={charName="Kled",slot=0,type="Line",delay=0.25,range=1025,radius=70,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="KhazixWMissile",killTime=0,displayname="",mcollision=true},
["KledQ"]={charName="Kled",slot=2,type="Line",delay=0,range=750,radius=125,speed=945,addHitbox=true,danger=3,dangerous=true,proj="KledE",killTime=0,displayname="",mcollision=true},
["KhazixE"]={charName="Khazix",slot=2,type="Circle",delay=0.25,range=600,radius=300,speed=1500,addHitbox=true,danger=2,dangerous=false,proj="KhazixE",killTime=0.2,displayname="",mcollision=false},
["KogMawQ"]={charName="KogMaw",slot=0,type="Line",delay=0.25,range=975,radius=70,speed=1650,addHitbox=true,danger=2,dangerous=false,proj="KogMawQ",killTime=0,displayname="",mcollision=true},
["KogMawVoidOoze"]={charName="KogMaw",slot=2,type="Line",delay=0.25,range=1200,radius=120,speed=1400,addHitbox=true,danger=2,dangerous=false,proj="KogMawVoidOozeMissile",killTime=0,displayname="Void Ooze",mcollision=false},
["KogMawLivingArtillery"]={charName="KogMaw",slot=3,type="Circle",delay=0.25,range=1800,radius=225,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="KogMawLivingArtillery",killTime=1,displayname="LivingArtillery",mcollision=false},
["LeblancSlide"]={charName="Leblanc",slot=1,type="Circle",delay=0,range=600,radius=220,speed=1450,addHitbox=true,danger=2,dangerous=false,proj="LeblancSlide",killTime=0.2,displayname="Slide",mcollision=false},
["LeblancSlideM"]={charName="Leblanc",slot=3,type="Circle",delay=0,range=600,radius=220,speed=1450,addHitbox=true,danger=2,dangerous=false,proj="LeblancSlideM",killTime=0.2,displayname="Slide R",mcollision=false},
["LeblancSoulShackle"]={charName="Leblanc",slot=2,type="Line",delay=0,range=950,radius=70,speed=1750,addHitbox=true,danger=3,dangerous=true,proj="LeblancSoulShackle",killTime=0,displayname="Ethereal Chains R",mcollision=true},
["LeblancSoulShackleM"]={charName="Leblanc",slot=3,type="Line",delay=0,range=950,radius=70,speed=1750,addHitbox=true,danger=3,dangerous=true,proj="LeblancSoulShackleM",killTime=0,displayname="Ethereal Chains",mcollision=true},
["BlindMonkQOne"]={charName="LeeSin",slot=0,type="Line",delay=0.25,range=1000,radius=80,speed=1800,addHitbox=true,danger=3,dangerous=true,proj="BlindMonkQOne",killTime=0,displayname="Sonic Wave",mcollision=true},
["LeonaZenithBlade"]={charName="Leona",slot=2,type="Line",delay=0.25,range=875,radius=70,speed=1750,addHitbox=true,danger=3,dangerous=true,proj="LeonaZenithBladeMissile",killTime=0,displayname="Zenith Blade",mcollision=false},
["LeonaSolarFlare"]={charName="Leona",slot=3,type="Circle",delay=1,range=1200,radius=300,speed=math.huge,addHitbox=true,danger=5,dangerous=true,proj="LeonaSolarFlare",killTime=0.5,displayname="Solar Flare",mcollision=false},
["LissandraQ"]={charName="Lissandra",slot=0,type="Line",delay=0.25,range=700,radius=75,speed=2200,addHitbox=true,danger=2,dangerous=false,proj="LissandraQMissile",killTime=0,displayname="Ice Shard",mcollision=false},
["LissandraQShards"]={charName="Lissandra",slot=0,type="Line",delay=0.25,range=700,radius=90,speed=2200,addHitbox=true,danger=2,dangerous=false,proj="lissandraqshards",killTime=0,displayname="Ice Shard2",mcollision=false},
["LissandraE"]={charName="Lissandra",slot=2,type="Line",delay=0.25,range=1025,radius=125,speed=850,addHitbox=true,danger=2,dangerous=false,proj="LissandraEMissile",killTime=0,displayname="",mcollision=false},
["LucianQ"]={charName="Lucian",slot=0,type="Line",delay=0.5,range=800,radius=65,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="LucianQ",killTime=0,displayname="",mcollision=false},
["LucianW"]={charName="Lucian",slot=1,type="Line",delay=0.2,range=1000,radius=55,speed=1600,addHitbox=true,danger=2,dangerous=false,proj="lucianwmissile",killTime=0,displayname="",mcollision=true},
["LucianRMis"]={charName="Lucian",slot=3,type="Line",delay=0.5,range=1400,radius=110,speed=2800,addHitbox=true,danger=2,dangerous=false,proj="lucianrmissileoffhand",killTime=0,displayname="LucianR",mcollision=true},
["LuluQ"]={charName="Lulu",slot=0,type="Line",delay=0.25,range=950,radius=60,speed=1450,addHitbox=true,danger=2,dangerous=false,proj="LuluQMissile",killTime=0,displayname="",mcollision=false},
["LuluQPix"]={charName="Lulu",slot=0,type="Line",delay=0.25,range=950,radius=60,speed=1450,addHitbox=true,danger=2,dangerous=false,proj="LuluQMissileTwo",killTime=0,displayname="",mcollision=false},
["LuxLightBinding"]={charName="Lux",slot=0,type="Line",delay=0.3,range=1300,radius=70,speed=1200,addHitbox=true,danger=3,dangerous=true,proj="LuxLightBindingMis",killTime=0,displayname="Light Binding",mcollision=true},
["LuxLightStrikeKugel"]={charName="Lux",slot=2,type="Circle",delay=0.25,range=1100,radius=350,speed=1300,addHitbox=true,danger=2,dangerous=false,proj="LuxLightStrikeKugel",killTime=5.25,displayname="LightStrikeKugel",mcollision=false,killName="LuxLightstrikeToggle"},
["LuxMaliceCannon"]={charName="Lux",slot=3,type="Line",delay=1.5,range=3500,radius=190,speed=math.huge,addHitbox=true,danger=5,dangerous=true,proj="LuxMaliceCannon",killTime=2,displayname="Malice Cannon",mcollision=false},
["UFSlash"]={charName="Malphite",slot=3,type="Circle",delay=0,range=1000,radius=270,speed=1500,addHitbox=true,danger=5,dangerous=true,proj="UFSlash",killTime=0.4,displayname="",mcollision=false},
["MalzaharQ"]={charName="Malzahar",slot=0,type="Rectangle",delay=0.75,range=900,radius2=475,radius=130,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="MalzaharQMissile",killTime=0.5,displayname="",mcollision=false},
["DarkBindingMissile"]={charName="Morgana",slot=0,type="Line",delay=0.2,range=1300,radius=80,speed=1200,addHitbox=true,danger=3,dangerous=true,proj="DarkBindingMissile",killTime=0,displayname="Dark Binding",mcollision=true},
["NamiQ"]={charName="Nami",slot=0,type="Circle",delay=0.95,range=1625,radius=200,speed=math.huge,addHitbox=true,danger=3,dangerous=true,proj="NamiQMissile",killTime=0.35,displayname="",mcollision=false},
["NamiR"]={charName="Nami",slot=3,type="Line",delay=0.8,range=2750,radius=260,speed=850,addHitbox=true,danger=2,dangerous=false,proj="NamiRMissile",killTime=0,displayname="",mcollision=false},
["NautilusAnchorDrag"]={charName="Nautilus",slot=0,type="Line",delay=0.25,range=1080,radius=90,speed=2000,addHitbox=true,danger=3,dangerous=true,proj="NautilusAnchorDragMissile",killTime=0,displayname="Anchor Drag",mcollision=true},
["AbsoluteZero"]={charName="Nunu",slot=3,type="Circle",delay=0.25,range=0,radius=750,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=4,displayname="",mcollision=false},
["NocturneDuskbringer"]={charName="Nocturne",slot=0,type="Line",delay=0.25,range=1125,radius=60,speed=1400,addHitbox=true,danger=2,dangerous=false,proj="NocturneDuskbringer",killTime=0,displayname="Duskbringer",mcollision=false},
["JavelinToss"]={charName="Nidalee",slot=0,type="Line",delay=0.25,range=1500,radius=40,speed=1300,addHitbox=true,danger=3,dangerous=true,proj="JavelinToss",killTime=0,displayname="JavelinToss",mcollision=true},
["OlafAxeThrowCast"]={charName="Olaf",slot=0,type="Line",delay=0.25,range=1000,radius=105,speed=1600,addHitbox=true,danger=2,dangerous=false,proj="olafaxethrow",killTime=0,displayname="Axe Throw",mcollision=false},
["OriannaIzunaCommand"]={charName="Orianna",slot=0,type="Line",delay=0,range=1500,radius=80,speed=1200,addHitbox=true,danger=2,dangerous=false,proj="orianaizuna",killTime=0,displayname="",mcollision=false},
["OrianaDissonanceCommand-"]={charName="Orianna",slot=1,type="Circle",delay=0.25,range=0,radius=255,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="OrianaDissonanceCommand-",killTime=0.3,displayname="",mcollision=false},
["OriannasE"]={charName="Orianna",slot=2,type="Line",delay=0,range=1500,radius=85,speed=1850,addHitbox=true,danger=2,dangerous=false,proj="orianaredact",killTime=0,displayname="",mcollision=false},
["OrianaDetonateCommand-"]={charName="Orianna",slot=3,type="Circle",delay=0.7,range=0,radius=410,speed=math.huge,addHitbox=true,danger=5,dangerous=true,proj="OrianaDetonateCommand-",killTime=0.5,displayname="",mcollision=false},
["QuinnQ"]={charName="Quinn",slot=0,type="Line",delay=0,range=1050,radius=60,speed=1550,addHitbox=true,danger=2,dangerous=false,proj="QuinnQ",killTime=0,displayname="",mcollision=true},
["PoppyQ"]={charName="Poppy",slot=0,type="Line",delay=0.5,range=430,radius=120,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="PoppyQ",killTime=1,displayname="",mcollision=false},
["PoppyRSpell"]={charName="Poppy",slot=3,type="Line",delay=0.3,range=1200,radius=100,speed=1600,addHitbox=true,danger=3,dangerous=true,proj="PoppyRMissile",killTime=0,displayname="PoppyR",mcollision=false},
["RengarE"]={charName="Rengar",slot=2,type="Line",delay=0.25,range=1000,radius=70,speed=1500,addHitbox=true,danger=3,dangerous=true,proj="RengarEFinal",killTime=0,displayname="",mcollision=true},
["reksaiqburrowed"]={charName="RekSai",slot=0,type="Line",delay=0.5,range=1050,radius=60,speed=1550,addHitbox=true,danger=3,dangerous=false,proj="RekSaiQBurrowedMis",killTime=0,displayname="RekSaiQ",mcollision=true},
["RivenWindslashMissileRight"]={charName="Riven",slot=3,type="Line",delay=0.25,range=1100,radius=125,speed=1600,addHitbox=false,danger=5,dangerous=true,proj="RivenLightsaberMissile",killTime=0,displayname="WindSlash Right",mcollision=false},
["RivenWindslashMissileCenter"]={charName="Riven",slot=3,type="Line",delay=0.25,range=1100,radius=125,speed=1600,addHitbox=false,danger=5,dangerous=true,proj="RivenLightsaberMissile",killTime=0,displayname="WindSlash Center",mcollision=false},
["RivenWindslashMissileLeft"]={charName="Riven",slot=3,type="Line",delay=0.25,range=1100,radius=125,speed=1600,addHitbox=false,danger=5,dangerous=true,proj="RivenLightsaberMissile",killTime=0,displayname="WindSlash Left",mcollision=false},
-- ["RivenMartyr"]={charName="Riven",slot=1,type="Circle",delay=0.25,range=0,radius=300,speed=math.huge,addHitbox=false,danger=5,dangerous=true,proj="nil",killTime=0.2,displayname="RivenW",mcollision=false},
["RumbleGrenade"]={charName="Rumble",slot=2,type="Line",delay=0.25,range=850,radius=60,speed=2000,addHitbox=true,danger=2,dangerous=false,proj="RumbleGrenade",killTime=0,displayname="Grenade",mcollision=true},
["RumbleCarpetBombM"]={charName="Rumble",slot=3,type="Line",delay=0.4,range=1700,radius=200,speed=1600,addHitbox=true,danger=4,dangerous=false,proj="RumbleCarpetBombMissile",killTime=0,displayname="Carpet Bomb",mcollision=false}, --doesnt work
["RyzeQ"]={charName="Ryze",slot=0,type="Line",delay=0,range=900,radius=50,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="RyzeQ",killTime=0,displayname="",mcollision=true},
["ryzerq"]={charName="Ryze",slot=0,type="Line",delay=0,range=900,radius=50,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="ryzerq",killTime=0,displayname="RyzeQ R",mcollision=true},
["SejuaniArcticAssault"]={charName="Sejuani",slot=0,type="Line",delay=0,range=900,radius=70,speed=1600,addHitbox=true,danger=3,dangerous=true,proj="nil",killTime=0,displayname="ArcticAssault",mcollision=true},
["SejuaniGlacialPrisonStart"]={charName="Sejuani",slot=3,type="Line",delay=0.25,range=1200,radius=110,speed=1600,addHitbox=true,danger=3,dangerous=true,proj="sejuaniglacialprison",killTime=0,displayname="GlacialPrisonStart",mcollision=false},
["SionE"]={charName="Sion",slot=2,type="Line",delay=0.25,range=800,radius=80,speed=1800,addHitbox=true,danger=3,dangerous=true,proj="SionEMissile",killTime=0,displayname="",mcollision=false},
["SionR"]={charName="Sion",slot=3,type="Line",delay=0.5,range=20000,radius=120,speed=1000,addHitbox=true,danger=3,dangerous=true,proj="nil",killTime=0,displayname="",mcollision=false},
["SorakaQ"]={charName="Soraka",slot=0,type="Circle",delay=0,range=950,radius=300,speed=1750,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0.75,displayname="",mcollision=false},
["SorakaE"]={charName="Soraka",slot=2,type="Circle",delay=0,range=925,radius=275,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=2,displayname="",mcollision=false},
["ShenE"]={charName="Shen",slot=2,type="Line",delay=0,range=650,radius=50,speed=1600,addHitbox=true,danger=3,dangerous=true,proj="ShenE",killTime=0,displayname="Shadow Dash",mcollision=false},
["ShyvanaFireball"]={charName="Shyvana",slot=2,type="Line",delay=0.25,range=925,radius=60,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="ShyvanaFireballMissile",killTime=0,displayname="Fireball",mcollision=false},
["ShyvanaTransformCast"]={charName="Shyvana",slot=3,type="Line",delay=0.25,range=750,radius=150,speed=1500,addHitbox=true,danger=3,dangerous=true,proj="ShyvanaTransformCast",killTime=0,displayname="Transform Cast",mcollision=false},
["shyvanafireballdragon2"]={charName="Shyvana",slot=3,type="Line",delay=0.25,range=925,radius=70,speed=2000,addHitbox=true,danger=3,dangerous=false,proj="ShyvanaFireballDragonFxMissile",killTime=0,displayname="Fireball Dragon",mcollision=false},
["SivirQMissileReturn"]={charName="Sivir",slot=0,type="Return",delay=0,range=1075,radius=100,speed=1350,addHitbox=true,danger=2,dangerous=false,proj="SivirQMissileReturn",killTime=0,displayname="SivirQ2",mcollision=false},
["SivirQ"]={charName="Sivir",slot=0,type="Line",delay=0.25,range=1075,radius=90,speed=1350,addHitbox=true,danger=2,dangerous=false,proj="SivirQMissile",killTime=0,displayname="SivirQ",mcollision=false},
["SkarnerFracture"]={charName="Skarner",slot=2,type="Line",delay=0.35,range=350,radius=70,speed=1500,addHitbox=true,danger=2,dangerous=false,proj="SkarnerFractureMissile",killTime=0,displayname="Fracture",mcollision=false},
["SonaR"]={charName="Sona",slot=3,type="Line",delay=0.25,range=900,radius=140,speed=2400,addHitbox=true,danger=5,dangerous=true,proj="SonaR",killTime=0,displayname="Crescendo",mcollision=false},
["SwainShadowGrasp"]={charName="Swain",slot=1,type="Circle",delay=0.25,range=900,radius=180,speed=math.huge,addHitbox=true,danger=3,dangerous=true,proj="SwainShadowGrasp",killTime=1.5,displayname="Shadow Grasp",mcollision=false},
["SyndraQ"]={charName="Syndra",slot=0,type="Circle",delay=0.6,range=800,radius=150,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="SyndraQSpell",killTime=0.2,displayname="",mcollision=false},
["SyndraWCast"]={charName="Syndra",slot=1,type="Circle",delay=0.25,range=950,radius=210,speed=1450,addHitbox=true,danger=2,dangerous=false,proj="syndrawcast",killTime=0.2,displayname="SyndraW",mcollision=false},
["SyndraE"]={charName="Syndra",slot=2,type="Cone",delay=0,range=950,radius=100,speed=2000,addHitbox=true,danger=2,dangerous=false,proj="SyndraE",killTime=0,displayname="SyndraE",mcollision=false},
["syndrae5"]={charName="Syndra",slot=2,type="Line",delay=0,range=950,radius=100,speed=2000,addHitbox=true,danger=2,dangerous=false,proj="syndrae5",killTime=0,displayname="SyndraE2",mcollision=false},
["TalonRake"]={charName="Talon",slot=1,type="Cone",delay=0.25,range=800,radius=80,speed=2300,angle=45,addHitbox=true,danger=2,dangerous=true,proj="talonrakemissileone",killTime=0,displayname="Rake",mcollision=false},
["TalonRakeMissileTwo"]={charName="Talon",slot=1,type="Cone",delay=0.25,range=800,radius=80,speed=1850,angle=45,addHitbox=true,danger=2,dangerous=true,proj="talonrakemissiletwo",killTime=0,displayname="Rake2",mcollision=false},
["TahmKenchQ"]={charName="TahmKench",slot=0,type="Line",delay=0.25,range=951,radius=90,speed=2800,addHitbox=true,danger=3,dangerous=true,proj="tahmkenchqmissile",killTime=0,displayname="Tongue Slash",mcollision=true},
["TaricE"]={charName="Taric",slot=2,type="follow",delay=0.25,range=750,radius=100,speed=math.huge,addHitbox=true,danger=3,dangerous=true,proj="TaricE",killTime=1.25,displayname="",mcollision=false},
["ThreshQ"]={charName="Thresh",slot=0,type="Line",delay=0.5,range=1050,radius=70,speed=1900,addHitbox=true,danger=3,dangerous=true,proj="ThreshQMissile",killTime=0,displayname="",mcollision=true},
["ThreshEFlay"]={charName="Thresh",slot=2,type="Line",delay=0.125,range=500,radius=110,speed=2000,addHitbox=true,danger=3,dangerous=true,proj="ThreshEMissile1",killTime=0,displayname="Flay",mcollision=false},
["RocketJump"]={charName="Tristana",slot=1,type="Circle",delay=0.5,range=900,radius=270,speed=1500,addHitbox=true,danger=2,dangerous=false,proj="RocketJump",killTime=0.3,displayname="",mcollision=false},
["TryndamereE"]={charName="Tryndamere",slot=2,type="Line",delay=0,range=700,radius=93,speed=1000,addHitbox=true,danger=2,dangerous=false,proj="Slash",killTime=0.5,displayname="",mcollision=false},
["WildCards"]={charName="TwistedFate",slot=0,type="Line",delay=0.25,range=1450,radius=40,speed=1000,angle=28,addHitbox=true,danger=2,dangerous=false,proj="SealFateMissile",killTime=0,displayname="",mcollision=false},
["TwitchVenomCask"]={charName="Twitch",slot=1,type="Circle",delay=0.25,range=900,radius=275,speed=1400,addHitbox=true,danger=2,dangerous=false,proj="TwitchVenomCaskMissile",killTime=0.3,displayname="Venom Cask",mcollision=false},
["TwitchSprayAndPrayAttack"]={charName="Twitch",slot=3,type="Line",delay=0.1,range=1200,radius=100,speed=1800,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0.5,displayname="Venom Cask",mcollision=false},
["UrgotHeatseekingLineMissile"]={charName="Urgot",slot=0,type="Line",delay=0.125,range=1000,radius=60,speed=1600,addHitbox=true,danger=2,dangerous=false,proj="UrgotHeatseekingLineMissile",killTime=0,displayname="Heatseeking Line",mcollision=true},
["UrgotPlasmaGrenade"]={charName="Urgot",slot=2,type="Circle",delay=0.25,range=1100,radius=210,speed=1500,addHitbox=true,danger=2,dangerous=false,proj="UrgotPlasmaGrenadeBoom",killTime=0.3,displayname="PlasmaGrenade",mcollision=false},
["VarusQMissile"]={charName="Varus",slot=0,type="Line",delay=0.25,range=1475,radius=70,speed=1900,addHitbox=true,danger=2,dangerous=false,proj="VarusQMissile",killTime=0,displayname="VarusQ",mcollision=false},
["VarusE"]={charName="Varus",slot=2,type="Circle",delay=0.25,range=925,radius=235,speed=1500,addHitbox=true,danger=2,dangerous=false,proj="VarusE",killTime=2.25,displayname="",mcollision=false},
["VarusR"]={charName="Varus",slot=3,type="Line",delay=0.25,range=800,radius=120,speed=1950,addHitbox=true,danger=3,dangerous=true,proj="VarusRMissile",killTime=0,displayname="",mcollision=false},
["VeigarBalefulStrike"]={charName="Veigar",slot=0,type="Line",delay=0.1,range=900,radius=70,speed=1500,addHitbox=true,danger=2,dangerous=false,proj="VeigarBalefulStrikeMis",killTime=0,displayname="BalefulStrike",mcollision=false},
["VeigarDarkMatter"]={charName="Veigar",slot=1,type="Circle",delay=1.35,range=900,radius=225,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0.5,displayname="DarkMatter",mcollision=false},
["VeigarEventHorizon"]={charName="Veigar",slot=2,type="Ring",delay=0.5,range=700,radius=400,speed=math.huge,addHitbox=false,danger=3,dangerous=true,proj="nil",killTime=3.5,displayname="EventHorizon",mcollision=false},
["VelkozQ"]={charName="Velkoz",slot=0,type="Line",delay=0.25,range=1100,radius=50,speed=1300,addHitbox=true,danger=2,dangerous=false,proj="VelkozQMissile",killTime=0,displayname="",mcollision=true},
["VelkozQMissileSplit"]={charName="Velkoz",slot=0,type="Line",delay=0.25,range=1100,radius=55,speed=2100,addHitbox=true,danger=2,dangerous=false,proj="VelkozQMissileSplit",killTime=0,displayname="",mcollision=true},
["VelkozW"]={charName="Velkoz",slot=1,type="Line",delay=0.25,range=1050,radius=88,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="VelkozWMissile",killTime=0,displayname="",mcollision=false},
["VelkozE"]={charName="Velkoz",slot=2,type="Circle",delay=0.5,range=800,radius=225,speed=1500,addHitbox=false,danger=2,dangerous=false,proj="VelkozEMissile",killTime=0.5,displayname="",mcollision=false},
["Vi-q"]={charName="Vi",slot=0,type="Line",delay=0.25,range=715,radius=90,speed=1500,addHitbox=true,danger=3,dangerous=true,proj="ViQMissile",killTime=0,displayname="Vi-Q",mcollision=false},
["VladimirR"] = {charName = "Vladimir",slot=3,type="Circle",delay=0.25,range=700,radius=175,speed=math.huge,addHitbox=true,danger=4,dangerous=true,proj="nil",killTime=0,displayname = "Hemoplague",mcollision=false},
["Laser"]={charName="Viktor",slot=2,type="Line",delay=0.25,range=1200,radius=80,speed=1050,addHitbox=true,danger=2,dangerous=false,proj="ViktorDeathRayMissile",killTime=0,displayname="",mcollision=false},
["XerathArcanopulse2"]={charName="Xerath",slot=0,type="Line",delay=0.6,range=1600,radius=95,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="xeratharcanopulse2",killTime=0.5,displayname="Arcanopulse",mcollision=false},
["XerathArcaneBarrage2"]={charName="Xerath",slot=1,type="Circle",delay=0.7,range=1000,radius=275,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="XerathArcaneBarrage2",killTime=0.3,displayname="ArcaneBarrage",mcollision=false},
["XerathMageSpear"]={charName="Xerath",slot=2,type="Line",delay=0.2,range=1300,radius=60,speed=1400,addHitbox=true,danger=2,dangerous=true,proj="XerathMageSpearMissile",killTime=0,displayname="MageSpear",mcollision=true},
["XerathLocusPulse"]={charName="Xerath",slot=3,type="Circle",delay=0.7,range=5600,radius=225,speed=math.huge,addHitbox=true,danger=3,dangerous=true,proj="XerathRMissileWrapper",killTime=0.4,displayname="",mcollision=false},
["YasuoQ3W"]={charName="Yasuo",slot=0,type="Line",delay=0.4,range=1200,radius=90,speed=1300,addHitbox=true,danger=3,dangerous=true,proj="YasuoQ3",killTime=0,displayname="Steel Tempest ",mcollision=false},
["ZacQ"]={charName="Zac",slot=0,type="Line",delay=0.5,range=550,radius=120,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="ZacQ",killTime=0,displayname="",mcollision=false},
["ZedQ"]={charName="Zed",slot=0,type="Line",delay=0.25,range=925,radius=50,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="ZedQMissile",killTime=0,displayname="",mcollision=false},
["ZiggsQSpell"]={charName="Ziggs",slot=0,type="Circle",delay=0.5,range=1100,radius=200,speed=1750,addHitbox=true,danger=2,dangerous=false,proj="ZiggsQSpell",killTime=0.2,displayname="",mcollision=false},
["ZiggsQSpell2"]={charName="Ziggs",slot=0,type="Circle",delay=0.47,range=1100,radius=200,speed=1750,addHitbox=true,danger=2,dangerous=false,proj="ZiggsQSpell2",killTime=-0.23,displayname="",mcollision=true},
["ZiggsQSpell3"]={charName="Ziggs",slot=0,type="Circle",delay=0.44,range=1100,radius=200,speed=1750,addHitbox=true,danger=2,dangerous=false,proj="ZiggsQSpell3",killTime=-0.26,displayname="",mcollision=true},
["ZiggsW"]={charName="Ziggs",slot=1,type="Circle",delay=0.25,range=1000,radius=275,speed=1750,addHitbox=true,danger=2,dangerous=false,proj="ZiggsW",killTime=4.1,displayname="",mcollision=false,killName="ZiggsWToggle"},
["ZiggsE"]={charName="Ziggs",slot=2,type="Circle",delay=0.5,range=900,radius=250,speed=1750,addHitbox=true,danger=2,dangerous=false,proj="ZiggsE",killTime=10,displayname="",mcollision=false},
["ZiggsR"]={charName="Ziggs",slot=3,type="Circle",delay=0,range=5300,radius=500,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="ZiggsR",killTime=1.25,displayname="",mcollision=false},
["ZileanQ"]={charName="Zilean",slot=0,type="Circle",delay=0.3,range=900,radius=210,speed=2000,addHitbox=true,danger=2,dangerous=false,proj="ZileanQMissile",killTime=1.5,displayname="",mcollision=false},
["ZyraQ"]={charName="Zyra",slot=0,type="Rectangle",delay=0.4,range=800,radius2=400,radius=140,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="ZyraQ",killTime=0.35,displayname="",mcollision=false},
["ZyraE"]={charName="Zyra",slot=2,type="Line",delay=0.25,range=1100,radius=70,speed=1300,addHitbox=true,danger=3,dangerous=true,proj="ZyraE",killTime=0,displayname="Grasping Roots",mcollision=false},
--["ZyraRSplash"]={charName="Zyra",slot=3,type="Circle",delay=0.7,range=700,radius=550,speed=math.huge,addHitbox=true,danger=4,dangerous=false,proj="ZyraRSplash",killTime=1,displayname="Splash",mcollision=false},--bugged spell
}
BM.SB:Menu("Spells", "Spells")
BM.SB:Boolean("uS","Enable",true)
BM.SB:Slider("dV","Danger Value",2,1,5,1)
BM.SB:Slider("hV","Humanize Value",50,0,100,1)
BM.SB:Boolean("EC","Enable Collision", true)
BM.SB:KeyBinding("DoD", "DodgeOnlyDangerous", string.byte(" "))
BM.SB:KeyBinding("DoD2", "DodgeOnlyDangerous2", string.byte("V"))
self.object = {}
self.DoD = false
self.fT = .75
self.dt = nil
DelayAction(function()
for l,k in pairs(GetEnemyHeroes()) do
for _,i in pairs(self.s) do
if not self.s[_] then return end
if i.charName == k.charName then
if i.displayname == "" then i.displayname = _ end
if i.danger == 0 then i.danger = 1 end
if not BM.SB.Spells[i.charName..""..self.str[i.slot]..""..i.displayname] then BM.SB.Spells:Menu(i.charName..""..self.str[i.slot]..""..i.displayname,""..k.charName.." | "..(self.str[i.slot] or "?").." - "..i.displayname) end
BM.SB.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Boolean("Dodge"..i.charName..""..self.str[i.slot]..""..i.displayname, "Enable Dodge", true)
BM.SB.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Boolean("IsD"..i.charName..""..self.str[i.slot]..""..i.displayname,"Dangerous", i.dangerous or false)
BM.SB.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Info("Empty12"..i.charName..""..self.str[i.slot]..""..i.displayname, "")
BM.SB.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Slider("radius"..i.charName..""..self.str[i.slot]..""..i.displayname,"Radius",(i.radius or 150), ((i.radius-50) or 50),((i.radius+100) or 250), 5)
BM.SB.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Slider("d"..i.charName..""..self.str[i.slot]..""..i.displayname,"Danger",(i.danger or 1), 1, 5, 1)
end
end
end
end, .001)
Callback.Add("Tick", function() self:Ti() end)
Callback.Add("ProcessSpell", function(unit, spellProc) self:Detect(unit,spellProc) end)
Callback.Add("CreateObj", function(obj) self:CreateObj(obj) end)
Callback.Add("DeleteObj", function(obj) self:DeleteObj(obj) end)
end
function HitMe:Ti()
if BM.SB.uS:Value() then
heroes[myHero.networkID] = nil
for _,i in pairs(self.object) do
if i.o and i.spell.type == "linear" and GetDistance(myHero,i.o) >= 3000 then return end
if i and i.spell.type == "circular" and GetDistance(myHero,i.endPos) >= 3000 then return end
i.spell.speed = i.spell.speed or math.huge
i.spell.range = i.spell.range or math.huge
i.spell.proj = i.spell.proj or _
i.spell.delay = i.spell.delay or 0
i.spell.radius = i.spell.radius or 100
i.spell.mcollision = i.spell.mcollision or false
i.spell.danger = i.spell.danger or 2
i.spell.type = i.spell.type or nil
self.fT = BM.SB.hV:Value()
self.YasuoWall = {}
self:MinionCollision(_,i)
self:HeroCollsion(_,i)
self:WallCollision(_,i)
if BM.SB.DoD:Value() or BM.SB.DoD2:Value() then
self.DoD = true
else
self.DoD = false
end
for kk,k in pairs(GetEnemyHeroes()) do
if i.o and not i.o.valid then
self.object[_] = nil
end
if i then
self.dT = i.spell.delay + GetDistance(myHero,i.startPos) / i.spell.speed
end
if ((not self.DoD and BM.SB.dV:Value() <= BM.SB.Spells[i.spell.charName..""..self.str[i.spell.slot]..""..i.spell.displayname]["d"..i.spell.charName..""..self.str[i.spell.slot]..""..i.spell.displayname]:Value()) or (self.DoD and BM.SB.Spells[i.spell.charName..""..self.str[i.spell.slot]..""..i.spell.displayname]["IsD"..i.spell.charName..""..self.str[i.spell.slot]..""..i.spell.displayname]:Value())) and BM.SB.Spells[i.spell.charName..""..self.str[i.spell.slot]..""..i.spell.displayname]["Dodge"..i.spell.charName..""..self.str[i.spell.slot]..""..i.spell.displayname]:Value() then
if (i.spell.type == "Line" or i.spell.type == "Cone") and i then
i.startPos = Vector(i.startPos)
i.endPos = Vector(i.endPos)
if GetDistance(i.startPos) < i.spell.range + myHero.boundingRadius and GetDistance(i.endPos) < i.spell.range + myHero.boundingRadius then
local v3 = Vector(myHero.pos)
local v4 = Vector(i.startPos-i.endPos):perpendicular()
local jp = Vector(VectorIntersection(i.startPos,i.endPos,v3,v4).x,myHero.pos.y,VectorIntersection(i.startPos,i.endPos,v3,v4).y)
i.jp = jp
if i.coll then return end
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius then
_G[ChampName]:HitMe(k,i.p,self.dT*self.fT*.001,i.spell.type)
end
end
elseif i.spell.type == "Circle" then
if GetDistance(i.endPos) < i.spell.range + myHero.boundingRadius then
_G[ChampName]:HitMe(k,i.p,self.dT*self.fT*.001,i.spell.type)
end
elseif i.spell.type == "Rectangle" then
local startp = Vector(i.endPos) - (Vector(i.endPos) - Vector(i.startPos)):normalized():perpendicular() * (i.spell.radius2 or 400)
local endp = Vector(i.endPos) + (Vector(i.endPos) - Vector(i.startPos)):normalized():perpendicular() * (i.spell.radius2 or 400)
if GetDistance(startp) < i.spell.range + myHero.boundingRadius and GetDistance(endp) < i.spell.range + myHero.boundingRadius then
local v3 = Vector(myHero.pos)
local v4 = Vector(startp-endp):normalized():perpendicular()
local jp = Vector(VectorIntersection(startp,endp,v3,v4).x,myHero.pos.y,VectorIntersection(startp,endp,v3,v4).y)
i.jp = jp
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius then
_G[ChampName]:HitMe(k,i.p,self.dT*self.fT*.001,i.spell.type)
end
end
elseif i.spell.type == "Return" then
i.startPos = Vector(i.p.startPos)
i.endPos = Vector(i.caster.pos)
if GetDistance(i.p.startPos) < i.spell.range + myHero.boundingRadius and GetDistance(i.endPos) < i.spell.range + myHero.boundingRadius then
local v3 = Vector(myHero)
local jp = VectorPointProjectionOnLineSegment(Vector(i.o.pos),i.endPos,v3)
i.jp = jp
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius then
_G[ChampName]:HitMe(k,i.p,self.dT*self.fT*.001,i.spell.type)
end
end
elseif i.spell.type == "follow" then
i.startPos = Vector(i.caster.pos)
i.endPos = Vector(i.endPos)
if GetDistance(i.startPos) < i.spell.range + myHero.boundingRadius and GetDistance(i.endPos) < i.spell.range + myHero.boundingRadius then
local v3 = Vector(myHero)
local v4 = Vector(i.caster.pos) + i.TarE
local jp = VectorPointProjectionOnLineSegment(i.startPos,v4,v3)
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius then
_G[ChampName]:HitMe(k,i.p,self.dT*self.fT*.001,i.spell.type)
end
end
end
end
end
end
end
end
function HitMe:MinionCollision(_,i)
if i.spell.type == "Line" and i.spell.mcollision and i.p and BM.SB.EC:Value() and not i.hcoll and not i.wcoll then
for m,p in pairs(SLM2) do
if p and p.alive and GetDistance(p.pos,i.startPos) < i.range then
i.vP = VectorPointProjectionOnLineSegment(Vector(self.opos),i.endPos,Vector(p.pos))
if i.vP and GetDistance(i.vP,p.pos) < (i.spell.radius+p.boundingRadius) then
i.spell.range = GetDistance(i.startPos,self.vP)
i.mcoll = true
else
i.spell.range = i.range
i.vP = nil
end
end
end
end
end
function HitMe:HeroCollsion(_,i)
if i.spell.type == "Line" and i.spell.mcollision and i.p and BM.SB.EC:Value() and not i.mcoll and not i.wcoll then
for m,p in pairs(heroes) do
if p and p.alive and p.team == MINION_ALLY and GetDistance(p.pos,i.startPos) < i.range then
i.vP = VectorPointProjectionOnLineSegment(Vector(self.opos),i.endPos,Vector(p.pos))
if i.vP and GetDistance(i.vP,p.pos) < (i.spell.radius+p.boundingRadius) then
i.spell.range = GetDistance(i.startPos,i.vP)
i.hcoll = true
else
i.spell.range = i.range
i.vP = nil
end
end
end
end
end
function HitMe:WallCollision(_,i)
if i.spell.type == "Line" and i.spell.mcollision and i.p and BM.SB.EC:Value() and not i.mcoll and not i.hcoll then
for m,p in pairs(self.YasuoWall) do
if p.obj and p.obj.valid and p.obj.spellOwner.team == MINION_ALLY and GetDistance(p.obj.pos,i.p.startPos) < i.range then
i.vP = VectorPointProjectionOnLineSegment(Vector(self.opos),i.p.endPos,Vector(p.obj.pos))
if i.vP and GetDistance(i.vP,p.obj.pos) < (i.spell.radius+p.obj.boundingRadius) then
i.spell.range = GetDistance(i.p.startPos,i.vP)
i.wcoll = true
else
i.spell.range = i.range
i.vP = nil
end
end
end
end
end
function HitMe:CreateObj(obj)
if obj and obj.isSpell and obj.spellOwner.isHero and obj.spellOwner.team == MINION_ENEMY then
for _,l in pairs(self.s) do
if obj.spellName:lower():find("attack") then return end
if not self.object[l.charName..""..self.str[l.slot]..""..l.displayname] and self.s[_] and BM.SB.Spells[l.charName..""..self.str[l.slot]..""..l.displayname] and BM.SB.dV:Value() <= BM.SB.Spells[l.charName..""..self.str[l.slot]..""..l.displayname]["d"..l.charName..""..self.str[l.slot]..""..l.displayname]:Value() and (l.proj == obj.spellName or _ == obj.spellName or obj.spellName:lower():find(_:lower()) or obj.spellName:lower():find(l.proj:lower())) then
if l.type == ("Line" or "Cone") then
endPos = Vector(obj.startPos)+Vector(Vector(obj.endPos)-obj.startPos):normalized()*l.range
else
endPos = Vector(obj.endPos)
end
self.object[l.charName..""..self.str[l.slot]..""..l.displayname] = {
o = obj,
startPos = Vector(obj.startPos),
endPos = endPos,
caster = obj.spellOwner.charName,
startTime = os.clock(),
spell = l,
coll = false,
range = l.range,
}
end
end
end
if (obj.spellName == "YasuoWMovingWallR" or obj.spellName == "YasuoWMovingWallL" or obj.spellName == "YasuoWMovingWallMisVis") and obj and obj.isSpell and obj.spellOwner.isHero and obj.spellOwner.team == myHero.team then
if not self.YasuoWall[obj.spellName] then self.YasuoWall[obj.spellName] = {} end
self.YasuoWall[obj.spellName].obj = obj
end
end
function HitMe:Detect(unit,spellProc)
if unit and unit.isHero and unit.team == MINION_ENEMY then
for _,l in pairs(self.s) do
if not self.object[l.charName..""..self.str[l.slot]..""..l.displayname] and self.s[_] and BM.SB.Spells[l.charName..""..self.str[l.slot]..""..l.displayname] and BM.SB.dV:Value() <= BM.SB.Spells[l.charName..""..self.str[l.slot]..""..l.displayname]["d"..l.charName..""..self.str[l.slot]..""..l.displayname]:Value() and (l.proj == spellProc.name or _ == spellProc.name or spellProc.name:lower():find(_:lower()) or spellProc.name:lower():find(l.proj:lower())) then
if l.type == ("Line" or "Cone") then
endPos = Vector(spellProc.startPos)+Vector(Vector(spellProc.endPos)-spellProc.startPos):normalized()*l.range
else
endPos = Vector(spellProc.endPos)
end
self.object[spellProc.name] = {
startPos = Vector(spellProc.startPos),
endPos = endPos,
spell = l,
caster = unit,
startTime = os.clock(),
coll = false,
TarE = (Vector(spellProc.endPos) - Vector(unit.pos)):normalized()*l.range,
range = l.range,
}
DelayAction(function() self.object[spellProc.name] = nil end, l.delay*.001 + 1.3*GetDistance(myHero.pos,spellProc.startPos)/l.speed)
end
end
for _,l in pairs(self.s) do
if spellProc.target and spellProc.target == myHero and not spellProc.name:lower():find("attack") and BM.SB.uS:Value() then
_G[ChampName]:HitMe(unit,spellProc,((l.delay or 0) + GetDistance(myHero,spellProc.startPos) / (l.speed or math.huge))*BM.SB.hV:Value()*.001,l.type)
end
end
end
end
function HitMe:DeleteObj(obj)
if obj and obj.isSpell and self.object[obj.spellName] then
self.object[obj.spellName] = nil
end
if (obj.spellName == "YasuoWMovingWallR" or obj.spellName == "YasuoWMovingWallL" or obj.spellName == "YasuoWMovingWallMisVis") and obj and obj.isSpell and obj.spellOwner.isHero and obj.spellOwner.team == myHero.team then
self.YasuoWall[obj.spellName] = nil
end
end
class 'Humanizer'
function Humanizer:__init()
self.bCount = 0
self.bCount1 = 0
self.lastCommand = 0
self.lastspell = 0
SLU:SubMenu("Hum", "Humanizer")
SLU.Hum:Boolean("Draw", "Draw blocked movements", true)
SLU.Hum:Boolean("Draw1", "Draw blocked spells", true)
SLU.Hum:Boolean("enable", "Use Movement Limiter", true)
SLU.Hum:Boolean("enable1", "Use SpellCast Limiter", true)
SLU.Hum:Slider("Horizontal", "Horizontal (Drawings)", 0, 0, GetResolution().x, 10)
SLU.Hum:Slider("Vertical", "Vertical (Drawings)", 0, 0, GetResolution().y, 10)
SLU.Hum:Menu("ML", "Movement Limiter")
SLU.Hum.ML:Slider("lhit", "Max. Movements in Last Hit", 6, 1, 20, 1)
SLU.Hum.ML:Slider("lclear", "Max. Movements in Lane Clear", 6, 1, 20, 1)
SLU.Hum.ML:Slider("harass", "Max. Movements in Harass", 7, 1, 20, 1)
SLU.Hum.ML:Slider("combo", "Max. Movements in Combo", 8, 1, 20, 1)
SLU.Hum.ML:Slider("perm", "Persistant Max. Movements", 7, 1, 20, 1)
SLU.Hum:Menu("SPC", "SpellCast Limiter")
SLU.Hum.SPC:Slider("blhit", "Max. Spells in LastHit", 1, 1, 8, 1)
SLU.Hum.SPC:Slider("blclear", "Max. Spells in LaneClear", 1, 1, 8, 1)
SLU.Hum.SPC:Slider("bharass", "Max. Spells in Harass", 2, 1, 8, 1)
SLU.Hum.SPC:Slider("bcombo", "Max. Spells in Combo", 3, 1, 8, 1)
SLU.Hum.SPC:Slider("bperm", "Persistant Max. Spells", 2, 1, 8, 1)
Callback.Add("IssueOrder", function(order) self:IssueOrder(order) end)
Callback.Add("SpellCast", function(spell) self:SpellCast(spell) end)
Callback.Add("Draw", function() self:Draw() end)
end
function Humanizer:moveEvery()
if Mode == "Combo" then
return 1 / SLU.Hum.ML.combo:Value()
elseif Mode == "LastHit" then
return 1 / SLU.Hum.ML.lhit:Value()
elseif Mode == "Harass" then
return 1 / SLU.Hum.ML.harass:Value()
elseif Mode == "LaneClear" then
return 1 / SLU.Hum.ML.lclear:Value()
else
return 1 / SLU.Hum.ML.perm:Value()
end
end
function Humanizer:Spells()
if Mode == "Combo" then
return 1 / SLU.Hum.SPC.bcombo:Value()
elseif Mode == "LastHit" then
return 1 / SLU.Hum.SPC.blhit:Value()
elseif Mode == "Harass" then
return 1 / SLU.Hum.SPC.bharass:Value()
elseif Mode == "LaneClear" then
return 1 / SLU.Hum.SPC.blclear:Value()
else
return 1 / SLU.Hum.SPC.bperm:Value()
end
end
function Humanizer:IssueOrder(order)
if order.flag == 2 and SLU.Hum.enable:Value() and not _G.SLW then
if os.clock() - self.lastCommand < self:moveEvery() then
BlockOrder()
self.bCount = self.bCount + 1
else
self.lastCommand = os.clock()
end
end
end
function Humanizer:SpellCast(spell)
if SLU.Hum.enable1:Value() then
if os.clock() - self.lastspell < self:Spells() then
BlockCast()
self.bCount1 = self.bCount1 + 1
else
self.lastspell = os.clock()
end
end
end
function Humanizer:Draw()
if SLU.Hum.Draw:Value() and not _G.SLW then
DrawText("Blocked Movements : "..tostring(self.bCount),25,SLU.Hum.Horizontal:Value(),SLU.Hum.Vertical:Value(),ARGB(255,159,242,12))
end
if SLU.Hum.Draw1:Value() then
DrawText("Blocked Spells : "..tostring(self.bCount1),25,SLU.Hum.Horizontal:Value(),SLU.Hum.Vertical:Value()+20,ARGB(255,159,242,12))
end
end
class 'Awareness'
function Awareness:__init()
if not DirExists(SPRITE_PATH.."Champions\\") then CreateDir(SPRITE_PATH.."Champions\\") end
if not DirExists(SPRITE_PATH.."Champions\\Circle50\\") then CreateDir(SPRITE_PATH.."Champions\\Circle50\\") end
if not DirExists(SPRITE_PATH.."Champions\\Circle25\\") then CreateDir(SPRITE_PATH.."Champions\\Circle25\\") end
self.Wards = {}
self.Wards2 = {}
self.R = {}
self.t = 0
self.monsters = {}
self.mobs = {["SRU_Baron"]={s=1200,d=420}, ["SRU_Dragon"]={s=150,d=360}, ["SRU_Red"]={s=105,d=300}, ["SRU_Blue"]={s=105,d=300}, ["SRU_Krug"]={s=50,d=100}, ["SRU_Murkwolf"]={s=105,d=103}, ["SRU_Razorbeak"]={s=105,d=90}, ["SRU_Gromp"]={s=105,d=145}, ["Sru_Crab"]={s=150,d=120}}
self.j = nil
self.d = {}
self.d2 = {}
self.wp = {}
self.cd = {}
self.str = {["SummonerDot"]="Ig",["SummonerFlash"]="Fl",["SummonerExhaust"]="Ex",["SummonerGhost"]="Gh",["SummonerTeleport"]="Tp",["SummonerBarrier"]="Ba",["SummonerSmite"]="Sm",["SummonerHeal"]="He",["SummonerSnowball"]="Sn"}
self.spells = {
["Ashe"] = {d = 0.25, s = 1450,w=120,sp=3,c=true,dmg=function(unit) return 75+175*GetCastLevel(myHero,3)*myHero.ap end,},
["Draven"] = {d = 0.4,s = 2000,w=120,sp=3,c=false,dmg=function(unit) return 75+100*GetCastLevel(myHero,3)+1.1*myHero.totalDamage end,},
["Ezreal"] = {d = 1, s = 2000,w=140,sp=3,c=false,dmg=function(unit) return 200+150*GetCastLevel(myHero,3)+0.9*myHero.ap+myHero.totalDamage end,},
["Jinx"] = {d = 0.6, s = 1650,w=130,sp=3,c=true,dmg=function(unit) return math.min(math.max((150 + GetCastLevel(myHero,3)*GetBonusDmg(myHero)+(unit.maxHealth-unit.health)*(.20+GetCastLevel(myHero,3)*.5))*.1,(150 + GetCastLevel(myHero,3)*GetBonusDmg(myHero)+(unit.maxHealth-unit.health)*(.20+GetCastLevel(myHero,3)*.5))*GetDistance(GetOrigin(myHero),GetOrigin(unit))/1650),(150 + GetCastLevel(myHero,3)*GetBonusDmg(myHero)+(unit.maxHealth-unit.health)*(.20+GetCastLevel(myHero,3)*.5))) end,}
}
self.E = {}
self.offy = 60
SLU:Menu("A", "Awareness")
SLU.A:Menu("HUD", "HUD")
SLU.A.HUD:Boolean("E", "Enabled",true)
SLU.A.HUD:Boolean("DE","Draw Enemies",true)
-- SLU.A.HUD:Boolean("R","Draw Ult CD", true)
SLU.A:Menu("CDT", "Cooldown Tracker")
SLU.A.CDT:Boolean("E", "Enabled",true)
SLU.A.CDT:Boolean("TE", "Track Enemies", true)
SLU.A.CDT:Boolean("TA", "Track Allies", true)
SLU.A:Menu("WT", "Ward Tracker")
SLU.A.WT:Boolean("E", "Enabled",true)
SLU.A.WT:Boolean("DS", "Draw on Screen", true)
SLU.A.WT:Boolean("DM", "Draw on Minimap", true)
SLU.A.WT:Boolean("TEW", "Track Enemy Wards", true)
SLU.A.WT:Boolean("TAW", "Track Ally Wards", false)
SLU.A.WT:DropDown("Cq", "Circle Quality", 3, {"High", "Medium", "Low"})
SLU.A.WT:Slider("Cw", "Circle Width", 1.5,0,3,0.5)
SLU.A:Menu("ME", "Missing Enemies")
SLU.A.ME:Boolean("E", "Enabled", true)
SLU.A.ME:Boolean("DT", "Draw Timer", true)
SLU.A.ME:Boolean("DI", "Draw Icon", true)
SLU.A.ME:Boolean("DC", "Draw Circle", true)
SLU.A.ME:Menu("DE", "Enable Draw for :")
DelayAction(function()
for _, i in pairs(GetEnemyHeroes()) do
SLU.A.ME.DE:Boolean("D"..i.charName, "Draw "..i.charName, true)
end
end,.001)
SLU.A:Menu("RT", "Recall Tracker")
SLU.A.RT:Boolean("E", "Enabled", true)
SLU.A.RT:Boolean("P", "Print", true)
SLU.A.RT:Boolean("DT", "Draw Timer", true)
SLU.A.RT:Boolean("DU", "Draw Unit pos", true)
if self.spells[myHero.charName] then
SLU.A.RT:Menu("U", "Base Ult : ")
SLU.A.RT:Boolean("ER", "Enable Base Ult", true)
DelayAction(function()
for _, i in pairs(GetEnemyHeroes()) do
SLU.A.RT.U:Boolean(i.charName, i.charName, true)
end
end,.001)
else
SLU.A.RT:Info("Rec", "Base Ult isnt supported for "..myHero.charName)
end
SLU.A:Menu("JT", "Jungle Tracker")
SLU.A.JT:Boolean("E", "Enabled", true)
SLU.A.JT:Boolean("TJ", "Track Enemy Jungler", true)
SLU.A.JT:Menu("ET", "Enable Timer for : ")
DelayAction(function()
for m,p in pairs(self.mobs) do
SLU.A.JT.ET:Boolean(m, m, true)
end
end,.001)
SLU.A:Menu("WPT", "WayPoint Tracker")
SLU.A.WPT:Boolean("E", "Enabled", true)
SLU.A.WPT:Boolean("TE", "Track Enemy Team", true)
SLU.A.WPT:Boolean("TA", "Track Ally Team ", true)
SLU.A.WPT:Boolean("TT", "Draw Timer", true)
SLU.A.WPT:Menu("T", "Enable Track for : ", true)
DelayAction(function()
for _,i in pairs(heroes) do
if not SLU.A.WPT.T[i.charName] then
SLU.A.WPT.T:Boolean(i.charName, i.charName, true)
end
end
if not SLU.A.WPT.T[myHero.charName] then
SLU.A.WPT.T:Boolean(myHero.charName, myHero.charName, true)
end
end,.001)
for _,i in pairs(GetEnemyHeroes()) do
self.E[i.networkID] = {u = i, l = 0, p = nil, p2 = nil, ms = 0, h = GetPercentHP(i), m = GetPercentMP(i)}
end
Callback.Add("Tick", function() self:Tk() end)
Callback.Add("CreateObj", function(o) self:CreO(o) end)
Callback.Add("DeleteObj", function(o) self:DelO(o) end)
Callback.Add("Draw", function() self:DrawScreen() end)
Callback.Add("DrawMinimap", function() self:draMin() end)
Callback.Add("UpdateBuff", function(u,b) self:UpdBuff(u,b) end)
Callback.Add("RemoveBuff", function(u,b) self:RemBuff(u,b) end)
Callback.Add("ProcessRecall", function(u,r) self:PrRe(u,r) end)
Callback.Add("ProcessWaypoint", function(u,wp) self:PrWp(u,wp) end)
DelayAction(function()
self:LoadSprites()
end,1)
self.DravenR = false
end
function Awareness:PrWp(u,wp)
if u and u.isHero and wp and wp.index == 1 and SLU.A.WPT.E:Value() and ((u.team == myHero.team and SLU.A.WPT.TA:Value()) or (u.team ~= myHero.team and SLU.A.WPT.TE:Value())) and SLU.A.WPT.T[u.charName] and SLU.A.WPT.T[u.charName]:Value() then
if not self.wp[u.networkID] then self.wp[u.networkID] = {} end
self.wp[u.networkID] = {u=u,wp=wp,pos=wp.position,s=GetTickCount(),d=(GetDistance(u,wp.position)/u.ms)}
for _,i in pairs(self.wp) do
if i.pos ~= wp.position and u == i.u then
self.wp[u.networkID] = nil
end
end
end
end
function Awareness:LoadSprites()
if not FileExist(SPRITE_PATH.."Champions\\Circle50\\Unknown.png") then
DownloadFileAsync("https://raw.githubusercontent.com/qqwer1/GoS-Lua/master/Sprites/RadarHack/miss.png", SPRITE_PATH.."Champions\\Circle50\\Unknown.png", function() end)
end
if not FileExist(SPRITE_PATH.."Champions\\Circle25\\Unknown.png") then
DownloadFileAsync("https://raw.githubusercontent.com/qqwer1/GoS-Lua/master/Sprites/RadarHack/miss.png", SPRITE_PATH.."Champions\\Circle25\\Unknown.png", function() end)
end
for _,i in pairs(self.E) do
if not FileExist(SPRITE_PATH.."Champions\\Circle50\\"..i.u.charName..".png") then
GetWebResultAsync("https://raw.githubusercontent.com/LoggeL/ChampSprites/master/Circle50/"..i.u.charName..".png", function (b)
DelayAction(function()
if b ~= "404: Not Found" then
DownloadFileAsync("https://raw.githubusercontent.com/LoggeL/ChampSprites/master/Circle50/"..i.u.charName..".png", SPRITE_PATH.."Champions\\Circle50\\"..i.u.charName..".png",
function()
DelayAction(function()
self.d[i.u.networkID] = Sprite("Champions\\Circle50\\"..i.u.charName..".png", 50, 50, 0, 0)
end,.1)
end)
else
self.d[i.u.networkID] = Sprite("Champions\\Circle50\\Unknown.png", 50, 50, 0, 0)
end
end,.1)
end)
else
self.d[i.u.networkID] = Sprite("Champions\\Circle50\\"..i.u.charName..".png", 50, 50, 0, 0)
end
if not FileExist(SPRITE_PATH.."Champions\\Circle25\\"..i.u.charName..".png") then
GetWebResultAsync("https://raw.githubusercontent.com/LoggeL/ChampSprites/master/Circle25/"..i.u.charName..".png", function (b)
DelayAction(function()
if b ~= "404: Not Found" then
DownloadFileAsync("https://raw.githubusercontent.com/LoggeL/ChampSprites/master/Circle25/"..i.u.charName..".png", SPRITE_PATH.."Champions\\Circle25\\"..i.u.charName..".png",
function()
DelayAction(function()
self.d2[i.u.networkID] = Sprite("Champions\\Circle25\\"..i.u.charName..".png", 25, 25, 0, 0)
end,.1)
end)
else
self.d2[i.u.networkID] = Sprite("Champions\\Circle25\\Unknown.png", 25, 25, 0, 0)
end
end,.1)
end)
else
self.d2[i.u.networkID] = Sprite("Champions\\Circle25\\"..i.u.charName..".png", 25, 25, 0, 0)
end
end
end
function Awareness:PrRe(u,r)
if u.team ~= myHero.team and r.isStart then
table.insert(self.R, {u = u, s = GetGameTimer(), d = (r.totalTime/1000),at=GetGameTimer() + (r.totalTime - r.passedTime)*.001})
self.offy = self.offy + 30
else
table.remove(self.R, 1)
end
if r.isFinish and u.team ~= myHero.team and u and r then
for _,i in pairs(self.E) do
if i.u and u.networkID == i.u.networkID and spawn then
i.p = WorldToMinimap(spawn.pos)
i.p2 = spawn.pos
i.l = GetGameTimer()
end
end
end
if u.team ~= myHero.team and u and r and SLU.A.RT.P:Value() and SLU.A.RT.E:Value() then
if r.isStart then
print(u.charName.."("..math.ceil(GetPercentHP(u)).."%) Started Recalling")
else
if r.isFinish then
print(u.charName.."("..math.ceil(GetPercentHP(u)).."%) Finished Recall")
else
print(u.charName.."("..math.ceil(GetPercentHP(u)).."%) Cancelled Recall")
end
end
end
end
function Awareness:UpdBuff(u,b)
if u and b then
if b.Name == "sightwardstealth" then
self.t = math.ceil((b.ExpireTime-b.StartTime)/10)
end
if u.isMe and b.Name == "DravenRDoublecast" then
self.DravenR = true
end
end
end
function Awareness:RemBuff(u,b)
if u and b then
if b.Name == "sightwardstealth" then
self.t = 0
end
if u.isMe and b.Name == "DravenRDoublecast" then
self.DravenR = false
end
end
end
function Awareness:GetDuration(t,i)
return math.ceil(t-(GetTickCount()-i.s)*.001)
end
function Awareness:CreO(o)
if o and o.networkID then
if o.name:lower():find("visionward") then
if ((o.team == myHero.team and SLU.A.WT.TAW:Value()) or (o.team ~= myHero.team and SLU.A.WT.TEW:Value())) then
table.insert(Wards,{o=o})
end
end
if o.name:lower():find("sightward") then
if ((o.team == myHero.team and SLU.A.WT.TAW:Value()) or (o.team ~= myHero.team and SLU.A.WT.TEW:Value())) then
table.insert(Wards2,{o=o,s=GetTickCount()})
end
end
end
end
function Awareness:DelO(o)
if o and o.networkID then
if o.name:lower():find("visionward") then
if ((o.team == myHero.team and SLU.A.WT.TAW:Value()) or (o.team ~= myHero.team and SLU.A.WT.TEW:Value())) then
for _,i in pairs(Wards) do
table.remove(Wards,_)
end
end
end
if o.name:lower():find("sightward") then
if ((o.team == myHero.team and SLU.A.WT.TAW:Value()) or (o.team ~= myHero.team and SLU.A.WT.TEW:Value())) then
for _,i in pairs(Wards2) do
table.remove(Wards2,_)
end
end
end
end
end
function Awareness:DrawScreen()
heroes[myHero.networkID] = nil
if SLU.A.HUD.E:Value() and SLU.A.HUD.DE:Value() then
local yOff = 0
for _,i in pairs(self.d) do
local h = math.floor(GetPercentHP(self.E[_].u))
local m = math.floor(GetPercentMP(self.E[_].u))
CircleSegment2(WINDOW_W * .9 + 25 ,WINDOW_H * .3 + 25 + yOff,20,34,315,423 ,GoS.Black)
if self.E[_].u.alive then
CircleSegment2(WINDOW_W * .9 + 25 ,WINDOW_H * .3 + 25 + yOff,22,27,320,320 + m,GoS.Blue)
CircleSegment2(WINDOW_W * .9 + 25 ,WINDOW_H * .3 + 25 + yOff,27,32,320,320 + h,ARGB(255,255-2.55*h,2.55*h,0))
end
i:Draw(WINDOW_W * .9 ,WINDOW_H * .3 + yOff, 50 ,50)
if self.E[_].u.dead then
CircleSegment2(WINDOW_W * .9 + 25 ,WINDOW_H * .3 + 25 + yOff,0,20,0,360,ARGB(50,0,0,0))
end
DrawText(h.."%",30,WINDOW_W * .9 + 75 ,WINDOW_H * .3 + 12.5 + yOff,ARGB(255,255-2.55*h,2.55*h,0))
yOff = yOff + 60
end
end
if SLU.A.WT.E:Value() and SLU.A.WT.DS:Value() then
for _,i in pairs(Wards) do
if i.o and i.o.valid then
if i.o.team ~= myHero.team and SLU.A.WT.TEW:Value() then
DrawCircle(i.o.pos,75,SLU.A.WT.Cw:Value(),SLU.A.WT.Cq:Value()*20,ARGB(255,242,2,222))
elseif i.o.team == myHero.team and SLU.A.WT.TAW:Value() then
DrawCircle(i.o.pos,75,SLU.A.WT.Cw:Value(),SLU.A.WT.Cq:Value()*20,ARGB(255,0,0,255))
end
end
end
for _,i in pairs(Wards2) do
if i.o and i.o.valid then
if i.o.team == myHero.team and SLU.A.WT.TAW:Value() then
DrawCircle(i.o.pos,75,SLU.A.WT.Cw:Value(),SLU.A.WT.Cq:Value()*20,ARGB(255,0,255,0))
elseif i.o.team ~= myHero.team and SLU.A.WT.TEW:Value() then
DrawCircle(i.o.pos,75,SLU.A.WT.Cw:Value(),SLU.A.WT.Cq:Value()*20,ARGB(255,255,0,0))
end
DrawTextSmall(self:GetDuration(self.t,i), WorldToScreen(0,i.o.pos).x, WorldToScreen(0,i.o.pos).y, GoS.White)
end
end
end
for _,i in pairs(self.R) do
if SLU.A.RT.E:Value() then
if i.s and i.u and i.d then
if SLU.A.RT.DT:Value() then
DrawText(i.u.charName.." - Recalled in : "..math.ceil(i.d - (GetGameTimer() - i.s)), 30,WorldToScreen(0,i.u.pos).x,WorldToScreen(0,i.u.pos).y,GoS.Yellow)
DrawText(i.u.charName.." - Recalled in : "..math.ceil(i.d - (GetGameTimer() - i.s)),20,20,self.offy-30,GoS.Yellow)
end
if SLU.A.RT.DU:Value() then
DrawCircle(i.u.pos, i.u.boundingRadius*1.5,1,20,GoS.Yellow)
end
end
end
end
if self.j and self.j.visible and self.j.alive and SLU.A.JT.E:Value() and SLU.A.JT.TJ:Value() then
if self.j.distance < 4000 and self.j.distance > 2000 then
DrawLine3D(myHero.pos.x, myHero.pos.y,myHero.pos.z, self.j.pos.x, self.j.pos.y,self.j.pos.z, 2, GoS.White)
elseif self.j.distance < 2000 then
DrawLine3D(myHero.pos.x, myHero.pos.y,myHero.pos.z, self.j.pos.x, self.j.pos.y,self.j.pos.z, 2, GoS.Red)
end
end
for _,i in pairs(self.wp) do
if self:GetDuration(i.d,i) ~= -0 and SLU.A.WPT.E:Value() and ((i.u.team == myHero.team and SLU.A.WPT.TA:Value()) or (i.u.team ~= myHero.team and SLU.A.WPT.TE:Value())) and SLU.A.WPT.T[i.u.charName] and SLU.A.WPT.T[i.u.charName]:Value() then
if i.u.team == myHero.team then
DrawLine(WorldToScreen(0,i.u.pos).x,WorldToScreen(0,i.u.pos).y,WorldToScreen(0,i.pos).x,WorldToScreen(0,i.pos).y,1,GoS.Blue)
else
DrawLine(WorldToScreen(0,i.u.pos).x,WorldToScreen(0,i.u.pos).y,WorldToScreen(0,i.pos).x,WorldToScreen(0,i.pos).y,1,GoS.Red)
end
if SLU.A.WPT.TT:Value() then
DrawText(self:GetDuration(i.d,i), 20,WorldToScreen(0,i.pos).x, WorldToScreen(0,i.pos).y, GoS.White)
end
else
self.wp[_] = nil
end
end
if SLU.A.CDT.E:Value() then
for _,i in pairs(heroes) do
if i.visible and i.alive and ((i.team == myHero.team and SLU.A.CDT.TA:Value()) or (i.team ~= myHero.team and SLU.A.CDT.TE:Value())) then
self:DrawCdTracker(i)
end
end
end
end
function Awareness:draMin()
if SLU.A.WT.E:Value() and SLU.A.WT.DM:Value() then
for _,i in pairs(Wards) do
if i.o and i.o.valid then
if i.o.team ~= myHero.team and SLU.A.WT.TEW:Value() then
DrawCircleMinimap(i.o.pos,350,SLU.A.WT.Cw:Value(),SLU.A.WT.Cq:Value()*20,ARGB(255,242,2,222))
elseif i.o.team == myHero.team and SLU.A.WT.TAW:Value() then
DrawCircleMinimap(i.o.pos,350,SLU.A.WT.Cw:Value(),SLU.A.WT.Cq:Value()*20,ARGB(255,0,0,255))
end
end
end
for _,i in pairs(Wards2) do
if i.o and i.o.valid then
if i.o.team == myHero.team and SLU.A.WT.TAW:Value() then
DrawCircleMinimap(i.o.pos,350,SLU.A.WT.Cw:Value(),SLU.A.WT.Cq:Value()*20,ARGB(255,0,255,0))
elseif i.o.team ~= myHero.team and SLU.A.WT.TEW:Value() then
DrawCircleMinimap(i.o.pos,350,SLU.A.WT.Cw:Value(),SLU.A.WT.Cq:Value()*20,ARGB(255,255,0,0))
end
end
end
end
for _,i in pairs(self.E) do
if SLU.A.ME.E:Value() and i.u and SLU.A.ME.DE["D"..i.u.charName]:Value() then
if i.u.visible and i.u.alive then
i.p = WorldToMinimap(i.u.pos)
i.p2 = i.u.pos
i.ms = i.u.ms
i.l = GetGameTimer()
elseif i.u.alive and i.l and i.ms and i.p2 and i.p and i.l and i.p2.x and i.p2.y and GetGameTimer()-i.l < 30 and (GetGameTimer()-i.l)*i.ms < 5000 then
if SLU.A.ME.DC:Value() then
if not i.u.visible and i.u.alive and SLU.A.ME.DI:Value() and self.d2[i.u.networkID] then
self.d2[i.u.networkID]:Draw(i.p.x-12,i.p.y-12,25,25)
end
DrawCircleMinimap(i.p2, (GetGameTimer()-i.l)*i.ms, 0, 0, ARGB(1.25*(20-GetGameTimer()-i.l),255,255,255))
end
if SLU.A.ME.DT:Value() then
DrawText(math.floor(GetGameTimer()-i.l),12,i.p.x,i.p.y, ARGB(255,255,255,255))
end
end
end
end
if self.j and self.j.alive and self.j.visible and SLU.A.JT.E:Value() and SLU.A.JT.TJ:Value() then
DrawCircleMinimap(self.j.pos, 350, 1, 20, GoS.Red)
DrawText("Jungler",12,WorldToMinimap(self.j.pos).x,WorldToMinimap(self.j.pos).y, ARGB(255,255,255,255))
end
for _, i in pairs(self.monsters) do
if i and i.s and not i.alive then
if i.pos then
if GetGameTimer()>i.st then
DrawText(self:GetDuration(i.d,i),12,WorldToMinimap(i.pos).x,WorldToMinimap(i.pos).y, ARGB(255,255,255,255))
end
end
end
end
end
function Awareness:Tk()
for _,i in pairs(self.wp) do
if GetDistance(i.pos) < 1 then
table.remove(self.wp,_)
end
end
for _, i in pairs(GetEnemyHeroes()) do
if GetCastName(i,SUMMONER_1):lower():find("summonersmite") then
self.j = i
elseif GetCastName(i,SUMMONER_2):lower():find("summonersmite") then
self.j = i
else
self.j = nil
end
end
for _,i in pairs(SLM) do
for k,p in pairs(self.mobs) do
if i.team == MINION_JUNGLE and k == i.charName and SLU.A.JT.ET[k]:Value() and SLU.A.JT.E:Value() then
if not self.monsters[i.networkID] then self.monsters[i.networkID] = {} end
self.monsters[i.networkID].pos = i.pos
if not i.alive then
self.monsters[i.networkID].i = i
self.monsters[i.networkID].s = GetTickCount()
self.monsters[i.networkID].d = p.d
self.monsters[i.networkID].st = p.s
end
end
end
end
for _,i in pairs(self.monsters) do
DelayAction(function() self.monsters[_] = nil end,i.d)
end
for _, i in pairs(self.spells) do
for k,p in pairs(self.R) do
if self.spells[myHero.charName] and p.u then
if p.at-(GetDistance(p.u.pos,spawn.pos)/i.s+i.d)-GetGameTimer()+GetLatency()*.001 < 0 and IsReady(i.sp) and SLU.A.RT.ER:Value() and SLU.A.RT.E:Value() and SLU.A.RT.U[p.u.charName]:Value() and not self.DravenR then
if p.u.health < self.spells[myHero.charName].dmg(p.u) and not self:Coll() then
CastSkillShot(i.sp,spawn.pos)
end
end
end
end
end
for _,i in pairs(heroes) do
if i and i.valid then
if not self.cd[i.charName] then self.cd[i.charName] = {} end
self.cd[i.charName] = {
[0] = i:GetSpellData(0),
[1] = i:GetSpellData(1),
[2] = i:GetSpellData(2),
[3] = i:GetSpellData(3),
[4] = i:GetSpellData(4),
[5] = i:GetSpellData(5),
}
end
end
end
function Awareness:DrawCdTracker(unit)
for i = 0,3 do
if unit then
local p = Vector(GetHPBarPos(unit).x,GetHPBarPos(unit).y+22.5,0):perpendicular()
local pos = p:perpendicular2()
DrawRectangle2(GetHPBarPos(unit).x, GetHPBarPos(unit).y+15 - 1, 110,6, 0xFF000000)
DrawLine(GetHPBarPos(unit).x+i*26,GetHPBarPos(unit).y+12.5,pos.x+i*26,pos.y,4,0xFF000000)
if self.cd[unit.charName] and self.cd[unit.charName][i] then
local k = self.cd[unit.charName][i]
if k and k.level > 0 then
if k.currentCd > 0 then
DrawLine(GetHPBarPos(unit).x+i*26,GetHPBarPos(unit).y+15,GetHPBarPos(unit).x+i*26+(GetCastCooldown(unit,i,GetCastLevel(unit,i)) - k.currentCd) / GetCastCooldown(unit,i,GetCastLevel(unit,i)) * 25,GetHPBarPos(unit).y+15,5, ARGB(255,255,0,0))
else
DrawLine(GetHPBarPos(unit).x+i*26,GetHPBarPos(unit).y+15,GetHPBarPos(unit).x+i*26+(GetCastCooldown(unit,i,GetCastLevel(unit,i)) - k.currentCd) / GetCastCooldown(unit,i,GetCastLevel(unit,i)) * 25,GetHPBarPos(unit).y+15,5, ARGB(255,0,255,0))
end
end
end
end
end
for i = 4,4 do
if unit then
if self.cd[unit.charName] and self.cd[unit.charName][i] then
local k = self.cd[unit.charName][i]
if k and k.level > 0 then
if k.currentCd > 0 then
DrawLine(GetHPBarPos(unit).x-26,GetHPBarPos(unit).y+i*2,GetHPBarPos(unit).x-26+(GetCastCooldown(unit,i,GetCastLevel(unit,i)) - k.currentCd) / GetCastCooldown(unit,i,GetCastLevel(unit,i)) * 25,GetHPBarPos(unit).y+i*2,5, ARGB(255,255,0,0))
else
DrawLine(GetHPBarPos(unit).x-26,GetHPBarPos(unit).y+i*2,GetHPBarPos(unit).x-26+(GetCastCooldown(unit,i,GetCastLevel(unit,i)) - k.currentCd) / GetCastCooldown(unit,i,GetCastLevel(unit,i)) * 25,GetHPBarPos(unit).y+i*2,5, ARGB(255,0,255,0))
end
if self.str[self.cd[unit.charName][i].name] then
DrawTextSmall(self.str[self.cd[unit.charName][i].name] ,GetHPBarPos(unit).x-48,GetHPBarPos(unit).y+i*3,GoS.White)
end
end
end
end
end
for i = 5,5 do
if unit then
if self.cd[unit.charName] and self.cd[unit.charName][i] then
local k = self.cd[unit.charName][i]
if k and k.level > 0 then
if k.currentCd > 0 then
DrawLine(GetHPBarPos(unit).x-26,GetHPBarPos(unit).y+i/2,GetHPBarPos(unit).x-26+(GetCastCooldown(unit,i,GetCastLevel(unit,i)) - k.currentCd) / GetCastCooldown(unit,i,GetCastLevel(unit,i)) * 25,GetHPBarPos(unit).y+i/2,5, ARGB(255,255,0,0))
else
DrawLine(GetHPBarPos(unit).x-26,GetHPBarPos(unit).y+i/2,GetHPBarPos(unit).x-26+(GetCastCooldown(unit,i,GetCastLevel(unit,i)) - k.currentCd) / GetCastCooldown(unit,i,GetCastLevel(unit,i)) * 25,GetHPBarPos(unit).y+i/2,5, ARGB(255,0,255,0))
end
if self.str[self.cd[unit.charName][i].name] then
DrawTextSmall(self.str[self.cd[unit.charName][i].name] ,GetHPBarPos(unit).x-48,GetHPBarPos(unit).y+i/3,GoS.White)
end
end
end
end
end
end
function Awareness:Coll()
for m,p in pairs(GetEnemyHeroes()) do
if p and p.alive and self.spells[myHero.charName].c and self.spells[myHero.charName].w and myHero.alive and spawn then
local vP = VectorPointProjectionOnLineSegment(Vector(myHero.pos),Vector(spawn.pos),Vector(p.pos))
if vP and GetDistance(vP,p.pos) < (self.spells[myHero.charName].w+p.boundingRadius) then
return true
end
end
end
return false
end
class 'Reallifeinfo'
function Reallifeinfo:__init()
SLU:Menu("Date", "Real life info")
SLU.Date:Menu("DDA", "Draw Date")
SLU.Date.DDA:Boolean("DrawDate", "Draw Current Date", true)
SLU.Date.DDA:Slider("Horizontal", "Horizontal (Drawings)", GetResolution().x*.9, 0, GetResolution().x, 10)
SLU.Date.DDA:Slider("Vertical", "Vertical (Drawings)", 60, 0, GetResolution().y, 10)
SLU.Date.DDA:ColorPick("ColorPick", "Color Pick - Date", {255,226,255,18})
SLU.Date:Menu("DD", "Draw Day")
SLU.Date.DD:Boolean("DrawDay", "Draw Current Day", false)
SLU.Date.DD:Slider("Horizontal", "Horizontal (Drawings)", GetResolution().x*.9, 0, GetResolution().x, 10)
SLU.Date.DD:Slider("Vertical", "Vertical (Drawings)", 140, 0, GetResolution().y, 10)
SLU.Date.DD:ColorPick("ColorPick", "Color Pick - Day", {255,226,255,18})
SLU.Date:Menu("DM", "Draw Month")
SLU.Date.DM:Boolean("DrawMonth", "Draw Current Month", false)
SLU.Date.DM:Slider("Horizontal", "Horizontal (Drawings)", GetResolution().x*.9, 0, GetResolution().x, 10)
SLU.Date.DM:Slider("Vertical", "Vertical (Drawings)", 100, 0, GetResolution().y, 10)
SLU.Date.DM:ColorPick("ColorPick", "Color Pick - Month", {255,226,255,18})
SLU.Date:Menu("DY", "Draw Year")
SLU.Date.DY:Boolean("DrawYear", "Draw Current Year", false)
SLU.Date.DY:Slider("Horizontal", "Horizontal (Drawings)", GetResolution().x*.9, 0, GetResolution().x, 10)
SLU.Date.DY:Slider("Vertical", "Vertical (Drawings)", 120, 0, GetResolution().y, 10)
SLU.Date.DY:ColorPick("ColorPick", "Color Pick - Year", {255,226,255,18})
SLU.Date:Menu("DT", "Draw Time")
SLU.Date.DT:Boolean("DrawTime", "Draw Current Time", true)
SLU.Date.DT:Slider("Horizontal", "Horizontal (Drawings)", GetResolution().x*.9, 0, GetResolution().x, 10)
SLU.Date.DT:Slider("Vertical", "Vertical (Drawings)", 80, 0, GetResolution().y, 10)
SLU.Date.DT:ColorPick("ColorPick", "Color Pick - Time", {255,226,255,18})
Callback.Add("Draw", function() self:EnableDraw() end)
end
function Reallifeinfo:EnableDraw()
if SLU.Date.DD.DrawDay:Value() then
DrawText("Current Day : "..os.date("%A"), 15, SLU.Date.DD.Horizontal:Value(), SLU.Date.DD.Vertical:Value(), SLU.Date.DD.ColorPick:Value())
end
if SLU.Date.DDA.DrawDate:Value() then
DrawText("Current Date : "..os.date("%x", os.time()), 15, SLU.Date.DDA.Horizontal:Value(), SLU.Date.DDA.Vertical:Value(), SLU.Date.DDA.ColorPick:Value())
end
if SLU.Date.DM.DrawMonth:Value() then
DrawText("Current Month : "..os.date("%B"), 15, SLU.Date.DM.Horizontal:Value(), SLU.Date.DM.Vertical:Value(), SLU.Date.DM.ColorPick:Value())
end
if SLU.Date.DY.DrawYear:Value() then
DrawText("Current Year : "..os.date("%Y"), 15, SLU.Date.DY.Horizontal:Value(), SLU.Date.DY.Vertical:Value(), SLU.Date.DY.ColorPick:Value())
end
if SLU.Date.DT.DrawTime:Value() then
DrawText("Current Time : "..os.date("*t").hour.." : "..os.date("*t").min.." : "..os.date("*t").sec, 15, SLU.Date.DT.Horizontal:Value(), SLU.Date.DT.Vertical:Value(), SLU.Date.DT.ColorPick:Value())
end
end
class 'WardJump'
function WardJump:__init()
self.items = {
{id = 2045,stack = true},
{id = 2049,stack = true},
{id = 2044,stack = true},
{id = 3340,stack = true},
}
SLU:SubMenu("WJ","Ward Jump")
SLU.WJ:Key("k", "Ward Jump Key", string.byte("T"))
self.champtable = {["Katarina"] = 2, ["Jax"] = 0 }
self.slot = nil
self.casted = false
self.wardpos = nil
self.wardpos2 = nil
self.stack = false
self.wards = {}
Callback.Add("Tick", function() self:Tick() end)
Callback.Add("CreateObj", function(o) self:CretO(o) end)
end
function WardJump:GetBestWardPos()
if GetDistance(GetMousePos()) < 600 then
self.wardpos = Vector(myHero)+Vector(Vector(GetMousePos())-myHero):normalized()*GetDistance(GetMousePos())
self.wardpos2 = Vector(myHero)+Vector(Vector(GetMousePos())-myHero):normalized():perpendicular()*GetDistance(GetMousePos())
else
self.wardpos = Vector(myHero)+Vector(Vector(GetMousePos())-myHero):normalized()*600
self.wardpos2 = Vector(myHero)+Vector(Vector(GetMousePos())-myHero):normalized():perpendicular()*600
end
if MapPosition:inWall(self.wardpos) then
return self.wardpos2
else
return self.wardpos
end
end
function WardJump:GetJumpSlot()
if myHero.charName ~= "LeeSin" then
return self.champtable[myHero.charName]
else
if GetCastName(myHero,1) ~= "blindmonkwtwo" then
return 1
end
end
return nil
end
function WardJump:Tick()
if self:GetJumpSlot() then
for _,i in pairs(self.items) do
if GetItemSlot(myHero,i.id) > 0 and IsReady(GetItemSlot(myHero,i.id)) then
self.slot = GetItemSlot(myHero,i.id)
self.stack = i.stack
end
end
if self.slot and SLU.WJ.k:Value() and (not self.stack or GetItemAmmo(myHero,GetItemSlot(myHero,self.slot))>=1) and not self.casted and IsReady(self:GetJumpSlot()) then
self.casted = true
CastSkillShot(self.slot,self:GetBestWardPos())
DelayAction(function()
self.casted = false
end,1)
end
for _,i in pairs(self.wards) do
if i and GetDistance(i.o,GetMousePos()) < 500 and self.casted then
DelayAction(function()
CastTargetSpell(i.o,self:GetJumpSlot())
end,.001)
end
end
if SLU.WJ.k:Value() then
MoveToXYZ(GetMousePos())
end
end
end
function WardJump:CretO(o)
if o and o.networkID then
if o.name:lower():find("visionward") then
if o.team == myHero.team then
if not self.wards[o.networkID] then self.wards[o.networkID] = {} end
self.wards[o.networkID] = {o=o}
DelayAction(function()
self.wards[o.networkID] = nil
end,1)
end
end
if o.name:lower():find("sightward") then
if o.team == myHero.team then
if not self.wards[o.networkID] then self.wards[o.networkID] = {} end
self.wards[o.networkID] = {o=o}
DelayAction(function()
self.wards[o.networkID] = nil
end,1)
end
end
end
end
class 'AutoLevel'
function AutoLevel:__init()
SLU:SubMenu(myHero.charName.."AL", "Auto Level")
SLU[myHero.charName.."AL"]:Boolean("aL", "Use AutoLvl", false)
SLU[myHero.charName.."AL"]:DropDown("aLS", "AutoLvL", 1, {"Q-W-E","Q-E-W","W-Q-E","W-E-Q","E-Q-W","E-W-Q"})
SLU[myHero.charName.."AL"]:Slider("sL", "Start AutoLvl with LvL x", 4, 1, 18, 1)
SLU[myHero.charName.."AL"]:Boolean("hL", "Humanize LvLUP", true)
SLU[myHero.charName.."AL"]:Slider("hT", "Humanize min delay", .5, 0, 1, .1)
SLU[myHero.charName.."AL"]:Slider("hF", "Humanize time frame", .2, 0, .5, .1)
--AutoLvl
self.lTable={
[1] = {_Q,_W,_E,_Q,_Q,_R,_Q,_W,_Q,_W,_R,_W,_W,_E,_E,_R,_E,_E},
[2] = {_Q,_E,_W,_Q,_Q,_R,_Q,_E,_Q,_E,_R,_E,_E,_W,_W,_R,_W,_W},
[3] = {_W,_Q,_E,_W,_W,_R,_W,_Q,_W,_Q,_R,_Q,_Q,_E,_E,_R,_E,_E},
[4] = {_W,_E,_Q,_W,_W,_R,_W,_E,_W,_E,_R,_E,_E,_Q,_Q,_R,_Q,_Q},
[5] = {_E,_Q,_W,_E,_E,_R,_E,_Q,_E,_Q,_R,_Q,_Q,_W,_W,_R,_W,_W},
[6] = {_E,_W,_Q,_E,_E,_R,_E,_W,_E,_W,_R,_W,_W,_Q,_Q,_R,_Q,_Q},
}
Callback.Add("Tick", function() self:Do() end)
end
function AutoLevel:Do()
if SLU[myHero.charName.."AL"].aL:Value() and GetLevelPoints(myHero) >= 1 and GetLevel(myHero) >= SLU[myHero.charName.."AL"].sL:Value() then
if SLU[myHero.charName.."AL"].hL:Value() then
DelayAction(function() LevelSpell(self.lTable[SLU[myHero.charName.."AL"].aLS:Value()][GetLevel(myHero)-GetLevelPoints(myHero)+1]or nil) end, math.random(SLU[myHero.charName.."AL"].hT:Value(),SLU[myHero.charName.."AL"].hT:Value()+SLU[myHero.charName.."AL"].hF:Value()))
else
LevelSpell(self.lTable[SLU[myHero.charName.."AL"].aLS:Value()][GetLevel(myHero)-GetLevelPoints(myHero)+1]or nil)
end
end
end
class 'SkinChanger'
function SkinChanger:__init()
SLU:SubMenu("S", "SkinChanger")
SLU.S:Boolean("uS", "Use Skin", true)
SLU.S:Slider("sV", "Skin Number", 0, 0, 15, 1)
local cSkin = 0
Callback.Add("Tick", function() self:Change() end)
end
function SkinChanger:Change()
if SLU.S.uS:Value() and SLU.S.sV:Value() ~= cSkin then
HeroSkinChanger(myHero,SLU.S.sV:Value())
cSkin = SLU.S.sV:Value()
elseif not SLU.S.uS:Value() and cSkin ~= 0 then
HeroSkinChanger(myHero,0)
cSkin = 0
end
end
--Activator
class 'Activator'
function Activator:__init()
self.ShopPos = nil
self.badPot = false
self.cc = {}
Ignite = (GetCastName(GetMyHero(),SUMMONER_1):lower():find("summonerdot") and SUMMONER_1 or (GetCastName(GetMyHero(),SUMMONER_2):lower():find("summonerdot") and SUMMONER_2 or nil))
Heal = (GetCastName(GetMyHero(),SUMMONER_1):lower():find("summonerheal") and SUMMONER_1 or (GetCastName(GetMyHero(),SUMMONER_2):lower():find("summonerheal") and SUMMONER_2 or nil))
Snowball = (GetCastName(GetMyHero(),SUMMONER_1):lower():find("summonersnowball") and SUMMONER_1 or (GetCastName(GetMyHero(),SUMMONER_2):lower():find("summonersnowball") and SUMMONER_2 or nil))
Barrier = (GetCastName(GetMyHero(),SUMMONER_1):lower():find("summonerbarrier") and SUMMONER_1 or (GetCastName(GetMyHero(),SUMMONER_2):lower():find("summonerbarrier") and SUMMONER_2 or nil))
Smite = (GetCastName(myHero,4):lower():find("smite") and 4) or (GetCastName(myHero,5):lower():find("smite") and 5) or nil
self.smiteD = {390, 410, 430, 450, 480, 510, 540, 570, 600, 640, 680, 720, 760, 800, 850, 900, 950, 1000}
self.s1 = {}
self.s2 = {}
self.EpicJgl = {["SRU_Baron"]="Baron", ["SRU_Dragon"]="Dragon", ["TT_Spiderboss"]="Vilemaw"}
self.BigJgl = {["SRU_Red"]="Red Buff", ["SRU_Blue"]="Blue Buff", ["SRU_Krug"]="Krugs", ["SRU_Murkwolf"]="Wolves", ["SRU_Razorbeak"]="Razor", ["SRU_Gromp"]="Gromp", ["Sru_Crab"]="Scuttles"}
Snowballd = { delay = 0.25, range = 1600, speed = 1200, width = 50 }
self.CCType = {
[5] = "Stun",
[8] = "Taunt",
[11] = "Snare",
[21] = "Fear",
[22] = "Charm",
[24] = "Suppression",
}
self.PAC = { --PointAndClick
[3144] = {Name = "Cutlass", Range = 550},
[3153] = {Name = "BotrK", Range = 550},
[3146] = {Name = "Gunblade", Range = 700},
}
self.RS = { --RangeSelfcast
[3142] = {Name = "Ghostblade", Range = 700},
[3800] = {Name = "Righteous Glory", Range = 700},
[3092] = {Name = "Frost Queen", Range = 700},
[3143] = {Name = "Randuins", Range = 500},
[3069] = {Name = "Talisman", Range = 700},
}
self.AA = { --AAReset
[3077] = {Name = "Tiamat"},
[3074] = {Name = "Ravenous Hydra"},
[3748] = {Name = "Titanic Hydra"},
}
self.CC = { --QSS
[3140] = {Name = "QSS"},
[3137] = {Name = "Dervish Blade"},
[3139] = {Name = "Mercurial Scimitar"},
[3222] = {Name = "Crucible", Allies = true},
}
self.Da = { --dash
[3152] = {Name = "Protobelt"}
}
self.Sks = { --skillshot
[3030] = {Name = "Hextech GLP 800"}
}
self.SU = { --Shield Units
[3190] = {Name = "Locket", Range = 600},
[3401] = {Name = "Face of the Mountain", Range = 600},
}
self.HP = { --HealthPots
[2003] = {Name = "Health Potion", Stack = false},
[2031] = {Name = "Refillable Potion", Stack = true},
[2032] = {Name = "Hunters Potion", Stack = true},
[2033] = {Name = "Corruption Potion", Stack = true},
}
--self.CP
self.SI = { --Stasis
--[3157] = {Name = "Hourglass"},
--[3090] = {Name = "Wooglets"},
}
M:Info("xxx","Items appear here as you buy")
M:SubMenu("Sum", "Summoners")
if Ignite then
M.Sum:Menu("ign", "Ignite")
M.Sum.ign:Boolean("enable","Enable Ignite", true)
end
if Heal then
M.Sum:Menu("Heal", "Heal")
M.Sum.Heal:Boolean("healme","Heal myself", true)
M.Sum.Heal:Boolean("healally", "Heal ally", true)
M.Sum.Heal:Slider("allyHP", "Ally HP to heal him", 8, 1, 100, 2)
M.Sum.Heal:Slider("myHP", "my HP to heal myself", 8, 1, 100, 2)
end
if Snowball then
M.Sum:Menu("SB", "Snowball")
M.Sum.SB:Boolean("enable", "Enable Snowball", false)
end
if Barrier then
M.Sum:Menu("Barrier", "Barrier")
M.Sum.Barrier:Boolean("enable","Use Barrier", true)
M.Sum.Barrier:Slider("myHP", "my HP to use Barrier", 8, 1, 100, 2)
end
if Smite then
M.Sum:Menu("Smite", "Smite")
M.Sum.Smite:Boolean("E","Enable", true)
M.Sum.Smite:SubMenu("M","Epic Mobs")
M.Sum.Smite:SubMenu("B","Big Mobs")
M.Sum.Smite:Boolean("K", "Killsteal", true)
M.Sum.Smite:Boolean("F", "Fast Smite", true)
for _,i in pairs(self.EpicJgl) do
M.Sum.Smite.M:Boolean(_,i,true)
end
for _,i in pairs(self.BigJgl) do
M.Sum.Smite.B:Boolean(_,i,false)
end
end
Callback.Add("Tick", function() self:Tickpx() end)
Callback.Add("UpdateBuff", function(unit, buff) self:UBuff(unit, buff) end)
Callback.Add("RemoveBuff", function(unit, buff) self:RBuff(unit, buff) end)
Callback.Add("CreateObj", function (Object) self:Shop(Object) end)
Callback.Add("ProcessSpellComplete", function (unit, spellProc) self:SpellsComplete(unit, spellProc) end)
Callback.Add("Draw", function() if Smite then self:Draw() end end)
end
function Activator:Tickpx()
self:Check()
if myHero.dead then return end
self:Use(GetCurrentTarget())
if Ignite then
self:Ignite()
end
if Heal then
self:Heal()
end
if Snowball then
self:Snowball()
end
if Barrier then
self:Barrier()
end
if Smite then
self:Smite()
end
end
function Activator:Shop(obj)
if GetObjectBaseName(obj):lower():find("shop") and GetDistance(obj,myHero)<2000 then
self.ShopPos = GetOrigin(obj)
end
end
function Activator:Check()
--print(self.badPot)
if (not self.ShopPos or GetDistance(myHero,self.ShopPos) <= 1500) or myHero.dead then
for i,c in pairs(self.PAC) do
if GetItemSlot(myHero,i)>0 then
if not c.State and not M[c.Name] then
M:Menu(c.Name,c.Name)
M[c.Name]:Boolean("u","Use "..c.Name,true)
M[c.Name]:Slider("hp","%EnemyHp to use", 100, 10, 100, 5)
end
c.State = true
else
c.State = false
end
end
for i,c in pairs(self.RS) do
if GetItemSlot(myHero,i)>0 then
if not c.State and not M[c.Name] then
M:Menu(c.Name,c.Name)
M[c.Name]:Boolean("u","Use "..c.Name,true)
M[c.Name]:Slider("r","Range to use", c.Range, 200, 1500, 50)
M[c.Name]:Slider("hp","%EnemyHp to use", 100, 10, 100, 5)
end
c.State = true
else
c.State = false
end
end
for i,c in pairs(self.CC) do
if GetItemSlot(myHero,i)>0 then
if not c.State and not M[c.Name] then
M:Menu(c.Name,c.Name)
M[c.Name]:Boolean("u","Use "..c.Name,true)
for n,m in pairs(self.CCType) do
M[c.Name]:Boolean("i"..n,"Cleanse "..m, true)
end
if c.Allies then
for _,l in pairs(GetAllyHeroes()) do
M[c.Name]:Boolean(GetObjectName(l),"Cleanse for "..GetObjectName(l), true)
end
end
end
c.State = true
else
c.State = false
end
end
for i,c in pairs(self.AA) do
if GetItemSlot(myHero,i)>0 then
if not c.State and not M[c.Name] then
M:Menu(c.Name,c.Name)
M[c.Name]:Boolean("u","Use "..c.Name,true)
M[c.Name]:Slider("hp","%EnemyHp to use", 100, 10, 100, 5)
end
c.State = true
else
c.State = false
end
end
for i,c in pairs(self.Da) do
if GetItemSlot(myHero,i)>0 then
if not c.State and not M[c.Name] then
M:Menu(c.Name,c.Name)
M[c.Name]:Boolean("u","Use "..c.Name,true)
M[c.Name]:Slider("hp","%EnemyHp to use", 100, 10, 100, 5)
M[c.Name]:DropDown("m", "Mode", 2, {"Mousepos","Sideways","Target"})
end
c.State = true
else
c.State = false
end
end
for i,c in pairs(self.Sks) do
if GetItemSlot(myHero,i)>0 then
if not c.State and not M[c.Name] then
M:Menu(c.Name,c.Name)
M[c.Name]:Boolean("u","Use "..c.Name,true)
M[c.Name]:Slider("hp","%EnemyHp to use", 100, 10, 100, 5)
end
c.State = true
else
c.State = false
end
end
for i,c in pairs(self.SU) do
if GetItemSlot(myHero,i)>0 then
if not c.State and not M[c.Name] then
M:Menu(c.Name,c.Name)
M[c.Name]:Boolean("u","Use "..c.Name,true)
M[c.Name]:Slider("hp","Use at % HP", 10, 2, 80, 2)
M[c.Name]:Boolean("self","Shield self" ,true)
DelayAction(function()
for _,l in pairs(GetAllyHeroes()) do
M[c.Name]:Boolean(GetObjectName(l),"Shield "..GetObjectName(l), true)
end
end,.001)
end
c.State = true
else
c.State = false
end
end
for i,c in pairs(self.HP) do
if GetItemSlot(myHero,i)>0 then
if not c.State and not M[c.Name] then
M:Menu(c.Name,c.Name)
M[c.Name]:Boolean("u", "Use "..c.Name,true)
M[c.Name]:Slider("hp","Use at % HP", 10, 2, 80, 2)
end
c.State = true
else
c.State = false
end
end
end
end
function Activator:Use(target)
if Mode == "Combo" then
for i,c in pairs(self.PAC) do
if c.State and CanUseSpell(myHero,GetItemSlot(myHero,i)) and M[c.Name].u:Value() and ValidTarget(target,c.Range) and GetPercentHP(target) <= M[c.Name].hp:Value() then
CastTargetSpell(target,GetItemSlot(myHero,i))
end
end
for i,c in pairs(self.RS) do
if c.State and CanUseSpell(myHero,GetItemSlot(myHero,i)) and M[c.Name].u:Value() and ValidTarget(target,M[c.Name].r:Value()) and GetPercentHP(target) <= M[c.Name].hp:Value() then
CastSpell(GetItemSlot(myHero,i))
end
end
end
for i,c in pairs(self.SU) do
if c.State and CanUseSpell(myHero,GetItemSlot(myHero,i)) and M[c.Name].u:Value() then
if M[c.Name].self:Value() and GetPercentHP(myHero) <= M[c.Name].hp:Value() and EnemiesAround(myHero,700)>=1 then
CastSpell(GetItemSlot(myHero,i))
else
for _,n in pairs(GetAllyHeroes()) do
if M[c.Name][GetObjectName(n)] and M[c.Name][GetObjectName(n)]:Value() and GetPercentHP(n) <= M[c.Name].hp:Value() and EnemiesAround(n,700)>=1 and GetDistance(myHero,n)<600 then
CastTargetSpell(n,(GetItemSlot(myHero,i)))
end
end
end
end
end
for i,c in pairs(self.Sks) do
if c.State and CanUseSpell(myHero,GetItemSlot(myHero,i)) and M[c.Name].u:Value() and ValidTarget(target,c.Range) and GetPercentHP(target) <= M[c.Name].hp:Value() then
CastSkillShot(GetItemSlot(myHero,i),GetOrigin(target))
end
end
for i,c in pairs(self.Da) do
if c.State and CanUseSpell(myHero,GetItemSlot(myHero,i)) and M[c.Name].u:Value() and ValidTarget(target,c.Range) and GetPercentHP(target) <= M[c.Name].hp:Value() and M[c.Name].m:Value() == 1 then
CastSkillShot(GetItemSlot(myHero,i),GetMousePos())
elseif c.State and CanUseSpell(myHero,GetItemSlot(myHero,i)) and M[c.Name].u:Value() and ValidTarget(target,c.Range) and GetPercentHP(target) <= M[c.Name].hp:Value() and M[c.Name].m:Value() == 2 then
local position = Vector(target) - (Vector(target) - Vector(myHero)):perpendicular():normalized() * ( GetDistance(myHero,target) * 1.2 )
CastSkillShot(GetItemSlot(myHero,i),position)
elseif c.State and CanUseSpell(myHero,GetItemSlot(myHero,i)) and M[c.Name].u:Value() and ValidTarget(target,c.Range) and GetPercentHP(target) <= M[c.Name].hp:Value() and M[c.Name].m:Value() == 3 then
CastSkillShot(GetItemSlot(myHero,i),GetOrigin(target))
end
end
for i,c in pairs(self.HP) do
if c.State and CanUseSpell(myHero,GetItemSlot(myHero,i)) and M[c.Name].u:Value() and GetPercentHP(myHero) <= M[c.Name].hp:Value() and (not c.Stack or GetItemAmmo(myHero,GetItemSlot(myHero,i))>=1) and not self.badPot then
CastSpell(GetItemSlot(myHero,i))
end
end
for i,c in pairs(self.CC) do
if c.State and CanUseSpell(myHero,GetItemSlot(myHero,i)) and M[c.Name].u:Value() then
if c.Allies then
for _,n in pairs(GetAllyHeroes()) do
if self.cc[GetObjectName(n)] and GetDistance(myHero,n)<600 and M[c.Name][GetObjectName(n)]:Value() then
CastTargetSpell(n,GetItemSlot(myHero,i))
end
end
elseif self.cc[GetObjectName(myHero)] then
CastSpell(GetItemSlot(myHero,i))
end
end
end
end
function Activator:Ignite()
for _,k in pairs(GetEnemyHeroes()) do
if M.Sum.ign.enable:Value() and IsReady(Ignite) and not k.dead then
if 20*GetLevel(myHero)+50 > GetCurrentHP(k)+GetHPRegen(k)*3 and ValidTarget(k, 600) then
CastTargetSpell(k, Ignite)
end
end
end
end
function Activator:Heal()
if IsReady(Heal) and M.Sum.Heal.healme:Value() and GetPercentHP(myHero) <= M.Sum.Heal.myHP:Value() and EnemiesAround(GetOrigin(myHero), 675) >= 1 and not myHero.dead then
CastSpell(Heal)
end
for _,a in pairs(GetAllyHeroes()) do
if a and IsReady(Heal) and M.Sum.Heal.healally:Value() and GetPercentHP(a) <= M.Sum.Heal.allyHP:Value() and EnemiesAround(GetOrigin(myHero), 675) >= 1 and GetDistance(myHero,a) < 675 and not a.dead then
CastSpell(Heal)
end
end
end
function Activator:Snowball()
for _,unit in pairs(GetEnemyHeroes()) do
local Pred = GetPredictionForPlayer(myHero.pos,unit,unit.ms, Snowballd.speed, Snowballd.delay*1000, Snowballd.range, Snowballd.width, true, true)
if IsReady(Snowball) and M.Sum.SB.enable:Value() and Pred and Pred.HitChance == 1 and GetDistance(Pred.PredPos,GetOrigin(myHero)) < Snowballd.range and not unit.dead then
CastSkillShot(Snowball,Pred.PredPos)
end
end
end
function Activator:Barrier()
if IsReady(Barrier) and M.Sum.Barrier.enable:Value() and GetPercentHP(myHero) <= M.Sum.Barrier.myHP:Value() and EnemiesAround(GetOrigin(myHero), 675) >= 1 and not myHero.dead then
CastSpell(Barrier)
end
end
function Activator:Smite()
if M.Sum.Smite.E:Value() then
for _,i in pairs(SLM) do
if (self.EpicJgl[i.charName] and M.Sum.Smite.M[i.charName]) or (self.BigJgl[i.charName] and M.Sum.Smite.B[i.charName]) or (i.charName:lower():find("dragon") and M.Sum.Smite.M["SRU_Dragon"]:Value()) then
self.s1[i.charName] = i
end
end
if M.Sum.Smite.K:Value() and GetCastName(myHero,Smite) == "S5_SummonerSmitePlayerGanker" then
for _,i in pairs(GetEnemyHeroes()) do
if i.valid and i.distance < 675 and i.health-GetDamagePrediction(i,(GetAttackSpeed(myHero)*GetBaseAttackSpeed(myHero))-i.distance/math.huge) < 20 + 8*myHero.level then
CastTargetSpell(i,Smite)
end
end
end
for _,i in pairs(self.s1) do
if i.valid and i.distance < 1000 and ((M.Sum.Smite.B[_] and M.Sum.Smite.B[_]:Value()) or (M.Sum.Smite.M[_] and M.Sum.Smite.M[_]:Value()) or (_:find("Dragon") and M.Sum.Smite.M["SRU_Dragon"])) then
self.s2[_] = i
else
self.s2[_] = nil
end
end
if IsReady(Smite) and not M.Sum.Smite.F:Value() then
for _,i in pairs(self.s2) do
if i.health-GetDamagePrediction(i,(GetAttackSpeed(myHero)*GetBaseAttackSpeed(myHero))-i.distance/math.huge) < self.smiteD[myHero.level] and i.distance <= 675 then
DelayAction(function()
CastTargetSpell(i,Smite)
end,GetLatency()/100)
end
end
end
end
end
function Activator:Draw()
if M.Sum.Smite.F:Value() and IsReady(Smite) then
for _,i in pairs(self.s2) do
if i.health-GetDamagePrediction(i,(GetAttackSpeed(myHero)*GetBaseAttackSpeed(myHero))-i.distance/math.huge) < self.smiteD[myHero.level] and i.distance < 675 then
CastTargetSpell(i,Smite)
end
end
end
end
function Activator:SpellsComplete(unit, spellProc)
if unit == myHero and spellProc.name:lower():find("attack") and (Mode == "Combo" or Mode == "LaneClear") then
for i,c in pairs(self.AA) do
if c.State and CanUseSpell(myHero,GetItemSlot(myHero,i)) and M[c.Name].u:Value() and GetPercentHP(spellProc.target) <= M[c.Name].hp:Value() then
CastSpell(GetItemSlot(myHero,i))
AttackUnit(spellProc.target)
end
end
elseif unit == myHero and spellProc.name:lower():find("recall") then
self.badPot = true
DelayAction(function () self.badPot = false end, 15)
end
end
function Activator:UBuff(unit,buffProc)
if unit == myHero and buffProc.Name:lower():find("recall") then
self.badPot = true
elseif GetTeam(unit) == MINION_ALLY then
for i,c in pairs(self.CC) do
if M[c.Name] and c.State and CanUseSpell(myHero,GetItemSlot(myHero,i)) and M[c.Name].u:Value() and M[c.Name]["i"..buffProc.Type] and M[c.Name]["i"..buffProc.Type]:Value() then
self.cc[GetObjectName(unit)] = true
end
end
end
if unit == myHero and buffProc.Name:lower():find("potion") or buffProc.Name:lower():find("crystalflask") then
self.badPot = true
DelayAction(function() self.badPot = false end,
buffProc.ExpireTime-GetGameTimer())
end
end
function Activator:RBuff(unit,buffProc)
if unit == myHero and buffProc.Name:lower():find("recall") and GetDistance(GetOrigin(myHero),self.ShopPos)>1000 then
self.badPot = false
elseif GetTeam(unit) == MINION_ALLY then
for i,c in pairs(self.CC) do
if M[c.Name] and M[c.Name].u:Value() and M[c.Name]["i"..buffProc.Type] and M[c.Name]["i"..buffProc.Type]:Value() then
self.cc[GetObjectName(unit)] = false
end
end
end
end
class 'SLWalker'
function SLWalker:__init()
self.aarange = 0
self.attacksEnabled = true
self.movementEnabled = true
self.forcePos = nil
self.forceTarget = nil
self.rangebuffer = {["KogMaw"]={r=0,b="KogMawBioArcaneBarrage"}}
self.str = {[0]="Q",[1]="W",[2]="E",[3]="R"}
self.LastAttack = 0
self.windUpTime = 0
self.animationTime = 0
self.AttackDoneAt = 0
self.BaseWindUp = 1
self.BaseAttackSpeed = 1
self.LastMoveOrder = 0
self.AA = {}
self.projectilespeeds = {["Velkoz"]= 2000,["TeemoMushroom"] = math.huge,["TestCubeRender"] = math.huge ,["Xerath"] = 2000.0000 ,["Kassadin"] = math.huge ,["Rengar"] = math.huge ,["Thresh"] = 1000.0000 ,["Ziggs"] = 1500.0000 ,["ZyraPassive"] = 1500.0000 ,["ZyraThornPlant"] = 1500.0000 ,["KogMaw"] = 1800.0000 ,["HeimerTBlue"] = 1599.3999 ,["EliseSpider"] = 500.0000 ,["Skarner"] = 500.0000 ,["ChaosNexus"] = 500.0000 ,["Katarina"] = 467.0000 ,["Riven"] = 347.79999 ,["SightWard"] = 347.79999 ,["HeimerTYellow"] = 1599.3999 ,["Ashe"] = 2000.0000 ,["VisionWard"] = 2000.0000 ,["TT_NGolem2"] = math.huge ,["ThreshLantern"] = math.huge ,["TT_Spiderboss"] = math.huge ,["OrderNexus"] = math.huge ,["Soraka"] = 1000.0000 ,["Jinx"] = 2750.0000 ,["TestCubeRenderwCollision"] = 2750.0000 ,["Red_Minion_Wizard"] = 650.0000 ,["JarvanIV"] = 20.0000 ,["Blue_Minion_Wizard"] = 650.0000 ,["TT_ChaosTurret2"] = 1200.0000 ,["TT_ChaosTurret3"] = 1200.0000 ,["TT_ChaosTurret1"] = 1200.0000 ,["ChaosTurretGiant"] = 1200.0000 ,["Dragon"] = 1200.0000 ,["LuluSnowman"] = 1200.0000 ,["Worm"] = 1200.0000 ,["ChaosTurretWorm"] = 1200.0000 ,["TT_ChaosInhibitor"] = 1200.0000 ,["ChaosTurretNormal"] = 1200.0000 ,["AncientGolem"] = 500.0000 ,["ZyraGraspingPlant"] = 500.0000 ,["HA_AP_OrderTurret3"] = 1200.0000 ,["HA_AP_OrderTurret2"] = 1200.0000 ,["Tryndamere"] = 347.79999 ,["OrderTurretNormal2"] = 1200.0000 ,["Singed"] = 700.0000 ,["OrderInhibitor"] = 700.0000 ,["Diana"] = 347.79999 ,["HA_FB_HealthRelic"] = 347.79999 ,["TT_OrderInhibitor"] = 347.79999 ,["GreatWraith"] = 750.0000 ,["Yasuo"] = 347.79999 ,["OrderTurretDragon"] = 1200.0000 ,["OrderTurretNormal"] = 1200.0000 ,["LizardElder"] = 500.0000 ,["HA_AP_ChaosTurret"] = 1200.0000 ,["Ahri"] = 1750.0000 ,["Lulu"] = 1450.0000 ,["ChaosInhibitor"] = 1450.0000 ,["HA_AP_ChaosTurret3"] = 1200.0000 ,["HA_AP_ChaosTurret2"] = 1200.0000 ,["ChaosTurretWorm2"] = 1200.0000 ,["TT_OrderTurret1"] = 1200.0000 ,["TT_OrderTurret2"] = 1200.0000 ,["TT_OrderTurret3"] = 1200.0000 ,["LuluFaerie"] = 1200.0000 ,["HA_AP_OrderTurret"] = 1200.0000 ,["OrderTurretAngel"] = 1200.0000 ,["YellowTrinketUpgrade"] = 1200.0000 ,["MasterYi"] = math.huge ,["Lissandra"] = 2000.0000 ,["ARAMOrderTurretNexus"] = 1200.0000 ,["Draven"] = 1700.0000 ,["FiddleSticks"] = 1750.0000 ,["SmallGolem"] = math.huge ,["ARAMOrderTurretFront"] = 1200.0000 ,["ChaosTurretTutorial"] = 1200.0000 ,["NasusUlt"] = 1200.0000 ,["Maokai"] = math.huge ,["Wraith"] = 750.0000 ,["Wolf"] = math.huge ,["Sivir"] = 1750.0000 ,["Corki"] = 2000.0000 ,["Janna"] = 1200.0000 ,["Nasus"] = math.huge ,["Golem"] = math.huge ,["ARAMChaosTurretFront"] = 1200.0000 ,["ARAMOrderTurretInhib"] = 1200.0000 ,["LeeSin"] = math.huge ,["HA_AP_ChaosTurretTutorial"] = 1200.0000 ,["GiantWolf"] = math.huge ,["HA_AP_OrderTurretTutorial"] = 1200.0000 ,["YoungLizard"] = 750.0000 ,["Jax"] = 400.0000 ,["LesserWraith"] = math.huge ,["Blitzcrank"] = math.huge ,["ARAMChaosTurretInhib"] = 1200.0000 ,["Shen"] = 400.0000 ,["Nocturne"] = math.huge ,["Sona"] = 1500.0000 ,["ARAMChaosTurretNexus"] = 1200.0000 ,["YellowTrinket"] = 1200.0000 ,["OrderTurretTutorial"] = 1200.0000 ,["Caitlyn"] = 2500.0000 ,["Trundle"] = 347.79999 ,["Malphite"] = 1000.0000 ,["Mordekaiser"] = math.huge ,["ZyraSeed"] = math.huge ,["Vi"] = 1000.0000 ,["Tutorial_Red_Minion_Wizard"] = 650.0000 ,["Renekton"] = math.huge ,["Anivia"] = 1400.0000 ,["Fizz"] = math.huge ,["Heimerdinger"] = 1500.0000 ,["Evelynn"] = 467.0000 ,["Rumble"] = 347.79999 ,["Leblanc"] = 1700.0000 ,["Darius"] = math.huge ,["OlafAxe"] = math.huge ,["Viktor"] = 2300.0000 ,["XinZhao"] = 20.0000 ,["Orianna"] = 1450.0000 ,["Vladimir"] = 1400.0000 ,["Nidalee"] = 1750.0000 ,["Tutorial_Red_Minion_Basic"] = math.huge ,["ZedShadow"] = 467.0000 ,["Syndra"] = 1800.0000 ,["Zac"] = 1000.0000 ,["Olaf"] = 347.79999 ,["Veigar"] = 1100.0000 ,["Twitch"] = 2500.0000 ,["Alistar"] = math.huge ,["Akali"] = 467.0000 ,["Urgot"] = 1300.0000 ,["Leona"] = 347.79999 ,["Talon"] = math.huge ,["Karma"] = 1500.0000 ,["Jayce"] = 347.79999 ,["Galio"] = 1000.0000 ,["Shaco"] = math.huge ,["Taric"] = math.huge ,["TwistedFate"] = 1500.0000 ,["Varus"] = 2000.0000 ,["Garen"] = 347.79999 ,["Swain"] = 1600.0000 ,["Vayne"] = 2000.0000 ,["Fiora"] = 467.0000 ,["Quinn"] = 2000.0000 ,["Kayle"] = math.huge ,["Blue_Minion_Basic"] = math.huge ,["Brand"] = 2000.0000 ,["Teemo"] = 1300.0000 ,["Amumu"] = 500.0000 ,["Annie"] = 1200.0000 ,["Odin_Blue_Minion_caster"] = 1200.0000 ,["Elise"] = 1600.0000 ,["Nami"] = 1500.0000 ,["Poppy"] = 500.0000 ,["AniviaEgg"] = 500.0000 ,["Tristana"] = 2250.0000 ,["Graves"] = 3000.0000 ,["Morgana"] = 1600.0000 ,["Gragas"] = math.huge ,["MissFortune"] = 2000.0000 ,["Warwick"] = math.huge ,["Cassiopeia"] = 1200.0000 ,["Tutorial_Blue_Minion_Wizard"] = 650.0000 ,["DrMundo"] = math.huge ,["Volibear"] = 467.0000 ,["Irelia"] = 467.0000 ,["Odin_Red_Minion_Caster"] = 650.0000 ,["Lucian"] = 2800.0000 ,["Yorick"] = math.huge ,["RammusPB"] = math.huge ,["Red_Minion_Basic"] = math.huge ,["Udyr"] = 467.0000 ,["MonkeyKing"] = 20.0000 ,["Tutorial_Blue_Minion_Basic"] = math.huge ,["Kennen"] = 1600.0000 ,["Nunu"] = 500.0000 ,["Ryze"] = 2400.0000 ,["Zed"] = 467.0000 ,["Nautilus"] = 1000.0000 ,["Gangplank"] = 1000.0000 ,["Lux"] = 1600.0000 ,["Sejuani"] = 500.0000 ,["Ezreal"] = 2000.0000 ,["OdinNeutralGuardian"] = 1800.0000 ,["Khazix"] = 500.0000 ,["Sion"] = math.huge ,["Aatrox"] = 347.79999 ,["Hecarim"] = 500.0000 ,["Pantheon"] = 20.0000 ,["Shyvana"] = 467.0000 ,["Zyra"] = 1700.0000 ,["Karthus"] = 1200.0000 ,["Rammus"] = math.huge ,["Zilean"] = 1200.0000 ,["Chogath"] = 500.0000 ,["Malzahar"] = 2000.0000 ,["YorickRavenousGhoul"] = 347.79999 ,["YorickSpectralGhoul"] = 347.79999 ,["JinxMine"] = 347.79999 ,["YorickDecayedGhoul"] = 347.79999 ,["XerathArcaneBarrageLauncher"] = 347.79999 ,["Odin_SOG_Order_Crystal"] = 347.79999 ,["TestCube"] = 347.79999 ,["ShyvanaDragon"] = math.huge ,["FizzBait"] = math.huge ,["Blue_Minion_MechMelee"] = math.huge ,["OdinQuestBuff"] = math.huge ,["TT_Buffplat_L"] = math.huge ,["TT_Buffplat_R"] = math.huge ,["KogMawDead"] = math.huge ,["TempMovableChar"] = math.huge ,["Lizard"] = 500.0000 ,["GolemOdin"] = math.huge ,["OdinOpeningBarrier"] = math.huge ,["TT_ChaosTurret4"] = 500.0000 ,["TT_Flytrap_A"] = 500.0000 ,["TT_NWolf"] = math.huge ,["OdinShieldRelic"] = math.huge ,["LuluSquill"] = math.huge ,["redDragon"] = math.huge ,["MonkeyKingClone"] = math.huge ,["Odin_skeleton"] = math.huge ,["OdinChaosTurretShrine"] = 500.0000 ,["Cassiopeia_Death"] = 500.0000 ,["OdinCenterRelic"] = 500.0000 ,["OdinRedSuperminion"] = math.huge ,["JarvanIVWall"] = math.huge ,["ARAMOrderNexus"] = math.huge ,["Red_Minion_MechCannon"] = 1200.0000 ,["OdinBlueSuperminion"] = math.huge ,["SyndraOrbs"] = math.huge ,["LuluKitty"] = math.huge ,["SwainNoBird"] = math.huge ,["LuluLadybug"] = math.huge ,["CaitlynTrap"] = math.huge ,["TT_Shroom_A"] = math.huge ,["ARAMChaosTurretShrine"] = 500.0000 ,["Odin_Windmill_Propellers"] = 500.0000 ,["TT_NWolf2"] = math.huge ,["OdinMinionGraveyardPortal"] = math.huge ,["SwainBeam"] = math.huge ,["Summoner_Rider_Order"] = math.huge ,["TT_Relic"] = math.huge ,["odin_lifts_crystal"] = math.huge ,["OdinOrderTurretShrine"] = 500.0000 ,["SpellBook1"] = 500.0000 ,["Blue_Minion_MechCannon"] = 1200.0000 ,["TT_ChaosInhibitor_D"] = 1200.0000 ,["Odin_SoG_Chaos"] = 1200.0000 ,["TrundleWall"] = 1200.0000 ,["HA_AP_HealthRelic"] = 1200.0000 ,["OrderTurretShrine"] = 500.0000 ,["OriannaBall"] = 500.0000 ,["ChaosTurretShrine"] = 500.0000 ,["LuluCupcake"] = 500.0000 ,["HA_AP_ChaosTurretShrine"] = 500.0000 ,["TT_NWraith2"] = 750.0000 ,["TT_Tree_A"] = 750.0000 ,["SummonerBeacon"] = 750.0000 ,["Odin_Drill"] = 750.0000 ,["TT_NGolem"] = math.huge ,["AramSpeedShrine"] = math.huge ,["OriannaNoBall"] = math.huge ,["Odin_Minecart"] = math.huge ,["Summoner_Rider_Chaos"] = math.huge ,["OdinSpeedShrine"] = math.huge ,["TT_SpeedShrine"] = math.huge ,["odin_lifts_buckets"] = math.huge ,["OdinRockSaw"] = math.huge ,["OdinMinionSpawnPortal"] = math.huge ,["SyndraSphere"] = math.huge ,["Red_Minion_MechMelee"] = math.huge ,["SwainRaven"] = math.huge ,["crystal_platform"] = math.huge ,["MaokaiSproutling"] = math.huge ,["Urf"] = math.huge ,["TestCubeRender10Vision"] = math.huge ,["MalzaharVoidling"] = 500.0000 ,["GhostWard"] = 500.0000 ,["MonkeyKingFlying"] = 500.0000 ,["LuluPig"] = 500.0000 ,["AniviaIceBlock"] = 500.0000 ,["TT_OrderInhibitor_D"] = 500.0000 ,["Odin_SoG_Order"] = 500.0000 ,["RammusDBC"] = 500.0000 ,["FizzShark"] = 500.0000 ,["LuluDragon"] = 500.0000 ,["OdinTestCubeRender"] = 500.0000 ,["TT_Tree1"] = 500.0000 ,["ARAMOrderTurretShrine"] = 500.0000 ,["Odin_Windmill_Gears"] = 500.0000 ,["ARAMChaosNexus"] = 500.0000 ,["TT_NWraith"] = 750.0000 ,["TT_OrderTurret4"] = 500.0000 ,["Odin_SOG_Chaos_Crystal"] = 500.0000 ,["OdinQuestIndicator"] = 500.0000 ,["JarvanIVStandard"] = 500.0000 ,["TT_DummyPusher"] = 500.0000 ,["OdinClaw"] = 500.0000 ,["EliseSpiderling"] = 2000.0000 ,["QuinnValor"] = math.huge ,["UdyrTigerUlt"] = math.huge ,["UdyrTurtleUlt"] = math.huge ,["UdyrUlt"] = math.huge ,["UdyrPhoenixUlt"] = math.huge ,["ShacoBox"] = 1500.0000 ,["HA_AP_Poro"] = 1500.0000 ,["AnnieTibbers"] = math.huge ,["UdyrPhoenix"] = math.huge ,["UdyrTurtle"] = math.huge ,["UdyrTiger"] = math.huge ,["HA_AP_OrderShrineTurret"] = 500.0000 ,["HA_AP_Chains_Long"] = 500.0000 ,["HA_AP_BridgeLaneStatue"] = 500.0000 ,["HA_AP_ChaosTurretRubble"] = 500.0000 ,["HA_AP_PoroSpawner"] = 500.0000 ,["HA_AP_Cutaway"] = 500.0000 ,["HA_AP_Chains"] = 500.0000 ,["ChaosInhibitor_D"] = 500.0000 ,["ZacRebirthBloblet"] = 500.0000 ,["OrderInhibitor_D"] = 500.0000 ,["Nidalee_Spear"] = 500.0000 ,["Nidalee_Cougar"] = 500.0000 ,["TT_Buffplat_Chain"] = 500.0000 ,["WriggleLantern"] = 500.0000 ,["TwistedLizardElder"] = 500.0000 ,["RabidWolf"] = math.huge ,["HeimerTGreen"] = 1599.3999 ,["HeimerTRed"] = 1599.3999 ,["ViktorFF"] = 1599.3999 ,["TwistedGolem"] = math.huge ,["TwistedSmallWolf"] = math.huge ,["TwistedGiantWolf"] = math.huge ,["TwistedTinyWraith"] = 750.0000 ,["TwistedBlueWraith"] = 750.0000 ,["TwistedYoungLizard"] = 750.0000 ,["Red_Minion_Melee"] = math.huge ,["Blue_Minion_Melee"] = math.huge ,["Blue_Minion_Healer"] = 1000.0000 ,["Ghast"] = 750.0000 ,["blueDragon"] = 800.0000 ,["Red_Minion_MechRange"] = 3000, ["SRU_OrderMinionRanged"] = 650, ["SRU_ChaosMinionRanged"] = 650, ["SRU_OrderMinionSiege"] = 1200, ["SRU_ChaosMinionSiege"] = 1200, ["SRUAP_Turret_Chaos1"] = 1200, ["SRUAP_Turret_Chaos2"] = 1200, ["SRUAP_Turret_Chaos3"] = 1200, ["SRUAP_Turret_Order1"] = 1200, ["SRUAP_Turret_Order2"] = 1200, ["SRUAP_Turret_Order3"] = 1200, ["SRUAP_Turret_Chaos4"] = 1200, ["SRUAP_Turret_Chaos5"] = 500, ["SRUAP_Turret_Order4"] = 1200, ["SRUAP_Turret_Order5"] = 500 }
self.altAANames = {"caitlynheadshotmissile", "frostarrow", "garenslash2", "kennenmegaproc", "lucianpassiveattack", "masteryidoublestrike", "quinnwenhanced", "renektonexecute", "renektonsuperexecute", "rengarnewpassivebuffdash", "trundleq", "xenzhaothrust", "xenzhaothrust2", "xenzhaothrust3"}
self.aaresets = {"dariusnoxiantacticsonh", "fiorae", "garenq", "hecarimrapidslash", "jaxempowertwo", "jaycehypercharge", "leonashieldofdaybreak", "luciane", "monkeykingdoubleattack", "mordekaisermaceofspades", "nasusq", "nautiluspiercinggaze", "netherblade", "parley", "poppydevastatingblow", "powerfist", "renektonpreexecute", "rengarq", "shyvanadoubleattack", "sivirw", "takedown", "talonnoxiandiplomacy", "trundletrollsmash", "vaynetumble", "vie", "volibearq", "xenzhaocombotarget", "yorickspectral", "reksaiq", "riventricleave", "kalistaexpunge", "itemtitanichydracleave", "itemtiamatcleave", "gravesmove", "masochism" }
self.bonusDamageTable = {--IOW
["Aatrox"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg+(GotBuff(source, "aatroxwpower")>0 and 35*GetCastLevel(source, _W)+25 or 0), APDmg, TRUEDmg
end,
["Ashe"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg*(GotBuff(source, "asheqattack")>0 and 5*(0.01*GetCastLevel(source, _Q)+0.22) or GotBuff(target, "ashepassiveslow")>0 and (1.1+GetCritChance(source)*(1)) or 1), APDmg, TRUEDmg
end,
["Bard"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, APDmg+(GotBuff(source, "bardpspiritammocount")>0 and 30+GetLevel(source)*15+0.3*GetBonusAP(source) or 0), TRUEDmg
end,
["Blitzcrank"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg*(GotBuff(source, "powerfist")+1), APDmg, TRUEDmg
end,
["Caitlyn"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg + (GotBuff(source, "caitlynheadshot") > 0 and 1.5*(ADDmg) or 0), APDmg, TRUEDmg
end,
["Chogath"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, APDmg + (GotBuff(source, "vorpalspikes") > 0 and 15*GetCastLevel(source, _E)+5+.3*GetBonusAP(source) or 0), APDmg, TRUEDmg
end,
["Corki"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, 0, TRUEDmg + (GotBuff(source, "rapidreload") > 0 and .1*(ADDmg) or 0)
end,
["Darius"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg + (GotBuff(source, "dariusnoxiantacticsonh") > 0 and .4*(ADDmg) or 0), APDmg, TRUEDmg
end,
["Diana"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, APDmg + (GotBuff(source, "dianaarcready") > 0 and math.max(5*GetLevel(source)+15,10*GetLevel(source)-10,15*GetLevel(source)-60,20*GetLevel(source)-125,25*GetLevel(source)-200)+.8*GetBonusAP(source) or 0), TRUEDmg
end,
["Draven"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg + (GotBuff(source, "DravenSpinning") > 0 and 35+10*GetCastLevel(myHero,_Q) / 100*(ADDmg) or 0), APDmg, TRUEDmg
end,
["Ekko"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, APDmg + (GotBuff(source, "ekkoeattackbuff") > 0 and 30*GetCastLevel(source, _E)+20+.2*GetBonusAP(source) or 0), TRUEDmg
end,
["Fizz"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, APDmg + (GotBuff(source, "fizzseastonepassive") > 0 and 5*GetCastLevel(source, _W)+5+.3*GetBonusAP(source) or 0), TRUEDmg
end,
["Garen"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg + (GotBuff(source, "garenq") > 0 and 25*GetCastLevel(source, _Q)+5+.4*(ADDmg) or 0), APDmg, TRUEDmg
end,
["Gragas"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, APDmg + (GotBuff(source, "gragaswattackbuff") > 0 and 30*GetCastLevel(source, _W)-10+.3*GetBonusAP(source)+(.01*GetCastLevel(source, _W)+.07)*GetMaxHP(minion) or 0), TRUEDmg
end,
["Irelia"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, 0, TRUEDmg + (GotBuff(source, "ireliahitenstylecharged") > 0 and 25*GetCastLevel(source, _Q)+5+.4*(ADDmg) or 0)
end,
["Jax"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, APDmg + (GotBuff(source, "jaxempowertwo") > 0 and 35*GetCastLevel(source, _W)+5+.6*GetBonusAP(source) or 0), TRUEDmg
end,
["Jayce"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, APDmg + (GotBuff(source, "jaycepassivemeleeatack") > 0 and 40*GetCastLevel(source, _R)-20+.4*GetBonusAP(source) or 0), TRUEDmg
end,
["Jinx"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg + (GotBuff(source, "jinxq") > 0 and .1*(ADDmg) or 0), APDmg, TRUEDmg
end,
["Kalista"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg * 0.9, APDmg, TRUEDmg
end,
["Kassadin"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, APDmg + (GotBuff(source, "netherbladebuff") > 0 and 20+.1*GetBonusAP(source) or (GotBuff(source, "netherblade") > 0 and 25*GetCastLevel(source, _W)+15+.6*GetBonusAP(source) or 0)), TRUEDmg
end,
["Kayle"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, APDmg + (GotBuff(source, "kaylerighteousfurybuff") > 0 and 5*GetCastLevel(source, _E)+5+.15*GetBonusAP(source) or 0) + (GotBuff(source, "judicatorrighteousfury") > 0 and 5*GetCastLevel(source, _E)+5+.15*GetBonusAP(source) or 0), TRUEDmg
end,
["KogMaw"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, (GotBuff(source, "KogMawBioArcaneBarrage") > 0 and (4 * GetCastLevel(source,_W) + (.02 + APDmg*.00075)*target.maxHealth) or 0), TRUEDmg
end,
["Leona"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, APDmg + (GotBuff(source, "leonashieldofdaybreak") > 0 and 30*GetCastLevel(source, _Q)+10+.3*GetBonusAP(source) or 0), TRUEDmg
end,
["Lux"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, APDmg + (GotBuff(source, "luxilluminatingfraulein") > 0 and 10+(GetLevel(source)*8)+(GetBonusAP(source)*0.2) or 0), TRUEDmg
end,
["MasterYi"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg + (GotBuff(source, "doublestrike") > 0 and .5*(ADDmg) or 0), APDmg, TRUEDmg
end,
["Nocturne"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg + (GotBuff(source, "nocturneumrablades") > 0 and .2*(ADDmg) or 0), APDmg, TRUEDmg
end,
["Orianna"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, APDmg + 2 + 8 * math.ceil(GetLevel(source)/3) + 0.15*GetBonusAP(source), TRUEDmg
end,
["RekSai"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg + (GotBuff(source, "reksaiq") > 0 and 10*GetCastLevel(source, _Q)+5+.2*(ADDmg) or 0), APDmg, TRUEDmg
end,
["Rengar"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg + (GotBuff(source, "rengarqbase") > 0 and math.max(30*GetCastLevel(source, _Q)+(.05*GetCastLevel(source, _Q)-.05)*(ADDmg)) or 0) + (GotBuff(source, "rengarqemp") > 0 and math.min(15*GetLevel(source)+15,10*GetLevel(source)+60)+.5*(ADDmg) or 0), APDmg, TRUEDmg
end,
["Shyvana"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg + (GotBuff(source, "shyvanadoubleattack") > 0 and (.05*GetCastLevel(source, _Q)+.75)*(ADDmg) or 0), APDmg, TRUEDmg
end,
["Talon"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg + (GotBuff(source, "talonnoxiandiplomacybuff") > 0 and 30*GetCastLevel(source, _Q)+.3*(GetBonusDmg(source)) or 0), APDmg, TRUEDmg
end,
["Teemo"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, APDmg + 10*GetCastLevel(source, _E)+0.3*GetBonusAP(source), TRUEDmg
end,
["Trundle"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg + (GotBuff(source, "trundletrollsmash") > 0 and 20*GetCastLevel(source, _Q)+((0.05*GetCastLevel(source, _Q)+0.095)*(ADDmg)) or 0), APDmg, TRUEDmg
end,
["Varus"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg, APDmg + (GotBuff(source, "varusw") > 0 and (4*GetCastLevel(source, _W)+6+.25*GetBonusAP(source)) or 0) , TRUEDmg
end,
["Vayne"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg + (GotBuff(source, "vaynetumblebonus") > 0 and (.2+.1*GetCastLevel(source,_Q))*(ADDmg) or 0), 0, TRUEDmg + (GotBuff(target, "VayneSilveredDebuff") > 1 and math.max(20+20*GetCastLevel(source,_W), 4+1.5*GetCastLevel(source,_W) / 100 * target.maxHealth) or 0)
end,
["Vi"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg + (GotBuff(source, "vie") > 0 and 15*GetCastLevel(source, _E)-10+.15*(ADDmg)+.7*GetBonusAP(source) or 0) , APDmg, TRUEDmg
end,
["Volibear"] = function(source, target, ADDmg, APDmg, TRUEDmg)
return ADDmg + (GotBuff(source, "volibearq") > 0 and 30*GetCastLevel(source, _Q) or 0), APDmg, TRUEDmg
end
}
self.Channel = {
{name = "katarinar", duration = 1},
{name = "drain", duration = 5},
{name = "crowstorm", duration = 1.5},
{name = "consume", duration = 1.5},
{name = "absolutezero", duration = 1},
{name = "ezrealtrueshotbarrage", duration = 1},
{name = "galioidolofdurand", duration = 1},
{name = "reapthewhirlwind", duration = 1},
{name = "missfortunebullettime", duration = 1},
{name = "shenstandunited", duration = 1},
{name = "meditate", duration = 1},
{name = "gate", duration = 1.5},
}
OMenu:Menu("FS", "Farm Settings")
OMenu.FS:Boolean("AJ", "Attack Jungle", true)
OMenu.FS:Boolean("AS", "Attack Structures", true)
OMenu.FS:Boolean("EL", "Enable Kite Limiter", true)
OMenu.FS:Slider("DK", "Dont Kite if Attackspeed > x",2.5,0.5,2.6,0.1)
OMenu.FS:Slider("FD", "Farm Delay", 0,-20,20,1)
OMenu:Menu("D", "Drawings")
OMenu.D:Boolean("LHM", "Lasthit Marker", false)
OMenu.D:Boolean("DMAR", "Draw My Attack Range", true)
OMenu.D:Boolean("DEAR", "Draw Enemy Attack Range", false)
OMenu.D:Boolean("DAAR", "Draw Ally Attack Range", false)
OMenu.D:Boolean("DHR", "Draw Holposition radius", false)
OMenu:Menu("K", "Keys")
OMenu.K:KeyBinding("C", "Combo Key", string.byte(" "))
OMenu.K:KeyBinding("H", "Harass Key", string.byte("C"))
OMenu.K:KeyBinding("LC", "LaneClear Key", string.byte("V"))
OMenu.K:KeyBinding("LH", "LastHit Key", string.byte("X"))
self.ts = TargetSelector(self.aarange, TARGET_LESS_CAST, DAMAGE_PHYSICAL)
OMenu:TargetSelector("TS", "TargetSelector", self.ts)
OMenu:Menu("Hum", "Humanizer")
OMenu.Hum:Boolean("Enable", "Enable Humanizer", true)
OMenu.Hum:Slider("lhit", "Max. Movements in Last Hit", 6, 1, 20, 1)
OMenu.Hum:Slider("lclear", "Max. Movements in Lane Clear", 6, 1, 20, 1)
OMenu.Hum:Slider("harass", "Max. Movements in Harass", 7, 1, 20, 1)
OMenu.Hum:Slider("combo", "Max. Movements in Combo", 8, 1, 20, 1)
OMenu:Menu("Adv", "Advanced")
OMenu.Adv:Menu("Combo", "Combo")
OMenu.Adv.Combo:Boolean("em", "Enable Movement", true)
OMenu.Adv.Combo:Boolean("ea", "Enable Attacks", true)
OMenu.Adv:Menu("Harass", "Harass")
OMenu.Adv.Harass:Boolean("em", "Enable Movement", true)
OMenu.Adv.Harass:Boolean("ea", "Enable Attacks", true)
OMenu.Adv:Menu("LaneClear", "LaneClear")
OMenu.Adv.LaneClear:Boolean("em", "Enable Movement", true)
OMenu.Adv.LaneClear:Boolean("ea", "Enable Attacks", true)
OMenu.Adv:Menu("LastHit", "LastHit")
OMenu.Adv.LastHit:Boolean("em", "Enable Movement", true)
OMenu.Adv.LastHit:Boolean("ea", "Enable Attacks", true)
OMenu.Adv:Slider("AAD", "Auto Attack Delay", -50,-50,50,5)
OMenu.Adv:Slider("MD", "Move Delay", 20,-50,50,5)
if myHero.charName == "Draven" and not _G.DravenLoaded then
OMenu:Menu("DS", "Draven Settings")
OMenu.DS:Boolean("E", "Enable Catch", true)
OMenu.DS:Slider("CR", "Catch Radius", 500,100,1000,5)
OMenu.DS:Boolean("ED", "Enable Draw", true)
OMenu.DS:Boolean("DCR", "Draw Catch Radius", true)
end
self.da = {}
self.pos = nil
self.c = {}
_G.Before_AA, _G.After_AA = 1, 2
self.cb = {[1] = {}, [2] = {}}
Callback.Add("ProcessSpellAttack", function(unit,spellProc) self:PrAtt(unit,spellProc) end)
Callback.Add("UpdateBuff", function(u,b) self:UB(u,b) end)
Callback.Add("RemoveBuff", function(u,b) self:RB(u,b) end)
Callback.Add("ProcessSpell", function(unit,spellProc) self:PrSp(unit,spellProc) end)
Callback.Add("Tick", function(unit,spellProc) self:T(unit,spellProc) end)
Callback.Add("Draw", function(unit,spellProc) self:D(unit,spellProc) end)
Callback.Add("IssueOrder", function(order) self:IssOrd(order) end)
Callback.Add("CreateObj", function(obj) self:CreateO(obj) end)
Callback.Add("DeleteObj", function(obj) self:DeleteO(obj) end)
Callback.Add("Animation", function(u,a) self:An(u,a) end)
Callback.Add("ProcessSpellComplete", function(u,s) self:PrSpC(u,s) end)
end
function SLWalker:UB(u,b)
if b and u and self.rangebuffer[myHero.charName] then
if b.Name == self.rangebuffer[myHero.charName].b and u.isMe then
self.rangebuffer[myHero.charName].r = 110+20*GetCastLevel(myHero,1)-myHero.boundingRadius*2
end
end
end
function SLWalker:RB(u,b)
if b and u and self.rangebuffer[myHero.charName] then
if b.Name == self.rangebuffer[myHero.charName].b and u.isMe then
self.rangebuffer[myHero.charName].r = 0
end
end
end
function SLWalker:An(u,a)
for _, i in pairs(self.c) do
if u.isMe and a == "Run" then
self.c[_] = nil
end
end
end
function SLWalker:T()
if not SLW then return end
if OMenu.FS.EL:Value() and self:Mode() ~= "LastHit" then
if self:GetTarget() and ValidTarget(self:GetTarget(),self.aarange) then
if GetBaseAttackSpeed(myHero)*GetAttackSpeed(myHero) > OMenu.FS.DK:Value() then
self.movementEnabled = false
else
self.movementEnabled = true
end
end
end
self.aarange = myHero.range+myHero.boundingRadius*2+(self.rangebuffer[myHero.charName] and self.rangebuffer[myHero.charName].r or 0)
self.ts.range = self.aarange
self:Orb()
for _, i in pairs(self.da) do
if not _G.DravenLoaded and i.o and myHero.charName == "Draven" and OMenu.DS.E:Value() then
self.pos = Vector(i.o.pos) + Vector(Vector(myHero.pos)-i.o.pos):normalized():perpendicular()*75
if GetDistance(i.o.pos,GetMousePos()) < OMenu.DS.CR:Value() and self.pos then
MoveToXYZ(self.pos)
end
end
end
for _,i in pairs(self.c) do
if i.s.target.dead then
self.c[_] = nil
end
end
end
function SLWalker:D()
if not SLW then return end
if OMenu.D.DMAR:Value() then
DrawCircle(myHero.pos,self.aarange,2,20,ARGB(255,155,155,155))
end
for _,k in pairs(GetEnemyHeroes()) do
if OMenu.D.DEAR:Value() and k.visible and k.alive then
DrawCircle(k.pos,k.range+k.boundingRadius*2,1.5,20,ARGB(255,255,100,50))
end
end
for _,k in pairs(GetAllyHeroes()) do
if OMenu.D.DAAR:Value() and k.visible and k.alive then
DrawCircle(k.pos,k.range+k.boundingRadius*2,1.5,20,ARGB(255,0,0,255))
end
end
if OMenu.D.DHR:Value() then
DrawCircle(myHero.pos,myHero.boundingRadius,2,20,ARGB(255,0,150,150))
end
for _,i in pairs(SLM) do
if OMenu.D.LHM:Value() then
if (self:Mode() == "LaneClear" or self:Mode() == "LastHit" or self:Mode() == "Harass") and i.visible and ValidTarget(i,self.aarange) and i.alive and self:PredictHP(i,1000*(self.windUpTime+i.distance/self:aaprojectilespeed())) < CalcPhysicalDamage(myHero, i, self:Dmg(myHero,i,{name = "Basic"})) then
DrawCircle(i.pos,i.boundingRadius*1.5,1.5,20,ARGB(168,255,255,255))
elseif self:Mode() == "LaneClear" and i.visible and ValidTarget(i,self.aarange) and i.alive and self:PredictHP(i,1000*(self.windUpTime+i.distance/self:aaprojectilespeed())) < CalcPhysicalDamage(myHero, i, self:Dmg(myHero,i,{name = "Basic"}))+self:PredictHP(i,1000*(self.windUpTime+i.distance/self:aaprojectilespeed()))/2 then
DrawCircle(i.pos,i.boundingRadius*1.5,1.5,20,ARGB(168,242,156,17))
end
end
end
for _, i in pairs(self.da) do
if not _G.DravenLoaded and myHero.charName == "Draven" and OMenu.DS.ED:Value() then
if i.o then
DrawCircle(i.o.pos,75,1.5,20,ARGB(255,0,180,100))
end
end
end
if not _G.DravenLoaded and myHero.charName == "Draven" and OMenu.DS.DCR:Value() and OMenu.DS.ED:Value() then
DrawCircle(GetMousePos(),OMenu.DS.CR:Value(),1.5,20,ARGB(255,0,180,100))
end
end
function SLWalker:PredictHP(unit,time)
return self:GetPredictedHealth(unit,time,0)
end
function SLWalker:Dmg(source,unit,spell)
local dmg = 0
local ADDmg = 0
local TotalDmg = source.totalDamage
local APDmg = 0
local TRUEDmg = 0
local armorPenPercent = source.armorPenPercent
local armorPen = source.armorPen
local damageMultiplier = spell.name:find("CritAttack") and 2 or 1
if source.type == "obj_AI_Minion" then
armorPenPercent = 1
elseif source.type == "obj_AI_Turret" then
armorPenPercent = 0.7
end
if unit.type == "obj_AI_Turret" then
armorPenPercent = 1
armorPen = 0
damageMultiplier = 1
end
local targetArmor = (unit.armor * armorPenPercent) - armorPen
if targetArmor < 0 then
damageMultiplier = 1 * damageMultiplier
else
damageMultiplier = 100 / (100 + targetArmor) * damageMultiplier
end
if source.type == source.type and unit.type == "obj_AI_Turret" then
TotalDmg = math.max(source.totalDamage, source.damage + 0.4 * source.ap)
end
if source.type == "obj_AI_Minion" and unit.type == source.type and source.team ~= MINION_JUNGLE then
damageMultiplier = 0.60 * damageMultiplier
end
if source.type == source.type and unit.type == "obj_AI_Turret" then
damageMultiplier = 0.95 * damageMultiplier
end
if source.type == "obj_AI_Minion" and unit.type == "obj_AI_Turret" then
damageMultiplier = 0.475 * damageMultiplier
end
if source.type == "obj_AI_Turret" and (unit.charName == "Red_Minion_MechCannon" or unit.charName == "Blue_Minion_MechCannon") then
damageMultiplier = 0.8 * damageMultiplier
end
if source.type == "obj_AI_Turret" and (unit.charName == "Red_Minion_Wizard" or unit.charName == "Blue_Minion_Wizard" or unit.charName == "Red_Minion_Basic" or unit.charName == "Blue_Minion_Basic") then
damageMultiplier = (1 / 0.875) * damageMultiplier
end
if source.type == "obj_AI_Turret" then
damageMultiplier = 1.05 * damageMultiplier
end
ADDmg = TotalDmg
if targetType ~= Obj_AI_Turret then
if GetMaladySlot(source) then
APDmg = 15 + 0.15*source.ap
end
if GotBuff(source, "itemstatikshankcharge") == 100 then
APDmg = APDmg + 100
end
if source == source and not freeze then
if self.bonusDamageTable[source.charName] then
ADDmg, APDmg, TRUEDmg = self.bonusDamageTable[source.charName](source, unit, ADDmg, APDmg, TRUEDmg)
end
if GotBuff(source, "sheen") > 0 then
ADDmg = ADDmg + TotalDmg
end
if GotBuff(source, "lichbane") > 0 then
ADDmg = ADDmg + TotalDmg*0.75
APDmg = APDmg + 0.5*myHero.ap
end
if GotBuff(source, "itemfrozenfist") > 0 then
ADDmg = ADDmg + TotalDmg*1.25
end
end
end
dmg = math.floor(ADDmg)+math.floor(APDmg)
dmg = math.floor(dmg*damageMultiplier)+TRUEDmg
return dmg
end
function SLWalker:moveEvery()
if self:Mode() == "Combo" then
return 1 / OMenu.Hum.combo:Value()
elseif self:Mode() == "LastHit" then
return 1 / OMenu.Hum.lhit:Value()
elseif self:Mode() == "Harass" then
return 1 / OMenu.Hum.harass:Value()
elseif self:Mode() == "LaneClear" then
return 1 / OMenu.Hum.lclear:Value()
else
return 0
end
end
function SLWalker:DontOrb()
for _,i in pairs(self.c) do
if i and i.et and i.et > os.clock() then
return true
end
end
return false
end
function SLWalker:IssOrd(order)
if not SLW then return end
if order.flag == 2 and OMenu.Hum.Enable:Value() then
if os.clock() - self.LastMoveOrder < self:moveEvery() then
BlockOrder()
else
self.LastMoveOrder = os.clock()
end
end
end
function SLWalker:PrAtt(unit, spellProc)
if not SLW then return end
if unit.isMe and spellProc then
if self.altAANames[spellProc.name:lower()] or spellProc.name:lower():find("attack") then
self.LastAttack = self:Time()-GetLatency()/2
self.windUpTime = spellProc.windUpTime * 1000
self.animationTime = spellProc.animationTime * 1000
self.AttackDoneAt = self.windUpTime + self.LastAttack
self.BaseWindUp = 1 / (spellProc.windUpTime * GetAttackSpeed(myHero))
self.BaseAttackSpeed = 1 / (spellProc.animationTime * GetAttackSpeed(myHero))
elseif self.aaresets[spellProc.name:lower()] then
self:ResetAA()
end
end
end
function SLWalker:PrSp(unit,spellProc)
if not SLW then return end
for _,i in pairs(self.Channel) do
if spellProc.name:lower() == i.name and unit and unit.isMe and spellProc then
self.c[unit.networkID] = {et = os.clock() + i.duration + spellProc.windUpTime,s = spellProc}
DelayAction(function() self.c[unit.networkID] = nil end,i.duration)
end
end
if spellProc and spellProc.target and (self.altAANames[spellProc.name:lower()] or spellProc.name:lower():find("attack")) then
self:Ex(1, spellProc.target)
end
end
function SLWalker:PrSpC(u,s)
if not SLW then return end
if self.projectilespeeds[u.charName] and u.team == myHero.team and s.name:lower():find("attack") and not u.isMe then
for i = 1, #self.AA do
if self.AA[i].a == u then
table.remove(self.AA, i)
break
end
end
table.insert(self.AA,{a=u,t=s.target,ht=self:GetTime()+1000*(s.windUpTime+GetDistance(s.target,u)/(self.projectilespeeds[u.charName] or math.huge))-GetLatency()/2000})
end
if s and s.target and (self.altAANames[s.name:lower()] or s.name:lower():find("attack")) then
self:Ex(2, s.target)
end
end
function SLWalker:ResetAA()
self.LastAttack = 0
end
function SLWalker:Time()
return GetTickCount()
end
function SLWalker:CanMove()
if not self.movementEnabled then
return
end
return self:Time() - OMenu.Adv.MD:Value() + GetLatency()*.5 - self.LastAttack >= (1000/(GetAttackSpeed(myHero)*self.BaseWindUp))
end
function SLWalker:CanAttack()
if not self.attacksEnabled then
return
end
return self:Time() - OMenu.Adv.AAD:Value() + GetLatency()*.5 - self.LastAttack >= (1000/(GetAttackSpeed(myHero)*self.BaseAttackSpeed))
end
function SLWalker:IsOrbwalking()
if (OMenu.K.C:Value() or OMenu.K.H:Value() or OMenu.K.LH:Value() or OMenu.K.LC:Value()) then
return true
end
end
function SLWalker:CanOrb(t)
if not t and not t.visible and not t.targetable and not t.alive then
return false
end
return true
end
function SLWalker:Mode()
if OMenu.K.C:Value() then
return "Combo"
end
if OMenu.K.H:Value() then
return "Harass"
end
if OMenu.K.LH:Value() then
return "LastHit"
end
if OMenu.K.LC:Value() then
return "LaneClear"
end
end
function SLWalker:JungleClear()
for _,o in pairs(SLM) do
if OMenu.FS.AJ:Value() and o.team == MINION_JUNGLE and ValidTarget(o,self.aarange) and self:CanOrb(o) then
if self:PredictHP(o,1000*(self.windUpTime+o.distance/self:aaprojectilespeed())) < CalcPhysicalDamage(myHero, o, self:Dmg(myHero,o,{name = "Basic"})) then
return nil
else
return GetHighestUnit(o,self.aarange)
end
end
end
end
function SLWalker:LaneClear()
for _,o in pairs(SLM) do
for t,turret in pairs(structures) do
if OMenu.FS.AS:Value() then
if turret.distance > self.aarange then
if o.team == MINION_ENEMY and ValidTarget(o,self.aarange) and self:CanOrb(o) then
if self:PredictHP(o,1000*(self.windUpTime+o.distance/self:aaprojectilespeed())) < CalcPhysicalDamage(myHero, o, self:Dmg(myHero,o,{name = "Basic"}))+self:PredictHP(o,1000*(self.windUpTime+o.distance/self:aaprojectilespeed()))/2 then
return nil
else
return GetLowestUnit(o,self.aarange)
end
end
else
if turret.team ~= myHero.team and not turret.dead then
return turret
end
end
else
if o.team == MINION_ENEMY and ValidTarget(o,self.aarange) and self:CanOrb(o) then
if self:PredictHP(o,1000*(self.windUpTime+o.distance/self:aaprojectilespeed())) < CalcPhysicalDamage(myHero, o, self:Dmg(myHero,o,{name = "Basic"}))+self:PredictHP(o,1000*(self.windUpTime+o.distance/self:aaprojectilespeed()))/2 then
return nil
else
return GetLowestUnit(o,self.aarange)
end
end
end
end
end
end
function SLWalker:LastHit()
for _,o in pairs(SLM) do
if ValidTarget(o,self.aarange) and self:CanOrb(o) then
if self:PredictHP(o,1000*(self.windUpTime+o.distance/self:aaprojectilespeed())) < CalcPhysicalDamage(myHero, o, self:Dmg(myHero,o,{name = "Basic"})) then
return o
end
end
end
end
function SLWalker:Combo()
if self.ts:GetTarget() and not self.forceTarget then
if self:CanOrb(self.ts:GetTarget()) and ValidTarget(self.ts:GetTarget(),self.aarange) then
return self.ts:GetTarget()
end
elseif self.forceTarget then
if self:CanOrb(self.forceTarget) and ValidTarget(self.forceTarget,self.aarange) then
return self.forceTarget
end
end
end
function SLWalker:Harass()
for _,o in pairs(SLM) do
if self.ts:GetTarget() and not self.forceTarget then
if self:CanOrb(self.ts:GetTarget()) and ValidTarget(self.ts:GetTarget(),self.aarange)then
return self.ts:GetTarget()
end
elseif self.forceTarget then
if self:CanOrb(self.forceTarget) and ValidTarget(self.forceTarget,self.aarange) then
return self.forceTarget
end
end
if o and o.team == MINION_ENEMY then
if self:CanOrb(o) and ValidTarget(o,self.aarange)then
if self:PredictHP(o,1000*(self.windUpTime+o.distance/self:aaprojectilespeed())) < CalcPhysicalDamage(myHero, o, self:Dmg(myHero,o,{name = "Basic"})) then
return GetLowestUnit(o,self.aarange)
end
end
end
end
end
function SLWalker:GetTarget()
if self:Mode() == "Combo" then
return self:Combo()
elseif self:Mode() == "Harass" then
return self:LastHit() or self:Harass()
elseif self:Mode() == "LastHit" then
return self:LastHit()
elseif self:Mode() == "LaneClear" then
return self:LastHit() or self:LaneClear() or self:JungleClear()
else
return nil
end
end
function SLWalker:Orb()
if not self:IsOrbwalking() or self:DontOrb() then return end
if (self:CanMove() or self:CanAttack()) then
if self:CanAttack() then
if self:GetTarget() and OMenu.Adv[self:Mode()]["ea"]:Value() then
AttackUnit(self:GetTarget())
elseif self:CanMove() and GetDistance(myHero, GetMousePos()) > myHero.boundingRadius and OMenu.Adv[self:Mode()]["em"]:Value() then
MoveToXYZ(self.forcePos or GetMousePos())
end
elseif self:CanMove() and GetDistance(myHero, GetMousePos()) > myHero.boundingRadius and OMenu.Adv[self:Mode()]["em"]:Value() then
MoveToXYZ(self.forcePos or GetMousePos())
end
if GetDistance(myHero, GetMousePos()) < 80 then
self.movementEnabled = false
else
self.movementEnabled = true
end
end
end
function SLWalker:aaprojectilespeed()
return (self.projectilespeeds[myHero.charName] and self.projectilespeeds[myHero.charName] or math.huge) or math.huge
end
function SLWalker:GetTime()
return os.clock()
end
function SLWalker:CreateO(obj)
if obj and obj.name:lower():find("reticle_self") then
if not self.da[obj.name] then self.da[obj.name] = {} end
self.da[obj.name].o = obj
end
end
function SLWalker:DeleteO(obj)
if obj and obj.name:lower():find("reticle_self") then
self.da[obj.name] = nil
end
end
function SLWalker:round(num,idp)
return math.floor(num*(10^(idp or 0))+0.5)/(10^(idp or 0))
end
function SLWalker:GetPredictedHealth(u,t,d)
IC=0
d=(d and d+OMenu.FS.FD:Value()) or OMenu.FS.FD:Value()
for _,i in pairs(self.AA) do
if i.a.alive and i.t.networkID==u.networkID then
h=math.floor(i.ht-d*.001)
if h-.0002u.health-IC then
break
end
end
end
return u.health-IC
end
function SLWalker:AddCb(t, f)
table.insert(self.cb[t], f)
end
function SLWalker:Ex(k, u)
for i=1,#self.cb[k],1 do
if self.cb[k][i] then
self.cb[k][i](u, self:Mode())
end
end
end
function LoadSLW()
if not _G.SLW then _G.SLW = SLWalker() end
return SLW
end
class 'SLEvade'
function SLEvade:__init()
self.supportedtypes = {["Line"]={supported=true},["Circle"]={supported=true},["Cone"]={supported=true},["Rectangle"]={supported=true},["Arc"]={supported=false},["Ring"]={supported=true},["Threeway"]={supported=false},["follow"]={supported=true},["Return"]={supported=true}}
self.globalults = {["EzrealTrueshotBarrage"]={s=true},["EnchantedCrystalArrow"]={s=true},["DravenRCast"]={s=true},["JinxR"]={s=true}}
self.obj = {}
self.str = {[-2]="AA",[-1]="P",[0]="Q",[1]="W",[2]="E",[3]="R"}
self.Flash = (GetCastName(GetMyHero(),SUMMONER_1):lower():find("summonerflash") and SUMMONER_1 or (GetCastName(GetMyHero(),SUMMONER_2):lower():find("summonerflash") and SUMMONER_2 or nil))
self.DodgeOnlyDangerous = false -- Dodge Only Dangerous
self.patha = nil -- wallcheck line
self.patha2 = nil -- wallcheck line2
self.pathb = nil -- wallcheck circ
self.pathb2 = nil -- wallcheck circ2
self.asd = false -- blockinput
self.mposs = nil -- self.mousepos circ
self.ues = false -- self.usingevadespells
self.ut = false -- self.usingitems
self.usp = false -- self.usingsummonerspells
self.mposs2 = nil -- self.mousepos line
self.opos = nil -- simulated obj pos
self.cpos = nil --c pos
self.mV = nil -- wp
self.YasuoWall = {} --yasuowall
self.pathc = nil-- rectangle wall check
self.pathc2 = nil-- rectangle wall check2
self.mposs3 = nil --mpos rect
self.mposs4 = nil --mpos cone
self.pathd = nil --cone wall check
self.pathd2 = nil --cone wall check2
self.D = { --Dash items
[3152] = {Name = "Hextech Protobelt", State = false}
}
self.SI = { --Stasis
[3157] = {Name = "Hourglass", State = false},
[3090] = {Name = "Wooglets", State = false},
}
EMenu:Slider("d","Danger",2,1,5,1)
EMenu:SubMenu("Spells", "Spell Settings")
EMenu:SubMenu("EvadeSpells", "EvadeSpell Settings")
EMenu:SubMenu("invulnerable", "Invulnerable Settings")
EMenu:SubMenu("Draws", "Drawing Settings")
EMenu:SubMenu("Advanced", "Advanced Settings")
EMenu.Advanced:Boolean("LDR", "Limit detection range", true)
EMenu.Advanced:Boolean("EMC", "Enable Minion Collision", true)
EMenu.Advanced:Boolean("EHC", "Enable Hero Collision", true)
EMenu.Advanced:Boolean("EWC", "Enable Wall Collision", true)
EMenu.Advanced:Slider("ew", "Extra Evade Range", 125, 0, 250, 5)
EMenu.Draws:Boolean("DSPath", "Draw SkillShot Path", true)
EMenu.Draws:Boolean("DSEW", "Draw SkillShot Extra Width", true)
EMenu.Draws:Boolean("DEPos", "Draw Evade Position", false)
EMenu.Draws:Boolean("DES", "Draw Evade Status", true)
EMenu.Draws:Boolean("DevOpt", "Draw for Devs", false)
EMenu:SubMenu("Keys", "Key Settings")
EMenu.Keys:KeyBinding("DD", "Disable Dodging", string.byte("K"), true)
EMenu.Keys:KeyBinding("DDraws", "Disable Drawings", string.byte("J"), true)
EMenu.Keys:KeyBinding("DoD", "Dodge only Dangerous", string.byte(" "))
EMenu.Keys:KeyBinding("DoD2", "Dodge only Dangerous 2", string.byte("V"))
EMenu:Boolean("D","DEBUG (Y)",false)
DelayAction(function()
for _,i in pairs(Spells) do
for l,k in pairs(GetEnemyHeroes()) do
-- k = myHero
if not Spells[_] then return end
if i.charName == k.charName and self.supportedtypes[i.type].supported then
if i.displayname == "" then i.displayname = _ end
if i.danger == 0 then i.danger = 1 end
if not EMenu.Spells[_] then EMenu.Spells:Menu(i.charName..""..self.str[i.slot]..""..i.displayname,""..i.charName.." | "..(self.str[i.slot] or "?").." - "..i.displayname) end
EMenu.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Boolean("Dodge"..i.charName..""..self.str[i.slot]..""..i.displayname, "Enable Dodge", true)
EMenu.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Boolean("Draw"..i.charName..""..self.str[i.slot]..""..i.displayname, "Enable Draw", true)
EMenu.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Boolean("Dashes"..i.charName..""..self.str[i.slot]..""..i.displayname, "Enable Evade Spells", true)
EMenu.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Info("Empty12"..i.charName..""..self.str[i.slot]..""..i.displayname, "")
EMenu.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Slider("radius"..i.charName..""..self.str[i.slot]..""..i.displayname,"Radius",(i.radius or 150), ((i.radius-50) or 50),((i.radius+100) or 250), 5)
if i.dangerous then EMenu.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Slider("hp"..i.charName..""..self.str[i.slot]..""..i.displayname, "HP to Dodge", 100, 1, 100, 5)
else EMenu.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Slider("hp"..i.charName..""..self.str[i.slot]..""..i.displayname, "HP to Dodge", 85, 1, 100, 5)
end
EMenu.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Slider("d"..i.charName..""..self.str[i.slot]..""..i.displayname,"Danger",(i.danger or 1), 1, 5, 1)
EMenu.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Info("Empty123"..i.charName..""..self.str[i.slot]..""..i.displayname, "")
EMenu.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Boolean("IsD"..i.charName..""..self.str[i.slot]..""..i.displayname,"Dangerous", i.dangerous or false)
EMenu.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Boolean("ffe"..i.charName..""..self.str[i.slot]..""..i.displayname,"Fast Evade", i.ffe or false)
EMenu.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Boolean("H"..i.charName..""..self.str[i.slot]..""..i.displayname, "Humanizer", false)
if i.mcollision then
EMenu.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Boolean("Coll"..i.charName..""..self.str[i.slot]..""..i.displayname, "Collision", true)
else
EMenu.Spells[i.charName..""..self.str[i.slot]..""..i.displayname]:Info("nohColl"..i.charName..""..self.str[i.slot]..""..i.displayname, "No Collision available")
end
end
end
end
if self.EvadeSpells[GetObjectName(myHero)] then
for i = 0,3 do
if self.EvadeSpells[GetObjectName(myHero)][i] and self.EvadeSpells[GetObjectName(myHero)][i].name and self.EvadeSpells[GetObjectName(myHero)][i].spellKey then
if not EMenu.EvadeSpells[self.EvadeSpells[GetObjectName(myHero)][i].name] then EMenu.EvadeSpells:Menu(self.EvadeSpells[GetObjectName(myHero)][i].name,""..myHero.charName.." | "..(self.str[i] or "?").." - "..self.EvadeSpells[GetObjectName(myHero)][i].name) end
EMenu.EvadeSpells[self.EvadeSpells[GetObjectName(myHero)][i].name]:Boolean("Dodge"..self.EvadeSpells[GetObjectName(myHero)][i].name, "Enable Dodge", true)
EMenu.EvadeSpells[self.EvadeSpells[GetObjectName(myHero)][i].name]:Slider("d"..self.EvadeSpells[GetObjectName(myHero)][i].name,"Danger",(self.EvadeSpells[GetObjectName(myHero)][i].dl or 1), 1, 5, 1)
end
end
end
if self.Flash then
EMenu.EvadeSpells:Menu("Flash",""..myHero.charName.." | Summoner - Flash")
EMenu.EvadeSpells.Flash:Boolean("DodgeFlash", "Enable Dodge", true)
EMenu.EvadeSpells.Flash:Slider("dFlash","Danger", 5, 1, 5, 1)
end
end,.001)
Callback.Add("Tick", function() self:Tickp() end)
Callback.Add("ProcessSpell", function(unit, spellProc) self:Detection(unit,spellProc) end)
Callback.Add("CreateObj", function(obj) self:CreateObject(obj) end)
Callback.Add("DeleteObj", function(obj) self:DeleteObject(obj) end)
Callback.Add("Draw", function() self:Drawp() end)
Callback.Add("ProcessWaypoint", function(unit,wp) self:prwp(unit,wp) end)
Callback.Add("WndMsg", function(s1,s2) self:WndMsg(s1,s2) end)
Callback.Add("IssueOrder", function(order) self:BlockMov(order) end)
Spells = {
["AatroxQ"]={charName="Aatrox",slot=0,type="Circle",delay=0.6,range=650,radius=250,speed=2000,addHitbox=true,danger=3,dangerous=true,proj="nil",killTime=0.225,displayname="Dark Flight",mcollision=false},
["AatroxE"]={charName="Aatrox",slot=2,type="Line",delay=0.25,range=1075,radius=35,speed=1250,addHitbox=true,danger=3,dangerous=false,proj="AatroxEConeMissile",killTime=0,displayname="Blade of Torment",mcollision=false},
["AhriOrbofDeception"]={charName="Ahri",slot=0,type="Line",delay=0.25,range=1000,radius=100,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="AhriOrbMissile",killTime=0,displayname="Orb of Deception",mcollision=false},
["AhriOrbReturn"]={charName="Ahri",slot=0,type="Return",delay=0,range=1000,radius=100,speed=915,addHitbox=true,danger=2,dangerous=false,proj="AhriOrbReturn",killTime=0,displayname="Orb of Deception2",mcollision=false},
["AhriSeduce"]={charName="Ahri",slot=2,type="Line",delay=0.25,range=1000,radius=60,speed=1600,addHitbox=true,danger=3,dangerous=true,proj="AhriSeduceMissile",killTime=0,displayname="Charm",mcollision=true},
["Pulverize"]={charName="Alistar",slot=0,type="Circle",delay=0.25,range=1000,radius=200,speed=math.huge,addHitbox=true,danger=5,dangerous=true,proj="nil",killTime=0.25,displayname="Pulverize",mcollision=false},
["BandageToss"]={charName="Amumu",slot=0,type="Line",delay=0.25,range=1000,radius=90,speed=2000,addHitbox=true,danger=3,dangerous=true,proj="SadMummyBandageToss",killTime=0,displayname="Bandage Toss",mcollision=true},
["CurseoftheSadMummy"]={charName="Amumu",slot=3,type="Circle",delay=0.25,range=0,radius=550,speed=math.huge,addHitbox=false,danger=5,dangerous=true,proj="nil",killTime=1.25,displayname="Curse of the Sad Mummy",mcollision=false},
["FlashFrost"]={charName="Anivia",slot=0,type="Line",delay=0.25,range=1200,radius=110,speed=850,addHitbox=true,danger=3,dangerous=true,proj="FlashFrostSpell",killTime=0,displayname="Flash Frost",mcollision=false},
["Incinerate"]={charName="Annie",slot=1,type="Cone",delay=0.25,range=825,radius=80,speed=math.huge,angle=50,addHitbox=false,danger=2,dangerous=false,proj="nil",killTime=0,displayname="",mcollision=false},
["InfernalGuardian"]={charName="Annie",slot=3,type="Circle",delay=0.25,range=600,radius=251,speed=math.huge,addHitbox=true,danger=5,dangerous=true,proj="nil",killTime=0.3,displayname="",mcollision=false},
-- ["Volley"]={charName="Ashe",slot=1,type="Line",delay=0.25,range=1200,radius=60,speed=1500,addHitbox=true,danger=2,dangerous=false,proj="VolleyAttack",killTime=0,displayname="",mcollision=false},
["EnchantedCrystalArrow"]={charName="Ashe",slot=3,type="Line",delay=0.2,range=20000,radius=130,speed=1600,addHitbox=true,danger=5,dangerous=true,proj="EnchantedCrystalArrow",killTime=0,displayname="Enchanted Arrow",mcollision=false},
["AurelionSolQ"]={charName="AurelionSol",slot=0,type="Line",delay=0.25,range=1500,radius=180,speed=850,addHitbox=true,danger=2,dangerous=false,proj="AurelionSolQMissile",killTime=0,displayname="AurelionSolQ",mcollision=false},
["AurelionSolR"]={charName="AurelionSol",slot=3,type="Line",delay=0.3,range=1420,radius=120,speed=4500,addHitbox=true,danger=3,dangerous=true,proj="AurelionSolRBeamMissile",killTime=0,displayname="AurelionSolR",mcollision=false},
["BardQ"]={charName="Bard",slot=0,type="Line",delay=0.25,range=850,radius=60,speed=1600,addHitbox=true,danger=3,dangerous=true,proj="BardQMissile",killTime=0,displayname="BardQ",mcollision=true},
["BardR"]={charName="Bard",slot=3,type="Circle",delay=0.5,range=3400,radius=350,speed=2100,addHitbox=true,danger=2,dangerous=false,proj="BardR",killTime=1,displayname="BardR",mcollision=false},
["RocketGrab"]={charName="Blitzcrank",slot=0,type="Line",delay=0.2,range=1050,radius=70,speed=1800,addHitbox=true,danger=4,dangerous=true,proj="RocketGrabMissile",killTime=0,displayname="Rocket Grab",mcollision=true},
["StaticField"]={charName="Blitzcrank",slot=3,type="Circle",delay=0.25,range=0,radius=600,speed=math.huge,addHitbox=false,danger=2,dangerous=false,proj="nil",killTime=0.2,displayname="Static Field",mcollision=false},
["BrandQ"]={charName="Brand",slot=0,type="Line",delay=0.25,range=1050,radius=60,speed=1600,addHitbox=true,danger=3,dangerous=true,proj="BrandQMissile",killTime=0,displayname="Sear",mcollision=true},
["BrandW"]={charName="Brand",slot=1,type="Circle",delay=0.85,range=900,radius=240,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0.275,displayname="Pillar of Flame"}, -- doesnt work
["BraumQ"]={charName="Braum",slot=0,type="Line",delay=0.25,range=1000,radius=60,speed=1700,addHitbox=true,danger=3,dangerous=true,proj="BraumQMissile",killTime=0,displayname="Winter's Bite",mcollision=true},
["BraumRWrapper"]={charName="Braum",slot=3,type="Line",delay=0.5,range=1250,radius=115,speed=1400,addHitbox=true,danger=4,dangerous=true,proj="braumrmissile",killTime=0,displayname="Glacial Fissure",mcollision=false},
["CaitlynPiltoverPeacemaker"]={charName="Caitlyn",slot=0,type="Line",delay=0.6,range=1300,radius=90,speed=1800,addHitbox=true,danger=2,dangerous=false,proj="CaitlynPiltoverPeacemaker",killTime=2,displayname="Piltover Peacemaker",mcollision=false},
["CaitlynEntrapment"]={charName="Caitlyn",slot=2,type="Line",delay=0.4,range=1000,radius=70,speed=1600,addHitbox=true,danger=1,dangerous=false,proj="CaitlynEntrapmentMissile",killTime=0,displayname="90 Caliber Net",mcollision=true},
["CassiopeiaQ"]={charName="Cassiopeia",slot=0,type="Circle",delay=0.75,range=850,radius=150,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="CassiopeiaNoxiousBlast",killTime=0.2,displayname="Noxious Blast",mcollision=false},
["CassiopeiaR"]={charName="Cassiopeia",slot=3,type="Cone",delay=0.6,range=825,radius=80,speed=math.huge,angle=80,addHitbox=false,danger=5,dangerous=true,proj="CassiopeiaPetrifyingGaze",killTime=0,displayname="Petrifying Gaze",mcollision=false},
["Rupture"]={charName="Chogath",slot=0,type="Circle",delay=.25,range=950,radius=250,speed=math.huge,addHitbox=true,danger=3,dangerous=false,proj="Rupture",killTime=1.75,displayname="Rupture",mcollision=false},
["PhosphorusBomb"]={charName="Corki",slot=0,type="Circle",delay=0.3,range=825,radius=250,speed=1000,addHitbox=true,danger=2,dangerous=false,proj="PhosphorusBombMissile",killTime=0.35,displayname="Phosphorus Bomb",mcollision=false},
["CarpetBombMega"]={charName="Corki",slot=2,type="Line",delay=0.2,range=1900,radius=140,speed=1600,addHitbox=true,danger=2,dangerous=false,proj="CarpetBombMega",killTime=0,displayname="Special Delivery",mcollision=false},
["MissileBarrage"]={charName="Corki",slot=3,type="Line",delay=0.2,range=1300,radius=40,speed=2000,addHitbox=true,danger=2,dangerous=false,proj="MissileBarrageMissile",killTime=0,displayname="Missile Barrage",mcollision=true},
["MissileBarrage2"]={charName="Corki",slot=3,type="Line",delay=0.2,range=1500,radius=40,speed=2000,addHitbox=true,danger=2,dangerous=false,proj="MissileBarrageMissile2",killTime=0,displayname="Missile Barrage big",mcollision=true},
["DariusCleave"]={charName="Darius",slot=0,type="Circle",delay=0.75,range=0,radius=425 - 50,speed=math.huge,addHitbox=true,danger=3,dangerous=false,proj="DariusCleave",killTime=0,displayname="Cleave",mcollision=false},
["DariusAxeGrabCone"]={charName="Darius",slot=2,type="Cone",delay=0.25,range=550,radius=80,speed=math.huge,angle=30,addHitbox=false,danger=3,dangerous=true,proj="DariusAxeGrabCone",killTime=0,displayname="Apprehend",mcollision=false},
["DianaArc"]={charName="Diana",slot=0,type="Circle",delay=0.25,range=835,radius=195,speed=1400,addHitbox=true,danger=3,dangerous=true,proj="DianaArcArc",killTime=0,displayname="",mcollision=false},
["DianaArcArc"]={charName="Diana",slot=0,type="Arc",delay=0.25,range=835,radius=195,speed=1400,addHitbox=true,danger=3,dangerous=true,proj="DianaArcArc",killTime=0,displayname="",mcollision=false},
["InfectedCleaverMissileCast"]={charName="DrMundo",slot=0,type="Line",delay=0.25,range=1050,radius=60,speed=2000,addHitbox=true,danger=3,dangerous=false,proj="InfectedCleaverMissile",killTime=0,displayname="Infected Cleaver",mcollision=true},
["DravenDoubleShot"]={charName="Draven",slot=2,type="Line",delay=0.25,range=1100,radius=130,speed=1400,addHitbox=true,danger=3,dangerous=true,proj="DravenDoubleShotMissile",killTime=0,displayname="Stand Aside",mcollision=false},
["DravenRCast"]={charName="Draven",slot=3,type="Line",delay=0.5,range=25000,radius=160,speed=2000,addHitbox=true,danger=5,dangerous=true,proj="DravenR",killTime=0,displayname="Whirling Death",mcollision=false},
["EkkoQ"]={charName="Ekko",slot=0,type="Line",delay=0.25,range=925,radius=60,speed=1650,addHitbox=true,danger=4,dangerous=true,proj="ekkoqmis",killTime=0,displayname="Timewinder",mcollision=false},
["EkkoW"]={charName="Ekko",slot=1,type="Circle",delay=3.75,range=1600,radius=375,speed=1650,addHitbox=false,danger=3,dangerous=false,proj="EkkoW",killTime=1.2,displayname="Parallel Convergence",mcollision=false},
["EkkoR"]={charName="Ekko",slot=3,type="Circle",delay=0.25,range=1600,radius=375,speed=1650,addHitbox=true,danger=3,dangerous=false,proj="EkkoR",killTime=0.2,displayname="Chronobreak",mcollision=false},
["EliseHumanE"]={charName="Elise",slot=2,type="Line",delay=0.25,range=925,radius=55,speed=1600,addHitbox=true,danger=4,dangerous=true,proj="EliseHumanE",killTime=0,displayname="Cocoon",mcollision=true},
["EvelynnR"]={charName="Evelynn",slot=3,type="Circle",delay=0.25,range=650,radius=350,speed=math.huge,addHitbox=true,danger=5,dangerous=true,proj="EvelynnR",killTime=0.2,displayname="Agony's Embrace"},
["EzrealMysticShot"]={charName="Ezreal",slot=0,type="Line",delay=0.25,range=1300,radius=50,speed=1975,addHitbox=true,danger=2,dangerous=false,proj="EzrealMysticShotMissile",killTime=0,displayname="Mystic Shot",mcollision=true},
["EzrealEssenceFlux"]={charName="Ezreal",slot=1,type="Line",delay=0.25,range=1000,radius=80,speed=1300,addHitbox=true,danger=2,dangerous=false,proj="EzrealEssenceFluxMissile",killTime=0,displayname="Essence Flux",mcollision=false},
["EzrealTrueshotBarrage"]={charName="Ezreal",slot=3,type="Line",delay=1,range=20000,radius=150,speed=2000,addHitbox=true,danger=3,dangerous=true,proj="EzrealTrueshotBarrage",killTime=0,displayname="Trueshot Barrage",mcollision=false},
["FioraW"]={charName="Fiora",slot=1,type="Line",delay=0.5,range=800,radius=70,speed=3200,addHitbox=true,danger=2,dangerous=false,proj="FioraWMissile",killTime=0,displayname="Riposte",mcollision=false},
["FizzMarinerDoom"]={charName="Fizz",slot=3,type="Line",delay=0.25,range=1150,radius=120,speed=1350,addHitbox=true,danger=5,dangerous=true,proj="FizzMarinerDoomMissile",killTime=0,displayname="Chum the Waters",mcollision=false},
["FizzMarinerDoomMissile"]={charName="Fizz",slot=3,type="Circle",delay=0.25,range=800,radius=300,speed=1350,addHitbox=true,danger=5,dangerous=true,proj="FizzMarinerDoomMissile",killTime=0,displayname="Chum the Waters End",mcollision=false},
["GalioResoluteSmite"]={charName="Galio",slot=0,type="Circle",delay=0.25,range=900,radius=200,speed=1300,addHitbox=true,danger=2,dangerous=false,proj="GalioResoluteSmite",killTime=0.2,displayname="Resolute Smite",mcollision=false},
["GalioRighteousGust"]={charName="Galio",slot=2,type="Line",delay=0.25,range=1100,radius=120,speed=1200,addHitbox=true,danger=2,dangerous=false,proj="GalioRighteousGust",killTime=0,displayname="Righteous Ghost",mcollision=false},
["GalioIdolOfDurand"]={charName="Galio",slot=3,type="Circle",delay=0.25,range=0,radius=550,speed=math.huge,addHitbox=false,danger=5,dangerous=true,proj="nil",killTime=1,displayname="Idol of Durand",mcollision=false},
["GnarQ"]={charName="Gnar",slot=0,type="Line",delay=0.25,range=1200,radius=60,speed=1225,addHitbox=true,danger=2,dangerous=false,proj="gnarqmissile",killTime=0,displayname="Boomerang Throw",mcollision=false},
["GnarQReturn"]={charName="Gnar",slot=0,type="Line",delay=0,range=1200,radius=75,speed=1225,addHitbox=true,danger=2,dangerous=false,proj="GnarQMissileReturn",killTime=0,displayname="Boomerang Throw2",mcollision=false},
["GnarBigQ"]={charName="Gnar",slot=0,type="Line",delay=0.5,range=1150,radius=90,speed=2100,addHitbox=true,danger=2,dangerous=false,proj="GnarBigQMissile",killTime=0,displayname="Boulder Toss",mcollision=true},
["GnarBigW"]={charName="Gnar",slot=1,type="Line",delay=0.6,range=600,radius=80,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="GnarBigW",killTime=0,displayname="Wallop",mcollision=false},
["GnarE"]={charName="Gnar",slot=2,type="Circle",delay=0,range=473,radius=150,speed=903,addHitbox=true,danger=2,dangerous=false,proj="GnarE",killTime=0.2,displayname="GnarE",mcollision=false},
["GnarBigE"]={charName="Gnar",slot=2,type="Circle",delay=0.25,range=475,radius=200,speed=1000,addHitbox=true,danger=2,dangerous=false,proj="GnarBigE",killTime=0.2,displayname="GnarBigE",mcollision=false},
["GnarR"]={charName="Gnar",slot=3,type="Circle",delay=0.25,range=0,radius=500,speed=math.huge,addHitbox=false,danger=5,dangerous=true,proj="nil",killTime=0.3,displayname="GnarUlt",mcollision=false},
["GragasQ"]={charName="Gragas",slot=0,type="Circle",delay=0.25,range=1100,radius=275,speed=1300,addHitbox=true,danger=2,dangerous=false,proj="GragasQMissile",killTime=4.25,displayname="Barrel Roll",mcollision=false,killName="GragasQToggle"},
["GragasE"]={charName="Gragas",slot=2,type="Line",delay=0,range=800,radius=200,speed=800,addHitbox=true,danger=2,dangerous=false,proj="GragasE",killTime=0.5,displayname="Body Slam",mcollision=true},
["GragasR"]={charName="Gragas",slot=3,type="Circle",delay=0.25,range=1050,radius=375,speed=1800,addHitbox=true,danger=5,dangerous=true,proj="GragasRBoom",killTime=0.3,displayname="Explosive Cask",mcollision=false},
["GravesBasicAttack"]={charName="Graves",slot=-2,type="Cone",delay=0.2,range=750,radius=140,speed=math.huge,angle=45,addHitbox=true,danger=1,dangerous=false,proj="GravesBasicAttackSpread",killTime=1,displayname="Auto Attack",mcollision=false},
["GravesQLineMis"]={charName="Graves",slot=0,type="Rectangle",delay=0.2,range=750,radius=140,radius2=300,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="GravesQLineMis",killTime=1,displayname="Buckshot Rectangle",mcollision=false},
["GravesClusterShotSoundMissile"]={charName="Graves",slot=0,type="Line",delay=0.2,range=750,radius=60,speed=2000,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0,displayname="Buckshot",mcollision=false},
["GravesQReturn"]={charName="Graves",slot=0,type="Line",delay=0,range=750,radius=60,speed=1150,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0,displayname="Buckshot return",mcollision=false},
["GravesSmokeGrenade"]={charName="Graves",slot=1,type="Circle",delay=0.25,range=925,radius=275,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="GravesSmokeGrenadeBoom",killTime=4.5,displayname="SmokeScreen",mcollision=false},
["GravesChargeShot"]={charName="Graves",slot=3,type="Line",delay=0.2,range=1000,radius=100,speed=2100,addHitbox=true,danger=5,dangerous=true,proj="GravesChargeShotShot",killTime=0,displayname="CollateralDmg",mcollision=false},
["GravesChargeShotFxMissile"]={charName="Graves",slot=3,type="Cone",delay=0,range=1000,radius=100,speed=2100,angle=60,addHitbox=true,danger=5,dangerous=true,proj="nil",killTime=0,displayname="CollateralDmg end",mcollision=false},
["HecarimUlt"]={charName="Hecarim",slot=3,type="Line",delay=0.2,range=1100,radius=300,speed=1200,addHitbox=true,danger=5,dangerous=true,proj="HecarimUltMissile",killTime=0.55,displayname="HecarimR",mcollision=false},
["HeimerdingerTurretEnergyBlast"]={charName="Heimerdinger",slot=0,type="Line",delay=0.4,range=1000,radius=70,speed=1000,addHitbox=true,danger=2,dangerous=false,proj="HeimerdingerTurretEnergyBlast",killTime=0,displayname="Turret",mcollision=false},
["HeimerdingerW"]={charName="Heimerdinger",slot=1,type="Cone",delay=0.25,range=800,radius=70,speed=1800,angle=10,addHitbox=true,danger=2,dangerous=false,proj="HeimerdingerWAttack2",killTime=0,displayname="HeimerUltW",mcollision=true},
["HeimerdingerE"]={charName="Heimerdinger",slot=2,type="Circle",delay=0.25,range=925,radius=100,speed=1200,addHitbox=true,danger=2,dangerous=false,proj="heimerdingerespell",killTime=0.3,displayname="HeimerdingerE",mcollision=false},
["IllaoiQ"]={charName="Illaoi",slot=0,type="Line",delay=0.75,range=750,radius=160,speed=math.huge,addHitbox=true,danger=3,dangerous=true,proj="illaoiemis",killTime=0,displayname="",mcollision=false},
["IllaoiE"]={charName="Illaoi",slot=2,type="Line",delay=0.25,range=1100,radius=50,speed=1900,addHitbox=true,danger=3,dangerous=true,proj="illaoiemis",killTime=0,displayname="",mcollision=true},
["IllaoiR"]={charName="Illaoi",slot=3,type="Circle",delay=0.5,range=0,radius=450,speed=math.huge,addHitbox=false,danger=3,dangerous=true,proj="nil",killTime=0.2,displayname="",mcollision=false},
["IreliaTranscendentBlades"]={charName="Irelia",slot=3,type="Line",delay=0,range=1200,radius=65,speed=1600,addHitbox=true,danger=2,dangerous=false,proj="IreliaTranscendentBlades",killTime=0,displayname="Transcendent Blades",mcollision=false},
["IvernQ"]={charName="Ivern",slot=0,type="Line",delay=0.25,range=1100,radius=65,speed=1300,addHitbox=true,danger=3,dangerous=true,proj="IvernQ",killTime=0,displayname="",mcollision=true},
["HowlingGaleSpell"]={charName="Janna",slot=0,type="Line",delay=0.25,range=1700,radius=120,speed=800,addHitbox=true,danger=2,dangerous=false,proj="HowlingGaleSpell",killTime=0,displayname="HowlingGale",mcollision=false},
["JarvanIVDragonStrike"]={charName="JarvanIV",slot=0,type="Line",delay=0.6,range=770,radius=70,speed=math.huge,addHitbox=true,danger=3,dangerous=false,proj="nil",killTime=0,displayname="DragonStrike",mcollision=false},
["JarvanIVEQ"]={charName="JarvanIV",slot=0,type="Line",delay=0.25,range=880,radius=70,speed=1450,addHitbox=true,danger=3,dangerous=true,proj="nil",killTime=0,displayname="DragonStrike2",mcollision=false},
["JarvanIVDemacianStandard"]={charName="JarvanIV",slot=2,type="Circle",delay=0.5,range=860,radius=175,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="JarvanIVDemacianStandard",killTime=1.5,displayname="Demacian Standard",mcollision=false},
["JayceShockBlast"]={charName="Jayce",slot=0,type="Line",delay=0.25,range=1300,radius=70,speed=1450,addHitbox=true,danger=2,dangerous=false,proj="JayceShockBlastMis",killTime=0,displayname="ShockBlast",mcollision=true},
["JayceShockBlastWallMis"]={charName="Jayce",slot=0,type="Line",delay=0.25,range=1300,radius=70,speed=2350,addHitbox=true,danger=2,dangerous=false,proj="JayceShockBlastWallMis",killTime=0,displayname="ShockBlastCharged",mcollision=true},
["JhinW"]={charName="Jhin",slot=1,type="Line",delay=0.75,range=2550,radius=40,speed=5000,addHitbox=true,danger=3,dangerous=true,proj="JhinWMissile",killTime=0,displayname="",mcollision=false},
["JhinRShot"]={charName="Jhin",slot=3,type="Line",delay=0.25,range=3500,radius=80,speed=5000,addHitbox=true,danger=3,dangerous=true,proj="JhinRShotMis",killTime=0,displayname="JhinR",mcollision=false},
["JinxW"]={charName="Jinx",slot=1,type="Line",delay=0.3,range=1600,radius=60,speed=2500,addHitbox=true,danger=3,dangerous=true,proj="JinxWMissile",killTime=.6,displayname="Zap",mcollision=true},
["JinxE"]={charName="Jinx",slot=2,type="Rectangle",delay=0.25,range=1600,radius=100,radius2=275,speed=math.huge,addHitbox=true,danger=3,dangerous=true,proj="JinxEHit",killTime=5,displayname="Zap",mcollision=true},
["JinxR"]={charName="Jinx",slot=3,type="Line",delay=0.6,range=20000,radius=140,speed=1700,addHitbox=true,danger=5,dangerous=true,proj="JinxR",killTime=0,displayname="Death Rocket",mcollision=false},
["KalistaMysticShot"]={charName="Kalista",slot=0,type="Line",delay=0.25,range=1200,radius=40,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="kalistamysticshotmis",killTime=0,displayname="MysticShot",mcollision=true},
["KarmaQ"]={charName="Karma",slot=0,type="Line",delay=0.25,range=1050,radius=60,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="KarmaQMissile",killTime=0,displayname="",mcollision=true},
["KarmaQMantra"]={charName="Karma",slot=0,type="Line",delay=0.25,range=950,radius=80,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="KarmaQMissileMantra",killTime=0,displayname="",mcollision=true},
["KarthusLayWasteA1"]={charName="Karthus",slot=0,type="Circle",delay=0.625,range=875,radius=200,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0.2,displayname="Lay Waste 1",mcollision=false},
["KarthusLayWasteA2"]={charName="Karthus",slot=0,type="Circle",delay=0.625,range=875,radius=200,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0.2,displayname="Lay Waste 2",mcollision=false},
["KarthusLayWasteA3"]={charName="Karthus",slot=0,type="Circle",delay=0.625,range=875,radius=200,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0.2,displayname="Lay Waste 3",mcollision=false},
["KarthusWallOfPain"]={charName="Karthus",slot=2,type="Rectangle",delay=0.25,range=600,radius=160,radius2=500,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=5,displayname="Wall of Pain",mcollision=false},
["RiftWalk"]={charName="Kassadin",slot=3,type="Circle",delay=0.25,range=450,radius=270,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="RiftWalk",killTime=0.3,displayname="",mcollision=false},
["KennenShurikenHurlMissile1"]={charName="Kennen",slot=0,type="Line",delay=0.18,range=1050,radius=50,speed=1650,addHitbox=true,danger=2,dangerous=false,proj="KennenShurikenHurlMissile1",killTime=0,displayname="Thundering Shuriken",mcollision=true},
["KhazixW"]={charName="Khazix",slot=1,type="Line",delay=0.25,range=1025,radius=70,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="KhazixWMissile",killTime=0,displayname="",mcollision=true},
["KledE"]={charName="Kled",slot=0,type="Line",delay=0.25,range=1025,radius=70,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="KhazixWMissile",killTime=0,displayname="",mcollision=true},
["KledQ"]={charName="Kled",slot=2,type="Line",delay=0,range=750,radius=125,speed=945,addHitbox=true,danger=3,dangerous=true,proj="KledE",killTime=0,displayname="",mcollision=true},
["KhazixE"]={charName="Khazix",slot=2,type="Circle",delay=0.25,range=600,radius=300,speed=1500,addHitbox=true,danger=2,dangerous=false,proj="KhazixE",killTime=0.2,displayname="",mcollision=false},
["KogMawQ"]={charName="KogMaw",slot=0,type="Line",delay=0.25,range=975,radius=70,speed=1650,addHitbox=true,danger=2,dangerous=false,proj="KogMawQ",killTime=0,displayname="",mcollision=true},
["KogMawVoidOoze"]={charName="KogMaw",slot=2,type="Line",delay=0.25,range=1200,radius=120,speed=1400,addHitbox=true,danger=2,dangerous=false,proj="KogMawVoidOozeMissile",killTime=0,displayname="Void Ooze",mcollision=false},
["KogMawLivingArtillery"]={charName="KogMaw",slot=3,type="Circle",delay=0.25,range=1800,radius=225,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="KogMawLivingArtillery",killTime=1,displayname="LivingArtillery",mcollision=false},
["LeblancSlide"]={charName="Leblanc",slot=1,type="Circle",delay=0,range=600,radius=220,speed=1450,addHitbox=true,danger=2,dangerous=false,proj="LeblancSlide",killTime=0.2,displayname="Slide",mcollision=false},
["LeblancSlideM"]={charName="Leblanc",slot=3,type="Circle",delay=0,range=600,radius=220,speed=1450,addHitbox=true,danger=2,dangerous=false,proj="LeblancSlideM",killTime=0.2,displayname="Slide R",mcollision=false},
["LeblancSoulShackle"]={charName="Leblanc",slot=2,type="Line",delay=0,range=950,radius=70,speed=1750,addHitbox=true,danger=3,dangerous=true,proj="LeblancSoulShackle",killTime=0,displayname="Ethereal Chains R",mcollision=true},
["LeblancSoulShackleM"]={charName="Leblanc",slot=3,type="Line",delay=0,range=950,radius=70,speed=1750,addHitbox=true,danger=3,dangerous=true,proj="LeblancSoulShackleM",killTime=0,displayname="Ethereal Chains",mcollision=true},
["BlindMonkQOne"]={charName="LeeSin",slot=0,type="Line",delay=0.25,range=1000,radius=80,speed=1800,addHitbox=true,danger=3,dangerous=true,proj="BlindMonkQOne",killTime=0,displayname="Sonic Wave",mcollision=true},
["LeonaZenithBlade"]={charName="Leona",slot=2,type="Line",delay=0.25,range=875,radius=70,speed=1750,addHitbox=true,danger=3,dangerous=true,proj="LeonaZenithBladeMissile",killTime=0,displayname="Zenith Blade",mcollision=false},
["LeonaSolarFlare"]={charName="Leona",slot=3,type="Circle",delay=1,range=1200,radius=300,speed=math.huge,addHitbox=true,danger=5,dangerous=true,proj="LeonaSolarFlare",killTime=0.5,displayname="Solar Flare",mcollision=false},
["LissandraQ"]={charName="Lissandra",slot=0,type="Line",delay=0.25,range=700,radius=75,speed=2200,addHitbox=true,danger=2,dangerous=false,proj="LissandraQMissile",killTime=0,displayname="Ice Shard",mcollision=false},
["LissandraQShards"]={charName="Lissandra",slot=0,type="Line",delay=0.25,range=700,radius=90,speed=2200,addHitbox=true,danger=2,dangerous=false,proj="lissandraqshards",killTime=0,displayname="Ice Shard2",mcollision=false},
["LissandraE"]={charName="Lissandra",slot=2,type="Line",delay=0.25,range=1025,radius=125,speed=850,addHitbox=true,danger=2,dangerous=false,proj="LissandraEMissile",killTime=0,displayname="",mcollision=false},
["LucianQ"]={charName="Lucian",slot=0,type="Line",delay=0.5,range=800,radius=65,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="LucianQ",killTime=0,displayname="",mcollision=false},
["LucianW"]={charName="Lucian",slot=1,type="Line",delay=0.2,range=1000,radius=55,speed=1600,addHitbox=true,danger=2,dangerous=false,proj="lucianwmissile",killTime=0,displayname="",mcollision=true},
["LucianRMis"]={charName="Lucian",slot=3,type="Line",delay=0.5,range=1400,radius=110,speed=2800,addHitbox=true,danger=2,dangerous=false,proj="lucianrmissileoffhand",killTime=0,displayname="LucianR",mcollision=true},
["LuluQ"]={charName="Lulu",slot=0,type="Line",delay=0.25,range=950,radius=60,speed=1450,addHitbox=true,danger=2,dangerous=false,proj="LuluQMissile",killTime=0,displayname="",mcollision=false},
["LuluQPix"]={charName="Lulu",slot=0,type="Line",delay=0.25,range=950,radius=60,speed=1450,addHitbox=true,danger=2,dangerous=false,proj="LuluQMissileTwo",killTime=0,displayname="",mcollision=false},
["LuxLightBinding"]={charName="Lux",slot=0,type="Line",delay=0.3,range=1300,radius=70,speed=1200,addHitbox=true,danger=3,dangerous=true,proj="LuxLightBindingMis",killTime=0,displayname="Light Binding",mcollision=true},
["LuxLightStrikeKugel"]={charName="Lux",slot=2,type="Circle",delay=0.25,range=1100,radius=350,speed=1300,addHitbox=true,danger=2,dangerous=false,proj="LuxLightStrikeKugel",killTime=5.25,displayname="LightStrikeKugel",mcollision=false,killName="LuxLightstrikeToggle"},
["LuxMaliceCannon"]={charName="Lux",slot=3,type="Line",delay=1.5,range=3500,radius=190,speed=math.huge,addHitbox=true,danger=5,dangerous=true,proj="LuxMaliceCannon",killTime=2,displayname="Malice Cannon",mcollision=false},
["UFSlash"]={charName="Malphite",slot=3,type="Circle",delay=0,range=1000,radius=270,speed=1500,addHitbox=true,danger=5,dangerous=true,proj="UFSlash",killTime=0.4,displayname="",mcollision=false},
["MalzaharQ"]={charName="Malzahar",slot=0,type="Rectangle",delay=0.75,range=900,radius2=475,radius=130,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="MalzaharQMissile",killTime=0.5,displayname="",mcollision=false},
["DarkBindingMissile"]={charName="Morgana",slot=0,type="Line",delay=0.2,range=1300,radius=80,speed=1200,addHitbox=true,danger=3,dangerous=true,proj="DarkBindingMissile",killTime=0,displayname="Dark Binding",mcollision=true},
["NamiQ"]={charName="Nami",slot=0,type="Circle",delay=0.95,range=1625,radius=200,speed=math.huge,addHitbox=true,danger=3,dangerous=true,proj="NamiQMissile",killTime=0.35,displayname="",mcollision=false},
["NamiR"]={charName="Nami",slot=3,type="Line",delay=0.8,range=2750,radius=260,speed=850,addHitbox=true,danger=2,dangerous=false,proj="NamiRMissile",killTime=0,displayname="",mcollision=false},
["NautilusAnchorDrag"]={charName="Nautilus",slot=0,type="Line",delay=0.25,range=1080,radius=90,speed=2000,addHitbox=true,danger=3,dangerous=true,proj="NautilusAnchorDragMissile",killTime=0,displayname="Anchor Drag",mcollision=true},
["AbsoluteZero"]={charName="Nunu",slot=3,type="Circle",delay=0.25,range=0,radius=750,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=4,displayname="",mcollision=false},
["NocturneDuskbringer"]={charName="Nocturne",slot=0,type="Line",delay=0.25,range=1125,radius=60,speed=1400,addHitbox=true,danger=2,dangerous=false,proj="NocturneDuskbringer",killTime=0,displayname="Duskbringer",mcollision=false},
["JavelinToss"]={charName="Nidalee",slot=0,type="Line",delay=0.25,range=1500,radius=40,speed=1300,addHitbox=true,danger=3,dangerous=true,proj="JavelinToss",killTime=0,displayname="JavelinToss",mcollision=true},
["OlafAxeThrowCast"]={charName="Olaf",slot=0,type="Line",delay=0.25,range=1000,radius=105,speed=1600,addHitbox=true,danger=2,dangerous=false,proj="olafaxethrow",killTime=0,displayname="Axe Throw",mcollision=false},
["OriannaIzunaCommand"]={charName="Orianna",slot=0,type="Line",delay=0,range=1500,radius=80,speed=1200,addHitbox=true,danger=2,dangerous=false,proj="orianaizuna",killTime=0,displayname="",mcollision=false},
["OrianaDissonanceCommand-"]={charName="Orianna",slot=1,type="Circle",delay=0.25,range=0,radius=255,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="OrianaDissonanceCommand-",killTime=0.3,displayname="",mcollision=false},
["OriannasE"]={charName="Orianna",slot=2,type="Line",delay=0,range=1500,radius=85,speed=1850,addHitbox=true,danger=2,dangerous=false,proj="orianaredact",killTime=0,displayname="",mcollision=false},
["OrianaDetonateCommand-"]={charName="Orianna",slot=3,type="Circle",delay=0.7,range=0,radius=410,speed=math.huge,addHitbox=true,danger=5,dangerous=true,proj="OrianaDetonateCommand-",killTime=0.5,displayname="",mcollision=false},
["QuinnQ"]={charName="Quinn",slot=0,type="Line",delay=0,range=1050,radius=60,speed=1550,addHitbox=true,danger=2,dangerous=false,proj="QuinnQ",killTime=0,displayname="",mcollision=true},
["PoppyQ"]={charName="Poppy",slot=0,type="Line",delay=0.5,range=430,radius=120,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="PoppyQ",killTime=1,displayname="",mcollision=false},
["PoppyRSpell"]={charName="Poppy",slot=3,type="Line",delay=0.3,range=1200,radius=100,speed=1600,addHitbox=true,danger=3,dangerous=true,proj="PoppyRMissile",killTime=0,displayname="PoppyR",mcollision=false},
["RengarE"]={charName="Rengar",slot=2,type="Line",delay=0.25,range=1000,radius=70,speed=1500,addHitbox=true,danger=3,dangerous=true,proj="RengarEFinal",killTime=0,displayname="",mcollision=true},
["reksaiqburrowed"]={charName="RekSai",slot=0,type="Line",delay=0.5,range=1050,radius=60,speed=1550,addHitbox=true,danger=3,dangerous=false,proj="RekSaiQBurrowedMis",killTime=0,displayname="RekSaiQ",mcollision=true},
["RivenWindslashMissileRight"]={charName="Riven",slot=3,type="Line",delay=0.25,range=1100,radius=125,speed=1600,addHitbox=false,danger=5,dangerous=true,proj="RivenLightsaberMissile",killTime=0,displayname="WindSlash Right",mcollision=false},
["RivenWindslashMissileCenter"]={charName="Riven",slot=3,type="Line",delay=0.25,range=1100,radius=125,speed=1600,addHitbox=false,danger=5,dangerous=true,proj="RivenLightsaberMissile",killTime=0,displayname="WindSlash Center",mcollision=false},
["RivenWindslashMissileLeft"]={charName="Riven",slot=3,type="Line",delay=0.25,range=1100,radius=125,speed=1600,addHitbox=false,danger=5,dangerous=true,proj="RivenLightsaberMissile",killTime=0,displayname="WindSlash Left",mcollision=false},
-- ["RivenMartyr"]={charName="Riven",slot=1,type="Circle",delay=0.25,range=0,radius=300,speed=math.huge,addHitbox=false,danger=5,dangerous=true,proj="nil",killTime=0.2,displayname="RivenW",mcollision=false},
["RumbleGrenade"]={charName="Rumble",slot=2,type="Line",delay=0.25,range=850,radius=60,speed=2000,addHitbox=true,danger=2,dangerous=false,proj="RumbleGrenade",killTime=0,displayname="Grenade",mcollision=true},
["RumbleCarpetBombM"]={charName="Rumble",slot=3,type="Line",delay=0.4,range=1700,radius=200,speed=1600,addHitbox=true,danger=4,dangerous=false,proj="RumbleCarpetBombMissile",killTime=0,displayname="Carpet Bomb",mcollision=false}, --doesnt work
["RyzeQ"]={charName="Ryze",slot=0,type="Line",delay=0,range=900,radius=50,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="RyzeQ",killTime=0,displayname="",mcollision=true},
["ryzerq"]={charName="Ryze",slot=0,type="Line",delay=0,range=900,radius=50,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="ryzerq",killTime=0,displayname="RyzeQ R",mcollision=true},
["SejuaniArcticAssault"]={charName="Sejuani",slot=0,type="Line",delay=0,range=900,radius=70,speed=1600,addHitbox=true,danger=3,dangerous=true,proj="nil",killTime=0,displayname="ArcticAssault",mcollision=true},
["SejuaniGlacialPrisonStart"]={charName="Sejuani",slot=3,type="Line",delay=0.25,range=1200,radius=110,speed=1600,addHitbox=true,danger=3,dangerous=true,proj="sejuaniglacialprison",killTime=0,displayname="GlacialPrisonStart",mcollision=false},
["SionE"]={charName="Sion",slot=2,type="Line",delay=0.25,range=800,radius=80,speed=1800,addHitbox=true,danger=3,dangerous=true,proj="SionEMissile",killTime=0,displayname="",mcollision=false},
["SionR"]={charName="Sion",slot=3,type="Line",delay=0.5,range=20000,radius=120,speed=1000,addHitbox=true,danger=3,dangerous=true,proj="nil",killTime=0,displayname="",mcollision=false},
["SorakaQ"]={charName="Soraka",slot=0,type="Circle",delay=0,range=950,radius=300,speed=1750,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0.75,displayname="",mcollision=false},
["SorakaE"]={charName="Soraka",slot=2,type="Circle",delay=0,range=925,radius=275,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=2,displayname="",mcollision=false},
["ShenE"]={charName="Shen",slot=2,type="Line",delay=0,range=650,radius=50,speed=1600,addHitbox=true,danger=3,dangerous=true,proj="ShenE",killTime=0,displayname="Shadow Dash",mcollision=false},
["ShyvanaFireball"]={charName="Shyvana",slot=2,type="Line",delay=0.25,range=925,radius=60,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="ShyvanaFireballMissile",killTime=0,displayname="Fireball",mcollision=false},
["ShyvanaTransformCast"]={charName="Shyvana",slot=3,type="Line",delay=0.25,range=750,radius=150,speed=1500,addHitbox=true,danger=3,dangerous=true,proj="ShyvanaTransformCast",killTime=0,displayname="Transform Cast",mcollision=false},
["shyvanafireballdragon2"]={charName="Shyvana",slot=3,type="Line",delay=0.25,range=925,radius=70,speed=2000,addHitbox=true,danger=3,dangerous=false,proj="ShyvanaFireballDragonFxMissile",killTime=0,displayname="Fireball Dragon",mcollision=false},
["SivirQMissileReturn"]={charName="Sivir",slot=0,type="Return",delay=0,range=1075,radius=100,speed=1350,addHitbox=true,danger=2,dangerous=false,proj="SivirQMissileReturn",killTime=0,displayname="SivirQ2",mcollision=false},
["SivirQ"]={charName="Sivir",slot=0,type="Line",delay=0.25,range=1075,radius=90,speed=1350,addHitbox=true,danger=2,dangerous=false,proj="SivirQMissile",killTime=0,displayname="SivirQ",mcollision=false},
["SkarnerFracture"]={charName="Skarner",slot=2,type="Line",delay=0.35,range=350,radius=70,speed=1500,addHitbox=true,danger=2,dangerous=false,proj="SkarnerFractureMissile",killTime=0,displayname="Fracture",mcollision=false},
["SonaR"]={charName="Sona",slot=3,type="Line",delay=0.25,range=900,radius=140,speed=2400,addHitbox=true,danger=5,dangerous=true,proj="SonaR",killTime=0,displayname="Crescendo",mcollision=false},
["SwainShadowGrasp"]={charName="Swain",slot=1,type="Circle",delay=0.25,range=900,radius=180,speed=math.huge,addHitbox=true,danger=3,dangerous=true,proj="SwainShadowGrasp",killTime=1.5,displayname="Shadow Grasp",mcollision=false},
["SyndraQ"]={charName="Syndra",slot=0,type="Circle",delay=0.6,range=800,radius=150,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="SyndraQSpell",killTime=0.2,displayname="",mcollision=false},
["SyndraWCast"]={charName="Syndra",slot=1,type="Circle",delay=0.25,range=950,radius=210,speed=1450,addHitbox=true,danger=2,dangerous=false,proj="syndrawcast",killTime=0.2,displayname="SyndraW",mcollision=false},
["SyndraE"]={charName="Syndra",slot=2,type="Cone",delay=0,range=950,radius=100,speed=2000,addHitbox=true,danger=2,dangerous=false,proj="SyndraEMissile",killTime=0,displayname="SyndraE",mcollision=false},
["syndrae5"]={charName="Syndra",slot=2,type="Line",delay=0,range=950,radius=100,speed=2000,addHitbox=true,danger=2,dangerous=false,proj="syndrae5",killTime=0,displayname="SyndraE2",mcollision=false},
["TalonRake"]={charName="Talon",slot=1,type="Cone",delay=0.25,range=800,radius=80,speed=2300,angle=45,addHitbox=true,danger=2,dangerous=true,proj="talonrakemissileone",killTime=0,displayname="Rake",mcollision=false},
["TalonRakeMissileTwo"]={charName="Talon",slot=1,type="Cone",delay=0.25,range=800,radius=80,speed=1850,angle=45,addHitbox=true,danger=2,dangerous=true,proj="talonrakemissiletwo",killTime=0,displayname="Rake2",mcollision=false},
["TahmKenchQ"]={charName="TahmKench",slot=0,type="Line",delay=0.25,range=951,radius=90,speed=2800,addHitbox=true,danger=3,dangerous=true,proj="tahmkenchqmissile",killTime=0,displayname="Tongue Slash",mcollision=true},
["TaricE"]={charName="Taric",slot=2,type="follow",delay=0.25,range=750,radius=100,speed=math.huge,addHitbox=true,danger=3,dangerous=true,proj="TaricE",killTime=1.25,displayname="",mcollision=false},
["ThreshQ"]={charName="Thresh",slot=0,type="Line",delay=0.5,range=1050,radius=70,speed=1900,addHitbox=true,danger=3,dangerous=true,proj="ThreshQMissile",killTime=0,displayname="",mcollision=true},
["ThreshEFlay"]={charName="Thresh",slot=2,type="Line",delay=0.125,range=500,radius=110,speed=2000,addHitbox=true,danger=3,dangerous=true,proj="ThreshEMissile1",killTime=0,displayname="Flay",mcollision=false},
["RocketJump"]={charName="Tristana",slot=1,type="Circle",delay=0.5,range=900,radius=270,speed=1500,addHitbox=true,danger=2,dangerous=false,proj="RocketJump",killTime=0.3,displayname="",mcollision=false},
["TryndamereE"]={charName="Tryndamere",slot=2,type="Line",delay=0,range=700,radius=93,speed=1000,addHitbox=true,danger=2,dangerous=false,proj="Slash",killTime=0.5,displayname="",mcollision=false},
["WildCards"]={charName="TwistedFate",slot=0,type="Line",delay=0.25,range=1450,radius=40,speed=1000,angle=28,addHitbox=true,danger=2,dangerous=false,proj="SealFateMissile",killTime=0,displayname="",mcollision=false},
["TwitchVenomCask"]={charName="Twitch",slot=1,type="Circle",delay=0.25,range=900,radius=275,speed=1400,addHitbox=true,danger=2,dangerous=false,proj="TwitchVenomCaskMissile",killTime=0.3,displayname="Venom Cask",mcollision=false},
["TwitchSprayAndPrayAttack"]={charName="Twitch",slot=3,type="Line",delay=0.1,range=1200,radius=100,speed=1800,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0.5,displayname="Venom Cask",mcollision=false},
["UrgotHeatseekingLineMissile"]={charName="Urgot",slot=0,type="Line",delay=0.125,range=1000,radius=60,speed=1600,addHitbox=true,danger=2,dangerous=false,proj="UrgotHeatseekingLineMissile",killTime=0,displayname="Heatseeking Line",mcollision=true},
["UrgotPlasmaGrenade"]={charName="Urgot",slot=2,type="Circle",delay=0.25,range=1100,radius=210,speed=1500,addHitbox=true,danger=2,dangerous=false,proj="UrgotPlasmaGrenadeBoom",killTime=0.3,displayname="PlasmaGrenade",mcollision=false},
["VarusQMissile"]={charName="Varus",slot=0,type="Line",delay=0.25,range=1475,radius=70,speed=1900,addHitbox=true,danger=2,dangerous=false,proj="VarusQMissile",killTime=0,displayname="VarusQ",mcollision=false},
["VarusE"]={charName="Varus",slot=2,type="Circle",delay=0.25,range=925,radius=235,speed=1500,addHitbox=true,danger=2,dangerous=false,proj="VarusE",killTime=2.25,displayname="",mcollision=false},
["VarusR"]={charName="Varus",slot=3,type="Line",delay=0.25,range=800,radius=120,speed=1950,addHitbox=true,danger=3,dangerous=true,proj="VarusRMissile",killTime=0,displayname="",mcollision=false},
["VeigarBalefulStrike"]={charName="Veigar",slot=0,type="Line",delay=0.1,range=900,radius=70,speed=1500,addHitbox=true,danger=2,dangerous=false,proj="VeigarBalefulStrikeMis",killTime=0,displayname="BalefulStrike",mcollision=false},
["VeigarDarkMatter"]={charName="Veigar",slot=1,type="Circle",delay=1.35,range=900,radius=225,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="nil",killTime=0.5,displayname="DarkMatter",mcollision=false},
["VeigarEventHorizon"]={charName="Veigar",slot=2,type="Ring",delay=0.5,range=700,radius=400,speed=math.huge,addHitbox=false,danger=3,dangerous=true,proj="nil",killTime=3.5,displayname="EventHorizon",mcollision=false},
["VelkozQ"]={charName="Velkoz",slot=0,type="Line",delay=0.25,range=1100,radius=50,speed=1300,addHitbox=true,danger=2,dangerous=false,proj="VelkozQMissile",killTime=0,displayname="",mcollision=true},
["VelkozQMissileSplit"]={charName="Velkoz",slot=0,type="Line",delay=0.25,range=1100,radius=55,speed=2100,addHitbox=true,danger=2,dangerous=false,proj="VelkozQMissileSplit",killTime=0,displayname="",mcollision=true},
["VelkozW"]={charName="Velkoz",slot=1,type="Line",delay=0.25,range=1050,radius=88,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="VelkozWMissile",killTime=0,displayname="",mcollision=false},
["VelkozE"]={charName="Velkoz",slot=2,type="Circle",delay=0.5,range=800,radius=225,speed=1500,addHitbox=false,danger=2,dangerous=false,proj="VelkozEMissile",killTime=0.5,displayname="",mcollision=false},
["Vi-q"]={charName="Vi",slot=0,type="Line",delay=0.25,range=715,radius=90,speed=1500,addHitbox=true,danger=3,dangerous=true,proj="ViQMissile",killTime=0,displayname="Vi-Q",mcollision=false},
["VladimirR"] = {charName = "Vladimir",slot=3,type="Circle",delay=0.25,range=700,radius=175,speed=math.huge,addHitbox=true,danger=4,dangerous=true,proj="nil",killTime=0,displayname = "Hemoplague",mcollision=false},
["Laser"]={charName="Viktor",slot=2,type="Line",delay=0.25,range=1200,radius=80,speed=1050,addHitbox=true,danger=2,dangerous=false,proj="ViktorDeathRayMissile",killTime=0,displayname="",mcollision=false},
["XerathArcanopulse2"]={charName="Xerath",slot=0,type="Line",delay=0.6,range=1600,radius=95,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="xeratharcanopulse2",killTime=0.5,displayname="Arcanopulse",mcollision=false},
["XerathArcaneBarrage2"]={charName="Xerath",slot=1,type="Circle",delay=0.7,range=1000,radius=275,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="XerathArcaneBarrage2",killTime=0.3,displayname="ArcaneBarrage",mcollision=false},
["XerathMageSpear"]={charName="Xerath",slot=2,type="Line",delay=0.2,range=1300,radius=60,speed=1400,addHitbox=true,danger=2,dangerous=true,proj="XerathMageSpearMissile",killTime=0,displayname="MageSpear",mcollision=true},
["XerathLocusPulse"]={charName="Xerath",slot=3,type="Circle",delay=0.7,range=5600,radius=225,speed=math.huge,addHitbox=true,danger=3,dangerous=true,proj="XerathRMissileWrapper",killTime=0.4,displayname="",mcollision=false},
["YasuoQ3W"]={charName="Yasuo",slot=0,type="Line",delay=0.4,range=1200,radius=90,speed=1300,addHitbox=true,danger=3,dangerous=true,proj="YasuoQ3",killTime=0,displayname="Steel Tempest ",mcollision=false},
["ZacQ"]={charName="Zac",slot=0,type="Line",delay=0.5,range=550,radius=120,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="ZacQ",killTime=0,displayname="",mcollision=false},
["ZedQ"]={charName="Zed",slot=0,type="Line",delay=0.25,range=925,radius=50,speed=1700,addHitbox=true,danger=2,dangerous=false,proj="ZedQMissile",killTime=0,displayname="",mcollision=false},
["ZiggsQSpell"]={charName="Ziggs",slot=0,type="Circle",delay=0.5,range=1100,radius=200,speed=1750,addHitbox=true,danger=2,dangerous=false,proj="ZiggsQSpell",killTime=0.2,displayname="",mcollision=false},
["ZiggsQSpell2"]={charName="Ziggs",slot=0,type="Circle",delay=0.47,range=1100,radius=200,speed=1750,addHitbox=true,danger=2,dangerous=false,proj="ZiggsQSpell2",killTime=-0.23,displayname="",mcollision=true},
["ZiggsQSpell3"]={charName="Ziggs",slot=0,type="Circle",delay=0.44,range=1100,radius=200,speed=1750,addHitbox=true,danger=2,dangerous=false,proj="ZiggsQSpell3",killTime=-0.26,displayname="",mcollision=true},
["ZiggsW"]={charName="Ziggs",slot=1,type="Circle",delay=0.25,range=1000,radius=275,speed=1750,addHitbox=true,danger=2,dangerous=false,proj="ZiggsW",killTime=4.1,displayname="",mcollision=false,killName="ZiggsWToggle"},
["ZiggsE"]={charName="Ziggs",slot=2,type="Circle",delay=0.5,range=900,radius=250,speed=1750,addHitbox=true,danger=2,dangerous=false,proj="ZiggsE",killTime=10,displayname="",mcollision=false},
["ZiggsR"]={charName="Ziggs",slot=3,type="Circle",delay=0,range=5300,radius=500,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="ZiggsR",killTime=1.25,displayname="",mcollision=false},
["ZileanQ"]={charName="Zilean",slot=0,type="Circle",delay=0.3,range=900,radius=210,speed=2000,addHitbox=true,danger=2,dangerous=false,proj="ZileanQMissile",killTime=1.5,displayname="",mcollision=false},
["ZyraQ"]={charName="Zyra",slot=0,type="Rectangle",delay=0.4,range=800,radius2=400,radius=140,speed=math.huge,addHitbox=true,danger=2,dangerous=false,proj="ZyraQ",killTime=0.35,displayname="",mcollision=false},
["ZyraE"]={charName="Zyra",slot=2,type="Line",delay=0.25,range=1100,radius=70,speed=1300,addHitbox=true,danger=3,dangerous=true,proj="ZyraE",killTime=0,displayname="Grasping Roots",mcollision=false},
--["ZyraRSplash"]={charName="Zyra",slot=3,type="Circle",delay=0.7,range=700,radius=550,speed=math.huge,addHitbox=true,danger=4,dangerous=false,proj="ZyraRSplash",killTime=1,displayname="Splash",mcollision=false},--bugged spell
}
self.EvadeSpells = {
["Ahri"] = {
[3] = {dl = 4,name = "AhriTumble",range = 500,spellDelay = 50,speed = 1575,spellKey = 3,evadeType = "DashP",castType = "Position",},
},
["Caitlyn"] = {
[2] = {dl = 3,name = "CaitlynEntrapment",range = 490,spellDelay = 50,speed = 1000,spellKey = 2,evadeType = "DashP",castType = "Position",},
},
["Corki"] = {
[1] = {dl = 3,name = "CarpetBomb",range = 790,spellDelay = 50,speed = 975,spellKey = 1,evadeType = "DashP",castType = "Position",},
},
["Ekko"] = {
[2] = {dl = 3,name = "PhaseDive",range = 350,spellDelay = 50,speed = 1150,spellKey = 2,evadeType = "DashP",castType = "Position",},
[3] = {dl = 4,name = "Chronobreak",range = 20000,spellDelay = 50,spellKey = 3,evadeType = "DashS",castType = "Self",},
},
["Ezreal"] = {
[2] = {dl = 2,name = "ArcaneShift",speed = math.huge,range = 450,spellDelay = 250,spellKey = 2,evadeType = "DashP",castType = "Position",},
},
["Gragas"] = {
[2] = {dl = 2,name = "BodySlam",range = 600,spellDelay = 50,speed = 900,spellKey = 2,evadeType = "DashP",castType = "Position",},
},
["Gnar"] = {
[2] = {dl = 3,name = "GnarE",range = 475,spellDelay = 50,speed = 900,spellKey = 2,evadeType = "DashP",castType = "Position",},
[2] = {dl = 4,name = "GnarBigE",range = 475,spellDelay = 50,speed = 800,spellKey = 2,evadeType = "DashP",castType = "Position",},
},
["Graves"] = {
[2] = {dl = 2,name = "QuickDraw",range = 425,spellDelay = 50,speed = 1250,spellKey = 2,evadeType = "DashP",castType = "Position",},
},
["Heimerdinger"] = {
[0] = {dl = 3,name = "Turret",range = 425,spellDelay = 50,speed = 1250,spellKey = 0,evadeType = "WindWallP",castType = "Position",}
},
["Kassadin"] = {
[3] = {dl = 1,name = "RiftWalk",speed = math.huge,range = 450,spellDelay = 250,spellKey = 3,evadeType = "DashP",castType = "Position",},
},
-- ["Kayle"] = {
-- [3] = {dl = 4,name = "Intervention",speed = math.huge,range = 0,spellDelay = 250,spellKey = 3,evadeType = "SpellShieldT",castType = "Target",},
-- },
["LeBlanc"] = {
[1] = {dl = 2,name = "Distortion",range = 600,spellDelay = 50,speed = 1600,spellKey = 1,evadeType = "DashP",castType = "Position",},
},
-- ["LeeSin"] = {
-- [1] = {dl = 3,name = "Safeguard",range = 700,speed = 1400,spellDelay = 50,spellKey = 1,evadeType = "DashT",castType = "Target",},
-- },
["Lucian"] = {
[2] = {dl = 1,name = "RelentlessPursuit",range = 425,spellDelay = 50,speed = 1350,spellKey = 2,evadeType = "DashP",castType = "Position",},
},
["Morgana"] = {
[2] = {dl = 3,name = "BlackShield",speed = math.huge,range = 650,spellDelay = 50,spellKey = 2,evadeType = "SpellShieldT",castType = "Target",},
},
["Nocturne"] = {
[1] = {dl = 3,name = "ShroudofDarkness",speed = math.huge,range = 0,spellDelay = 50,spellKey = 1,evadeType = "SpellShieldS",castType = "Self",},
},
["Nidalee"] = {
[1] = {dl = 3,name = "Pounce",range = 375,spellDelay = 150,speed = 1750,spellKey = 1,evadeType = "DashP",castType = "Position",},
},
["Fiora"] = {
[0] = {dl = 3,name = "FioraQ",range = 340,speed = 1100,spellDelay = 50,spellKey = 0,evadeType = "DashP",castType = "Position",},
--[1] = {dl = 3,name = "FioraW",range = 750,spellDelay = 100,spellKey = 1,evadeType = "WindWallP",castType = "Position",},
},
["Fizz"] = {
[2] = {dl = 3,name = "FizzJump",range = 400,speed = 1400,spellDelay = 50,spellKey = 2,evadeType = "DashP",castType = "Position",},
},
["Riven"] = {
[0] = {dl = 1,name = "BrokenWings",range = 260,spellDelay = 50,speed = 560,spellKey = 0,evadeType = "DashP",castType = "Position",},
[2] = {dl = 2,name = "Valor",range = 325,spellDelay = 50,speed = 1200,spellKey = 2,evadeType = "DashP",castType = "Position",},
},
["Sivir"] = {
[2] = {dl = 2,name = "SivirE",spellDelay = 50,spellKey = 2,evadeType = "SpellShieldS",castType = "Self",BuffName = "SivirE"},
},
["Shaco"] = {
[0] = {dl = 3,name = "Deceive",range = 400,spellDelay = 250,spellKey = 0,evadeType = "DashP",castType = "Position",},
[1] = {dl = 3,name = "JackInTheBox",range = 425,spellDelay = 250,spellKey = 1,evadeType = "WindWallP",castType = "Position",},
},
["Shen"] = {
[2] = {dl = 4,name = "Shadow Dash",spellDelay = 0,spellKey = 2,evadeType = "DashP",castType = "Position"},
},
["Tristana"] = {
[1] = {dl = 3,name = "RocketJump",range = 900,spellDelay = 500,speed = 1100,spellKey = 1,evadeType = "DashP",castType = "Position",},
},
["Tryndamere"] = {
[2] = {dl = 3,name = "SpinningSlash",range = 660,spellDelay = 50,speed = 900,spellKey = 2,evadeType = "DashP",castType = "Position",},
},
["Vayne"] = {
[0] = {dl = 2,name = "Tumble",range = 300,speed = 900,spellDelay = 50,spellKey = 0,evadeType = "DashP",castType = "Position",},
},
["Yasuo"] = {
[1] = {dl = 3,name = "WindWall",range = 400,spellDelay = 250,spellKey = 1,evadeType = "WindWallP",castType = "Position",},
--[2] = {dl = 2,name = "SweepingBlade",range = 475,speed = 1000,spellDelay = 50,spellKey = 2,evadeType = "DashT",castType = "Target",},
},
["Vladimir"] = {
[1] = {dl = 4,name = "Sanguine Pool",range = 350,spellDelay = 50,spellKey = 1,evadeType = "SpellShieldS",castType = "Self", },
},
-- ["MasterYi"] = {
-- [0] = {dl = 3,name = "AlphaStrike",range = 600,speed = math.huge,spellDelay = 100,spellKey = 0,evadeType = "DashT",castType = "Target",},
-- },
-- ["Katarina"] = {
-- [2] = {dl = 3,name = "KatarinaE",range = 700,speed = math.huge,spellKey = 2,evadeType = "DashT",castType = "Target", },
-- },
["Kindred"] = {
[0] = {dl = 1,name = "KindredQ",range = 300,speed = 733,spellDelay = 50,spellKey = 0,evadeType = "DashP",castType = "Position",},
},
-- ["Talon"] = {
-- [2] = {dl = 3,name = "Cutthroat",range = 700,speed = math.huge,spellDelay = 50,spellKey = 2,evadeType = "DashT",castType = "Target",},
-- },
}
DelayAction(function()
for _,i in pairs(Spells) do
for kk,k in pairs(GetEnemyHeroes()) do
if i.displayname == "" then i.displayname = _ end
if i.charName == k.charName then
if self.supportedtypes[i.type].supported == false then
print(""..i.charName.." - spell : "..self.str[i.slot].." | "..i.displayname.. " is not supported ")
end
end
end
end
end,001.25)
self.offer = 0
self.count = 0
end
function SLEvade:WndMsg(s1,s2)
if s2 == string.byte("Y") and s1 == 257 and EMenu.D:Value() then
self:Skillshot()
self.offer = self.offer+1
end
if s2 == 0 and s1 == 516 then
self.count = self.count+1
end
DelayAction(function() self.count = 0 end,.001)
end
function SLEvade:Skillshot()
local s = {}
s.spell = {}
s.startPos = Vector(2874,myHero.pos.y,2842)--GetMousePos()
s.spell.name = "DarkBindingMissile"..self.offer
s.spell.charName = myHero.charName
s.spell.proj = nil
s.spell.danger = 2
s.spell.slot = 0
s.spell.displayname = "DarkBinding"..self.offer
s.spell.killTime = 1.5
s.spell.mcollision = true
s.spell.dangerous = false
s.spell.radius = 130
s.spell.speed = 400
s.spell.delay = 1
s.spell.range = 1300
s.endp = Vector(2104,myHero.pos.y,3196)--Vector(GetMousePos()) + Vector(Vector(myHero) - GetMousePos()):normalized() * (s.spell.range + myHero.boundingRadius)
s.endPos = Vector(s.startPos)+Vector(Vector(s.endp)-s.startPos):normalized()*s.spell.range
s.spell.type = "Line"
s.uDodge = false
s.caster = myHero
s.range = 1200
s.mpos = nil
s.debug = true
s.humanizer= true
s.check = GetDistance(myHero,s.startPos)/s.spell.speed+s.spell.delay
s.check2 = GetDistance(myHero,s.endPos)/s.spell.speed+s.spell.delay+s.spell.killTime
s.dist = GetDistance(myHero,s.endPos)
s.startTime = os.clock()
self.obj[s.spell.charName..""..self.str[s.spell.slot]..""..s.spell.displayname] = s
DelayAction(function() self.obj[s.spell.charName..""..self.str[s.spell.slot]..""..s.spell.displayname] = nil end,s.spell.killTime+s.spell.delay)
end
function SLEvade:Tickp()
if not SLE then return end
heroes[myHero.networkID] = nil
for _,i in pairs(self.obj) do
if i.o and EMenu.Advanced.LDR:Value() and i.spell.type == "Line" and GetDistance(myHero,i.o) >= 3000 and not self.globalults[_] then return end
if i.o and EMenu.Advanced.LDR:Value() and i.spell.type == "Return" and GetDistance(myHero,i.o) >= 3000 and not self.globalults[_] then return end
if i and EMenu.Advanced.LDR:Value() and (i.spell.type == "Circle" or i.spell.type =="follow") and GetDistance(myHero,i.endPos) >= 3000 and not self.globalults[_] then return end
if i and EMenu.Advanced.LDR:Value() and i.spell.type == "Rectangle" and GetDistance(myHero,i.endPos) >= 3000 and not self.globalults[_] then return end
if i and EMenu.Advanced.LDR:Value() and i.spell.type == "Cone" and GetDistance(myHero,i.endPos) >= 3000 and not self.globalults[_] then return end
if not i.jp or not i.safe then
self.asd = false
DisableHoldPosition(false)
DisableAll(false)
end
if i then
self:CleanObj(_,i)
self:Dodge(_,i)
self:Pathfinding(_,i)
self:UDodge(_,i)
self:Mpos(_,i)
end
if not i.safe then
_G.IsEvading = false
end
if i.jp and (GetDistance(myHero,i.jp) > i.spell.radius + myHero.boundingRadius) and i.safe and i.spell.type == "Line" then
i.safe = nil
elseif i and (GetDistance(myHero,i.endPos) > i.spell.radius + myHero.boundingRadius) and i.safe and i.spell.type == "Circle" then
i.safe = nil
elseif i.jp and (GetDistance(myHero,i.jp) > i.spell.radius + myHero.boundingRadius) and i.safe and i.spell.type == "Rectangle" then
i.safe = nil
elseif i.jp and (GetDistance(myHero,i.jp) > i.spell.radius + myHero.boundingRadius) and i.safe and i.spell.type == "Cone" then
i.safe = nil
end
end
self:ItemMenu()
end
function SLEvade:Drawp()
if not SLE then return end
for _,i in pairs(self.obj) do
if i.o and EMenu.Advanced.LDR:Value() and i.spell.type == "Line" and GetDistance(myHero,i.o) >= 3000 and not self.globalults[_] then return end
if i.o and EMenu.Advanced.LDR:Value() and i.spell.type == "Return" and GetDistance(myHero,i.o) >= 3000 and not self.globalults[_] then return end
if i and EMenu.Advanced.LDR:Value() and (i.spell.type == "Circle" or i.spell.type =="follow") and GetDistance(myHero,i.endPos) >= 3000 and not self.globalults[_] then return end
if i and EMenu.Advanced.LDR:Value() and i.spell.type == "Rectangle" and GetDistance(myHero,i.endPos) >= 3000 and not self.globalults[_] then return end
if i and EMenu.Advanced.LDR:Value() and i.spell.type == "Cone" and GetDistance(myHero,i.endPos) >= 3000 and not self.globalults[_] then return end
if i then
self.opos = self:sObjpos(_,i)
self.cpos = self:sCircPos(_,i)
self:Drawings(_,i)
self:Drawings2(_,i)
end
self:HeroCollsion(_,i)
self:MinionCollision(_,i)
self:WallCollision(_,i)
end
if EMenu.Draws.DevOpt:Value() then
DrawText(myHero.pos,20,20,20,GoS.Green)
end
if EMenu.Draws.DES:Value() then
self:Status()
end
end
function SLEvade:MinionCollision(_,i)
if i.spell.type == "Line" and i.spell.mcollision and i and EMenu.Advanced.EMC:Value() and (i.debug or EMenu.Spells[_]["Coll".._]:Value()) and not i.hcoll and not i.wcoll then
for m,p in pairs(SLM2) do
if p and p.alive and GetDistance(p.pos,i.startPos) < i.range then
i.vP = VectorPointProjectionOnLineSegment(Vector(self.opos),i.endPos,Vector(p.pos))
if i.vP and GetDistance(i.vP,p.pos) < (i.spell.radius+p.boundingRadius) then
i.spell.range = GetDistance(i.startPos,i.vP)
i.mcoll = true
else
i.spell.range = i.range
i.vP = nil
end
end
end
end
end
function SLEvade:HeroCollsion(_,i)
if i.spell.type == "Line" and i.spell.mcollision and i and EMenu.Advanced.EMC:Value() and (i.debug or EMenu.Spells[_]["Coll".._]:Value()) and not i.mcoll and not i.wcoll then
for m,p in pairs(heroes) do
if p and p.alive and p.team == MINION_ALLY and GetDistance(p.pos,i.startPos) < i.range then
i.vP = VectorPointProjectionOnLineSegment(Vector(self.opos),i.endPos,Vector(p.pos))
if i.vP and GetDistance(i.vP,p.pos) < (i.spell.radius+p.boundingRadius) then
i.spell.range = GetDistance(i.startPos,i.vP)
i.hcoll = true
else
i.spell.range = i.range
i.vP = nil
end
end
end
end
end
function SLEvade:WallCollision(_,i)
if i.spell.type == "Line" and i.spell.mcollision and i and EMenu.Advanced.EMC:Value() and (i.debug or EMenu.Spells[_]["Coll".._]:Value()) and not i.mcoll and not i.hcoll then
for m,p in pairs(self.YasuoWall) do
if p.obj and p.obj.valid and p.obj.spellOwner.team == MINION_ALLY and GetDistance(p.obj.pos,i.startPos) < i.range then
i.vP = VectorPointProjectionOnLineSegment(Vector(self.opos),i.endPos,Vector(p.obj.pos))
if i.vP and GetDistance(i.vP,p.obj.pos) < (i.spell.radius+p.obj.boundingRadius) then
i.spell.range = GetDistance(i.startPos,i.vP)
i.wcoll = true
else
i.spell.range = i.range
i.vP = nil
end
end
end
end
end
function SLEvade:sObjpos(_,i)
if i.spell.speed ~= math.huge and i and os.clock() > i.startTime then
return i.startPos+Vector(Vector(i.endPos)-i.startPos):normalized()*math.floor((i.spell.speed*(os.clock()-i.startTime) + (i.spell.radius+myHero.boundingRadius)/2))
else
return Vector(i.startPos)
end
end
function SLEvade:sCircPos(_,i)
if i then
return math.floor((i.spell.radius/(i.spell.killTime+i.dist/i.spell.speed+i.spell.delay))*(os.clock()-i.startTime+i.spell.delay))
end
end
function SLEvade:Status()
if not EMenu.Keys.DD:Value() and not (EMenu.Keys.DoD:Value() or EMenu.Keys.DoD2:Value()) then
DrawText("Evade : ON", 400, myHero.pos2D.x-50, myHero.pos2D.y, ARGB(255,255,255,255))
end
if EMenu.Keys.DD:Value() then
DrawText("Evade : OFF", 400, myHero.pos2D.x-50, myHero.pos2D.y, ARGB(255,255,255,255))
end
if (EMenu.Keys.DoD:Value() or EMenu.Keys.DoD2:Value()) and not EMenu.Keys.DD:Value() then
DrawText("Evade : ON", 400, myHero.pos2D.x-50, myHero.pos2D.y, GoS.Yellow)
end
end
function SLEvade:Humanizer(_,i)
if not i.status then
if (i.debug and not i.debug or EMenu.Spells[_] and EMenu.Spells[_]["H".._]:Value() or i.humanizer and i.humanizer or false) and i.caster and i.caster.visible then
return (i.spell.delay + GetDistance(myHero,i.startPos) / i.spell.speed)/(myHero.ms/100)
else
return 0
end
i.status = true
end
end
function SLEvade:Position()
return Vector(myHero) + Vector(Vector(self.mV) - myHero.pos):normalized() * myHero.ms/2
end
function SLEvade:prwp(unit, wp)
if not SLE then return end
if wp and unit == myHero and wp.index == 1 then
self.mV = wp.position
end
end
function SLEvade:CleanObj(_,i)
if i.o and not i.o.valid and i.spell.type ~= "Circle" then
self.obj[_] = nil
elseif i.spell.type == "Circle" and i.spell.killTime then
DelayAction(function() self.obj[_] = nil end, i.spell.killTime + GetDistance(i.caster,i.endPos))
end
end
function SLEvade:ItemMenu()
for item,c in pairs(self.SI) do
if GetItemSlot(myHero,item)>0 then
if not c.State and not EMenu.invulnerable[c.Name] then
EMenu.invulnerable:Menu(c.Name,""..myHero.charName.." | Item - "..c.Name)
EMenu.invulnerable[c.Name]:Boolean("Dodge"..c.Name, "Enable Dodge", true)
EMenu.invulnerable[c.Name]:Slider("d"..c.Name,"Danger", 5, 1, 5, 1)
EMenu.invulnerable[c.Name]:Slider("hp"..c.Name,"HP", 100, 1, 100, 5)
end
c.State = true
else
c.State = false
end
end
for item,c in pairs(self.D) do
if GetItemSlot(myHero,item)>0 then
if not c.State and not EMenu.EvadeSpells[c.Name] then
EMenu.EvadeSpells:Menu(c.Name,""..myHero.charName.." | Item - "..c.Name)
EMenu.EvadeSpells[c.Name]:Boolean("Dodge"..c.Name, "Enable Dodge", true)
EMenu.EvadeSpells[c.Name]:Slider("d"..c.Name,"Danger", 3, 1, 5, 1)
EMenu.EvadeSpells[c.Name]:Slider("hp"..c.Name,"HP", 100, 1, 100, 5)
end
c.State = true
else
c.State = false
end
end
end
function SLEvade:Mpos(_,i)
if i.spell.type == "Circle" then
if i and GetDistance(myHero,i.endPos) < i.spell.radius + myHero.boundingRadius and not i.safe then
if not i.mpos and not self.mposs then
i.mpos = Vector(myHero) + Vector(Vector(GetMousePos()) - myHero.pos):normalized() * i.spell.radius
self.mposs = GetMousePos()
end
else
self.mposs = nil
i.mpos = nil
end
elseif i.spell.type == "Line" then
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius and not i.safe then
if not i.mpos and not self.mposs2 then
i.mpos = Vector(myHero) + Vector(Vector(GetMousePos()) - myHero.pos):normalized() * (i.spell.radius+myHero.boundingRadius)
self.mposs2 = GetMousePos()
end
else
self.mposs2 = nil
i.mpos = nil
end
elseif i.spell.type == "Rectangle" then
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius and not i.safe then
if not i.mpos and not self.mposs3 then
i.mpos = Vector(myHero) + Vector(Vector(GetMousePos()) - myHero.pos):normalized() * (i.spell.radius+myHero.boundingRadius)
self.mposs3 = GetMousePos()
end
else
self.mposs3 = nil
i.mpos = nil
end
elseif i.spell.type == "Cone" then
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius and not i.safe then
if not i.mpos and not self.mposs4 then
i.mpos = Vector(myHero) + Vector(Vector(GetMousePos()) - myHero.pos):normalized() * (i.spell.radius+myHero.boundingRadius)
self.mposs4 = GetMousePos()
end
else
self.mposs4 = nil
i.mpos = nil
end
elseif i.spell.type == "Return" then
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius and not i.safe then
if not i.mpos and not self.mposs2 then
i.mpos = Vector(myHero) + Vector(Vector(GetMousePos()) - myHero.pos):normalized() * (i.spell.radius+myHero.boundingRadius)
self.mposs2 = GetMousePos()
end
else
self.mposs2 = nil
i.mpos = nil
end
elseif i.spell.type == "follow" then
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius and not i.safe then
if not i.mpos and not self.mposs2 then
i.mpos = Vector(myHero) + Vector(Vector(GetMousePos()) - myHero.pos):normalized() * (i.spell.radius+myHero.boundingRadius)
self.mposs2 = GetMousePos()
end
else
self.mposs2 = nil
i.mpos = nil
end
end
end
function SLEvade:UDodge(_,i)
if EMenu.Keys.DoD:Value() or EMenu.Keys.DoD2:Value() then
self.DodgeOnlyDangerous = true
else
self.DodgeOnlyDangerous = false
end
if not i.uDodge then
if i.safe and i.spell.type == "Line" then
if i.check < (GetDistance(i.safe)/2)/myHero.ms then
i.uDodge = true
end
elseif i.safe and i.spell.type == "Circle" and i then
if i.check2 < GetDistance(i.safe)/myHero.ms then
i.uDodge = true
end
elseif i.safe and i.spell.type == "Rectangle" and i then
if i.check2 < (GetDistance(i.safe)/2)/myHero.ms then
i.uDodge = true
end
elseif i.safe and i.spell.type == "Cone" and i then
if GetDistance(i.endPos)/i.spell.speed + i.spell.delay < GetDistance(i.safe)/myHero.ms then
i.uDodge = true
end
elseif i.safe and i.spell.type == "Return" and i.o then
if i.check < (GetDistance(i.safe)/2)/myHero.ms then
i.uDodge = true
end
elseif i.safe and i.spell.type == "follow" then
if i.check < GetDistance(i.safe)/myHero.ms then
i.uDodge = true
end
end
end
end
function SLEvade:Pathfinding(_,i)
if (i.debug and not i.debug) or (EMenu.Spells[_] and EMenu.Spells[_]["ffe".._]:Value() or false) then
DelayAction(function()
if i.spell.type == "Line" and i then
i.startPos = Vector(i.startPos)
i.endPos = Vector(i.endPos)
if GetDistance(i.startPos) < i.spell.range + myHero.boundingRadius and GetDistance(i.endPos) < i.spell.range + myHero.boundingRadius then
local v3 = Vector(myHero)
local jp = VectorPointProjectionOnLineSegment(Vector(self.opos),i.endPos,v3)
local jp2 = Vector(VectorIntersection(i.startPos,i.endPos,myHero.pos+(Vector(i.startPos)-Vector(i.endPos)):perpendicular(),myHero.pos).x,i.endPos.y,VectorIntersection(i.startPos,i.endPos,myHero.pos+(Vector(i.startPos)-Vector(i.endPos)):perpendicular(),myHero.pos).y)
i.jp = jp
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius and not i.safe then
if GetDistance(GetOrigin(myHero) + Vector(i.startPos-i.endPos):perpendicular(),jp2) >= GetDistance(GetOrigin(myHero) + Vector(i.startPos-i.endPos):perpendicular2(),jp2) then
self.asd = true
self.patha = jp2 + Vector(i.startPos - i.endPos):perpendicular():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
if not MapPosition:inWall(self.patha) then
i.safe = jp2 + Vector(i.startPos - i.endPos):perpendicular():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
else
i.safe = jp2 + Vector(i.startPos - i.endPos):perpendicular2():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
end
i.isEvading = true
else
self.asd = true
self.patha = jp2 + Vector(i.startPos - i.endPos):perpendicular2():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
if not MapPosition:inWall(self.patha) then
i.safe = jp2 + Vector(i.startPos - i.endPos):perpendicular2():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
else
i.safe = jp2 + Vector(i.startPos - i.endPos):perpendicular():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
end
i.isEvading = true
end
else
self.asd = false
self.patha = nil
self.patha2 = nil
i.isEvading = false
DisableHoldPosition(false)
DisableAll(false)
end
end
elseif i.spell.type == "Circle" then
if _ == "AbsoluteZero" then
i.endPos = Vector(i.caster.pos)
else
i.endPos = Vector(i.endPos)
end
if GetDistance(myHero,i.endPos) < i.spell.radius + myHero.boundingRadius and not i.safe then
self.asd = true
self.pathb = Vector(i.endPos) + (GetOrigin(myHero) - Vector(i.endPos)):normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
if not MapPosition:inWall(self.pathb) then
i.safe = Vector(i.endPos) + (GetOrigin(myHero) - Vector(i.endPos)):normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
else
i.safe = i.endPos + Vector(self.pathb-i.endPos):normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
end
i.isEvading = true
else
self.asd = false
self.pathb = nil
self.pathb2 = nil
i.isEvading = false
DisableHoldPosition(false)
DisableAll(false)
end
elseif i.spell.type == "Rectangle" then
local startp = Vector(i.endPos) - (Vector(i.endPos) - Vector(i.startPos)):normalized():perpendicular() * (i.spell.radius2 or 400)
local endp = Vector(i.endPos) + (Vector(i.endPos) - Vector(i.startPos)):normalized():perpendicular() * (i.spell.radius2 or 400)
if GetDistance(startp) < i.spell.range + myHero.boundingRadius and GetDistance(endp) < i.spell.range + myHero.boundingRadius then
local v3 = Vector(myHero)
local jp = VectorPointProjectionOnLineSegment(startp,endp,v3)
i.jp = jp
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius and not i.safe and i.mpos then
self.asd = true
self.pathc = Vector(i.mpos)+Vector(startp-endp):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1)
if not MapPosition:inWall(self.pathc) then
i.safe = Vector(myHero)+Vector(startp-endp):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1)
else
i.safe = Vector(myHero)+Vector(startp-endp):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1)
end
i.isEvading = true
end
else
self.asd = false
self.pathc = nil
i.isEvading = false
DisableHoldPosition(false)
DisableAll(false)
end
elseif i.spell.type == "Cone" then
i.startPos = Vector(i.startPos)
i.endPos = Vector(i.endPos)
if GetDistance(i.startPos) < i.spell.range + myHero.boundingRadius and GetDistance(i.endPos) < i.spell.range + myHero.boundingRadius then
local v3 = Vector(myHero)
local jp = VectorPointProjectionOnLineSegment(Vector(i.startPos),i.endPos,v3)
local jp2 = Vector(VectorIntersection(i.startPos,i.endPos,myHero.pos+(Vector(i.startPos)-Vector(i.endPos)):perpendicular(),myHero.pos).x,i.endPos.y,VectorIntersection(i.startPos,i.endPos,myHero.pos+(Vector(i.startPos)-Vector(i.endPos)):perpendicular(),myHero.pos).y)
i.jp = jp
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius and not i.safe then
if GetDistance(GetOrigin(myHero) + Vector(i.startPos-i.endPos):perpendicular(),jp2) >= GetDistance(GetOrigin(myHero) + Vector(i.startPos-i.endPos):perpendicular2(),jp2) then
self.asd = true
self.patha = jp2 + Vector(i.startPos - i.endPos):perpendicular():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
if not MapPosition:inWall(self.patha) then
i.safe = jp2 + Vector(i.startPos - i.endPos):perpendicular():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
else
i.safe = jp2 + Vector(i.startPos - i.endPos):perpendicular2():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
end
i.isEvading = true
else
self.asd = true
self.patha = jp2 + Vector(i.startPos - i.endPos):perpendicular2():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
if not MapPosition:inWall(self.patha) then
i.safe = jp2 + Vector(i.startPos - i.endPos):perpendicular2():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
else
i.safe = jp2 + Vector(i.startPos - i.endPos):perpendicular():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
end
i.isEvading = true
end
else
self.asd = false
self.patha = nil
self.patha2 = nil
i.isEvading = false
DisableHoldPosition(false)
DisableAll(false)
end
end
elseif i.spell.type == "Return" and i.o then
i.startPos = Vector(i.startPos)
i.endPos = Vector(i.caster.pos)
if GetDistance(i.startPos) < i.spell.range + myHero.boundingRadius and GetDistance(i.endPos) < i.spell.range + myHero.boundingRadius then
local v3 = Vector(myHero)
local jp = VectorPointProjectionOnLineSegment(Vector(i.o.pos),i.endPos,v3)
i.jp = jp
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius and not i.safe then
self.asd = true
self.patha = Vector(myHero)+Vector(Vector(myHero)-i.endPos):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1)
if not MapPosition:inWall(self.patha) then
i.safe = Vector(myHero)+Vector(Vector(myHero)-i.endPos):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1)
else
i.safe = Vector(myHero)+Vector(Vector(myHero)-i.endPos):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1)
end
i.isEvading = true
else
self.asd = false
self.patha = nil
self.patha2 = nil
i.isEvading = false
DisableHoldPosition(false)
DisableAll(false)
end
end
elseif i.spell.type == "follow" then
i.startPos = Vector(i.caster.pos)
i.endPos = Vector(i.endPos)
if GetDistance(i.startPos) < i.spell.range + myHero.boundingRadius and GetDistance(i.endPos) < i.spell.range + myHero.boundingRadius then
local v3 = Vector(myHero)
local v4 = Vector(i.caster.pos) + i.TarE
local jp = VectorPointProjectionOnLineSegment(i.startPos,v4,v3)
local jp2 = Vector(VectorIntersection(i.startPos,v4,myHero.pos+(Vector(i.startPos)-Vector(v4)):perpendicular(),myHero.pos).x,v4.y,VectorIntersection(i.startPos,v4,myHero.pos+(Vector(i.startPos)-Vector(v4)):perpendicular(),myHero.pos).y)
i.jp = jp
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius and not i.safe and i.mpos and not i.coll and jp2 then
if GetDistance(GetOrigin(myHero) + Vector(i.startPos-i.endPos):perpendicular(),jp2) >= GetDistance(GetOrigin(myHero) + Vector(i.startPos-i.endPos):perpendicular2(),jp2) then
self.asd = true
self.patha = jp2 + Vector(i.startPos - i.endPos):perpendicular():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
if not MapPosition:inWall(self.patha) then
i.safe = jp2 + Vector(i.startPos - i.endPos):perpendicular():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
else
i.safe = jp2 + Vector(i.startPos - i.endPos):perpendicular2():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
end
else
self.asd = true
self.patha = jp2 + Vector(i.startPos - i.endPos):perpendicular():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
if not MapPosition:inWall(self.patha) then
i.safe = jp2 + Vector(i.startPos - i.endPos):perpendicular2():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
else
i.safe = jp2 + Vector(i.startPos - i.endPos):perpendicular():normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1)
end
end
i.isEvading = true
else
self.asd = false
self.patha = nil
self.patha2 = nil
i.isEvading = false
DisableHoldPosition(false)
DisableAll(false)
end
end
end
end,self:Humanizer(_,i))
else
DelayAction(function()
if i.spell.type == "Line" and i then
i.startPos = Vector(i.startPos)
i.endPos = Vector(i.endPos)
if GetDistance(i.startPos) < i.spell.range + myHero.boundingRadius and GetDistance(i.endPos) < i.spell.range + myHero.boundingRadius then
local v3 = Vector(myHero)
local jp = VectorPointProjectionOnLineSegment(Vector(self.opos),i.endPos,v3)
i.jp = jp
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius and not i.safe and i.mpos and not i.coll then
self.asd = true
self.patha = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
self.patha2 = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
if GetDistance(Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular2(),i.jp) > GetDistance(Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular(),i.jp) then
if not MapPosition:inWall(self.patha2) then
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
else
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
end
else
if not MapPosition:inWall(self.patha) then
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
else
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
end
end
i.isEvading = true
else
self.asd = false
self.patha = nil
self.patha2 = nil
i.isEvading = false
DisableHoldPosition(false)
DisableAll(false)
end
end
elseif i.spell.type == "Circle" then
if _ == "AbsoluteZero" then
i.endPos = Vector(i.caster.pos)
else
i.endPos = Vector(i.endPos)
end
if GetDistance(myHero,i.endPos) < i.spell.radius + myHero.boundingRadius and not i.safe and i.mpos then
self.asd = true
self.pathb = Vector(i.endPos) + (GetOrigin(myHero) - Vector(i.endPos)):normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
self.pathb2 = Vector(i.endPos) + (Vector(i.mpos) - Vector(i.endPos)):normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
if self.mposs and GetDistance(self.mposs,self.pathb) > GetDistance(self.mposs,self.pathb2) then
if not MapPosition:inWall(self.pathb2) then
i.safe = Vector(i.endPos) + (Vector(i.mpos) - Vector(i.endPos)):normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
else
i.safe = i.endPos + Vector(self.pathb2-i.endPos):normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
end
else
if not MapPosition:inWall(self.pathb) then
i.safe = Vector(i.endPos) + (GetOrigin(myHero) - Vector(i.endPos)):normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
else
i.safe = i.endPos + Vector(self.pathb-i.endPos):normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
end
end
i.isEvading = true
else
self.asd = false
self.pathb = nil
self.pathb2 = nil
i.isEvading = false
DisableHoldPosition(false)
DisableAll(false)
end
elseif i.spell.type == "Rectangle" then
local startp = Vector(i.endPos) - (Vector(i.endPos) - Vector(i.startPos)):normalized():perpendicular() * (i.spell.radius2 or 400)
local endp = Vector(i.endPos) + (Vector(i.endPos) - Vector(i.startPos)):normalized():perpendicular() * (i.spell.radius2 or 400)
if GetDistance(startp) < i.spell.range + myHero.boundingRadius and GetDistance(endp) < i.spell.range + myHero.boundingRadius then
local v3 = Vector(myHero)
local jp = VectorPointProjectionOnLineSegment(startp,endp,v3)
i.jp = jp
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius and not i.safe and i.mpos then
self.asd = true
self.pathc = Vector(i.mpos)+Vector(startp-endp):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
self.pathc2 = Vector(i.mpos)+Vector(startp-endp):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
if GetDistance(Vector(i.mpos)+Vector(startp-endp):normalized():perpendicular2(),i.jp) > GetDistance(Vector(i.mpos)+Vector(startp-endp):normalized():perpendicular(),i.jp) then
if not MapPosition:inWall(self.pathc2) then
i.safe = Vector(i.mpos)+Vector(startp-endp):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
else
i.safe = i.endPos + Vector(self.pathc-i.endPos):normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
end
else
if not MapPosition:inWall(self.pathc) then
i.safe = Vector(i.mpos)+Vector(startp-endp):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
else
i.safe = i.endPos + Vector(self.pathc-i.endPos):normalized() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
end
end
i.isEvading = true
end
else
self.asd = false
self.pathc = nil
i.isEvading = false
DisableHoldPosition(false)
DisableAll(false)
end
elseif i.spell.type == "Cone" then
i.startPos = Vector(i.startPos)
i.endPos = Vector(i.endPos)
if GetDistance(i.startPos) < i.spell.range + myHero.boundingRadius and GetDistance(i.endPos) < i.spell.range + myHero.boundingRadius then
local v3 = Vector(myHero)
local jp = VectorPointProjectionOnLineSegment(i.startPos,i.endPos,v3)
i.jp = jp
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius and not i.safe and i.mpos and not i.coll then
self.asd = true
self.patha = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
self.patha2 = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
if GetDistance(Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular2(),i.jp) > GetDistance(Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular(),i.jp) then
if not MapPosition:inWall(self.patha2) then
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
else
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
end
else
if not MapPosition:inWall(self.patha) then
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
else
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
end
end
i.isEvading = true
else
self.asd = false
self.patha = nil
self.patha2 = nil
i.isEvading = false
DisableHoldPosition(false)
DisableAll(false)
end
end
elseif i.spell.type == "Return" and i.o then
i.startPos = Vector(i.startPos)
i.endPos = Vector(i.caster.pos)
if GetDistance(i.startPos) < i.spell.range + myHero.boundingRadius and GetDistance(i.endPos) < i.spell.range + myHero.boundingRadius then
local v3 = Vector(myHero)
local jp = VectorPointProjectionOnLineSegment(Vector(i.o.pos),i.endPos,v3)
i.jp = jp
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius and not i.safe and i.mpos and not i.coll then
self.asd = true
self.patha = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
self.patha2 = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
if GetDistance(Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular2(),i.jp) > GetDistance(Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular(),i.jp) then
if not MapPosition:inWall(self.patha2) then
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
else
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
end
else
if not MapPosition:inWall(self.patha) then
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
else
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-i.endPos):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
end
end
i.isEvading = true
else
self.asd = false
self.patha = nil
self.patha2 = nil
i.isEvading = false
DisableHoldPosition(false)
DisableAll(false)
end
end
elseif i.spell.type == "follow" then
i.startPos = Vector(i.caster.pos)
i.endPos = Vector(i.endPos)
if GetDistance(i.startPos) < i.spell.range + myHero.boundingRadius and GetDistance(i.endPos) < i.spell.range + myHero.boundingRadius then
local v3 = Vector(myHero)
local v4 = Vector(i.caster.pos) + i.TarE
local jp = VectorPointProjectionOnLineSegment(i.startPos,v4,v3)
i.jp = jp
if i.jp and GetDistance(myHero,i.jp) < i.spell.radius + myHero.boundingRadius and not i.safe and i.mpos and not i.coll then
self.asd = true
self.patha = Vector(i.mpos)+Vector(Vector(i.mpos)-v4):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
self.patha2 = Vector(i.mpos)+Vector(Vector(i.mpos)-v4):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
if GetDistance(Vector(i.mpos)+Vector(Vector(i.mpos)-v4):normalized():perpendicular2(),i.jp) > GetDistance(Vector(i.mpos)+Vector(Vector(i.mpos)-v4):normalized():perpendicular(),i.jp) then
if not MapPosition:inWall(self.patha2) then
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-v4):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
else
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-v4):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
end
else
if not MapPosition:inWall(self.patha) then
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-v4):normalized():perpendicular() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
else
i.safe = Vector(i.mpos)+Vector(Vector(i.mpos)-v4):normalized():perpendicular2() * ((i.spell.radius + myHero.boundingRadius)*1.1+EMenu.Advanced.ew:Value())
end
end
i.isEvading = true
else
self.asd = false
self.patha = nil
self.patha2 = nil
i.isEvading = false
DisableHoldPosition(false)
DisableAll(false)
end
end
end
end,self:Humanizer(_,i))
end
end
function SLEvade:Drawings(_,i)
if i.debug or EMenu.Spells[_]["Draw".._]:Value() then
if i.spell.type == "Line" and not EMenu.Keys.DDraws:Value() then
if EMenu.Draws.DSPath:Value() then
dRectangleOutline(Vector(self.opos), Vector(i.endPos), i.spell.radius+myHero.boundingRadius, 1.75, ARGB(215,210,210,210), i.debug or EMenu.Spells[_]["Dodge".._]:Value())
if EMenu.Draws.DSEW:Value() then
dRectangleOutline2(Vector(self.opos), Vector(i.endPos), i.spell.radius+myHero.boundingRadius, 2.5, ARGB(215,255,255,255), i.debug or EMenu.Spells[_]["Dodge".._]:Value())
end
end
end
if i.spell.type == "Circle" and not EMenu.Keys.DDraws:Value() then
if _ == "AbsoluteZero" then
i.endPos = Vector(i.caster.pos)
else
i.endPos = Vector(i.endPos)
end
if EMenu.Draws.DSPath:Value() then
DrawCircle(i.endPos,i.spell.radius,1.75,25,ARGB(215,255,255,255))
DrawCircle(i.endPos,self.cpos,2.5,25,ARGB(200,250,192,0))
end
end
if i.spell.type == "Rectangle" and not EMenu.Keys.DDraws:Value() then
DrawRectangle(i.startPos,i.endPos,i.spell.radius+myHero.boundingRadius,i.spell.radius2,2.5,ARGB(215,255,255,255))
end
if i.spell.type == "Cone" and not EMenu.Keys.DDraws:Value() then
DrawCone(i.startPos,Vector(i.endPos),i.spell.angle or 40,2.5,ARGB(215,255,255,255))
end
if i.spell.type == "Return" and not EMenu.Keys.DDraws:Value() and i.o then
if EMenu.Draws.DSPath:Value() then
dRectangleOutline(Vector(i.o.pos), Vector(i.caster.pos), i.spell.radius+myHero.boundingRadius, 1.75, ARGB(215,210,210,210), i.debug or EMenu.Spells[_]["Dodge".._]:Value())
if EMenu.Draws.DSEW:Value() then
dRectangleOutline2(Vector(i.o.pos), Vector(i.caster.pos), i.spell.radius+myHero.boundingRadius, 2.5, ARGB(215,255,255,255), i.debug or EMenu.Spells[_]["Dodge".._]:Value())
end
end
end
if i.spell.type == "follow" and not EMenu.Keys.DDraws:Value() then
if EMenu.Draws.DSPath:Value() then
dRectangleOutline(Vector(i.caster.pos), Vector(i.caster.pos) + i.TarE, i.spell.radius+myHero.boundingRadius, 1.75, ARGB(215,210,210,210), i.debug or EMenu.Spells[_]["Dodge".._]:Value())
if EMenu.Draws.DSEW:Value() then
dRectangleOutline2(Vector(i.caster.pos), Vector(i.caster.pos) + i.TarE, i.spell.radius+myHero.boundingRadius, 2.5, ARGB(215,255,255,255), i.debug or EMenu.Spells[_]["Dodge".._]:Value())
end
end
end
end
end
function SLEvade:Drawings2(_,i)
if EMenu.Draws.DevOpt:Value() then
if i.jp then
DrawCircle(i.jp,50,1,20,GoS.Red)
end
end
if EMenu.Draws.DEPos:Value() and i.safe and (i.debug or ((not self.DodgeOnlyDangerous and EMenu.d:Value() <= EMenu.Spells[_]["d".._]:Value()) or (self.DodgeOnlyDangerous and EMenu.Spells[_]["IsD".._]:Value())) and EMenu.Spells[_]["Dodge".._]:Value() and EMenu.Spells[_]["Draw".._]:Value()) then
dArrow(myHero.pos,i.safe,3,ARGB(255,0,255,0))
end
if EMenu.Draws.DevOpt:Value() then
DrawCircle(self:Position(),50,1,20,GoS.Blue)
end
end
function SLEvade:Dodge(_,i)
--DashP = Dash - Position, DashS = Dash - Self, DashT = Dash - Targeted, SpellShieldS = SpellShield - Self, SpellShieldT = SpellShield - Targeted, WindWallP = WindWall - Position,
if EMenu.Keys.DD:Value() then return end
if myHero.isSpellShielded then return end
if (i.safe and ((not self.DodgeOnlyDangerous and (i.debug or EMenu.d:Value() <= EMenu.Spells[_]["d".._]:Value())) or (self.DodgeOnlyDangerous and (i.debug or EMenu.Spells[_]["IsD".._]:Value()))) and (i.debug or EMenu.Spells[_]["Dodge".._]:Value()) and (i.debug or GetPercentHP(myHero) <= EMenu.Spells[_]["hp".._]:Value())) then
_G.IsEvading = true
if self.asd == true then
DisableHoldPosition(true)
DisableAll(true)
else
DisableHoldPosition(false)
DisableAll(false)
end
MoveToXYZ(i.safe)
if (i.debug or EMenu.Spells[_]["Dashes".._]:Value()) then
for op = 0,3 do
if self.EvadeSpells[GetObjectName(myHero)] and self.EvadeSpells[GetObjectName(myHero)][op] and EMenu.EvadeSpells[self.EvadeSpells[GetObjectName(myHero)][op].name]["Dodge"..self.EvadeSpells[GetObjectName(myHero)][op].name]:Value() and self.EvadeSpells[GetObjectName(myHero)][op].evadeType and self.EvadeSpells[GetObjectName(myHero)][op].spellKey and (i.debug or EMenu.Spells[_]["d".._]:Value() >= EMenu.EvadeSpells[self.EvadeSpells[GetObjectName(myHero)][op].name]["d"..self.EvadeSpells[GetObjectName(myHero)][op].name]:Value()) then
if i.uDodge == true and self.usp == false and self.ut == false then
if self.EvadeSpells[GetObjectName(myHero)][op].evadeType == "DashP" and CanUseSpell(myHero, self.EvadeSpells[GetObjectName(myHero)][op].spellKey) == READY then
self.ues = true
CastSkillShot(self.EvadeSpells[GetObjectName(myHero)][op].spellKey, i.safe)
else
self.ues = false
end
-- if self.EvadeSpells[GetObjectName(myHero)][op].evadeType == "DashT" then--logic needed
-- end
if self.EvadeSpells[GetObjectName(myHero)][op].evadeType == "WindWallP" and CanUseSpell(myHero, self.EvadeSpells[GetObjectName(myHero)][op].spellKey) == READY then
self.ues = true
CastSkillShot(self.EvadeSpells[GetObjectName(myHero)][op].spellKey, myHero.pos + (i.startPos - myHero.pos)*50)
else
self.ues = false
end
if self.EvadeSpells[GetObjectName(myHero)][op].evadeType == "SpellShieldS" and CanUseSpell(myHero, self.EvadeSpells[GetObjectName(myHero)][op].spellKey) == READY then
self.ues = true
DelayAction(function()
CastSpell(self.EvadeSpells[GetObjectName(myHero)][op].spellKey)
end,i.spell.delay + GetDistance(myHero,i.startPos) / i.spell.speed*.75*.001)
else
self.ues = false
end
if self.EvadeSpells[GetObjectName(myHero)][op].evadeType == "SpellShieldT" and CanUseSpell(myHero, self.EvadeSpells[GetObjectName(myHero)][op].spellKey) == READY then --logic needed
self.ues = true
DelayAction(function()
CastTargetSpell(myHero,self.EvadeSpells[GetObjectName(myHero)][op].spellKey)
end,i.spell.delay + GetDistance(myHero,i.startPos) / i.spell.speed*.75*.001)
else
self.ues = false
end
if self.EvadeSpells[GetObjectName(myHero)][op].evadeType == "DashS" and CanUseSpell(myHero, self.EvadeSpells[GetObjectName(myHero)][op].spellKey) == READY then
self.ues = true
CastSpell(self.EvadeSpells[GetObjectName(myHero)][op].spellKey)
else
self.ues = false
end
end
end
if self.Flash and Ready(self.Flash) and i.uDodge == true and EMenu.EvadeSpells.Flash.DodgeFlash:Value() and (i.debug or EMenu.Spells[_]["d".._]:Value() >= EMenu.EvadeSpells.Flash.dFlash:Value()) and self.ues == false and self.ut == false then
self.usp = true
CastSkillShot(self.Flash, i.safe)
else
self.usp = false
end
for item,c in pairs(self.SI) do
if c.State and Ready(GetItemSlot(myHero,item)) and EMenu.invulnerable[c.Name]["Dodge"..c.Name]:Value() and i.uDodge == false and GetPercentHP(myHero) <= EMenu.invulnerable[c.Name]["hp"..c.Name]:Value() and (i.debug or EMenu.Spells[_]["d".._]:Value() >= EMenu.invulnerable[c.Name]["d"..c.Name]:Value()) and self.ues == false and self.usp == false then
self.ut = true
DelayAction(function()
CastSpell(GetItemSlot(myHero,item))
end,i.spell.delay + GetDistance(myHero,i.startPos) / i.spell.speed*.75*.001)
else
self.ut = false
end
end
for item,c in pairs(self.D) do
if c.State and Ready(GetItemSlot(myHero,item)) and EMenu.EvadeSpells[c.Name]["Dodge"..c.Name]:Value() and i.uDodge == true and GetPercentHP(myHero) <= EMenu.EvadeSpells[c.Name]["hp"..c.Name]:Value() and (i.debug or EMenu.Spells[_]["d".._]:Value() >= EMenu.EvadeSpells[c.Name]["d"..c.Name]:Value()) and self.ues == false and self.usp == false then
self.ut = true
CastSkillShot(GetItemSlot(myHero,item), i.safe)
else
self.ut = false
end
end
end
end
else
DisableHoldPosition(false)
DisableAll(false)
end
end
function SLEvade:BlockMov(order)
if not SLE then return end
for _,i in pairs(self.obj) do
if order.flag ~= 3 and order.position then
if i.jp and i.spell.type == "Line" then
local jp3 = VectorPointProjectionOnLineSegment(Vector(myHero.pos),Vector(order.position),Vector(VectorPointProjectionOnLineSegment(Vector(self.opos),Vector(i.endPos),myHero.pos).x,i.endPos.y,VectorPointProjectionOnLineSegment(Vector(self.opos),Vector(i.endPos),myHero.pos).y))
if GetDistance(jp3,i.jp) < ((i.spell.radius + myHero.boundingRadius)*1.1) and not i.safe then
BlockOrder()
end
elseif i and i.spell.type == "Circle" then
if (GetDistance(order.position,i.endPos) < ((i.spell.radius + myHero.boundingRadius)*1.1)) and not i.safe then
BlockOrder()
end
elseif i.jp and i.spell.type == "Rectangle" then
local startp = Vector(i.endPos) - (Vector(i.endPos) - Vector(i.startPos)):normalized():perpendicular() * (i.spell.radius2 or 400)
local endp = Vector(i.endPos) + (Vector(i.endPos) - Vector(i.startPos)):normalized():perpendicular() * (i.spell.radius2 or 400)
local jp3 = VectorPointProjectionOnLineSegment(Vector(myHero.pos),Vector(order.position),Vector(VectorPointProjectionOnLineSegment(Vector(startp),Vector(endp),myHero.pos).x,endp.y,VectorPointProjectionOnLineSegment(Vector(startp),Vector(endp),myHero.pos).y))
if (GetDistance(jp3,i.jp) < ((i.spell.radius + myHero.boundingRadius)*1.1)) and not i.safe then
BlockOrder()
end
elseif i.jp and i.spell.type == "Cone" then
local jp3 = VectorPointProjectionOnLineSegment(Vector(myHero.pos),Vector(order.position),Vector(VectorPointProjectionOnLineSegment(Vector(self.opos),Vector(i.endPos),myHero.pos).x,i.endPos.y,VectorPointProjectionOnLineSegment(Vector(self.opos),Vector(i.endPos),myHero.pos).y))
if (GetDistance(jp3,i.jp) < ((i.spell.radius + myHero.boundingRadius)*1.1)) and not i.safe then
BlockOrder()
end
elseif i.jp and i.spell.type == "Return" then
if (GetDistance(order.position,i.jp) < ((i.spell.radius + myHero.boundingRadius)*1.1)) and not i.safe then
BlockOrder()
end
elseif i.jp and i.spell.type == "follow" then
if (GetDistance(order.position,i.jp) < ((i.spell.radius + myHero.boundingRadius)*1.1)) and not i.safe then
BlockOrder()
end
end
end
if i.safe and order.flag ~= 3 and self.count > 0 then
BlockOrder()
self.count = self.count-1
end
end
end
function SLEvade:CreateObject(obj)
if not SLE then return end
-- if obj and obj.isSpell and obj.spellOwner.isMe and obj.spellOwner.team == MINION_ALLY then
if obj and obj.isSpell and obj.spellOwner.isHero and obj.spellOwner.team == MINION_ENEMY then
if EMenu.Draws.DevOpt:Value() and obj.spellOwner.isMe then
print(obj.spellName)
end
for _,l in pairs(Spells) do
if not self.obj[l.charName..""..self.str[l.slot]..""..l.displayname] and Spells[_] and EMenu.Spells[l.charName..""..self.str[l.slot]..""..l.displayname] and EMenu.d:Value() <= EMenu.Spells[l.charName..""..self.str[l.slot]..""..l.displayname]["d"..l.charName..""..self.str[l.slot]..""..l.displayname]:Value() and (l.proj == obj.spellName or _ == obj.spellName or obj.spellName:lower():find(_:lower()) or obj.spellName:lower():find(l.proj:lower())) then
if l.type == ("Line" or "Cone") then
endPos = Vector(obj.startPos)+Vector(Vector(obj.endPos)-obj.startPos):normalized()*l.range
else
endPos = Vector(obj.endPos)
end
self.obj[l.charName..""..self.str[l.slot]..""..l.displayname] = {
o = obj,
startPos = Vector(obj.startPos),
endPos = endPos,
caster = obj.spellOwner,
mpos = nil,
uDodge = nil,
startTime = os.clock(),
spell = l,
range = l.range,
check = GetDistance(myHero,obj.startPos)/l.speed,
check2 = GetDistance(myHero,obj.endPos)/l.speed+l.killTime,
dist = GetDistance(obj.spellOwner,obj.endPos),
}
end
end
end
if (obj.spellName == "YasuoWMovingWallR" or obj.spellName == "YasuoWMovingWallL" or obj.spellName == "YasuoWMovingWallMisVis") and obj and obj.isSpell and obj.spellOwner.isHero and obj.spellOwner.team == myHero.team then
if not self.YasuoWall[obj.spellName] then self.YasuoWall[obj.spellName] = {} end
self.YasuoWall[obj.spellName].obj = obj
end
end
function SLEvade:Detection(unit,spellProc)
if not SLE then return end
-- if unit and spellProc and spellProc.name and unit.team == myHero.team then
if unit and spellProc and spellProc.name and unit.team ~= myHero.team then
if EMenu.Draws.DevOpt:Value() and unit.isMe then
print(spellProc.name)
end
for _,l in pairs(Spells) do
if not self.obj[l.charName..""..self.str[l.slot]..""..l.displayname] and Spells[_] and EMenu.Spells[l.charName..""..self.str[l.slot]..""..l.displayname] and EMenu.d:Value() <= EMenu.Spells[l.charName..""..self.str[l.slot]..""..l.displayname]["d"..l.charName..""..self.str[l.slot]..""..l.displayname]:Value() and spellProc.name:find(_) then
if l.type == ("Line" or "Cone") then
endPos = Vector(spellProc.startPos)+Vector(Vector(spellProc.endPos)-spellProc.startPos):normalized()*l.range
else
endPos = Vector(spellProc.endPos)
end
self.obj[l.charName..""..self.str[l.slot]..""..l.displayname] = {
startPos = Vector(spellProc.startPos),
endPos = endPos,
spell = l,
caster = unit,
mpos = nil,
uDodge = nil,
startTime = os.clock()+l.delay,
TarE = (Vector(spellProc.endPos) - Vector(unit.pos)):normalized()*l.range,
range = l.range,
check = GetDistance(myHero,spellProc.startPos)/l.speed+l.delay,
check2 = GetDistance(myHero,spellProc.endPos)/l.speed+l.delay+l.killTime,
dist = GetDistance(unit,spellProc.endPos),
}
if l.killTime and l.type == "Circle" then
DelayAction(function() self.obj[l.charName..""..self.str[l.slot]..""..l.displayname] = nil end, l.killTime + GetDistance(unit,spellProc.endPos)/l.speed + l.delay)
elseif l.killTime > 0 and l.type ~= "Circle" then
DelayAction(function() self.obj[l.charName..""..self.str[l.slot]..""..l.displayname] = nil end, l.killTime + 1.3*GetDistance(myHero.pos,spellProc.startPos)/l.speed+l.delay)
else
DelayAction(function() self.obj[l.charName..""..self.str[l.slot]..""..l.displayname] = nil end, l.range/l.speed + l.delay/2)
end
elseif l.killName == spellProc.name then
self.obj[l.charName..""..self.str[l.slot]..""..l.displayname] = nil
end
end
end
end
function SLEvade:DeleteObject(obj)
if not SLE then return end
for _,l in pairs(Spells) do
if obj and obj.isSpell and self.obj[l.charName..""..self.str[l.slot]..""..l.displayname] and l.type ~= "Circle" and (l.proj == obj.spellName or _ == obj.spellName or obj.spellName:lower():find(_:lower()) or obj.spellName:lower():find(l.proj:lower())) then
self.obj[l.charName..""..self.str[l.slot]..""..l.displayname] = nil
end
end
if (obj.spellName == "YasuoWMovingWallR" or obj.spellName == "YasuoWMovingWallL" or obj.spellName == "YasuoWMovingWallMisVis") and obj and obj.isSpell and obj.spellOwner.isHero and obj.spellOwner.team == myHero.team then
self.YasuoWall[obj.spellName] = nil
end
end
function LoadSLE()
if not _G.SLE then _G.SLE = SLEvade() end
return SLE
end
class 'SLTS'--Updated version of Inspired TS (credits:Inspired)
function SLTS:__init(type, m, s)
self.dtype = type
self.range = {}
self.str= {[0]="Q",[1]="W",[2]="E",[3]="R"}
self.focusselected = true
self.m = m or nil
self.morganashield = false
self.sivirshield = false
self.nocturneshield = false
self.item1 = false
self.item2 = false
self.pt1 = {"Alistar", "Amumu", "Blitzcrank", "Braum", "ChoGath", "DrMundo", "Garen", "Gnar", "Hecarim", "JarvanIV", "Leona", "Lulu", "Malphite", "Nasus", "Nautilus", "Nunu", "Olaf", "Rammus", "Renekton", "Sejuani", "Shen", "Shyvana", "Singed", "Sion", "Skarner", "Taric", "Thresh", "Volibear", "Warwick", "MonkeyKing", "Yorick", "Zac"}
self.pt2 = {"Aatrox", "Darius", "Elise", "Evelynn", "Galio", "Gangplank", "Gragas", "Irelia", "Jax","LeeSin", "Maokai", "Morgana", "Nocturne", "Pantheon", "Poppy", "Rengar", "Rumble", "Ryze", "Swain","Trundle", "Tryndamere", "Udyr", "Urgot", "Vi", "XinZhao", "RekSai"}
self.pt3 = {"Akali", "Diana", "Fiddlesticks", "Fiora", "Fizz", "Heimerdinger", "Janna", "Jayce", "Kassadin","Kayle", "KhaZix", "Lissandra", "Mordekaiser", "Nami", "Nidalee", "Riven", "Shaco", "Sona", "Soraka", "TahmKench", "Vladimir", "Yasuo", "Zilean", "Zyra"}
self.pt4 = {"Ahri", "Anivia", "Annie", "Brand", "Cassiopeia", "Ekko", "Karma", "Karthus", "Katarina", "Kennen", "LeBlanc", "Lux", "Malzahar", "MasterYi", "Orianna", "Syndra", "Talon", "TwistedFate", "Veigar", "VelKoz", "Viktor", "Xerath", "Zed", "Ziggs" }
self.pt5 = {"Ashe", "Caitlyn", "Corki", "Draven", "Ezreal", "Graves", "Jinx", "Kalista", "KogMaw", "Lucian", "MissFortune", "Quinn", "Sivir", "Teemo", "Tristana", "Twitch", "Varus", "Vayne"}
self.m:Boolean("sel", "Focus selected", self.focusselected or false)
self.m:Boolean("dsel", "Draw current target", true)
self.m:Boolean("sh", "Include Shields", true)
self.m:DropDown("mode", "TargetSelector Mode:", 1, {"Normal","Less Cast", "Less Cast Priority", "Priority", "Most AP", "Most AD", "Closest", "Near Mouse", "Lowest Health", "Lowest Health Priority"})
for i=0,3 do
if Spell[i] and not Spell[i].ally then
if myHero.charName ~= "Syndra" then
self.m:Slider("range"..self.str[i], "Range to check for enemies for : "..self.str[i], Spell[i].range,0,Spell[i].range+2000,50)
else
if Spell[i] and Spell[2] and Spell[i].range ~= Spell[2].range then
self.m:Slider("range"..self.str[i], "Range to check for enemies for : "..self.str[i], Spell[i].range,0,Spell[i].range+2000,50)
elseif Spell[2] and Spell[2].range then
self.m:Slider("range"..self.str[2], "Range to check for enemies for : "..self.str[2], Spell[2].range+Spell[-1].range,0,Spell[2].range+Spell[-1].range+2000,50)
end
end
end
end
DelayAction(function()
for k,m in pairs(GetEnemyHeroes()) do
if m.type == myHero.type then
self.m:Slider(m.charName,"Priority for : "..m.charName,self:GetPrioritym(m), 1, 5, 1)
end
end
end,.001)
self.m:Info("1", "5 = Highest Priority")
Callback.Add("WndMsg", function(m,k) self:FocusSelected(m,k) end)
Callback.Add("UpdateBuff", function(u,b) self:UpdateB(u,b) end)
Callback.Add("RemoveBuff", function(u,b) self:RemoveB(u,b) end)
Callback.Add("Draw", function() self:Draw() for i=0,3 do if Spell[i] and not Spell[i].ally then self.range[i] = {range = self.m["range"..self.str[i]]:Value()} end end end)
end
function SLTS:UpdateB(u,b)
if u and b and u.team ~= myHero.team and u.isHero then
if b.Name == "BlackShield" then
self.morganashield = true
elseif b.Name == "SivirShield" then
self.sivirshield = true
elseif b.Name == "ShroudofDarkness" then
self.item1 = true
elseif b.Name == "BansheesVeil" then
self.item2 = true
end
end
end
function SLTS:RemoveB(u,b)
if u and b and u.team ~= myHero.team and u.isHero then
if b.Name == "BlackShield" then
self.morganashield = false
elseif b.Name == "SivirShield" then
self.sivirshield = false
elseif b.Name == "ShroudofDarkness" then
self.item1 = false
elseif b.Name == "BansheesVeil" then
self.item2 = false
end
end
end
function SLTS:IsShielded(i)
if self.dtype == "AP" and self.m.sh:Value() then
if self.morganashield or self.sivirshield or self.item1 or self.item2 then
return true
end
end
return false
end
function SLTS:GetPrioritym(i)
if table.contains(self.pt5,i.charName) then
return 5
elseif table.contains(self.pt4,i.charName) then
return 4
elseif table.contains(self.pt3,i.charName) then
return 3
elseif table.contains(self.pt2,i.charName) then
return 2
elseif table.contains(self.pt1,i.charName) then
return 1
else
return 1
end
end
function SLTS:GetPriority(i)
return self.m[i.charName]:Value()
end
function SLTS:IsValid(t)
if t and t.alive and t.visible and t.valid and not self:IsShielded(t) then
return true
else
return false
end
end
function SLTS:GetTarget()
if self.m.sel:Value() then
if self:IsValid(self.selected) then
return self.selected
else
self.selected = nil
end
end
if not self.selected then
for _,i in pairs(GetEnemyHeroes()) do
for l = 0,3 do
if self.range[l] and i.distance < self.range[l].range and not i.dead and Ready(l) then
if self.m.mode:Value() == 1 then
local t = nil
if self:IsValid(GetCurrentTarget()) then
t = GetCurrentTarget()
end
return t
end
if self.m.mode:Value() == 2 then
local t, p = nil, math.huge
if self:IsValid(i) and CalcDamage(myHero, i, self.dtype == "AD" and 100 or 0, self.dtype == "AP" and 100 or 0) < p then
t = i
p = CalcDamage(myHero, i, self.dtype == "AD" and 100 or 0, self.dtype == "AP" and 100 or 0)
end
return t
end
if self.m.mode:Value() == 3 then
local t,p = nil, math.huge
if self:IsValid(i) and CalcDamage(myHero, i, self.dtype == "AD" and 100 or 0, self.dtype == "AP" and 100 or 0)*self:GetPriority(i) < p then
t = i
p = CalcDamage(myHero, i, self.dtype == "AD" and 100 or 0, self.dtype == "AP" and 100 or 0)*self:GetPriority(i)
end
return t
end
if self.m.mode:Value() == 4 then
local t, p = nil, math.huge
if self:IsValid(i) and self:GetPriority(i) < p then
t = i
p = self:GetPriority(i)
end
return t
end
if self.m.mode:Value() == 5 then
local t, p = nil, -1
if self:IsValid(i) and i.ap > p then
t = i
p = prio
end
return t
end
if self.m.mode:Value() == 6 then
local t, p = nil, -1
if self:IsValid(i) and i.totalDamage > p then
t = i
p = i.totalDamage
end
return t
end
if self.m.mode:Value() == 7 then
local t, p = nil, math.huge
if self:IsValid(i) and i.distance < p then
t = i
p = i.distance
end
return t
end
end
if self.m.mode:Value() == 8 then
local t, p = nil, math.huge
if self:IsValid(i) and GetDistance(i.pos,GetMousePos()) < p then
t = i
p = GetDistance(i.pos,GetMousePos())
end
return t
end
if self.m.mode:Value() == 9 then
local t, p = nil, math.huge
if self:IsValid(i) and i.health < p then
t = i
p = i.health
end
return t
end
if self.m.mode:Value() == 10 then
local t, p = nil, math.huge
if self:IsValid(i) and i.health*self:GetPriority(i) < p then
t = i
p = i.health*self:GetPriority(i)
end
return t
end
end
end
end
end
function SLTS:FocusSelected(m,k)
if m == 513 then
for _,i in pairs(GetEnemyHeroes()) do
if GetDistance(i.pos,GetMousePos()) < i.boundingRadius*1.5 and i.alive then
self.selected = i
else
self.selected = nil
end
end
end
end
function SLTS:Draw()
if self:GetTarget() and self.m.dsel:Value() and self:GetTarget().pos and self:GetTarget().boundingRadius then
DrawCircle(self:GetTarget().pos,self:GetTarget().boundingRadius*1.35,1,20,GoS.White)
end
end
class 'AntiChannel'
function AntiChannel:__init()
self.CSpell = {
["CaitlynAceintheHole"] = {charName = "Caitlyn" ,slot="R"},
["Crowstorm"] = {charName = "FiddleSticks",slot="R"},
["Drain"] = {charName = "FiddleSticks",slot="W"},
["GalioIdolOfDurand"] = {charName = "Galio" ,slot="R"},
["ReapTheWhirlwind"] = {charName = "Janna" ,slot="R"},
["JhinR"] = {charName = "Jhin" ,slot="R"},
["KarthusFallenOne"] = {charName = "Karthus" ,slot="R"},
["KatarinaR"] = {charName = "Katarina" ,slot="R"},
["LucianR"] = {charName = "Lucian" ,slot="R"},
["AlZaharNetherGrasp"] = {charName = "Malzahar" ,slot="R"},
["MissFortuneBulletTime"] = {charName = "MissFortune" ,slot="R"},
["AbsoluteZero"] = {charName = "Nunu" ,slot="R"},
["PantheonRJump"] = {charName = "Pantheon" ,slot="R"},
["ShenStandUnited"] = {charName = "Shen" ,slot="R"},
["Destiny"] = {charName = "TwistedFate" ,slot="R"},
["UrgotSwap2"] = {charName = "Urgot" ,slot="R"},
["VarusQ"] = {charName = "Varus" ,slot="Q"},
["VelkozR"] = {charName = "Velkoz" ,slot="R"},
["InfiniteDuress"] = {charName = "Warwick" ,slot="R"},
["XerathLocusOfPower2"] = {charName = "Xerath" ,slot="R"},
}
DelayAction(function ()
for k,i in pairs(GetEnemyHeroes()) do
for _,n in pairs(self.CSpell) do
if i.charName == n.charName then
if not BM["AC"] then
BM:Menu("AC","AntiChannel")
BM.AC:Info("as", "Stop Channels for : ")
Callback.Add("ProcessSpell", function(unit,spellProc) self:CheckAC(unit,spellProc) end)
end
if not BM.AC[_] then
BM.AC:Boolean(_,n.charName.." | "..n.slot, true)
end
end
end
end
end, .001)
end
function AntiChannel:CheckAC(unit,spellProc)
if GetTeam(unit) == MINION_ENEMY and self.CSpell[spellProc.name] and BM.AC[spellProc.name]:Value() then
_G[ChampName]:AntiChannel(unit,GetDistance(myHero,unit))
end
end
class 'AntiGapCloser'
function AntiGapCloser:__init()
self.GSpells = {
["AkaliShadowDance"] = {charName = "Akali", slot="R" },
["Headbutt"] = {charName = "Alistar", slot="Q" },
["DianaTeleport"] = {charName = "Diana", slot="R" },
["FizzPiercingStrike"] = {charName = "Fizz", slot="Q" },
["IreliaGatotsu"] = {charName = "Irelia", slot="Q" },
["JaxLeapStrike"] = {charName = "Jax", slot="Q" },
["JayceToTheSkies"] = {charName = "Jayce", slot="Q" },
["blindmonkqtwo"] = {charName = "LeeSin", slot="Q" },
["MonkeyKingNimbus"] = {charName = "MonkeyKing", slot="E" },
["Pantheon_LeapBash"] = {charName = "Pantheon", slot="W" },
["PoppyHeroicCharge"] = {charName = "Poppy", slot="E" },
["QuinnE"] = {charName = "Quinn", slot="E" },
["RengarLeap"] = {charName = "Rengar", slot="Passive" },
["XenZhaoSweep"] = {charName = "XinZhao", slot="E" },
["AatroxQ"] = {charName = "Aatrox", slot="Q" },
["GragasE"] = {charName = "Gragas", slot="E" },
["GravesMove"] = {charName = "Graves", slot="E" },
["JarvanIVDragonStrike"] = {charName = "JarvanIV", slot="Q" },
["JarvanIVCataclysm"] = {charName = "JarvanIV", slot="R" },
["KhazixE"] = {charName = "Khazix", slot="E" },
["khazixelong"] = {charName = "Khazix", slot="E" },
["LeblancSlide"] = {charName = "Leblanc", slot="W" },
["LeblancSlideM"] = {charName = "Leblanc", slot="W" },
["LeonaZenithBlade"] = {charName = "Leona", slot="E" },
["RenektonSliceAndDice"] = {charName = "Renekton", slot="E" },
["SejuaniArcticAssault"] = {charName = "Sejuani", slot="E" },
["ShenShadowDash"] = {charName = "Shen", slot="E" },
["RocketJump"] = {charName = "Tristana", slot="W" },
["slashCast"] = {charName = "Tryndamere", slot="E" },
}
DelayAction(function ()
for k,i in pairs(GetEnemyHeroes()) do
for _,n in pairs(self.GSpells) do
if i.charName == n.charName then
if not BM["AGC"] then
BM:Menu("AGC","AntiGapCloser")
BM.AGC:Info("as", "AntiGapCloser for : ")
Callback.Add("ProcessSpell", function(unit,spellProc) self:CheckAGC(unit,spellProc) end)
end
if not BM.AGC[_] then
BM.AGC:Boolean(_,n.charName.." | "..n.slot, true)
end
end
end
end
end, .001)
end
function AntiGapCloser:CheckAGC(unit,spellProc)
if unit.team == MINION_ENEMY and self.GSpells[spellProc.name] and BM.AGC[spellProc.name]:Value() then
_G[ChampName]:AntiGapCloser(unit,GetDistance(myHero,unit))
end
end
class 'SLPrediction'
function SLPrediction:__init()
self.CCType = {
[5] = "Stun",
[24] = "Suppression",
}
self.Channel = {
{name = "katarinar", duration = 1},
{name = "drain", duration = 5},
{name = "crowstorm", duration = 1.5},
{name = "consume", duration = 1.5},
{name = "absolutezero", duration = 1},
{name = "ezrealtrueshotbarrage", duration = 1},
{name = "galioidolofdurand", duration = 1},
{name = "reapthewhirlwind", duration = 1},
{name = "missfortunebullettime", duration = 1},
{name = "shenstandunited", duration = 1},
{name = "meditate", duration = 1},
{name = "gate", duration = 1.5},
}
self.c = {}
self.um = {}
self.a = {}
self.s = {}
self.AA = {}
self.predictedpos = nil
self.hitchance = nil
self.p = {["Velkoz"]= 2000,["TeemoMushroom"] = math.huge,["TestCubeRender"] = math.huge ,["Xerath"] = 2000.0000 ,["Kassadin"] = math.huge ,["Rengar"] = math.huge ,["Thresh"] = 1000.0000 ,["Ziggs"] = 1500.0000 ,["ZyraPassive"] = 1500.0000 ,["ZyraThornPlant"] = 1500.0000 ,["KogMaw"] = 1800.0000 ,["HeimerTBlue"] = 1599.3999 ,["EliseSpider"] = 500.0000 ,["Skarner"] = 500.0000 ,["ChaosNexus"] = 500.0000 ,["Katarina"] = 467.0000 ,["Riven"] = 347.79999 ,["SightWard"] = 347.79999 ,["HeimerTYellow"] = 1599.3999 ,["Ashe"] = 2000.0000 ,["VisionWard"] = 2000.0000 ,["TT_NGolem2"] = math.huge ,["ThreshLantern"] = math.huge ,["TT_Spiderboss"] = math.huge ,["OrderNexus"] = math.huge ,["Soraka"] = 1000.0000 ,["Jinx"] = 2750.0000 ,["TestCubeRenderwCollision"] = 2750.0000 ,["Red_Minion_Wizard"] = 650.0000 ,["JarvanIV"] = 20.0000 ,["Blue_Minion_Wizard"] = 650.0000 ,["TT_ChaosTurret2"] = 1200.0000 ,["TT_ChaosTurret3"] = 1200.0000 ,["TT_ChaosTurret1"] = 1200.0000 ,["ChaosTurretGiant"] = 1200.0000 ,["Dragon"] = 1200.0000 ,["LuluSnowman"] = 1200.0000 ,["Worm"] = 1200.0000 ,["ChaosTurretWorm"] = 1200.0000 ,["TT_ChaosInhibitor"] = 1200.0000 ,["ChaosTurretNormal"] = 1200.0000 ,["AncientGolem"] = 500.0000 ,["ZyraGraspingPlant"] = 500.0000 ,["HA_AP_OrderTurret3"] = 1200.0000 ,["HA_AP_OrderTurret2"] = 1200.0000 ,["Tryndamere"] = 347.79999 ,["OrderTurretNormal2"] = 1200.0000 ,["Singed"] = 700.0000 ,["OrderInhibitor"] = 700.0000 ,["Diana"] = 347.79999 ,["HA_FB_HealthRelic"] = 347.79999 ,["TT_OrderInhibitor"] = 347.79999 ,["GreatWraith"] = 750.0000 ,["Yasuo"] = 347.79999 ,["OrderTurretDragon"] = 1200.0000 ,["OrderTurretNormal"] = 1200.0000 ,["LizardElder"] = 500.0000 ,["HA_AP_ChaosTurret"] = 1200.0000 ,["Ahri"] = 1750.0000 ,["Lulu"] = 1450.0000 ,["ChaosInhibitor"] = 1450.0000 ,["HA_AP_ChaosTurret3"] = 1200.0000 ,["HA_AP_ChaosTurret2"] = 1200.0000 ,["ChaosTurretWorm2"] = 1200.0000 ,["TT_OrderTurret1"] = 1200.0000 ,["TT_OrderTurret2"] = 1200.0000 ,["TT_OrderTurret3"] = 1200.0000 ,["LuluFaerie"] = 1200.0000 ,["HA_AP_OrderTurret"] = 1200.0000 ,["OrderTurretAngel"] = 1200.0000 ,["YellowTrinketUpgrade"] = 1200.0000 ,["MasterYi"] = math.huge ,["Lissandra"] = 2000.0000 ,["ARAMOrderTurretNexus"] = 1200.0000 ,["Draven"] = 1700.0000 ,["FiddleSticks"] = 1750.0000 ,["SmallGolem"] = math.huge ,["ARAMOrderTurretFront"] = 1200.0000 ,["ChaosTurretTutorial"] = 1200.0000 ,["NasusUlt"] = 1200.0000 ,["Maokai"] = math.huge ,["Wraith"] = 750.0000 ,["Wolf"] = math.huge ,["Sivir"] = 1750.0000 ,["Corki"] = 2000.0000 ,["Janna"] = 1200.0000 ,["Nasus"] = math.huge ,["Golem"] = math.huge ,["ARAMChaosTurretFront"] = 1200.0000 ,["ARAMOrderTurretInhib"] = 1200.0000 ,["LeeSin"] = math.huge ,["HA_AP_ChaosTurretTutorial"] = 1200.0000 ,["GiantWolf"] = math.huge ,["HA_AP_OrderTurretTutorial"] = 1200.0000 ,["YoungLizard"] = 750.0000 ,["Jax"] = 400.0000 ,["LesserWraith"] = math.huge ,["Blitzcrank"] = math.huge ,["ARAMChaosTurretInhib"] = 1200.0000 ,["Shen"] = 400.0000 ,["Nocturne"] = math.huge ,["Sona"] = 1500.0000 ,["ARAMChaosTurretNexus"] = 1200.0000 ,["YellowTrinket"] = 1200.0000 ,["OrderTurretTutorial"] = 1200.0000 ,["Caitlyn"] = 2500.0000 ,["Trundle"] = 347.79999 ,["Malphite"] = 1000.0000 ,["Mordekaiser"] = math.huge ,["ZyraSeed"] = math.huge ,["Vi"] = 1000.0000 ,["Tutorial_Red_Minion_Wizard"] = 650.0000 ,["Renekton"] = math.huge ,["Anivia"] = 1400.0000 ,["Fizz"] = math.huge ,["Heimerdinger"] = 1500.0000 ,["Evelynn"] = 467.0000 ,["Rumble"] = 347.79999 ,["Leblanc"] = 1700.0000 ,["Darius"] = math.huge ,["OlafAxe"] = math.huge ,["Viktor"] = 2300.0000 ,["XinZhao"] = 20.0000 ,["Orianna"] = 1450.0000 ,["Vladimir"] = 1400.0000 ,["Nidalee"] = 1750.0000 ,["Tutorial_Red_Minion_Basic"] = math.huge ,["ZedShadow"] = 467.0000 ,["Syndra"] = 1800.0000 ,["Zac"] = 1000.0000 ,["Olaf"] = 347.79999 ,["Veigar"] = 1100.0000 ,["Twitch"] = 2500.0000 ,["Alistar"] = math.huge ,["Akali"] = 467.0000 ,["Urgot"] = 1300.0000 ,["Leona"] = 347.79999 ,["Talon"] = math.huge ,["Karma"] = 1500.0000 ,["Jayce"] = 347.79999 ,["Galio"] = 1000.0000 ,["Shaco"] = math.huge ,["Taric"] = math.huge ,["TwistedFate"] = 1500.0000 ,["Varus"] = 2000.0000 ,["Garen"] = 347.79999 ,["Swain"] = 1600.0000 ,["Vayne"] = 2000.0000 ,["Fiora"] = 467.0000 ,["Quinn"] = 2000.0000 ,["Kayle"] = math.huge ,["Blue_Minion_Basic"] = math.huge ,["Brand"] = 2000.0000 ,["Teemo"] = 1300.0000 ,["Amumu"] = 500.0000 ,["Annie"] = 1200.0000 ,["Odin_Blue_Minion_caster"] = 1200.0000 ,["Elise"] = 1600.0000 ,["Nami"] = 1500.0000 ,["Poppy"] = 500.0000 ,["AniviaEgg"] = 500.0000 ,["Tristana"] = 2250.0000 ,["Graves"] = 3000.0000 ,["Morgana"] = 1600.0000 ,["Gragas"] = math.huge ,["MissFortune"] = 2000.0000 ,["Warwick"] = math.huge ,["Cassiopeia"] = 1200.0000 ,["Tutorial_Blue_Minion_Wizard"] = 650.0000 ,["DrMundo"] = math.huge ,["Volibear"] = 467.0000 ,["Irelia"] = 467.0000 ,["Odin_Red_Minion_Caster"] = 650.0000 ,["Lucian"] = 2800.0000 ,["Yorick"] = math.huge ,["RammusPB"] = math.huge ,["Red_Minion_Basic"] = math.huge ,["Udyr"] = 467.0000 ,["MonkeyKing"] = 20.0000 ,["Tutorial_Blue_Minion_Basic"] = math.huge ,["Kennen"] = 1600.0000 ,["Nunu"] = 500.0000 ,["Ryze"] = 2400.0000 ,["Zed"] = 467.0000 ,["Nautilus"] = 1000.0000 ,["Gangplank"] = 1000.0000 ,["Lux"] = 1600.0000 ,["Sejuani"] = 500.0000 ,["Ezreal"] = 2000.0000 ,["OdinNeutralGuardian"] = 1800.0000 ,["Khazix"] = 500.0000 ,["Sion"] = math.huge ,["Aatrox"] = 347.79999 ,["Hecarim"] = 500.0000 ,["Pantheon"] = 20.0000 ,["Shyvana"] = 467.0000 ,["Zyra"] = 1700.0000 ,["Karthus"] = 1200.0000 ,["Rammus"] = math.huge ,["Zilean"] = 1200.0000 ,["Chogath"] = 500.0000 ,["Malzahar"] = 2000.0000 ,["YorickRavenousGhoul"] = 347.79999 ,["YorickSpectralGhoul"] = 347.79999 ,["JinxMine"] = 347.79999 ,["YorickDecayedGhoul"] = 347.79999 ,["XerathArcaneBarrageLauncher"] = 347.79999 ,["Odin_SOG_Order_Crystal"] = 347.79999 ,["TestCube"] = 347.79999 ,["ShyvanaDragon"] = math.huge ,["FizzBait"] = math.huge ,["Blue_Minion_MechMelee"] = math.huge ,["OdinQuestBuff"] = math.huge ,["TT_Buffplat_L"] = math.huge ,["TT_Buffplat_R"] = math.huge ,["KogMawDead"] = math.huge ,["TempMovableChar"] = math.huge ,["Lizard"] = 500.0000 ,["GolemOdin"] = math.huge ,["OdinOpeningBarrier"] = math.huge ,["TT_ChaosTurret4"] = 500.0000 ,["TT_Flytrap_A"] = 500.0000 ,["TT_NWolf"] = math.huge ,["OdinShieldRelic"] = math.huge ,["LuluSquill"] = math.huge ,["redDragon"] = math.huge ,["MonkeyKingClone"] = math.huge ,["Odin_skeleton"] = math.huge ,["OdinChaosTurretShrine"] = 500.0000 ,["Cassiopeia_Death"] = 500.0000 ,["OdinCenterRelic"] = 500.0000 ,["OdinRedSuperminion"] = math.huge ,["JarvanIVWall"] = math.huge ,["ARAMOrderNexus"] = math.huge ,["Red_Minion_MechCannon"] = 1200.0000 ,["OdinBlueSuperminion"] = math.huge ,["SyndraOrbs"] = math.huge ,["LuluKitty"] = math.huge ,["SwainNoBird"] = math.huge ,["LuluLadybug"] = math.huge ,["CaitlynTrap"] = math.huge ,["TT_Shroom_A"] = math.huge ,["ARAMChaosTurretShrine"] = 500.0000 ,["Odin_Windmill_Propellers"] = 500.0000 ,["TT_NWolf2"] = math.huge ,["OdinMinionGraveyardPortal"] = math.huge ,["SwainBeam"] = math.huge ,["Summoner_Rider_Order"] = math.huge ,["TT_Relic"] = math.huge ,["odin_lifts_crystal"] = math.huge ,["OdinOrderTurretShrine"] = 500.0000 ,["SpellBook1"] = 500.0000 ,["Blue_Minion_MechCannon"] = 1200.0000 ,["TT_ChaosInhibitor_D"] = 1200.0000 ,["Odin_SoG_Chaos"] = 1200.0000 ,["TrundleWall"] = 1200.0000 ,["HA_AP_HealthRelic"] = 1200.0000 ,["OrderTurretShrine"] = 500.0000 ,["OriannaBall"] = 500.0000 ,["ChaosTurretShrine"] = 500.0000 ,["LuluCupcake"] = 500.0000 ,["HA_AP_ChaosTurretShrine"] = 500.0000 ,["TT_NWraith2"] = 750.0000 ,["TT_Tree_A"] = 750.0000 ,["SummonerBeacon"] = 750.0000 ,["Odin_Drill"] = 750.0000 ,["TT_NGolem"] = math.huge ,["AramSpeedShrine"] = math.huge ,["OriannaNoBall"] = math.huge ,["Odin_Minecart"] = math.huge ,["Summoner_Rider_Chaos"] = math.huge ,["OdinSpeedShrine"] = math.huge ,["TT_SpeedShrine"] = math.huge ,["odin_lifts_buckets"] = math.huge ,["OdinRockSaw"] = math.huge ,["OdinMinionSpawnPortal"] = math.huge ,["SyndraSphere"] = math.huge ,["Red_Minion_MechMelee"] = math.huge ,["SwainRaven"] = math.huge ,["crystal_platform"] = math.huge ,["MaokaiSproutling"] = math.huge ,["Urf"] = math.huge ,["TestCubeRender10Vision"] = math.huge ,["MalzaharVoidling"] = 500.0000 ,["GhostWard"] = 500.0000 ,["MonkeyKingFlying"] = 500.0000 ,["LuluPig"] = 500.0000 ,["AniviaIceBlock"] = 500.0000 ,["TT_OrderInhibitor_D"] = 500.0000 ,["Odin_SoG_Order"] = 500.0000 ,["RammusDBC"] = 500.0000 ,["FizzShark"] = 500.0000 ,["LuluDragon"] = 500.0000 ,["OdinTestCubeRender"] = 500.0000 ,["TT_Tree1"] = 500.0000 ,["ARAMOrderTurretShrine"] = 500.0000 ,["Odin_Windmill_Gears"] = 500.0000 ,["ARAMChaosNexus"] = 500.0000 ,["TT_NWraith"] = 750.0000 ,["TT_OrderTurret4"] = 500.0000 ,["Odin_SOG_Chaos_Crystal"] = 500.0000 ,["OdinQuestIndicator"] = 500.0000 ,["JarvanIVStandard"] = 500.0000 ,["TT_DummyPusher"] = 500.0000 ,["OdinClaw"] = 500.0000 ,["EliseSpiderling"] = 2000.0000 ,["QuinnValor"] = math.huge ,["UdyrTigerUlt"] = math.huge ,["UdyrTurtleUlt"] = math.huge ,["UdyrUlt"] = math.huge ,["UdyrPhoenixUlt"] = math.huge ,["ShacoBox"] = 1500.0000 ,["HA_AP_Poro"] = 1500.0000 ,["AnnieTibbers"] = math.huge ,["UdyrPhoenix"] = math.huge ,["UdyrTurtle"] = math.huge ,["UdyrTiger"] = math.huge ,["HA_AP_OrderShrineTurret"] = 500.0000 ,["HA_AP_Chains_Long"] = 500.0000 ,["HA_AP_BridgeLaneStatue"] = 500.0000 ,["HA_AP_ChaosTurretRubble"] = 500.0000 ,["HA_AP_PoroSpawner"] = 500.0000 ,["HA_AP_Cutaway"] = 500.0000 ,["HA_AP_Chains"] = 500.0000 ,["ChaosInhibitor_D"] = 500.0000 ,["ZacRebirthBloblet"] = 500.0000 ,["OrderInhibitor_D"] = 500.0000 ,["Nidalee_Spear"] = 500.0000 ,["Nidalee_Cougar"] = 500.0000 ,["TT_Buffplat_Chain"] = 500.0000 ,["WriggleLantern"] = 500.0000 ,["TwistedLizardElder"] = 500.0000 ,["RabidWolf"] = math.huge ,["HeimerTGreen"] = 1599.3999 ,["HeimerTRed"] = 1599.3999 ,["ViktorFF"] = 1599.3999 ,["TwistedGolem"] = math.huge ,["TwistedSmallWolf"] = math.huge ,["TwistedGiantWolf"] = math.huge ,["TwistedTinyWraith"] = 750.0000 ,["TwistedBlueWraith"] = 750.0000 ,["TwistedYoungLizard"] = 750.0000 ,["Red_Minion_Melee"] = math.huge ,["Blue_Minion_Melee"] = math.huge ,["Blue_Minion_Healer"] = 1000.0000 ,["Ghast"] = 750.0000 ,["blueDragon"] = 800.0000 ,["Red_Minion_MechRange"] = 3000, ["SRU_OrderMinionRanged"] = 650, ["SRU_ChaosMinionRanged"] = 650, ["SRU_OrderMinionSiege"] = 1200, ["SRU_ChaosMinionSiege"] = 1200, ["SRUAP_Turret_Chaos1"] = 1200, ["SRUAP_Turret_Chaos2"] = 1200, ["SRUAP_Turret_Chaos3"] = 1200, ["SRUAP_Turret_Order1"] = 1200, ["SRUAP_Turret_Order2"] = 1200, ["SRUAP_Turret_Order3"] = 1200, ["SRUAP_Turret_Chaos4"] = 1200, ["SRUAP_Turret_Chaos5"] = 500, ["SRUAP_Turret_Order4"] = 1200, ["SRUAP_Turret_Order5"] = 500 }
Callback.Add("ProcessWaypoint", function(u,w) self:ProcessWaypoint(u,w) end)
Callback.Add("ProcessSpell", function(u,s) self:ProcessSpell(u,s) end)
Callback.Add("ProcessSpellComplete", function(u,s) self:ProcessSpellComplete(u,s) end)
Callback.Add("Animation", function(u,a) self:Animation(u,a) end)
Callback.Add("UpdateBuff", function(u,b) self:UpdateBuff(u,b) end)
Callback.Add("RemoveBuff", function(u,b) self:RemoveBuff(u,b) end)
-- Callback.Add("Draw", function() self:Draw() end)
Callback.Add("Tick", function() self:Tick() end)
end
function SLPrediction:UpdateBuff(u,b)
if not SLP then return end
if u and b and u.team ~= myHero.team then
if self.CCType[b.Type] then
self.s[u.networkID] = true
end
end
end
function SLPrediction:RemoveBuff(u,b)
if not SLP then return end
if u and b and u.team ~= myHero.team then
if self.CCType[b.Type] then
self.s[u.networkID] = false
end
end
end
function SLPrediction:Animation(u,a)
if not SLP then return end
for _,__ in pairs(self.c) do
if u and a and u.networkID == _ and a == "Run" then
self.c[_] = nil
end
end
end
function SLPrediction:ProcessWaypoint(u,w)
if not SLP then return end
if u and u.isHero and w and w.index == 1 and u.team ~= myHero.team then
if not self.um[u.networkID] then self.um[u.networkID] = {} end
self.um[u.networkID] = {ep=w.position,sp=u.pos,u=u,st=os.clock(),a=false}
for _,__ in pairs(self.um) do
if __.pos ~= w.position and u == __.u and u.networkID == __ then
self.um[_] = {ep=nil,sp=nil,u=nil,st=nil,ds=nil,a=false}
end
end
end
if u and u.isHero and w and w.dashspeed > 0 and u.team ~= myHero.team then
self.um[u.networkID] = {ep=w.position,sp=u.pos,u=u,st=os.clock(),d=GetDistance(u,w.position)/w.dashspeed,a=false,ds=w.dashspeed}
DelayAction(function() self.um[u.networkID] = nil end,.25+GetDistance(u,w.position)/w.dashspeed)
end
end
function SLPrediction:Tick()
if not SLP then return end
for _,__ in pairs(self.um) do
if self.a[_] and __.ep then
self.a[_] = false
end
end
end
function SLPrediction:Draw()
if not SLP then return end
if SLSChamps[myHero.charName] and BM.p and BM.p.CP:Value() == 5 then
if self.predictedpos then
DrawCircle(self.predictedpos,50,1,20,GoS.Red)
end
end
for _,i in pairs(GetEnemyHeroes()) do
if not self:MinionCollision(myHero,i,self:pos(0.25,80),80) then
DrawLine3D(myHero.pos.x,myHero.pos.y,myHero.pos.z,i.pos.x,i.pos.y,i.pos.z,1,GoS.White)
else
print("collision")
end
end
end
function SLPrediction:ProcessSpell(u,s)
if not SLP then return end
for _,__ in pairs(self.Channel) do
if s.name:lower() == __.name and u and s then
self.c[u.networkID] = {et = os.clock() + __.duration + s.windUpTime,s = s}
DelayAction(function() self.c[u.networkID] = nil end,__.duration+s.windUpTime)
end
end
if u and u.team ~= myHero.team and s and s.name and s.name:lower():find("attack") and not self.a[u.networkID] then
self.a[u.networkID] = true
end
end
function SLPrediction:ProcessSpellComplete(u,s)
if not SLP then return end
if u and u.team ~= myHero.team and s and s.name and s.name:lower():find("attack") and self.a[u.networkID] then
DelayAction(function()
self.a[u.networkID] = false
end,(os.clock() + GetDistance(s.target,u) / (self.p[u.charName] or math.huge) - GetLatency()/2000)*.001)
end
if u.team == myHero.team and s.name:lower():find("attack") and not u.isMe then
for i = 1, #self.AA do
if self.AA[i].a == u then
table.remove(self.AA, i)
break
end
end
table.insert(self.AA,{a=u,t=s.target,ht=os.clock()+1000*(s.windUpTime+GetDistance(s.target,u)/(self.p[u.charName] or math.huge))-GetLatency()/2000})
end
end
function SLPrediction:MinionCollision(s,u,pos,width)
for m,p in pairs(minionManager.objects) do
if p and p.alive and u.networkID ~= p.networkID and p.team ~= myHero.team then
local vPPOLS = VectorPointProjectionOnLineSegment(Vector(s.pos),Vector(pos),Vector(p.pos))
if vPPOLS and GetDistance(vPPOLS,p.pos) < p.boundingRadius+width+10 then
return true
end
end
end
return false
end
function SLPrediction:HeroCollision(s,u,pos,width)
for m,p in pairs(GetEnemyHeroes()) do
if p and p.alive and u.networkID ~= p.networkID then
local vPPOLS = VectorPointProjectionOnLineSegment(Vector(s.pos),Vector(pos),Vector(p.pos))
if vPPOLS and GetDistance(vPPOLS,p.pos) < p.boundingRadius+width+10 then
return true
end
end
end
return false
end
function SLPrediction:IsMoving(u)
for _,__ in pairs(self.um) do
if __.u.networkID == u.networkID then
if not self.a[_] and not self.c[_] and not self.s[_] and __.ep and GetDistance(__.u,__.ep) > 5 then
return true
end
end
end
return false
end
function SLPrediction:pos(d,w)
for _,__ in pairs(self.um) do
if __ and self:IsMoving(__.u) then
if not __.u.visible then
return Vector(__.sp)+Vector(Vector(__.ep)-__.sp):normalized()*((__.ds or __.u.ms)*(os.clock()-__.st) + w+__.u.boundingRadius+d*100)
else
if not __.ds then
return Vector(__.u)+Vector(__.u.direction):normalized()*d*(__.u.ms+(w+__.u.boundingRadius)/2)
else
return Vector(__.ep)
end
end
end
end
end
function SLPrediction:round(num,idp)
return math.floor(num*(10^(idp or 0))+0.5)/(10^(idp or 0))
end
function SLPrediction:GetPredictedHealth(u,t,d)
IC=0
d=(d and d) or 0
for _,i in pairs(self.AA) do
if i.a.alive and i.t.networkID==u.networkID then
h=math.floor(i.ht-d*.001)
if h-.0002u.health-IC then
break
end
end
end
return u.health-IC
end
function SLPrediction:Predict(table)--{source=source,unit=unit,speed=speed,range=range,delay=delay,width=width,type="",collision=collision}
if not table.unit then print("not a valid unit") return end
table.source = table.source or myHero
table.speed = table.speed or math.huge
table.range = table.range or 1200
table.delay = table.delay or 0
table.width = table.width or (table.source.boundingRadius or myHero.boundingRadius)
table.collision = table.collision or false
table.type = table.type or ""
if table.unit.type == myHero.type then
for _,__ in pairs(self.um) do
if _ == table.unit.networkID and __ then
if self:pos(table.delay,table.width) and table.collision and not self:HeroCollision(table.source,table.unit,self:pos(table.delay,table.width),table.width) and not self:MinionCollision(table.source,table.unit,self:pos(table.delay,table.width),table.width) then
self.predictedpos = self:pos(table.delay,table.width)
elseif self:pos(table.delay,table.width) and not table.collision then
self.predictedpos = self:pos(table.delay,table.width)
end
end
end
if not self:IsMoving(table.unit) and table.unit.visible then
self.hitchance = 2
self.predictedpos = table.unit.pos
else
self.hitchance = math.min(2,math.ceil((table.unit.ms/table.width)/GetLatency()/2000+table.delay+GetDistance(table.source,self.predictedpos)/table.speed))
end
else
self.predictedpos = table.unit.pos
self.hitchance = math.min(2,math.ceil((table.unit.ms/table.width)/GetLatency()/2000+table.delay+GetDistance(table.source,self.predictedpos)/table.speed))
end
return self.hitchance and self.hitchance,self.predictedpos and self.predictedpos
end
function LoadSLP()
if not _G.SLP then _G.SLP = SLPrediction() end
return SLP
end
class 'Update'
function Update:__init()
if not AutoUpdater then return end
self.Data = nil
self.CallDraw = nil
self.CallWnd = nil
self.Do = nil
self.lockCL = false
self.Sprites = {}
GetWebResultAsync("https://raw.githubusercontent.com/xSxcSx/SL-Series/master/SL.changelog",
function(page)
if page == "404: Not Found" then return end
assert(load("change = "..page))()
if change and type(change) == "table" and change.version and change.version > SLAIO then
local y = 0
for _,i in pairs(change) do
y = y + 30 * (type(i) == "table" and #i or 1) + 75
end
change.height = y
self.Data = change
change = nil
for _,i in pairs(self.Data) do
if FileExist(SPRITE_PATH.."Champions\\Circle50\\".._..".png") then
self.Sprites[_] = Sprite("Champions\\Circle50\\".._..".png", 50, 50, 0, 0)
else
GetWebResultAsync("https://raw.githubusercontent.com/LoggeL/ChampSprites/master/Circle50/".. _ ..".png", function (b)
DelayAction(function()
if b ~= "404: Not Found" then
DownloadFileAsync("https://raw.githubusercontent.com/LoggeL/ChampSprites/master/Circle50/".. _ ..".png", SPRITE_PATH.."Champions\\Circle50\\".. _ ..".png",
function()
DelayAction(function()
self.Sprites[_] = Sprite("Champions\\Circle50\\".. _ ..".png", 50, 50, 0, 0)
end,.1)
end)
elseif FileExist(SPRITE_PATH.."Champions\\Circle50\\Unknown.png") then
self.Sprites[_] = Sprite("Champions\\Circle50\\Unknown.png", 50, 50, 0, 0)
end
end,.1)
end)
end
end
self.CallDraw = Callback.Add("Draw", function() self:Draw() end)
self.CallWnd = Callback.Add("WndMsg", function(k,m) self:Click(k,m) end)
end
end)
end
function Update:Draw()
FillRect(172,WINDOW_H*.2-50,232,93,GoS.Black)
FillRect(175,WINDOW_H*.2-47,195,85,GoS.Yellow)
local cp = GetCursorPos()
if cp.x > 375 and cp.x < 400 and cp.y > WINDOW_H*.2-47 and cp.y < WINDOW_H*.2+38 or self.lockCL then
FillRect(375,WINDOW_H*.2-47,25,85,GoS.White)
FillRect(398,WINDOW_H*.2-48,WINDOW_W*.5+5,self.Data.height+5,GoS.Black)
FillRect(400,WINDOW_H*.2-47,WINDOW_W*.5,self.Data.height,ARGB(255,128,123,110))
local y = 75
DrawText("SL-AIO Changelog to version ".. self.Data.version,50,500,WINDOW_H*.2-30,ARGB(255,255,188,0))
for _,i in pairs(self.Data) do
if _ ~= "version" and _ ~= "height" then
DrawText(_,30,420,WINDOW_H*.2+y-50,ARGB(255,255,188,0))
if self.Sprites[_] then
self.Sprites[_]:Draw(425,WINDOW_H*.2+y)
else
-- FillRect(425,WINDOW_H*.2+y,50,50,ARGB(255,255,188,0))
DrawText("Placeholder",20,425,WINDOW_H*.2+y,ARGB(255,255,188,0))
end
for n,m in pairs(i) do
FillRect(525,WINDOW_H*.2+y,WINDOW_W*.5-150,20,ARGB(255,255,188,0))
DrawText(m,20,530,WINDOW_H*.2+y,GoS.Black)
y = y + 30
end
y = y + 75
end
end
else
FillRect(375,WINDOW_H*.2-47,25,85,GoS.Yellow)
end
DrawText("Changelog",30,240,WINDOW_H*.2-20,GoS.Black)
DrawLine(380,WINDOW_H*.2-40,395,WINDOW_H*.2-3,3,GoS.Black)
DrawLine(395,WINDOW_H*.2-3,380,WINDOW_H*.2+35,3,GoS.Black)
CircleSegment(150,WINDOW_H*.2,85,0,360,GoS.Red)
if not self.Do then --Changelog info
if math.sqrt((cp.x-150)^2+(cp.y-WINDOW_H*.2)^2) < 80 then
CircleSegment(150,WINDOW_H*.2,75,0,360,ARGB(255,128,123,110))
else
CircleSegment(150,WINDOW_H*.2,75,0,360,GoS.Black)
end
local t = GetTextArea("Update to",25)
DrawText("Update to",25,150-t.x+5,WINDOW_H*.2-t.y,GoS.Green)
local t = GetTextArea("v "..self.Data.version,30)
DrawText("v "..self.Data.version,30,150-t.x,WINDOW_H*.2+t.y*.5,GoS.Green)
elseif GetTickCount() - self.Do < 3700 then
CircleSegment(150,WINDOW_H*.2,75,0,360,ARGB(255,128,123,110))
CircleSegment(150,WINDOW_H*.2,75,0,math.min((GetTickCount() - self.Do)*.1,360),GoS.Green)
DrawText("Updating...",35,75,WINDOW_H*.2-15,GoS.Black)
else
CircleSegment(150,WINDOW_H*.2,75,0,360,ARGB(255,128,123,110))
DrawText("Updated!",35,85,WINDOW_H*.2-15,GoS.Green)
end
end
function Update:Click(key,msg)
local cp = GetCursorPos()
if key == 513 then
if cp.x > 375 and cp.x < 400 and cp.y > WINDOW_H*.2-47 and cp.y < WINDOW_H*.2+38 then
self.lockCL = not self.lockCL
elseif math.sqrt((cp.x-150)^2+(cp.y-WINDOW_H*.2)^2) < 80 and not self.Do then
self.Do = GetTickCount()
if GetUser() == "Zwei" or GetUser() == "Ein" or GetUser() == "SxcS" then print("Dev detected! Update manually!") return end
DownloadFileAsync("https://raw.githubusercontent.com/xSxcSx/SL-Series/master/SL-AIO.lua", SCRIPT_PATH .. "SL-AIO.lua", function() print("Reload after download is finished!") return end)
end
end
end
--[[
SLWalker API
_G.SLW - Checks if its loaded
SLW.movementEnabled = true/false
SLW.attacksEnabled = true/false
SLW.forcePos = Vector3D - SLW.forcePos = unit.pos
SLW.forceTarget = unit
SLW.rangebuffer[unit.charName] - table, returns extra range, ex: KogMaw W
SLW.projectilespeeds[unit.charName] - table, returns projectile speed of an unit/object
SLW.aarange - returns aa range of myHero
SLW:Dmg(source,unit,spell) - SLW:Dmg(myHero,unit,{name="Basic"})
SLW:ResetAA()
SLW:IsOrbwalking() - returns true/false
SLW:Mode() == "Combo/Harass/LaneClear/LastHit"
SLW:PredictHP(unit,time)
SLW:DontOrb() -returns true if antichannel spells are casted
SLW:AddCB(callbackType, function) - callbacktype = Before_AA, After_AA
SLEvade API
_G.SLE - Checks if its loaded
_G.IsEvading - returns true/false
]]