-- Change autoUpdate to false if you wish to not receive auto updates. -- Change silentUpdate to true if you wish not to receive any message regarding updates local autoUpdate = true local silentUpdate = false local version = 1.05 --[[ Ahri - by Ranked Fire Features: - Porno ]] if myHero.charName ~= "Ahri" then return end local scriptName = player.charName --[[ .____ ._____. ________ .__ .___ | | |__\_ |__ \______ \ ______ _ ______ | | _________ __| _/___________ | | | || __ \ | | \ / _ \ \/ \/ / \| | / _ \__ \ / __ |/ __ \_ __ \ | |___| || \_\ \ | ` ( <_> ) / | \ |_( <_> ) __ \_/ /_/ \ ___/| | \/ |_______ \__||___ / /_______ /\____/ \/\_/|___| /____/\____(____ /\____ |\___ >__| \/ \/ \/ \/ \/ \/ \/ ]] -- SourceLib auto download local sourceLibFound = true if FileExist(LIB_PATH .. "SourceLib.lua") then require "SourceLib" else sourceLibFound = false DownloadFile("https://bitbucket.org/TheRealSource/public/raw/master/common/SourceLib.lua", LIB_PATH .. "SourceLib.lua", function() print("" .. scriptName .. ": SourceLib downloaded! Please reload!") end) end -- Return if SourceLib has to be downloaded if not sourceLibFound then return end -- Updater if autoUpdate then LazyUpdater(scriptName, version, "fire-bol.de", "/scripts/Ahri.lua", SCRIPT_PATH .. GetCurrentEnv().FILE_NAME):SetSilent(silentUpdate):CheckUpdate() end -- Require other libraries local libDownloader = Require(scriptName) libDownloader:Add("VPrediction", "https://bitbucket.org/honda7/bol/raw/master/Common/VPrediction.lua") libDownloader:Add("SOW", "https://bitbucket.org/honda7/bol/raw/master/Common/SOW.lua") libDownloader:Check() -- Return if libraries need to be downloaded if libDownloader.downloadNeeded then return end --[[ ________.__ ___. .__ / _____/| | ____\_ |__ _____ | | ______ / \ ___| | / _ \| __ \\__ \ | | / ___/ \ \_\ \ |_( <_> ) \_\ \/ __ \| |__\___ \ \______ /____/\____/|___ (____ /____/____ > \/ \/ \/ \/ ]] local VP = nil local OW = nil local STS = nil local DLib = nil local drawManager = nil local menu = nil local spells = {} local circles = {} local instantE = nil local FullCombo = {_DFG, _AA, _E, _W, _Q, _IGNITE} local SmartCombo = {_DFG, _AA, _Q, _W, _IGNITE} local SmartCombo2 = {_DFG, _AA, _E, _Q, _IGNITE} local SmartCombo3 = {_DFG, _AA, _E, _W, _IGNITE} --[[ _________ __ __ \_ ___ \ ____ ____ _______/ |______ _____/ |_ ______ / \ \/ / _ \ / \ / ___/\ __\__ \ / \ __\/ ___/ \ \___( <_> ) | \\___ \ | | / __ \| | \ | \___ \ \______ /\____/|___| /____ > |__| (____ /___| /__| /____ > \/ \/ \/ \/ \/ \/ ]] local Q, W, E, R = _Q, _W, _E, _R local CHARM_NAME = "AhriSeduce" local MAX_RANGE = 975 local SPELL_DATA = { [_Q] = { skillshotType = SKILLSHOT_LINEAR, range = 880, delay = 0.25, width = 100, speed = 1100, collision = false }, [_W] = { skillshotType = nil, range = 800 }, [_E] = { skillshotType = SKILLSHOT_LINEAR, range = 975, delay = 0.25, width = 60, speed = 1200, collision = true }, [_R] = { skillshotType = nil, range = 450 } } --[[ _________ .___ \_ ___ \ ____ __| _/____ / \ \/ / _ \ / __ |/ __ \ \ \___( <_> ) /_/ \ ___/ \______ /\____/\____ |\___ > \/ \/ \/ ]] function OnLoad() -- Initialize classes VP = VPrediction() OW = SOW(VP) STS = SimpleTS(STS_PRIORITY_LESS_CAST_MAGIC) DLib = DamageLib() drawManager = DrawManager() -- Create spells and circles for spell, data in pairs(SPELL_DATA) do -- Spells local rawSpell = Spell(spell, data.range) -- Check if spell is a skillshot if data.skillshotType then rawSpell:SetSkillshot(VP, data.skillshotType, data.delay, data.width, data.speed, data.collision) end table.insert(spells, spell, rawSpell) -- Circles local rawCircle = drawManager:CreateCircle(player, data.range) -- Link the circle with the spell rawCircle:LinkWithSpell(rawSpell) rawCircle:SetDrawCondition(function() return rawSpell:GetLevel() > 0 end) table.insert(circles, spell, rawCircle) end -- Register damage sources DLib:RegisterDamageSource(Q, _MAGIC, 40, 25, _MAGIC, _AP, 0.32, function() return spells[Q]:IsReady() end) DLib:RegisterDamageSource(W, _MAGIC, 40, 25, _MAGIC, _AP, 0.40, function() return spells[W]:IsReady() end) DLib:RegisterDamageSource(E, _MAGIC, 60, 90, _MAGIC, _AP, 0.35, function() return spells[E]:IsReady() end) -- Setup other stuff setupMenu() -- Create other spells instantE = Spell(E, SPELL_DATA[E].range):SetHitChance(3) instantE:AddAutomation("instantCombo", function() return ValidTarget(STS:GetTarget(instantE.range)), STS:GetTarget(instantE.range) end) -- Register callbacks AddTickCallback(combo) AddTickCallback(harass) end function setupMenu() menu = scriptConfig("Fire Series: " .. player.charName, "Fire" .. player.charName) menu:addSubMenu("Orbwalking", "orbwalking") OW:LoadToMenu(menu.orbwalking) -- Target Selector menu:addSubMenu("Target Selector", "ts") STS:AddToMenu(menu.ts) -- Combo menu:addSubMenu("Combo", "combo") menu.combo:addParam("active", "Combo active" , SCRIPT_PARAM_ONKEYDOWN, false, 32) menu.combo:addParam("sep", "", SCRIPT_PARAM_INFO, "") menu.combo:addParam("useQ", "Use Q", SCRIPT_PARAM_ONOFF, true) menu.combo:addParam("useW", "Use W", SCRIPT_PARAM_ONOFF, true) menu.combo:addParam("useE", "Use E", SCRIPT_PARAM_ONOFF, true) -- Harass menu:addSubMenu("Harass", "harass") menu.harass:addParam("active", "Harass active" , SCRIPT_PARAM_ONKEYDOWN, false, string.byte("C")) menu.harass:addParam("sep", "", SCRIPT_PARAM_INFO, "") menu.harass:addParam("useQ", "Use Q", SCRIPT_PARAM_ONOFF, true) menu.harass:addParam("useW", "Use W", SCRIPT_PARAM_ONOFF, true) menu.harass:addParam("useE", "Use E", SCRIPT_PARAM_ONOFF, true) -- Extra menu:addSubMenu("Extra", "extra") menu.extra:addParam("charm", "Fast charm combo", SCRIPT_PARAM_ONOFF, true) menu.extra:addParam("packet", "Cast spells using packets", SCRIPT_PARAM_ONOFF, false) menu.extra:addParam("sep", "", SCRIPT_PARAM_INFO, "") menu.extra:addParam("chanceQ", "Hitchance for Q", SCRIPT_PARAM_SLICE, 2, 1, 5, 0) menu.extra:addParam("chanceE", "Hitchance for E", SCRIPT_PARAM_SLICE, 2, 1, 5, 0) -- Kill Steal menu:addSubMenu("Kill Steal", "killsteal") menu.killsteal:addParam("useQ", "Use Q", SCRIPT_PARAM_ONOFF, true) menu.killsteal:addParam("useW", "Use W", SCRIPT_PARAM_ONOFF, true) menu.killsteal:addParam("useE", "Use E", SCRIPT_PARAM_ONOFF, true) menu.killsteal:addParam("ignite", "Use Ignite", SCRIPT_PARAM_ONOFF, true) -- Drawings menu:addSubMenu("Drawings", "drawing") for spell, circle in pairs(circles) do circle:AddToMenu(menu.drawing, "Draw " .. SpellToString(spell) .. " range", true, true, true) end DLib:AddToMenu(menu.drawing, FullCombo) -- Permashow menu.combo:permaShow("active") menu.harass:permaShow("active") end function OnTick() spells[Q]:SetHitChance(menu.extra.chanceQ) spells[E]:SetHitChance(menu.extra.chanceE) spells[Q].packetCast = menu.extra.packet spells[E].packetCast = menu.extra.packet OW:EnableAttacks() end --[[ _________ ___. \_ ___ \ ____ _____\_ |__ ____ / \ \/ / _ \ / \| __ \ / _ \ \ \___( <_> ) Y Y \ \_\ ( <_> ) \______ /\____/|__|_| /___ /\____/ \/ \/ \/ ]] function combo() if menu.combo.active then OW:DisableAttacks() local targets = { [Q] = STS:GetTarget(spells[Q].range), [W] = STS:GetTarget(spells[W].range), [E] = STS:GetTarget(spells[E].range) } -- Q if targets[Q] and menu.combo.useQ and spells[Q]:IsReady() and (isCharmed(targets[Q]) or DLib:IsKillable(targets[Q], { Q })) then spells[Q]:Cast(targets[Q]) end -- W if targets[W] and menu.combo.useW and spells[W]:IsReady() and (isCharmed(targets[W]) or DLib:IsKillable(targets[W], { W })) then spells[W]:Cast(targets[W]) end -- E if targets[E] and menu.combo.useE and spells[E]:IsReady() and DLib:IsKillable(targets[E], { E }) then spells[Q]:Cast(targets[Q]) end -- Combo if menu.combo.useE and menu.combo.useQ and spells[E]:IsReady() and spells[Q]:IsReady() then spells[E]:Cast(targets[E]) spells[Q]:Cast(targets[E]) end end end --[[ ___ ___ / | \_____ ____________ ______ ______ / ~ \__ \\_ __ \__ \ / ___// ___/ \ Y // __ \| | \// __ \_\___ \ \___ \ \___|_ /(____ /__| (____ /____ >____ > \/ \/ \/ \/ \/ ]] function harass() -- end function isCharmed(target) return HasBuff(target, CHARM_NAME) end