--╔═══╗╔══╗╔═╗╔═╗╔═══╗╔╗ ╔═══╗ ╔═══╗╔╗ ╔╗╔═══╗╔══╗
--║╔═╗║╚╣─╝║║╚╝║║║╔═╗║║║ ║╔══╝ ║╔═╗║║║ ║║║╔═╗║╚╣─╝
--║╚══╗ ║║ ║╔╗╔╗║║╚═╝║║║ ║╚══╗ ║║ ║║║╚═╝║║╚═╝║ ║║
--╚══╗║ ║║ ║║║║║║║╔══╝║║ ╔╗║╔══╝ ║╚═╝║║╔═╗║║╔╗╔╝ ║║
--║╚═╝║╔╣─╗║║║║║║║║ ║╚═╝║║╚══╗ ║╔═╗║║║ ║║║║║╚╗╔╣─╗
--╚═══╝╚══╝╚╝╚╝╚╝╚╝ ╚═══╝╚═══╝ ╚╝ ╚╝╚╝ ╚╝╚╝╚═╝╚══╝
-- Changelog V1.6
-- +DMG Draw added.
--
-- Changelog V1.5
-- +Now, you can choose the combo mode ( Normal mode or Start with E)
-- Changelog V1.4
-- +GoSPred added again but now it works correctly.
-- +Problem that E does not detect resolved minions.
--
-- Changelog V1.3
-- +removed GosWalk for bugs
--
-- Changelog V1.2
-- +Bugs fixed
-- +GosWalk added to orbwalkers
--
-- Changelog V1.1
-- +The option to choose OpenPredict or GoSPred is added (removed for any errors)
--
-- V1.0 released to GoS.
-- [[ Champion ]]
if GetObjectName(GetMyHero()) ~= "Ahri" then return end
-- [[ Lib & Other ]]
require ("OpenPredict")
require ("DamageLib")
function AhriScriptPrint(msg)
print("Ahri Script: "..msg.."")
end
AhriScriptPrint("Made by EweEwe")
-- [[ AutoUpdate ]]
local version = "1.6"
function AutoUpdate(data)
if tonumber(data) > tonumber(version) then
PrintChat("New version found!" .. data)
PrintChat("Downloading update, please wait...")
DownloadFileAsync("https://raw.githubusercontent.com/EweWexD/Ahri/master/Ahri.lua", SCRIPT_PATH .. "Ahri.lua", function() PrintChat("Update Complete, please 2x F6!") return end)
else
PrintChat("No updates found!")
end
end
GetWebResultAsync("https://raw.githubusercontent.com/EweWexD/Ahri/master/Ahri.version", AutoUpdate)
-- [[ Menu ]]
local AhriMenu = Menu("Ahri", "Simple Ahri")
-- [[ Combo ]]
AhriMenu:SubMenu("Combo", "[Ahri] Combo Settings")
AhriMenu.Combo:DropDown("ComboMode", "Combo Mode", 1, {"Normal Combo", "Start with E"})
AhriMenu.Combo:Boolean("Q", "Use Q", true)
AhriMenu.Combo:Boolean("W", "Use W", true)
AhriMenu.Combo:Boolean("E", "Use E", true)
AhriMenu.Combo:Boolean("R", "Use R", true)
AhriMenu.Combo:Slider("ME", "Minimum Enemies: R", 1, 0, 5, 1)
AhriMenu.Combo:Slider("HP","HP-Manager: R", 40, 0, 100, 5)
-- [[ Harass ]]
AhriMenu:SubMenu("Harass", "[Ahri] Harass Settings")
AhriMenu.Harass:Boolean("Q", "Use Q", true)
AhriMenu.Harass:Boolean("W", "Use W", true)
AhriMenu.Harass:Boolean("E", "Use E", true)
AhriMenu.Harass:Slider("Mana", "Min. Mana", 50, 0, 100, 5)
-- [[ LaneClear ]]
AhriMenu:SubMenu("Farm", "[Ahri] Farm Settings")
AhriMenu.Farm:Boolean("Q", "Use Q", true)
AhriMenu.Farm:Slider("Mana", "Min. Mana", 50, 0, 100, 5)
-- [[ KillSteal ]]
AhriMenu:SubMenu("KS", "[Ahri] Kill Steal Settings")
AhriMenu.KS:Boolean("Q", "Use Q", true)
AhriMenu.KS:Boolean("W", "Use W", true)
-- [[ AutoLevel ]]
AhriMenu:SubMenu("AutoLevel", "[Ahri] AutoLevel")
AhriMenu.AutoLevel:Boolean("DisableAUTOMAX", "Auto max abilities R>Q>E>W", true)
-- [[ Prediction ]]
AhriMenu:SubMenu("Prediction", "[Ahri] Prediction Settings")
AhriMenu.Prediction:DropDown("QPrediction","Prediction of Q", 2, {"OpenPredict", "GoSPrediction"})
AhriMenu.Prediction:DropDown("EPrediction","Prediction of E", 2, {"OpenPredict", "GoSPrediction"})
-- [[ Draw ]]
AhriMenu:SubMenu("Draw", "[Ahri] Drawing Settings")
AhriMenu.Draw:Boolean("Q", "Draw Q", false)
AhriMenu.Draw:Boolean("W", "Draw W", false)
AhriMenu.Draw:Boolean("E", "Draw E", false)
AhriMenu.Draw:Boolean("R", "Draw R", false)
AhriMenu.Draw:Boolean("Disable", "Disable all drawingw", false)
-- [[ DrawDMG ]]
AhriMenu:SubMenu("DrawDMG", "[Ahri] DrawDMG")
AhriMenu.DrawDMG:Boolean("DrawD", "Draw Damage", true)
AhriMenu.DrawDMG:Boolean("Q", "Draw Q dmg", true)
AhriMenu.DrawDMG:Boolean("W", "Draw W dmg", true)
AhriMenu.DrawDMG:Boolean("E", "Draw E dmg", true)
-- [[ Items ]]
AhriMenu:SubMenu("Items", "[Ahri] Items Use")
AhriMenu.Items:Boolean("HG", "Use Hextech Gunblade", true)
AhriMenu.Items:Boolean("BC", "Use Bilfewater Cutlass", true)
-- [[ Create by me :3 ]]
AhriMenu:Info("Juan", "--------------")
AhriMenu:Info("Created", "Made by EweEwe")
-- [[ AutoLevel ]]
local levelsc = {_Q, _E, _W, _Q, _Q, _R, _Q, _E, _Q, _E, _R, _E, _E, _W, _W, _R, _W, _W }
-- [[ Spell details ]]
local Spells = {
Q = {range = 880, delay = 0.25, speed = 1700, width = 100 },
W = {range = 700},
E = {range = 975, delay = 0.25, speed = 1600, width = 60, collision = true, col = {"minion", "yasuowall"}},
R = {range = 450},
}
-- [[ Orbwalker ]]
function Mode()
if _G.IOW_Loaded and IOW:Mode() then
return IOW:Mode()
elseif _G.PW_Loaded and PW:Mode() then
return PW:Mode()
elseif _G.DAC_Loaded and DAC:Mode() then
return DAC:Mode()
elseif _G.AutoCarry_Loaded and DACR:Mode() then
return DACR:Mode()
elseif _G.SLW_Loaded and SLW:Mode() then
return SLW:Mode()
elseif GoSWalkLoaded and GoSWalk.CurrentMode then
return ({"Combo", "Harass", "LaneClear", "LastHit"})[GoSWalk.CurrentMode+1]
end
end
-- [[ Tick ]]
OnTick(function()
KS()
AutoLevel()
target = GetCurrentTarget()
dmgCalc()
Combo()
Harass()
Farm()
end)
-- [[ AutoLevel ]]
function AutoLevel()
if AhriMenu.AutoLevel.DisableAUTOMAX:Value() then return end
if GetLevelPoints(myHero) > 0 then
DelayAction(function() LevelSpell(levelsc[GetLevel(myHero) + 1 - GetLevelPoints(myHero)]) end, 0.5)
end
end
-- [[ DMGCalc ]]
function dmgCalc(spell)
local dmg = {
["Q"] = 40 + 25*GetCastLevel(myHero,0) + GetBonusAP(myHero)*0.35,
["W"] = 40 + 25*GetCastLevel(myHero,0) + GetBonusAP(myHero)*0.12,
["E"] = 60 + 35*GetCastLevel(myHero,0) + GetBonusAP(myHero)*0.5,
}
return dmg[spell]
end
-- [[ DrawDamage ]]
OnDraw(function(myHero)
for _, unit in pairs(GetEnemyHeroes()) do
if ValidTarget(unit, 2000) and AhriMenu.DrawDMG.DrawD:Value() then
local DmgDraw=0
if Ready(_Q) and AhriMenu.DrawDMG.Q:Value() then
DmgDraw = dmgCalc("Q")
end
if Ready(_W) and AhriMenu.DrawDMG.W:Value() then
DmgDraw = dmgCalc("W")
end
if Ready(_E) and AhriMenu.DrawDMG.E:Value() then
DmgDraw = dmgCalc("E")
end
DmgDraw = CalcDamage(myHero, unit, 0, DmgDraw)
if DmgDraw > GetCurrentHP(unit) then
DmgDraw = GetCurrentHP(unit)
end
DrawDmgOverHpBar(unit,GetCurrentHP(unit),0,DmgDraw,0xFFC80000)
end
end
end)
-- [[ Ahri Q ]]
function AhriQ()
if AhriMenu.Prediction.QPrediction:Value() == 1 then
local QPred = GetLinearAOEPrediction(target, Spells.Q)
if QPred.hitChance > 0.9 then
CastSkillShot(_Q, QPred.castPos)
end
elseif AhriMenu.Prediction.QPrediction:Value() == 2 then
local QPred = GetPredictionForPlayer(GetOrigin(myHero), target,GetMoveSpeed(target), Spells.Q.speed, Spells.Q.delay*1000, Spells.Q.range, Spells.Q.width,false,true)
if QPred.HitChance == 1 then
CastSkillShot(_Q, QPred.PredPos)
end
end
end
-- [[ Ahri W ]]
function AhriW()
CastTargetSpell(target, _W)
end
-- [[ Ahri E ]]
function AhriE()
if AhriMenu.Prediction.EPrediction:Value() == 1 then
local EPred = GetLinearAOEPrediction(target, Spells.E)
if EPred.hitChance > 0.9 then
CastSkillShot(_E, EPred.castPos)
end
elseif AhriMenu.Prediction.EPrediction:Value() == 2 then
local EPred = GetPredictionForPlayer(GetOrigin(myHero), target,GetMoveSpeed(target), Spells.E.speed, Spells.E.delay*100, Spells.E.range, Spells.E.width,true,false)
if EPred.HitChance == 1 then
CastSkillShot(_E, EPred.PredPos)
end
end
end
-- [[ Combo ]]
function Combo()
if Mode() == "Combo" then
if AhriMenu.Combo.ComboMode:Value() == 1 then
-- [[ Use Q ]]
if AhriMenu.Combo.Q:Value() and Ready(_Q) and ValidTarget(target, Spells.Q.range) then
AhriQ()
end
-- [[ Use E ]]
if AhriMenu.Combo.E:Value() and Ready(_E) and ValidTarget(target, Spells.E.range) then
AhriE()
end
-- [[ Use W ]]
if AhriMenu.Combo.W:Value() and Ready(_W) and ValidTarget(target, Spells.W.range) then
AhriW()
end
-- [[ Use R ]]
if AhriMenu.Combo.R:Value() then
if CanUseSpell(myHero,_R) == Ready then
if ValidTarget(target, Spells.R.range+GetRange(myHero)) then
if 100*GetCurrentHp(target)/GetMaxHP(target) < AhriMenu.Combo.HP:Value() then
if EnemiesAraund(myHEro, Spells.R.range+GetRange(myHero)) >= AhriMenu.Combo.ME:Value() then
CastSkillShot(_R, GetMousePos())
end
end
end
end
end
elseif AhriMenu.Combo.ComboMode:Value() == 2 then
-- [[ Use E ]]
if AhriMenu.Combo.E:Value() and Ready(_E) and ValidTarget(target, Spells.E.range) then
AhriE()
end
-- [[ Use Q ]]
if AhriMenu.Combo.Q:Value() and Ready(_Q) and ValidTarget(target, Spells.Q.range) then
AhriQ()
end
-- [[ Use W ]]
if AhriMenu.Combo.W:Value() and Ready(_W) and ValidTarget(target, Spells.W.range) then
AhriW()
end
-- [[ Use R ]]
if AhriMenu.Combo.R:Value() then
if CanUseSpell(myHero,_R) == Ready then
if ValidTarget(target, Spells.R.range+GetRange(myHero)) then
if 100*GetCurrentHp(target)/GetMaxHP(target) < AhriMenu.Combo.HP:Value() then
if EnemiesAraund(myHEro, Spells.R.range+GetRange(myHero)) >= AhriMenu.Combo.ME:Value() then
CastSkillShot(_R, GetMousePos())
end
end
end
end
end
end
end
end
-- [[ Items Use ]]
function Items()
if Mode() == "Combo" then
if EzrealMenu.Items.HG:Value() then
if GetItemSlot(myHero, 3146) >= 1 and ValidTarget(target, 700) then
if CanUseSpell(myHero, GetItemSlot(myHero, 3146)) then
CastTargetSpell(target, GetItemSlot(myHero, 3146))
end
end
end
if EzrealMenu.Items.BC:Value() then
if GetItemSlot(myHero, 3144) >= 1 and ValidTarget(target, 550) then
if CanUseSpell(myHero, GetItemSlot(myHero, 3144)) then
CastTargetSpell(target, GetItemSlot(myHero, 3144))
end
end
end
end
end
-- [[ Harass ]]
function Harass()
if Mode() == "Harass" then
if (myHero.mana/myHero.maxMana >= AhriMenu.Harass.Mana:Value() /100) then
-- [[ Use Q ]]
if AhriMenu.Harass.Q:Value() and Ready(_Q) and ValidTarget(target, Spells.Q.range) then
AhriQ()
end
-- [[ Use W ]]
if AhriMenu.Harass.W:Value() and Ready(_W) and ValidTarget(target, Spells.W.range) then
AhriW()
end
-- [[ Use E ]]
if AhriMenu.Harass.E:Value() and Ready(_E) and ValidTarget(target, Spells.E.range) then
AhriE()
end
end
end
end
-- [[ LaneClear ]]
function Farm()
if Mode() == "LaneClear" then
if AhriMenu.Farm.Q:Value() then
for _, minion in pairs(minionManager.objects) do
if GetTeam(minion) == MINION_ENEMY then
if 100*GetCurrentMana(myHero)/GetMaxMana(myHero) > AhriMenu.Farm.Mana:Value() then
if ValidTarget(minion, Spells.Q.range) then
if CanUseSpell(myHero,_Q) == READY then
CastSkillShot(_Q, GetOrigin(minion))
end
end
end
end
end
end
end
end
-- [[ KillSteals ]]
function KS()
for _, enemy in pairs(GetEnemyHeroes()) do
-- [[ Use Q ]]
if AhriMenu.KS.Q:Value() and Ready(_Q) and ValidTarget(enemy, Spells.Q.range) then
if GetCurrentHP(enemy) < getdmg("Q", enemy, myHero) then
AhriQ()
end
end
-- [[ Use W ]]
if AhriMenu.KS.Q:Value() and Ready(_W) and ValidTarget(enemy, Spells.W.range) then
if GetCurrentHP(enemy) < getdmg("W", enemy, myHero) then
AhriW()
end
end
end
end
-- [[ Drawings ]]
OnDraw(function(myHero)
if myHero.dead or AhriMenu.Draw.Disable:Value() then return end
local pos = GetOrigin(myHero)
-- [[ Draw Q ]]
if AhriMenu.Draw.Q:Value() then DrawCircle(pos, Spells.Q.range, 1, 25, 0xC822D04A) end
-- [[ Draw W ]]
if AhriMenu.Draw.W:Value() then DrawCircle(pos, Spells.W.range, 1, 25, 0xFF007FAD) end
-- [[ Draw E ]]
if AhriMenu.Draw.E:Value() then DrawCircle(pos, Spells.E.range, 1, 25, 0xC8DE38C0) end
-- [[ Draw R ]]
if AhriMenu.Draw.R:Value() then DrawCircle(pos, Spells.R.range, 1, 25, 0xFF91C9DD) end
end)