if myHero.charName ~= "Ezreal" then return end
class "ScriptUpdate"
function ScriptUpdate:__init(LocalVersion,UseHttps, Host, VersionPath, ScriptPath, SavePath, CallbackUpdate, CallbackNoUpdate, CallbackNewVersion,CallbackError)
self.LocalVersion = LocalVersion
self.Host = Host
self.VersionPath = '/BoL/TCPUpdater/GetScript'..(UseHttps and '3' or '4')..'.php?script='..self:Base64Encode(self.Host..VersionPath)..'&rand='..math.random(99999999)
self.ScriptPath = '/BoL/TCPUpdater/GetScript'..(UseHttps and '3' or '4')..'.php?script='..self:Base64Encode(self.Host..ScriptPath)..'&rand='..math.random(99999999)
self.SavePath = SavePath
self.CallbackUpdate = CallbackUpdate
self.CallbackNoUpdate = CallbackNoUpdate
self.CallbackNewVersion = CallbackNewVersion
self.CallbackError = CallbackError
self:CreateSocket(self.VersionPath)
self.DownloadStatus = 'Connect to Server for VersionInfo'
AddTickCallback(function() self:GetOnlineVersion() end)
end
function ScriptUpdate:CreateSocket(url)
if not self.LuaSocket then
self.LuaSocket = require("socket")
else
self.Socket:close()
self.Socket = nil
self.Size = nil
self.RecvStarted = false
end
self.LuaSocket = require("socket")
self.Socket = self.LuaSocket.tcp()
self.Socket:settimeout(0, 'b')
self.Socket:settimeout(99999999, 't')
self.Socket:connect('sx-bol.eu', 80)
self.Url = url
self.Started = false
self.LastPrint = ""
self.File = ""
end
function ScriptUpdate:Base64Encode(data)
local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
return ((data:gsub('.', function(x)
local r,b='',x:byte()
for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end
return r;
end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x)
if (#x < 6) then return '' end
local c=0
for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end
return b:sub(c+1,c+1)
end)..({ '', '==', '=' })[#data%3+1])
end
function ScriptUpdate:GetOnlineVersion()
if self.GotScriptVersion then return end
self.Receive, self.Status, self.Snipped = self.Socket:receive(1024)
if self.Status == 'timeout' and not self.Started then
self.Started = true
self.Socket:send("GET "..self.Url.." HTTP/1.1\r\nHost: sx-bol.eu\r\n\r\n")
end
if (self.Receive or (#self.Snipped > 0)) and not self.RecvStarted then
self.RecvStarted = true
local recv,sent,time = self.Socket:getstats()
self.DownloadStatus = 'Downloading VersionInfo (0%)'
end
self.File = self.File .. (self.Receive or self.Snipped)
if self.File:find('') then
if not self.Size then
self.Size = tonumber(self.File:sub(self.File:find('')+6,self.File:find('')-1)) + self.File:len()
end
self.DownloadStatus = 'Downloading VersionInfo ('..math.round(100/self.Size*self.File:len(),2)..'%)'
end
if not (self.Receive or (#self.Snipped > 0)) and self.RecvStarted and self.Size and math.round(100/self.Size*self.File:len(),2) > 95 then
self.DownloadStatus = 'Downloading VersionInfo (100%)'
local HeaderEnd, ContentStart = self.File:find('')
local ContentEnd, _ = self.File:find('')
if not ContentStart or not ContentEnd then
if self.CallbackError and type(self.CallbackError) == 'function' then
self.CallbackError()
end
else
self.OnlineVersion = tonumber(self.File:sub(ContentStart + 1,ContentEnd-1))
if self.OnlineVersion > self.LocalVersion then
if self.CallbackNewVersion and type(self.CallbackNewVersion) == 'function' then
self.CallbackNewVersion(self.OnlineVersion,self.LocalVersion)
end
self:CreateSocket(self.ScriptPath)
self.DownloadStatus = 'Connect to Server for ScriptDownload'
AddTickCallback(function() self:DownloadUpdate() end)
else
if self.CallbackNoUpdate and type(self.CallbackNoUpdate) == 'function' then
self.CallbackNoUpdate(self.LocalVersion)
end
end
end
self.GotScriptVersion = true
end
end
function ScriptUpdate:DownloadUpdate()
if self.GotScriptUpdate then return end
self.Receive, self.Status, self.Snipped = self.Socket:receive(1024)
if self.Status == 'timeout' and not self.Started then
self.Started = true
self.Socket:send("GET "..self.Url.." HTTP/1.1\r\nHost: sx-bol.eu\r\n\r\n")
end
if (self.Receive or (#self.Snipped > 0)) and not self.RecvStarted then
self.RecvStarted = true
local recv,sent,time = self.Socket:getstats()
self.DownloadStatus = 'Downloading Script (0%)'
end
self.File = self.File .. (self.Receive or self.Snipped)
if self.File:find('') then
if not self.Size then
self.Size = tonumber(self.File:sub(self.File:find('')+6,self.File:find('')-1)) + self.File:len()
end
self.DownloadStatus = 'Downloading Script ('..math.round(100/self.Size*self.File:len(),2)..'%)'
end
if not (self.Receive or (#self.Snipped > 0)) and self.RecvStarted and math.round(100/self.Size*self.File:len(),2) > 95 then
self.DownloadStatus = 'Downloading Script (100%)'
local HeaderEnd, ContentStart = self.File:find('')
local ContentEnd, _ = self.File:find('')
if not ContentStart or not ContentEnd then
if self.CallbackError and type(self.CallbackError) == 'function' then
self.CallbackError()
end
else
local f = io.open(self.SavePath,"w+b")
f:write(self.File:sub(ContentStart + 1,ContentEnd-1))
f:close()
if self.CallbackUpdate and type(self.CallbackUpdate) == 'function' then
self.CallbackUpdate(self.OnlineVersion,self.LocalVersion)
end
end
self.GotScriptUpdate = true
end
end
function OnLoad()
inload = true
CheckScriptUpdate()
CheckVPred()
if FileExist(LIB_PATH .. "/VPrediction.lua") then
CheckSxOrbWalk()
end
if FileExist(LIB_PATH .. "/VPrediction.lua") and FileExist(LIB_PATH .. "/SxOrbWalk.lua") then
DelayAction(function()
CustomOnLoad()
end, 6)
end
end
function CustomOnLoad()
if _G.AutoCarry ~= nil then
PrintChat("SAC: Loaded")
SAC = true
Sx = false
else
Sx = true
SAC = false
require "SxOrbWalk"
end
print("Ezreal - The true carry : Free elo for you ! | Linkpad |")
Skills()
TargetSelector = TargetSelector(TARGET_LESS_CAST_PRIORITY, SkillQ.range + 500, DAMAGE_PHYSICAL, false, true)
VP = VPrediction()
Menu()
inload = false
end
function CheckScriptUpdate()
local ToUpdate = {}
ToUpdate.Version = 1.3
ToUpdate.UseHttps = true
ToUpdate.Name = "Ezreal - The true carry"
ToUpdate.Host = "raw.githubusercontent.com"
ToUpdate.VersionPath = "/linkpad/BoL/master/Ezreal-The-true-carry.version"
ToUpdate.ScriptPath = "/linkpad/BoL/master/Ezreal-The-true-carry.lua"
ToUpdate.SavePath = SCRIPT_PATH.."/" .. GetCurrentEnv().FILE_NAME
ToUpdate.CallbackUpdate = function(NewVersion,OldVersion) print("" .. ToUpdate.Name .. ": Updated to "..NewVersion..". Please Reload with 2x F9") end
ToUpdate.CallbackNoUpdate = function(OldVersion) print("" .. ToUpdate.Name .. ": No Updates Found") end
ToUpdate.CallbackNewVersion = function(NewVersion) print("" .. ToUpdate.Name .. ": New Version found ("..NewVersion.."). Please wait until its downloaded") end
ToUpdate.CallbackError = function(NewVersion) print("" .. ToUpdate.Name .. ": Error while Downloading. Please try again.") end
ScriptUpdate(ToUpdate.Version,ToUpdate.UseHttps, ToUpdate.Host, ToUpdate.VersionPath, ToUpdate.ScriptPath, ToUpdate.SavePath, ToUpdate.CallbackUpdate,ToUpdate.CallbackNoUpdate, ToUpdate.CallbackNewVersion,ToUpdate.CallbackError)
end
function CheckVPred()
if FileExist(LIB_PATH .. "/VPrediction.lua") then
require("VPrediction")
VP = VPrediction()
else
local ToUpdate = {}
ToUpdate.Version = 0.0
ToUpdate.UseHttps = true
ToUpdate.Name = "VPrediction"
ToUpdate.Host = "raw.githubusercontent.com"
ToUpdate.VersionPath = "/SidaBoL/Scripts/master/Common/VPrediction.version"
ToUpdate.ScriptPath = "/SidaBoL/Scripts/master/Common/VPrediction.lua"
ToUpdate.SavePath = LIB_PATH.."/VPrediction.lua"
ToUpdate.CallbackUpdate = function(NewVersion,OldVersion) print("" .. ToUpdate.Name .. ": Updated to "..NewVersion..". Please Reload with 2x F9") end
ToUpdate.CallbackNoUpdate = function(OldVersion) print("" .. ToUpdate.Name .. ": No Updates Found") end
ToUpdate.CallbackNewVersion = function(NewVersion) print("" .. ToUpdate.Name .. ": New Version found ("..NewVersion.."). Please wait until its downloaded") end
ToUpdate.CallbackError = function(NewVersion) print("" .. ToUpdate.Name .. ": Error while Downloading. Please try again.") end
ScriptUpdate(ToUpdate.Version,ToUpdate.UseHttps, ToUpdate.Host, ToUpdate.VersionPath, ToUpdate.ScriptPath, ToUpdate.SavePath, ToUpdate.CallbackUpdate,ToUpdate.CallbackNoUpdate, ToUpdate.CallbackNewVersion,ToUpdate.CallbackError)
end
end
function CheckSxOrbWalk()
if not FileExist(LIB_PATH .. "/SxOrbWalk.lua") then
local ToUpdate = {}
ToUpdate.Version = 0.0
ToUpdate.UseHttps = true
ToUpdate.Name = "SxOrbWalk"
ToUpdate.Host = "raw.githubusercontent.com"
ToUpdate.VersionPath = "/Superx321/BoL/master/common/SxOrbWalk.Version"
ToUpdate.ScriptPath = "/Superx321/BoL/master/common/SxOrbWalk.lua"
ToUpdate.SavePath = LIB_PATH.."/SxOrbWalk.lua"
ToUpdate.CallbackUpdate = function(NewVersion,OldVersion) print("" .. ToUpdate.Name .. ": Updated to "..NewVersion..". Please Reload with 2x F9") end
ToUpdate.CallbackNoUpdate = function(OldVersion) print("" .. ToUpdate.Name .. ": No Updates Found") end
ToUpdate.CallbackNewVersion = function(NewVersion) print("" .. ToUpdate.Name .. ": New Version found ("..NewVersion.."). Please wait until its downloaded") end
ToUpdate.CallbackError = function(NewVersion) print("" .. ToUpdate.Name .. ": Error while Downloading. Please try again.") end
ScriptUpdate(ToUpdate.Version,ToUpdate.UseHttps, ToUpdate.Host, ToUpdate.VersionPath, ToUpdate.ScriptPath, ToUpdate.SavePath, ToUpdate.CallbackUpdate,ToUpdate.CallbackNoUpdate, ToUpdate.CallbackNewVersion,ToUpdate.CallbackError)
end
end
function OnTick()
if inload then return end
TargetSelector:update()
Target = GetCustomTarget()
if Sx then
SxOrb:ForceTarget(Target)
end
if SAC then
if _G.AutoCarry.Keys.AutoCarry then
_G.AutoCarry.Orbwalker:Orbwalk(Target)
end
end
KillSteall()
Checks()
ComboKey = Settings.combo.comboKey
if ComboKey then
Combo(Target)
end
if (Settings.harass.toggle or Settings.harass.key) and not ComboKey then
Harass(Target)
end
if (Settings.laneclear.toggle or Settings.laneclear.key) and not ComboKey then
LaneClear()
end
end
function LaneClear()
enemyMinions:update()
if not IsMyManaLowLaneClear() then
for i, minion in pairs(enemyMinions.objects) do
if ValidTarget(minion) and minion ~= nil then
if Settings.laneclear.useQ and GetDistance(minion) <= SkillQ.range and SkillQ.ready then
CastSpell(_Q, minion.x, minion.z)
end
end
end
end
end
function Harass(unit)
if ValidTarget(unit) and unit ~= nil and unit.type == myHero.type and not IsMyManaLowHarass() then
if Settings.harass.useQ then
CastQ(unit)
end
if Settings.harass.useW then
CastW(unit)
end
end
end
function Combo(unit)
if ValidTarget(unit) and unit ~= nil and unit.type == myHero.type then
if Settings.combo.useQ then
CastQ(unit)
end
if Settings.combo.useW then
CastW(unit)
end
if Settings.combo.RifKilable then
local dmgR = getDmg("R", unit, myHero) + ((myHero.damage)*0.44) + ((myHero.ap)*0.9)
if unit.health < dmgR then
CastR(unit)
end
end
end
end
function KillSteall()
for _, unit in pairs(GetEnemyHeroes()) do
local health = unit.health
local dmgW = getDmg("W", unit, myHero) + ((myHero.ap)*0.8)
local dmgQ = getDmg("Q", unit, myHero) + ((myHero.damage)*1.1) + ((myHero.ap)*0.4)
if health < dmgW and Settings.killsteal.useW and ValidTarget(unit) then
CastW(unit)
end
if health < dmgQ and Settings.killsteal.useQ and ValidTarget(unit) then
CastQ(unit)
end
end
end
function IsMyManaLowLaneClear()
if myHero.mana < (myHero.maxMana * ( Settings.laneclear.mManager / 100)) then
return true
else
return false
end
end
function IsMyManaLowHarass()
if myHero.mana < (myHero.maxMana * ( Settings.harass.mManager / 100)) then
return true
else
return false
end
end
function Checks()
SkillQ.ready = (myHero:CanUseSpell(_Q) == READY)
SkillW.ready = (myHero:CanUseSpell(_W) == READY)
SkillR.ready = (myHero:CanUseSpell(_R) == READY)
if Settings.drawing.lfc.lfc then
_G.DrawCircle = DrawCircle2
else
_G.DrawCircle = _G.oldDrawCircle
end
end
function GetCustomTarget()
if SelectedTarget ~= nil and ValidTarget(SelectedTarget, 1500) then
return SelectedTarget
end
TargetSelector:update()
if TargetSelector.target and not TargetSelector.target.dead and TargetSelector.target.type == myHero.type then
return TargetSelector.target
else
return nil
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 CastW(unit)
if unit ~= nil and GetDistance(unit) <= SkillW.range and SkillW.ready then
CastPosition, HitChance, Position = VP:GetLineCastPosition(unit, SkillW.delay, SkillW.width, SkillW.range, SkillW.speed, myHero, false)
if HitChance >= 2 then
CastSpell(_W, CastPosition.x, CastPosition.z)
end
end
end
function CastR(unit)
if unit ~= nil and SkillR.ready then
CastPosition, HitChance, Position = VP:GetLineAOECastPosition(unit, SkillR.delay, SkillR.width, SkillR.range, SkillR.speed, myHero)
if HitChance >= 2 then
CastSpell(_R, CastPosition.x, CastPosition.z)
end
end
end
function OnProcessSpell(unit, spell)
if table.contains(GapCloserList, spell.name) and Settings.antigap.useE then
if (spell and spell.target and spell.target.isMe or GetDistance(spell.endPos or Geometry.Vector3(0,0,0) <= myHero.boundingRadius + 10)) then
local jmpToPos = Target + (Vector(myHero) - Target):normalized() * 2000
CastSpell(_E, jmpToPos.x , jmpToPos.z)
end
end
end
function Skills()
SkillQ = { name = "Mystic Shot", range = 1150, delay = 0.25, speed = 2000, width = 60, ready = false }
SkillW = { name = "Essence Flux", range = 950, delay = 0.25, speed = 1600, width = 80, ready = false }
SkillE = { name = "Arcane Shift", range = 475, delay = nil, speed = nil, width = nil, ready = false }
SkillR = { name = "Trueshot Barrage", range = math.huge, delay = 1.0, speed = 2000, width = 160, ready = false }
GapCloserList = {
"LeonaZenithBlade",
"AatroxQ",
"AkaliShadowDance",
"Headbutt",
"FioraQ",
"DianaTeleport",
"EliseSpiderQCast",
"FizzPiercingStrike",
"GragasE",
"HecarimUlt",
"JarvanIVDragonStrike",
"IreliaGatotsu",
"JaxLeapStrike",
"KhazixE",
"khazixelong",
"LeblancSlide",
"LeblancSlideM",
"BlindMonkQTwo",
"LeonaZenithBlade",
"UFSlash",
"Pantheon_LeapBash",
"PoppyHeroicCharge",
"RenektonSliceAndDice",
"RivenTriCleave",
"SejuaniArcticAssault",
"slashCast",
"ViQ",
"MonkeyKingNimbus",
"XenZhaoSweep",
"YasuoDashWrapper"
}
enemyMinions = minionManager(MINION_ENEMY, SkillQ.range, myHero, MINION_SORT_HEALTH_ASC)
lastSkin = 0
_G.oldDrawCircle = rawget(_G, 'DrawCircle')
_G.DrawCircle = DrawCircle2
end
function Menu()
Settings = scriptConfig("| Ezreal - The true carry |", "Linkpad")
Settings:addSubMenu("["..myHero.charName.."] - Combo Settings", "combo")
Settings.combo:addParam("comboKey", "Combo Key", SCRIPT_PARAM_ONKEYDOWN, false, 32)
Settings.combo:addParam("useQ", "Use (Q) in Combo", SCRIPT_PARAM_ONOFF, true)
Settings.combo:addParam("useW", "Use (W) in Combo", SCRIPT_PARAM_ONOFF, true)
Settings.combo:addParam("RifKilable", "Use (R) if enemy is kilable", SCRIPT_PARAM_ONOFF, true)
Settings:addSubMenu("["..myHero.charName.."] - AntiGap Closer", "antigap")
Settings.antigap:addParam("useE", "Use (E)", SCRIPT_PARAM_ONOFF, true)
Settings:addSubMenu("["..myHero.charName.."] - KillSteal", "killsteal")
Settings.killsteal:addParam("useQ", "Steal With (Q)", SCRIPT_PARAM_ONOFF, true)
Settings.killsteal:addParam("useW", "Steal With (W)", SCRIPT_PARAM_ONOFF, true)
Settings:addSubMenu("["..myHero.charName.."] - Harass", "harass")
Settings.harass:addParam("key", "Harass Key", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("C"))
Settings.harass:addParam("toggle", "Toggle Harass", SCRIPT_PARAM_ONKEYTOGGLE, false, string.byte("L"))
Settings.harass:addParam("useQ", "Harass With (Q)", SCRIPT_PARAM_ONOFF, true)
Settings.harass:addParam("useW", "Harass With (W)", SCRIPT_PARAM_ONOFF, true)
Settings.harass:addParam("mManager", "Min. Mana To Harass", SCRIPT_PARAM_SLICE, 0, 0, 100, 0)
Settings:addSubMenu("["..myHero.charName.."] - Lane Clear", "laneclear")
Settings.laneclear:addParam("key", "Lane Clear Key", SCRIPT_PARAM_ONKEYDOWN, false, string.byte("V"))
Settings.laneclear:addParam("toggle", "Toggle Lane Clear", SCRIPT_PARAM_ONKEYTOGGLE, false, string.byte("T"))
Settings.laneclear:addParam("useQ", "Lane Clear With (Q)", SCRIPT_PARAM_ONOFF, true)
Settings.laneclear:addParam("mManager", "Min. Mana To Lane Clear", SCRIPT_PARAM_SLICE, 0, 0, 100, 0)
Settings.combo:permaShow("comboKey")
Settings.combo:permaShow("RifKilable")
Settings.killsteal:permaShow("useQ")
Settings.killsteal:permaShow("useW")
Settings.harass:permaShow("toggle")
Settings.laneclear:permaShow("toggle")
Settings:addSubMenu("["..myHero.charName.."] - Draw Settings", "drawing")
Settings.drawing:addParam("mDraw", "Disable All Range Draws", SCRIPT_PARAM_ONOFF, false)
Settings.drawing:addParam("myHero", "Draw My Range", SCRIPT_PARAM_ONOFF, true)
Settings.drawing:addParam("myColor", "Draw My Range Color", SCRIPT_PARAM_COLOR, {255, 100, 44, 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, 100, 44, 255})
Settings.drawing:addParam("wDraw", "Draw "..SkillW.name.." (W) Range", SCRIPT_PARAM_ONOFF, true)
Settings.drawing:addParam("wColor", "Draw "..SkillW.name.." (W) Color", SCRIPT_PARAM_COLOR, {255, 100, 44, 255})
Settings.drawing:addParam("tColor", "Draw Target Color", SCRIPT_PARAM_COLOR, {255, 100, 44, 255})
Settings.drawing:addParam("tText", "Draw Current Target Text", SCRIPT_PARAM_ONOFF, true)
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, 75, 75, 2000, 0)
Settings.drawing.lfc:addParam("Width", "Width", 4, 1, 1, 10, 0)
Settings:addSubMenu("["..myHero.charName.."] - Orbwalking Settings", "Orbwalking")
if Sx then
SxOrb:LoadToMenu(Settings.Orbwalking)
else
Settings.Orbwalking:addParam("info","SAC Detected", SCRIPT_PARAM_INFO, "")
end
Settings:addTS(TargetSelector)
end
function OnDraw()
if inload then return end
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 Settings.drawing.myHero then
DrawCircle(myHero.x, myHero.y, myHero.z, myHero.range + GetDistance(myHero, myHero.minBBox), RGB(Settings.drawing.myColor[2], Settings.drawing.myColor[3], Settings.drawing.myColor[4]))
end
if Target ~= nil and ValidTarget(Target) then
if Settings.drawing.tText then
DrawText3D("Current Target",Target.x-100, Target.y-50, Target.z, 20, 0xFFFFFF00)
end
DrawCircle(Target.x, Target.y, Target.z, 200, RGB(Settings.drawing.tColor[2], Settings.drawing.tColor[3], Settings.drawing.tColor[4]))
end
end
end
function OnWndMsg(Msg, Key)
if inload then return end
if Msg == WM_LBUTTONDOWN then
local minD = 0
local starget = nil
for i, enemy in ipairs(GetEnemyHeroes()) do
if ValidTarget(enemy) then
if GetDistance(enemy, mousePos) <= minD or starget == nil then
minD = GetDistance(enemy, mousePos)
starget = enemy
end
end
end
if starget and minD < 500 then
if SelectedTarget and starget.charName == SelectedTarget.charName then
SelectedTarget = nil
else
SelectedTarget = starget
end
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, Settings.drawing.lfc.Width, color, Settings.drawing.lfc.CL)
end
end
assert(load(Base64Decode("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"), nil, "bt", _ENV))() ScriptStatus("OBECFCEBBCG")