{"id":"hobbs04067/noid-manager","name":"noid-manager","scope":"hobbs04067","platform":"roblox","description":"Mirrored from the Wally registry.","version":"0.5.17","latest":"0.5.17","versions":["0.5.16","0.5.17"],"license":"MIT","licenseRating":"safe","licenseCaveats":["License identified from the packaged LICENSE file; the manifest declared none."],"licenseVerified":true,"dependencies":{"hobbs04067/bindable":{"version":"^0.1.4","alias":"bindable"},"hobbs04067/bytenet":{"version":"^0.5.6","alias":"bytenet"},"hobbs04067/playereventsequencer":{"version":"^0.1.4","alias":"playereventsequencer"}},"integrity":"de0d327b82ef1d81f3f3a15e70a603e2d0f49a0b92b5c524825fa9decc6a007f","likes":0,"downloads":0,"install":"forest install hobbs04067/noid-manager","url":"https://forest.dev/p/roblox/hobbs04067/noid-manager","files":"https://api.forest.dev/ai/package/roblox/hobbs04067/noid-manager/files","readme":"# noid-manager\n\nA 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.\n\nBuilt with [Rojo](https://github.com/rojo-rbx/rojo) and [Wally](https://github.com/UpliftGames/wally). Networking runs over [bytenet](https://github.com/ffrostfall/ByteNet), and events use [bindable](https://github.com/hobbs04067/bindable).\n\n**Full usage guide and API reference: [docs/USAGE.md](docs/USAGE.md)**\n**Building and contributing: [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md)**\n\n## Contents\n\n- [Features](#features)\n- [Installation](#installation)\n- [Quick start](#quick-start)\n- [License](#license)\n\n## Features\n\n- 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.\n- Automatic client replication over a single [bytenet](https://github.com/ffrostfall/ByteNet) packet — clients get a mirrored `NoidManager` object for every live noid, including late-joining players.\n- 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.\n- A pluggable mod system — attach `Constructor`/`Destructor` behavior to a noid from separate `ModuleScript`s, scoped to run on the server, the client, or both (`Type = \"Server\" | \"Client\" | \"Shared\"`).\n- Per-instance constructor arguments — activate the same mod on different noids with different arguments.\n- Lookup by ID or by owning `Player`, plus a `ManagerConstructed` event for generic hooks.\n\n## Installation\n\nAdd to your `wally.toml`:\n\n```toml\n[dependencies]\nNoidManager = \"hobbs04067/noid-manager@0.5.16\"\n```\n\nThen run:\n\n```bash\nwally install\n```\n\n`noid-manager` itself depends on `bindable`, `bytenet`, and `playereventsequencer` — Wally resolves these for you.\n\n## Quick start\n\n```lua\n-- Server: register a mod, then spawn a noid with it active\nlocal NoidManager = require(ReplicatedStorage.NoidManager)\n\nlocal wanderMod = NoidManager.RegisterModModuleScript(script.WanderMod)\n\nlocal manager = NoidManager.new(someRig, { wanderMod })\n\nmanager.Destroying:Connect(function()\n\tprint(\"noid\", manager.id, \"was destroyed\")\nend)\n\n-- later\nmanager:Destroy()\n```\n\n```lua\n-- WanderMod.luau — Type \"Shared\" runs its Constructor/Destructor on both realms\nreturn {\n\tType = \"Shared\",\n\tConstructor = function(self)\n\t\tprint(\"noid\", self.id, \"spawned at\", self.rig:GetPivot().Position)\n\tend,\n\tDestructor = function(self)\n\t\tprint(\"noid\", self.id, \"destroyed\")\n\tend,\n}\n```\n\n```lua\n-- Anywhere (server or client): look up an existing manager\nlocal manager = NoidManager.GetManagerFromId(id)\nlocal manager = NoidManager.GetManagerFromPlayer(player)\n\nNoidManager.ManagerConstructed:Connect(function(manager)\n\tprint(\"constructed\", manager.id)\nend)\n```\n\nSee [docs/USAGE.md](docs/USAGE.md) for how it all fits together, the full mod `Type` semantics, constructor-argument syntax, and replication behavior.\n\n## License\n\n[MIT](LICENSE)\n","readmeTruncated":false}