--*******************************-- --|||||||||||||||||||||||||||||||-- --*******************************-- -- NamiMadness by Kqmii -- --*******************************-- --|||||||||||||||||||||||||||||||-- --*******************************-- if myHero.charName ~= "Nami" then return end local currentVersion = 1.7 local stunList = { ["ahriseducedoom"] = true, ["caitlynyordletrapdebuff"] = true, ["aatroxqknockup"] = true, ["rupturetarget"] = true, ["EliseHumanE"] = true, ["HowlingGaleSpell"] = true, ["jarvanivdragonstrikeph2"] = true, ["braumstundebuff"] = true, ["karmaspiritbindroot"] = true, ["LuxLightBindingMis"] = true, ["lissandrawfrozen"] = true, ["maokaiunstablegrowthroot"] = true, ["DarkBindingMissile"] = true, ["nautilusanchordragroot"] = true, ["RunePrison"] = true, ["Taunt"] = true, ["Stun"] = true, ["swainshadowgrasproot"] = true, ["threshqfakeknockup"] = true, ["velkozestun"] = true, ["virdunkstun"] = true, ["viktorgravitonfieldstun"] = true, ["supression"] = true, ["yasuoq3mis"] = true, ["zyragraspingrootshold"] = true, ["CurseoftheSadMummy"] = true, ["braumpulselineknockup"] = true, ["lissandraenemy2"] = true, ["sejuaniglacialprison"] = true, ["SonaR"] = true, ["zyrabramblezoneknockup"] = true, ["infiniteduresssound"] = true, ["chronorevive"] = true, ["katarinarsound"] = true, ["AbsoluteZero"] = true, ["Meditate"] = true, ["pantheonesound"] = true, ["zhonyasringshield"] = true, ["fearmonger_marker"] = true, ["AlZaharNetherGrasp"] = true, ["missfortunebulletsound"] = true, ["VelkozR"] = true, ["monkeykingspinknockup"] = true, ["unstoppableforceestun"] = true, ["lissandrarself"] = true } --------------------------------------- -- Callbacks -- --------------------------------------- function OnLoad() Vars() updateScript() PrintChat ("NamiMadness by Kqmii"..currentVersion.."Loaded") PrintChat ("Report any problem by pm to kqmii on bol") DetectOrbwalker() Menu() if heroManager.iCount == 10 then arrangeTarget() else PrintChat("Not enought champion to arrange priority") end end function OnTick() Checks() ts:update() target = CustomTarget() if namiCfg.combo.comboKey then Combo(target) end if namiCfg.harass.harassKey then Harass(target) end if namiCfg.aHeal.healKey then AutoHeal() end if namiCfg.combo.qConfig.qAuto then autoQ() end if namiCfg.draw.Lfc then _G.DrawCircle = DrawCircle2 else _G.DrawCircle = _G.oldDrawCircle end end --------------------------------------- -- Drawings -- --------------------------------------- function OnDraw() if not myHero.dead then if namiCfg.draw.qDraw and QSpell.ready then DrawCircle(myHero.x, myHero.y, myHero.z, QSpell.range, ARGB(255,0,0,255)) end if namiCfg.draw.wDraw and WSpell.ready then DrawCircle(myHero.x, myHero.y, myHero.z, WSpell.range, ARGB(255,0,0,255)) end if namiCfg.draw.eDraw and ESpell.ready then DrawCircle(myHero.x, myHero.y, myHero.z, ESpell.range, ARGB(255,0,0,255)) end if namiCfg.draw.rDraw and RSpell.ready then DrawCircle(myHero.x, myHero.y, myHero.z, namiCfg.combo.rConfig.mnRange, ARGB(255,0,0,255)) end if ValidTarget(ts.target) and not ts.target.dead and GetDistance(ts.target) <= 1000 then DrawCircle(ts.target.x, ts.target.y, ts.target.z, 90, 0xF0FFFF) DrawCircle(ts.target.x, ts.target.y, ts.target.z, 100, 0xF0FFFF) DrawCircle(ts.target.x, ts.target.y, ts.target.z, 110, 0xF0FFFF) elseif ValidTarget(SelectedTarget) and not SelectedTarget.dead then DrawCircle(SelectedTarget.x, SelectedTarget.y, SelectedTarget.z, 90, 0xF0FFFF) DrawCircle(SelectedTarget.x, SelectedTarget.y, SelectedTarget.z, 100, 0xF0FFFF) DrawCircle(SelectedTarget.x, SelectedTarget.y, SelectedTarget.z, 110, 0xF0FFFF) end end end function DrawCircleNextLvl(x, y, z, radius, width, color, chordlength) radius = radius or 300 quality = math.max(8,round(180/math.deg((math.asin((chordlength/(2*radius))))))) quality = 2 * math.pi / quality radius = radius*.92 local points = {} for theta = 0, 2 * math.pi + quality, quality do local c = WorldToScreen(D3DXVECTOR3(x + radius * math.cos(theta), y, z - radius * math.sin(theta))) points[#points + 1] = D3DXVECTOR2(c.x, c.y) end DrawLines2(points, width or 1, color or 4294967295) end function round(num) if num >= 0 then return math.floor(num+.5) else return math.ceil(num-.5) end end function DrawCircle2(x, y, z, radius, color) local vPos1 = Vector(x, y, z) local vPos2 = Vector(cameraPos.x, cameraPos.y, cameraPos.z) local tPos = vPos1 - (vPos1 - vPos2):normalized() * radius local sPos = WorldToScreen(D3DXVECTOR3(tPos.x, tPos.y, tPos.z)) if OnScreen({ x = sPos.x, y = sPos.y }, { x = sPos.x, y = sPos.y }) then DrawCircleNextLvl(x, y, z, radius, namiCfg.draw.Width, color, namiCfg.draw.CL) end end --------------------------------------- -- Functions -- --------------------------------------- function Menu() ts = TargetSelector(TARGET_LESS_CAST_PRIORITY, 1000) VP = VPrediction() SxOrb = SxOrbWalk(VP) namiCfg = scriptConfig("NamiMadness", "NMK") namiCfg:addSubMenu(myHero.charName.." - Combo", "combo") namiCfg.combo:addSubMenu("Q Config", "qConfig") namiCfg.combo.qConfig:addParam("qUse", "Use Q in combo", SCRIPT_PARAM_ONOFF, true) namiCfg.combo.qConfig:addParam("qAuto", "Auto Q on CC'ed Champ", SCRIPT_PARAM_ONOFF, true) namiCfg.combo:addSubMenu("W Config", "wConfig") namiCfg.combo.wConfig:addParam("wUse", "Use W in combo", SCRIPT_PARAM_ONOFF, true) namiCfg.combo:addSubMenu("E Config", "eConfig") namiCfg.combo.eConfig:addParam("eUse", "Use E in combo", SCRIPT_PARAM_ONOFF, true) namiCfg.combo:addSubMenu("R Config", "rConfig") namiCfg.combo.rConfig:addParam("rUse", "Use R in combo", SCRIPT_PARAM_ONOFF, true) namiCfg.combo.rConfig:addParam("mnRange", "Max range to ultimate", SCRIPT_PARAM_SLICE, 1600, 0, 2500, 0) namiCfg.combo.rConfig:addParam("mnChamp", "Min enemies in R range", SCRIPT_PARAM_SLICE, 1, 1, 5, 0) namiCfg.combo:addParam("comboKey", "Combo key", SCRIPT_PARAM_ONKEYDOWN, false, string.byte(" ")) namiCfg:addSubMenu(myHero.charName.." - Harass", "harass") namiCfg.harass:addParam("qHarass", "Harass with Q", SCRIPT_PARAM_ONOFF, true) namiCfg.harass:addParam("wHarass", "Harass with W", SCRIPT_PARAM_ONOFF, true) namiCfg.harass:addParam("manaHarass", "Min. mana to harass", SCRIPT_PARAM_SLICE, 40, 0, 100, 0) namiCfg.harass:addParam("harassKey", "Harass toggle key", SCRIPT_PARAM_ONKEYTOGGLE, false, GetKey("T")) namiCfg:addSubMenu(myHero.charName.." - Auto Heal", "aHeal") namiCfg.aHeal:addSubMenu("Auto heal ally settings", "allyHeal") namiCfg.aHeal.allyHeal:addParam("aUse", "Auto Heal ally", SCRIPT_PARAM_ONOFF, true) namiCfg.aHeal.allyHeal:addParam("aHpLeft", "Ally Hp left", SCRIPT_PARAM_SLICE, 50, 0, 100, 0) namiCfg.aHeal:addSubMenu("Auto heal self settings", "selfHeal") namiCfg.aHeal.selfHeal:addParam("sUse", "Auto Heal self", SCRIPT_PARAM_ONOFF, true) namiCfg.aHeal.selfHeal:addParam("sHpLeft", "Self Hp left", SCRIPT_PARAM_SLICE, 50, 0, 100, 0) namiCfg.aHeal:addParam("manaHeal", "Min. mana to auto heal", SCRIPT_PARAM_SLICE, 40, 0, 100, 0) namiCfg.aHeal:addParam("healKey", "Auto heal toggle key", SCRIPT_PARAM_ONKEYTOGGLE, false, GetKey("G")) namiCfg:addSubMenu(myHero.charName.." - Drawings", "draw") namiCfg.draw:addParam("qDraw", "Q Range", SCRIPT_PARAM_ONOFF, true) namiCfg.draw:addParam("wDraw", "W Range", SCRIPT_PARAM_ONOFF, true) namiCfg.draw:addParam("eDraw", "E Range", SCRIPT_PARAM_ONOFF, true) namiCfg.draw:addParam("rDraw", "R Range", SCRIPT_PARAM_ONOFF, true) namiCfg.draw:addParam("Lfc", "Activate Lag Free Circles", SCRIPT_PARAM_ONOFF, false) namiCfg.draw:addParam("CL", "Lag Free Circles Quality", 4, 75, 75, 2000, 0) namiCfg.draw:addParam("Width", "Lag Free Circles Width", 4, 2, 1, 10, 0) namiCfg:addTS(ts) ts.name = "Nami -" if SACLoaded then namiCfg:addParam("qqq", "- SAC Detected -", SCRIPT_PARAM_INFO, "") elseif MMALoaded then namiCfg:addParam("qqq", "- MMA Detected -", SCRIPT_PARAM_INFO, "") else namiCfg:addSubMenu(myHero.charName.." - Orbwalker", "SxOrb") SxOrb:LoadToMenu(namiCfg.SxOrb) end namiCfg.combo:permaShow("comboKey") namiCfg.harass:permaShow("harassKey") namiCfg.aHeal:permaShow("healKey") end function Vars() QSpell = { name = "Aqua Prison", range = 875, delay = 0.50, speed = 1600, radius = 165, ready = false } WSpell = { name = "Ebb and Flow", range = 725, delay = nil, speed = nil, radius = nil, ready = false } ESpell = { name = "Tidecaller's Blessing", range = 800, delay = nil, speed = nil, radius = nil, ready = false } RSpell = { name = "Tidal Wave", range = 2500, delay = 0.2, speed = 800, radius = 400, ready = false } local SACLoaded, MMALoaded = nil, nil local ts local target = nil require 'SxOrbwalk' require 'VPrediction' _G.oldDrawCircle = rawget(_G, 'DrawCircle') _G.DrawCircle = DrawCircle2 end function Checks() QSpell.ready = (myHero:CanUseSpell(_Q) == READY) WSpell.ready = (myHero:CanUseSpell(_W) == READY) ESpell.ready = (myHero:CanUseSpell(_E) == READY) RSpell.ready = (myHero:CanUseSpell(_R) == READY) end function DetectOrbwalker() if _G.MMA_LOADED then PrintChat("NamiMadness : MMA Detected") MMALoaded = true elseif _G.Reborn_Loaded then PrintChat("NamiMadness : SAC Detected") SACLoaded = true else PrintChat("NamiMadness : SxOrb Loaded") Sxo = true end end function HpCheck(unit, HealthValue) if unit.health < (unit.maxHealth * (HealthValue/100)) then return true else return false end end function ManaCheck(unit, ManaValue) if unit.mana < (unit.maxMana * (ManaValue/100)) then return true else return false end end function EnemyNear(range, unit) local Enemies = 0 for _, enemy in ipairs(GetEnemyHeroes()) do if ValidTarget(enemy) and GetDistance(enemy, unit) < (range or math.huge) then Enemies = Enemies + 1 end end return Enemies end function Recalling() for i = 1, myHero.buffCount do local recallBuff = myHero:getBuff(i) if recallBuff.valid and recallBuff.name:lower():find('recall') then return true end end return false end function Combo(target) if namiCfg.combo.qConfig.qUse then if TargetHaveBuff("namieslow") then qSpell(target) else qSpell(target) end end if namiCfg.combo.wConfig.wUse then wSpell(target) end if namiCfg.combo.eConfig.eUse then eSpell(target) end if namiCfg.combo.rConfig.rUse then rSpell(target) end end function Harass(target) if not ManaCheck(myHero, namiCfg.harass.manaHarass) then if namiCfg.harass.qHarass then qSpell(target) end if namiCfg.harass.wHarass then wSpell(target) end end end function AutoHeal() if Recalling() then return end if not ManaCheck(myHero, namiCfg.aHeal.manaHeal) then for i, ally in pairs(GetAllyHeroes()) do if namiCfg.aHeal.allyHeal.aUse then if not ally.dead then if HpCheck(ally, namiCfg.aHeal.allyHeal.aHpLeft) and GetDistance(ally) < WSpell.range and WSpell.ready then CastSpell(_W, ally) end end end end if namiCfg.aHeal.selfHeal.sUse then if not myHero.dead and WSpell.ready and HpCheck(myHero, namiCfg.aHeal.selfHeal.sHpLeft) then CastSpell(_W, myHero) end end end end function IsOnCC(target) assert(type(target) == 'userdata', "IsOnCC: Wrong type. Expected userdata got: "..tostring(type(target))) for i = 1, target.buffCount do tBuff = target:getBuff(i) if BuffIsValid(tBuff) and stunList[tBuff.name] then return true end end return false end function CustomTarget() if SelectedTarget ~= nil and ValidTarget(SelectedTarget, 1100) and (Ignore == nil or (Ignore.networkID ~= SelectedTarget.networkID)) then return SelectedTarget end if ts.target and not ts.target.dead and ts.target.type == myHero.type then return ts.target else return nil end end function OnWndMsg(msg, key) if msg == WM_LBUTTONDOWN then local minD = 0 for i, unit in ipairs(GetEnemyHeroes()) do if ValidTarget(unit) and not unit.dead then if GetDistance(unit, mousePos) <= minD or target == nil then minD = GetDistance(unit, mousePos) target = unit end end end if target and minD < 100 then if SelectedTarget and target.charName == SelectedTarget.charName then SelectedTarget = nil else SelectedTarget = target end end end end --------------------------------------- -- Spells config -- --------------------------------------- function qSpell(target) if target ~= nil and ValidTarget(target) and not target.dead and target.visible then if QSpell.ready then local CastPosition, HitChance, Position = VP:GetCircularCastPosition(target, QSpell.delay, QSpell.radius, QSpell.range, QSpell.speed, myHero, false) if CastPosition and HitChance >= 2 and GetDistance(CastPosition) <= QSpell.range then CastSpell(_Q, CastPosition.x, CastPosition.z) end end end end function wSpell(target) if target ~= nil and target.visible and ValidTarget(target) and not target.dead then if WSpell.ready then CastSpell(_W, target) end end end function eSpell(target) local ADdamage = 0 for i, ally in pairs(GetAllyHeroes()) do if ally ~= nil and ally.visible and not ally.dead and ESpell.ready then if ally.totalDamage > ADdamage and GetDistance(ally) < ESpell.range then ADC = ally ADdamage = ally.totalDamage end end end if ESpell.ready and ADC ~= nil and GetDistance(ADC) < ESpell.range and EnemyNear(700, ADC) and not ADC.dead then CastSpell(_E, ADC) elseif ESpell.ready and EnemyNear(700, myHero) then CastSpell(_E, myHero) end end function rSpell(target) if target ~= nil and ValidTarget(target) and not target.dead then local AOECastPosition, MainTargetHitChance, nTargets = VP:GetLineAOECastPosition(target, RSpell.delay, RSpell.radius, namiCfg.combo.rConfig.mnRange, RSpell.speed, myHero) if AOECastPosition ~= nil and MainTargetHitChance >= 2 and GetDistance(AOECastPosition) < namiCfg.combo.rConfig.mnRange and nTargets >= namiCfg.combo.rConfig.mnChamp and RSpell.ready then CastSpell(_R, AOECastPosition.x, AOECastPosition.z) end end end -- function autoQ() for i, unit in ipairs(GetEnemyHeroes()) do if unit ~= nil and unit.visible and not unit.dead and GetDistance(unit) < QSpell.range then if IsOnCC(unit) == true then local CastPosition, HitChance, Position = VP:GetCircularCastPosition(unit, QSpell.delay, QSpell.radius, QSpell.range, QSpell.speed, myHero, false) if CastPosition and HitChance >= 2 and GetDistance(CastPosition) <= QSpell.range then CastSpell(_Q, CastPosition.x, CastPosition.z) end end end end end --------------------------------------- -- Custom target arranger -- --------------------------------------- TargetTable ={ AP = {"Annie", "Ahri", "Akali", "Anivia", "Annie", "Brand", "Cassiopeia", "Diana", "Evelynn", "FiddleSticks", "Fizz", "Gragas", "Heimerdinger", "Karthus", "Kassadin", "Katarina", "Kayle", "Kennen", "Leblanc", "Lissandra", "Lux", "Malzahar", "Mordekaiser", "Morgana", "Nidalee", "Orianna", "Ryze", "Sion", "Swain", "Syndra", "Teemo", "TwistedFate", "Veigar", "Viktor", "Vladimir", "Xerath", "Ziggs", "Zyra", "Velkoz"}, Support = {"Alistar", "Blitzcrank", "Janna", "Karma", "Leona", "Lulu", "Nami", "Nunu", "Sona", "Soraka", "Taric", "Thresh", "Zilean", "Braum"}, Tank = {"Amumu", "Chogath", "DrMundo", "Galio", "Hecarim", "Malphite", "Maokai", "Nasus", "Rammus", "Sejuani", "Nautilus", "Shen", "Singed", "Skarner", "Volibear", "Warwick", "Yorick", "Zac", "Renekton"}, AD_Carry = {"Ashe", "Caitlyn", "Corki", "Draven", "Ezreal", "Graves", "Jayce", "Jinx", "KogMaw", "Kalista", "Lucian", "MasterYi", "MissFortune", "Quinn", "Shaco", "Sivir", "Talon","Tryndamere", "Tristana", "Twitch", "Urgot", "Varus", "Vayne", "Yasuo", "Zed"}, Bruiser = {"Aatrox", "Darius", "Elise", "Fiora", "Gangplank", "Garen", "Irelia", "JarvanIV", "Jax", "Khazix", "LeeSin", "Nocturne", "Olaf", "Poppy", "Pantheon", "Rengar", "Riven", "Rumble", "Shyvana", "Trundle", "Udyr", "Vi", "MonkeyKing", "XinZhao"} } function arrangeTarget() for i, enemy in ipairs(GetEnemyHeroes()) do SetPriority(TargetTable.AD_Carry, enemy, 1) SetPriority(TargetTable.AP, enemy, 1) SetPriority(TargetTable.Support, enemy, 2) SetPriority(TargetTable.Bruiser, enemy, 3) SetPriority(TargetTable.Tank, enemy, 4) end end function SetPriority(table, hero, priority) for i=1, #table, 1 do if hero.charName:find(table[i]) ~= nil then TS_SetHeroPriority(priority, hero.charName) end end end --------------------------------------- -- Updater -- --------------------------------------- function updateScript() SxUpdate(currentVersion, "raw.githubusercontent.com", "/kqmii/BolScripts/master/NamiMadness.version", "/kqmii/BolScripts/master/NamiMadness.lua", SCRIPT_PATH.."/" .. GetCurrentEnv().FILE_NAME, function(NewVersion) if NewVersion > currentVersion then print("NamiMadness: Updated to "..NewVersion..". Please Reload with 2x F9") else print("NamiMadness: You have the Latest Version") end end) end class "SxUpdate" function SxUpdate:__init(LocalVersion, Host, VersionPath, ScriptPath, SavePath, Callback) self.Callback = Callback self.LocalVersion = LocalVersion self.Host = Host self.VersionPath = VersionPath self.ScriptPath = ScriptPath self.SavePath = SavePath self.LuaSocket = require("socket") AddTickCallback(function() self:GetOnlineVersion() end) DelayAction(function() self.UpdateDone = true end, 2) end function SxUpdate:GetOnlineVersion() if self.UpdateDone then return end if not self.OnlineVersion and not self.VersionSocket then self.VersionSocket = self.LuaSocket.connect("sx-bol.eu", 80) self.VersionSocket:send("GET /BoL/TCPUpdater/GetScript.php?script="..self.Host..self.VersionPath.."&rand="..tostring(math.random(1000)).." HTTP/1.0\r\n\r\n") end if not self.OnlineVersion and self.VersionSocket then self.VersionSocket:settimeout(0, 'b') self.VersionSocket:settimeout(99999999, 't') self.VersionReceive, self.VersionStatus = self.VersionSocket:receive('*a') end if not self.OnlineVersion and self.VersionSocket and self.VersionStatus ~= 'timeout' then if self.VersionReceive then self.OnlineVersion = tonumber(string.sub(self.VersionReceive, string.find(self.VersionReceive, "")+11, string.find(self.VersionReceive, "")-1)) if not self.OnlineVersion then print(self.VersionReceive) end else print('AutoUpdate Failed') self.OnlineVersion = 0 end self:DownloadUpdate() end end function SxUpdate:DownloadUpdate() if self.OnlineVersion > self.LocalVersion then self.ScriptSocket = self.LuaSocket.connect("sx-bol.eu", 80) self.ScriptSocket:send("GET /BoL/TCPUpdater/GetScript.php?script="..self.Host..self.ScriptPath.."&rand="..tostring(math.random(1000)).." HTTP/1.0\r\n\r\n") self.ScriptReceive, self.ScriptStatus = self.ScriptSocket:receive('*a') self.ScriptRAW = string.sub(self.ScriptReceive, string.find(self.ScriptReceive, "")+11, string.find(self.ScriptReceive, "")-1) local ScriptFileOpen = io.open(self.SavePath, "w+") ScriptFileOpen:write(self.ScriptRAW) ScriptFileOpen:close() end if type(self.Callback) == 'function' then self.Callback(self.OnlineVersion) end self.UpdateDone = true end --------------------------------------- -- ScriptStatus -- --------------------------------------- assert(load(Base64Decode("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"), nil, "bt", _ENV))() ScriptStatus("OBECGDACBFD")