local version = "1.12"
--[[
Lux - Die Lady des Lichts
Author: Draconis
Version: 1.12
Copyright 2014
Dependency: Standalone
--]]
if myHero.charName ~= "Lux" then return end
require 'VPrediction'
require 'SxOrbwalk'
require 'Sourcelib'
------------------------------------------------------
-- Callbacks
------------------------------------------------------
function OnLoad()
print("Lux - Die Lady des Lichts: Sucessfully loaded!")
Variables()
Menu()
PriorityOnLoad()
end
function OnTick()
ComboKey = Settings.combo.comboKey
HarassKey = Settings.harass.harassKey
JungleClearKey = Settings.jungle.jungleKey
LaneClearKey = Settings.lane.laneKey
if ComboKey then
Combo(Target)
end
if HarassKey then
Harass(Target)
end
if JungleClearKey then
JungleClear()
end
if LaneClearKey then
LaneClear()
end
if Settings.ks.killSteal then
KillSteal()
end
Checks()
end
function OnDraw()
if not myHero.dead and not Settings.drawing.mDraw then
if SkillQ.ready and Settings.drawing.qDraw then
DrawCircle(myHero.x, myHero.y, myHero.z, SkillQ.range, RGB(Settings.drawing.qColor[2], Settings.drawing.qColor[3], Settings.drawing.qColor[4]))
end
if SkillW.ready and Settings.drawing.wDraw then
DrawCircle(myHero.x, myHero.y, myHero.z, SkillW.range, RGB(Settings.drawing.wColor[2], Settings.drawing.wColor[3], Settings.drawing.wColor[4]))
end
if SkillE.ready and Settings.drawing.eDraw then
DrawCircle(myHero.x, myHero.y, myHero.z, SkillE.range, RGB(Settings.drawing.eColor[2], Settings.drawing.eColor[3], Settings.drawing.eColor[4]))
end
if SkillR.ready and Settings.drawing.rDraw then
DrawCircle(myHero.x, myHero.y, myHero.z, SkillR.range, RGB(Settings.drawing.rColor[2], Settings.drawing.rColor[3], Settings.drawing.rColor[4]))
end
if Settings.drawing.Target and Target ~= nil and Target.type == myHero.type then
DrawCircle(Target.x, Target.y, Target.z, 70, 0xCE00FF)
end
if Settings.drawing.myHero then
DrawCircle(myHero.x, myHero.y, myHero.z, TrueRange(), RGB(Settings.drawing.myColor[2], Settings.drawing.myColor[3], Settings.drawing.myColor[4]))
end
end
end
------------------------------------------------------
-- Functions
------------------------------------------------------
function Combo(unit)
if ValidTarget(unit) and unit ~= nil and unit.type == myHero.type then
if Settings.combo.comboItems then
return
end
CastQ(unit)
CastE(unit)
if Settings.combo.useR then CastR(unit) end
end
end
function Harass(unit)
if ValidTarget(unit) and unit ~= nil and unit.type == myHero.type and not IsMyManaLow() then
if Settings.harass.useQ then CastQ(unit) end
if Settings.harass.useE then CastE(unit) end
end
end
function LaneClear()
enemyMinions:update()
if LaneClearKey and not IsMyManaLow("Clean") then
for i, minion in pairs(enemyMinions.objects) do
if ValidTarget(minion) and minion ~= nil then
if Settings.lane.laneQ and GetDistance(minion) <= SkillQ.range then
CastSpell(_Q, minion.x, minion.z)
end
if Settings.lane.laneE and GetDistance(minion) <= SkillE.range then
local BestPos, BestHit = GetBestCircularFarmPosition(SkillE.range, SkillE.width, enemyMinions.objects)
if BestPos ~= nil then
CastSpell(_E, BestPos.x, BestPos.z)
if TargetHaveBuff("LuxLightStrikeKugel", minion) then CastSpell(_E) end
end
end
end
end
end
end
function JungleClear()
if JungleClearKey and not IsMyManaLow("Jungle") then
local JungleMob = GetJungleMob()
if JungleMob ~= nil then
if Settings.jungle.jungleQ and GetDistance(JungleMob) <= SkillQ.range and SkillQ.ready then
CastSpell(_Q, JungleMob.x, JungleMob.z)
end
if Settings.jungle.jungleE and GetDistance(JungleMob) <= SkillE.range and SkillE.ready then
CastSpell(_E, JungleMob.x, JungleMob.z)
if TargetHaveBuff("LuxLightStrikeKugel", JungleMob) then CastSpell(_E) end
end
end
end
end
function CastQ(unit)
if unit ~= nil and GetDistance(unit) <= SkillQ.range and SkillQ.ready then
CastPosition, HitChance, Position = VP:GetLineCastPosition(unit, SkillQ.delay, SkillQ.width, SkillQ.range, SkillQ.speed, myHero, true)
if HitChance >= 2 then
CastSpell(_Q, CastPosition.x, CastPosition.z)
end
end
end
function CastE(unit)
if ComboKey and Settings.combo.useE == 1 then return end
if unit ~= nil and GetDistance(unit) <= SkillE.range and SkillE.ready then
local AOECastPosition, MainTargetHitChance, nTargets = VP:GetCircularAOECastPosition(unit, SkillE.delay, SkillE.width, SkillE.range, SkillE.speed, myHero)
if MainTargetHitChance >= 2 then
if ComboKey then
if Settings.combo.useE == 2 and nTargets >= 1 then
CastSpell(_E, AOECastPosition.x, AOECastPosition.z)
elseif Settings.combo.useE == 3 and nTargets >= 2 then
CastSpell(_E, AOECastPosition.x, AOECastPosition.z)
elseif Settings.combo.useE == 4 and nTargets >= 3 then
CastSpell(_E, AOECastPosition.x, AOECastPosition.z)
elseif Settings.combo.useE == 5 and nTargets >= 4 then
CastSpell(_E, AOECastPosition.x, AOECastPosition.z)
end
else
CastSpell(_E, AOECastPosition.x, AOECastPosition.z)
end
end
if unit.type ~= myHero.type and TargetHaveBuff("LuxLightStrikeKugel", unit) then CastSpell(_E) end
end
end
function CastR(unit)
if ComboKey and Settings.combo.useR ~= 2 then return end
if unit ~= nil and GetDistance(unit) <= SkillR.range and SkillR.ready then
CastPosition, HitChance, Position = VP:GetLineCastPosition(unit, SkillR.delay, SkillR.width, SkillR.range, SkillR.speed, myHero)
if HitChance >= 2 then
CastSpell(_R, CastPosition.x, CastPosition.z)
end
end
end
function KillSteal()
for _, enemy in ipairs(GetEnemyHeroes()) do
qDmg = getDmg("Q", enemy, myHero)
eDmg = getDmg("E", enemy, myHero)
rDmg = getDmg("R", enemy, myHero)
if ValidTarget(enemy) and enemy.visible then
if Settings.ks.Q and enemy.health <= qDmg and GetDistance(enemy) <= SkillQ.range then
CastQ(enemy)
elseif (Settings.ks.Q and Settings.ks.E) and enemy.health <= qDmg + eDmg and SkillQ.ready and SkillE.ready and GetDistance(enemy) <= SkillE.range then
CastQ(enemy)
CastE(enemy)
elseif Settings.ks.R and enemy.health < rDmg and GetDistance(enemy) <= SkillR.range then
CastR(enemy)
end
if Settings.ks.autoIgnite then
AutoIgnite(enemy)
end
end
end
end
function AutoIgnite(unit)
if ValidTarget(unit, Ignite.range) and unit.health <= 50 + (20 * myHero.level) then
if Ignite.ready then
CastSpell(Ignite.slot, unit)
end
end
end
function OnTargetGapclosing(unit, spell)
if SkillQ.ready and GetDistance(unit) <= SkillQ.range and not IsMyManaLow("PushAway") then
CastQ(unit)
end
end
------------------------------------------------------
-- Checks, menu & stuff
------------------------------------------------------
function Checks()
SkillQ.ready = (myHero:CanUseSpell(_Q) == READY)
SkillW.ready = (myHero:CanUseSpell(_W) == READY)
SkillE.ready = (myHero:CanUseSpell(_E) == READY)
SkillR.ready = (myHero:CanUseSpell(_R) == READY)
if myHero:GetSpellData(SUMMONER_1).name:find(Ignite.name) then
Ignite.slot = SUMMONER_1
elseif myHero:GetSpellData(SUMMONER_2).name:find(Ignite.name) then
Ignite.slot = SUMMONER_2
end
Ignite.ready = (Ignite.slot ~= nil and myHero:CanUseSpell(Ignite.slot) == READY)
TargetSelector:update()
Target = GetCustomTarget()
SxOrb:ForceTarget(Target)
if Settings.drawing.lfc.lfc then _G.DrawCircle = DrawCircle2 else _G.DrawCircle = _G.oldDrawCircle end
if (SkillE.pPos ~= nil and Target ~= nil) and GetDistance(Target, SkillE.pPos) < SkillE.width then CastSpell(_E) end
end
function IsMyManaLow(mode)
if mode == "Harass" then
if myHero.mana < (myHero.maxMana * ( Settings.harass.harassMana / 100)) then
return true
else
return false
end
elseif mode == "Clean" then
if myHero.mana < (myHero.maxMana * ( Settings.lane.laneMana / 100)) then
return true
else
return false
end
elseif mode == "Jungle" then
if myHero.mana < (myHero.maxMana * ( Settings.jungle.jungleMana / 100)) then
return true
else
return false
end
elseif mode == "PushAway" then
if myHero.mana < (myHero.maxMana * ( Settings.pushAway.pushAwayMana / 100)) then
return true
else
return false
end
end
end
function Menu()
Settings = scriptConfig("Lux - Die Lady des Lichts "..version.."", "DraconisLux")
Settings:addSubMenu("["..myHero.charName.."] - Combo Settings", "combo")
Settings.combo:addParam("comboKey", "Combo Key", SCRIPT_PARAM_ONKEYDOWN, false, 32)
Settings.combo:addParam("useR", "Use "..SkillR.name.." (R) in Combo", SCRIPT_PARAM_LIST, 1, { "No", "Burst" })
Settings.combo:addParam("useE", "Use "..SkillE.name.." (E) in Combo", SCRIPT_PARAM_LIST, 2, { "No", ">1 targets", ">2 targets", ">3 targets", ">4 targets" })
Settings.combo:addParam("comboItems", "Use Items in Combo", SCRIPT_PARAM_ONOFF, true)
Settings.combo:permaShow("comboKey")
Settings:addSubMenu("["..myHero.charName.."] - Harass Settings", "harass")
Settings.harass:addParam("harassKey", "Harass Key", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("C"))
Settings.harass:addParam("useQ", "Use "..SkillQ.name.." (Q) in Harass", SCRIPT_PARAM_ONOFF, true)
Settings.harass:addParam("useE", "Use "..SkillE.name.." (E) in Harass", SCRIPT_PARAM_ONOFF, false)
Settings.harass:addParam("harassMana", "Min. Mana Percent: ", SCRIPT_PARAM_SLICE, 50, 0, 100, 0)
Settings.harass:permaShow("harassKey")
Settings:addSubMenu("["..myHero.charName.."] - Push Away Settings", "pushAway")
AntiGapcloser(Settings.pushAway, OnTargetGapclosing)
Settings.pushAway:addParam("pushAwayMana", "Min. Mana Percent: ", SCRIPT_PARAM_SLICE, 50, 0, 100, 0)
Settings:addSubMenu("["..myHero.charName.."] - Lane Clear Settings", "lane")
Settings.lane:addParam("laneKey", "Lane Clear Key", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("V"))
Settings.lane:addParam("laneQ", "Clear with "..SkillQ.name.." (Q)", SCRIPT_PARAM_ONOFF, true)
Settings.lane:addParam("laneE", "Clear with "..SkillE.name.." (E)", SCRIPT_PARAM_ONOFF, true)
Settings.lane:addParam("laneMana", "Min. Mana Percent: ", SCRIPT_PARAM_SLICE, 30, 0, 100, 0)
Settings.lane:permaShow("laneKey")
Settings:addSubMenu("["..myHero.charName.."] - Jungle Clear Settings", "jungle")
Settings.jungle:addParam("jungleKey", "Jungle Clear Key", SCRIPT_PARAM_ONKEYDOWN, false, GetKey("V"))
Settings.jungle:addParam("jungleQ", "Clear with "..SkillQ.name.." (Q)", SCRIPT_PARAM_ONOFF, true)
Settings.jungle:addParam("jungleE", "Clear with "..SkillE.name.." (E)", SCRIPT_PARAM_ONOFF, true)
Settings.jungle:addParam("jungleMana", "Min. Mana Percent: ", SCRIPT_PARAM_SLICE, 50, 0, 100, 0)
Settings.jungle:permaShow("jungleKey")
Settings:addSubMenu("["..myHero.charName.."] - KillSteal Settings", "ks")
Settings.ks:addParam("killSteal", "Use Smart Kill Steal", SCRIPT_PARAM_ONOFF, true)
Settings.ks:addParam("Q", "Use "..SkillQ.name.." (Q)", SCRIPT_PARAM_ONOFF, true)
Settings.ks:addParam("E", "Use "..SkillE.name.." (E)", SCRIPT_PARAM_ONOFF, true)
Settings.ks:addParam("R", "Use "..SkillR.name.." (R)", SCRIPT_PARAM_ONOFF, true)
Settings.ks:addParam("autoIgnite", "Auto Ignite", SCRIPT_PARAM_ONOFF, true)
Settings.ks:permaShow("killSteal")
Settings:addSubMenu("["..myHero.charName.."] - Draw Settings", "drawing")
Settings.drawing:addParam("mDraw", "Disable All Range Draws", SCRIPT_PARAM_ONOFF, false)
Settings.drawing:addParam("Target", "Draw Circle on Target", SCRIPT_PARAM_ONOFF, true)
Settings.drawing:addParam("myHero", "Draw My Range", SCRIPT_PARAM_ONOFF, true)
Settings.drawing:addParam("myColor", "Draw My Range Color", SCRIPT_PARAM_COLOR, {255, 255, 255, 255})
Settings.drawing:addParam("qDraw", "Draw "..SkillQ.name.." (Q) Range", SCRIPT_PARAM_ONOFF, true)
Settings.drawing:addParam("qColor", "Draw "..SkillQ.name.." (Q) Color", SCRIPT_PARAM_COLOR, {255, 255, 255, 255})
Settings.drawing:addParam("eDraw", "Draw "..SkillE.name.." (E) Range", SCRIPT_PARAM_ONOFF, true)
Settings.drawing:addParam("eColor", "Draw "..SkillE.name.." (E) Color", SCRIPT_PARAM_COLOR, {255, 255, 255, 255})
Settings.drawing:addParam("rDraw", "Draw "..SkillR.name.." (R) Range", SCRIPT_PARAM_ONOFF, true)
Settings.drawing:addParam("rColor", "Draw "..SkillR.name.." (R) Color", SCRIPT_PARAM_COLOR, {255, 255, 255, 255})
Settings.drawing:addSubMenu("Lag Free Circles", "lfc")
Settings.drawing.lfc:addParam("lfc", "Lag Free Circles", SCRIPT_PARAM_ONOFF, false)
Settings.drawing.lfc:addParam("CL", "Quality", 4, 1500, 75, 2000, 0)
Settings.drawing.lfc:addParam("Width", "Width", 4, 1, 1, 10, 0)
Settings:addSubMenu("["..myHero.charName.."] - Orbwalking Settings", "Orbwalking")
SxOrb:LoadToMenu(Settings.Orbwalking)
TargetSelector = TargetSelector(TARGET_LESS_CAST, SkillR.range, DAMAGE_MAGIC, true)
TargetSelector.name = "Lux"
Settings:addTS(TargetSelector)
end
function Variables()
SkillQ = { name = "Light Binding", range = 1175, delay = 0.25, speed = 1200, width = 70, ready = false }
SkillW = { name = "Prismatic Barrier", range = 1075, delay = nil, speed = nil, width = nil, ready = false }
SkillE = { name = "Lucent Singularity", range = 1100, delay = 0.25, speed = 1300, width = 275, pPos = nil, ready = false }
SkillR = { name = "Final Spark", range = 3340, delay = 1.0, speed = math.huge, width = 190, ready = false }
Ignite = { name = "summonerdot", range = 600, slot = nil }
enemyMinions = minionManager(MINION_ENEMY, SkillQ.range, myHero, MINION_SORT_HEALTH_ASC)
VP = VPrediction()
JungleMobs = {}
JungleFocusMobs = {}
if GetGame().map.shortName == "twistedTreeline" then
TwistedTreeline = true
else
TwistedTreeline = false
end
_G.oldDrawCircle = rawget(_G, 'DrawCircle')
_G.DrawCircle = DrawCircle2
priorityTable = {
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"
},
AD_Carry = {
"Ashe", "Caitlyn", "Corki", "Draven", "Ezreal", "Graves", "Jayce", "Jinx", "KogMaw", "Lucian", "MasterYi", "MissFortune", "Pantheon", "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",
"Renekton", "Rengar", "Riven", "Rumble", "Shyvana", "Trundle", "Udyr", "Vi", "MonkeyKing", "XinZhao"
}
}
Items = {
BRK = { id = 3153, range = 450, reqTarget = true, slot = nil },
BWC = { id = 3144, range = 400, reqTarget = true, slot = nil },
DFG = { id = 3128, range = 750, reqTarget = true, slot = nil },
HGB = { id = 3146, range = 400, reqTarget = true, slot = nil },
RSH = { id = 3074, range = 350, reqTarget = false, slot = nil },
STD = { id = 3131, range = 350, reqTarget = false, slot = nil },
TMT = { id = 3077, range = 350, reqTarget = false, slot = nil },
YGB = { id = 3142, range = 350, reqTarget = false, slot = nil },
BFT = { id = 3188, range = 750, reqTarget = true, slot = nil },
RND = { id = 3143, range = 275, reqTarget = false, slot = nil }
}
if not TwistedTreeline then
JungleMobNames = {
["SRU_MurkwolfMini2.1.3"] = true,
["SRU_MurkwolfMini2.1.2"] = true,
["SRU_MurkwolfMini8.1.3"] = true,
["SRU_MurkwolfMini8.1.2"] = true,
["SRU_BlueMini1.1.2"] = true,
["SRU_BlueMini7.1.2"] = true,
["SRU_BlueMini21.1.3"] = true,
["SRU_BlueMini27.1.3"] = true,
["SRU_RedMini10.1.2"] = true,
["SRU_RedMini10.1.3"] = true,
["SRU_RedMini4.1.2"] = true,
["SRU_RedMini4.1.3"] = true,
["SRU_KrugMini11.1.1"] = true,
["SRU_KrugMini5.1.1"] = true,
["SRU_RazorbeakMini9.1.2"] = true,
["SRU_RazorbeakMini9.1.3"] = true,
["SRU_RazorbeakMini9.1.4"] = true,
["SRU_RazorbeakMini3.1.2"] = true,
["SRU_RazorbeakMini3.1.3"] = true,
["SRU_RazorbeakMini3.1.4"] = true
}
FocusJungleNames = {
["SRU_Blue1.1.1"] = true,
["SRU_Blue7.1.1"] = true,
["SRU_Murkwolf2.1.1"] = true,
["SRU_Murkwolf8.1.1"] = true,
["SRU_Gromp13.1.1"] = true,
["SRU_Gromp14.1.1"] = true,
["Sru_Crab16.1.1"] = true,
["Sru_Crab15.1.1"] = true,
["SRU_Red10.1.1"] = true,
["SRU_Red4.1.1"] = true,
["SRU_Krug11.1.2"] = true,
["SRU_Krug5.1.2"] = true,
["SRU_Razorbeak9.1.1"] = true,
["SRU_Razorbeak3.1.1"] = true,
["SRU_Dragon6.1.1"] = true,
["SRU_Baron12.1.1"] = true
}
else
FocusJungleNames = {
["TT_NWraith1.1.1"] = true,
["TT_NGolem2.1.1"] = true,
["TT_NWolf3.1.1"] = true,
["TT_NWraith4.1.1"] = true,
["TT_NGolem5.1.1"] = true,
["TT_NWolf6.1.1"] = true,
["TT_Spiderboss8.1.1"] = true
}
JungleMobNames = {
["TT_NWraith21.1.2"] = true,
["TT_NWraith21.1.3"] = true,
["TT_NGolem22.1.2"] = true,
["TT_NWolf23.1.2"] = true,
["TT_NWolf23.1.3"] = true,
["TT_NWraith24.1.2"] = true,
["TT_NWraith24.1.3"] = true,
["TT_NGolem25.1.1"] = true,
["TT_NWolf26.1.2"] = true,
["TT_NWolf26.1.3"] = true
}
end
for i = 0, objManager.maxObjects do
local object = objManager:getObject(i)
if object and object.valid and not object.dead then
if FocusJungleNames[object.name] then
JungleFocusMobs[#JungleFocusMobs+1] = object
elseif JungleMobNames[object.name] then
JungleMobs[#JungleMobs+1] = object
end
end
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
function arrangePrioritys()
for i, enemy in ipairs(GetEnemyHeroes()) do
SetPriority(priorityTable.AD_Carry, enemy, 1)
SetPriority(priorityTable.AP, enemy, 2)
SetPriority(priorityTable.Support, enemy, 3)
SetPriority(priorityTable.Bruiser, enemy, 4)
SetPriority(priorityTable.Tank, enemy, 5)
end
end
function arrangePrioritysTT()
for i, enemy in ipairs(GetEnemyHeroes()) do
SetPriority(priorityTable.AD_Carry, enemy, 1)
SetPriority(priorityTable.AP, enemy, 1)
SetPriority(priorityTable.Support, enemy, 2)
SetPriority(priorityTable.Bruiser, enemy, 2)
SetPriority(priorityTable.Tank, enemy, 3)
end
end
function UseItems(unit)
if unit ~= nil then
for _, item in pairs(Items) do
item.slot = GetInventorySlotItem(item.id)
if item.slot ~= nil then
if item.reqTarget and GetDistance(unit) < item.range then
CastSpell(item.slot, unit)
elseif not item.reqTarget then
if (GetDistance(unit) - getHitBoxRadius(myHero) - getHitBoxRadius(unit)) < 50 then
CastSpell(item.slot)
end
end
end
end
end
end
function getHitBoxRadius(target)
return GetDistance(target.minBBox, target.maxBBox)/2
end
function PriorityOnLoad()
if heroManager.iCount < 10 or (TwistedTreeline and heroManager.iCount < 6) then
print("Lux - Die Lady des Lichts: Too few champions to arrange priority.")
elseif heroManager.iCount == 6 then
arrangePrioritysTT()
else
arrangePrioritys()
end
end
function GetJungleMob()
for _, Mob in pairs(JungleFocusMobs) do
if ValidTarget(Mob, SkillQ.range) then return Mob end
end
for _, Mob in pairs(JungleMobs) do
if ValidTarget(Mob, SkillQ.range) then return Mob end
end
end
function OnCreateObj(obj)
if obj.valid then
if FocusJungleNames[obj.name] then
JungleFocusMobs[#JungleFocusMobs+1] = obj
elseif JungleMobNames[obj.name] then
JungleMobs[#JungleMobs+1] = obj
end
if obj.name:find("LuxLightstrike_tar_green") then
SkillE.pPos = obj
elseif obj.name:find("LuxBlitz_nova") then
SkillE.pPos = nil
end
end
end
function OnDeleteObj(obj)
for i, Mob in pairs(JungleMobs) do
if obj.name == Mob.name then
table.remove(JungleMobs, i)
end
end
for i, Mob in pairs(JungleFocusMobs) do
if obj.name == Mob.name then
table.remove(JungleFocusMobs, i)
end
end
if obj.name:find("LuxBlitz_nova") then
SkillE.pPos = nil
end
end
function GetBestCircularFarmPosition(range, radius, objects)
local BestPos
local BestHit = 0
for i, object in ipairs(objects) do
local hit = CountObjectsNearPos(object.pos or object, range, radius, objects)
if hit > BestHit then
BestHit = hit
BestPos = Vector(object)
if BestHit == #objects then
break
end
end
end
return BestPos, BestHit
end
function CountObjectsNearPos(pos, range, radius, objects)
local n = 0
for i, object in ipairs(objects) do
if GetDistanceSqr(pos, object) <= radius * radius then
n = n + 1
end
end
return n
end
-- Trees
function GetCustomTarget()
TargetSelector:update()
if _G.MMA_Target and _G.MMA_Target.type == myHero.type then return _G.MMA_Target end
if _G.AutoCarry and _G.AutoCarry.Crosshair and _G.AutoCarry.Attack_Crosshair and _G.AutoCarry.Attack_Crosshair.target and _G.AutoCarry.Attack_Crosshair.target.type == myHero.type then return _G.AutoCarry.Attack_Crosshair.target end
return TargetSelector.target
end
function TrueRange()
return myHero.range + GetDistance(myHero, myHero.minBBox)
end
-- Barasia, vadash, viseversa
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, Settings.drawing.lfc.Width, color, Settings.drawing.lfc.CL)
end
end