-- [[ 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 ]] -- 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!")