Module script:
local Unlockable = {} Unlockable.__index = Unlockable
function Unlockable.new(tycoon, instance) local self = setmetatable({}, Unlockable) self.Tycoon = tycoon self.Instance = instance
return self end
function Unlockable:Init() self.Subscription = self.Tycoon:SubscribeTopic("Button", function(...) self:OnButtonPressed(...) end) end
function Unlockable:OnButtonPressed(id) if id == self.Instance:GetAttribute("UnlockId") then self.Tycoon:Unlock(self.Instance, id) self.Subscription:Disconnect() end end
return Unlockable
Module script2:
local CollectionService = game:GetService("CollectionService") local template = game:GetService("ServerStorage").Template local componentFolder = script.Parent.Components local tycoonStorage = game:GetService("ServerStorage")
local function NewModel(model, cframe) local newModel = model:Clone() newModel:SetPrimaryPartCFrame(cframe) newModel.Parent = workspace return newModel end
local Tycoon = {} Tycoon.__index = Tycoon
function Tycoon.new(player) local self = setmetatable({}, Tycoon) self.Owner = player
self._topicEvent = Instance.new("BindableEvent")
return self endfunction Tycoon:Init() self.Model = NewModel(template, CFrame.new(0, 1, 0))
self:LockAll()
wait(3) self:PublishTopic("Button", "BasicPart") end
function Tycoon:LockAll() for _, instance in ipairs(self.Model:GetDescendants()) do if CollectionService:HasTag(instance, "Unlockable") then self:Lock(instance) else self:AddComponents(instance) end end end
function Tycoon:Lock(instance) instance.Parent = tycoonStorage self:CreateComponent(instance, componentFolder.Unlockable) end
function Tycoon:Unlock(instance, id) CollectionService:RemoveTag(instance, "Unlockable") self:AddComponents(instance) instance.Parent = self.Model end
function Tycoon:AddComponents(instance) for _, tag in ipairs(CollectionService:GetTags(instance)) do local component = componentFolder:FindFirstChild(tag) if component then self:CreateComponent(instance, component) end end end
function Tycoon:CreateComponent(instance, componentScript) local compModule = require(componentScript) local newComp = compModule.new(self, instance) newComp:Init() end
function Tycoon:PublishTopic(topicName, ...) self._topicEvent:Fire(topicName, ...) end
function Tycoon:SubscribeTopic(topicName, callback) local connection = self._topicEvent.Event:Connect(function(name, ...) if name == topicName then callback(...) end end) return connection end
function Tycoon:Destroy() self.Model:Destroy() self._topicEvent:Destroy() end
return Tycoon
Okay, so what it's meant to do is spawn a part in 3 seconds. BUT, it doesn't. I can't see the problem. HELP