-- [[ 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 ]] --[[ GAS_YT Skin Changer v3 — BloxStrike + SKIN ALL: один скин на ВСЁ оружие + RANDOM ALL: случайный скин на каждое оружие + BEST ALL: самый редкий скин на каждое оружие - Сохранён UI из v2: выбор скина + износа для каждого оружия - Автоприменение при смене оружия - Только визуал ]] local Players = game:GetService("Players") local RS = game:GetService("ReplicatedStorage") local RunService = game:GetService("RunService") local UIS = game:GetService("UserInputService") local Workspace = game:GetService("Workspace") local LP = Players.LocalPlayer local camera = Workspace.CurrentCamera local SkinsFolder = RS:WaitForChild("Assets"):WaitForChild("Skins") local WEARS = { "Factory New", "Minimal Wear", "Field-Tested", "Well-Worn", "Battle-Scarred", } local IgnoreFolders = { "HE Grenade", "Incendiary Grenade", "Molotov", "Smoke Grenade", "Flashbang", "Decoy Grenade", "C4", "CT Glove", "T Glove", } -- Ключевые слова редкости (от редкого к обычному) local RARE_KEYWORDS = { "Special", "Ruby", "Sapphire", "Emerald", "Pearl", "Gold", "Diamond", "Karambit", "Butterfly", "M9 Bayonet", "Flip", "Gut", "Dragon", "Lore", "Fire", "Serpent", "Medusa", "Hyperbeast", "Asiimov", "Vulcan", "Slayer", "Howl", "Comics", "Conspiracy", "Lightning", "Crown", "Royal", "Emperor", "Phoenix", "Crimson", "Vine", "Doppler", "Marble", "Fade", "Tiger", "Damascus", "Boreal", "Case", "Neo", "Cyrex", "Red", "Blue", "Green", "Purple", "Orange", "Black", "White", } local function getSkinRarity(skinName) local name = skinName:lower() for i, kw in ipairs(RARE_KEYWORDS) do if name:match(kw:lower()) then return #RARE_KEYWORDS - i + 1 -- чем раньше найдено — тем выше редкость end end return 0 end --================================================================== -- STATE --================================================================== local skinChangerOn = false local selectedSkins = {} local allWeapons = {} local weaponButtons = {} local currentDetailWeapon = nil --================================================================== -- GUI --================================================================== local function getGuiParent() local ok, hui = pcall(function() return gethui and gethui() end) if ok and hui then return hui end local ok2, cg = pcall(function() return game:GetService("CoreGui") end) if ok2 and cg then return cg end return LP:WaitForChild("PlayerGui") end local parent = getGuiParent() local neonGray = Color3.fromRGB(120, 120, 140) local neonGreen = Color3.fromRGB(0, 255, 136) local neonBlue = Color3.fromRGB(80, 170, 255) local neonRed = Color3.fromRGB(220, 60, 80) local neonGold = Color3.fromRGB(255, 200, 80) local neonPurple = Color3.fromRGB(180, 100, 255) local panelBg = Color3.fromRGB(14, 14, 20) local itemBg = Color3.fromRGB(20, 20, 28) local oldGui = parent:FindFirstChild("GAS_SkinChanger3") if oldGui then oldGui:Destroy() end local sg = Instance.new("ScreenGui") sg.Name = "GAS_SkinChanger3" sg.ResetOnSpawn = false sg.IgnoreGuiInset = true sg.Parent = parent local win = Instance.new("Frame") win.Size = UDim2.new(0, 400, 0, 520) win.Position = UDim2.new(0, 20, 0, 60) win.BackgroundColor3 = panelBg win.BorderSizePixel = 0 win.Active = true win.Parent = sg Instance.new("UICorner", win).CornerRadius = UDim.new(0, 12) local winStroke = Instance.new("UIStroke", win) winStroke.Color = neonGray winStroke.Thickness = 1.5 winStroke.Transparency = 0.2 -- Заголовок local titleBar = Instance.new("Frame") titleBar.Size = UDim2.new(1, 0, 0, 36) titleBar.BackgroundColor3 = Color3.fromRGB(18, 18, 24) titleBar.BorderSizePixel = 0 titleBar.Parent = win Instance.new("UICorner", titleBar).CornerRadius = UDim.new(0, 12) local title = Instance.new("TextLabel") title.Size = UDim2.new(1, -200, 1, 0) title.Position = UDim2.new(0, 10, 0, 0) title.BackgroundTransparency = 1 title.Text = "\u{273F} Skin Changer v3" title.TextColor3 = neonGray title.Font = Enum.Font.GothamBold title.TextSize = 13 title.TextXAlignment = Enum.TextXAlignment.Left title.Parent = titleBar local enableBtn = Instance.new("TextButton") enableBtn.Size = UDim2.new(0, 160, 0, 28) enableBtn.Position = UDim2.new(1, -170, 0, 4) enableBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 26) enableBtn.Text = "SKIN CHANGER: OFF" enableBtn.Font = Enum.Font.GothamBold enableBtn.TextSize = 10 enableBtn.TextColor3 = Color3.fromRGB(130, 130, 145) enableBtn.BorderSizePixel = 0 enableBtn.Parent = titleBar Instance.new("UICorner", enableBtn).CornerRadius = UDim.new(0, 6) --================================================================== -- ПАНЕЛЬ "SKIN ALL" --================================================================== local allLabel = Instance.new("TextLabel") allLabel.Size = UDim2.new(1, -20, 0, 20) allLabel.Position = UDim2.new(0, 10, 0, 42) allLabel.BackgroundTransparency = 1 allLabel.Text = "МАССОВОЕ НАЛОЖЕНИЕ:" allLabel.TextColor3 = neonGold allLabel.Font = Enum.Font.GothamBold allLabel.TextSize = 12 allLabel.TextXAlignment = Enum.TextXAlignment.Left allLabel.Parent = win -- Выбор скина для ALL local allSkinInput = Instance.new("TextBox") allSkinInput.Size = UDim2.new(1, -20, 0, 28) allSkinInput.Position = UDim2.new(0, 10, 0, 64) allSkinInput.BackgroundColor3 = Color3.fromRGB(18, 18, 24) allSkinInput.Text = "" allSkinInput.PlaceholderText = "Название скина (пусто = лучший на каждое)" allSkinInput.PlaceholderColor3 = Color3.fromRGB(70, 70, 85) allSkinInput.TextColor3 = Color3.fromRGB(220, 220, 230) allSkinInput.Font = Enum.Font.Gotham allSkinInput.TextSize = 12 allSkinInput.TextXAlignment = Enum.TextXAlignment.Left allSkinInput.BorderSizePixel = 0 allSkinInput.Parent = win Instance.new("UICorner", allSkinInput).CornerRadius = UDim.new(0, 6) local allStroke = Instance.new("UIStroke", allSkinInput) allStroke.Color = neonGray allStroke.Thickness = 1 allStroke.Transparency = 0.5 -- Кнопки массового наложения local skinAllBtn = Instance.new("TextButton") skinAllBtn.Size = UDim2.new(0.32, -2, 0, 32) skinAllBtn.Position = UDim2.new(0, 10, 0, 98) skinAllBtn.BackgroundColor3 = Color3.fromRGB(20, 35, 25) skinAllBtn.Text = "SKIN ALL" skinAllBtn.TextColor3 = neonGreen skinAllBtn.Font = Enum.Font.GothamBold skinAllBtn.TextSize = 11 skinAllBtn.BorderSizePixel = 0 skinAllBtn.Parent = win Instance.new("UICorner", skinAllBtn).CornerRadius = UDim.new(0, 6) local randomAllBtn = Instance.new("TextButton") randomAllBtn.Size = UDim2.new(0.32, -2, 0, 32) randomAllBtn.Position = UDim2.new(0.34, 6, 0, 98) randomAllBtn.BackgroundColor3 = Color3.fromRGB(35, 20, 45) randomAllBtn.Text = "RANDOM ALL" randomAllBtn.TextColor3 = neonPurple randomAllBtn.Font = Enum.Font.GothamBold randomAllBtn.TextSize = 11 randomAllBtn.BorderSizePixel = 0 randomAllBtn.Parent = win Instance.new("UICorner", randomAllBtn).CornerRadius = UDim.new(0, 6) local bestAllBtn = Instance.new("TextButton") bestAllBtn.Size = UDim2.new(0.32, -2, 0, 32) bestAllBtn.Position = UDim2.new(0.67, 2, 0, 98) bestAllBtn.BackgroundColor3 = Color3.fromRGB(40, 30, 15) bestAllBtn.Text = "BEST ALL" bestAllBtn.TextColor3 = neonGold bestAllBtn.Font = Enum.Font.GothamBold bestAllBtn.TextSize = 11 bestAllBtn.BorderSizePixel = 0 bestAllBtn.Parent = win Instance.new("UICorner", bestAllBtn).CornerRadius = UDim.new(0, 6) -- Выбор износа для ALL local allWearLabel = Instance.new("TextLabel") allWearLabel.Size = UDim2.new(0, 60, 0, 20) allWearLabel.Position = UDim2.new(0, 10, 0, 136) allWearLabel.BackgroundTransparency = 1 allWearLabel.Text = "Износ:" allWearLabel.TextColor3 = Color3.fromRGB(100, 100, 115) allWearLabel.Font = Enum.Font.Gotham allWearLabel.TextSize = 11 allWearLabel.TextXAlignment = Enum.TextXAlignment.Left allWearLabel.Parent = win local allWearBtn = Instance.new("TextButton") allWearBtn.Size = UDim2.new(0, 150, 0, 24) allWearBtn.Position = UDim2.new(0, 60, 0, 134) allWearBtn.BackgroundColor3 = itemBg allWearBtn.Text = "Factory New" allWearBtn.TextColor3 = neonBlue allWearBtn.Font = Enum.Font.Gotham allWearBtn.TextSize = 11 allWearBtn.TextXAlignment = Enum.TextXAlignment.Left allWearBtn.BorderSizePixel = 0 allWearBtn.Parent = win Instance.new("UICorner", allWearBtn).CornerRadius = UDim.new(0, 4) local allWear = "Factory New" local allWearIndex = 1 allWearBtn.MouseButton1Click:Connect(function() allWearIndex = allWearIndex + 1 if allWearIndex > #WEARS then allWearIndex = 1 end allWear = WEARS[allWearIndex] allWearBtn.Text = allWear end) -- Сбросить всё local resetAllBtn = Instance.new("TextButton") resetAllBtn.Size = UDim2.new(0, 120, 0, 24) resetAllBtn.Position = UDim2.new(1, -130, 0, 134) resetAllBtn.BackgroundColor3 = Color3.fromRGB(30, 15, 20) resetAllBtn.Text = "СБРОСИТЬ ВСЁ" resetAllBtn.TextColor3 = neonRed resetAllBtn.Font = Enum.Font.GothamBold resetAllBtn.TextSize = 10 resetAllBtn.BorderSizePixel = 0 resetAllBtn.Parent = win Instance.new("UICorner", resetAllBtn).CornerRadius = UDim.new(0, 4) -- Разделитель local divider = Instance.new("Frame") divider.Size = UDim2.new(1, -20, 0, 1) divider.Position = UDim2.new(0, 10, 0, 164) divider.BackgroundColor3 = Color3.fromRGB(40, 40, 50) divider.BorderSizePixel = 0 divider.Parent = win --================================================================== -- ЛЕВАЯ ПАНЕЛЬ: список оружия --================================================================== local listLabel = Instance.new("TextLabel") listLabel.Size = UDim2.new(0, 160, 0, 20) listLabel.Position = UDim2.new(0, 10, 0, 170) listLabel.BackgroundTransparency = 1 listLabel.Text = "Оружие (индивидуально):" listLabel.TextColor3 = Color3.fromRGB(100, 100, 115) listLabel.Font = Enum.Font.GothamBold listLabel.TextSize = 11 listLabel.TextXAlignment = Enum.TextXAlignment.Left listLabel.Parent = win local weaponList = Instance.new("ScrollingFrame") weaponList.Size = UDim2.new(0, 160, 0, 300) weaponList.Position = UDim2.new(0, 10, 0, 192) weaponList.BackgroundColor3 = Color3.fromRGB(8, 8, 12) weaponList.BorderSizePixel = 0 weaponList.ScrollBarThickness = 4 weaponList.ScrollBarImageColor3 = neonGray weaponList.CanvasSize = UDim2.new(0, 0, 0, 0) weaponList.AutomaticCanvasSize = Enum.AutomaticSize.Y weaponList.Parent = win Instance.new("UICorner", weaponList).CornerRadius = UDim.new(0, 6) local weaponLayout = Instance.new("UIListLayout", weaponList) weaponLayout.SortOrder = Enum.SortOrder.Name weaponLayout.Padding = UDim.new(0, 2) --================================================================== -- ПРАВАЯ ПАНЕЛЬ: выбор скина и износа --================================================================== local detailPanel = Instance.new("Frame") detailPanel.Size = UDim2.new(0, 210, 0, 300) detailPanel.Position = UDim2.new(0, 180, 0, 192) detailPanel.BackgroundColor3 = Color3.fromRGB(8, 8, 12) detailPanel.BorderSizePixel = 0 detailPanel.Parent = win Instance.new("UICorner", detailPanel).CornerRadius = UDim.new(0, 6) local detailTitle = Instance.new("TextLabel") detailTitle.Size = UDim2.new(1, -10, 0, 22) detailTitle.Position = UDim2.new(0, 5, 0, 4) detailTitle.BackgroundTransparency = 1 detailTitle.Text = "Выбери оружие \u{2192}" detailTitle.TextColor3 = Color3.fromRGB(100, 100, 115) detailTitle.Font = Enum.Font.GothamBold detailTitle.TextSize = 12 detailTitle.TextXAlignment = Enum.TextXAlignment.Left detailTitle.Parent = detailPanel local currentSkinLabel = Instance.new("TextLabel") currentSkinLabel.Size = UDim2.new(1, -10, 0, 16) currentSkinLabel.Position = UDim2.new(0, 5, 0, 28) currentSkinLabel.BackgroundTransparency = 1 currentSkinLabel.Text = "Скин: —" currentSkinLabel.TextColor3 = neonGold currentSkinLabel.Font = Enum.Font.Gotham currentSkinLabel.TextSize = 11 currentSkinLabel.TextXAlignment = Enum.TextXAlignment.Left currentSkinLabel.Parent = detailPanel local skinSelectBtn = Instance.new("TextButton") skinSelectBtn.Size = UDim2.new(1, -10, 0, 28) skinSelectBtn.Position = UDim2.new(0, 5, 0, 46) skinSelectBtn.BackgroundColor3 = itemBg skinSelectBtn.Text = "Выбрать скин..." skinSelectBtn.TextColor3 = Color3.fromRGB(200, 200, 210) skinSelectBtn.Font = Enum.Font.Gotham skinSelectBtn.TextSize = 11 skinSelectBtn.TextXAlignment = Enum.TextXAlignment.Left skinSelectBtn.BorderSizePixel = 0 skinSelectBtn.Parent = detailPanel Instance.new("UICorner", skinSelectBtn).CornerRadius = UDim.new(0, 6) local currentWearLabel = Instance.new("TextLabel") currentWearLabel.Size = UDim2.new(1, -10, 0, 16) currentWearLabel.Position = UDim2.new(0, 5, 0, 78) currentWearLabel.BackgroundTransparency = 1 currentWearLabel.Text = "Износ: Factory New" currentWearLabel.TextColor3 = neonBlue currentWearLabel.Font = Enum.Font.Gotham currentWearLabel.TextSize = 11 currentWearLabel.TextXAlignment = Enum.TextXAlignment.Left currentWearLabel.Parent = detailPanel local wearButtons = {} for i, wear in ipairs(WEARS) do local wb = Instance.new("TextButton") wb.Size = UDim2.new(1, -10, 0, 22) wb.Position = UDim2.new(0, 5, 0, 96 + (i - 1) * 24) wb.BackgroundColor3 = itemBg wb.Text = wear wb.TextColor3 = Color3.fromRGB(160, 160, 175) wb.Font = Enum.Font.Gotham wb.TextSize = 10 wb.TextXAlignment = Enum.TextXAlignment.Left wb.BorderSizePixel = 0 wb.Parent = detailPanel Instance.new("UICorner", wb).CornerRadius = UDim.new(0, 4) wearButtons[wear] = wb end local applyDetailBtn = Instance.new("TextButton") applyDetailBtn.Size = UDim2.new(1, -10, 0, 28) applyDetailBtn.Position = UDim2.new(0, 5, 1, -64) applyDetailBtn.BackgroundColor3 = Color3.fromRGB(20, 35, 25) applyDetailBtn.Text = "ПРИМЕНИТЬ" applyDetailBtn.TextColor3 = neonGreen applyDetailBtn.Font = Enum.Font.GothamBold applyDetailBtn.TextSize = 11 applyDetailBtn.BorderSizePixel = 0 applyDetailBtn.Parent = detailPanel Instance.new("UICorner", applyDetailBtn).CornerRadius = UDim.new(0, 6) local resetWeaponBtn = Instance.new("TextButton") resetWeaponBtn.Size = UDim2.new(1, -10, 0, 24) resetWeaponBtn.Position = UDim2.new(0, 5, 1, -32) resetWeaponBtn.BackgroundColor3 = Color3.fromRGB(30, 15, 20) resetWeaponBtn.Text = "СБРОСИТЬ ОРУЖИЕ" resetWeaponBtn.TextColor3 = neonRed resetWeaponBtn.Font = Enum.Font.GothamBold resetWeaponBtn.TextSize = 10 resetWeaponBtn.BorderSizePixel = 0 resetWeaponBtn.Parent = detailPanel Instance.new("UICorner", resetWeaponBtn).CornerRadius = UDim.new(0, 6) --================================================================== -- ЛОГ --================================================================== local logFrame = Instance.new("Frame") logFrame.Size = UDim2.new(1, -20, 0, 50) logFrame.Position = UDim2.new(0, 10, 1, -56) logFrame.BackgroundColor3 = Color3.fromRGB(6, 6, 10) logFrame.BorderSizePixel = 0 logFrame.Parent = win Instance.new("UICorner", logFrame).CornerRadius = UDim.new(0, 6) local logScroll = Instance.new("ScrollingFrame") logScroll.Size = UDim2.new(1, -6, 1, -6) logScroll.Position = UDim2.new(0, 3, 0, 3) logScroll.BackgroundTransparency = 1 logScroll.BorderSizePixel = 0 logScroll.ScrollBarThickness = 3 logScroll.ScrollBarImageColor3 = neonGray logScroll.CanvasSize = UDim2.new(0, 0, 0, 0) logScroll.AutomaticCanvasSize = Enum.AutomaticSize.Y logScroll.Parent = logFrame local logLayout = Instance.new("UIListLayout", logScroll) logLayout.SortOrder = Enum.SortOrder.LayoutOrder logLayout.Padding = UDim.new(0, 1) logLayout.VerticalAlignment = Enum.VerticalAlignment.Bottom local logOrder = 0 local function addLog(text, color) color = color or Color3.fromRGB(180, 180, 190) local lbl = Instance.new("TextLabel") lbl.Size = UDim2.new(1, -4, 0, 14) lbl.BackgroundTransparency = 1 lbl.Text = text lbl.TextColor3 = color lbl.Font = Enum.Font.Code lbl.TextSize = 10 lbl.TextXAlignment = Enum.TextXAlignment.Left logOrder = logOrder + 1 lbl.LayoutOrder = logOrder lbl.Parent = logScroll local count = 0 for _ in ipairs(logScroll:GetChildren()) do count = count + 1 end if count > 6 then local first = logScroll:GetChildren()[1] if first then first:Destroy() end end end --================================================================== -- СБОР ОРУЖИЯ И СКИНОВ --================================================================== local function getAllWeaponNames() local names = {} for _, folder in ipairs(SkinsFolder:GetChildren()) do if not IgnoreFolders[folder.Name] then table.insert(names, folder.Name) end end table.sort(names) return names end local function getSkinNames(weaponName) local folder = SkinsFolder:FindFirstChild(weaponName) if not folder then return {} end local names = {} for _, skin in ipairs(folder:GetChildren()) do table.insert(names, skin.Name) end table.sort(names) return names end local function getBestSkin(weaponName) local skins = getSkinNames(weaponName) if #skins == 0 then return nil end local bestSkin = skins[1] local bestRarity = -1 for _, skin in ipairs(skins) do local r = getSkinRarity(skin) if r > bestRarity then bestRarity = r bestSkin = skin end end return bestSkin end local function findSkinByName(weaponName, skinName) local skins = getSkinNames(weaponName) local lower = skinName:lower() -- Точное совпадение for _, s in ipairs(skins) do if s:lower() == lower then return s end end -- Частичное for _, s in ipairs(skins) do if s:lower():match(lower) then return s end end return nil end allWeapons = getAllWeaponNames() --================================================================== -- ПРИМЕНЕНИЕ СКИНА --================================================================== local function applyWeaponSkin(model, weaponName, skinName, wearName) if not model or not skinName or not wearName then return end pcall(function() local skinFolder = SkinsFolder:FindFirstChild(weaponName) if not skinFolder then return end local skinType = skinFolder:FindFirstChild(skinName) if not skinType then return end local cameraFolder = skinType:FindFirstChild("Camera") if not cameraFolder then return end local sourceFolder = cameraFolder:FindFirstChild(wearName) if not sourceFolder then for _, w in ipairs(WEARS) do sourceFolder = cameraFolder:FindFirstChild(w) if sourceFolder then break end end end if not sourceFolder then return end for _, part in ipairs(model:GetDescendants()) do if part:IsA("BasePart") then local newSkin = sourceFolder:FindFirstChild(part.Name) if newSkin then local existing = part:FindFirstChild("GAS_SkinSA") if existing then existing:Destroy() end local clone = newSkin:Clone() clone.Name = "GAS_SkinSA" clone.Parent = part end end end model:SetAttribute("GAS_Skin", skinName) model:SetAttribute("GAS_Wear", wearName) end) end local function applyAllSkins() for _, obj in ipairs(camera:GetChildren()) do local sel = selectedSkins[obj.Name] if sel and sel.skin then applyWeaponSkin(obj, obj.Name, sel.skin, sel.wear or "Factory New") end end end local function resetAllSkins() for _, obj in ipairs(camera:GetChildren()) do for _, desc in ipairs(obj:GetDescendants()) do if desc.Name == "GAS_SkinSA" then desc:Destroy() end end obj:SetAttribute("GAS_Skin", nil) obj:SetAttribute("GAS_Wear", nil) end selectedSkins = {} for _, data in pairs(weaponButtons) do if data.ind then data.ind.BackgroundColor3 = Color3.fromRGB(50, 50, 60) end end addLog("Все скины сброшены", neonRed) end --================================================================== -- SKIN ALL — один скин на всё оружие --================================================================== local function skinAll(skinName, wearName) local applied = 0 local failed = 0 for _, weaponName in ipairs(allWeapons) do local skin = nil if skinName and skinName ~= "" then -- Ищем скин по имени на этом оружии skin = findSkinByName(weaponName, skinName) end if not skin then -- Не нашли — берём лучший skin = getBestSkin(weaponName) end if skin then selectedSkins[weaponName] = { skin = skin, wear = wearName } -- Подсветка local data = weaponButtons[weaponName] if data and data.ind then data.ind.BackgroundColor3 = neonGreen end applied = applied + 1 else failed = failed + 1 end end if skinChangerOn then applyAllSkins() end addLog(string.format("SKIN ALL: %d оружий, %d не нашли скин", applied, failed), neonGreen) return applied end --================================================================== -- RANDOM ALL — случайный скин на каждое оружие --================================================================== local function randomAll(wearName) local applied = 0 for _, weaponName in ipairs(allWeapons) do local skins = getSkinNames(weaponName) if #skins > 0 then local skin = skins[math.random(1, #skins)] selectedSkins[weaponName] = { skin = skin, wear = wearName } local data = weaponButtons[weaponName] if data and data.ind then data.ind.BackgroundColor3 = neonPurple end applied = applied + 1 end end if skinChangerOn then applyAllSkins() end addLog("RANDOM ALL: " .. applied .. " оружий получили случайные скины", neonPurple) return applied end --================================================================== -- BEST ALL — самый редкий скин на каждое оружие --================================================================== local function bestAll(wearName) local applied = 0 local log = {} for _, weaponName in ipairs(allWeapons) do local skin = getBestSkin(weaponName) if skin then selectedSkins[weaponName] = { skin = skin, wear = wearName } local data = weaponButtons[weaponName] if data and data.ind then data.ind.BackgroundColor3 = neonGold end applied = applied + 1 table.insert(log, weaponName .. " \u{2192} " .. skin) end end if skinChangerOn then applyAllSkins() end addLog("BEST ALL: " .. applied .. " оружий получили лучшие скины", neonGold) -- Выводим первые 5 в лог for i = 1, math.min(5, #log) do addLog(" " .. log[i], neonGold) end if #log > 5 then addLog(" ...и ещё " .. (#log - 5) .. " оружий", neonGold) end return applied end --================================================================== -- КНОПКИ МАССОВОГО НАЛОЖЕНИЯ --================================================================== skinAllBtn.MouseButton1Click:Connect(function() if not skinChangerOn then addLog("Сначала включи Skin Changer", neonRed) return end local skinName = allSkinInput.Text addLog("SKIN ALL: \"" .. (skinName == "" and "лучший" or skinName) .. "\" | " .. allWear, neonGreen) skinAll(skinName, allWear) end) randomAllBtn.MouseButton1Click:Connect(function() if not skinChangerOn then addLog("Сначала включи Skin Changer", neonRed) return end addLog("RANDOM ALL | " .. allWear, neonPurple) randomAll(allWear) end) bestAllBtn.MouseButton1Click:Connect(function() if not skinChangerOn then addLog("Сначала включи Skin Changer", neonRed) return end addLog("BEST ALL | " .. allWear, neonGold) bestAll(allWear) end) resetAllBtn.MouseButton1Click:Connect(function() resetAllSkins() addLog("Полный сброс", neonRed) end) --================================================================== -- ВЫПАДАЮЩИЙ СПИСОК СКИНОВ --================================================================== local dropdownOpen = nil local function closeDropdown() if dropdownOpen then dropdownOpen:Destroy() end dropdownOpen = nil end local function openSkinDropdown(weaponName, currentSelection) closeDropdown() local skins = getSkinNames(weaponName) if #skins == 0 then return end local dd = Instance.new("ScrollingFrame") dd.Size = UDim2.new(0, 170, 0, math.min(#skins * 26 + 8, 300)) dd.Position = UDim2.new(0, 190, 0, 244) dd.BackgroundColor3 = Color3.fromRGB(12, 12, 18) dd.BorderSizePixel = 0 dd.ScrollBarThickness = 4 dd.ZIndex = 20 dd.Parent = win Instance.new("UICorner", dd).CornerRadius = UDim.new(0, 6) local stroke = Instance.new("UIStroke", dd) stroke.Color = neonGray stroke.Thickness = 1 stroke.Transparency = 0.2 local layout = Instance.new("UIListLayout", dd) layout.SortOrder = Enum.SortOrder.Name layout.Padding = UDim.new(0, 2) for _, skinName in ipairs(skins) do local item = Instance.new("TextButton") item.Size = UDim2.new(1, -8, 0, 24) item.BackgroundColor3 = itemBg item.Text = " " .. skinName item.TextColor3 = (skinName == currentSelection) and neonGreen or Color3.fromRGB(200, 200, 210) item.Font = Enum.Font.Gotham item.TextSize = 11 item.TextXAlignment = Enum.TextXAlignment.Left item.BorderSizePixel = 0 item.ZIndex = 20 item.Parent = dd Instance.new("UICorner", item).CornerRadius = UDim.new(0, 4) item.MouseButton1Click:Connect(function() if not selectedSkins[weaponName] then selectedSkins[weaponName] = { skin = skinName, wear = "Factory New" } else selectedSkins[weaponName].skin = skinName end currentSkinLabel.Text = "Скин: " .. skinName skinSelectBtn.Text = skinName local data = weaponButtons[weaponName] if data and data.ind then data.ind.BackgroundColor3 = neonGreen end addLog(weaponName .. " \u{2192} " .. skinName, neonGreen) if skinChangerOn then applyAllSkins() end closeDropdown() end) end dropdownOpen = dd end --================================================================== -- ЗАПОЛНЕНИЕ СПИСКА ОРУЖИЯ --================================================================== for _, weaponName in ipairs(allWeapons) do local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, -4, 0, 26) btn.BackgroundColor3 = itemBg btn.Text = " " .. weaponName btn.TextColor3 = Color3.fromRGB(170, 170, 185) btn.Font = Enum.Font.Gotham btn.TextSize = 11 btn.TextXAlignment = Enum.TextXAlignment.Left btn.BorderSizePixel = 0 btn.Parent = weaponList Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 4) local skinInd = Instance.new("Frame") skinInd.Size = UDim2.new(0, 6, 0, 6) skinInd.Position = UDim2.new(1, -12, 0.5, -3) skinInd.BackgroundColor3 = Color3.fromRGB(50, 50, 60) skinInd.BorderSizePixel = 0 skinInd.Parent = btn Instance.new("UICorner", skinInd).CornerRadius = UDim.new(1, 0) weaponButtons[weaponName] = { btn = btn, ind = skinInd } btn.MouseButton1Click:Connect(function() closeDropdown() currentDetailWeapon = weaponName for name, data in pairs(weaponButtons) do data.btn.BackgroundColor3 = itemBg data.btn.TextColor3 = Color3.fromRGB(170, 170, 185) end btn.BackgroundColor3 = Color3.fromRGB(30, 35, 50) btn.TextColor3 = neonBlue detailTitle.Text = weaponName local sel = selectedSkins[weaponName] if sel and sel.skin then currentSkinLabel.Text = "Скин: " .. sel.skin skinSelectBtn.Text = sel.skin else currentSkinLabel.Text = "Скин: —" skinSelectBtn.Text = "Выбрать скин..." end local wear = (sel and sel.wear) or "Factory New" currentWearLabel.Text = "Износ: " .. wear for w, wb in pairs(wearButtons) do if w == wear then wb.BackgroundColor3 = Color3.fromRGB(25, 35, 55) wb.TextColor3 = neonBlue else wb.BackgroundColor3 = itemBg wb.TextColor3 = Color3.fromRGB(160, 160, 175) end end end) end skinSelectBtn.MouseButton1Click:Connect(function() if not currentDetailWeapon then addLog("Выбери оружие слева", neonRed) return end local sel = selectedSkins[currentDetailWeapon] openSkinDropdown(currentDetailWeapon, sel and sel.skin or nil) end) for wear, wb in pairs(wearButtons) do wb.MouseButton1Click:Connect(function() if not currentDetailWeapon then return end for w, b in pairs(wearButtons) do b.BackgroundColor3 = itemBg b.TextColor3 = Color3.fromRGB(160, 160, 175) end wb.BackgroundColor3 = Color3.fromRGB(25, 35, 55) wb.TextColor3 = neonBlue currentWearLabel.Text = "Износ: " .. wear if not selectedSkins[currentDetailWeapon] then selectedSkins[currentDetailWeapon] = { skin = nil, wear = wear } else selectedSkins[currentDetailWeapon].wear = wear end if skinChangerOn and selectedSkins[currentDetailWeapon].skin then applyAllSkins() end end) end applyDetailBtn.MouseButton1Click:Connect(function() if not currentDetailWeapon then return end local sel = selectedSkins[currentDetailWeapon] if not sel or not sel.skin then addLog("Выбери скин для " .. currentDetailWeapon, neonRed) return end if skinChangerOn then applyAllSkins() addLog(currentDetailWeapon .. " \u{2192} " .. sel.skin .. " (" .. (sel.wear or "Factory New") .. ")", neonGreen) else addLog("Включи Skin Changer", neonRed) end end) resetWeaponBtn.MouseButton1Click:Connect(function() if not currentDetailWeapon then return end for _, obj in ipairs(camera:GetChildren()) do if obj.Name == currentDetailWeapon then for _, desc in ipairs(obj:GetDescendants()) do if desc.Name == "GAS_SkinSA" then desc:Destroy() end end obj:SetAttribute("GAS_Skin", nil) obj:SetAttribute("GAS_Wear", nil) end end selectedSkins[currentDetailWeapon] = nil local data = weaponButtons[currentDetailWeapon] if data and data.ind then data.ind.BackgroundColor3 = Color3.fromRGB(50, 50, 60) end currentSkinLabel.Text = "Скин: —" skinSelectBtn.Text = "Выбрать скин..." addLog("Сброшен: " .. currentDetailWeapon, neonRed) end) --================================================================== -- ON/OFF --================================================================== enableBtn.MouseButton1Click:Connect(function() skinChangerOn = not skinChangerOn if skinChangerOn then enableBtn.Text = "SKIN CHANGER: ON" enableBtn.TextColor3 = neonGreen enableBtn.BackgroundColor3 = Color3.fromRGB(20, 35, 25) addLog("Skin Changer включён", neonGreen) applyAllSkins() else enableBtn.Text = "SKIN CHANGER: OFF" enableBtn.TextColor3 = Color3.fromRGB(130, 130, 145) enableBtn.BackgroundColor3 = Color3.fromRGB(20, 20, 26) addLog("Skin Changer выключен", neonRed) for _, obj in ipairs(camera:GetChildren()) do for _, desc in ipairs(obj:GetDescendants()) do if desc.Name == "GAS_SkinSA" then desc:Destroy() end end obj:SetAttribute("GAS_Skin", nil) obj:SetAttribute("GAS_Wear", nil) end end end) --================================================================== -- АВТОПРИМЕНЕНИЕ --================================================================== camera.ChildAdded:Connect(function(obj) if not skinChangerOn then return end task.wait(0.1) local sel = selectedSkins[obj.Name] if sel and sel.skin then applyWeaponSkin(obj, obj.Name, sel.skin, sel.wear or "Factory New") end end) task.spawn(function() while true do task.wait(0.5) if skinChangerOn then for _, obj in ipairs(camera:GetChildren()) do local sel = selectedSkins[obj.Name] if sel and sel.skin then local cur = obj:GetAttribute("GAS_Skin") local curW = obj:GetAttribute("GAS_Wear") if cur ~= sel.skin or curW ~= (sel.wear or "Factory New") then applyWeaponSkin(obj, obj.Name, sel.skin, sel.wear or "Factory New") end end end end end end) UIS.InputBegan:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 then task.wait(0.15) if dropdownOpen then local mp = UIS:GetMouseLocation() local dp = dropdownOpen.AbsolutePosition local ds = dropdownOpen.AbsoluteSize if mp.X < dp.X or mp.X > dp.X + ds.X or mp.Y < dp.Y or mp.Y > dp.Y + ds.Y then closeDropdown() end end end end) --================================================================== -- ПЕРЕТАСКИВАНИЕ --================================================================== local dragging = false local dragStart, startPos titleBar.InputBegan:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 then local mp = i.Position local ep = enableBtn.AbsolutePosition local es = enableBtn.AbsoluteSize if mp.X >= ep.X and mp.X <= ep.X + es.X and mp.Y >= ep.Y and mp.Y <= ep.Y + es.Y then return end dragging = true dragStart = i.Position startPos = win.Position end end) UIS.InputEnded:Connect(function(i) if i.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end end) UIS.InputChanged:Connect(function(i) if dragging and i.UserInputType == Enum.UserInputType.MouseMovement then local d = i.Position - dragStart win.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + d.X, startPos.Y.Scale, startPos.Y.Offset + d.Y) end end) --================================================================== -- СТАРТ --================================================================== addLog("Skin Changer v3 загружен", neonGray) addLog("Оружий: " .. #allWeapons, neonGray) addLog("SKIN ALL — один скин на всё", neonGray) addLog("RANDOM ALL — случайные скины", neonGray) addLog("BEST ALL — лучшие скины на всё", neonGold) print("========================================") print("[GAS_YT] Skin Changer v3 loaded!") print("[Skin] " .. #allWeapons .. " weapons") print("[Skin] SKIN ALL — apply one skin to ALL weapons") print("[Skin] RANDOM ALL — random skin per weapon") print("[Skin] BEST ALL — rarest skin per weapon") print("[Skin] Per-weapon selection still available") print("========================================")