Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Attempt to index nil with "Event"?

Asked by 2 years ago
Edited 2 years ago

Hi, I'm watching a tutorial on how to make a tycoon, but the script I'm using is for some reason broken. It says that Event is nil, which shouldn't be the case. Do you guys have any fixes? Error is on line 76.

--credit to B Ricey for the script, as the one i tried to make was broken.

local CollectionService = game:GetService("CollectionService")
local template = game:GetService("ServerStorage").Template
local componentFolder = script.Parent.Components
local tycoonStorage = game:GetService("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()
    self.Model = NewModel(template, CFrame.new(50, 0.5, 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

Answer this question