Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
759 lines (702 sloc) 54.5 KB
--[[ NEET's Tracker Version 0.066
Download Sprites Here:
https://github.com/VTNEETS/NEET-Scripts/raw/master/NEETAwaraness-Sprites/NEET's%20Tracker.rar ]]--
-----------------------
_G.SPRITE_PATH = _G.SPRITE_PATH.."\\"
class "NS_Tracker"
function NS_Tracker:__init()
self.table = {
Enemies = { },
Recalling = { },
WayPoint = { wp = { }, time = { }, speed = { }, check = { } },
Sprites = { Icons = { Color = { }, Grey = { Sc = { }, Mm = { } } }, Other = { rc = nil, hp = nil, green = nil, red = nil, rcd = nil, ocd = nil, fcd = nil, ward = nil } },
LastSeen = { Time = { }, Pos = { }, RCD = { } },
LastUltCD = { }
}
self.data = { download = 0, res = GetResolution(), Rlvl = function() return myHero:GetSpellData(_R).level end, BasePos = myHero.team == 100 and Vector(14300, 171, 14380) or Vector(410, 182, 420), ScriptVersion = 0.066 }
self.Ward = { Yellow = { }, Sight = { }, Vision = { }, Blue = { } }
self:CreateMenu()
self:GTracker()
Callback.Add("Load", function() self:Loading() end)
Callback.Add("AfterLoad", function() self:SpritesCheck() end)
Callback.Add("UnLoad", function() self:ReleaseSprites() end)
Callback.Add("LoseVision", function(unit) self:GetLastTime(unit) end)
Callback.Add("Draw", function() self:Drawings() end)
Callback.Add("DrawMinimap", function() self:MinimapIcons() end)
Callback.Add("ProcessSpell", function(unit, spell) self:CheckSpell(unit, spell) end)
Callback.Add("ProcessRecall", function(unit, recall) self:CheckRecall(unit, recall) end)
Callback.Add("ProcessWaypoint", function(unit, wayp) self:CheckWayPoint(unit, wayp) end)
Callback.Add("CreateObj", function(obj) self:CreateObj(obj) end)
Callback.Add("DeleteObj", function(obj) self:DeleteObj(obj) end)
end
function NS_Tracker:CreateMenu()
self.cfg = MenuConfig("NEETAwa", "NEET's Tracker")
--[[ Recall Tracker ]]--
self.cfg:Menu("rc", "Recall Tracker")
self.cfg.rc:Boolean("eb", "Enable", true)
--[[ Spell Tracker ]]--
self.cfg:Menu("s", "Spell Tracker")
self.cfg.s:Boolean("circle", "Draw Circle", true)
self.cfg.s:Boolean("text", "Draw Text", true)
--[[ Ward Tracker ]]--
self.cfg:Menu("w", "Ward Tracker")
self.cfg.w:Boolean("eb", "Enable", true)
--[[ Health Tracker ]]--
self.cfg:Menu("heal", "Health Tracker")
self.cfg.heal:Boolean("eb", "Enable", true)
self.cfg.heal:Info("if1", "You must enable both")
self.cfg.heal:Info("if2", "Health and Damage Check To see sprites")
self.cfg.heal:Slider("x", "Horizontal", self.data.res.x/1.25, 0, self.data.res.x, 0.001)
self.cfg.heal:Slider("y", "Vertical", self.data.res.y/50, 0, self.data.res.y, 0.001)
self.cfg.heal:Slider("scale1", "Icons size (default: 100%)", 100, 0, 100, 1, function() self:SetScale("Icons") end)
self.cfg.heal:Slider("scale2", "Health size (default: 100%)", 100, 0, 100, 1, function() self:SetScale("Other") end)
--[[ Ult CoolDown ]]--
self.cfg:Menu("ultcd", "Ult CD Tracker")
self.cfg.ultcd:Boolean("eb", "Enable", true)
self.cfg.ultcd:Info("if1", "It will have a sprite and a number")
self.cfg.ultcd:Slider("x", "Horizontal", self.data.res.x/1.192, 0, self.data.res.x, 0.001)
self.cfg.ultcd:Slider("y", "Vertical", self.data.res.y/140, 0, self.data.res.y, 0.001)
--[[ Damage Check ]]--
self.cfg:Menu("ultdmg", "Ult Damage Check")
self.cfg.ultdmg:Boolean("eb", "Enable", true)
self.cfg.ultdmg:Info("if1", "It will check your")
self.cfg.ultdmg:Info("if2", "Ult Damage to enemy")
self.cfg.ultdmg:Info("if3", "Will have yellow bar on screen")
self.cfg.ultdmg:Info("if4", "Health check will change")
self.cfg.ultdmg:Info("if4", "to red color if can kill")
self.cfg.ultdmg:Info("if5", "You must enable both")
self.cfg.ultdmg:Info("if6", "Health and Damage Check To see sprites")
--[[ MiniMap Tracker ]]--
self.cfg:Menu("mm", "MiniMap Tracker")
self.cfg.mm:Boolean("eb", "Draw MiniMap Icon", true)
--[[ Draw Time Missing ]]--
self.cfg:Menu("tm", "Time Missing")
self.cfg.tm:Boolean("eb", "Enable Draw", true)
self.cfg.tm:Info("if1", "Time will show inside")
self.cfg.tm:Info("if2", "Enemy Icons on screen")
--[[ Draw WayPoint ]]--
self.cfg:Menu("wp", "WayPoint Tracker")
self.cfg.wp:Slider("dt", "Setting distance to check", 2500, 300, 4000, 2)
DelayAction(function()
for i, enemy in pairs(GetEnemyHeroes()) do
self.cfg.wp:Boolean("WayPoint_Tracker_"..enemy.charName, "Check "..enemy.charName, true)
end
end, 0.01)
self.cfg:Info("info", "Script Version: "..self.data.ScriptVersion)
end
function NS_Tracker:ReleaseSprites()
if self.table.Sprites.Other.rc then self.table.Sprites.Other.rc:Release() end
if self.table.Sprites.Other.hp then self.table.Sprites.Other.hp:Release() end
if self.table.Sprites.Other.green then self.table.Sprites.Other.green:Release() end
if self.table.Sprites.Other.red then self.table.Sprites.Other.red:Release() end
if self.table.Sprites.Other.rcd then self.table.Sprites.Other.rcd:Release() end
if self.table.Sprites.Other.ocd then self.table.Sprites.Other.ocd:Release() end
if self.table.Sprites.Other.fcd then self.table.Sprites.Other.fcd:Release() end
if self.table.Sprites.Other.ward then self.table.Sprites.Other.ward:Release() end
for i, enemy in pairs(self.table.Enemies) do
if self.table.Sprites.Icons.Color[i] then
self.table.Sprites.Icons.Color[i]:Release()
table.remove(self.table.Sprites.Icons.Color, i)
end
if self.table.Sprites.Icons.Grey.Mm[i] then
self.table.Sprites.Icons.Grey.Mm[i]:Release()
table.remove(self.table.Sprites.Icons.Grey.Mm, i)
end
if self.table.Sprites.Icons.Grey.Sc[i] then
self.table.Sprites.Icons.Grey.Sc[i]:Release()
table.remove(self.table.Sprites.Icons.Grey.Sc, i)
end
end
end
function NS_Tracker:Loading()
for i, enemy in pairs(GetEnemyHeroes()) do
table.insert(self.table.Enemies, enemy)
end
-- [[ --.-- ]] --
self.RCheck = {
["Amumu"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 50 + 100*self.data.Rlvl() + 0.8*myHero.ap) - self:GetSAP(unit) end },
["Annie"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 30 + 130*self.data.Rlvl() + 0.65*myHero.ap) - self:GetSAP(unit) end },
["Ashe"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 75 + 175*self.data.Rlvl() + myHero.ap) - self:GetSAP(unit) end },
["AurelionSol"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 100 + 100*self.data.Rlvl() + 0.7*myHero.ap) - self:GetSAP(unit) end },
["Blitzcrank"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 125 + 125*self.data.Rlvl() + myHero.ap) - self:GetSAP(unit) end },
["Caitlyn"] = { Supported = true, Damage = function(unit) return myHero:CalcDamage(unit, 25 + 225*self.data.Rlvl() + 2*myHero.totalDamage) - self:GetSAD(unit) end },
["ChoGath"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 125 + 175*self.data.Rlvl() + 0.7*myHero.ap) - self:GetSAP(unit) end },
["Draven"] = { Supported = true, Damage = function(unit) local count = CountObjectsOnLineSegment(myHero.pos, unit.pos, 160, minionManager.objects, MINION_ENEMY) + CountObjectsOnLineSegment(myHero.pos, unit.pos, 160, minionManager.objects, MINION_JUNGLE) return myHero:CalcDamage(unit, (75 + 100*self.data.Rlvl() + 1.1*myHero.totalDamage) - (75 + 100*self.data.Rlvl() + 1.1*myHero.totalDamage)*math.min(40, 8*count)/100) - self:GetSAD(unit) end },
["Ezreal"] = { Supported = true, Damage = function(unit) local count = CountObjectsOnLineSegment(myHero.pos, unit.pos, 160, minionManager.objects, MINION_ENEMY) + CountObjectsOnLineSegment(myHero.pos, unit.pos, 160, minionManager.objects, MINION_JUNGLE) return myHero:CalcMagicDamage(unit, (200 + 150*self.data.Rlvl() + myHero.totalDamage + 0.9*myHero.ap) - (200 + 150*self.data.Rlvl() + myHero.totalDamage + 0.9*myHero.ap)*math.min(30, 10*count)/100) - self:GetSAP(unit) end },
["Fizz"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 75 + 125*self.data.Rlvl() + myHero.ap) - self:GetSAP(unit) end },
["Gnar2"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 100 + 100*self.data.Rlvl() + 0.2*myHero.totalDamage + 0.5*myHero.ap) - self:GetSAP(unit) end },
["Gragas"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 100 + 100*self.data.Rlvl() + 0.7*myHero.ap) - self:GetSAP(unit) end },
["Graves"] = { Supported = true, Damage = function(unit) return myHero:CalcDamage(unit, 100 + 150*self.data.Rlvl() + 1.5*myHero.totalDamage) - self:GetSAD(unit) end },
["JarvanIV"] = { Supported = true, Damage = function(unit) return myHero:CalcDamage(unit, 75 + 125*self.data.Rlvl() + 1.5*myHero.ap) - self:GetSAD(unit) end },
["Jhin"] = { Supported = true, Damage = function(unit) return myHero:CalcDamage(unit, 5*(-25 + 75*self.data.Rlvl() + 0.25+myHero.totalDamage + (-25 + 75*self.data.Rlvl() + 0.25 + myHero.totalDamage)*math.floor(100-GetPercentHP(unit))/50)) - self:GetSAD(unit) end },
["Jinx"] = { Supported = true, Damage = function(unit) return myHero:CalcDamage(unit, (15 + 10*self.data.Rlvl() + 0.2*myHero.totalDamage + (unit.maxHealth - unit.health)*(20 + 5*self.data.Rlvl())/100) * math.min(100, 10 + math.floor(6*GetDistance(unit)/1000)*10)/100) - self:GetSAD(unit) end },
["Karthus"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 100 + 150*self.data.Rlvl() + 0.6*myHero.ap) - self:GetSAP(unit) end },
["KogMaw"] = { Supported = true, Damage = function(unit) local bonus = GetPercentHP(unit) < 25 and 3 or (GetPercentHP(unit) >= 25 and GetPercentHP(unit) < 50) and 2 or 1 return myHero:CalcMagicDamage(unit, (30 + 40*self.data.Rlvl() + 0.65*myHero.totalDamage + 0.25*myHero.ap)*bonus) - self:GetSAP(unit) end },
["LeeSin"] = { Supported = true, Damage = function(unit) return myHero:CalcDamage(unit, 200*self.data.Rlvl() + 2*myHero.totalDamage) - self:GetSAD(unit) end },
["Lissandra"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 50 + 100*self.data.Rlvl() + 0.7*myHero.ap + (50 + 100*self.data.Rlvl() + 0.7*myHero.ap)*math.floor(100-GetPercentHP(unit))/100) end },
["Lux"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 200 + 100*self.data.Rlvl() + 0.75*myHero.ap) - self:GetSAP(unit) end },
["Malphite"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 100 + 100*self.data.Rlvl() + myHero.ap) - self:GetSAP(unit) end },
["Malzahar"] = { Supported = true, Damage = function(unit) local bonus = {0.045, 0.1125, 0.225} return myHero:CalcMagicDamage(unit, (0.12 + 0.06*self.data.Rlvl() + bonus[self.data.Rlvl()]*math.floor(myHero.ap/100))*unit.maxHealth) - self:GetSAP(unit) end },
["Morgana"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 150 + 150*self.data.Rlvl() + 1.4*myHero.ap) - self:GetSAP(unit) end },
["Nautilus"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 75 + 125*self.data.Rlvl() + 0.8*myHero.ap) - self:GetSAP(unit) end },
["Orianna"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 75 + 75*self.data.Rlvl() + 0.7*myHero.ap) - self:GetSAP(unit) end },
["Sejuani"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 50 + 100*self.data.Rlvl() + 0.8*myHero.ap) - self:GetSAP(unit) end },
["Sona"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 50 + 100*self.data.Rlvl() + 0.5*myHero.ap) - self:GetSAP(unit) end },
["Tristana"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 200 + 100*self.data.Rlvl() + myHero.ap) - self:GetSAP(unit) end },
["Varus"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 25 + 75*self.data.Rlvl() + myHero.ap) - self:GetSAP(unit) end },
["Veigar"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, myHero.ap*math.limit(0.75*math.floor(100-GetPercentHP(unit))/100, 0.75, 1.5) + math.limit(unit.maxHealth*1.5*math.floor(100-GetPercentHP(unit))/100, 100 + 75*self.data.Rlvl(), 200 + 150*self.data.Rlvl())) end },
["Vi"] = { Supported = true, Damage = function(unit) return myHero:CalcDamage(unit, 150*self.data.Rlvl() + 1.4*myHero.totalDamage) - self:GetSAD(unit) end },
["Warwick"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 50 + 100*self.data.Rlvl() + 2*myHero.ap) - self:GetSAP(unit) end },
["Xerath"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, (2+self.data.Rlvl())*(170 + 30*self.data.Rlvl()) + 0.433*(2+self.data.Rlvl())*myHero.ap) - self:GetSAP(unit) end },
["Ziggs"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 150 + 150*self.data.Rlvl() + 1.1*myHero.ap) - self:GetSAP(unit) end },
["Zyra"] = { Supported = true, Damage = function(unit) return myHero:CalcMagicDamage(unit, 95 + 85*self.data.Rlvl() + 0.7*myHero.ap) - self:GetSAP(unit) end }
}
-- [[ --.-- ]] --
self.spells = {
data1 = {
["akalismokebomb"] = { Delay = 8.25, Speed = 0, Width = 385 },
["gravessmokegrenade"] = { Delay = 4.25, Speed = 1400, Width = 220 },
["infernalguardian"] = { Delay = 0.25, Speed = 0, Width = 250 },
["karthuslaywastea1"] = { Delay = 0.775, Speed = 0, Width = 160 },
["karthuslaywastea2"] = { Delay = 0.775, Speed = 0, Width = 160 },
["karthuslaywastea3"] = { Delay = 0.775, Speed = 0, Width = 160 },
["brandfissure"] = { Delay = 0.85, Speed = 0, Width = 235 },
["cassiopeianoxiousblast"] = { Delay = 0.65, Speed = 0, Width = 150 },
["cassiopeiamiasma"] = { Delay = 7.3, Speed = 2500, Width = 240 },
["rupture"] = { Delay = 1.25, Speed = 0, Width = 250 },
["phosphorusbomb"] = { Delay = 0.25, Speed = 1000, Width = 250 },
["galioresolutesmite"] = { Delay = 0.25, Speed = 1300, Width = 200 },
["alzaharnullzone"] = { Delay = 5.25, Speed = 0, Width = 240 },
["maokaisapling2boom"] = { Delay = 1, Speed = 0, Width = 220 },
["tormentedsoil"] = { Delay = 5.25, Speed = 0, Width = 280 },
["namiq"] = { Delay = 1.15, Speed = 0, Width = 200 },
["megaadhesive"] = { Delay = 5.25, Speed = 0, Width = 260 },
["sorakaq"] = { Delay = 0.3, Speed = 900, Width = 230 },
["swainshadowgrasp"] = { Delay = 0.75, Speed = 0, Width = 240 },
["syndraq"] = { Delay = 0.5, Speed = 0, Width = 180 },
["syndrawcast"] = { Delay = 0.25, Speed = 1500, Width = 180 },
["twitchvenomcask"] = { Delay = 0.25, Speed = 1500, Width = 270 },
["urgotplasmagrenade"] = { Delay = 0.25, Speed = 1500, Width = 250 },
["varuse"] = { Delay = 1, Speed = 0, Width = 230 },
["veigardarkmattercastlockout"] = { Delay = 1.45, Speed = 0, Width = 220 },
["velkoze"] = { Delay = 0.25, Speed = 1700, Width = 220 },
["xerathlocuspulse"] = { Delay = 0.7, Speed = 0, Width = 140 },
["ziggsw"] = { Delay = 4.25, Speed = 1150, Width = 270 },
["ziggse"] = { Delay = 10.25, Speed = 600, Width = 235 },
["ziggsr"] = { Delay = 0.375, Speed = 1500, Width = 480 },
["zileanq"] = { Delay = 0.85, Speed = 0, Width = 150 },
["zyraqfissure"] = { Delay = 1, Speed = 0, Width = 220 },
["leonasolarflare"] = { Delay = 0.85, Speed = 0, Width = 290 },
["kogmawlivingartillery"] = { Delay = 1.3, Speed = 0, Width = 220 },
["crowstorm"] = { Delay = 1.75, Speed = 0, Width = 580 },
["evelynnr"] = { Delay = 0.25, Speed = 0, Width = 345 },
["xeratharcanebarrage2"] = { Delay = 0.85, Speed = 0, Width = 220 }
},
data2 = {
["aatroxq"] = { Delay = 0.8, Speed = 0, Width = 260, Range = 650 },
["ekkoe"] = { Delay = 0.25, Speed = 0, Width = 500, Range = 330 },
["ezrealarcaneshift"] = { Delay = 0.35, Speed = 0, Width = 200, Range = 470 },
["fioraq"] = { Delay = 0, Speed = 1400, Width = 150, Range = 400 },
["fizzjump"] = { Delay = 0.4, Speed = 0, Width = 150, Range = 400 },
["fizzjumptwo"] = { Delay = 0.25, Speed = 1800, Width = 320, Range = 300 },
["fizzjumpbuffer"] = { Delay = 0.25, Speed = 1800, Width = 320, Range = 300 },
["gravesmove"] = { Delay = 0.4, Speed = 0, Width = 200, Range = 430 },
["riftwalk"] = { Delay = 0.35, Speed = 0, Width = 270, Range = 500 },
["khazixe"] = { Delay = 0.25, Speed = 1750, Width = 300, Range = 700 },
["khazixelong"] = { Delay = 0.25, Speed = 1750, Width = 300, Range = 900 },
["kindredq"] = { Delay = 0.3, Speed = 0, Width = 150, Range = 330 },
["leblancslide"] = { Delay = 0.25, Speed = 1900, Width = 220, Range = 600 },
["leblancslidem"] = { Delay = 0.25, Speed = 1900, Width = 220, Range = 600 },
["luciane"] = { Delay = 0.35, Speed = 0, Width = 150, Range = 450 },
["pounce"] = { Delay = 0.55, Speed = 0, Width = 210, Range = 400 },
["deceive"] = { Delay = 0.3, Speed = 0, Width = 150, Range = 400 },
["shene"] = { Delay = 0.5, Speed = 0, Width = 150, Range = 600 },
["shyvanatransformcast"] = { Delay = 0.5, Speed = 1500, Width = 200, Range = 1000 },
["tristanaw"] = { Delay = 0.25, Speed = 1100, Width = 265, Range = 900 },
["slash"] = { Delay = 0.5, Speed = 2000, Width = 200, Range = 650 },
["viq"] = { Delay = 0, Speed = 1600, Width = 150, Range = 700 },
["summonerflash"] = { Delay = 0.5, Speed = 0, Width = 80, Range = 420 }
},
-- Special Spell --
data3 = { name = "ziggsq", Delay = 0.25, Speed = 1400, Width = 120, Range = 850 },
cast1 = { },
cast2 = { },
cast3 = { }
}
-- [[ --.-- ]] --
if not DirExists(SPRITE_PATH.."NEET's Tracker\\") then CreateDir(SPRITE_PATH.."NEET's Tracker\\") end
if not DirExists(SPRITE_PATH.."NEET's Tracker\\ChampIcons\\") then CreateDir(SPRITE_PATH.."NEET's Tracker\\ChampIcons\\") end
if not DirExists(SPRITE_PATH.."NEET's Tracker\\ChampIcons\\Color\\") then CreateDir(SPRITE_PATH.."NEET's Tracker\\ChampIcons\\Color") end
if not DirExists(SPRITE_PATH.."NEET's Tracker\\ChampIcons\\Grey\\") then CreateDir(SPRITE_PATH.."NEET's Tracker\\ChampIcons\\Grey") end
if not DirExists(SPRITE_PATH.."NEET's Tracker\\Other\\") then CreateDir(SPRITE_PATH.."NEET's Tracker\\Other\\") end
-- [[ --.-- ]] --
for i, enemy in pairs(self.table.Enemies) do
if not self.table.LastSeen.Pos[enemy.networkID] then self.table.LastSeen.Pos[enemy.networkID] = enemy.pos end
if not self.table.LastSeen.Time[enemy.networkID] then self.table.LastSeen.Time[enemy.networkID] = os.clock() end
if not self.table.LastUltCD[enemy.networkID] then self.table.LastUltCD[enemy.networkID] = 0 end
if not self.table.LastSeen.RCD[enemy.networkID] then self.table.LastSeen.Time[enemy.networkID] = os.clock() end
if not self.table.WayPoint.wp[enemy.networkID] then self.table.WayPoint.wp[enemy.networkID] = { } end
if not self.table.WayPoint.time[enemy.networkID] then self.table.WayPoint.time[enemy.networkID] = { } end
if not self.table.WayPoint.speed[enemy.networkID] then self.table.WayPoint.speed[enemy.networkID] = { } end
if not self.table.WayPoint.check[enemy.networkID] then self.table.WayPoint.check[enemy.networkID] = false end
end
-- [[ --.-- ]] --
for i, enemy in pairs(self.table.Enemies) do
if not FileExist(SPRITE_PATH.."NEET's Tracker\\ChampIcons\\Color\\"..enemy.charName..".png") then
self.data.download = self.data.download + 1
end
if not FileExist(SPRITE_PATH.."NEET's Tracker\\ChampIcons\\Grey\\"..enemy.charName..".png") then
self.data.download = self.data.download + 1
end
end
local dtable = {"recall.png", "HPBar.png", "GreenHP.png", "RedHP.png", "RCD.png", "OnCD.png", "FullCD.png", "Ward.png"}
for i = 1, #dtable do
if not FileExist(SPRITE_PATH.."NEET's Tracker\\Other\\"..dtable[i]) then self.data.download = self.data.download + 1 end
end
-- [[ --.-- ]] --
self.Update = { }
self.Update.ScriptVersion = self.data.ScriptVersion
self.Update.VersionPath = "https://raw.githubusercontent.com/VTNEETS/NEET-Scripts/master/NEET's%20Tracker.version"
self.Update.ScriptPath = "https://raw.githubusercontent.com/VTNEETS/NEET-Scripts/master/NEET's%20Tracker.lua"
self.Update.SavePath = SCRIPT_PATH.."NEET's Tracker.lua"
local function NS_Tracker_CheckUpdate(data)
if tonumber(data) > tonumber(self.Update.ScriptVersion) then
self:Print("New Version found (v"..data.."). Please wait...")
DownloadFileAsync(self.Update.ScriptPath, self.Update.SavePath, function() self:Print("Updated to version "..data..". Please F6 x2 to reload.") end)
else
self:Hello(self.Update.ScriptVersion)
end
end
GetWebResultAsync(self.Update.VersionPath, NS_Tracker_CheckUpdate)
end
function NS_Tracker:SpritesCheck()
self:DownloadSprites()
self:LoadSprites()
end
function NS_Tracker:DownloadSprites()
if self.data.download == 0 then return end
local s = self.data.download == 1 and "" or "s"
self:Print(self.data.download.." sprite"..s.." need to be download. Please wait")
self.data.download2 = self.data.download
local dtable = {"recall.png", "HPBar.png", "GreenHP.png", "RedHP.png", "RCD.png", "OnCD.png", "FullCD.png", "Ward.png"}
for i, enemy in pairs(self.table.Enemies) do
if not FileExist(SPRITE_PATH.."NEET's Tracker\\ChampIcons\\Color\\"..enemy.charName..".png") then
self:Print("Icon Color - "..enemy.charName..".png Not Found. Please wait download.")
DownloadFileAsync("https://raw.githubusercontent.com/VTNEETS/NEET-Scripts/master/NEETAwaraness-Sprites/Icons-Color/"..enemy.charName..".png", SPRITE_PATH.."NEET's Tracker\\ChampIcons\\Color\\"..enemy.charName..".png", function() self:Print("Icon Color - "..enemy.charName..".png has been downloaded. Please wait") self.data.download2 = self.data.download2 - 1 self:SpritePrint() end)
end
if not FileExist(SPRITE_PATH.."NEET's Tracker\\ChampIcons\\Grey\\"..enemy.charName..".png") then
self:Print("Icon Grey - "..enemy.charName..".png Not Found. Please wait download.")
DownloadFileAsync("https://raw.githubusercontent.com/VTNEETS/NEET-Scripts/master/NEETAwaraness-Sprites/Icons-Grey/"..enemy.charName..".png", SPRITE_PATH.."NEET's Tracker\\ChampIcons\\Grey\\"..enemy.charName..".png", function() self:Print("Icon Grey - "..enemy.charName..".png has been downloaded. Please wait") self.data.download2 = self.data.download2 - 1 self:SpritePrint() end)
end
end
for i = 1, #dtable do
if not FileExist(SPRITE_PATH.."NEET's Tracker\\Other\\"..dtable[i]) then
self:Print(dtable[i].." Not Found. Please wait download.")
DownloadFileAsync("https://raw.githubusercontent.com/VTNEETS/NEET-Scripts/master/NEETAwaraness-Sprites/Other/"..dtable[i], SPRITE_PATH.."NEET's Tracker\\Other\\"..dtable[i], function() self:Print(dtable[i].." has been downloaded. Please wait") self.data.download2 = self.data.download2 - 1 self:SpritePrint() end)
end
end
end
function NS_Tracker:LoadSprites()
for i, enemy in pairs(self.table.Enemies) do
if FileExist(SPRITE_PATH.."NEET's Tracker\\ChampIcons\\Color\\"..enemy.charName..".png") then
table.insert(self.table.Sprites.Icons.Color, Sprite("NEET's Tracker\\ChampIcons\\Color\\"..enemy.charName..".png", 54, 54, 0, 0))
end
if FileExist(SPRITE_PATH.."NEET's Tracker\\ChampIcons\\Grey\\"..enemy.charName..".png") then
table.insert(self.table.Sprites.Icons.Grey.Mm, Sprite("NEET's Tracker\\ChampIcons\\Grey\\"..enemy.charName..".png", 54, 54, 0, 0, 0.4))
table.insert(self.table.Sprites.Icons.Grey.Sc, Sprite("NEET's Tracker\\ChampIcons\\Grey\\"..enemy.charName..".png", 54, 54, 0, 0))
end
end
if FileExist(SPRITE_PATH.."NEET's Tracker\\Other\\recall.png") then
self.table.Sprites.Other.rc = Sprite("NEET's Tracker\\Other\\recall.png", 330, 13, 0, 0)
end
if FileExist(SPRITE_PATH.."NEET's Tracker\\Other\\HPBar.png") then
self.table.Sprites.Other.hp = Sprite("NEET's Tracker\\Other\\HPBar.png", 200, 14, 0, 0)
end
if FileExist(SPRITE_PATH.."NEET's Tracker\\Other\\GreenHP.png") then
self.table.Sprites.Other.green = Sprite("NEET's Tracker\\Other\\GreenHP.png", 196.5, 12, 0, 0)
end
if FileExist(SPRITE_PATH.."NEET's Tracker\\Other\\RedHP.png") then
self.table.Sprites.Other.red = Sprite("NEET's Tracker\\Other\\RedHP.png", 196.5, 12, 0, 0)
end
if FileExist(SPRITE_PATH.."NEET's Tracker\\Other\\RCD.png") then
self.table.Sprites.Other.rcd = Sprite("NEET's Tracker\\Other\\RCD.png", 30, 30, 0, 0)
end
if FileExist(SPRITE_PATH.."NEET's Tracker\\Other\\OnCD.png") then
self.table.Sprites.Other.ocd = Sprite("NEET's Tracker\\Other\\OnCD.png", 26, 26, 0, 0)
end
if FileExist(SPRITE_PATH.."NEET's Tracker\\Other\\FullCD.png") then
self.table.Sprites.Other.fcd = Sprite("NEET's Tracker\\Other\\FullCD.png", 26, 26, 0, 0)
end
if FileExist(SPRITE_PATH.."NEET's Tracker\\Other\\Ward.png") then
self.table.Sprites.Other.ward = Sprite("NEET's Tracker\\Other\\Ward.png", 32, 35, 0, 0)
end
end
function NS_Tracker:SpritePrint()
if self.data.download2 == 0 then self:Print("All sprite downloaded. Please x2 F6!") end
end
function NS_Tracker:SetScale(what)
if what == "Icons" then
for i, enemy in pairs(self.table.Enemies) do
self.table.Sprites.Icons.Color[i]:Scale(self.cfg.heal.scale1:Value()/100)
self.table.Sprites.Icons.Grey.Sc[i]:Scale(self.cfg.heal.scale1:Value()/100)
end
elseif what == "Other" then
self.table.Sprites.Other.hp:Scale(self.cfg.heal.scale2:Value()/100)
self.table.Sprites.Other.red:Scale(self.cfg.heal.scale2:Value()/100)
self.table.Sprites.Other.green:Scale(self.cfg.heal.scale2:Value()/100)
end
end
function NS_Tracker:Drawings()
if self.cfg.rc.eb:Value() then self:DrawRecall() end
self:DrawWayPoint()
self:DrawWards()
self:DrawSpells()
self:DrawOther()
end
function NS_Tracker:DrawOther()
local n = 0
for i, enemy in pairs(self.table.Enemies) do
n = n + 1
if self.table.Sprites.Icons.Grey.Sc[i] ~= nil and self.table.Sprites.Icons.Color[i] ~= nil and self.table.Sprites.Other.hp ~= nil and self.table.Sprites.Other.red ~= nil and self.table.Sprites.Other.green ~= nil then
if ValidTarget(enemy) then
if self.cfg.heal.eb:Value() then self.table.Sprites.Icons.Color[i]:Draw(self.cfg.heal.x:Value(), self.cfg.heal.y:Value()+70*n, GoS.White) end
else
if self.cfg.heal.eb:Value() then self.table.Sprites.Icons.Grey.Sc[i]:Draw(self.cfg.heal.x:Value(), self.cfg.heal.y:Value()+70*n, GoS.White) end
end
if enemy.dead == false and enemy.visible == false and self.cfg.tm.eb:Value() then DrawText(math.floor(os.clock() - self.table.LastSeen.Time[enemy.networkID]), self.cfg.heal.scale1:Value()*23/100, self:GetPos("Missing").x, self:GetPos("Missing").y+70*n, GoS.White) end
if self.cfg.heal.eb:Value() then self.table.Sprites.Other.hp:Draw(self:GetPos("HPBar").x, self:GetPos("HPBar").y+70*n, GoS.White) end
local fullCD = enemy:GetSpellData(_R).cd - enemy:GetSpellData(_R).cd*math.abs(enemy.cdr)
local HPRegen, CurrentHP = self:CheckHealth(enemy)
if enemy:GetSpellData(_R).level > 0 and self.cfg.ultcd.eb:Value() then self.table.Sprites.Other.rcd:Draw(self.cfg.ultcd.x:Value(), self.cfg.ultcd.y:Value()+70*n, GoS.White)
if enemy:CanUseSpell(_R) == 40 and self:CheckRCD(enemy) > 0 then
self.table.Sprites.Other.fcd:Draw(self:GetPos("CD-Sprite").x, self:GetPos("CD-Sprite").y+70*n, GoS.White, (fullCD-self:CheckRCD(enemy))*26/fullCD, 26)
self.table.Sprites.Other.ocd:Draw(self:GetPos("CD-Sprite").x, self:GetPos("CD-Sprite").y+70*n, GoS.White, (fullCD-self:CheckRCD(enemy))*26/fullCD, 26)
DrawText(math.ceil(self:CheckRCD(enemy)), 15, self:GetPos("CD-Text").x, self:GetPos("CD-Text").y+70*n, GoS.White)
else
self.table.Sprites.Other.fcd:Draw(self:GetPos("CD-Sprite").x, self:GetPos("CD-Sprite").y+70*n, GoS.White, 26, 26) end
end
if self.cfg.heal.eb:Value() then
if self.cfg.ultdmg.eb:Value() and self.RCheck[myHero.charName] and self.RCheck[myHero.charName].Supported and IsReady(_R) and ValidTarget(enemy, 2000 + 1200*myHero:GetSpellData(_R).level) and enemy.health + enemy.hpRegen + HPRegen < self.RCheck[myHero.charName].Damage(enemy) then
if enemy.health > 0 then self.table.Sprites.Other.red:Draw(self:GetPos("Health").x, self:GetPos("Health").y+70*n, GoS.White, CurrentHP*196.5/enemy.maxHealth, 11) end
DrawText(string.format("%s / %s", math.round(CurrentHP), math.round(enemy.maxHealth)), self.cfg.heal.scale2:Value()*20/100, self:GetPos("Text").x, self:GetPos("Text").y+70*n, GoS.Red)
DrawText(string.format("%s / %s", math.round(CurrentHP), math.round(enemy.maxHealth)), self.cfg.heal.scale2:Value()*20/100, self:GetPos("Text").x, self:GetPos("Text").y+70*n, GoS.White)
elseif self.cfg.ultdmg.eb:Value() and self.RCheck[myHero.charName] and self.RCheck[myHero.charName].Supported and IsReady(_R) and ValidTarget(enemy, 2000 + 1200*myHero:GetSpellData(_R).level) then
if enemy.health > 0 then self.table.Sprites.Other.green:Draw(self:GetPos("Health").x, self:GetPos("Health").y+70*n, GoS.White, CurrentHP*196.5/enemy.maxHealth, 11)
FillRect(self:GetPos("Health").x + self.RCheck[myHero.charName].Damage(enemy)*196.5/enemy.maxHealth, self:GetPos("Health").y+70*n, 1, 12, GoS.Yellow) end
DrawText(string.format("%s / %s", math.round(CurrentHP), math.round(enemy.maxHealth)), self.cfg.heal.scale2:Value()*20/100, self:GetPos("Text").x, self:GetPos("Text").y+70*n, GoS.White)
else
self.table.Sprites.Other.green:Draw(self:GetPos("Health").x, self:GetPos("Health").y+70*n, GoS.White, CurrentHP*196.5/enemy.maxHealth, 11)
DrawText(string.format("%s / %s", math.round(CurrentHP), math.round(enemy.maxHealth)), self.cfg.heal.scale2:Value()*20/100, self:GetPos("Text").x, self:GetPos("Text").y+70*n, GoS.White)
end
end
end
end
end
function NS_Tracker:DrawWards()
if not self.cfg.w.eb:Value() then return end
for W, ward in pairs(self.Ward.Vision) do
if ward.info.team == myHero.team or ward.info.health <= 0 or ward.info.maxHealth ~= 4 then table.remove(self.Ward.Vision, W) return end
local Pos = WorldToScreen(1, ward.info.pos)
if ward.info.visible == false and self.table.Sprites.Other.ward ~= nil then self.table.Sprites.Other.ward:Draw(Pos.x-16, Pos.y-17.5, GoS.White) end
DrawCircle3D(ward.info.pos.x, ward.info.pos.y, ward.info.pos.z, 80, 1, GoS.White, 8)
DrawCircle3D(ward.info.pos.x, ward.info.pos.y, ward.info.pos.z, 1100, 1, ARGB(175,255,0,0), 100)
DrawText3D("Vision Ward", ward.info.pos.x, ward.info.pos.y, ward.info.pos.z, 15, GoS.Pink, true)
end
for W, ward in pairs(self.Ward.Sight) do
if os.clock() - ward.time >= ward.info.maxMana or ward.info.team == myHero.team or ward.info.health <= 0 or ward.info.maxHealth ~= 3 then table.remove(self.Ward.Sight, W) return end
local Pos = WorldToScreen(1, ward.info.pos)
if ward.info.visible == false and self.table.Sprites.Other.ward ~= nil then self.table.Sprites.Other.ward:Draw(Pos.x-16, Pos.y-17.5, GoS.White) end
DrawCircle3D(ward.info.pos.x, ward.info.pos.y, ward.info.pos.z, 80, 1, GoS.White, 8)
DrawCircle3D(ward.info.pos.x, ward.info.pos.y, ward.info.pos.z, 1100, 1, ARGB(175,255,0,0), 100)
DrawText3D("Sight Ward | "..math.ceil(ward.info.maxMana - os.clock() + ward.time), ward.info.pos.x, ward.info.pos.y, ward.info.pos.z, 15, GoS.Green, true)
end
for W, ward in pairs(self.Ward.Yellow) do
if ward.info.maxHealth == 1 or os.clock() - ward.time >= ward.info.maxMana or ward.info.team == myHero.team or ward.info.health <= 0 then table.remove(self.Ward.Yellow, W) return end
local Pos = WorldToScreen(1, ward.info.pos)
if ward.info.visible == false and self.table.Sprites.Other.ward ~= nil then self.table.Sprites.Other.ward:Draw(Pos.x-16, Pos.y-17.5, GoS.White) end
DrawCircle3D(ward.info.pos.x, ward.info.pos.y, ward.info.pos.z, 80, 1, GoS.White, 8)
DrawCircle3D(ward.info.pos.x, ward.info.pos.y, ward.info.pos.z, 1100, 1, ARGB(175,255,0,0), 100)
DrawText3D("Yellow Trinket | "..math.ceil(ward.info.maxMana - os.clock() + ward.time), ward.info.pos.x, ward.info.pos.y, ward.info.pos.z, 15, GoS.Yellow, true)
end
for W, ward in pairs(self.Ward.Blue) do
if ward.info.maxHealth ~= 1 or ward.info.team == myHero.team or ward.info.health <= 0 then table.remove(self.Ward.Blue, W) return end
local Pos = WorldToScreen(1, ward.info.pos)
if ward.info.visible == false and self.table.Sprites.Other.ward ~= nil then self.table.Sprites.Other.ward:Draw(Pos.x-16, Pos.y-17.5, GoS.White) end
DrawCircle3D(ward.info.pos.x, ward.info.pos.y, ward.info.pos.z, 80, 1, GoS.White, 8)
DrawCircle3D(ward.info.pos.x, ward.info.pos.y, ward.info.pos.z, 605, 1, ARGB(175,255,0,0), 100)
DrawText3D("Blue Trinket", ward.info.pos.x, ward.info.pos.y, ward.info.pos.z, 15, GoS.Blue, true)
end
end
function NS_Tracker:DrawRecall()
for i, enemy in pairs(self.table.Recalling) do
if i and enemy and (enemy.status == "Started" or (enemy.status == "Cancelled" and os.clock() - enemy.endTime <= 0.7)) then
local checkTime = enemy.status == "Cancelled" and math.min(0.7, os.clock() - enemy.endTime) or 0
local leftTime = math.max(0, enemy.fullTime + enemy.startTime - os.clock() + checkTime)
FillRect(self.data.res.x/2.38, self.data.res.y/1.444, leftTime*319.6/enemy.fullTime, 9, enemy.color(i))
FillRect(self.data.res.x/2.385+leftTime*319.6/enemy.fullTime, self:GetRCFillLine(i), 1, 12*i, enemy.color(i))
DrawText(string.format("%s (%s | %.1f)", enemy.champ.charName, math.round(enemy.champ.health), leftTime), 15, self.data.res.x/2.372+leftTime*319.6/enemy.fullTime, self:GetRCFillText(i), GoS.White)
end
if enemy.status == "Finished" or (enemy.status == "Cancelled" and (os.clock() - enemy.endTime > 0.7 or os.clock() - enemy.startTime > enemy.fullTime + 0.3)) then
if self.table.Recalling[i].champ.networkID == enemy.champ.networkID then table.remove(self.table.Recalling, i) end
end
end
if self.table.Sprites.Other.rc and self.table.Recalling[1] then self.table.Sprites.Other.rc:Draw(self.data.res.x/2.4, self.data.res.y/1.45, GoS.White) end
end
function NS_Tracker:MinimapIcons()
for i, enemy in pairs(self.table.Enemies) do
if self.cfg.mm.eb:Value() and enemy.dead == false and enemy.visible == false and self.table.Sprites.Icons.Grey.Mm[i] ~= nil then
local Position = self.table.LastSeen.Pos[enemy.networkID]
local pos = WorldToMinimap(Position)
local movespeed = enemy.ms == 0 and 325 or enemy.ms
local time = self.table.LastSeen.Time[enemy.networkID]
local mp = movespeed*(os.clock() - time)
self.table.Sprites.Icons.Grey.Mm[i]:Draw(pos.x-10.8, pos.y-10.8, GoS.White)
if mp < 4800 then DrawCircleMinimap(Position, mp, 1, 255, ARGB(50,0,245,255)) end
end
end
end
function NS_Tracker:DrawSpells()
for i, spell in pairs(self.spells.cast1) do
local bonusTime = spell.speed > 0 and GetDistance(spell.sPos, spell.ePos)/spell.speed or 0
if os.clock() - spell.time <= spell.delay + bonusTime then
if self.cfg.s.text:Value() then DrawText3D(string.format("%.1fs", spell.delay - os.clock() + spell.time + bonusTime), spell.ePos.x, spell.ePos.y, spell.ePos.z, 20, GoS.White, true) end
if self.cfg.s.circle:Value() then DrawCircle3D(spell.ePos.x, spell.ePos.y, spell.ePos.z, (os.clock() - spell.time)*spell.width/(spell.delay + bonusTime), 1, ARGB(230,0,205,0), 200)
DrawCircle3D(spell.ePos.x, spell.ePos.y, spell.ePos.z, spell.width, 1, ARGB(140,255,255,0), 150) end
else
table.remove(self.spells.cast1, i)
end
end
for i, spell in pairs(self.spells.cast2) do
local Pos = GetDistance(spell.ePos) > GetDistance(Vector(spell.sPos + Vector(spell.ePos - spell.sPos):normalized()*spell.range)) and Vector(spell.sPos + Vector(spell.ePos - spell.sPos):normalized()*spell.range) or spell.ePos
local bonusTime = spell.speed > 0 and GetDistance(spell.sPos, Pos)/spell.speed or 0
if os.clock() - spell.time <= spell.delay + bonusTime then
DrawText3D(string.format("%.1fs", spell.delay - os.clock() + spell.time + bonusTime), Pos.x, Pos.y, Pos.z, 20, GoS.White, true)
DrawCircle3D(Pos.x, Pos.y, Pos.z, (os.clock() - spell.time)*spell.width/(spell.delay + bonusTime), 1, ARGB(230,0,205,0), 200)
DrawCircle3D(Pos.x, Pos.y, Pos.z, spell.width, 1, ARGB(140,255,255,0), 150)
else
table.remove(self.spells.cast2, i)
end
end
for i, spell in pairs(self.spells.cast3) do
local Pos = GetDistance(spell.ePos) > GetDistance(spell.sPos + Vector(spell.ePos - spell.sPos):normalized()*spell.data.Range) and Vector(spell.sPos + Vector(spell.ePos - spell.sPos):normalized()*spell.data.Range) or spell.ePos
local Pos2 = spell.sPos + Vector(Pos - spell.sPos):normalized()*(GetDistance(spell.sPos, Pos) + (GetDistance(spell.sPos, Pos)*550/1275))
local Pos3 = spell.sPos + Vector(Pos2 - spell.sPos):normalized()*(GetDistance(spell.sPos, Pos2) + (GetDistance(spell.sPos, Pos2)*550/2550))
local Check1, Check2, Check3 = CountObjectsNearPos(Pos, spell.data.Width, spell.data.Width, minionManager.objects, MINION_ENEMY) + CountObjectsNearPos(Pos, spell.data.Width, spell.data.Width, minionManager.objects, MINION_JUNGLE) + CountObjectsNearPos(Pos, spell.data.Width, spell.data.Width, GetEnemyHeroes(), MINION_ENEMY) ,CountObjectsNearPos(Pos2, spell.data.Width, spell.data.Width, minionManager.objects, MINION_ENEMY) + CountObjectsNearPos(Pos2, spell.data.Width, spell.data.Width, minionManager.objects, MINION_JUNGLE) + CountObjectsNearPos(Pos2, spell.data.Width, spell.data.Width, GetEnemyHeroes(), MINION_ENEMY), CountObjectsNearPos(Pos3, spell.data.Width, spell.data.Width, minionManager.objects, MINION_ENEMY) + CountObjectsNearPos(Pos3, spell.data.Width, spell.data.Width, minionManager.objects, MINION_JUNGLE) + CountObjectsNearPos(Pos3, spell.data.Width, spell.data.Width, GetEnemyHeroes(), MINION_ENEMY)
local Time1, Time2, Time3 = GetDistance(spell.sPos, Pos)/spell.data.Speed, Check1 == 0 and 0.6 or 0, Check2 == 0 and 0.6 or 0
if os.clock() - spell.time <= spell.data.Delay + Time1 + Time2 + Time3 then
if self.cfg.s.circle:Value() and Check1 == 0 and Time2 ~= 0 and os.clock() - spell.time <= spell.data.Delay + Time1 + Time2 then DrawCircle3D(Pos2.x, Pos2.y, Pos2.z, spell.data.Width, 1, ARGB(140,255,255,0), 150) end
if self.cfg.s.circle:Value() and Check1 == 0 and Time2 ~= 0 and Time3 ~= 0 then DrawCircle3D(Pos3.x, Pos3.y, Pos3.z, spell.data.Width, 1, ARGB(140,255,255,0), 150) end
if os.clock() - spell.time <= spell.data.Delay + Time1 then
if self.cfg.s.text:Value() then DrawText3D(string.format("%.1fs", spell.data.Delay - os.clock() + spell.time + Time1).."s", Pos.x, Pos.y, Pos.z, 20, GoS.White, true) end
if self.cfg.s.circle:Value() then DrawCircle3D(Pos.x, Pos.y, Pos.z, spell.data.Width, 1, ARGB(140,255,255,0), 150)
DrawCircle3D(Pos.x, Pos.y, Pos.z, (os.clock() - spell.time)*spell.data.Width/(spell.data.Delay + Time1), 1, ARGB(230,0,205,0), 200) end
elseif Check1 == 0 and Time2 ~= 0 and os.clock() - spell.time <= spell.data.Delay + Time1 + Time2 then
if self.cfg.s.text:Value() then DrawText3D(string.format("%.1fs", spell.data.Delay - os.clock() + spell.time + Time1 + Time2).."s", Pos2.x, Pos2.y, Pos2.z, 20, GoS.White, true) end
if self.cfg.s.circle:Value() then DrawCircle3D(Pos2.x, Pos2.y, Pos2.z, (os.clock() - spell.time)*spell.data.Width/(spell.data.Delay + Time1 + Time2), 1, ARGB(230,0,205,0), 200) end
elseif Check1 == 0 and Time2 ~= 0 and Time3 ~= 0 and os.clock() - spell.time <= spell.data.Delay + Time1 + Time2 + Time3 then
if self.cfg.s.text:Value() then DrawText3D(string.format("%.1fs", spell.data.Delay - os.clock() + spell.time + Time1 + Time2 + Time3).."s", Pos3.x, Pos3.y, Pos3.z, 20, GoS.White, true) end
if self.cfg.s.circle:Value() then DrawCircle3D(Pos3.x, Pos3.y, Pos3.z, (os.clock() - spell.time)*spell.data.Width/(spell.data.Delay + Time1 + Time2 + Time3), 1, ARGB(230,0,205,0), 200) end
end
else
table.remove(self.spells.cast3, i)
end
end
end
function NS_Tracker:DrawWayPoint()
for i, enemy in pairs(self.table.Enemies) do
if enemy.visible and IsInDistance(enemy, self.cfg.wp.dt:Value()) and not enemy.dead then
if not self.cfg.wp["WayPoint_Tracker_"..enemy.charName] or not self.cfg.wp["WayPoint_Tracker_"..enemy.charName]:Value() then return end
if self.table.WayPoint.wp[enemy.networkID] and self.table.WayPoint.wp[enemy.networkID][1] and self.table.WayPoint.time[enemy.networkID][1] and self.table.WayPoint.speed[enemy.networkID][2] then
if self.table.WayPoint.wp[enemy.networkID][3] and GetDistance(self.table.WayPoint.wp[enemy.networkID][1], self.table.WayPoint.wp[enemy.networkID][2])/(self.table.WayPoint.speed[enemy.networkID][2] == 0 and enemy.ms or self.table.WayPoint.speed[enemy.networkID][2]) < os.clock() - self.table.WayPoint.time[enemy.networkID][1] then table.remove(self.table.WayPoint.wp[enemy.networkID], 1) table.remove(self.table.WayPoint.time[enemy.networkID], 1) self.table.WayPoint.time[enemy.networkID][1] = os.clock() table.remove(self.table.WayPoint.speed[enemy.networkID], 1) end
if tonumber(self:GetFullTime(enemy)) == 0 then self:ClearWayPoint(enemy.networkID) end
for i = 2, #self.table.WayPoint.wp[enemy.networkID] - 1 do
self:DrawLine(self.table.WayPoint.wp[enemy.networkID][i], self.table.WayPoint.wp[enemy.networkID][i+1])
end
if self.table.WayPoint.wp[enemy.networkID][2] then self:DrawLine(Vector(enemy), self.table.WayPoint.wp[enemy.networkID][2])
DrawCircle3D(self.table.WayPoint.wp[enemy.networkID][#self.table.WayPoint.wp[enemy.networkID]].x, self.table.WayPoint.wp[enemy.networkID][#self.table.WayPoint.wp[enemy.networkID]].y, self.table.WayPoint.wp[enemy.networkID][#self.table.WayPoint.wp[enemy.networkID]].z, 30, 1, ARGB(255, 255, 64, 0), 10)
DrawText3D(enemy.charName..": "..self:GetFullTime(enemy).."s", self.table.WayPoint.wp[enemy.networkID][#self.table.WayPoint.wp[enemy.networkID]].x, self.table.WayPoint.wp[enemy.networkID][#self.table.WayPoint.wp[enemy.networkID]].y, self.table.WayPoint.wp[enemy.networkID][#self.table.WayPoint.wp[enemy.networkID]].z, 18, GoS.White, true) end
end
end
end
end
function NS_Tracker:CheckHealth(enemy)
local regen, current = 0, 0
if enemy.visible == false and enemy.dead == false and self.table.LastSeen.Time[enemy.networkID] ~= nil then
regen = enemy.hpRegen*(os.clock() - self.table.LastSeen.Time[enemy.networkID])
else
regen = 0
end
current = math.min(enemy.maxHealth, enemy.health + regen)
if enemy.alive == false then regen, current = 0, 0 end
return regen, current
end
function NS_Tracker:CheckRCD(enemy)
local CoolDown = 0
if enemy:GetSpellData(_R).level > 0 and enemy:CanUseSpell(_R) == 40 then
CoolDown = enemy:GetSpellData(_R).currentCd
if enemy.visible == false then CoolDown = math.max(0, self.table.LastUltCD[enemy.networkID] - os.clock() + self.table.LastSeen.RCD[enemy.networkID]) end
end
return CoolDown
end
function NS_Tracker:GetRCColor1(rcs ,i)
local r = rcs <= 4 and 134 or 255
local g = rcs <= 4 and 0 or 255
local b = rcs <= 4 and 179 or 255
return ARGB(255-45*(i-1), r, g, b)
end
function NS_Tracker:GetRCColor2(rcs, i)
local r = rcs <= 4 and 147 or 160
local g = rcs <= 4 and 38 or 160
local b = rcs <= 4 and 255 or 160
return ARGB(255-45*(i-1), r, g, b)
end
function NS_Tracker:GetRCFillText(i)
local result = {
[1] = self.data.res.y/1.49 - 2,
[2] = self.data.res.y/1.517 - 8,
[3] = self.data.res.y/1.52 - 18,
[4] = self.data.res.y/1.52 - 28,
[5] = self.data.res.y/1.523 - 40
}
return result[i]
end
function NS_Tracker:GetRCFillLine(i)
local result = {
[1] = self.data.res.y/1.47 + 4,
[2] = self.data.res.y/1.47 - 10,
[3] = self.data.res.y/1.47 - 21,
[4] = self.data.res.y/1.47 - 32,
[5] = self.data.res.y/1.47 - 45
}
return result[i]
end
function NS_Tracker:ClearWayPoint(nID)
self.table.WayPoint.wp[nID] = { }
self.table.WayPoint.time[nID] = { }
self.table.WayPoint.speed[nID] = { }
end
function NS_Tracker:GetFullTime(enemy)
local t = 0
for i = 2, #self.table.WayPoint.wp[enemy.networkID] - 1 do
t = t + GetDistance(self.table.WayPoint.wp[enemy.networkID][i], self.table.WayPoint.wp[enemy.networkID][i+1])/(self.table.WayPoint.speed[enemy.networkID][2] == 0 and enemy.ms or self.table.WayPoint.speed[enemy.networkID][2])
end
t = t + GetDistance(Vector(enemy), self.table.WayPoint.wp[enemy.networkID][2])/(self.table.WayPoint.speed[enemy.networkID][2] == 0 and enemy.ms or self.table.WayPoint.speed[enemy.networkID][2])
return string.format("%.1f", t)
end
function NS_Tracker:DrawLine(v1, v2)
if not v1 or not v2 or v1.x == 0 or v2.x == 0 or v1.y == 0 or v2.y == 0 or v1.z == 0 or v2.z == 0 then return end
local v1, v2 = Vector(v1), Vector(v2)
DrawLine3D(v1.x, v1.y, v1.z, v2.x, v2.y, v2.z, 3, ARGB(255, 72, 247, 112))
end
function NS_Tracker:CheckRecall(unit, recall)
if unit.team ~= myHero.team then
if recall.isStart then
self.table.Recalling[#self.table.Recalling + 1] = { champ = unit, status = "Started", fullTime = recall.totalTime/1000, startTime = os.clock(), endTime = 0, color = function(i) return self:GetRCColor1(recall.totalTime/1000, i) end }
else
for i = 1, #self.table.Recalling, 1 do
if self.table.Recalling[i].champ.networkID == unit.networkID then
if recall.isFinish or recall.passedTime/1000 >= recall.totalTime/1000 - 0.06 or os.clock() - self.table.Recalling[i].startTime >= self.table.Recalling[i].fullTime - 0.06 then
self.table.Recalling[i].status = "Finished"
self.table.LastSeen.Pos[unit.networkID] = self.data.BasePos
else
self.table.Recalling[i].status = "Cancelled"
self.table.Recalling[i].color = function(i) return self:GetRCColor2(recall.totalTime/1000, i) end
self.table.Recalling[i].endTime = os.clock()
end
end
end
end
end
end
function NS_Tracker:CheckWayPoint(unit, wayp)
if unit.team ~= myHero.team and unit.type == myHero.type and ValidTarget(unit, self.cfg.wp.dt:Value()*2) then
if self.table.WayPoint.check[unit.networkID] then self:ClearWayPoint(unit.networkID) self.table.WayPoint.check[unit.networkID] = false end
self.table.WayPoint.wp[unit.networkID][#self.table.WayPoint.wp[unit.networkID] + 1] = Vector(wayp.position)
self.table.WayPoint.time[unit.networkID][#self.table.WayPoint.time[unit.networkID] + 1] = os.clock()
self.table.WayPoint.speed[unit.networkID][#self.table.WayPoint.speed[unit.networkID] + 1] = wayp.dashspeed < 100 and 0 or wayp.dashspeed
if wayp.index == 1 then self.table.WayPoint.check[unit.networkID] = true end
end
end
function NS_Tracker:CheckSpell(unit, spell)
if unit.team ~= myHero.team and unit.type == myHero.type and IsInDistance(unit, 2000) and not unit.dead then
if self.spells.data1[spell.name:lower()] ~= nil then
self.spells.cast1[#self.spells.cast1 + 1] = { time = os.clock(), sPos = spell.startPos, ePos = spell.endPos, delay = self.spells.data1[spell.name:lower()].Delay, speed = self.spells.data1[spell.name:lower()].Speed, width = self.spells.data1[spell.name:lower()].Width }
end
if self.spells.data2[spell.name:lower()] ~= nil then
self.spells.cast2[#self.spells.cast2 + 1] = { time = os.clock(), sPos = Vector(spell.startPos), ePos = Vector(spell.endPos), delay = self.spells.data2[spell.name:lower()].Delay, speed = self.spells.data2[spell.name:lower()].Speed, width = self.spells.data2[spell.name:lower()].Width, range = self.spells.data2[spell.name:lower()].Range }
end
if self.spells.data3.name == spell.name:lower() then
self.spells.cast3[#self.spells.cast3 + 1] = { time = os.clock(), sPos = Vector(spell.startPos), ePos = Vector(spell.endPos), data = self.spells.data3 }
end
end
end
function NS_Tracker:GetLastTime(unit)
if unit.type == myHero.type and unit.team ~= myHero.team then
self.table.LastSeen.Time[unit.networkID] = os.clock()
if not unit.dead then self.table.LastSeen.Pos[unit.networkID] = unit.pos else self.table.LastSeen.Pos[unit.networkID] = self.data.BasePos end
self.table.LastSeen.RCD[unit.networkID] = os.clock()
if unit:GetSpellData(_R).level > 0 and unit:CanUseSpell(_R) == 40 then self.table.LastUltCD[unit.networkID] = unit:GetSpellData(_R).currentCd end
end
end
function NS_Tracker:CreateObj(obj)
if obj.name:lower() == "visionward" and not obj.name:lower():find("troy") and not obj.name:lower():find("minion") then
self.Ward.Sight[#self.Ward.Sight + 1] = { time = os.clock(), info = obj }
self.Ward.Vision[#self.Ward.Vision + 1] = { time = os.clock(), info = obj }
end
if obj.name:lower() == "sightward" and not obj.name:lower():find("troy") and not obj.name:lower():find("minion") then
self.Ward.Yellow[#self.Ward.Yellow + 1] = { time = os.clock(), info = obj }
self.Ward.Blue[#self.Ward.Blue + 1] = { time = os.clock(), info = obj }
end
end
function NS_Tracker:DeleteObj(obj)
if obj.name:lower():find("ziggs_base_w_aoe_red") then
for i, spell in pairs(self.spells.cast1) do
table.remove(self.spells.cast1, i)
end
end
end
function NS_Tracker:GetPos(what)
local xPos, yPox = 0, 0
if what == "HPBar" then
xPos = self.cfg.heal.x:Value() + self.data.res.x/1.192 - self.data.res.x/1.25
yPos = self.cfg.heal.y:Value() + self.data.res.y/22 - self.data.res.y/50
end
if what == "Health" then
xPos = self.cfg.heal.x:Value() + self.data.res.x/1.19 - self.data.res.x/1.25
yPos = self.cfg.heal.y:Value() + self.data.res.y/21 - self.data.res.y/50
end
if what == "Text" then
xPos = self.cfg.heal.x:Value() + self.data.res.x/1.14 - self.data.res.x/1.25
yPos = self.cfg.heal.y:Value()
end
if what == "Missing" then
xPos = self.cfg.heal.x:Value() + self.data.res.x/1.24 - self.data.res.x/1.25
yPos = self.cfg.heal.y:Value() + self.data.res.y/25 - self.data.res.y/50
end
if what == "CD-Sprite" then
xPos = self.cfg.ultcd.x:Value() + self.data.res.x/1.19 - self.data.res.x/1.192
yPos = self.cfg.ultcd.y:Value() + self.data.res.y/105 - self.data.res.y/140
end
if what == "CD-Text" then
xPos = self.cfg.ultcd.x:Value() + self.data.res.x/1.185 - self.data.res.x/1.192
yPos = self.cfg.ultcd.y:Value() + self.data.res.y/47 - self.data.res.x/140
end
return { x = xPos, y = yPos }
end
function NS_Tracker:GetSAD(unit)
return unit.shieldAD
end
function NS_Tracker:GetSAP(unit)
return unit.shieldAD + unit.shieldAP
end
function NS_Tracker:Hello(ver)
PrintChat(string.format("<font color=\"#D9006C\"><b>[NEET's Tracker]:</b></font><font color=\"#FFFFFF\"><i> Successfully Loaded</i> (v%s) | Good Luck</font> <font color=\"#93C8FF\"><u>%s</u></font>", ver, GetUser()))
end
function NS_Tracker:Print(text)
PrintChat(string.format("<font color=\"#D9006C\"><b>[NEET's Tracker]:</b></font><font color=\"#FFFFFF\"> %s</font>",tostring(text)))
end
function NS_Tracker:GTracker()
LoadGOSScript(Base64Decode("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"))
GoSTracker("NEETTracker", 4)
end
NS_Tracker()