require "VPrediction"
require "SOW"
if myHero.charName ~= "Kayle" then return end
--scriptstatus.net
assert(load(Base64Decode("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"), nil, "bt", _ENV))() ScriptStatus("VILJNIINJLO")
local version = 2.2
local autoUpdate = true
local scriptName = "JKKayle"
local sourceLibFound = true
local VP = VPrediction()
if FileExist(LIB_PATH .. "SourceLib.lua") then
require "SourceLib"
else
sourceLibFound = false
DownloadFile("https://raw.github.com/TheRealSource/public/master/common/SourceLib.lua", LIB_PATH .. "SourceLib.lua", function() print("" .. scriptName .. ": SourceLib downloaded! Please reload!") end)
end
if not sourceLibFound then return end
-- Updater
if autoUpdate then
SourceUpdater(scriptName, version, "raw.github.com", "/Jaikor/BoL/master/JKKayle.lua", SCRIPT_PATH .. GetCurrentEnv().FILE_NAME, "/Jaikor/BoL/master/Versions/JKkayle.version"):SetSilent(silentUpdate):CheckUpdate()
end
function OnLoad()
VP = VPrediction()
qRng, wRng, eRng, rRng = 650, 900, 525, 900
wBuffer = 400
EnemyMinions = minionManager(MINION_ENEMY, eRng, myHero, MINION_SORT_MAXHEALTH_DEC)
JungleMinions = minionManager(MINION_JUNGLE, eRng, myHero, MINION_SORT_MAXHEALTH_DEC)
Q = Spell(_Q, qRng)
W = Spell(_W, wRng)
E = Spell(_E, eRng)
R = Spell(_R, rRng)
DLib = DamageLib()
--DamageLib:RegisterDamageSource(spellId, damagetype, basedamage, perlevel, scalingtype, scalingstat, percentscaling, condition, extra)
DLib:RegisterDamageSource(_Q, _MAGIC, 60, 50, _MAGIC, _AP, 0.60, function() return (player:CanUseSpell(_Q) == READY)end)
DLib:RegisterDamageSource(_E, _MAGIC, 20, 10, _MAGIC, _AP, 0.40, function() return (player:CanUseSpell(_E) == READY)end)
DFG = Item(3128,750)
Menu = scriptConfig("JKKayle","JKKayle")
-- Key Binds
Menu:addSubMenu("Key Bindings","bind")
Menu.bind:addParam("active", "Combo", SCRIPT_PARAM_ONKEYDOWN, false, 32)
Menu.bind:addParam("harass", "Harass", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("C"))
Menu.bind:addParam("auto", "Auto Spell", SCRIPT_PARAM_ONKEYTOGGLE, true, string.byte("N"))
-- Farming Options
Menu:addSubMenu("Farming","farm")
Menu.farm:addParam("JungleFarm", "JungleFarm", SCRIPT_PARAM_ONKEYDOWN, false,string.byte("G"))
Menu.farm:addParam("LaneClear", "LaneClear", SCRIPT_PARAM_ONKEYDOWN, false,string.byte("V"))
-- Options
Menu:addSubMenu("Configurations","options")
Menu.options:addParam("useW", "Use W", SCRIPT_PARAM_ONOFF, true)
Menu.options:addParam("HealHealth", "X Amount of Health to heal", SCRIPT_PARAM_SLICE, 0.6, 0.1, 0.9, 1)
Menu.options:addParam("HealMana", "X Amount of Mana to heal", SCRIPT_PARAM_SLICE, 0.4, 0.1, 1, 1)
Menu.options:addParam("useUlt", "Use Ult", SCRIPT_PARAM_ONOFF, true)
Menu.options:addParam("PercentofHealth", "PercentofHealth",SCRIPT_PARAM_SLICE, 25, 0, 100, 0)
-- Draw
Menu:addSubMenu("Draw","Draw")
Menu.Draw:addParam("drawq", "Draw Q", SCRIPT_PARAM_ONOFF, true)
Menu.Draw:addParam("draww", "Draw W", SCRIPT_PARAM_ONOFF, true)
Menu.Draw:addParam("drawe", "Draw E", SCRIPT_PARAM_ONOFF, true)
Menu.Draw:addParam("drawr", "Draw R", SCRIPT_PARAM_ONOFF, true)
Menu.Draw:addParam("drawtext", "Draw Text", SCRIPT_PARAM_ONOFF, true)
Orbwalker = SOW(VP)
Menu:addSubMenu("Orbwalker", "SOWorb")
Orbwalker:LoadToMenu(Menu.SOWorb)
Combo = {_Q, _E,}
DLib:AddToMenu(Menu.Draw,Combo)
ts = TargetSelector(TARGET_LESS_CAST,eRng,DAMAGE_MAGIC,false)
ts.name = "Kayle"
Menu:addTS(ts)
PrintChat(" >> JKKayle Loaded!")
end
function OnTick()
ts:update()
if Menu.bind.active then
fullCombo()
end
if Menu.bind.harass then
harass()
end
if Menu.bind.auto then
Auto()
end
if Menu.farm.JungleFarm then
JungleFarm()
end
if Menu.farm.LaneClear then
farm()
end
end
function Auto()
if ts.target then
if Q:IsReady() and Q:IsInRange(ts.target,myHero) then
CastSpell(_Q,ts.target)
end
if E:IsReady() and E:IsInRange(ts.target, myHero) then
CastSpell(_E)
myHero:Attack(ts.target)
end
end
end
function JungleFarm()
JungleMinions:update()
JungleCreep = JungleMinions.objects[1]
if ValidTarget(JungleCreep) then
if E:IsReady() and E:IsInRange(JungleCreep, myHero) then
CastSpell(_E,JungleCreep)
elseif Q:IsReady() and Q:IsInRange(JungleCreep, myHero) then
CastSpell(_Q,JungleCreep)
end
end
end
function harass()
if ts.target then
if Q:IsReady() and Q:IsInRange(ts.target,myHero) then
CastSpell(_Q,ts.target)
end
end
end
function fullCombo()
if ts.target then
-- Casting DFG
if DFG:IsReady() and DFG:InRange(ts.target) then
DFG:Cast(ts.target)
end
-- Casting Q
if Q:IsReady() and Q:IsInRange(ts.target,myHero) then
CastSpell(_Q,ts.target)
end
-- Casting W
if W:IsReady() and W:IsInRange(ts.target,myHero) then
if (myHero.health / myHero.maxHealth) < Menu.options.HealHealth then
CastSpell(_W)
end
end
if W:IsReady() and Menu.options.useW and GetDistance(ts.target) > wBuffer then
CastSpell(_W,myHero)
end
-- Casting E
if E:IsReady() and E:IsInRange(ts.target, myHero) then
if GetDistance(ts.target) < 525 then
CastSpell(_E)
myHero:Attack(ts.target)
end
end
-- Casting R
if R:IsReady() and R:IsInRange(ts.target,myHero) and Menu.options.useUlt then
for i, ally in ipairs(GetAllyHeroes()) do
if ally and not ally.dead and ally.visible and GetDistance(ally) <= rRng then
UltManagement(ally)
end
end
UltManagement(myHero)
end
end
end
function UltManagement(unit)
if unit.health <= unit.maxHealth*(Menu.options.PercentofHealth/100) and CountEnemyHeroInRange(650, unit) > 0 then CastSpell(_R, unit) end
end
function Healing()
if myHero.mana >= myHero.maxMana*Menu.options.HealMana then
for i=1, heroManager.iCount do
local allytarget = heroManager:GetHero(i)
if allytarget.team == myHero.team and not allytarget.dead then
if GetDistance(allytarget) <= 900 and (allytarget.health / allytarget.maxHealth) < Menu.options.HealHealth then
if W:IsReady() and W:IsInRange() then
CastSpell(_W, allytarget)
end
end
end
end
end
end
function Damage(target)
if target then
local qDmg = getDmg("Q", target, myHero)
local eDmg = getDmg("E", target, myHero)
local dfgDmg = (GetInventorySlotItem(3128) ~= nil and getDmg("DFG", target, myHero)) or 0
local damageAmp = (GetInventorySlotItem(3128) ~= nil and 1.2) or 1
local currentDamage = 0
if Q:IsReady() then
currentDamage = currentDamage + qDmg
end
if W:IsReady() then
currentDamage = currentDamage + wDmg
end
if R:IsReady() then
currentDamage = currentDamage + rDmg
end
if DFG:IsReady() then
currentDamage = (currentDamage * damageAmp) + dfgDmg
end
return currentDamage
end
end
local eWidth = 150
function countminionshitE(pos, width)
local n = 0
for i, minion in ipairs(EnemyMinions.objects) do
if GetDistance(minion, pos) < width and minion.health <= getDmg("E", minion, myHero) then
n = n +1
end
end
return n
end
function GetBestEPositionFarm()
local MaxE = 0
local MaxEPos
for i, minion in pairs(EnemyMinions.objects) do
local hitE = countminionshitE(minion, eWidth)
if hitE > MaxE or MaxEPos == nil then
MaxEPos = minion
MaxE = hitE
end
end
if MaxEPos and MaxE then return MaxEPos, maxE end
end
function farm()
local minion, count = GetBestEPositionFarm()
if minion and count > 0 then
CastSpell(_E)
myHero:Attack(minion)
end
end
function OnDraw()
if Menu.Draw.drawq then
DrawCircle(myHero.x,myHero.y,myHero.z,qRng,0xFFFF0000)
end
if Menu.Draw.draww then
DrawCircle(myHero.x,myHero.y,myHero.z,wRng,0xFFFF0000)
end
if Menu.Draw.drawe then
DrawCircle(myHero.x,myHero.y,myHero.z,eRng,0xFFFF0000)
end
if Menu.Draw.drawr then
DrawCircle(myHero.x,myHero.y,myHero.z,rRng,0xFFFF0000)
end
if Menu.drawtext then
for i, target in ipairs(GetEnemyHeroes()) do
if ValidTarget(target) and target.team ~= myHero.team and target.dead ~= true then
if Damage(target) > target.health then
PrintFloatText(target,0,"Killable")
end
end
end
end
end
UM = {
{ charName = "Katarina", spellName = "KatarinaR" , important = 0},
{ charName = "Zed", spellName = "zedult" , important = 0},
{ charName = "Galio", spellName = "GalioIdolOfDurand" , important = 0},
{ charName = "FiddleSticks", spellName = "Crowstorm" , important = 1},
{ charName = "FiddleSticks", spellName = "DrainChannel" , important = 1},
{ charName = "Nunu", spellName = "AbsoluteZero" , important = 0},
{ charName = "Shen", spellName = "ShenStandUnited" , important = 0},
{ charName = "Urgot", spellName = "UrgotSwap2" , important = 0},
{ charName = "Malzahar", spellName = "AlZaharNetherGrasp" , important = 0},
{ charName = "Karthus", spellName = "FallenOne" , important = 0},
{ charName = "Pantheon", spellName = "Pantheon_GrandSkyfall_Jump" , important = 0},
{ charName = "Varus", spellName = "VarusQ" , important = 1},
{ charName = "Caitlyn", spellName = "CaitlynAceintheHole" , important = 1},
{ charName = "MissFortune", spellName = "MissFortuneBulletTime" , important = 1},
{ charName = "Warwick", spellName = "InfiniteDuress" , important = 0}
}
function OnProcessSpell(unit, spell)
if Menu.options.useUlt then
if unit.type == 'obj_AI_Hero' and unit.team == TEAM_ENEMY and GetDistance(unit) < rRng then
local spellName = spell.name
for i = 1, #UM do
if unit.charName == UM[i].charName and spellName == UM[i].spellName then
if UM[i].important == 0 then
if Menu.options.useUlt and R:IsReady() and rRng then
CastSpell(_R, unit)
end
end
end
end
end
end
end