- Created package.json for Docus with necessary scripts and dependencies. - Implemented sync-docus-docs.mjs to automate the generation of documentation files from source markdown. - Defined mappings for generated pages and virtual routes to ensure proper linking in documentation. - Added static content files for the documentation structure, including navigation and index pages.
6.4 KiB
6.4 KiB
Organization Usage Guide
The organization module stores organization records, members, assets, fleet entries, and credit lines. Durable commands manage persisted records directly. Hot-state commands support the active organization UI workflows.
Storage Model
Core organization:
{
"id": "default",
"owner": "server",
"name": "Default Organization",
"funds": 0.0,
"reputation": 0,
"credit_lines": {}
}
Hot organization:
{
"id": "default",
"owner": "server",
"name": "Default Organization",
"funds": 0.0,
"reputation": 0,
"credit_lines": {},
"assets": {},
"fleet": {},
"members": {},
"pending_invites": {}
}
Rules validated by the Rust service:
idmust be non-empty and contain only alphanumeric characters or_.ownermust beserveror a 17-digit Steam UID.namecannot be empty, cannot exceed 100 characters, and cannot contain control characters.funds, reputation, and credit line amounts cannot be negative.- Player registration is rejected when the player already belongs to a non-default organization.
Durable Commands
| Command | Arguments | Returns |
|---|---|---|
org:create |
org_id, org_json |
Organization JSON. |
org:get |
org_id |
Organization JSON. |
org:update |
org_id, patch_json |
Updated organization JSON. |
org:exists |
org_id |
true or false. |
org:delete |
org_id |
OK. |
org:assets:get |
org_id |
Asset map JSON. |
org:assets:update |
org_id, assets_json |
Updated asset map JSON. |
org:fleet:get |
org_id |
Fleet map JSON. |
org:fleet:update |
org_id, fleet_json |
Updated fleet map JSON. |
org:members:get |
org_id |
Member array JSON. |
org:members:add |
org_id, member_uid |
OK. |
org:members:remove |
org_id, member_uid |
OK. |
Create an Organization
The command key is authoritative for id.
private _org = createHashMapFromArray [
["id", _orgId],
["owner", getPlayerUID player],
["name", "Spearnet Logistics"],
["funds", 0],
["reputation", 0],
["credit_lines", createHashMap]
];
private _result = "forge_server" callExtension ["org:create", [
_orgId,
toJSON _org
]];
Update Organization Funds
private _patch = createHashMapFromArray [
["funds", 5000],
["reputation", 10]
];
private _result = "forge_server" callExtension ["org:update", [
_orgId,
toJSON _patch
]];
Supported durable patch fields are id, owner, name, funds,
reputation, and credit_lines.
Assets and Fleet
Assets are grouped by category, then classname.
private _assets = createHashMapFromArray [
["ammo", createHashMapFromArray [
["ACE_30Rnd_65x39_caseless_mag", createHashMapFromArray [
["classname", "ACE_30Rnd_65x39_caseless_mag"],
["type", "ammo"],
["quantity", 20]
]]
]]
];
"forge_server" callExtension ["org:assets:update", [_orgId, toJSON _assets]];
Fleet is keyed by an internal fleet entry ID.
private _fleet = createHashMapFromArray [
["B_Truck_01_transport_F_0", createHashMapFromArray [
["classname", "B_Truck_01_transport_F"],
["name", "Transport Truck"],
["type", "cars"],
["status", "Ready"],
["damage", "0%"]
]]
];
"forge_server" callExtension ["org:fleet:update", [_orgId, toJSON _fleet]];
Hot-State Commands
| Command | Arguments | Returns |
|---|---|---|
org:hot:init |
org_id |
Hot organization JSON. |
org:hot:get |
org_id |
Hot organization JSON. |
org:hot:override |
org_id, hot_org_json |
Hot organization JSON. |
org:hot:ensure_member |
context_json |
Hot organization JSON. |
org:hot:member_invites |
member_uid |
Invite array JSON. |
org:hot:register |
context_json |
Register result JSON. |
org:hot:invite_member |
context_json |
Invite result JSON. |
org:hot:accept_invite |
context_json |
Invite decision result JSON. |
org:hot:decline_invite |
context_json |
Invite decision result JSON. |
org:hot:assign_credit_line |
context_json |
Mutation result JSON. |
org:hot:repay_credit_line |
context_json |
Repayment result JSON. |
org:hot:charge_checkout |
context_json |
Mutation result JSON. |
org:hot:add_assets |
context_json, assets_json |
Mutation result JSON. |
org:hot:add_fleet |
context_json, fleet_json |
Mutation result JSON. |
org:hot:leave |
context_json |
Leave result JSON. |
org:hot:disband |
context_json |
Disband result JSON. |
org:hot:save |
org_id |
Current hot organization JSON and async durable save. |
org:hot:remove |
org_id |
OK. |
Register from UI Context
private _context = createHashMapFromArray [
["requesterUid", getPlayerUID player],
["requesterName", name player],
["orgId", _orgId],
["orgName", "Spearnet Logistics"],
["existingOrgId", "default"]
];
private _result = "forge_server" callExtension ["org:hot:register", [toJSON _context]];
Invite and Accept
private _invite = createHashMapFromArray [
["requesterUid", getPlayerUID player],
["requesterName", name player],
["orgId", _orgId],
["requesterIsDefaultOrgCeo", false],
["targetUid", _targetUid],
["targetName", _targetName],
["targetOrgId", "default"]
];
"forge_server" callExtension ["org:hot:invite_member", [toJSON _invite]];
private _decision = createHashMapFromArray [
["requesterUid", _targetUid],
["requesterName", _targetName],
["orgId", _orgId],
["existingOrgId", "default"]
];
"forge_server" callExtension ["org:hot:accept_invite", [toJSON _decision]];
Credit Line Checkout
private _credit = createHashMapFromArray [
["requesterUid", getPlayerUID player],
["orgId", _orgId],
["requesterIsDefaultOrgCeo", false],
["memberUid", _memberUid],
["memberName", _memberName],
["amount", 1000]
];
"forge_server" callExtension ["org:hot:assign_credit_line", [toJSON _credit]];
private _charge = createHashMapFromArray [
["requesterUid", _memberUid],
["orgId", _orgId],
["requesterIsDefaultOrgCeo", false],
["source", "credit_line"],
["amount", 250],
["commit", true]
];
"forge_server" callExtension ["org:hot:charge_checkout", [toJSON _charge]];
Error Handling
private _payload = _result select 0;
if (_payload find "Error:" == 0) exitWith {
systemChat format ["Organization error: %1", _payload];
};