So I started a tycoon tutorial on youtube but encountered an error where when I try to index a bindable event with event throws the error on the title. I tried to change the position of the bindable event variable inside the function where I use the “.Event” but that didn’t do.
function Tycoon.new(player)
local self = setmetatable({}, Tycoon)
self.Owner = player
self._topicEvent = Instance.new("BindableEvent")
return self
end
function Tycoon:SubscribeTopic(topicName, callback)
local connection = self._topicEvent.Event:Connect(function(name, ...)
if name == topicName then
callback(...)
end
end)
return connection
end
I ran your module and it works for me. Can you throw off the part of the code where you create tycoon and use the function “SubscribeTopic” or all script
local CollectionService = game:GetService("CollectionService")
local ServerStorage = game:GetService("ServerStorage")
local template = ServerStorage.Template
local componentFolder = script.Parent.Componente
local tycoonStorage = ServerStorage.TycoonStorage
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
end
function Tycoon:Init()
print(self.Owner)
self.Model = NewModel(template, CFrame.new(0, 1, 0))
self:LockAll()
wait(7)
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
I think is this one, I have a server script from where I call Tycoon.new and then Tycoon:Init() but that’s all in the server 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.Subscribe = self.Tycoon:SubscribeTopic("Button", function(...)
self:OnButtonPressed(...)
end)
end
function Unlockable:OnButtonPressed(id)
if id == self.Instance:GetAttribute("UnlockId") then
end
end
return Unlockable
Everything works for me, maybe you are not launching the modules themselves correctly or specifying the wrong parameters? Throw off the script that runs these modules
local Players = game:GetService("Players")
local Tycoon = require(script.Parent.Tycoon)
Players.PlayerAdded:Connect(function(player)
local tycoon = Tycoon.new(player)
Tycoon:Init()
end)