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)
Comments
No comments yet
Be the first to share your thoughts!