local supportedChamp = nil
local QRange = 600
local WRange = 700
local ERange = 325
local RRange = 700
local igniteRange = 600
local tdis = nil
local mdis = nil
local BilgewaterCutlass = 3144
local HextechGunblade = 3146
local ZhonyasHourglass = 3157
local RegenerationPotion= 2003
local IgniteDamageEnough= false
local RStacks = 0
local qkill = nil
local potDelayFunction = true
local Recall = false
local IgniteReady = nil
local heroEnergy = nil
local version = 1.026
local AUTOUPDATE = true
local SCRIPT_NAME = "FreeeKay-Akali"
local scriptName = "FreeeKay Akali"
local SCRIPT_HOSTSITE = "raw.github.com"
local SCRIPT_HOSTNAME = "/vanmancool/Lua-Scripts/master/"
local SOURCELIB_URL = "https://raw.github.com/TheRealSource/public/master/common/SourceLib.lua"
local SOURCELIB_PATH = LIB_PATH.."SourceLib.lua"
local SXORBWALKLIB_URL = "https://raw.githubusercontent.com/Superx321/BoL/master/common/SxOrbWalk.lua"
local SXORBWALKLIB_PATH = LIB_PATH.."SxOrbWalk.lua"
local SxOrbWalkDownload = nil
if FileExist(SOURCELIB_PATH) then
require("SourceLib")
else
DONLOADING_SOURCELIB = true
DownloadFile(SOURCELIB_URL, SOURCELIB_PATH, function() print("Required libraries downloaded successfully, please reload") end)
end
if DOWNLOADING_SOURCELIB then print("Downloading required libraries, please wait...") return end
local RequireI = Require("SourceLib")
RequireI:Check()
if AUTOUPDATE then
SourceUpdater(SCRIPT_NAME, version, SCRIPT_HOSTSITE, SCRIPT_HOSTNAME..SCRIPT_NAME..".lua", SCRIPT_PATH .. GetCurrentEnv().FILE_NAME, SCRIPT_HOSTNAME..SCRIPT_NAME..".version"):CheckUpdate()
end
function OnLoad()
if myHero.charName == "Akali" then
supportedChamp = true
print("Hello and Welcome to: "..scriptName.." ")
ItemNames = {
[3303] = "ArchAngelsDummySpell",
[3007] = "ArchAngelsDummySpell",
[3144] = "BilgewaterCutlass",
[3188] = "ItemBlackfireTorch",
[3153] = "ItemSwordOfFeastAndFamine",
[3405] = "TrinketSweeperLvl1",
[3411] = "TrinketOrbLvl1",
[3166] = "TrinketTotemLvl1",
[3450] = "OdinTrinketRevive",
[2041] = "ItemCrystalFlask",
[2054] = "ItemKingPoroSnack",
[2138] = "ElixirOfIron",
[2137] = "ElixirOfRuin",
[2139] = "ElixirOfSorcery",
[2140] = "ElixirOfWrath",
[3184] = "OdinEntropicClaymore",
[2050] = "ItemMiniWard",
[3401] = "HealthBomb",
[3363] = "TrinketOrbLvl3",
[3092] = "ItemGlacialSpikeCast",
[3460] = "AscWarp",
[3361] = "TrinketTotemLvl3",
[3362] = "TrinketTotemLvl4",
[3159] = "HextechSweeper",
[2051] = "ItemHorn",
[2003] = "RegenerationPotion",
[3146] = "HextechGunblade",
[3187] = "HextechSweeper",
[3190] = "IronStylus",
[2004] = "FlaskOfCrystalWater",
[3139] = "ItemMercurial",
[3222] = "ItemMorellosBane",
[3042] = "Muramana",
[3043] = "Muramana",
[3180] = "OdynsVeil",
[3056] = "ItemFaithShaker",
[2047] = "OracleExtractSight",
[3364] = "TrinketSweeperLvl3",
[2052] = "ItemPoroSnack",
[3140] = "QuicksilverSash",
[3143] = "RanduinsOmen",
[3074] = "ItemTiamatCleave",
[3800] = "ItemRighteousGlory",
[2045] = "ItemGhostWard",
[3342] = "TrinketOrbLvl1",
[3040] = "ItemSeraphsEmbrace",
[3048] = "ItemSeraphsEmbrace",
[2049] = "ItemGhostWard",
[3345] = "OdinTrinketRevive",
[2044] = "SightWard",
[3341] = "TrinketSweeperLvl1",
[3069] = "shurelyascrest",
[3599] = "KalistaPSpellCast",
[3185] = "HextechSweeper",
[3077] = "ItemTiamatCleave",
[2009] = "ItemMiniRegenPotion",
[2010] = "ItemMiniRegenPotion",
[3023] = "ItemWraithCollar",
[3290] = "ItemWraithCollar",
[2043] = "VisionWard",
[3340] = "TrinketTotemLvl1",
[3090] = "ZhonyasHourglass",
[3154] = "wrigglelantern",
[3142] = "YoumusBlade",
[3157] = "ZhonyasHourglass",
[3512] = "ItemVoidGate",
[3131] = "ItemSoTD",
[3137] = "ItemDervishBlade",
[3352] = "RelicSpotter",
[3350] = "TrinketTotemLvl2",
}
_G.ITEM_1 = 06
_G.ITEM_2 = 07
_G.ITEM_3 = 08
_G.ITEM_4 = 09
_G.ITEM_5 = 10
_G.ITEM_6 = 11
_G.ITEM_7 = 12
___GetInventorySlotItem = rawget(_G, "GetInventorySlotItem")
_G.GetInventorySlotItem = GetSlotItem
CustomOnLoad()
else
print("Your champion is not supported right now!")
supportedChamp = false
end
end
function CustomOnLoad()
if supportedChamp == true then
print("Loading Menu... ")
if FileExist(LIB_PATH .. "/SxOrbWalk.lua") then
require ("SxOrbWalk")
SxOrb:LoadToMenu()
SxOrbWalkDownload = true
else
print ("You need SxOrbWalk, downloading it now.")
DownloadFile(SXORBWALKLIB_URL, SXORBWALKLIB_PATH, function() print("SxOrbWalk downloaded!") end)
SxOrbWalkDownload = false
end
if SxOrbWalkDownload == false then
print("Required librarys downloaded, press F9 twice to reload!")
end
if SxOrbWalkDownload == true then
print("Loaded Menu!")
end
Config = scriptConfig(scriptName.." by Vanmancool", scriptName)
Config:addParam("space", "", SCRIPT_PARAM_INFO, "")
Config:addParam("version", "[WIP] Current Version: ", SCRIPT_PARAM_INFO, version)
Config:addParam("author", "FreeeKay Scripts by Vanmancool", SCRIPT_PARAM_INFO, "")
Config:addSubMenu("Akali Combo Settings", "comboMenu")
Config.comboMenu:addParam("comboRRange", "Use R only when out of E Range", SCRIPT_PARAM_ONOFF, false)
Config.comboMenu:addParam("experimental", "Experimental Options", SCRIPT_PARAM_INFO, "")
Config.comboMenu:addParam("comboOptions", "Combo Options", SCRIPT_PARAM_LIST, 1, { "Save", "Aggressive", "Rush" })
Config.comboMenu:addParam("comboOptionsRush", "[WIP] Options for R 'Rush' Usage", SCRIPT_PARAM_LIST, 1, { "Minions", "Heroes", "Both" })
Config:addSubMenu("Akali Lane Clear Settings", "laneclearMenu")
Config.laneclearMenu:addParam("laneclearEnergie", "Casts only if Energy over", SCRIPT_PARAM_SLICE, 100, 0, 150, 1)
Config.laneclearMenu:addParam("laneclearQ", "Enable Q on Lane Clear", SCRIPT_PARAM_ONOFF, true)
Config.laneclearMenu:addParam("laneclearE", "Enable E on Lane Clear", SCRIPT_PARAM_ONOFF, true)
Config:addSubMenu("Akali Harass Settings", "harassMenu")
Config.harassMenu:addParam("harassQ", "Enable Q on Harass", SCRIPT_PARAM_ONOFF, true)
Config.harassMenu:addParam("harassE", "Enable E on Harass", SCRIPT_PARAM_ONOFF, true)
Config:addSubMenu("Item and Ignite Usage Settings", "items")
Config.items:addParam("items", "Enable Item Usage", SCRIPT_PARAM_ONOFF, true)
Config.items:addParam("ignite", "Enable Ignite Usage", SCRIPT_PARAM_ONOFF, true)
Config.items:addParam("space", "", SCRIPT_PARAM_INFO, "")
Config.items:addParam("zhonyas", "Enable Auto Zhonyas", SCRIPT_PARAM_ONOFF, true)
Config.items:addParam("zhonyasLife", "Casts Zhonyas at %", SCRIPT_PARAM_SLICE, 20, 0, 100, 1)
Config.items:addParam("space", "", SCRIPT_PARAM_INFO, "")
Config.items:addParam("healpot", "Enable Health Pot Usage", SCRIPT_PARAM_ONOFF, true)
Config.items:addParam("healpotLife", "Uses Pot at %", SCRIPT_PARAM_SLICE, 50, 0, 100, 1)
Config.items:addParam("space", "", SCRIPT_PARAM_INFO, "")
Config.items:addParam("safetyW", "Use W on Low Life", SCRIPT_PARAM_ONOFF, true)
Config.items:addParam("safetyWLife", "Casts W at %", SCRIPT_PARAM_SLICE, 20, 0, 100, 1)
Config:addSubMenu("Kill Steal Setting", "kssettings")
Config.kssettings:addParam("ksQ", "Kill Steal with Q", SCRIPT_PARAM_ONOFF, true)
Config.kssettings:addParam("ksE", "Kill Steal with E", SCRIPT_PARAM_ONOFF, true)
Config.kssettings:addParam("ksR", "Kill Steal with R", SCRIPT_PARAM_ONOFF, true)
Config.kssettings:addParam("ksIgnite", "Kill Steal with Ignite", SCRIPT_PARAM_ONOFF, true)
Config:addSubMenu("Key Settings", "keys")
Config.keys:addParam("combo", "Combo", SCRIPT_PARAM_ONKEYDOWN, false, 32)
Config.keys:addParam("laneclear", "Lane Clear", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("X"))
Config.keys:addParam("harass", "Harass", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("C"))
Config.keys:addParam("lasthit", "Last Hit", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("V"))
Config:addSubMenu("Draw Settings", "draws")
Config.draws:addParam("drawcircle", "Enable/Disable all Draws", SCRIPT_PARAM_ONOFF, true)
Config.draws:addParam("space", "", SCRIPT_PARAM_INFO, "")
Config.draws:addParam("drawcircleQ", "Enable/Disable Q Range", SCRIPT_PARAM_ONOFF, true)
Config.draws:addParam("circleColorQ", "Q draw color", SCRIPT_PARAM_COLOR, {100,191,0,255})
Config.draws:addParam("space", "", SCRIPT_PARAM_INFO, "")
Config.draws:addParam("drawcircleW", "Enable/Disable W Range", SCRIPT_PARAM_ONOFF, true)
Config.draws:addParam("circleColorW", "W draw color", SCRIPT_PARAM_COLOR, {100,191,0,255})
Config.draws:addParam("space", "", SCRIPT_PARAM_INFO, "")
Config.draws:addParam("drawcircleE", "Enable/Disable E Range", SCRIPT_PARAM_ONOFF, true)
Config.draws:addParam("circleColorE", "E draw Color", SCRIPT_PARAM_COLOR, {100,191,0,255})
Config.draws:addParam("space", "", SCRIPT_PARAM_INFO, "")
Config.draws:addParam("drawcircleR", "Enable/Disable R Range", SCRIPT_PARAM_ONOFF, true)
Config.draws:addParam("circleColorR", "R draw color ", SCRIPT_PARAM_COLOR, {100,191,0,255})
Config.draws:addParam("space", "", SCRIPT_PARAM_INFO, "")
Config.draws:addParam("drawignite", "Enable/Disable Ignite Draws", SCRIPT_PARAM_ONOFF, true)
Config.draws:addParam("drawdmg", "Enable/Disable Damage Calculation Draws", SCRIPT_PARAM_ONOFF, true)
Config.keys:permaShow("combo")
Config.comboMenu:permaShow("comboOptions")
Config:permaShow("space")
Config.keys:permaShow("laneclear")
Config.laneclearMenu:permaShow("laneclearEnergie")
Config:permaShow("space")
Config.keys:permaShow("harass")
Config.keys:permaShow("lasthit")
TargetSelector = TargetSelector(TARGET_LOW_HP_PRIORITY, 1400)
Config:addTS(TargetSelector)
enemyMinions = minionManager(MINION_ENEMY, 900, myHero, MINION_SORT_MAXHEALTH_DEC)
IgniteFind()
end
end
function OnTick()
if supportedChamp == true then
ap = math.floor (myHero.ap + 0.5)
ad = math.floor (myHero.totalDamage)
TargetSelector:update()
enemyMinions:update()
target = TargetSelector.target
Items()
GetMinion()
OnCombo()
OnLaneClear()
OnHarass()
Ignite()
DamageCalc()
end
end
function OnCombo()
if ValidTarget(target) then
tdis = GetDistance(target)
end
if ValidTarget(minion) then
mdis = GetDistance(minion)
end
local QReady = myHero:CanUseSpell(_Q)
local WReady = myHero:CanUseSpell(_W)
local EReady = myHero:CanUseSpell(_E)
local RReady = myHero:CanUseSpell(_R)
if Config.keys.combo and ValidTarget(target) then
if Config.comboMenu.comboOptions == 1 then
if QReady and tdis < QRange then
CastSpell(_Q, target)
SxOrb:ForceTarget(target , 125)
if Config.comboMenu.comboRRange then
if RReady and tdis < RRange and tdis > ERange then
CastSpell(_R, target)
else if EReady and tdis < ERange then
CastSpell(_E)
end
end
else
if RReady and tdis < RRange then
CastSpell(_R, target)
else if EReady and tdis < ERange then
CastSpell(_E)
end
end
end
end
end
if Config.comboMenu.comboOptions == 2 then
if QReady and tdis < QRange then
CastSpell(_Q, target)
SxOrb:ForceTarget(target , 125)
if Config.comboMenu.comboRRange then
if RReady and tdis < RRange and tdis > ERange then
CastSpell(_R, target)
else if EReady and tdis < ERange then
CastSpell(_E)
end
end
else
if RReady and tdis < RRange then
CastSpell(_R, target)
else if EReady and tdis < ERange then
CastSpell(_E)
end
end
end
end
end
if Config.comboMenu.comboOptions == 3 then
for i, minion in pairs(enemyMinions.objects) do
if minion ~= nil and ValidTarget(minion) and ValidTarget(target) then
mdis = GetDistance(minion)
dashRange = minion:GetDistance(target)
if mdis < RRange and tdis > RRange and dashRange < RRange and mdis < tdis and RReady then
CastSpell(_R, minion)
end
end
end
if Config.comboMenu.comboRRange then
if QReady and tdis < QRange then
CastSpell(_Q, target)
SxOrb:ForceTarget(target , 125)
if RReady and tdis < RRange and tdis > ERange then
CastSpell(_R, target)
else if EReady and tdis < ERange then
CastSpell(_E)
end
end
end
else
if QReady and tdis < QRange then
CastSpell(_Q, target)
SxOrb:ForceTarget(target , 125)
if RReady and tdis < RRange then
CastSpell(_R, target)
else if EReady and tdis < ERange then
CastSpell(_E)
end
end
end
end
end
end
end
function OnLaneClear()
local QReady = myHero:CanUseSpell(_Q)
local EReady = myHero:CanUseSpell(_E)
heroEnergy = myHero.mana
for i, minion in pairs(enemyMinions.objects) do
if minion ~= nil and ValidTarget(minion, QRange) and heroEnergy > Config.laneclearMenu.laneclearEnergie then
if QReady and Config.laneclearMenu.laneclearQ and Config.keys.laneclear then
CastSpell(_Q, minion)
end
end
heroEnergy = myHero.mana
if minion ~= nil and ValidTarget(minion, ERange) and heroEnergy > Config.laneclearMenu.laneclearEnergie then
if EReady and Config.laneclearMenu.laneclearE and Config.keys.laneclear then
CastSpell(_E, minion)
end
end
end
end
function OnHarass()
local QReady = myHero:CanUseSpell(_Q)
local EReady = myHero:CanUseSpell(_E)
if ValidTarget(target) then
tdis = GetDistance(target)
end
if Config.keys.harass and ValidTarget(target) then
if QReady and Config.harassMenu.harassQ then
if tdis < QRange then
CastSpell(_Q, target)
end
end
if EReady and Config.harassMenu.harassE then
if tdis < ERange then
CastSpell(_E)
end
end
end
end
function Ignite()
if ignite ~= nil then
IgniteReady = myHero:CanUseSpell(ignite)
end
local IgniteDps = 10 + (4 * myHero.level)
local IgniteDamage = 50 + (20 * myHero.level)
if ValidTarget(target) then
tdis = GetDistance(target)
end
if ignite ~= nil and Config.items.ignite and Config.kssettings.ksIgnite and ValidTarget(target) then
if IgniteReady and target.health < IgniteDamage and tdis < igniteRange then
CastSpell(ignite, target)
end
end
end
function Items()
myHeroHpPots = myHero.maxHealth / 100 * Config.items.healpotLife
myHeroPercent = myHero.maxHealth / 100 * Config.items.zhonyasLife
myHeroWPercent = myHero.maxHealth / 100 * Config.items.safetyWLife
if ValidTarget(target) then
tdis = GetDistance(target)
end
if myHero.health < myHeroHpPots and Config.items.healpot and potDelayFunction == true then -- POTS
CastItem(RegenerationPotion)
end
if myHero.health < myHeroWPercent and Config.items.safetyW and Recall == false then -- SPELL W
CastSpell(_W, myHero.x, myHero.z)
end
if myHero.health < myHeroPercent and Config.items.zhonyas then -- ZHONYAS
CastItem(ZhonyasHourglass)
end
if Config.keys.combo and Config.items.items and ValidTarget(target) then
CastItem(BilgewaterCutlass, target)
CastItem(HextechGunblade, target)
end
end
function IgniteFind()
if myHero:GetSpellData(SUMMONER_1).name:find("summonerdot") then
ignite = SUMMONER_1
else if myHero:GetSpellData(SUMMONER_2).name:find("summonerdot") then
ignite = SUMMONER_2
else
ignite = nil
end
end
end
function DamageCalc()
local IgniteDamage = 50 + (20 * myHero.level)
if ValidTarget(target) then
tdis = GetDistance(target)
end
if myHero:GetSpellData(_Q).level > 0 then
QDamage = 35 + (myHero:GetSpellData(_Q).level * 20 + ap * 0.4 + myHero:GetSpellData(_Q).level * 25 + ap * 0.5 + ad)
else
QDamage = 0
end
if myHero:GetSpellData(_E).level > 0 then
EDamage = 5 + (myHero:GetSpellData(_E).level * 25 + ad * 0.6 + ap * 0.4)
else
EDamage = 0
end
if myHero:GetSpellData(_R).level > 0 then
RDamage = 25 + (myHero:GetSpellData(_R).level * 75 + ap * 0.5)
else
RDamage = 0
end
allDmg = QDamage + EDamage + RDamage
-- print (QDamage+ EDamage + RDamage + IgniteDamage.. " Der aktuelle Schaden von allen Attacken")
-- print(QDamage + EDamage + RDamage + ad .. " Damage with One Autoattack")
-- print(ap .. " Abillity Power")
-- print(QDamage .. " Q Damage with Autoattack")
-- print(EDamage .. " E Damage")
-- print(RDamage .. " R Damage")
end
function OnApplyBuff(source, unit, buff)
if unit and unit.isMe and buff.name == "RegenerationPotion" then
potDelayFunction = false
end
if unit and unit.isMe and buff.name == "recall" then
Recall = true
end
end
function OnRemoveBuff(unit, buff)
if unit and unit.isMe and buff.name == "RegenerationPotion" then
potDelayFunction = true
end
if unit and unit.isMe and buff.name == "recall" then
Recall = false
end
end
function GetMinion()
enemyMinions:update()
for i, minion in pairs(enemyMinions.objects) do
if minion ~= nil and ValidTarget(enemyMinions) and GetDistance(minion) <= RRange then
print(enemyMinions)
return minion
end
end
end
function OnDraw()
if supportedChamp == true then
if Config.draws.drawcircle and Config.draws.drawcircleQ then
DrawCircle(myHero.x, myHero.y, myHero.z, QRange, 0x111111)
end
if Config.draws.drawcircle and Config.draws.drawcircleW then
DrawCircle(myHero.x, myHero.y, myHero.z, WRange, 0x111111)
end
if Config.draws.drawcircle and Config.draws.drawcircleE then
DrawCircle(myHero.x, myHero.y, myHero.z, ERange, 0x111111)
end
if Config.draws.drawcircle and Config.draws.drawcircleR then
DrawCircle(myHero.x, myHero.y, myHero.z, RRange, 0x111111)
end
-- if Config.draws.drawcircle and qkill ~= nil and Config.draws.drawdmg then
-- DrawText("Q Kills Him!", 15, 100, 200, 0xFFFFFF00)
-- end
end
end
function GetSlotItem(id, unit)
unit = unit or myHero
if (not ItemNames[id]) then
return ___GetInventorySlotItem(id, unit)
end
local name = ItemNames[id]
for slot = ITEM_1, ITEM_7 do
local item = unit:GetSpellData(slot).name
if ((#item > 0) and (item:lower() == name:lower())) then
return slot
end
end
end