local HttpService = game:GetService('HttpService') local Players = game:GetService('Players') local ReplicatedStorage = game:GetService('ReplicatedStorage') local RunService = game:GetService('RunService') local LocalPlayer = Players.LocalPlayer local Backpack = LocalPlayer:WaitForChild('Backpack') -- CONFIG local Skins = { Enabled = true, ['DoubleBarrel'] = 'Ascension', ['Revolver'] = 'Ascension', ['TacticalShotgun'] = 'Ascension', ['SMG'] = 'Ascension', ['Shotgun'] = 'Ascension', Special = { ['Knife'] = '' }, } local HandleMap = { DB_HANDLE = 'DoubleBarrel', REV_HANDLE = 'Revolver' } getgenv().BulletChanger = getgenv().BulletChanger or { DoubleBarrel = 'Beta', Revolver = 'Beta', TacticalShotgun = 'Beta', SMG = 'Beta', Shotgun = 'Beta', } local Subscription = { Enabled = true, SubscriptionData = 16, SubscriptionStreak = 53 } -- UTILITY FUNCTIONS local function isbasepart(x) return typeof(x) == 'Instance' and x:IsA('BasePart') end local function ensureprimarypart(m) if m and m:IsA('Model') then if not isbasepart(m.PrimaryPart) then m.PrimaryPart = m:FindFirstChildWhichIsA('BasePart') end return m.PrimaryPart end end local function prepparts(model) for _, p in ipairs(model:GetDescendants()) do if p:IsA('BasePart') then p.CanCollide = false p.Anchored = false p.Massless = true p.Transparency = 0 end end end local function weldparts(a, b) if isbasepart(a) and isbasepart(b) then local w = Instance.new('WeldConstraint') w.Part0 = a w.Part1 = b w.Parent = a return w end end -- 🌈 Optimized Rainbow System local rainbowItems = {} local hue = 0 local function addRainbowItem(item) rainbowItems[item] = true end task.spawn(function() while true do hue = (hue + 0.01) % 1 local color = Color3.fromHSV(hue, 1, 1) local seq = ColorSequence.new(color) for item in pairs(rainbowItems) do if item.Parent then if item:IsA('BasePart') then item.Color = color elseif item:IsA('Beam') then item.Color = seq end else rainbowItems[item] = nil end end task.wait(0.05) -- ~20 updates per second end end) local function rainbowParts(model) for _, part in ipairs(model:GetDescendants()) do if part:IsA('BasePart') then addRainbowItem(part) end end end local function rainbowBeams(tool) for _, b in ipairs(tool:GetDescendants()) do if b:IsA('Beam') then addRainbowItem(b) end end end -- SKIN FUNCTIONS local function getwrapskinmodel(weaponname, skinname, timeout) timeout = timeout or 5 local ok, wraps = pcall(function() return ReplicatedStorage:WaitForChild('Wraps', timeout) end) if not ok or not wraps then return nil end local ok2, folder = pcall(function() return wraps:WaitForChild('[' .. weaponname .. ']', timeout) end) if not ok2 or not folder then return nil end if not skinname or skinname == '' then return nil end local ok3, skinmodel = pcall(function() return folder:WaitForChild(skinname, timeout) end) if not ok3 then return nil end return skinmodel end local function applymodelonholder(holder, skinmodel) if not holder or not skinmodel then return end local handle = holder:FindFirstChild('Handle') if not isbasepart(handle) then return end local clone = skinmodel:Clone() local pp = ensureprimarypart(clone) if not isbasepart(pp) then return end prepparts(clone) clone.Parent = holder clone:SetPrimaryPartCFrame(handle.CFrame) weldparts(handle, pp) handle.Transparency = 1 rainbowParts(clone) end local function applyskin(tool) task.defer(function() if not tool or not tool:IsA('Tool') then return end local weaponname = tool.Name:match('^%[(.+)%]$') local skinname = weaponname and Skins[weaponname] if skinname and skinname ~= '' then local skinmodel = getwrapskinmodel(weaponname, skinname) if skinmodel then applymodelonholder(tool, skinmodel) end end end) end local function applyknifeskin(tool) task.defer(function() if not tool or not tool:IsA('Tool') or tool.Name ~= '[Knife]' then return end local knifeskin = Skins.Special and Skins.Special['Knife'] if knifeskin and knifeskin ~= '' then local knives = ReplicatedStorage:FindFirstChild('Knives') if knives then local skinmodel = knives:FindFirstChild(knifeskin) if skinmodel then applymodelonholder(tool, skinmodel) end end end end) end -- BULLET FUNCTIONS local function applybullets(tool) task.defer(function() if not tool or not tool:IsA('Tool') then return end local weaponname = tool.Name:match('^%[(.+)%]$') local desired = (getgenv().BulletChanger or {})[weaponname] if desired and desired ~= '' then for _, b in ipairs(tool:GetDescendants()) do if b:IsA('Beam') then b.Texture = desired rainbowBeams(tool) end end end end) end -- TOOL HANDLING local processed = setmetatable({}, { __mode = 'k' }) local function ontooladded(tool) if processed[tool] then return end processed[tool] = true applyskin(tool) applyknifeskin(tool) applybullets(tool) end local function applyhandles(character) for h in pairs(HandleMap) do task.defer(function() local weaponname = HandleMap[h] local skinname = weaponname and Skins[weaponname] local handlefolder = character:FindFirstChild(h) or character:WaitForChild(h, 5) if handlefolder and skinname and skinname ~= '' then local skinmodel = getwrapskinmodel(weaponname, skinname) if skinmodel then applymodelonholder(handlefolder, skinmodel) end end end) end end local function connectcharacter(char) char.ChildAdded:Connect(function(child) if child:IsA('Tool') then ontooladded(child) elseif HandleMap[child.Name] then applyhandles(char) end end) applyhandles(char) for _, t in ipairs(char:GetChildren()) do if t:IsA('Tool') then ontooladded(t) end end end -- INITIALIZE Backpack.ChildAdded:Connect(ontooladded) if LocalPlayer.Character then connectcharacter(LocalPlayer.Character) else LocalPlayer.CharacterAdded:Once(connectcharacter) end if Skins.Enabled then local char = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait() for _, t in ipairs(Backpack:GetChildren()) do ontooladded(t) end for _, t in ipairs(char:GetChildren()) do if t:IsA('Tool') then ontooladded(t) end end end LocalPlayer.CharacterAdded:Connect(function(char) Backpack = LocalPlayer:FindFirstChild('Backpack') or LocalPlayer:WaitForChild('Backpack', 5) connectcharacter(char) end)