Unlock All Skins(READ DESCRIPTION!)
MEDIEVAL RTS [⚔️BIGGER ARMIES]Description
Transforms all current default units to any skin of your choice (can re-run script to transform all again)! A few skins are broken, I can fix it and make it transform buildings too but im lazy unless you gets want it.. Includes all skins Halloween, Christmas, Egypt, Angel, etc. Open source code, I spent almost a full day reverse engineering the backend so I can expand the code to include buildings, custom skins, and to notify of incoming armies in the future. Run this script when actually in a match/game, not in lobby. It will give you a GUI wherein you can select any skin. Most likely to work in brand new game, if you join late it doesn't run for some reason like 1/3 of the time.. Give me a thumbs up after it works for you and let me know in comments what you want next.
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. 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 BloxScripts Risk Notice ]]
local Players = game:GetService("Players")
local rs = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local player = Players.LocalPlayer
local Units = workspace.Game.PlayerFolder[player.Name].Units
local Skins = rs.Units
local oldGui = player.PlayerGui:FindFirstChild("UnitSkinSelector")
if oldGui then
oldGui:Destroy()
end
local oldVisuals = workspace:FindFirstChild("SelectedUnitSkins")
if oldVisuals then
oldVisuals:Destroy()
end
local visuals = Instance.new("Folder")
visuals.Name = "SelectedUnitSkins"
visuals.Parent = workspace
local gui = Instance.new("ScreenGui")
gui.Name = "UnitSkinSelector"
gui.ResetOnSpawn = false
gui.Parent = player.PlayerGui
local frame = Instance.new("Frame")
frame.Size = UDim2.new(0, 270, 0, 370)
frame.Position = UDim2.new(0.03, 0, 0.17, 0)
frame.BackgroundColor3 = Color3.fromRGB(25, 25, 30)
frame.BorderSizePixel = 0
frame.ClipsDescendants = true
frame.Parent = gui
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 12)
corner.Parent = frame
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, -55, 0, 40)
title.Position = UDim2.new(0, 10, 0, 5)
title.BackgroundTransparency = 1
title.Text = "UNIT SKIN SELECTOR"
title.TextColor3 = Color3.fromRGB(255, 215, 0)
title.TextScaled = true
title.Font = Enum.Font.GothamBold
title.Parent = frame
local minimize = Instance.new("TextButton")
minimize.Name = "Minimize"
minimize.Size = UDim2.new(0, 38, 0, 36)
minimize.Position = UDim2.new(1, -44, 0, 7)
minimize.BackgroundColor3 = Color3.fromRGB(65, 65, 75)
minimize.TextColor3 = Color3.new(1, 1, 1)
minimize.TextScaled = true
minimize.Font = Enum.Font.GothamBold
minimize.Text = "−"
minimize.Parent = frame
local minCorner = Instance.new("UICorner")
minCorner.CornerRadius = UDim.new(0, 8)
minCorner.Parent = minimize
local status = Instance.new("TextLabel")
status.Size = UDim2.new(1, -10, 0, 30)
status.Position = UDim2.new(0, 5, 0, 45)
status.BackgroundTransparency = 1
status.Text = "SELECT A SKIN"
status.TextColor3 = Color3.new(1, 1, 1)
status.TextScaled = true
status.Parent = frame
local scrolling = Instance.new("ScrollingFrame")
scrolling.Size = UDim2.new(1, -20, 1, -135)
scrolling.Position = UDim2.new(0, 10, 0, 85)
scrolling.BackgroundTransparency = 1
scrolling.BorderSizePixel = 0
scrolling.ScrollBarThickness = 5
scrolling.AutomaticCanvasSize = Enum.AutomaticSize.Y
scrolling.CanvasSize = UDim2.new(0, 0, 0, 0)
scrolling.Parent = frame
local layout = Instance.new("UIListLayout")
layout.Padding = UDim.new(0, 6)
layout.SortOrder = Enum.SortOrder.LayoutOrder
layout.Parent = scrolling
local resetButton = Instance.new("TextButton")
resetButton.Size = UDim2.new(1, -20, 0, 36)
resetButton.Position = UDim2.new(0, 10, 1, -43)
resetButton.BackgroundColor3 = Color3.fromRGB(125, 35, 35)
resetButton.TextColor3 = Color3.new(1, 1, 1)
resetButton.TextScaled = true
resetButton.Text = "REMOVE SKIN"
resetButton.Parent = frame
local resetCorner = Instance.new("UICorner")
resetCorner.CornerRadius = UDim.new(0, 8)
resetCorner.Parent = resetButton
local minimized = false
minimize.MouseButton1Click:Connect(function()
minimized = not minimized
if minimized then
frame.Size = UDim2.new(0, 270, 0, 50)
minimize.Text = "+"
status.Visible = false
scrolling.Visible = false
resetButton.Visible = false
else
frame.Size = UDim2.new(0, 270, 0, 370)
minimize.Text = "−"
status.Visible = true
scrolling.Visible = true
resetButton.Visible = true
end
end)
local converted = {}
local hidden = {}
local selectedSkin = nil
local generation = 0
local function restoreOriginals()
for part, original in pairs(hidden) do
if part and part.Parent then
if part:IsA("BasePart") then
part.LocalTransparencyModifier = original
elseif part:IsA("Decal") or part:IsA("Texture") then
part.Transparency = original
end
end
end
hidden = {}
end
local function clearSkins()
generation = generation + 1
for _, clone in pairs(converted) do
if clone and clone.Parent then
clone:Destroy()
end
end
converted = {}
restoreOriginals()
end
local function hideOriginal(unit)
for _, obj in ipairs(unit:GetDescendants()) do
if obj:IsA("BasePart") then
if hidden[obj] == nil then
hidden[obj] = obj.LocalTransparencyModifier
end
obj.LocalTransparencyModifier = 1
elseif obj:IsA("Decal") or obj:IsA("Texture") then
if hidden[obj] == nil then
hidden[obj] = obj.Transparency
end
obj.Transparency = 1
end
end
end
local function convertUnit(unit)
if not selectedSkin then return end
if not unit:IsA("Model") then return end
if converted[unit] then return end
local template = selectedSkin:FindFirstChild(unit.Name, true)
if not template or not template:IsA("Model") then
return
end
local clone = template:Clone()
clone.Name = "Local_" .. selectedSkin.Name .. "_" .. unit.Name
for _, obj in ipairs(clone:GetDescendants()) do
if obj:IsA("Script") or obj:IsA("LocalScript") then
obj:Destroy()
elseif obj:IsA("BasePart") then
obj.Anchored = true
obj.CanCollide = false
obj.CanTouch = false
obj.CanQuery = false
if obj.Name == "Hitbox" then
obj.Transparency = 1
end
end
end
clone.Parent = visuals
clone:PivotTo(unit:GetPivot())
hideOriginal(unit)
converted[unit] = clone
end
local function applySkin(folder)
clearSkins()
selectedSkin = folder
local count = 0
for _, unit in ipairs(Units:GetDescendants()) do
convertUnit(unit)
end
for _, clone in pairs(converted) do
if clone and clone.Parent then
count = count + 1
end
end
status.Text = folder.Name .. " | " .. count .. " UNITS"
print("SKIN SELECTED:", folder.Name)
end
local folders = {}
for _, folder in ipairs(Skins:GetChildren()) do
if folder:IsA("Folder") or folder:IsA("Model") then
table.insert(folders, folder)
end
end
table.sort(folders, function(a, b)
return a.Name:lower() < b.Name:lower()
end)
for i, folder in ipairs(folders) do
local button = Instance.new("TextButton")
button.Name = folder.Name
button.Size = UDim2.new(1, -8, 0, 38)
button.BackgroundColor3 = Color3.fromRGB(55, 55, 65)
button.TextColor3 = Color3.new(1, 1, 1)
button.Font = Enum.Font.GothamBold
button.TextScaled = true
button.Text = folder.Name
button.LayoutOrder = i
button.Parent = scrolling
local bc = Instance.new("UICorner")
bc.CornerRadius = UDim.new(0, 8)
bc.Parent = button
button.MouseButton1Click:Connect(function()
applySkin(folder)
for _, other in ipairs(scrolling:GetChildren()) do
if other:IsA("TextButton") then
other.BackgroundColor3 = Color3.fromRGB(55, 55, 65)
end
end
button.BackgroundColor3 = Color3.fromRGB(0, 135, 80)
end)
end
resetButton.MouseButton1Click:Connect(function()
clearSkins()
selectedSkin = nil
status.Text = "ORIGINAL UNITS RESTORED"
for _, button in ipairs(scrolling:GetChildren()) do
if button:IsA("TextButton") then
button.BackgroundColor3 = Color3.fromRGB(55, 55, 65)
end
end
end)
Units.DescendantAdded:Connect(function(unit)
if not selectedSkin then return end
local currentGeneration = generation
task.delay(0.2, function()
if currentGeneration == generation
and selectedSkin
and unit.Parent then
convertUnit(unit)
end
end)
end)
local elapsed = 0
RunService.Heartbeat:Connect(function(dt)
if not gui.Parent then return end
elapsed = elapsed + dt
if elapsed < 0.05 then
return
end
elapsed = 0
for unit, clone in pairs(converted) do
if unit.Parent and clone.Parent then
clone:PivotTo(unit:GetPivot())
else
if clone.Parent then
clone:Destroy()
end
converted[unit] = nil
end
end
end)
print("UNIT SKIN SELECTOR WITH MINIMIZE LOADED")Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.


Your community, in one place