EDIT: It seems that the culprit is this line of code: Package.ScriptAdded:Fire(self)
, when I remove it works. Why is that? All I am doing is giving the bindable self.
Hello again, I am currently making a module that will make ‘scripts’ with corutines (basically just like adding new scripts but more performant and more control over them.). And then, all the sudden, the module stopped working and my new constructor seems to be returning ...any
even though that is not the case. Here is my module:
-- // Services //
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- // Package Configuration //
local Package = { }
-- // Variables //
local Signal = require(script.Signal)
Package.ScriptAdded = Signal.new()
-- // Functions //
function Package.new(name: string, scriptToRun: () -> ())
local self = setmetatable({ }, {__index = Package})
self.Name = name
self.Script = coroutine.create(scriptToRun)
self.Started = Signal.new()
self.Destroyed = Signal.new()
self.Paused = Signal.new()
self.IsPaused = true
self.IsClosed = false
self.IsRunning = false
Package.ScriptAdded:Fire(self)
return self
end
function Package:Start()
local Script: thread = self.Script
coroutine.resume(Script)
self.IsRunning = true
self.IsPaused = false
self.Started:Fire()
end
function Package:Pause()
local Script: thread = self.Script
coroutine.yield(Script)
self.IsRunning = false
self.IsPaused = true
self.Paused:Fire()
end
function Package:IsPaused(): boolean
return self.Paused
end
function Package:IsRunning(): boolean
return self.IsRunning
end
function Package:IsClosed(): boolean
return self.IsClosed
end
function Package:Destroy()
local Script: thread = self.Script
coroutine.close(Script)
self.IsRunning = false
self.IsPaused = true
self.IsClosed = true
self.Destroyed:Fire()
end
return Package
I hope someone can help!