58 lines
2.2 KiB
Markdown
58 lines
2.2 KiB
Markdown
# Mosswart Massacre for OpenAC
|
|
|
|
A private OpenAC port of the Mosswart Massacre DECAL plugin: it streams
|
|
telemetry, vitals, chat, inventory, combat and character stats to the Mosswart
|
|
Overlord backend, shares vitals and debuffs across machines, runs the commands
|
|
typed into the Overlord chat box, keeps the flag tracker and syncs metas.
|
|
|
|
**The backend contract is fixed.** Every frame this plugin sends or accepts is
|
|
byte-for-byte what the DECAL plugin sent and accepted; the golden tests under
|
|
`tests/` pin each one. Change a frame only together with the backend.
|
|
|
|
## Building
|
|
|
|
The plugin contract is `AcDream.Plugin.Abstractions` of the version named in
|
|
`Directory.Build.props` (`PluginApiPackageVersion`), currently 0.1.19-mm.2:
|
|
OpenAC `claude/mm-plugin-api` at 0f11c12b, now part of `claude/ryncmd-host` (peer relay, status board, object
|
|
headers and the other additions this plugin needs) packed with
|
|
`dotnet pack src/AcDream.Plugin.Abstractions -c Release -p:Version=0.1.19-mm.2`.
|
|
The package sits in `packages-staging/`; copy it to `packages-local/`.
|
|
Once that branch is released the package comes from the OpenAC release
|
|
instead. The client must be built from the same line (with
|
|
`-p:Version=0.1.19-mm.2` when built from source), or it refuses the plugin.
|
|
|
|
```
|
|
cp packages-staging/*.nupkg packages-local/
|
|
dotnet build OpenAC.MosswartMassacre.slnx
|
|
dotnet test OpenAC.MosswartMassacre.slnx
|
|
```
|
|
|
|
## Installing
|
|
|
|
Copy `src/OpenAC.MosswartMassacre/bin/<config>/net10.0/` (the dll, its
|
|
`.deps.json`, `Newtonsoft.Json.dll`, `plugin.json` and the markup) into
|
|
`%LOCALAPPDATA%\acdream\plugins\openac.mosswartmassacre\`.
|
|
|
|
## First run
|
|
|
|
Streaming is off until you turn it on. The shared secret is never compiled in:
|
|
|
|
```
|
|
/mm ws secret <the backend's shared secret>
|
|
/mm ws enable
|
|
```
|
|
|
|
`/mm help` lists every command.
|
|
|
|
## Testing against a stand-in backend
|
|
|
|
`tools/FrameRecorder` accepts the plugin's socket like the backend does,
|
|
records every frame to a JSON-lines file, relays `share_*` frames between
|
|
subscribed clients as the backend does, and compares two recordings by
|
|
frame shape:
|
|
|
|
```
|
|
dotnet run --project tools/FrameRecorder -- record 18765 frames.jsonl
|
|
/mm ws url ws://localhost:18765/websocket/
|
|
dotnet run --project tools/FrameRecorder -- compare decal.jsonl port.jsonl
|
|
```
|