class "Riven" class "Download" function Riven:__init() self:Variables() self:Menu() self:Callbacks() self:AutoUpdater() self:LoadTableOrbs() self:LoadOrb() end function Riven:Variables() self.Version = 3.7 self.QTarget = nil self.QCount = 0 self.LastQ = 0 self.SelectedTarget = nil self.RTime = 0 self.Ulted = false self.QAA = false self.WCasted = false if myHero:GetSpellData(SUMMONER_1).name:find("SummonerFlash") then Flash = SUMMONER_1 elseif myHero:GetSpellData(SUMMONER_2).name:find("SummonerFlash") then Flash = SUMMONER_2 end if myHero:GetSpellData(SUMMONER_1).name:find("SummonerDot") then Ignite = SUMMONER_1 elseif myHero:GetSpellData(SUMMONER_2).name:find("SummonerDot") then Ignite = SUMMONER_2 end ts = TargetSelector(TARGET_LESS_CAST_PRIORITY, 1000, DAMAGE_PHYSICAL) enemyMinions = minionManager(MINION_ENEMY, 270, myHero, MINION_SORT_HEALTH_ASC) jungleMinions = minionManager(MINION_JUNGLE, 270, myHero, MINION_SORT_MAXHEALTH_DEC) end function Riven:Menu() Menu = scriptConfig("Shattered Blade", "ShatteredBlade") Menu:addSubMenu("Combo", "Combo") Menu.Combo:addParam("Mode", "Combo Mode", SCRIPT_PARAM_LIST, 1, {"BoxBox Mode"}) Menu.Combo:addParam("Burst", "Burst Mode", SCRIPT_PARAM_ONKEYTOGGLE, false, string.byte("T")) Menu.Combo:permaShow("Burst") Menu.Combo:addParam("useFlash", "Use Flash in Burst Mode", SCRIPT_PARAM_ONOFF, true) Menu.Combo:permaShow("useFlash") Menu.Combo:addParam("useFlashSlice", "Use Flash Above Range (BUGGY)", SCRIPT_PARAM_SLICE, 300, 0, 425) Menu.Combo:addParam("blank", "Let E and R Range the Same for R Animation Cancel", SCRIPT_PARAM_INFO, " ") Menu.Combo:addParam("useERange", "Use E Range Under", SCRIPT_PARAM_SLICE, 500, 175, 1000) Menu.Combo:addParam("useRRange", "Use R Range Under", SCRIPT_PARAM_SLICE, 500, 175, 1000) Menu:addSubMenu("LaneClear/JungleClear", "LaneJung") Menu.LaneJung:addParam("Q", "Use Q", SCRIPT_PARAM_ONOFF, true) Menu.LaneJung:addParam("W", "Use W", SCRIPT_PARAM_ONOFF, true) Menu.LaneJung:addParam("E", "Use E", SCRIPT_PARAM_ONOFF, true) Menu:addSubMenu("Auto W", "AutoW") Menu.AutoW:addParam("W", "Use Auto W",SCRIPT_PARAM_ONOFF, true) Menu.AutoW:addParam("S", "x Enemies for Auto W", SCRIPT_PARAM_SLICE, 2, 0, 5, 0) Menu:addSubMenu("Items Settings", "Items") Menu.Items:addParam("Use", "Use Items", SCRIPT_PARAM_ONOFF, true) Menu.Items:addParam("UseBRK", "Use BRK", SCRIPT_PARAM_ONOFF, true) Menu.Items:addParam("UseHydra", "Use Hydra", SCRIPT_PARAM_ONOFF, true) Menu.Items:addParam("UseYoumu", "Use Youmus", SCRIPT_PARAM_ONOFF, true) Menu.Items:addParam("UseQSS", "Use QSS", SCRIPT_PARAM_ONOFF, true) Menu.Items:addParam("UseZhonya", "Use Zhonyas", SCRIPT_PARAM_ONOFF, true) Menu.Items:addParam("ZhonyaAmount", "Zhonya %", SCRIPT_PARAM_SLICE, 15, 0, 100, 0) Menu:addSubMenu("Draws Settings", "Draws") Menu.Draws:addParam("CDTracker", "Use CD Tracker", SCRIPT_PARAM_ONOFF, true) Menu:addSubMenu("Emote Cancel", "EmoteCancel") Menu.EmoteCancel:addParam("useEmoteC", "Use Emote Cancel", SCRIPT_PARAM_ONOFF, true) Menu.EmoteCancel:addParam("emoteC", "Choose Emote", SCRIPT_PARAM_LIST, 1, {"Dance", "Taunt", "Laugh", "Joke"}) Menu:addSubMenu("Auto Leveler", "Leveler") if VIP_USER then Menu.Leveler:addParam("Enable", "Enable Auto Leveler", SCRIPT_PARAM_ONOFF, false) Menu.Leveler:addParam("Mode", "Mode", SCRIPT_PARAM_LIST, 2, {"Q>W>E", "Q>E>W", "E>Q>W", "E>W>Q"}) Menu.Leveler.Enable = false DelayToLevel = 0 SequenceLevel = { [1] = {1,2,3,1,1,4,2,1,2,3,4,1,2,3,2,4,3,3}, [2] = {1,3,2,1,1,4,3,1,3,2,4,1,3,2,3,4,2,2}, [3] = {3,1,2,3,3,4,1,3,1,2,4,3,1,2,1,4,2,2}, [4] = {3,2,1,3,3,4,2,3,2,1,4,3,2,1,2,4,1,1}, } AddTickCallback(function() if os.clock()-DelayToLevel >= 3 then DelayToLevel = os.clock() if Menu.Leveler.Enable then autoLevelSetSequence(SequenceLevel[Menu.Leveler.Mode]) else autoLevelSetSequence(nil) end end end) else Menu.Leveler:addParam("info", "This is only for VIP Users", SCRIPT_PARAM_INFO, "") end Menu:addSubMenu("Skin Changer", "Skin") if VIP_USER then Menu.Skin:addParam("ChangeSkin", "Enable Skin Changer", SCRIPT_PARAM_ONOFF, false) Menu.Skin:setCallback('ChangeSkin', function(Change) if Change then SetSkin(myHero, Menu.Skin.SkinID-1) else SetSkin(myHero, -1) end end) Menu.Skin:addParam('SkinID', 'Skins', SCRIPT_PARAM_LIST, 1, {"Classic", "Redeemed", "Crimson Elite", "Battle Bunny", "Championship", "Dragonblade", "Arcade"}) Menu.Skin.SkinID = 1 Menu.Skin:setCallback('SkinID', function(Change) if Menu.Skin.ChangeSkin then SetSkin(myHero, Menu.Skin.SkinID-1) end end) if Menu.Skin.ChangeSkin then SetSkin(myHero, Menu.Skin.SkinID-1) end else Menu.Skin:addParam("info", "This is only for VIP Users", SCRIPT_PARAM_INFO, "") end if Ignite then Menu:addParam("AutoIgnite", "Use Auto Ignite in killable enemies", SCRIPT_PARAM_ONOFF, true) end Menu:addParam("Region", "Your Region:", SCRIPT_PARAM_INFO, GetGameRegion()) end function Riven:Callbacks() AddTickCallback(function() if myHero.dead then return end Target = self:GetCustomTarget() self:ComboManager(Target) self:LaneClear() self:AutoW() self:Flee() self:Checks() self:AutoIgnite() if myHero:GetSpellData(_Q).currentCd > 0.5 then self.QAA = false end if myHero:GetSpellData(_W).currentCd > 1 then self.WCasted = true end if self.Wready then self.WCasted = false end end) AddAnimationCallback(function(unit, animation) if unit and animation and unit.isMe then if animation == "Spell1a" or animation == "Spell1b" or animation == "Spell1c" then if animation == "Spell1a" or animation == "Spell1b" then DelayAction(function() if ValidTarget(self.QTarget) and GetDistance(self.QTarget) < 270 then if Menu.EmoteCancel.useEmoteC then DoEmote(Menu.EmoteCancel.emoteC-1) end self:ResetAAs() end end, 0.3-GetLatency()/1000) elseif animation == "Spell1c" then DelayAction(function() if ValidTarget(self.QTarget) and GetDistance(self.QTarget) < 270 then if Menu.EmoteCancel.useEmoteC then DoEmote(Menu.EmoteCancel.emoteC-1) end self:ResetAAs() end end, 0.4-GetLatency()/1000) end end end end) AddMsgCallback(function(msg, key) if msg == WM_LBUTTONDOWN and not myHero.dead then for i, enemy in ipairs(GetEnemyHeroes()) do if GetDistance(enemy, mousePos) <= 115 and ValidTarget(enemy) and enemy.type == "AIHeroClient" then if self.SelectedTarget ~= enemy then self.SelectedTarget = enemy SendMsg("Selected Target: "..enemy.charName) else self.SelectedTarget = nil SendMsg("Unselected Target: "..enemy.charName) end end end end end) AddDrawCallback(function() if Menu.Draws.CDTracker then self:DrawCD() end if myHero.dead then return end end) AddProcessAttackCallback(function(unit, spell) self.AADone = false if unit.isMe and spell.name:lower():find("attack") then if self.QAA == true and self:Keys() == "Combo" or self:Keys() == "Laneclear" or self:Keys() == "Harass" then CastSpell(_Q, myHero.spell.target.x, myHero.spell.target.z) self:ResetAAs() end self.AADone = true end end) AddApplyBuffCallback(function(unit, source, buff) if unit and buff and unit.isMe and buff.name == "RivenFengShuiEngine" then self.Ulted = true self.RTime = os.clock() end end) AddRemoveBuffCallback(function(unit, buff) if unit and buff and unit.isMe and buff.name == "rivenwindslashready" then self.Ulted = false self.RTime = 0 end if unit and buff and unit.isMe and buff.name == "riventricleavesoundthree" then --self.QAA = false end end) AddUnloadCallback(function() if VIP_USER then SetSkin(myHero, -1) end end) end function Riven:AutoIgnite() if Ignite and Menu.AutoIgnite then for i, enemy in ipairs(GetEnemyHeroes()) do if enemy.health <= 50 + (20 * myHero.level) and myHero:CanUseSpell(Ignite) == READY and GetDistance(enemy) < 650 then CastSpell(Ignite, enemy) end end end end function Riven:IsAfterAA() return os.clock() * 1000 + (GetLatency() / 2) < self.AfterAttackTime end function Riven:GetHPBarPos(enemy) enemy.barData = {PercentageOffset = {x = -0.05, y = 0}}--GetEnemyBarData() local barPos = GetUnitHPBarPos(enemy) local barPosOffset = GetUnitHPBarOffset(enemy) local barOffset = { x = enemy.barData.PercentageOffset.x, y = enemy.barData.PercentageOffset.y } local barPosPercentageOffset = { x = enemy.barData.PercentageOffset.x, y = enemy.barData.PercentageOffset.y } local BarPosOffsetX = 171 local BarPosOffsetY = 46 local CorrectionY = 39 local StartHpPos = 31 barPos.x = math.floor(barPos.x + (barPosOffset.x - 0.5 + barPosPercentageOffset.x) * BarPosOffsetX + StartHpPos) barPos.y = math.floor(barPos.y + (barPosOffset.y - 0.5 + barPosPercentageOffset.y) * BarPosOffsetY + CorrectionY) local StartPos = Vector(barPos.x , barPos.y, 0) local EndPos = Vector(barPos.x + 108 , barPos.y , 0) return Vector(StartPos.x, StartPos.y, 0), Vector(EndPos.x, EndPos.y, 0) end function Riven:DrawCD() for i = 1, heroManager.iCount, 1 do local champ = heroManager:getHero(i) if champ ~= nil and champ ~= myHero and champ.visible and champ.dead == false then local barPos = self:GetHPBarPos(champ) if OnScreen(barPos.x, barPos.y) then local cd = {} cd[0] = math.ceil(champ:GetSpellData(SPELL_1).currentCd) cd[1] = math.ceil(champ:GetSpellData(SPELL_2).currentCd) cd[2] = math.ceil(champ:GetSpellData(SPELL_3).currentCd) cd[3] = math.ceil(champ:GetSpellData(SPELL_4).currentCd) local spellColor = {} spellColor[0] = 0xBBFFD700; spellColor[1] = 0xBBFFD700; spellColor[2] = 0xBBFFD700; spellColor[3] = 0xBBFFD700; if cd[0] == nil or cd[0] == 0 then cd[0] = "Q" spellColor[0] = 0xBBFFFFFF end if cd[1] == nil or cd[1] == 0 then cd[1] = "W" spellColor[1] = 0xBBFFFFFF end if cd[2] == nil or cd[2] == 0 then cd[2] = "E" spellColor[2] = 0xBBFFFFFF end if cd[3] == nil or cd[3] == 0 then cd[3] = "R" spellColor[3] = 0xBBFFFFFF end if champ:GetSpellData(SPELL_1).level == 0 then spellColor[0] = 0xBBFF0000 end if champ:GetSpellData(SPELL_2).level == 0 then spellColor[1] = 0xBBFF0000 end if champ:GetSpellData(SPELL_3).level == 0 then spellColor[2] = 0xBBFF0000 end if champ:GetSpellData(SPELL_4).level == 0 then spellColor[3] = 0xBBFF0000 end DrawRectangle(barPos.x-6, barPos.y-40, 80, 15, 0xBB202020) DrawText("[" .. cd[0] .. "]" ,12, barPos.x-5+2, barPos.y-40, spellColor[0]) DrawText("[" .. cd[1] .. "]", 12, barPos.x+15+2, barPos.y-40, spellColor[1]) DrawText("[" .. cd[2] .. "]", 12, barPos.x+35+2, barPos.y-40, spellColor[2]) DrawText("[" .. cd[3] .. "]", 12, barPos.x+54+2, barPos.y-40, spellColor[3]) end end end end function Riven:ResetAAs() if LoadedOrb == "Sac" and TIMETOSACLOAD then _G.AutoCarry.Orbwalker:ResetAttackTimer() --_G.AutoCarry.Orbwalker:IsAfterAttack() elseif LoadedOrb == "Mma" then _G.MMA_ResetAutoAttack() elseif LoadedOrb == "Pewalk" then elseif LoadedOrb == "Now" then _G.NebelwolfisOrbWalker:ResetAA() elseif LoadedOrb == "Big" then elseif LoadedOrb == "Sow" then _G.SOWi:resetAA() elseif LoadedOrb == "SxOrbWalk" then _G.SxOrb:ResetAA() end end function Riven:GetCustomTarget() ts:update() if self.SelectedTarget == nil then return ts.target elseif self.SelectedTarget ~= nil and ValidTarget(self.SelectedTarget, 750) then return self.SelectedTarget else return ts.target end end function Riven:AutoUpdater() local host = "www.scarjit.de" local file = "/HiranN/BoL/Scripts/Riven.lua" local file2 = "/HiranN/BoL/Versions/" local name = GetCurrentEnv().FILE_NAME local path = SCRIPT_PATH DelayAction(function() local ServerVersionDATA = GetWebResult(host, file2.."Riven.version") local ServerVersion = tonumber(ServerVersionDATA) if ServerVersion then if ServerVersion > tonumber(self.Version) then DL = Download() SendMsg("Updating to version: "..ServerVersion) DL:newDL(host, file, name, path, function() SendMsg("Updated to version: "..ServerVersion..", press 2x F9") end) else SendMsg("You have the latest version: "..self.Version) end else SendMsg("Can't connect to Updater Site") end end, 0.85) end function Riven:ComboManager(target) if Menu.Combo.Burst then self:Combo2(target) elseif Menu.Combo.Mode == 1 then self:Combo1(target) end if ValidTarget(target) then CastItems() end end function Riven:AutoW() if Menu.AutoW.S ~= 0 then if Menu.AutoW.W and CountEnemyHeroInRange(260) >= Menu.AutoW.S then CastSpell(_W) end end end DelayFleeM = 0 function Riven:Flee() if Menu.Keys.Flee then CastSpell(_Q, mousePos.x, mousePos.z) CastSpell(_E, mousePos.x, mousePos.z) if os.clock()-DelayFleeM > 0.15 then DelayFleeM = os.clock() myHero:MoveTo(mousePos.x, mousePos.z) end end end function Riven:Checks() self.Qready = (myHero:CanUseSpell(_Q) == READY and true or false) self.Wready = (myHero:CanUseSpell(_W) == READY and true or false) self.Eready = (myHero:CanUseSpell(_E) == READY and true or false) self.Rready = (myHero:CanUseSpell(_R) == READY and true or false) if Flash then self.Flash = (myHero:CanUseSpell(Flash) == READY and true or false) end end function Riven:Combo1(target) if ValidTarget(target) and self:Keys() == "Combo" then if self.Qready and not self.Eready and not self.Wready and not self.Rready then self:CastQAA2(target) end if self.Eready and self.Qready and not self.Wready and not self.Rready and not self.Ulted then self:CastE(target) self:CastQAA2(target) end if self.Eready and not self.Qready and not self.Wready and not self.Rready and not self.Ulted then self:CastE(target) if self.LoadedOrb == "Sac" then self:CastItems2(target) end end if self.Eready and self.Wready and not self.Qready and not self.Rready and not self.Ulted then self:CastE(target) self:CastW(target) end if self.Eready and self.Ulted and self.Rready and target.health <= self:rDmg(target) then self:CastE(target) self:CastR(target) end if self.Wready and self.Rready and not self.Qready and not self.Eready and not self.Ulted then self:CastR(target) self:CastW(target) end if self.Wready and not self.Qready and not self.Eready and not self.Rready then self:CastW(target) if self.LoadedOrb == "Sac" then self:CastItems2(target) end end if self.Wready and self.Ulted and self.Rready and target.health <= self:rDmg(target) and not self.Qready and not self.Eready then self:CastR(target) self:CastW(target) end if self.Qready and self.Ulted and target.health <= self:rDmg(target) and not self.Eready and not self.Wready then self:CastR(target) self:CastQAA2(target) end if self.Eready and self.Qready and not self.Wready and not self.Rready and not self.Ulted then self:CastE(target) --AA if self.LoadedOrb == "Sac" then self:CastItems2(target) end self:CastQAA2(target) end if self.Eready and self.Wready and not self.Qready and not self.Rready and not self.Ulted then self:CastE(target) -- AA if self.LoadedOrb == "Sac" then self:CastItems2(target) end self:CastW(target) end if self.Eready and self.Rready and self.Qready and not self.Wready and not self.Ulted then self:CastE(target) self:CastR(target) self:CastQAA2(target) end if self.Eready and self.Qready and self.Ulted and self.Rready and not self.Wready then self:CastE(target) self:CastR(target) self:CastQAA2(target) end if self.Eready and self.Qready and self.Wready and not self.Rready and not self.Ulted then self:CastE(target) --AA!! if self.LoadedOrb == "Sac" then self:CastItems2(target) end self:CastQAA2(target) --1 Q self:CastW(target) end if self.Eready and self.Rready and self.Qready and not self.Wready and not self.Ulted then self:CastE(target) if self.LoadedOrb == "Sac" then self:CastItems2(target) end self:CastR(target) self:CastQAA2(target) end if self.Eready and self.Ulted and self.Rready and self.Wready and not self.Qready and target.health <= self:rDmg(target) then self:CastE(target) if self.LoadedOrb == "Sac" then self:CastItems2(target) end self:CastR(target) end if self.Eready and self.Wready and self.Qready and not self.Rready and not self.Ulted then self:CastE(target) if self.LoadedOrb == "Sac" then self:CastItems2(target) end self:CastW(target) self:CastQAA2(target) end if self.Eready and self.Rready and not self.Ulted and self.Wready and self.Qready then self:CastE(target) if self.LoadedOrb == "Sac" then self:CastItems2(target) end self:CastR(target) self:CastW(target) self:CastQAA2(target) end if self.Eready and self.Ulted and self.Wready and self.Qready and target.health <= self:rDmg(target) then self:CastE(target) if self.LoadedOrb == "Sac" then self:CastItems2(target) end self:CastR(target) self:CastW(target) self:CastQAA2(target) end end end function Riven:Combo2(target) if ValidTarget(target) and self:Keys() == "Combo" then if self.Eready and self.Rready and self.Wready and self.Qready then -- noch Check hinzufУƒ?У†?Уƒ?УЂ??Уƒ?УЂ??Уƒ?У‚ТМgen fУƒ?У†?Уƒ?УЂ??Уƒ?УЂ??Уƒ?У‚ТМr Flash, Menu Flash nutzen self:CastE(target) self:CastR(target) if self.Flash and self.Ulted and GetDistance(target) <= Menu.Combo.useFlashSlice and Menu.Combo.useFlash then CastSpell(Flash, target.x, target.z) end self:CastW(target) -- AA if self.WCasted == true then CastSpell(_R, target.x, target.z) else DelayAction(function () CastSpell(_R, target.x, target.z) end, 3) end self:CastQAA(target) elseif Menu.Combo.Burst then Menu.Combo.Burst = false end end end function Riven:LaneClear() if self:Keys() == "Laneclear" then enemyMinions:update() jungleMinions:update() for _, minion in pairs(enemyMinions.objects) do if Menu.LaneJung.Q then self:CastQAA2(minion) end if Menu.LaneJung.W then self:CastW(minion) end end for _, minion in pairs(jungleMinions.objects) do if Menu.LaneJung.Q then self:CastQAA2(minion) end if Menu.LaneJung.W then self:CastW(minion) end if Menu.LaneJung.E then self:CastE(minion) end end end end function Riven:CastItems2 (target) _G.AutoCarry.Items:UseAll(target) end function Riven:CastQAA(target) if ValidTarget(target) then self.QTarget = target if GetDistance(target) > 270 then self.QAA = true end end end function Riven:CastQAA2(target) if ValidTarget(target) then if GetDistance(target) < 270 then self.QAA = true else self:CastQAA(target) end end end function Riven:CastW(target) if ValidTarget(target, 255) and myHero:GetSpellData(_Q).currentCd > 0.5 then CastSpell(_W) end end function Riven:CastE(target) if ValidTarget(target, Menu.Combo.useERange) then CastSpell(_E, target.x, target.z) end end function Riven:CastR(target) if ValidTarget(target, Menu.Combo.useRRange) then if not self.Ulted then CastSpell(_R) end if self.Ulted then if self:rDmg(target) >= target.health or self.RTime-os.clock() <= -11 then CastSpell(_R, target.x, target.z) end end end end function Riven:rDmg(unit) local Lvl = myHero:GetSpellData(_R).level if Lvl < 1 then return 0 end local DMGCALC = 0 bad = myHero.addDamage*(1.2) ad = myHero.totalDamage+bad local hpercent = unit.health/unit.maxHealth if hpercent <= 0.25 then DMGCALC = 120*myHero:GetSpellData(_R).level+120+1.8*bad else DMGCALC = (40*myHero:GetSpellData(_R).level+40+0.6*bad) * (hpercent)*(-2.67) + 3.67 end return myHero:CalcDamage(unit, DMGCALC) end function Riven:LoadTableOrbs() self.OrbWalkers = {} self.LoadedOrb = nil if _G.Reborn_Loaded or _G.Reborn_Initialised or _G.AutoCarry ~= nil then table.insert(self.OrbWalkers, "SAC") end if _G.MMA_IsLoaded then table.insert(self.OrbWalkers, "MMA") end if _G._Pewalk then table.insert(self.OrbWalkers, "Pewalk") end if FileExist(LIB_PATH .. "/Nebelwolfi's Orb Walker.lua") then table.insert(self.OrbWalkers, "NOW") end if FileExist(LIB_PATH .. "/Big Fat Orbwalker.lua") then table.insert(self.OrbWalkers, "Big Fat Walk") end if FileExist(LIB_PATH .. "/SOW.lua") then table.insert(self.OrbWalkers, "SOW") end if FileExist(LIB_PATH .. "/SxOrbWalk.lua") then table.insert(self.OrbWalkers, "SxOrbWalk") end if FileExist(LIB_PATH .. "/S1mpleOrbWalker.lua") then table.insert(self.OrbWalkers, "S1mpleOrbWalker") end if #self.OrbWalkers > 0 then Menu:addSubMenu("Orbwalkers", "Orbwalkers") Menu:addSubMenu("Keys", "Keys") Menu.Orbwalkers:addParam("Orbwalker", "OrbWalker", SCRIPT_PARAM_LIST, 1, self.OrbWalkers) Menu.Keys:addParam("info", "Detecting keys from :", SCRIPT_PARAM_INFO, self.OrbWalkers[Menu.Orbwalkers.Orbwalker]) Menu.Keys:addParam("Flee", "Flee Key", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("G")) local OrbAlr = false Menu.Orbwalkers:setCallback("Orbwalker", function(value) if OrbAlr then return end OrbAlr = true Menu.Orbwalkers:addParam("info", "Press F9 2x to load your selected Orbwalker.", SCRIPT_PARAM_INFO, "") SendMsg("Press F9 2x to load your selected Orbwalker") end) end end function CastItems() ___GetInventorySlotItem = rawget(_G, "GetInventorySlotItem") _G.GetInventorySlotItem = GetSlotItem _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 ItemNames = { [3144] = "BilgewaterCutlass", [3153] = "ItemSwordOfFeastAndFamine", [3405] = "TrinketSweeperLvl1", [3166] = "TrinketTotemLvl1", [3361] = "TrinketTotemLvl3", [3362] = "TrinketTotemLvl4", [2003] = "RegenerationPotion", [3146] = "HextechGunblade", [3187] = "HextechSweeper", [3364] = "TrinketSweeperLvl3", [3074] = "ItemTiamatCleave", [3077] = "ItemTiamatCleave", [3340] = "TrinketTotemLvl1", [3090] = "ZhonyasHourglass", [3142] = "YoumusBlade", [3157] = "ZhonyasHourglass", [3350] = "TrinketTotemLvl2", [3140] = "QuicksilverSash", [3139] = "ItemMercurial", } if Target ~= nil then if Menu.Items.UseBRK then local slot = GetInventorySlotItem(3153) if Target ~= nil and ValidTarget(Target) and not Target.dead and slot ~= nil and myHero:CanUseSpell(slot) == READY and GetDistance(Target) <= 450 then CastSpell(slot, Target) end end if Menu.Items.UseHydra then local slot = GetInventorySlotItem(3074) if Target ~= nil and ValidTarget(Target) and not Target.dead and slot ~= nil and myHero:CanUseSpell(slot) == READY and GetDistance(Target) <= 300 then CastSpell(slot) end end if Menu.Items.UseQSS then if GetInventorySlotItem(3139) ~= nil then local slot = GetInventorySlotItem(3139) elseif GetInventorySlotItem(3140) ~= nil then local slot = GetInventorySlotItem(3140) end local buffsList = 6,8,9,11,20,21,23,24,29,30,31 if Target ~= nil and ValidTarget(Target) and not Target.dead and slot ~= nil and myHero:CanUseSpell(slot) == READY and GetDistance(Target) <= 600 and HaveBuffs(myHero, buffsList) then CastSpell(slot) end end if Menu.Items.UseYoumu then local slot = GetInventorySlotItem(3142) if Target ~= nil and ValidTarget(Target) and not Target.dead and slot ~= nil and myHero:CanUseSpell(slot) == READY then CastSpell(slot) end end if Menu.Items.UseZhonya then local slot = GetInventorySlotItem(3157) if myHero.health <= (myHero.maxHealth * Menu.Items.ZhonyaAmount / 100) and slot ~= nil and myHero:CanUseSpell(slot) == READY and CountEnemyHeroInRange(900) >= 1 then CastSpell(slot) end 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 function Riven:LoadOrb() if self.OrbWalkers[Menu.Orbwalkers.Orbwalker] == "SAC" then self.LoadedOrb = "Sac" TIMETOSACLOAD = false DelayAction(function() TIMETOSACLOAD = true end,15) elseif self.OrbWalkers[Menu.Orbwalkers.Orbwalker] == "MMA" then self.LoadedOrb = "Mma" elseif self.OrbWalkers[Menu.Orbwalkers.Orbwalker] == "Pewalk" then self.LoadedOrb = "Pewalk" elseif self.OrbWalkers[Menu.Orbwalkers.Orbwalker] == "NOW" then self.LoadedOrb = "Now" require "Nebelwolfi's Orb Walker" _G.NOWi = NebelwolfisOrbWalkerClass() --Menu.Orbwalkers:addSubMenu("NOW", "NOW") --_G.NebelwolfisOrbWalkerClass(Menu.Orbwalkers.NOW) elseif self.OrbWalkers[Menu.Orbwalkers.Orbwalker] == "Big Fat Walk" then self.LoadedOrb = "Big" require "Big Fat Orbwalker" elseif self.OrbWalkers[Menu.Orbwalkers.Orbwalker] == "SOW" then self.LoadedOrb = "Sow" require "SOW" Menu.Orbwalkers:addSubMenu("SOW", "SOW") _G.SOWi = SOW(_G.VP) SOW:LoadToMenu(Menu.Orbwalkers.SOW) elseif self.OrbWalkers[Menu.Orbwalkers.Orbwalker] == "SxOrbWalk" then self.LoadedOrb = "SxOrbWalk" require "SxOrbWalk" Menu.Orbwalkers:addSubMenu("SxOrbWalk", "SxOrbWalk") SxOrb:LoadToMenu(Menu.Orbwalkers.SxOrbWalk) elseif self.OrbWalkers[Menu.Orbwalkers.Orbwalker] == "S1mpleOrbWalker" then require "S1mpleOrbWalker" DelayAction(function() _G.S1mpleOrbWalker:AddToMenu(Menu.Orbwalkers) end, 1) end end function Riven:Keys() if self.LoadedOrb == "Sac" and TIMETOSACLOAD then if _G.AutoCarry.Keys.AutoCarry then return "Combo" end if _G.AutoCarry.Keys.MixedMode then return "Harass" end if _G.AutoCarry.Keys.LaneClear then return "Laneclear" end if _G.AutoCarry.Keys.LastHit then return "Lasthit" end elseif self.LoadedOrb == "Mma" then if _G.MMA_IsOrbwalking() then return "Combo" end if _G.MMA_IsDualCarrying() then return "Harass" end if _G.MMA_IsLaneClearing() then return "Laneclear" end if _G.MMA_IsLastHitting() then return "Lasthit" end elseif self.LoadedOrb == "Pewalk" then if _G._Pewalk.GetActiveMode().Carry then return "Combo" end if _G._Pewalk.GetActiveMode().Mixed then return "Harass" end if _G._Pewalk.GetActiveMode().LaneClear then return "Laneclear" end if _G._Pewalk.GetActiveMode().Farm then return "Lasthit" end elseif self.LoadedOrb == "Now" then if _G.NOWi.mode == "LastHit" then return "Lasthit" elseif _G.NOWi.mode ~= "JungleClear" then return _G.NOWi.mode end --[[ if _G.NOWi.Config.k.Combo then return "Combo" end if _G.NOWi.Config.k.Harass then return "Harass" end if _G.NOWi.Config.k.LaneClear then return "Laneclear" end if _G.NOWi.Config.k.LastHit then return "Lasthit" end ]]-- elseif self.LoadedOrb == "Big" then if _G["BigFatOrb_Mode"] == "Combo" then return "Combo" end if _G["BigFatOrb_Mode"] == "Harass" then return "Harass" end if _G["BigFatOrb_Mode"] == "LaneClear" then return "Laneclear" end if _G["BigFatOrb_Mode"] == "LastHit" then return "Lasthit" end elseif self.LoadedOrb == "Sow" then if _G.SOWi.Menu.Mode0 then return "Combo" end if _G.SOWi.Menu.Mode1 then return "Harass" end if _G.SOWi.Menu.Mode2 then return "Laneclear" end if _G.SOWi.Menu.Mode3 then return "Lasthit" end elseif self.LoadedOrb == "SxOrbWalk" then if _G.SxOrb.isFight then return "Combo" end if _G.SxOrb.isHarass then return "Harass" end if _G.SxOrb.isLaneClear then return "Laneclear" end if _G.SxOrb.isLastHit then return "Lasthit" end elseif self.LoadedOrb == "S1mpleOrbWalker" then if _G.S1mpleOrbWalker.aamode == "sbtw" then return "Combo" end if _G.S1mpleOrbWalker.aamode == "harass" then return "Harass" end if _G.S1mpleOrbWalker.aamode == "laneclear" then return "Laneclear" end if _G.S1mpleOrbWalker.aamode == "lasthit"then return "Lasthit" end end end function Download:__init() socket = require("socket") self.aktivedownloads = {} self.callbacks = {} AddTickCallback(function () self:RemoveDone() end) class("Async") function Async:__init(host, filepath, localname, drawoffset, localpath) self.progress = 0 self.host = host self.filepath = filepath self.localname = localname self.offset = drawoffset self.localpath = localpath self.CRLF = '\r\n' self.headsocket = socket.tcp() self.headsocket:settimeout(1) self.headsocket:connect(self.host, 80) self.headsocket:send('HEAD '..self.filepath..' HTTP/1.1'.. self.CRLF ..'Host: '..self.host.. self.CRLF ..'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'.. self.CRLF .. self.CRLF) self.HEADdata = "" self.DLdata = "" self.StartedDownload = false self.canDL = true AddTickCallback(function () self:tick() end) AddDrawCallback(function () self:draw() end) end function Async:tick() if self.progress == 100 then return end if self.HEADcStatus ~= "timeout" and self.HEADcStatus ~= "closed" then self.HEADfString, self.HEADcStatus, self.HEADpString = self.headsocket:receive(16); if self.HEADfString then self.HEADdata = self.HEADdata..self.HEADfString elseif self.HEADpString and #self.HEADpString > 0 then self.HEADdata = self.HEADdata..self.HEADpString end elseif self.HEADcStatus == "timeout" then self.headsocket:close() --Find Lenght local begin = string.find(self.HEADdata, "Length: ") if begin then self.HEADdata = string.sub(self.HEADdata,begin+8) local n = 0 local _break = false for i=1, #self.HEADdata do local c = tonumber(string.sub(self.HEADdata,i,i)) if c and _break == false then n = n+1 else _break = true end end self.HEADdata = string.sub(self.HEADdata,1,n) self.StartedDownload = true self.HEADcStatus = "closed" end end if self.HEADcStatus == "closed" and self.StartedDownload == true and self.canDL == true then --Double Check self.canDL = false self.DLsocket = socket.tcp() self.DLsocket:settimeout(1) self.DLsocket:connect(self.host, 80) --Start Main Download self.DLsocket:send('GET '..self.filepath..' HTTP/1.1'.. self.CRLF ..'Host: '..self.host.. self.CRLF ..'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'.. self.CRLF .. self.CRLF) end if self.DLsocket and self.DLcStatus ~= "timeout" and self.DLcStatus ~= "closed" then self.DLfString, self.DLcStatus, self.DLpString = self.DLsocket:receive(1024); if ((self.DLfString) or (self.DLpString and #self.DLpString > 0)) then self.DLdata = self.DLdata .. (self.DLfString or self.DLpString) end elseif self.DLcStatus and self.DLcStatus == "timeout" then self.DLsocket:close() self.DLcStatus = "closed" self.DLdata = string.sub(self.DLdata,#self.DLdata-tonumber(self.HEADdata)+1) local file = io.open(self.localpath.."\\"..self.localname, "w+b") file:write(self.DLdata) file:close() self.progress = 100 end if self.progress ~= 100 and self.DLdata and #self.DLdata > 0 then self.progress = (#self.DLdata/tonumber(self.HEADdata))*100 end end function Async:draw() if self.progress < 100 then DrawTextA("Downloading: "..self.localname,15,50,35+self.offset) DrawRectangleOutline(49,50+self.offset,250,20, ARGB(255,255,255,255),1) if self.progress ~= 100 then DrawLine(50,60+self.offset,50+(2.5*self.progress),60+self.offset,18,ARGB(150,255-self.progress*2.5,self.progress*2.5,255-self.progress*2.5)) DrawTextA(tostring(math.round(self.progress).." %"), 15,150,52+self.offset) end end end end function Download:newDL(host, file, name, path, callback) local offset = (#self.aktivedownloads+1)*40 self.aktivedownloads[#self.aktivedownloads+1] = Async(host, file, name, offset-40, path) if not callback then callback = (function () end) end self.callbacks[#self.callbacks+1] = callback end function Download:RemoveDone() if #self.aktivedownloads == 0 then return end local x = {} for k, v in pairs(self.aktivedownloads) do if math.round(v.progress) < 100 then v.offset = k*40-40 x[#x+1] = v else self.callbacks[k]() end end self.aktivedownloads = {} self.aktivedownloads = x end if myHero.charName ~= "Riven" then return end -- BoL Tools Tracker -- assert(load(Base64Decode("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"), nil, "bt", _ENV))() TrackerLoad("SYmmrH5U23buufxE") -- BoL Tools Tracker -- function OnLoad() Riven() SendMsg("Thanks "..GetUser().." for using Shattered Blade") Download() end function SendMsg(msg) PrintChat("[Shattered Blade] "..msg..".") end