Who is the spy keyless
Key Required

Who is the spy keyless

Who's the Spy?christianjescyanochristianjescyano 4.6K views 36 executesUpdated Jul 20, 2025
5.0/ 5(4 votes)
40100% Positive
Lua Script•176 lines (5302 chars)
loadstring([[
-- WARNING: Heads up! This script has not been verified by ScriptBlox. Use at your own risk!

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local TweenService = game:GetService("TweenService")
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")

local currentSpies = {}
local lastClue = ""
local lastSpyWord = ""

local function createLabel(character, text, textColor)
	local billboardGui = Instance.new("BillboardGui")
	billboardGui.Name = "StatusLabel"
	billboardGui.Adornee = character:FindFirstChild("Head")
	billboardGui.Size = UDim2.new(0, 100, 0, 50)
	billboardGui.StudsOffset = Vector3.new(0, 4, 0)
	billboardGui.AlwaysOnTop = true

	local textLabel = Instance.new("TextLabel")
	textLabel.Size = UDim2.new(1, 0, 1, 0)
	textLabel.BackgroundTransparency = 1
	textLabel.Text = text
	textLabel.TextColor3 = textColor
	textLabel.TextScaled = true
	textLabel.Font = Enum.Font.SourceSansBold
	textLabel.Parent = billboardGui

	billboardGui.Parent = character
end

local function showNotifier(name)
	local notify = Instance.new("TextLabel")
	notify.Size = UDim2.new(0.6, 0, 0, 60)
	notify.Position = UDim2.new(0.2, 0, 0.05, 0)
	notify.BackgroundTransparency = 0.2
	notify.BackgroundColor3 = Color3.fromRGB(60, 0, 0)
	notify.TextColor3 = Color3.new(1, 0, 0)
	notify.Text = name .. " is the SPY!"
	notify.Font = Enum.Font.GothamBold
	notify.TextScaled = true
	notify.TextStrokeTransparency = 0.3
	notify.Parent = PlayerGui

	wait(4)
	TweenService:Create(notify, TweenInfo.new(1), {
		TextTransparency = 1,
		BackgroundTransparency = 1
	}):Play()
	wait(1)
	notify:Destroy()
end

local spyGui = Instance.new("ScreenGui", PlayerGui)
spyGui.Name = "SpyGui"
spyGui.ResetOnSpawn = false

local frame = Instance.new("Frame", spyGui)
frame.Size = UDim2.new(0, 240, 0, 120)
frame.Position = UDim2.new(0.75, 0, 0.2, 0)
frame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
frame.BorderSizePixel = 0
frame.Active = true
frame.Draggable = true

local title = Instance.new("TextLabel", frame)
title.Size = UDim2.new(1, 0, 0, 30)
title.Text = "Current Spies"
title.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
title.TextColor3 = Color3.new(1, 1, 1)
title.Font = Enum.Font.GothamBold
title.TextSize = 16

local spyList = Instance.new("TextLabel", frame)
spyList.Position = UDim2.new(0, 0, 0, 30)
spyList.Size = UDim2.new(1, 0, 1, -60)
spyList.BackgroundTransparency = 1
spyList.TextColor3 = Color3.fromRGB(255, 0, 0)
spyList.Text = "Waiting..."
spyList.TextWrapped = true
spyList.TextYAlignment = Enum.TextYAlignment.Top
spyList.Font = Enum.Font.Gotham
spyList.TextSize = 14

local toggleBtn = Instance.new("TextButton", frame)
toggleBtn.Size = UDim2.new(1, 0, 0, 30)
toggleBtn.Position = UDim2.new(0, 0, 1, -30)
toggleBtn.Text = "Minimize"
toggleBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
toggleBtn.TextColor3 = Color3.new(1, 1, 1)
toggleBtn.Font = Enum.Font.Gotham
toggleBtn.TextSize = 14

local minimized = false
toggleBtn.MouseButton1Click:Connect(function()
	minimized = not minimized
	if minimized then
		spyList.Visible = false
		toggleBtn.Text = "Maximize"
	else
		spyList.Visible = true
		toggleBtn.Text = "Minimize"
	end
end)

local function checkPlayerForStatus(player)
	local boolFolder = player:FindFirstChild("boolFolder")
	if not boolFolder then return end
	local isSpy = boolFolder:FindFirstChild("isSpy")
	if not isSpy or not isSpy:IsA("BoolValue") then return end
	if not player.Character or not player.Character:FindFirstChild("Head") then return end

	local existing = player.Character:FindFirstChild("StatusLabel")
	if existing then existing:Destroy() end

	local chosenMode = ReplicatedStorage:FindFirstChild("String") and ReplicatedStorage.String:FindFirstChild("ChosenMode")
	if not chosenMode then return end

	if isSpy.Value then
		local word = ReplicatedStorage.String:FindFirstChild("SpyWord")
		local label = word and word:IsA("StringValue") and word.Value or "Spy"
		createLabel(player.Character, label, Color3.new(1, 0, 0))
		table.insert(currentSpies, player)
	else
		local clue = ReplicatedStorage.String:FindFirstChild("ClueWord")
		local label = clue and clue:IsA("StringValue") and clue.Value or "Innocent"
		createLabel(player.Character, label, Color3.new(0, 1, 0))
	end
end

local function refreshSpies()
	currentSpies = {}
	for _, player in pairs(Players:GetPlayers()) do
		checkPlayerForStatus(player)
	end

	if #currentSpies > 0 then
		local names = {}
		for _, spy in ipairs(currentSpies) do
			table.insert(names, spy.DisplayName or spy.Name)
			showNotifier(spy.DisplayName or spy.Name)
		end
		spyList.Text = table.concat(names, "\\n")
	else
		spyList.Text = "Waiting..."
	end
end

local function detectRoundChange()
	local clue = ReplicatedStorage.String:FindFirstChild("ClueWord")
	local spy = ReplicatedStorage.String:FindFirstChild("SpyWord")

	local newClue = clue and clue.Value or ""
	local newSpy = spy and spy.Value or ""

	if newClue ~= lastClue or newSpy ~= lastSpyWord then
		lastClue = newClue
		lastSpyWord = newSpy
		refreshSpies()
	end
end

Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function()
		wait(1)
		checkPlayerForStatus(player)
	end)
end)

while true do
	detectRoundChange()
	wait(2)
end
]])()

Features & Information

Keyless and has gui,tells you innocents words if youre a spy,tells you current spies if you are innocent Credits for half of the script:progamerst Credits for me exzblaze12 pls follow me i created the gui and spy detector

Community Comments (3)

zxcvzxcvJul 20, 2025

im pro now with this script

christianjescyanochristianjescyanoJul 20, 2025

I see u everywhere bro

Nice script W

More Scripts for Who's the Spy?