run_on_actor(getactors()[1], [[ local repStorage = game:GetService('ReplicatedStorage') local players = game:GetService('Players') local localPlayer = players.LocalPlayer local character = localPlayer.Character local knit = require(repStorage.Packages.Knit) local items = require(repStorage.Modules.Items) local inventory = require(repStorage.Controllers.UIController.Inventory) local store = require(repStorage.Controllers.UIController.Store) local visuals = require(repStorage.Controllers.VisualController) local economy = knit.GetService('EconomyService') local data = knit.GetController('DataController').Data local inventoryFrames = localPlayer.PlayerGui.Main.Inventory local storeFrames = localPlayer.PlayerGui.Main.Store.StoreFrames local function WaitForChildWhichIsA(self: Instance, ClassName: string) while self:FindFirstChildWhichIsA(ClassName) == nil do task.wait() end end local storeButtons = { Equipped = { Text = 'USING', Color = ColorSequence.new(Color3.fromRGB(146, 26, 221), Color3.fromRGB(53, 7, 71)), Image = 'rbxassetid://16546841553' }; Equip = { Text = 'EQUIP', Color = ColorSequence.new(Color3.fromRGB(23, 221, 198), Color3.fromRGB(8, 71, 64)), Image = 'rbxassetid://16546837268' } } local function unlockAll() local bannerAssets = game.ReplicatedStorage.Assets.Banners local effectAssets = game.ReplicatedStorage.Assets.Effects local dunks = {} for dunk, dunkData in next, items.Dunks do dunks[dunk] = false end local newInventory = {Skins={},Effects={},Banners={},Emotes={}} for category, _ in next, newInventory do for item, _ in next, items[category] do newInventory[category][#newInventory[category]+1] = {item, false} end end for gamepass, _ in next, data.Gamepasses do data.Gamepasses[gamepass] = true end data.Prestige = 3 for dunk, _ in next, items.Dunks do data.Dunks.Owned[dunk] = true end data.Inventory = newInventory local function unequipAll(category: string) for i,v in next, inventoryFrames[category]:GetChildren() do if v:FindFirstChild('Using') then v.Using.Visible = false end end end inventory:UpdateInventory(newInventory) inventory.UpdateInventory = function() end store.UpdateData = function() end local ball = localPlayer.Character:FindFirstChild('Basketball') local currentSkin = nil local currentEffect = nil local currentBanner = nil local currentEmote = nil local currentDunk = nil local function getItemDataByName(category: string, name: string) local nigga = nil for i,v in next, items[category] do if v[1] == name then nigga = v break end end return nigga end local function getRealItemName(category: string, name: string) local nigga = nil local nameIdx = 1 if category == 'Dunks' then nameIdx = 2 end for i,v in next, items[category] do if v[nameIdx] == name then nigga = i break end end return nigga end local function getMyWorkspaceBall() local nigger = nil for i,v in next, workspace:GetChildren() do if v.Name == 'Basketball' and v:GetAttribute('Owner') == localPlayer.UserId then nigger = v break end end return nigger end local oldEffects = {} local oldBallEffects = {} local function applyBallAppearance(name: string) for i,v in next, oldEffects do v.Parent = nil v:Destroy() end local realName = getRealItemName('Skins', name) if not realName then return end local effects = repStorage.Assets.Ball:FindFirstChild(realName) if not effects then return end for _, possibleEffect in next, effects:GetChildren() do if possibleEffect:IsA('ParticleEmitter') then local newEffect = possibleEffect:Clone() newEffect.Parent = ball.Attach:FindFirstChildWhichIsA('SpecialMesh') table.insert(oldEffects, newEffect) end end if effects:FindFirstChild('CUSTOM_SKIN_HOLDER') then local skinHolder = effects.CUSTOM_SKIN_HOLDER.CUSTOM_SKIN_HOLDER for _, skinElement in next, skinHolder:GetChildren() do if skinElement:IsA('MeshPart') then local newEffect = skinElement:Clone() local weld = newEffect:FindFirstChildWhichIsA('WeldConstraint') newEffect.CFrame = ball.Attach.CFrame weld.Part0 = ball.Attach newEffect.Parent = ball.Attach table.insert(oldEffects, newEffect) end end if skinHolder:FindFirstChild('AttHolder') then for _, attEffect in next, skinHolder.AttHolder:GetChildren() do local newAttEffect = attEffect:Clone() newAttEffect.Parent = ball.Attach table.insert(oldEffects, newAttEffect) end end end if effects:FindFirstChild('CUSTOM_AURA') then for _, bodyPart in next, effects.CUSTOM_AURA:GetChildren() do for _, effect in next, bodyPart:GetChildren() do if effect:IsA('CFrameValue') then local attachment = Instance.new('Attachment') attachment.Parent = character[bodyPart.Name] attachment.CFrame = effect.Value for _, cfEffect in next, effect:GetChildren() do local newCfEffect = cfEffect:Clone() newCfEffect.Parent = attachment table.insert(oldEffects, newCfEffect) end continue end if effect:IsA('BasePart') then local newPart = effect:Clone() local weld = Instance.new('WeldConstraint') weld.Parent = newPart newPart.CFrame = character[bodyPart.Name].CFrame * newPart:GetAttribute('Offset') weld.Part0 = character[bodyPart.Name] weld.Part1 = newPart newPart.Parent = character[bodyPart.Name] table.insert(oldEffects, newPart) continue end local newEffect = effect:Clone() newEffect.Parent = character[bodyPart.Name] table.insert(oldEffects, newEffect) end end end end local sharedUtil = require(game.ReplicatedStorage.Modules.SharedUtil) local function applyBallEffects(name: string, basketball: Instance) local effectFolder = effectAssets:FindFirstChild(name) if not effectFolder then return end local basketball = sharedUtil.Ball:GetClosestBall(localPlayer) if basketball:FindFirstChildWhichIsA('Trail') then basketball:FindFirstChildWhichIsA('Trail'):Destroy() end for i,v in next, effectFolder:GetChildren() do if v:IsA('Trail') then local a = v:Clone() a.Enabled = true a.Attachment0 = basketball.A0 a.Attachment1 = basketball.A1 a.Parent = basketball table.insert(oldBallEffects, a) end if v.Name == 'EffectAtt' then for _,effect in next, v:GetChildren() do local newEffect = effect:Clone() newEffect.Parent = basketball.A0 table.insert(oldBallEffects, newEffect) end end if v.Name == 'EffectAtt2' then for _,effect in next, v:GetChildren() do local newEffect = effect:Clone() newEffect.Parent = basketball.A1 table.insert(oldBallEffects, newEffect) end end if v:IsA('ParticleEmitter') then v.Parent = basketball table.insert(oldBallEffects, v) end end end local function changeEmote(name: string) local realName = getRealItemName('Emotes', name) data.Emotes.Equipped = realName end local function changeBallSkin(ball: Tool | Part) if ball and currentSkin then local skinData = getItemDataByName('Skins', currentSkin) if ball.Parent == character then ball:WaitForChild('Attach') end local attach = ball:FindFirstChild('Attach') or ball WaitForChildWhichIsA(attach, 'SpecialMesh') if typeof(skinData[3]) == 'number' then attach.Transparency = 0 attach:FindFirstChildWhichIsA('SpecialMesh').MeshId = 'rbxassetid://14536927547' attach:FindFirstChildWhichIsA('SpecialMesh').TextureId = 'rbxassetid://' .. skinData[3] end if typeof(skinData[3]) == 'table' then attach.Transparency = 1 attach:FindFirstChildWhichIsA('SpecialMesh').TextureId = '' attach:FindFirstChildWhichIsA('SpecialMesh').MeshId = 'rbxassetid://' .. skinData[4] end if ball.Parent == character then applyBallAppearance(currentSkin) end end end local function changeBanner(name: string) local bannerName = getRealItemName('Banners', name) local newBg = bannerAssets:FindFirstChild(bannerName) if not newBg then return end local infoUi = character.HumanoidRootPart.Info local currentBg = infoUi.BG if infoUi:FindFirstChild('Frame') then infoUi.Frame:Destroy() end local score = currentBg.Score.Record.Text local streak = currentBg.Streak.Title.Text currentBg:Destroy() local newBgFrame = newBg.BG:Clone() local newAnimFrame = newBg:FindFirstChild('Frame') if newAnimFrame then newAnimFrame = newAnimFrame:Clone() newAnimFrame.ZIndex = 0 newAnimFrame.Parent = infoUi end newBgFrame.UsernameBox.Username.Text = localPlayer.Name newBgFrame.Streak.Title.Text = streak newBgFrame.Score.Record.Text = score newBgFrame.Parent = infoUi end local function newEquip(category: string, name: string) for i,v in next, data[category].Inventory do if v[1] == name then data[category].Inventory[i][2] = true else data[category].Inventory[i][2] = false end end end for _, category in next, inventoryFrames:GetChildren() do if not newInventory[category.Name] then continue end for _, item in next, category:GetChildren() do if item:IsA('ImageButton') then if item.Name:match('Model') then continue end if category.Name == 'Banners' then local bannerName = getRealItemName('Banners', item.Name) item.Icon.Image = bannerAssets[bannerName].BG.BasicBanner.Image end hookfunction(getconnections(item.MouseButton1Click)[1].Function, function() end) item.MouseButton1Click:Connect(function() unequipAll(category.Name) newEquip(category.Name, item.Name) item.Using.Visible = true if category.Name == 'Skins' then currentSkin = item.Name changeBallSkin(ball) elseif category.Name == 'Emotes' then currentEmote = item.Name changeEmote(currentEmote) elseif category.Name == 'Banners' then currentBanner = item.Name changeBanner(currentBanner) elseif category.Name == 'Effects' then currentEffect = item.Name end end) end end end local dunkInfo = storeFrames.Dunks.Info local equipDunkButton = dunkInfo.Buy for _,dunkItem in next, storeFrames.Dunks.List:GetChildren() do if dunkItem:IsA('ImageButton') then hookfunction(getconnections(dunkItem.MouseButton1Click)[1].Function, function() local dunkName = dunkItem.Name dunkInfo.Title.Text = dunkItem.Title.Text if dunks[dunkName] then equipDunkButton.UIGradient.Color = storeButtons.Equipped.Color equipDunkButton.Title.Text = storeButtons.Equipped.Text equipDunkbutton.Image = storeButtons.Equipped.Image else equipDunkButton.UIGradient.Color = storeButtons.Equip.Color equipDunkButton.Title.Text = storeButtons.Equip.Text equipDunkButton.Image = storeButtons.Equip.Image end end) end end oldEquipDunk = hookfunction(getconnections(equipDunkButton.MouseButton1Click)[1].Function, function() local dunkName = getRealItemName('Dunks', storeFrames.Dunks.Info.Title.Text) for dunkState,_ in next, dunks do dunks[dunkState] = false end dunks[dunkName] = true data.Dunks.Equipped = dunkName equipDunkButton.UIGradient.Color = storeButtons.Equipped.Color equipDunkButton.Title.Text = storeButtons.Equipped.Text end) local function ballAdded() character.ChildAdded:Connect(function(ballObj: Tool) if ballObj.Name ~= 'Basketball' then return end ball = ballObj if currentSkin then changeBallSkin(ball) end ball.AncestryChanged:Connect(function() for i,v in next, oldEffects do v.Parent = nil v:Destroy() end changeBallSkin(getMyWorkspaceBall()) end) end) end localPlayer.CharacterAdded:Connect(ballAdded) ballAdded() character.ChildAdded:Connect(function(ballObj: Tool) if ballObj.Name ~= 'Basketball' then return end ball = ballObj if currentSkin then changeBallSkin(ball) end ball.AncestryChanged:Connect(function() for i,v in next, oldEffects do v.Parent = nil v:Destroy() end changeBallSkin(getMyWorkspaceBall()) end) end) local c = require(game.ReplicatedStorage.Controllers.VisualController.TOOL_Emotes) oldEffect = hookfunction(visuals.Effect, function(self, effect, ...) local args = {...} if effect == 'StartBallEffect' then local effectOwner = args[3] if effectOwner == character.HumanoidRootPart then local effectName = getRealItemName('Effects', currentEffect) or 'Default' args[1] = effectName or 'Default' local ball = sharedUtil.Ball:GetClosestBall(localPlayer) applyBallEffects(effectName, ball) c:Emote(data.Emotes.Equipped) end end if effect == 'BallEffect' then local effectBall = args[3] if effectBall == sharedUtil.Ball:GetClosestBall(localPlayer) then for _, effectObj in next, oldBallEffects do effectObj.Parent = nil effectObj:Destroy() end local effectName = getRealItemName('Effects', currentEffect) args[1] = effectName or 'Default' end end return oldEffect(self, effect, unpack(args)) end) end unlockAll() ]])