M
Description
This is source. You can change or add to your script! The GUI was made by AI!
GAMEOhio.
UPDATEDOct 10, 2026
ACCESSKeyless
PLATFORMDesktop
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 ]]
-- Full Skin Changer with Touch UI
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local Player = Players.LocalPlayer
local PlayerGui = Player:WaitForChild("PlayerGui")
local UserInputService = game:GetService("UserInputService")
local devv = require(ReplicatedStorage.devv)
local load = devv.load
local state = load("state")
local skins = load("skins")
local v3item = load("v3item")
local Signal = load("Signal")
-- Создаем ScreenGui
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "SkinChangerMobile"
ScreenGui.ResetOnSpawn = false
ScreenGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
ScreenGui.Parent = PlayerGui
-- Главный фрейм (адаптирован для мобильных)
local MainFrame = Instance.new("Frame")
MainFrame.Name = "MainFrame"
MainFrame.Size = UDim2.new(0.95, 0, 0.85, 0)
MainFrame.Position = UDim2.new(0.5, 0, 0.5, 0)
MainFrame.AnchorPoint = Vector2.new(0.5, 0.5)
MainFrame.BackgroundColor3 = Color3.fromRGB(25, 25, 25)
MainFrame.BorderSizePixel = 0
MainFrame.Parent = ScreenGui
-- Скругление углов
local UICorner = Instance.new("UICorner")
UICorner.CornerRadius = UDim.new(0, 12)
UICorner.Parent = MainFrame
-- Заголовок
local Title = Instance.new("TextLabel")
Title.Name = "Title"
Title.Size = UDim2.new(1, 0, 0, 45)
Title.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
Title.BorderSizePixel = 0
Title.Text = "🎨 Skin Changer"
Title.TextColor3 = Color3.fromRGB(255, 255, 255)
Title.Font = Enum.Font.GothamBold
Title.TextSize = 20
Title.Parent = MainFrame
local TitleCorner = Instance.new("UICorner")
TitleCorner.CornerRadius = UDim.new(0, 12)
TitleCorner.Parent = Title
-- Кнопка закрытия
local CloseButton = Instance.new("TextButton")
CloseButton.Name = "CloseButton"
CloseButton.Size = UDim2.new(0, 40, 0, 40)
CloseButton.Position = UDim2.new(1, -45, 0, 2)
CloseButton.BackgroundColor3 = Color3.fromRGB(180, 50, 50)
CloseButton.BorderSizePixel = 0
CloseButton.Text = "✕"
CloseButton.TextColor3 = Color3.fromRGB(255, 255, 255)
CloseButton.Font = Enum.Font.GothamBold
CloseButton.TextSize = 18
CloseButton.Parent = MainFrame
local CloseCorner = Instance.new("UICorner")
CloseCorner.CornerRadius = UDim.new(0, 20)
CloseCorner.Parent = CloseButton
CloseButton.MouseButton1Click:Connect(function()
ScreenGui:Destroy()
end)
-- Верхняя панель с поиском
local SearchFrame = Instance.new("Frame")
SearchFrame.Name = "SearchFrame"
SearchFrame.Size = UDim2.new(1, -10, 0, 40)
SearchFrame.Position = UDim2.new(0, 5, 0, 50)
SearchFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
SearchFrame.BorderSizePixel = 0
SearchFrame.Parent = MainFrame
local SearchCorner = Instance.new("UICorner")
SearchCorner.CornerRadius = UDim.new(0, 8)
SearchCorner.Parent = SearchFrame
local SearchBox = Instance.new("TextBox")
SearchBox.Name = "SearchBox"
SearchBox.Size = UDim2.new(1, -20, 1, 0)
SearchBox.Position = UDim2.new(0, 10, 0, 0)
SearchBox.BackgroundTransparency = 1
SearchBox.BorderSizePixel = 0
SearchBox.PlaceholderText = "🔍 Поиск скина..."
SearchBox.PlaceholderColor3 = Color3.fromRGB(150, 150, 150)
SearchBox.Text = ""
SearchBox.TextColor3 = Color3.fromRGB(255, 255, 255)
SearchBox.Font = Enum.Font.Gotham
SearchBox.TextSize = 16
SearchBox.Parent = SearchFrame
-- Список оружия (горизонтальный скролл)
local WeaponScroll = Instance.new("ScrollingFrame")
WeaponScroll.Name = "WeaponScroll"
WeaponScroll.Size = UDim2.new(1, -10, 0, 80)
WeaponScroll.Position = UDim2.new(0, 5, 0, 95)
WeaponScroll.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
WeaponScroll.BorderSizePixel = 0
WeaponScroll.ScrollBarThickness = 3
WeaponScroll.ScrollingDirection = Enum.ScrollingDirection.X
WeaponScroll.CanvasSize = UDim2.new(10, 0, 1, 0)
WeaponScroll.Parent = MainFrame
local WeaponCorner = Instance.new("UICorner")
WeaponCorner.CornerRadius = UDim.new(0, 8)
WeaponCorner.Parent = WeaponScroll
local WeaponLayout = Instance.new("UIListLayout")
WeaponLayout.FillDirection = Enum.FillDirection.Horizontal
WeaponLayout.SortOrder = Enum.SortOrder.Name
WeaponLayout.Padding = UDim.new(0, 8)
WeaponLayout.Parent = WeaponScroll
-- Список скинов (вертикальный скролл)
local SkinScroll = Instance.new("ScrollingFrame")
SkinScroll.Name = "SkinScroll"
SkinScroll.Size = UDim2.new(1, -10, 1, -225)
SkinScroll.Position = UDim2.new(0, 5, 0, 180)
SkinScroll.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
SkinScroll.BorderSizePixel = 0
SkinScroll.ScrollBarThickness = 5
SkinScroll.ScrollingDirection = Enum.ScrollingDirection.Y
SkinScroll.CanvasSize = UDim2.new(1, 0, 10, 0)
SkinScroll.Parent = MainFrame
local SkinCorner = Instance.new("UICorner")
SkinCorner.CornerRadius = UDim.new(0, 8)
SkinCorner.Parent = SkinScroll
local SkinLayout = Instance.new("UIListLayout")
SkinLayout.SortOrder = Enum.SortOrder.LayoutOrder
SkinLayout.Padding = UDim.new(0, 8)
SkinLayout.Parent = SkinScroll
-- Кнопки управления
local ButtonFrame = Instance.new("Frame")
ButtonFrame.Name = "ButtonFrame"
ButtonFrame.Size = UDim2.new(1, -10, 0, 35)
ButtonFrame.Position = UDim2.new(0, 5, 1, -40)
ButtonFrame.BackgroundTransparency = 1
ButtonFrame.Parent = MainFrame
-- Кнопка сброса
local ResetButton = Instance.new("TextButton")
ResetButton.Name = "ResetButton"
ResetButton.Size = UDim2.new(0.45, 0, 1, 0)
ResetButton.Position = UDim2.new(0, 0, 0, 0)
ResetButton.BackgroundColor3 = Color3.fromRGB(180, 50, 50)
ResetButton.BorderSizePixel = 0
ResetButton.Text = "🔄 Сбросить"
ResetButton.TextColor3 = Color3.fromRGB(255, 255, 255)
ResetButton.Font = Enum.Font.GothamBold
ResetButton.TextSize = 14
ResetButton.Parent = ButtonFrame
local ResetCorner = Instance.new("UICorner")
ResetCorner.CornerRadius = UDim.new(0, 8)
ResetCorner.Parent = ResetButton
-- Кнопка случайного скина
local RandomButton = Instance.new("TextButton")
RandomButton.Name = "RandomButton"
RandomButton.Size = UDim2.new(0.45, 0, 1, 0)
RandomButton.Position = UDim2.new(0.55, 0, 0, 0)
RandomButton.BackgroundColor3 = Color3.fromRGB(50, 150, 50)
RandomButton.BorderSizePixel = 0
RandomButton.Text = "🎲 Случайный"
RandomButton.TextColor3 = Color3.fromRGB(255, 255, 255)
RandomButton.Font = Enum.Font.GothamBold
RandomButton.TextSize = 14
RandomButton.Parent = ButtonFrame
local RandomCorner = Instance.new("UICorner")
RandomCorner.CornerRadius = UDim.new(0, 8)
RandomCorner.Parent = RandomButton
-- Переменные
local selectedWeapon = nil
local currentWeaponButton = nil
local weaponButtons = {}
-- Функция для получения списка оружия
local function GetWeaponsList()
local weapons = {}
local seen = {}
if skins.compatabilities and skins.compatabilities.Generic then
for _, weapon in ipairs(skins.compatabilities.Generic) do
if not seen[weapon] then
table.insert(weapons, weapon)
seen[weapon] = true
end
end
end
for skinName, skinData in pairs(skins.skinData) do
local compat = skins.GetCompatabilityTable(skinName)
if compat then
for _, weapon in ipairs(compat) do
if not seen[weapon] then
table.insert(weapons, weapon)
seen[weapon] = true
end
end
end
end
table.sort(weapons)
return weapons
end
-- Функция установки скина
local function SetSkin(weaponName, skinName)
if not skins.skinData[skinName] then
return false, "Скин не найден"
end
if not skins.IsSkinCompatible(weaponName, skinName) then
return false, "Скин несовместим"
end
pcall(function()
Signal.InvokeServer("equipSkin", weaponName, skinName)
end)
if state.data then
if not state.data.equippedSkins then
state.data.equippedSkins = {}
end
state.data.equippedSkins[weaponName] = skinName
end
if v3item and v3item.inventory then
pcall(function()
v3item.inventory.unequipAll()
v3item.inventory.skinUpdate(weaponName, skinName)
end)
end
return true, "Скин установлен!"
end
-- Функция для показа уведомлений
local function ShowNotification(message, color)
local Notification = Instance.new("TextLabel")
Notification.Size = UDim2.new(0.8, 0, 0, 35)
Notification.Position = UDim2.new(0.5, 0, 0.1, 0)
Notification.AnchorPoint = Vector2.new(0.5, 0)
Notification.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
Notification.BackgroundTransparency = 0.3
Notification.BorderSizePixel = 0
Notification.Text = message
Notification.TextColor3 = color or Color3.fromRGB(255, 255, 255)
Notification.Font = Enum.Font.GothamBold
Notification.TextSize = 14
Notification.ZIndex = 10
Notification.Parent = ScreenGui
local NotifCorner = Instance.new("UICorner")
NotifCorner.CornerRadius = UDim.new(0, 8)
NotifCorner.Parent = Notification
spawn(function()
for i = 1, 10 do
Notification.Position = Notification.Position + UDim2.new(0, 0, 0, 5)
wait(0.03)
end
wait(1.5)
for i = 1, 10 do
Notification.BackgroundTransparency = Notification.BackgroundTransparency + 0.1
Notification.TextTransparency = Notification.TextTransparency + 0.1
wait(0.03)
end
Notification:Destroy()
end)
end
-- Функция отображения скинов
local function ShowSkinsForWeapon(weaponName, searchFilter)
-- Очищаем список скинов
for _, child in ipairs(SkinScroll:GetChildren()) do
if child:IsA("TextButton") or child:IsA("Frame") then
child:Destroy()
end
end
local availableSkins = {}
for skinName, skinData in pairs(skins.skinData) do
if skins.IsSkinCompatible(weaponName, skinName) then
local displayName = skinData.displayName or skinName
if not searchFilter or searchFilter == "" or
displayName:lower():find(searchFilter:lower()) or
skinName:lower():find(searchFilter:lower()) then
availableSkins[skinName] = skinData
end
end
end
-- Сортировка по редкости
local rarityOrder = {
["Legendary"] = 1,
["Mythic"] = 2,
["Epic"] = 3,
["Rare"] = 4,
["Common"] = 5
}
local sortedSkins = {}
for name, data in pairs(availableSkins) do
table.insert(sortedSkins, {name = name, data = data})
end
table.sort(sortedSkins, function(a, b)
local ra = rarityOrder[a.data.rarity] or 99
local rb = rarityOrder[b.data.rarity] or 99
if ra ~= rb then
return ra < rb
end
return (a.data.displayName or a.name) < (b.data.displayName or b.name)
end)
-- Создаем кнопки скинов
for i, skinInfo in ipairs(sortedSkins) do
local skinName = skinInfo.name
local skinData = skinInfo.data
local rarity = skinData.rarity or "Common"
local displayName = skinData.displayName or skinName
local SkinButton = Instance.new("TextButton")
SkinButton.Name = "Skin_" .. skinName
SkinButton.Size = UDim2.new(1, -10, 0, 50)
SkinButton.Position = UDim2.new(0, 5, 0, 0)
SkinButton.LayoutOrder = i
SkinButton.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
SkinButton.BorderSizePixel = 0
SkinButton.Text = ""
SkinButton.Parent = SkinScroll
local SkinCorner = Instance.new("UICorner")
SkinCorner.CornerRadius = UDim.new(0, 8)
SkinCorner.Parent = SkinButton
-- Название скина
local SkinNameLabel = Instance.new("TextLabel")
SkinNameLabel.Size = UDim2.new(0.7, 0, 1, 0)
SkinNameLabel.Position = UDim2.new(0, 10, 0, 0)
SkinNameLabel.BackgroundTransparency = 1
SkinNameLabel.Text = displayName
SkinNameLabel.TextXAlignment = Enum.TextXAlignment.Left
SkinNameLabel.Font = Enum.Font.GothamBold
SkinNameLabel.TextSize = 16
SkinNameLabel.Parent = SkinButton
-- Редкость
local rarityColors = {
["Common"] = Color3.fromRGB(145, 255, 126),
["Rare"] = Color3.fromRGB(85, 160, 235),
["Epic"] = Color3.fromRGB(255, 0, 242),
["Mythic"] = Color3.fromRGB(255, 85, 0),
["Legendary"] = Color3.fromRGB(255, 217, 0)
}
SkinNameLabel.TextColor3 = rarityColors[rarity] or Color3.fromRGB(255, 255, 255)
-- Бейдж редкости
local RarityBadge = Instance.new("TextLabel")
RarityBadge.Size = UDim2.new(0, 80, 0, 25)
RarityBadge.Position = UDim2.new(1, -90, 0.5, -12)
RarityBadge.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
RarityBadge.BorderSizePixel = 0
RarityBadge.Text = rarity
RarityBadge.TextColor3 = rarityColors[rarity] or Color3.fromRGB(255, 255, 255)
RarityBadge.Font = Enum.Font.GothamBold
RarityBadge.TextSize = 12
RarityBadge.Parent = SkinButton
local BadgeCorner = Instance.new("UICorner")
BadgeCorner.CornerRadius = UDim.new(0, 12)
BadgeCorner.Parent = RarityBadge
-- Обработчик нажатия
SkinButton.MouseButton1Click:Connect(function()
local success, message = SetSkin(weaponName, skinName)
if success then
-- Обновляем визуал
for _, btn in ipairs(SkinScroll:GetChildren()) do
if btn:IsA("TextButton") then
btn.BackgroundColor3 = Color3.fromRGB(45, 45, 45)
end
end
SkinButton.BackgroundColor3 = Color3.fromRGB(0, 120, 0)
ShowNotification("✅ " .. displayName .. " установлен!", Color3.fromRGB(0, 255, 0))
else
ShowNotification("❌ " .. message, Color3.fromRGB(255, 0, 0))
end
end)
-- Подсветка текущего скина
if state.data.equippedSkins and state.data.equippedSkins[weaponName] == skinName then
SkinButton.BackgroundColor3 = Color3.fromRGB(0, 120, 0)
end
end
-- Обновляем CanvasSize
local totalHeight = #sortedSkins * 58
SkinScroll.CanvasSize = UDim2.new(1, 0, 0, totalHeight)
end
-- Создание списка оружия
local function PopulateWeaponList()
local weapons = GetWeaponsList()
for i, weapon in ipairs(weapons) do
local WeaponButton = Instance.new("TextButton")
WeaponButton.Name = "Weapon_" .. weapon
WeaponButton.Size = UDim2.new(0, 100, 0, 60)
WeaponButton.Position = UDim2.new(0, 0, 0, 10)
WeaponButton.LayoutOrder = i
WeaponButton.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
WeaponButton.BorderSizePixel = 0
WeaponButton.Text = weapon
WeaponButton.TextColor3 = Color3.fromRGB(255, 255, 255)
WeaponButton.Font = Enum.Font.GothamBold
WeaponButton.TextSize = 12
WeaponButton.TextWrapped = true
WeaponButton.Parent = WeaponScroll
local WeaponBtnCorner = Instance.new("UICorner")
WeaponBtnCorner.CornerRadius = UDim.new(0, 8)
WeaponBtnCorner.Parent = WeaponButton
weaponButtons[weapon] = WeaponButton
WeaponButton.MouseButton1Click:Connect(function()
-- Сброс подсветки
for _, btn in pairs(weaponButtons) do
btn.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
end
-- Подсветка выбранного
WeaponButton.BackgroundColor3 = Color3.fromRGB(70, 70, 70)
selectedWeapon = weapon
currentWeaponButton = WeaponButton
ShowSkinsForWeapon(weapon, SearchBox.Text)
end)
end
-- Обновляем CanvasSize для горизонтального скролла
local totalWidth = #weapons * 108
WeaponScroll.CanvasSize = UDim2.new(0, totalWidth, 1, 0)
end
-- Обработчик поиска
SearchBox:GetPropertyChangedSignal("Text"):Connect(function()
if selectedWeapon then
ShowSkinsForWeapon(selectedWeapon, SearchBox.Text)
end
end)
-- Кнопка сброса
ResetButton.MouseButton1Click:Connect(function()
if state.data then
state.data.equippedSkins = {}
end
if v3item and v3item.inventory then
pcall(function()
v3item.inventory.unequipAll()
end)
end
if selectedWeapon then
ShowSkinsForWeapon(selectedWeapon, SearchBox.Text)
end
ShowNotification("🔄 Все скины сброшены", Color3.fromRGB(255, 255, 0))
end)
-- Кнопка случайного скина
RandomButton.MouseButton1Click:Connect(function()
if not selectedWeapon then
ShowNotification("⚠️ Выберите оружие!", Color3.fromRGB(255, 165, 0))
return
end
local availableSkins = {}
for skinName, skinData in pairs(skins.skinData) do
if skins.IsSkinCompatible(selectedWeapon, skinName) then
table.insert(availableSkins, skinName)
end
end
if #availableSkins > 0 then
local randomSkin = availableSkins[math.random(1, #availableSkins)]
local success, message = SetSkin(selectedWeapon, randomSkin)
if success then
ShowNotification("🎲 " .. randomSkin .. " установлен!", Color3.fromRGB(0, 255, 255))
ShowSkinsForWeapon(selectedWeapon, SearchBox.Text)
end
else
ShowNotification("❌ Нет доступных скинов", Color3.fromRGB(255, 0, 0))
end
end)
-- Кнопка для открытия меню (плавающая)
local ToggleButton = Instance.new("TextButton")
ToggleButton.Name = "ToggleButton"
ToggleButton.Size = UDim2.new(0, 60, 0, 60)
ToggleButton.Position = UDim2.new(1, -70, 0.5, -30)
ToggleButton.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
ToggleButton.BorderSizePixel = 0
ToggleButton.Text = "🎨"
ToggleButton.TextColor3 = Color3.fromRGB(255, 255, 255)
ToggleButton.Font = Enum.Font.GothamBold
ToggleButton.TextSize = 30
ToggleButton.ZIndex = 100
ToggleButton.Parent = ScreenGui
local ToggleCorner = Instance.new("UICorner")
ToggleCorner.CornerRadius = UDim.new(0, 30)
ToggleCorner.Parent = ToggleButton
ToggleButton.MouseButton1Click:Connect(function()
MainFrame.Visible = not MainFrame.Visible
if MainFrame.Visible then
ToggleButton.Text = "✕"
else
ToggleButton.Text = "🎨"
end
end)
-- Инициализация
PopulateWeaponList()
-- Автовыбор первого оружия
wait(0.5)
local firstWeapon = nil
for weapon, btn in pairs(weaponButtons) do
if not firstWeapon then
firstWeapon = weapon
btn.BackgroundColor3 = Color3.fromRGB(70, 70, 70)
selectedWeapon = weapon
currentWeaponButton = btn
end
end
if firstWeapon then
ShowSkinsForWeapon(firstWeapon)
end
print("Skin Changer loaded!")Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place