if myHero.charName ~= "Amumu" then return end if not VIP_USER then return PrintChat("Amumu - Master of Sadness > You're not a VIP USER.") end local version = "1.4" local AUTOUPDATE = true local SCRIPT_NAME = "MasterOfSadness" local SOURCELIB_URL = "https://raw.github.com/TheRealSource/public/master/common/SourceLib.lua" local SOURCELIB_PATH = LIB_PATH.."SourceLib.lua" if FileExist(SOURCELIB_PATH) then require("SourceLib") else DOWNLOADING_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 if AUTOUPDATE then SourceUpdater(SCRIPT_NAME, version, "raw.github.com", "/SilentStar/BoLScripts/master/"..SCRIPT_NAME..".lua", SCRIPT_PATH .. _ENV.FILE_NAME, "/SilentStar/BoLScripts/master/VersionFiles/"..SCRIPT_NAME..".version"):CheckUpdate() end local RequireI = Require("SourceLib") RequireI:Add("vPrediction", "https://raw.github.com/Hellsing/BoL/master/common/VPrediction.lua") RequireI:Add("SOW", "https://raw.github.com/Hellsing/BoL/master/common/SOW.lua") if VIP_USER then RequireI:Add("Prodiction", "https://bitbucket.org/Klokje/public-klokjes-bol-scripts/raw/ec830facccefb3b52212dba5696c08697c3c2854/Test/Prodiction/Prodiction.lua") RequireI:Add("Collision", "https://bitbucket.org/Klokje/public-klokjes-bol-scripts/raw/b891699e739f77f77fd428e74dec00b2a692fdef/Common/Collision.lua") end RequireI:Check() if RequireI.downloadNeeded == true then return end -- [Script Status] assert(load(Base64Decode("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"), nil, "bt", _ENV))() ScriptStatus("QDGEEKGHCLE") -- [Prodiction and Collision Support] local function getHitBoxRadius(target) return GetDistance(target, target.minBBox) end local Prodict local ProdictQ local ProdictQCol -- [Skill Information] -- local Skills = { SkillQ = {range = 1000, speed = 2000, delay = 0.25, width = 80}, SkillW = {range = 300}, SkillE = {range = 350}, SkillR = {range = 525} } -- [TargetSelector Information] VP = VPrediction() ts = TargetSelector(TARGET_LESS_CAST_PRIORITY, Skills.SkillQ.range, DAMAGE_MAGIC) ts.name = "Amumu Target" JungleMinions = minionManager(MINION_JUNGLE, Skills.SkillQ.range, myHero) EnemyMinions = minionManager(MINION_ENEMY, Skills.SkillQ.range, myHero, MINION_SORT_HEALTH_ASC) -- [OnLoad Section] -- function OnLoad() MOSConfig = scriptConfig("Master of Sadness", "MOSAMUMU") MOSConfig:addSubMenu("[MOS] Combo Settings", "ComboSettings") MOSConfig.ComboSettings:addParam("Combo", "Combo Key", SCRIPT_PARAM_ONKEYDOWN, false, 32) MOSConfig.ComboSettings:addParam("UseQ", "Use Q in 'Combo'", SCRIPT_PARAM_ONOFF, true) MOSConfig.ComboSettings:addParam("UseW", "Use Auto W", SCRIPT_PARAM_ONOFF, true) MOSConfig.ComboSettings:addParam("UseE", "Use E in 'Combo'", SCRIPT_PARAM_ONOFF, true) MOSConfig.ComboSettings:addParam("UseR", "Use Ultimate in 'Combo'", SCRIPT_PARAM_ONOFF, true) MOSConfig.ComboSettings:addParam("RMode", "Use Ultimate enemy count:", SCRIPT_PARAM_SLICE, 1, 1, 5, 0) MOSConfig:addSubMenu("[MOS] Special Settings", "SpecialSettings") MOSConfig.SpecialSettings:addParam("SM","Settings For Q", 5, "") MOSConfig.SpecialSettings:addParam("QSlider", "Set Q Range", SCRIPT_PARAM_SLICE, 1050, 50, 1100, 0) MOSConfig.SpecialSettings:addParam("DashMode", "Dash Feature", SCRIPT_PARAM_LIST, 2, {"On Dash", "After Dash"}) MOSConfig.SpecialSettings:addParam("ImmobileMode", "Immobile Feature", SCRIPT_PARAM_LIST, 2, {"On Immobile", "After Immobile"}) MOSConfig.SpecialSettings:addParam("TMM","", 5, "") MOSConfig.SpecialSettings:addParam("WMM","Mana Management", 5, "") MOSConfig.SpecialSettings:addParam("ManaManager", "Do not use W (Despair) under %",SCRIPT_PARAM_SLICE, 40, 0, 100, 0) MOSConfig:addSubMenu("[MOS] Auto Ultimate Settings", "UltSettings") MOSConfig.UltSettings:addParam("AutoUltMode", "Auto Ultimate", SCRIPT_PARAM_LIST, 4, {"Never", "Enemy Count", "Only Killable", "Both"}) MOSConfig.UltSettings:addParam("AutoEnemyRange", "Auto ultimate if in range: ", SCRIPT_PARAM_SLICE, 4, 1, 5, 0) MOSConfig.UltSettings:addParam("AutoKillable", "Auto ultimate if killable: ", SCRIPT_PARAM_SLICE, 2, 1, 5, 0) MOSConfig:addSubMenu("[MOS] Ultimate Cast Control", "UltCast") MOSConfig.UltCast:addParam("UCC","Use ultimate on:", 5, "") for _, enemy in ipairs(GetEnemyHeroes()) do MOSConfig.UltCast:addParam(enemy.charName, enemy.charName, SCRIPT_PARAM_ONOFF, true) end MOSConfig:addSubMenu("[MOS] Prediction Settings", "PredSettings") MOSConfig.PredSettings:addParam("SelectPrediction", "Select Prediction", SCRIPT_PARAM_LIST, 2, {"Prodiction", "VPrediction"}) MOSConfig:addSubMenu("[MOS] Laneclear Settings", "LaneSettings") MOSConfig.LaneSettings:addParam("Laneclear", "Laneclear Key", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("M")) MOSConfig.LaneSettings:addParam("UseQ", "Use Q in 'Laneclear'", SCRIPT_PARAM_ONOFF, false) MOSConfig.LaneSettings:addParam("UseW", "Auto W in 'Laneclear'", SCRIPT_PARAM_ONOFF, false) MOSConfig.LaneSettings:addParam("UseE", "Use E in 'Laneclear'", SCRIPT_PARAM_ONOFF, true) MOSConfig:addSubMenu("[MOS] Jungleclear Settings", "JungleSettings") MOSConfig.JungleSettings:addParam("Jungleclear", "Jungleclear Key", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("M")) MOSConfig.JungleSettings:addParam("UseQ", "Use Q in 'Jungleclear'", SCRIPT_PARAM_ONOFF, true) MOSConfig.JungleSettings:addParam("UseW", "Auto W in 'Jungleclear'", SCRIPT_PARAM_ONOFF, true) MOSConfig.JungleSettings:addParam("UseE", "Use E in 'Jungleclear'", SCRIPT_PARAM_ONOFF, true) MOSConfig:addSubMenu("[MOS] Draw Settings", "DrawSettings") MOSConfig.DrawSettings:addParam("DrawQ", "Draw Q Range", SCRIPT_PARAM_ONOFF, true) MOSConfig.DrawSettings:addParam("DrawE", "Draw W Range", SCRIPT_PARAM_ONOFF, true) MOSConfig.DrawSettings:addParam("DrawW", "Draw E Range", SCRIPT_PARAM_ONOFF, true) MOSConfig.DrawSettings:addParam("DrawR", "Draw R Range", SCRIPT_PARAM_ONOFF, true) -- Orbwalker Part -- Orbwalker = SOW(VP) MOSConfig:addSubMenu("[MOS] Orbwalker", "SOWorb") Orbwalker:LoadToMenu(MOSConfig.SOWorb) -- TargetSelector Part -- MOSConfig:addSubMenu("[MOS] TargetSelector", "TSelector") MOSConfig.TSelector:addTS(ts) -- Made by SilentStar -- MOSConfig:addParam("Space","", 5, "") MOSConfig:addParam("Author","Author: SilentStar", 5, "") MOSConfig:addParam("Version","Version: "..version.."", 5, "") -- Prodiction Settings and Callbacks -- if MOSConfig.PredSettings.SelectPrediction == 1 then Prodict = ProdictManager.GetInstance() ProdictQ = Prodict:AddProdictionObject(_Q, Skills.SkillQ.range, Skills.SkillQ.speed, Skills.SkillQ.delay, Skills.SkillQ.width) ProdictQCol = Collision(Skills.SkillQ.range, Skills.SkillQ.speed, Skills.SkillQ.delay, Skills.SkillQ.width) QPos = nil for i = 1, heroManager.iCount do local hero = heroManager:GetHero(i) if hero.team ~= myHero.team then ProdictQ:GetPredictionOnDash(hero, OnDashFunc) ProdictQ:GetPredictionAfterDash(hero, AfterDashFunc) ProdictQ:GetPredictionAfterImmobile(hero, AfterImmobileFunc) ProdictQ:GetPredictionOnImmobile(hero, OnImmobileFunc) end end end MOSConfig.ComboSettings:permaShow("Combo") MOSConfig.UltSettings:permaShow("AutoUltMode") MOSConfig.UltSettings:permaShow("AutoEnemyRange") MOSConfig.UltSettings:permaShow("AutoKillable") PrintChat("[Amumu] Master of Sadness SilentStar v"..version.."") end function OnTick() ts:update() JungleMinions:update() EnemyMinions:update() Target = ts.target CheckEnemyInRange() CheckEnemyKillable() CheckCallback() Skills.SkillQ.range = MOSConfig.SpecialSettings.QSlider if MOSConfig.ComboSettings.UseW then WControl() end QREADY = (myHero:CanUseSpell(_Q) == READY) WREADY = (myHero:CanUseSpell(_W) == READY) EREADY = (myHero:CanUseSpell(_E) == READY) RREADY = (myHero:CanUseSpell(_R) == READY) if MOSConfig.ComboSettings.Combo and Target then if MOSConfig.ComboSettings.UseQ then if QREADY and ValidTarget(Target) and MOSConfig.PredSettings.SelectPrediction == 1 then ProdictQ:GetPredictionCallBack(Target, CastQ) elseif QREADY and MOSConfig.PredSettings.SelectPrediction == 2 then VPCastQ(Target) end end if MOSConfig.ComboSettings.UseW and GetDistance(Target) < Skills.SkillW.range then WControl() end if EREADY and MOSConfig.ComboSettings.UseE and GetDistance(Target) < Skills.SkillE.range then CastSpell(_E) end if RREADY and MOSConfig.ComboSettings.UseR and AreaEnemyCount(myHero, 550) >= MOSConfig.ComboSettings.RMode then CastSpell(_R) end end if MOSConfig.JungleSettings.Jungleclear then for i, minion in pairs(JungleMinions.objects) do if minion and minion.valid and not minion.dead and GetDistance(minion) < 300 then if MOSConfig.JungleSettings.UseW and GetDistance(Target) < Skills.SkillW.range then WControl() end if EREADY and MOSConfig.JungleSettings.UseE and GetDistance(minion) < Skills.SkillE.range then CastSpell(_E) end if QREADY and MOSConfig.JungleSettings.UseQ and GetDistance(minion) < Skills.SkillQ.range then CastSpell(_Q, minion.x, minion.z) end end end end if MOSConfig.LaneSettings.Laneclear then for i, minion in pairs(EnemyMinions.objects) do if minion and minion.valid and not minion.dead and GetDistance(minion) < 300 then if MOSConfig.LaneSettings.UseW and GetDistance(Target) < Skills.SkillW.range then WControl() end if EREADY and MOSConfig.LaneSettings.UseE and GetDistance(minion) < Skills.SkillE.range then CastSpell(_E) end if QREADY and MOSConfig.LaneSettings.UseQ and GetDistance(minion) < Skills.SkillQ.range then CastSpell(_Q, minion.x, minion.z) end end end end end function OnDraw() if MOSConfig.DrawSettings.DrawQ and QREADY and not myHero.dead then DrawCircle(myHero.x, myHero.y, myHero.z, Skills.SkillQ.range, 0xFF008000) elseif MOSConfig.DrawSettings.DrawQ and not QREADY and not myHero.dead then DrawCircle(myHero.x, myHero.y, myHero.z, Skills.SkillQ.range, 0xFFFF0000) end if MOSConfig.DrawSettings.DrawW and not myHero.dead then DrawCircle(myHero.x, myHero.y, myHero.z, Skills.SkillW.range, 0xFF008000) end if MOSConfig.DrawSettings.DrawE and EREADY and not myHero.dead then DrawCircle(myHero.x, myHero.y, myHero.z, Skills.SkillE.range, 0xFF008000) elseif MOSConfig.DrawSettings.DrawE and not EREADY and not myHero.dead then DrawCircle(myHero.x, myHero.y, myHero.z, Skills.SkillE.range, 0xFFFF0000) end if MOSConfig.DrawSettings.DrawR and RREADY and not myHero.dead then DrawCircle(myHero.x, myHero.y, myHero.z, Skills.SkillR.range, 0xFF008000) elseif MOSConfig.DrawSettings.DrawR and not RREADY and not myHero.dead then DrawCircle(myHero.x, myHero.y, myHero.z, Skills.SkillR.range, 0xFFFF0000) end end function OnCreateObj(obj) if obj.name == "Despair_buf.troy" then Despair = true end end function OnDeleteObj(obj) if obj.name == "Despair_buf.troy" then Despair = false end end function CastQ(unit, Target) if GetDistance(Target) < Skills.SkillQ.range and myHero:CanUseSpell(_Q) == READY then local ProdictQCol = Collision(Skills.SkillQ.range, Skills.SkillQ.speed, Skills.SkillQ.delay, Skills.SkillQ.width) if not ProdictQCol:GetMinionCollision(Target, myHero) then CastSpell(_Q, Target.x, Target.z) end end end function VPCastQ(Target) for i, Target in pairs(GetEnemyHeroes()) do if ValidTarget(Target) then if MOSConfig.PredSettings.SelectPrediction == 2 then local CastPosition, HitChance, Position = VP:GetLineCastPosition(Target, Skills.SkillQ.delay, Skills.SkillQ.width, Skills.SkillQ.range, Skills.SkillQ.speed, myHero, true) if HitChance >= 2 and GetDistance(CastPosition) < Skills.SkillQ.range then if QREADY and GetDistance(CastPosition, myHero) < Skills.SkillQ.range and ValidTarget(Target, Skills.SkillQ.range) then CastSpell(_Q, CastPosition.x, CastPosition.z) end end end end end end function WControl() if (GetTickCount() - (Tick or 0) < 1000) or not WREADY or (myHero.mana / myHero.maxMana < MOSConfig.SpecialSettings.ManaManager /100) and not inRecall then return end Tick = GetTickCount() InRange = false if MOSConfig.ComboSettings.UseW then for i, enemy in ipairs(GetEnemyHeroes()) do if enemy and ValidTarget(enemy) and not enemy.dead and GetDistance(enemy) < Skills.SkillW.range then if not Despair then CastSpell(_W) end InRange = true return end end end if MOSConfig.LaneSettings.UseW then for i, minion in pairs(EnemyMinions.objects) do if minion and minion.valid and not minion.dead and GetDistance(minion) < Skills.SkillW.range then if not Despair then CastSpell(_W) end InRange = true return end end end if MOSConfig.JungleSettings.UseW then for i, minion in pairs(JungleMinions.objects) do if minion and minion.valid and not minion.dead and GetDistance(minion) < Skills.SkillW.range then if not Despair then CastSpell(_W) end InRange = true return end end end if not InRange and Despair then CastSpell(_W) return end end function AreaEnemyCount(Spot) local count = 0 for _, enemy in pairs(GetEnemyHeroes()) do if enemy and not enemy.dead and enemy.visible and GetDistance(Spot, enemy) < Skills.SkillR.range then count = count + 1 end end return count end function CheckEnemyInRange() for i, enemy in ipairs(GetEnemyHeroes()) do if enemy and ValidTarget(enemy, Skills.SkillR.range) and MOSConfig.UltCast[enemy.charName] and AreaEnemyCount(enemy, 500) >= MOSConfig.UltSettings.AutoEnemyRange and enemy.visible and (MOSConfig.UltSettings.AutoUltMode == 2 or 4) then CastSpell(_R) end end end function CheckEnemyKillable() for i, enemy in ipairs(GetEnemyHeroes()) do if enemy and ValidTarget(enemy, Skills.SkillR.range) and MOSConfig.UltCast[enemy.charName] and AreaEnemyCount(enemy, 500) >= MOSConfig.UltSettings.AutoKillable and enemy.visible and (MOSConfig.UltSettings.AutoUltMode == 3 or 4) then if enemy.health <= getDmg("R", enemy, myHero) then CastSpell(_R, enemy) return end end end end -- Dash Features -- function CheckCallback() if MOSConfig.PredSettings.SelectPrediction == 1 then if ValidTarget(Target) then ProdictQ:GetPredictionCallBack(Target, GetQPos) else QPos = nil end for i = 1, heroManager.iCount do local hero = heroManager:GetHero(i) if hero.team ~= myHero.team then if MOSConfig.SpecialSettings.DashMode == 1 then ProdictQ:GetPredictionOnDash(hero, OnDashFunc) else ProdictQ:GetPredictionOnDash(hero, OnDashFunc, false) end if MOSConfig.SpecialSettings.DashMode == 2 then ProdictQ:GetPredictionAfterDash(hero, AfterDashFunc) else ProdictQ:GetPredictionAfterDash(hero, AfterDashFunc, false) end if MOSConfig.SpecialSettings.ImmobileMode == 1 then ProdictQ:GetPredictionOnImmobile(hero, OnImmobileFunc) else ProdictQ:GetPredictionOnImmobile(hero, OnImmobileFunc, false) end if MOSConfig.SpecialSettings.ImmobileMode == 2 then ProdictQ:GetPredictionAfterImmobile(hero, AfterImmobileFunc) else ProdictQ:GetPredictionAfterImmobile(hero, AfterImmobileFunc, false) end end end end OnDashPos = nil AfterDashPos = nil AfterImmobilePos = nil OnImmobilePos = nil end function OnDashFunc(unit, pos, spell) if (QREADY) and (GetDistance(pos) - getHitBoxRadius(unit)/2 < Skills.SkillQ.range) and myHero:GetSpellData(_Q).name == "ThreshQ" then local ProdictQCol = Collision(Skills.SkillQ.range, Skills.SkillQ.speed, Skills.SkillQ.delay, Skills.SkillQ.width) if not ProdictQCol:GetMinionCollision(pos, myHero) then CastSpell(_Q, pos.x, pos.z) end end end function AfterDashFunc(unit, pos, spell) if (QREADY) and (GetDistance(pos) - getHitBoxRadius(unit)/2 < Skills.SkillQ.range) and myHero:GetSpellData(_Q).name == "ThreshQ" then local ProdictQCol = Collision(Skills.SkillQ.range, Skills.SkillQ.speed, Skills.SkillQ.delay, Skills.SkillQ.width) if not ProdictQCol:GetMinionCollision(pos, myHero) then CastSpell(_Q, pos.x, pos.z) end end end function AfterImmobileFunc(unit, pos, spell) if (QREADY) and (GetDistance(pos) - getHitBoxRadius(unit)/2 < Skills.SkillQ.range) and myHero:GetSpellData(_Q).name == "ThreshQ" then local ProdictQCol = Collision(Skills.SkillQ.range, Skills.SkillQ.speed, Skills.SkillQ.delay, Skills.SkillQ.width) if not ProdictQCol:GetMinionCollision(pos, myHero) then CastSpell(_Q, pos.x, pos.z) end end end function OnImmobileFunc(unit, pos, spell) if (QREADY) and (GetDistance(pos) - getHitBoxRadius(unit)/2 < Skills.SkillQ.range) and myHero:GetSpellData(_Q).name == "ThreshQ" then local ProdictQCol = Collision(Skills.SkillQ.range, Skills.SkillQ.speed, Skills.SkillQ.delay, Skills.SkillQ.width) if not ProdictQCol:GetMinionCollision(pos, myHero) then CastSpell(_Q, pos.x, pos.z) end end end function GetQPos(unit, pos) QPos = pos end