
KeylessUniversal

local Players = game:GetService("Players")
local Lighting = game:GetService("Lighting")
local RunService = game:GetService("RunService")
local LocalPlayer = Players.LocalPlayer
math.randomseed(tick())
local function rgb(r,g,b)
return Color3.fromRGB(r,g,b)
end
local function randomColor()
return Color3.new(math.random(), math.random(), math.random())
end
local function invertColor(c)
return Color3.new(1 - c.R, 1 - c.G, 1 - c.B)
end
local function hsvToRgb(h, s, v)
local c = v * s
local x = c * (1 - math.abs((h / 60) % 2 - 1))
local m = v - c
local r, g, b = 0, 0, 0
if h < 60 then r, g, b = c, x, 0
elseif h < 120 then r, g, b = x, c, 0
elseif h < 180 then r, g, b = 0, c, x
elseif h < 240 then r, g, b = 0, x, c
elseif h < 300 then r, g, b = x, 0, c
else r, g, b = c, 0, x end
return Color3.new(r + m, g + m, b + m)
end
local PALETTE = {
GREY = rgb(140,140,140),
DARK_GREY = rgb(85,85,85),
ALMOST_BLACK = rgb(30,30,30),
PINK = rgb(255,170,200),
LIGHT_PINK = rgb(255,200,220),
CRIMSON = rgb(120,30,40),
WHITE = rgb(235,235,235),
BLACK = rgb(0,0,0),
CYAN = rgb(0,200,255),
NEON_GREEN = rgb(50,255,100),
PURPLE = rgb(180,50,255),
ORANGE = rgb(255,140,0),
GOLD = rgb(255,215,0)
}
do
Lighting.Ambient = rgb(120,120,120)
Lighting.OutdoorAmbient = rgb(90,90,90)
Lighting.Brightness = 2
local cc = Instance.new("ColorCorrectionEffect")
cc.TintColor = rgb(255,200,215)
cc.Brightness = 0.1
cc.Contrast = 0.15
cc.Saturation = -0.25
cc.Parent = Lighting
local bloom = Instance.new("BloomEffect")
bloom.Intensity = 0.6
bloom.Size = 24
bloom.Threshold = 0.8
bloom.Parent = Lighting
end
local PHIGHTING_FACES = {
--banhammer
"rbxassetid://12663739973",
"rbxassetid://15201503293",
"rbxassetid://15201503858",
"rbxassetid://15201504904",
--boombox
"rbxassetid://11362511478",
"rbxassetid://11362512500",
"rbxassetid://11362513651",
--astrobox
"rbxassetid://7294779767",
--coil
"rbxassetid://18964052238",
"rbxassetid://18964052057",
"rbxassetid://18964052393",
--hyperlaserkatana
"rbxassetid://10666225215",
"rbxassetid://10666225117",
"rbxassetid://10666224987",
--medkit
"rbxassetid://12996388651",
"rbxassetid://13035024570",
"rbxassetid://13035026041",
"rbxassetid://13035027563",
--rocket
"rbxassetid://79456612925473",
"rbxassetid://114172010068200",
"rbxassetid://77487540847740",
--skateboard
"rbxassetid://79444090478332",
"rbxassetid://129692254425837",
"rbxassetid://112369994631553",
"rbxassetid://117789483333523",
"rbxassetid://103737043081386",
--slingshot/catshot
"rbxassetid://11362362820",
"rbxassetid://11362363896",
"rbxassetid://11362365140",
"rbxassetid://9136774350",
"rbxassetid://10651080555",
"rbxassetid://10651080326",
"rbxassetid://10651080056",
--subspace/grieferspace
"rbxassetid://15398700458",
"rbxassetid://81638130989263",
"rbxassetid://128033514971806",
"rbxassetid://121317942950887",
"rbxassetid://87657165335729",
"rbxassetid://138748378825337",
"rbxassetid://127159459680988",
"rbxassetid://76183115695777",
--sword(john phihting)
"rbxassetid://7502110493",
"rbxassetid://18271727904",
"rbxassetid://18271950515",
"rbxassetid://18271950368",
"rbxassetid://18271950214",
--marshmallowsword
"rbxassetid://10753371621",
"rbxassetid://10753371196",
"rbxassetid://10753371129",
--npcs
"rbxassetid://10651079103", --valk
"rbxassetid://9127752391", --dom
"rbxassetid://3868600", --settoing
"rbxassetid://11219882791", --broker
"rbxassetid://11614952566", --zuka
"rbxassetid://14054828639" --traffic
}
local REMOVE_ACCESSORIES = {
"Hair",
"Hat",
"FaceAccessory",
"Mask",
"Hood",
"Helmet",
"Cap",
"Beanie",
"Crown",
"Bandana",
"Visor",
"Headband"
}
local function shouldRemoveAccessory(accessory)
local name = accessory.Name:lower()
for _, keyword in ipairs(REMOVE_ACCESSORIES) do
if name:find(keyword:lower()) then
return true
end
end
if accessory:IsA("Accessory") then
local accType = tostring(accessory.AccessoryType)
for _, keyword in ipairs(REMOVE_ACCESSORIES) do
if accType:find(keyword) then
return true
end
end
end
return false
end
local DUMMIES = {
starterdummy = {
Head = PALETTE.GREY,
Torso = PALETTE.ALMOST_BLACK,
Limbs = PALETTE.DARK_GREY,
Accessories = PALETTE.DARK_GREY
},
horrordummy = {
All = PALETTE.ALMOST_BLACK,
Accessories = PALETTE.ALMOST_BLACK
},
rig = {
All = PALETTE.GREY,
Accessories = PALETTE.GREY
},
saddummy = {
Head = PALETTE.GREY,
Arms = PALETTE.GREY,
Torso = PALETTE.ALMOST_BLACK,
Legs = PALETTE.DARK_GREY,
Accessories = PALETTE.GREY
},
partydummy = {
Head = PALETTE.GREY,
Torso = PALETTE.LIGHT_PINK,
Limbs = PALETTE.GREY,
Accessories = PALETTE.LIGHT_PINK
},
clowndummy = {
Head = PALETTE.GREY,
Torso = PALETTE.WHITE,
LeftLeg = PALETTE.LIGHT_PINK,
RightLeg = PALETTE.PINK,
Arms = PALETTE.GREY,
Accessories = PALETTE.PINK
},
lovedummy = {
Head = PALETTE.GREY,
Arms = PALETTE.GREY,
Torso = PALETTE.ALMOST_BLACK,
Legs = PALETTE.CRIMSON,
Accessories = PALETTE.CRIMSON
},
chilldummy = {
Head = PALETTE.GREY,
Arms = PALETTE.GREY,
Torso = PALETTE.DARK_GREY,
Legs = PALETTE.DARK_GREY,
Accessories = PALETTE.GREY
},
rainbowdummy = {
Rainbow = true,
Accessories = "Rainbow"
},
neondummy = {
Head = PALETTE.NEON_GREEN,
Torso = PALETTE.CYAN,
Arms = PALETTE.PURPLE,
Legs = PALETTE.ORANGE,
Accessories = PALETTE.NEON_GREEN,
Neon = true
},
golddummy = {
All = PALETTE.GOLD,
Accessories = PALETTE.GOLD,
Neon = true
},
frozendummy = {
Head = PALETTE.WHITE,
Torso = PALETTE.CYAN,
Limbs = rgb(150,200,255),
Accessories = PALETTE.CYAN
},
lavadummy = {
Head = PALETTE.ALMOST_BLACK,
Torso = rgb(255,80,0),
Limbs = rgb(200,50,0),
Accessories = rgb(255,80,0),
Neon = true
},
ghostdummy = {
All = PALETTE.WHITE,
Accessories = PALETTE.WHITE,
Transparency = 0.3
},
checkerdummy = {
Checker = true,
Accessories = PALETTE.BLACK
},
randomskin = {
Random = true,
Accessories = "Random"
},
inverted = {
Invert = true,
Accessories = "Invert"
},
random_inverted = {
RandomInvert = true,
Accessories = "RandomInvert"
}
}
local DUMMY_FACE_MAP = {
starterdummy = "STARTER",
horrordummy = "HORROR",
rig = "RIG",
saddummy = "LOVE",
partydummy = "PARTY",
clowndummy = "CLOWN",
lovedummy = "SAD",
chilldummy = "CHILL",
rainbowdummy = "ALL",
neondummy = "ALL",
golddummy = "ALL",
frozendummy = "CHILL",
lavadummy = "HORROR",
ghostdummy = "HORROR",
checkerdummy = "ALL",
randomskin = "ALL",
inverted = "ALL",
random_inverted = "ALL"
}
local FACE_POOLS = {
ALL = PHIGHTING_FACES,
STARTER = {
"rbxassetid://910076130"
},
HORROR = {
"rbxassetid://15398700458",
"rbxassetid://81638130989263",
"rbxassetid://128033514971806",
"rbxassetid://121317942950887",
"rbxassetid://87657165335729",
"rbxassetid://138748378825337",
"rbxassetid://127159459680988",
"rbxassetid://76183115695777"
},
RIG = {
"rbxassetid://3868600",
"rbxassetid://7502110493"
},
SAD = {
"rbxassetid://11362362820",
"rbxassetid://11362363896",
"rbxassetid://11362365140",
"rbxassetid://9136774350"
},
PARTY = {
"rbxassetid://11362511478",
"rbxassetid://11362512500",
"rbxassetid://11362513651",
"rbxassetid://79444090478332"
},
CLOWN = {
"rbxassetid://9136774350",
"rbxassetid://10651080555"
},
LOVE = {
"rbxassetid://10753371621",
"rbxassetid://10753371196",
"rbxassetid://10753371129"
},
CHILL = {
"rbxassetid://11614952566",
"rbxassetid://12996388651",
"rbxassetid://13035024570"
}
}
local NPC_DUMMY_MAP = {
StarterDummy = "starterdummy",
TutorialDummy = "rig",
ObbyDummy = "rig",
TapeDummy = "chilldummy",
LoveDummy = "lovedummy",
PartyDummy = "partydummy",
ClownDummy = "clowndummy",
SadDummy = "saddummy",
ChillDummy = "chilldummy",
Valk = "chilldummy",
Dom = "rig",
Broker = "rig",
Zuka = "chilldummy",
Traffic = "rig",
Settoing = "rig"
}
local DUMMY_KEYS = {}
for k in pairs(DUMMIES) do
if k ~= "starterdummy" then
table.insert(DUMMY_KEYS, k)
end
end
local rainbowCharacters = {}
RunService.Heartbeat:Connect(function()
local hue = (tick() * 50) % 360
for character, _ in pairs(rainbowCharacters) do
if character and character.Parent then
for _, part in ipairs(character:GetChildren()) do
if part:IsA("BasePart") then
part.Color = hsvToRgb(hue, 1, 1)
end
end
for _, accessory in ipairs(character:GetChildren()) do
if accessory:IsA("Accessory") then
local handle = accessory:FindFirstChild("Handle")
if handle and handle:IsA("BasePart") then
handle.Color = hsvToRgb(hue, 1, 1)
end
end
end
else
rainbowCharacters[character] = nil
end
end
end)
local function stripCharacter(character)
for _,obj in ipairs(character:GetChildren()) do
if obj:IsA("Shirt")
or obj:IsA("Pants")
or obj:IsA("ShirtGraphic") then
obj:Destroy()
end
if obj:IsA("Accessory") and shouldRemoveAccessory(obj) then
obj:Destroy()
end
end
end
local function removeBodyColors(character)
local bc = character:FindFirstChildOfClass("BodyColors")
if bc then
bc:Destroy()
end
end
local function forceBlocky(character)
for _,obj in ipairs(character:GetDescendants()) do
if obj:IsA("CharacterMesh") then
obj:Destroy()
end
if obj:IsA("SpecialMesh") and obj.Parent then
local parent = obj.Parent
local isBodyPart = parent.Name == "Head"
or parent.Name == "Torso"
or parent.Name == "UpperTorso"
or parent.Name == "LowerTorso"
or parent.Name:find("Arm")
or parent.Name:find("Leg")
if isBodyPart and parent.Name ~= "Head" then
obj:Destroy()
end
end
end
end
local function recolorAccessories(character, dummy, baseColor)
local accessoryColor = dummy.Accessories
for _, accessory in ipairs(character:GetChildren()) do
if accessory:IsA("Accessory") then
local handle = accessory:FindFirstChild("Handle")
if handle and handle:IsA("BasePart") then
local mesh = handle:FindFirstChildOfClass("SpecialMesh")
if mesh then
mesh.TextureId = ""
end
local c = handle.Color
if accessoryColor == "Rainbow" then
elseif accessoryColor == "Random" then
c = randomColor()
elseif accessoryColor == "Invert" then
c = invertColor(c)
elseif accessoryColor == "RandomInvert" then
c = invertColor(baseColor)
elseif type(accessoryColor) == "userdata" then
c = accessoryColor
end
handle.Color = c
if dummy.Neon then
handle.Material = Enum.Material.Neon
else
handle.Material = Enum.Material.SmoothPlastic
end
if dummy.Transparency then
handle.Transparency = dummy.Transparency
end
end
end
end
end
local STANDARD_LIMBS = {
"Head", "Torso", "UpperTorso", "LowerTorso",
"Left Arm", "Right Arm", "LeftUpperArm", "RightUpperArm",
"LeftLowerArm", "RightLowerArm", "LeftHand", "RightHand",
"Left Leg", "Right Leg", "LeftUpperLeg", "RightUpperLeg",
"LeftLowerLeg", "RightLowerLeg", "LeftFoot", "RightFoot",
"HumanoidRootPart"
}
local function isStandardLimb(partName)
for _, limb in ipairs(STANDARD_LIMBS) do
if partName == limb then
return true
end
end
return false
end
local function recolorNPCParts(character, dummy, baseColor)
local accessoryColor = dummy.Accessories or dummy.All
for _, part in ipairs(character:GetChildren()) do
if part:IsA("BasePart") and not isStandardLimb(part.Name) then
local mesh = part:FindFirstChildOfClass("SpecialMesh")
if mesh then
mesh.TextureId = ""
end
local c = part.Color
if accessoryColor == "Rainbow" then
elseif accessoryColor == "Random" or dummy.Random then
c = randomColor()
elseif accessoryColor == "Invert" or dummy.Invert then
c = invertColor(c)
elseif accessoryColor == "RandomInvert" or dummy.RandomInvert then
c = invertColor(baseColor)
elseif type(accessoryColor) == "userdata" then
c = accessoryColor
end
part.Color = c
if dummy.Neon then
part.Material = Enum.Material.Neon
else
part.Material = Enum.Material.SmoothPlastic
end
if dummy.Transparency then
part.Transparency = dummy.Transparency
end
end
end
end
local function applyDummy(character, dummyName)
local dummy = DUMMIES[dummyName]
if not dummy then return end
stripCharacter(character)
local baseColor = randomColor()
local isRainbow = dummy.Rainbow
if isRainbow then
rainbowCharacters[character] = true
else
rainbowCharacters[character] = nil
end
local partIndex = 0
for _,part in ipairs(character:GetChildren()) do
if part:IsA("BasePart") and isStandardLimb(part.Name) then
part.Material = dummy.Neon and Enum.Material.Neon or Enum.Material.SmoothPlastic
local c = part.Color
if dummy.Rainbow then
c = hsvToRgb((tick() * 50) % 360, 1, 1)
elseif dummy.Checker then
partIndex = partIndex + 1
c = (partIndex % 2 == 0) and PALETTE.WHITE or PALETTE.BLACK
elseif dummy.Random then
c = randomColor()
elseif dummy.Invert then
c = invertColor(c)
elseif dummy.RandomInvert then
c = invertColor(baseColor)
elseif dummy.All then
c = dummy.All
elseif part.Name == "Head" and dummy.Head then
c = dummy.Head
elseif part.Name:find("Arm") and dummy.Arms then
c = dummy.Arms
elseif part.Name:find("Leg") and dummy.Legs then
c = dummy.Legs
elseif (part.Name == "Torso" or part.Name == "UpperTorso") and dummy.Torso then
c = dummy.Torso
elseif part.Name == "LeftLeg" and dummy.LeftLeg then
c = dummy.LeftLeg
elseif part.Name == "RightLeg" and dummy.RightLeg then
c = dummy.RightLeg
elseif dummy.Limbs then
c = dummy.Limbs
end
part.Color = c
if dummy.Transparency then
part.Transparency = dummy.Transparency
end
end
end
recolorAccessories(character, dummy, baseColor)
recolorNPCParts(character, dummy, baseColor)
local head = character:FindFirstChild("Head")
if head then
local face = head:FindFirstChildOfClass("Decal")
if face then
local poolName = DUMMY_FACE_MAP[dummyName] or "ALL"
local pool = FACE_POOLS[poolName] or FACE_POOLS.ALL
face.Texture = pool[math.random(#pool)]
face.Color3 =
(head.Color:Luminance() < 0.45)
and PALETTE.WHITE
or PALETTE.BLACK
end
end
end
local function safeApplyDummy(character, dummyName)
if not character or not character.Parent then return end
local humanoid = character:WaitForChild("Humanoid", 5)
local head = character:WaitForChild("Head", 5)
if not humanoid or not head then return end
removeBodyColors(character)
forceBlocky(character)
stripCharacter(character)
local face = head:FindFirstChildOfClass("Decal")
if not face then
face = Instance.new("Decal")
face.Name = "face"
face.Parent = head
end
task.wait()
task.wait()
applyDummy(character, dummyName)
end
local processedCharacters = {}
local function onCharacterAdded(player, character)
processedCharacters[character] = true
local humanoid = character:WaitForChild("Humanoid", 5)
local head = character:WaitForChild("Head", 5)
if not humanoid or not head then return end
local face = head:FindFirstChildOfClass("Decal")
if not face then
face = Instance.new("Decal")
face.Name = "face"
face.Parent = head
end
task.wait(0.5)
if player == LocalPlayer then
safeApplyDummy(character, "starterdummy")
else
safeApplyDummy(character, DUMMY_KEYS[math.random(#DUMMY_KEYS)])
end
local lastCheck = tick()
local connection
connection = RunService.Heartbeat:Connect(function()
if not character or not character.Parent then
connection:Disconnect()
processedCharacters[character] = nil
return
end
if tick() - lastCheck > 2 then
lastCheck = tick()
local hasClothing = false
for _, obj in ipairs(character:GetChildren()) do
if obj:IsA("Shirt") or obj:IsA("Pants") or obj:IsA("ShirtGraphic") then
hasClothing = true
break
end
if obj:IsA("Accessory") and shouldRemoveAccessory(obj) then
hasClothing = true
break
end
end
if hasClothing then
if player == LocalPlayer then
safeApplyDummy(character, "starterdummy")
else
safeApplyDummy(character, DUMMY_KEYS[math.random(#DUMMY_KEYS)])
end
end
end
end)
humanoid.Died:Connect(function()
if connection then
connection:Disconnect()
end
processedCharacters[character] = nil
end)
end
for _,player in ipairs(Players:GetPlayers()) do
if player.Character and not processedCharacters[player.Character] then
task.spawn(onCharacterAdded, player, player.Character)
end
player.CharacterAdded:Connect(function(char)
task.spawn(onCharacterAdded, player, char)
end)
end
Players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function(char)
task.spawn(onCharacterAdded, player, char)
end)
if player.Character and not processedCharacters[player.Character] then
task.spawn(onCharacterAdded, player, player.Character)
end
end)
local function handleNPC(model)
if not model:IsA("Model") then return end
if Players:GetPlayerFromCharacter(model) then return end
local humanoid = model:FindFirstChildOfClass("Humanoid")
if not humanoid then
humanoid = model:WaitForChild("Humanoid", 5)
end
if not humanoid then return end
task.wait()
local dummyName = NPC_DUMMY_MAP[model.Name] or "rig"
safeApplyDummy(model, dummyName)
end
for _,desc in ipairs(workspace:GetDescendants()) do
if desc:IsA("Model") then
task.spawn(handleNPC, desc)
end
end
workspace.DescendantAdded:Connect(function(desc)
if desc:IsA("Model") then
task.spawn(handleNPC, desc)
end
end)
print("Trapped.")No comments yet for this script.



