Forest Logo
search
package_2

noid-manager

By @hobbs04067

Roblox

Mirrored

noid-manager

A Roblox library for spawning, tracking, and tearing down managed rig instances ("noids") with server-authoritative state, automatic client replication, and a pluggable mod system for attaching per-instance behavior without touching this package.

Built with Rojo and Wally. Networking runs over bytenet, and events use bindable.

Full usage guide and API reference: docs/USAGE.md Building and contributing: docs/DEVELOPMENT.md

Contents

Features

  • Server-authoritative lifecycle — the server assigns each noid a numeric ID (0–255), tracks it, and is the only realm that can create or destroy one.
  • Automatic client replication over a single bytenet packet — clients get a mirrored NoidManager object for every live noid, including late-joining players.
  • Built-in auto-destroy watchers — a noid tears itself down when its Humanoid dies, its owning player leaves, or a core rig part is removed.
  • A pluggable mod system — attach Constructor/Destructor behavior to a noid from separate ModuleScripts, scoped to run on the server, the client, or both (Type = "Server" | "Client" | "Shared").
  • Per-instance constructor arguments — activate the same mod on different noids with different arguments.
  • Lookup by ID or by owning Player, plus a ManagerConstructed event for generic hooks.

Installation

Add to your wally.toml:

[dependencies]
NoidManager = "hobbs04067/noid-manager@0.5.16"

Then run:

wally install

noid-manager itself depends on bindable, bytenet, and playereventsequencer — Wally resolves these for you.

Quick start

-- Server: register a mod, then spawn a noid with it active
local NoidManager = require(ReplicatedStorage.NoidManager)

local wanderMod = NoidManager.RegisterModModuleScript(script.WanderMod)

local manager = NoidManager.new(someRig, { wanderMod })

manager.Destroying:Connect(function()
	print("noid", manager.id, "was destroyed")
end)

-- later
manager:Destroy()
-- WanderMod.luau — Type "Shared" runs its Constructor/Destructor on both realms
return {
	Type = "Shared",
	Constructor = function(self)
		print("noid", self.id, "spawned at", self.rig:GetPivot().Position)
	end,
	Destructor = function(self)
		print("noid", self.id, "destroyed")
	end,
}
-- Anywhere (server or client): look up an existing manager
local manager = NoidManager.GetManagerFromId(id)
local manager = NoidManager.GetManagerFromPlayer(player)

NoidManager.ManagerConstructed:Connect(function(manager)
	print("constructed", manager.id)
end)

See docs/USAGE.md for how it all fits together, the full mod Type semantics, constructor-argument syntax, and replication behavior.

License

MIT

Package Details

Install command (Click to copy)


Version

0.5.17

License

MIT

check_circle

Safe for commercial use

infoLicense identified from the packaged LICENSE file; the manifest declared none.

Automated license review — not legal advice.