-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] local plrs = game:GetService("Players") local run = game:GetService("RunService") local plr = plrs.LocalPlayer local totems = workspace:WaitForChild("Totems") local esp = {} local cache = {} local dirty = true for _, v in pairs(totems:GetChildren()) do local tc = v:FindFirstChild("TribeColor") if tc and tc:IsA("StringValue") then cache[#cache + 1] = tc.Value tc:GetPropertyChangedSignal("Value"):Connect(function() dirty = true end) end end totems.ChildAdded:Connect(function(child) task.wait(0.1) local tc = child:FindFirstChild("TribeColor") if tc and tc:IsA("StringValue") then tc:GetPropertyChangedSignal("Value"):Connect(function() dirty = true end) end table.clear(cache) for _, v in pairs(totems:GetChildren()) do local c = v:FindFirstChild("TribeColor") if c and c:IsA("StringValue") then cache[#cache + 1] = c.Value end end dirty = true end) totems.ChildRemoved:Connect(function() table.clear(cache) for _, v in pairs(totems:GetChildren()) do local tc = v:FindFirstChild("TribeColor") if tc and tc:IsA("StringValue") then cache[#cache + 1] = tc.Value end end dirty = true end) for _, player in pairs(plrs:GetPlayers()) do if player ~= plr then local text = Drawing.new("Text") text.Visible = false text.Center = true text.Outline = true text.OutlineColor = Color3.fromRGB(0, 0, 0) text.Font = 2 text.Size = 16 text.Color = Color3.fromRGB(255, 255, 255) esp[player] = {Text = text, has = false, team = nil} player.CharacterAdded:Connect(function() task.wait(0.5) if esp[player] then esp[player].team = nil end dirty = true end) player:GetPropertyChangedSignal("Team"):Connect(function() local data = esp[player] if not data then return end local team = player.Team if team ~= data.team then data.team = team data.has = false if team then for _, color in pairs(cache) do if color == team.Name then data.has = true break end end end if data.has then data.Text.Text = "Has totem" data.Text.Color = Color3.fromRGB(85, 255, 85) else data.Text.Text = "Hasn't totem" data.Text.Color = Color3.fromRGB(255, 85, 85) end end end) end end plrs.PlayerAdded:Connect(function(player) if player == plr then return end local text = Drawing.new("Text") text.Visible = false text.Center = true text.Outline = true text.OutlineColor = Color3.fromRGB(0, 0, 0) text.Font = 2 text.Size = 16 text.Color = Color3.fromRGB(255, 255, 255) esp[player] = {Text = text, has = false, team = nil} player.CharacterAdded:Connect(function() task.wait(0.5) if esp[player] then esp[player].team = nil end dirty = true end) player:GetPropertyChangedSignal("Team"):Connect(function() local data = esp[player] if not data then return end local team = player.Team if team ~= data.team then data.team = team data.has = false if team then for _, color in pairs(cache) do if color == team.Name then data.has = true break end end end if data.has then data.Text.Text = "Has totem" data.Text.Color = Color3.fromRGB(85, 255, 85) else data.Text.Text = "Hasn't totem" data.Text.Color = Color3.fromRGB(255, 85, 85) end end end) end) plrs.PlayerRemoving:Connect(function(player) if esp[player] then esp[player].Text:Remove() esp[player] = nil end end) local interval = 0.3 local accum = 0 run.RenderStepped:Connect(function(dt) accum += dt if accum >= interval then accum = 0 if dirty then dirty = false for player, data in pairs(esp) do local team = player.Team if team ~= data.team then data.team = team data.has = false if team then for _, color in pairs(cache) do if color == team.Name then data.has = true break end end end if data.has then data.Text.Text = "Has totem" data.Text.Color = Color3.fromRGB(85, 255, 85) else data.Text.Text = "Hasn't totem" data.Text.Color = Color3.fromRGB(255, 85, 85) end end end end end local camera = workspace.CurrentCamera if not camera then return end for player, data in pairs(esp) do local character = player.Character if not character then data.Text.Visible = false continue end local head = character:FindFirstChild("Head") if not head then data.Text.Visible = false continue end local world = head.Position + Vector3.new(0, 5, 0) local screenpos, screen = camera:WorldToViewportPoint(world) if screen then local dist = screenpos.Z local size = math.clamp(1000 / dist, 8, 16) data.Text.Visible = true data.Text.Position = Vector2.new(screenpos.X, screenpos.Y) data.Text.Size = size else data.Text.Visible = false end end end)