- Added frontmatter to various markdown files for better metadata handling. - Updated site URLs in configuration files for consistency. - Improved content organization and clarity in getting started, server extension, and client addon guides.
3.6 KiB
3.6 KiB
title, description
| title | description |
|---|---|
| Actor Usage Guide | The actor module stores persistent player character data: identity, loadout, position, direction, stance, contact fields, state, holster status, rank, and organization. |
Storage Model
Actor data is persisted through SurrealDB by the server extension.
{
"uid": "76561198000000000",
"name": "Player Name",
"loadout": {},
"position": [1234.5, 6789.0, 0.0],
"direction": 90.0,
"stance": "STAND",
"email": "0160000000@spearnet.mil",
"phone_number": "0160000000",
"state": "HEALTHY",
"holster": true,
"rank": null,
"organization": "default"
}
Rules validated by the Rust service:
uidis authoritative from the command argument and must be a 17-digit Steam UID.nameis optional, but cannot be empty when set and cannot exceed 50 characters.positionmust be three finite numbers when set.directionmust be in the0.0 <= direction < 360.0range.emailmust contain@and end with.milwhen set.phone_numbermust start with0160and be 10 digits when set.- Empty
phone_number,email, ororganizationfields are filled on create.
Commands
All commands are called on the actor group.
| Command | Arguments | Returns |
|---|---|---|
actor:get |
uid |
Actor JSON. If no actor exists, returns a default actor but does not persist it. |
actor:create |
uid, actor_json |
Persisted actor JSON. |
actor:update |
uid, patch_json |
Updated actor JSON. |
actor:exists |
uid |
true or false. |
actor:delete |
uid |
OK. |
Create an Actor
The uid field in the JSON is overwritten with the command UID.
private _actor = createHashMapFromArray [
["uid", getPlayerUID player],
["name", name player],
["loadout", getUnitLoadout player],
["position", getPosATL player],
["direction", getDir player],
["stance", stance player],
["email", ""],
["phone_number", ""],
["state", "HEALTHY"],
["holster", true],
["organization", "default"]
];
private _result = "forge_server" callExtension ["actor:create", [
getPlayerUID player,
toJSON _actor
]];
Update an Actor
actor:update accepts a JSON object containing only fields to change.
private _patch = createHashMapFromArray [
["position", getPosATL player],
["direction", getDir player],
["stance", stance player],
["loadout", getUnitLoadout player]
];
private _result = "forge_server" callExtension ["actor:update", [
getPlayerUID player,
toJSON _patch
]];
Supported patch fields are name, position, direction, stance, email,
phone_number, state, holster, rank, organization, and loadout.
uid is ignored.
Hot State
The actor:hot:* commands keep a runtime copy of actor data and write it back
only when actor:hot:save runs.
| Command | Arguments | Returns |
|---|---|---|
actor:hot:init |
uid |
Actor JSON from durable storage. |
actor:hot:get |
uid |
Actor JSON. |
actor:hot:keys |
none | JSON array of hot actor UIDs. |
actor:hot:override |
uid, actor_json |
Actor JSON. |
actor:hot:save |
uid |
Current hot actor JSON and async durable save. |
actor:hot:remove |
uid |
OK. |
Use hot state for frequently updated session data such as position and loadout. Use durable commands for account creation and administrative changes.
Error Handling
private _result = "forge_server" callExtension ["actor:get", [getPlayerUID player]];
private _payload = _result select 0;
if (_payload find "Error:" == 0) exitWith {
systemChat format ["Actor error: %1", _payload];
};
private _actor = fromJSON _payload;