1412 lines
43 KiB
JSON
1412 lines
43 KiB
JSON
{
|
|
"$schema": "../../manifests/game-plugin.manifest.schema.json",
|
|
"id": "game.scum",
|
|
"name": "SCUM Server",
|
|
"description": "First-party SCUM game server operations plugin with platform-mediated lifecycle and companion bridge support.",
|
|
"version": "0.1.6",
|
|
"kind": "game-plugin",
|
|
"tags": [
|
|
"scum",
|
|
"survival",
|
|
"dedicated-server",
|
|
"game-operations",
|
|
"companion-client"
|
|
],
|
|
"server": {
|
|
"type": "scum",
|
|
"displayName": "SCUM Dedicated Server",
|
|
"supportedOS": [
|
|
"windows",
|
|
"linux"
|
|
],
|
|
"createFormSchema": "schemas/create-form.schema.json",
|
|
"createFields": [
|
|
{
|
|
"key": "serverName",
|
|
"label": "SCUM 服务器名称",
|
|
"type": "text",
|
|
"required": true,
|
|
"configKey": "serverName"
|
|
},
|
|
{
|
|
"key": "gamePort",
|
|
"label": "游戏端口",
|
|
"type": "port",
|
|
"required": true,
|
|
"defaultValue": "7779",
|
|
"configKey": "gamePort"
|
|
},
|
|
{
|
|
"key": "queryPort",
|
|
"label": "查询端口",
|
|
"type": "port",
|
|
"required": true,
|
|
"defaultValue": "27015",
|
|
"configKey": "queryPort"
|
|
},
|
|
{
|
|
"key": "maxPlayers",
|
|
"label": "最大玩家数",
|
|
"type": "number",
|
|
"required": true,
|
|
"defaultValue": "128",
|
|
"configKey": "maxPlayers"
|
|
}
|
|
]
|
|
},
|
|
"capabilities": [
|
|
"process.install",
|
|
"process.start",
|
|
"process.stop",
|
|
"process.restart",
|
|
"process.status",
|
|
"files.list",
|
|
"files.read",
|
|
"files.patch",
|
|
"logs.read",
|
|
"remote.ftp.read",
|
|
"remote.ftp.write",
|
|
"remote.rsync.read",
|
|
"remote.rsync.write",
|
|
"remote.run.files.read",
|
|
"remote.run.files.write",
|
|
"remote.run.db.sqlite.query",
|
|
"remote.run.process.start",
|
|
"remote.run.process.stop",
|
|
"remote.run.logs.transfer",
|
|
"remote.run.protected.sql",
|
|
"remote.run.protected.rcon",
|
|
"remote.run.program.command",
|
|
"client-manager.deploy",
|
|
"client-manager.control",
|
|
"client-manager.update",
|
|
"client-manager.rollback",
|
|
"client-manager.uninstall",
|
|
"artifacts.read",
|
|
"artifacts.write",
|
|
"ai.invoke"
|
|
],
|
|
"remoteAccess": {
|
|
"methods": [
|
|
"ftp",
|
|
"rsync",
|
|
"run"
|
|
],
|
|
"runCapabilities": [
|
|
"remote.run.files.read",
|
|
"remote.run.files.write",
|
|
"remote.run.db.sqlite.query",
|
|
"remote.run.process.start",
|
|
"remote.run.process.stop",
|
|
"remote.run.logs.transfer",
|
|
"remote.run.protected.sql",
|
|
"remote.run.protected.rcon",
|
|
"remote.run.program.command"
|
|
],
|
|
"databaseEngines": [
|
|
"sqlite"
|
|
],
|
|
"logTransfer": true
|
|
},
|
|
"bridge": {
|
|
"actions": [
|
|
"server.instances.read",
|
|
"jobs.dispatch",
|
|
"artifacts.open",
|
|
"remote.access.request",
|
|
"ai.invoke",
|
|
"run.distribution.request",
|
|
"dependencies.request",
|
|
"client-manager.request",
|
|
"plugin-lifecycle.request"
|
|
]
|
|
},
|
|
"gameClientBridge": {
|
|
"commands": [
|
|
{
|
|
"type": "announcement.send",
|
|
"title": "Send SCUM announcement",
|
|
"permission": "server.game-client.command",
|
|
"approvalLevel": "operator",
|
|
"payloadSchemaRef": "schemas/bridge/announcement.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/announcement.result.schema.json",
|
|
"timeoutSeconds": 60,
|
|
"maxPayloadBytes": 4096
|
|
},
|
|
{
|
|
"type": "companion.diagnostics",
|
|
"title": "Collect companion diagnostics",
|
|
"permission": "server.game-client.read",
|
|
"approvalLevel": "none",
|
|
"payloadSchemaRef": "schemas/bridge/diagnostics.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/diagnostics.result.schema.json",
|
|
"timeoutSeconds": 30,
|
|
"maxPayloadBytes": 2048
|
|
},
|
|
{
|
|
"type": "player.lookup",
|
|
"title": "Look up SCUM player",
|
|
"permission": "server.game-client.read",
|
|
"approvalLevel": "none",
|
|
"payloadSchemaRef": "schemas/bridge/player-lookup.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/player-lookup.result.schema.json",
|
|
"timeoutSeconds": 30,
|
|
"maxPayloadBytes": 4096
|
|
},
|
|
{
|
|
"type": "reward.deliver",
|
|
"title": "Deliver SCUM reward",
|
|
"permission": "server.game-client.command",
|
|
"approvalLevel": "operator",
|
|
"payloadSchemaRef": "schemas/bridge/reward-deliver.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/reward-deliver.result.schema.json",
|
|
"timeoutSeconds": 60,
|
|
"maxPayloadBytes": 4096
|
|
},
|
|
{
|
|
"type": "player.notify",
|
|
"title": "Notify SCUM player about approved gift",
|
|
"permission": "server.game-client.command",
|
|
"approvalLevel": "operator",
|
|
"payloadSchemaRef": "schemas/bridge/player-notify.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/player-notify.result.schema.json",
|
|
"timeoutSeconds": 60,
|
|
"maxPayloadBytes": 2048
|
|
},
|
|
{
|
|
"type": "vehicle.spawn",
|
|
"title": "Spawn catalogued SCUM vehicle",
|
|
"permission": "server.game-client.command",
|
|
"approvalLevel": "operator",
|
|
"payloadSchemaRef": "schemas/bridge/vehicle-spawn.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/vehicle-spawn.result.schema.json",
|
|
"timeoutSeconds": 60,
|
|
"maxPayloadBytes": 1024
|
|
},
|
|
{
|
|
"type": "event.start",
|
|
"title": "Start SCUM event",
|
|
"permission": "server.game-client.command",
|
|
"approvalLevel": "operator",
|
|
"payloadSchemaRef": "schemas/bridge/event-start.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/event-start.result.schema.json",
|
|
"timeoutSeconds": 60,
|
|
"maxPayloadBytes": 4096
|
|
},
|
|
{
|
|
"type": "restart.prepare",
|
|
"title": "Prepare SCUM restart",
|
|
"permission": "server.game-client.maintenance",
|
|
"approvalLevel": "operator",
|
|
"payloadSchemaRef": "schemas/bridge/restart-prepare.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/restart-prepare.result.schema.json",
|
|
"timeoutSeconds": 120,
|
|
"maxPayloadBytes": 4096
|
|
},
|
|
{
|
|
"type": "maintenance.prepare",
|
|
"title": "Prepare SCUM maintenance",
|
|
"permission": "server.game-client.maintenance",
|
|
"approvalLevel": "platform-admin",
|
|
"payloadSchemaRef": "schemas/bridge/maintenance-prepare.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/maintenance-prepare.result.schema.json",
|
|
"timeoutSeconds": 120,
|
|
"maxPayloadBytes": 4096
|
|
},
|
|
{
|
|
"type": "game-state.patch",
|
|
"title": "Patch SCUM player state",
|
|
"permission": "server.game-client.maintenance",
|
|
"approvalLevel": "platform-admin",
|
|
"payloadSchemaRef": "schemas/bridge/game-state-patch.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/game-state-patch.result.schema.json",
|
|
"timeoutSeconds": 120,
|
|
"maxPayloadBytes": 4096
|
|
}
|
|
],
|
|
"snapshots": [
|
|
{
|
|
"type": "companion.health",
|
|
"schemaVersion": "1",
|
|
"schemaRef": "schemas/bridge/companion-health.snapshot.schema.json",
|
|
"keepForSeconds": 604800,
|
|
"maxRecords": 1000
|
|
},
|
|
{
|
|
"type": "semantic.events",
|
|
"schemaVersion": "1",
|
|
"schemaRef": "schemas/bridge/semantic-events.snapshot.schema.json",
|
|
"keepForSeconds": 604800,
|
|
"maxRecords": 1000
|
|
},
|
|
{
|
|
"type": "online.sessions",
|
|
"schemaVersion": "1",
|
|
"schemaRef": "schemas/bridge/online-sessions.snapshot.schema.json",
|
|
"keepForSeconds": 86400,
|
|
"maxRecords": 1000
|
|
},
|
|
{
|
|
"type": "players",
|
|
"schemaVersion": "1",
|
|
"schemaRef": "schemas/bridge/players.snapshot.schema.json",
|
|
"keepForSeconds": 86400,
|
|
"maxRecords": 1000
|
|
},
|
|
{
|
|
"type": "player.state",
|
|
"schemaVersion": "1",
|
|
"schemaRef": "schemas/bridge/player-state.snapshot.schema.json",
|
|
"keepForSeconds": 86400,
|
|
"maxRecords": 1000
|
|
},
|
|
{
|
|
"type": "squads",
|
|
"schemaVersion": "1",
|
|
"schemaRef": "schemas/bridge/squads.snapshot.schema.json",
|
|
"keepForSeconds": 86400,
|
|
"maxRecords": 1000
|
|
},
|
|
{
|
|
"type": "vehicles",
|
|
"schemaVersion": "1",
|
|
"schemaRef": "schemas/bridge/vehicles.snapshot.schema.json",
|
|
"keepForSeconds": 86400,
|
|
"maxRecords": 1000
|
|
},
|
|
{
|
|
"type": "flags",
|
|
"schemaVersion": "1",
|
|
"schemaRef": "schemas/bridge/flags.snapshot.schema.json",
|
|
"keepForSeconds": 86400,
|
|
"maxRecords": 1000
|
|
}
|
|
],
|
|
"queryTemplates": [
|
|
{
|
|
"key": "scum.player.profile",
|
|
"title": "Read SCUM player profile, economy, squad, and position facts",
|
|
"permission": "server.game-client.read",
|
|
"engine": "sqlite",
|
|
"transportKey": "scum-database",
|
|
"targetKey": "scum-database",
|
|
"parameterSchemaRef": "schemas/bridge/queries/scum-player-profile.parameters.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/queries/scum-player-profile.result.schema.json",
|
|
"sqlRef": "sql/scum-db-v57/users.sql",
|
|
"targetTable": "scum_users",
|
|
"upsertKeys": ["userProfileId"],
|
|
"columnMappings": { "userProfileId": "userProfileId", "steamId": "steamId", "gamePlayerId": "gamePlayerId", "displayName": "displayName", "famePoints": "famePoints", "normalBalance": "normalBalance", "goldBalance": "goldBalance", "x": "x", "y": "y", "z": "z", "lastSaveTime": "lastSaveTime", "lastLoginTime": "lastLoginTime", "lastLogoutTime": "lastLogoutTime", "isAlive": "isAlive" },
|
|
"maxRows": 500,
|
|
"timeoutSeconds": 15
|
|
},
|
|
{
|
|
"key": "scum.squads",
|
|
"title": "Read SCUM squad records",
|
|
"permission": "server.game-client.read",
|
|
"engine": "sqlite",
|
|
"transportKey": "scum-database",
|
|
"targetKey": "scum-database",
|
|
"parameterSchemaRef": "schemas/bridge/queries/scum-squads.parameters.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/queries/scum-squads.result.schema.json",
|
|
"sqlRef": "sql/scum-db-v57/squads.sql",
|
|
"targetTable": "scum_squads",
|
|
"upsertKeys": ["squadId"],
|
|
"columnMappings": { "squadId": "squadId", "name": "name", "leaderProfileId": "leaderProfileId", "leaderPlayerId": "leaderPlayerId", "memberCount": "memberCount", "score": "score", "memberLimit": "memberLimit", "lastMemberLoginTime": "lastMemberLoginTime", "lastMemberLogoutTime": "lastMemberLogoutTime" },
|
|
"maxRows": 500,
|
|
"timeoutSeconds": 15
|
|
},
|
|
{
|
|
"key": "scum.squad-members",
|
|
"title": "Read SCUM squad membership records",
|
|
"permission": "server.game-client.read",
|
|
"engine": "sqlite",
|
|
"transportKey": "scum-database",
|
|
"targetKey": "scum-database",
|
|
"parameterSchemaRef": "schemas/bridge/queries/scum-squad-members.parameters.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/queries/scum-squad-members.result.schema.json",
|
|
"sqlRef": "sql/scum-db-v57/squad-members.sql",
|
|
"targetTable": "scum_squad_members",
|
|
"upsertKeys": ["squadId", "userProfileId"],
|
|
"columnMappings": { "squadId": "squadId", "userProfileId": "userProfileId", "gamePlayerId": "gamePlayerId", "steamId": "steamId", "displayName": "displayName", "rank": "rank", "isLeader": "isLeader" },
|
|
"maxRows": 500,
|
|
"timeoutSeconds": 15
|
|
},
|
|
{
|
|
"key": "scum.vehicles",
|
|
"title": "Read SCUM vehicle records and coordinates",
|
|
"permission": "server.game-client.read",
|
|
"engine": "sqlite",
|
|
"transportKey": "scum-database",
|
|
"targetKey": "scum-database",
|
|
"parameterSchemaRef": "schemas/bridge/queries/scum-vehicles.parameters.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/queries/scum-vehicles.result.schema.json",
|
|
"sqlRef": "sql/scum-db-v57/vehicles.sql",
|
|
"targetTable": "scum_vehicles",
|
|
"upsertKeys": ["vehicleId"],
|
|
"columnMappings": { "vehicleId": "vehicleId", "entityId": "entityId", "className": "className", "label": "label", "x": "x", "y": "y", "z": "z", "lastAccessTime": "lastAccessTime", "isFunctional": "isFunctional" },
|
|
"maxRows": 500,
|
|
"timeoutSeconds": 15
|
|
},
|
|
{
|
|
"key": "scum.flags",
|
|
"title": "Read SCUM flag and ownership records",
|
|
"permission": "server.game-client.read",
|
|
"engine": "sqlite",
|
|
"transportKey": "scum-database",
|
|
"targetKey": "scum-database",
|
|
"parameterSchemaRef": "schemas/bridge/queries/scum-flags.parameters.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/queries/scum-flags.result.schema.json",
|
|
"sqlRef": "sql/scum-db-v57/flags.sql",
|
|
"targetTable": "scum_flags",
|
|
"upsertKeys": ["flagId"],
|
|
"columnMappings": { "flagId": "flagId", "entityId": "entityId", "baseId": "baseId", "ownerProfileId": "ownerProfileId", "ownerPlayerId": "ownerPlayerId", "overtakerProfileId": "overtakerProfileId", "overtakeEndTime": "overtakeEndTime", "x": "x", "y": "y", "z": "z" },
|
|
"maxRows": 500,
|
|
"timeoutSeconds": 15
|
|
},
|
|
{
|
|
"key": "scum.positions",
|
|
"title": "Read SCUM v57 player, vehicle, and base map points",
|
|
"permission": "server.game-client.read",
|
|
"engine": "sqlite",
|
|
"transportKey": "scum-database",
|
|
"targetKey": "scum-database",
|
|
"parameterSchemaRef": "schemas/bridge/queries/scum-positions.parameters.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/queries/scum-positions.result.schema.json",
|
|
"sqlRef": "sql/scum-db-v57/map-points.sql",
|
|
"targetTable": "scum_map_points",
|
|
"upsertKeys": ["subjectType", "subjectId"],
|
|
"columnMappings": { "subjectType": "subjectType", "subjectId": "subjectId", "userProfileId": "userProfileId", "gamePlayerId": "gamePlayerId", "vehicleId": "vehicleId", "baseId": "baseId", "x": "x", "y": "y", "z": "z", "observedAt": "observedAt" },
|
|
"maxRows": 500,
|
|
"timeoutSeconds": 15
|
|
},
|
|
{
|
|
"key": "scum.activity",
|
|
"title": "Read SCUM v57 active tasks",
|
|
"permission": "server.game-client.read",
|
|
"engine": "sqlite",
|
|
"transportKey": "scum-database",
|
|
"targetKey": "scum-database",
|
|
"parameterSchemaRef": "schemas/bridge/queries/scum-activity.parameters.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/queries/scum-activity.result.schema.json",
|
|
"sqlRef": "sql/scum-db-v57/activity.sql",
|
|
"targetTable": "scum_activity_events",
|
|
"upsertKeys": ["activityId"],
|
|
"columnMappings": { "activityId": "activityId", "activityType": "activityType", "userProfileId": "userProfileId", "mapId": "mapId", "subject": "subject", "sequenceIndex": "sequenceIndex", "occurredAt": "occurredAt", "state": "state" },
|
|
"maxRows": 500,
|
|
"timeoutSeconds": 15
|
|
},
|
|
{
|
|
"key": "scum.gifts",
|
|
"title": "Read SCUM v57 finished_timed_gift_spawner records",
|
|
"permission": "server.game-client.read",
|
|
"engine": "sqlite",
|
|
"transportKey": "scum-database",
|
|
"targetKey": "scum-database",
|
|
"parameterSchemaRef": "schemas/bridge/queries/scum-gifts.parameters.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/queries/scum-gifts.result.schema.json",
|
|
"sqlRef": "sql/scum-db-v57/gifts.sql",
|
|
"targetTable": "scum_gift_catalogs",
|
|
"upsertKeys": ["giftId"],
|
|
"columnMappings": { "giftId": "giftId", "giftType": "giftType", "userProfileId": "userProfileId", "mapId": "mapId", "spawnTime": "spawnTime", "spawnAt": "spawnAt", "displayName": "displayName" },
|
|
"maxRows": 500,
|
|
"timeoutSeconds": 15
|
|
}
|
|
],
|
|
"dataPacks": [
|
|
{
|
|
"key": "scum-db-v57",
|
|
"databaseUserVersion": 57,
|
|
"logParserRefs": ["data-packs/scum-db-v57/log-parsers.json"],
|
|
"configMapRefs": ["data-packs/scum-db-v57/config-maps.json"]
|
|
}
|
|
],
|
|
"operationTemplates": [
|
|
{
|
|
"key": "player.fame.set",
|
|
"title": "Set SCUM player fame through RCON",
|
|
"permission": "server.game-client.command",
|
|
"approvalLevel": "operator",
|
|
"kind": "rcon",
|
|
"transportKey": "scum-management",
|
|
"targetKey": "scum-management",
|
|
"payloadSchemaRef": "schemas/bridge/player-fame-set.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/player-rcon-set.result.schema.json",
|
|
"confirmationSchemaRef": "schemas/bridge/player-fame-set.confirmation.schema.json",
|
|
"timeoutSeconds": 60,
|
|
"maxPayloadBytes": 2048,
|
|
"safety": {
|
|
"requiresApproval": true,
|
|
"requiresConfirmation": true
|
|
}
|
|
},
|
|
{
|
|
"key": "player.currency.normal.set",
|
|
"title": "Set SCUM normal currency through RCON",
|
|
"permission": "server.game-client.command",
|
|
"approvalLevel": "operator",
|
|
"kind": "rcon",
|
|
"transportKey": "scum-management",
|
|
"targetKey": "scum-management",
|
|
"payloadSchemaRef": "schemas/bridge/player-currency-set.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/player-rcon-set.result.schema.json",
|
|
"confirmationSchemaRef": "schemas/bridge/player-currency-set.confirmation.schema.json",
|
|
"timeoutSeconds": 60,
|
|
"maxPayloadBytes": 2048,
|
|
"safety": {
|
|
"requiresApproval": true,
|
|
"requiresConfirmation": true
|
|
}
|
|
},
|
|
{
|
|
"key": "player.currency.gold.set",
|
|
"title": "Set SCUM gold currency through RCON",
|
|
"permission": "server.game-client.command",
|
|
"approvalLevel": "operator",
|
|
"kind": "rcon",
|
|
"transportKey": "scum-management",
|
|
"targetKey": "scum-management",
|
|
"payloadSchemaRef": "schemas/bridge/player-currency-set.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/player-rcon-set.result.schema.json",
|
|
"confirmationSchemaRef": "schemas/bridge/player-currency-set.confirmation.schema.json",
|
|
"timeoutSeconds": 60,
|
|
"maxPayloadBytes": 2048,
|
|
"safety": {
|
|
"requiresApproval": true,
|
|
"requiresConfirmation": true
|
|
}
|
|
},
|
|
{
|
|
"key": "player.notify",
|
|
"title": "Notify SCUM player through RCON chat",
|
|
"permission": "server.game-client.command",
|
|
"approvalLevel": "operator",
|
|
"kind": "rcon",
|
|
"transportKey": "scum-management",
|
|
"targetKey": "scum-management",
|
|
"payloadSchemaRef": "schemas/bridge/player-notify.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/player-notify.result.schema.json",
|
|
"confirmationSchemaRef": "schemas/bridge/player-notify.confirmation.schema.json",
|
|
"timeoutSeconds": 60,
|
|
"maxPayloadBytes": 2048,
|
|
"safety": {
|
|
"requiresApproval": true,
|
|
"requiresConfirmation": true
|
|
}
|
|
},
|
|
{
|
|
"key": "reward.deliver",
|
|
"title": "Deliver approved SCUM reward through typed command workflow",
|
|
"permission": "server.game-client.command",
|
|
"approvalLevel": "operator",
|
|
"kind": "rcon",
|
|
"transportKey": "scum-management",
|
|
"targetKey": "scum-management",
|
|
"payloadSchemaRef": "schemas/bridge/reward-deliver.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/reward-deliver.result.schema.json",
|
|
"confirmationSchemaRef": "schemas/bridge/reward-deliver.confirmation.schema.json",
|
|
"timeoutSeconds": 60,
|
|
"maxPayloadBytes": 4096,
|
|
"safety": {
|
|
"requiresApproval": true,
|
|
"requiresConfirmation": true
|
|
}
|
|
},
|
|
{
|
|
"key": "player.attribute.855.set",
|
|
"title": "Set SCUM DB-only player attribute 855",
|
|
"permission": "server.game-client.maintenance",
|
|
"approvalLevel": "platform-admin",
|
|
"kind": "sqlite-mutation",
|
|
"transportKey": "scum-database",
|
|
"targetKey": "scum-database",
|
|
"payloadSchemaRef": "schemas/bridge/player-attribute-855-set.payload.schema.json",
|
|
"resultSchemaRef": "schemas/bridge/player-attribute-855-set.result.schema.json",
|
|
"confirmationSchemaRef": "schemas/bridge/player-attribute-855-set.confirmation.schema.json",
|
|
"timeoutSeconds": 120,
|
|
"maxPayloadBytes": 4096,
|
|
"maxRowsAffected": 1,
|
|
"mutation": {
|
|
"fieldKey": "855",
|
|
"tableKey": "prisoner",
|
|
"identityKey": "user_profile_id",
|
|
"valueKey": "value",
|
|
"confirmationQueryKey": "scum.player.profile",
|
|
"allowedValueType": "integer",
|
|
"minValue": 0,
|
|
"maxValue": 100000
|
|
},
|
|
"safety": {
|
|
"requiresApproval": true,
|
|
"requiresOfflinePlayer": true,
|
|
"requiresMaintenanceWindow": true,
|
|
"requiresBeforeValue": true,
|
|
"requiresConfirmation": true,
|
|
"backupRequired": true
|
|
}
|
|
}
|
|
],
|
|
"commandRetentionSeconds": 604800,
|
|
"maxCommands": 1000,
|
|
"features": [
|
|
{
|
|
"key": "player.intelligence",
|
|
"title": "SCUM player intelligence",
|
|
"permission": "server.game-client.read",
|
|
"requiredHandlers": [
|
|
"player.lookup"
|
|
],
|
|
"requiredEventProducers": [
|
|
"semantic.events"
|
|
]
|
|
},
|
|
{
|
|
"key": "reward.delivery",
|
|
"title": "SCUM reward delivery",
|
|
"permission": "server.game-client.command",
|
|
"requiredHandlers": [
|
|
"reward.deliver",
|
|
"player.notify"
|
|
]
|
|
},
|
|
{
|
|
"key": "state.patch",
|
|
"title": "SCUM player state patch",
|
|
"permission": "server.game-client.maintenance",
|
|
"requiredHandlers": [
|
|
"game-state.patch"
|
|
]
|
|
},
|
|
{
|
|
"key": "vehicle.spawn",
|
|
"title": "SCUM catalogued vehicle spawn",
|
|
"permission": "server.game-client.command",
|
|
"requiredHandlers": [
|
|
"vehicle.spawn"
|
|
]
|
|
},
|
|
{
|
|
"key": "trajectory.collect",
|
|
"title": "SCUM trajectories",
|
|
"permission": "server.game-client.read",
|
|
"requiredEventProducers": [
|
|
"semantic.events"
|
|
]
|
|
}
|
|
],
|
|
"pages": [
|
|
{
|
|
"pageKey": "players",
|
|
"snapshotTypes": [
|
|
"players",
|
|
"online.sessions"
|
|
],
|
|
"queryTemplateKeys": [
|
|
"scum.player.profile",
|
|
"scum.positions",
|
|
"scum.activity"
|
|
],
|
|
"operationKeys": [
|
|
"player.fame.set",
|
|
"player.currency.normal.set",
|
|
"player.currency.gold.set",
|
|
"player.notify",
|
|
"player.attribute.855.set"
|
|
],
|
|
"featureKeys": [
|
|
"player.intelligence",
|
|
"state.patch"
|
|
]
|
|
},
|
|
{
|
|
"pageKey": "squads",
|
|
"snapshotTypes": [
|
|
"squads",
|
|
"flags"
|
|
],
|
|
"queryTemplateKeys": [
|
|
"scum.squads",
|
|
"scum.squad-members",
|
|
"scum.flags"
|
|
],
|
|
"featureKeys": [
|
|
"player.intelligence"
|
|
]
|
|
},
|
|
{
|
|
"pageKey": "live-map",
|
|
"snapshotTypes": [
|
|
"players",
|
|
"vehicles",
|
|
"flags"
|
|
],
|
|
"queryTemplateKeys": [
|
|
"scum.positions",
|
|
"scum.vehicles",
|
|
"scum.flags"
|
|
],
|
|
"featureKeys": [
|
|
"trajectory.collect"
|
|
]
|
|
},
|
|
{
|
|
"pageKey": "gifts",
|
|
"snapshotTypes": [
|
|
"players"
|
|
],
|
|
"queryTemplateKeys": [
|
|
"scum.gifts"
|
|
],
|
|
"operationKeys": [
|
|
"reward.deliver",
|
|
"player.notify"
|
|
],
|
|
"featureKeys": [
|
|
"reward.delivery"
|
|
]
|
|
},
|
|
{
|
|
"pageKey": "workflows",
|
|
"queryTemplateKeys": [
|
|
"scum.player.profile",
|
|
"scum.squads",
|
|
"scum.squad-members",
|
|
"scum.vehicles",
|
|
"scum.flags",
|
|
"scum.positions",
|
|
"scum.activity",
|
|
"scum.gifts"
|
|
],
|
|
"operationKeys": [
|
|
"player.fame.set",
|
|
"player.currency.normal.set",
|
|
"player.currency.gold.set",
|
|
"player.notify",
|
|
"reward.deliver",
|
|
"player.attribute.855.set"
|
|
],
|
|
"featureKeys": [
|
|
"player.intelligence",
|
|
"reward.delivery",
|
|
"state.patch",
|
|
"vehicle.spawn",
|
|
"trajectory.collect"
|
|
]
|
|
}
|
|
],
|
|
"companion": {
|
|
"profileKey": "scum-client-manager",
|
|
"configTemplateKey": "client-config",
|
|
"configSchemaRef": "schemas/companion/config.schema.json",
|
|
"configFormat": "yaml",
|
|
"platformBaseUrlSource": "run-control",
|
|
"registrationProof": "hmac-sha256",
|
|
"proofMaterialSource": "component-package",
|
|
"proofMaterialEnv": "SCUM_COMPONENT_PROOF",
|
|
"sessionMode": "component-session",
|
|
"tlsPolicy": "verify-system-roots",
|
|
"heartbeatIntervalSeconds": 30,
|
|
"commandPollIntervalSeconds": 5,
|
|
"requestTimeoutSeconds": 15
|
|
}
|
|
},
|
|
"permissions": [
|
|
"server.create",
|
|
"server.read",
|
|
"server.lifecycle",
|
|
"server.files.read",
|
|
"server.files.write",
|
|
"server.logs.read",
|
|
"server.artifacts.read",
|
|
"server.artifacts.write",
|
|
"server.remote.access",
|
|
"ai.invoke",
|
|
"server.run.distribution",
|
|
"server.dependencies.manage",
|
|
"server.client-manager.manage",
|
|
"server.game-client.read",
|
|
"server.game-client.command",
|
|
"server.game-client.maintenance"
|
|
],
|
|
"actions": {
|
|
"install": "actions/install.json",
|
|
"start": "actions/start.json",
|
|
"stop": "actions/stop.json",
|
|
"restart": "actions/restart.json",
|
|
"status": "actions/status.json"
|
|
},
|
|
"assetFiles": [
|
|
{
|
|
"path": "actions/install.json",
|
|
"mode": 384
|
|
},
|
|
{
|
|
"path": "actions/start.json",
|
|
"mode": 384
|
|
},
|
|
{
|
|
"path": "actions/stop.json",
|
|
"mode": 384
|
|
},
|
|
{
|
|
"path": "actions/restart.json",
|
|
"mode": 384
|
|
},
|
|
{
|
|
"path": "actions/status.json",
|
|
"mode": 384
|
|
},
|
|
{
|
|
"path": "bin/scum-install-update.cmd",
|
|
"mode": 448
|
|
},
|
|
{
|
|
"path": "bin/scum-start.cmd",
|
|
"mode": 448
|
|
},
|
|
{
|
|
"path": "sql/scum-db-v57/users.sql",
|
|
"mode": 384
|
|
},
|
|
{
|
|
"path": "sql/scum-db-v57/squads.sql",
|
|
"mode": 384
|
|
},
|
|
{
|
|
"path": "sql/scum-db-v57/squad-members.sql",
|
|
"mode": 384
|
|
},
|
|
{
|
|
"path": "sql/scum-db-v57/vehicles.sql",
|
|
"mode": 384
|
|
},
|
|
{
|
|
"path": "sql/scum-db-v57/flags.sql",
|
|
"mode": 384
|
|
},
|
|
{
|
|
"path": "sql/scum-db-v57/activity.sql",
|
|
"mode": 384
|
|
},
|
|
{
|
|
"path": "sql/scum-db-v57/gifts.sql",
|
|
"mode": 384
|
|
},
|
|
{
|
|
"path": "sql/scum-db-v57/map-points.sql",
|
|
"mode": 384
|
|
},
|
|
{
|
|
"path": "data-packs/scum-db-v57/log-parsers.json",
|
|
"mode": 384
|
|
},
|
|
{
|
|
"path": "data-packs/scum-db-v57/config-maps.json",
|
|
"mode": 384
|
|
}
|
|
],
|
|
"productionLifecycle": {
|
|
"operations": [
|
|
"install",
|
|
"enable",
|
|
"disable",
|
|
"upgrade",
|
|
"rollback",
|
|
"retire",
|
|
"dependency-check"
|
|
],
|
|
"dependencyPolicy": "required",
|
|
"approvalRequired": [
|
|
"disable",
|
|
"rollback",
|
|
"retire"
|
|
]
|
|
},
|
|
"pages": [
|
|
{
|
|
"key": "players",
|
|
"title": "用户管理",
|
|
"path": "/players",
|
|
"bundleKey": "scum-server-plugin",
|
|
"bundleVersion": "1.0.3",
|
|
"bundleIntegritySha256": "sha256:3488b316d909e597024f8f31c7bc96ab8019f643d74a528dc442d3df0dc3d54e",
|
|
"permissions": [
|
|
"server.read",
|
|
"server.game-client.read",
|
|
"server.game-client.command",
|
|
"server.game-client.maintenance"
|
|
],
|
|
"bridgeActions": [
|
|
"server.instances.read",
|
|
"remote.access.request"
|
|
],
|
|
"featureKeys": [
|
|
"player.intelligence",
|
|
"state.patch"
|
|
]
|
|
},
|
|
{
|
|
"key": "squads",
|
|
"title": "队伍管理",
|
|
"path": "/squads",
|
|
"bundleKey": "scum-server-plugin",
|
|
"bundleVersion": "1.0.3",
|
|
"bundleIntegritySha256": "sha256:3488b316d909e597024f8f31c7bc96ab8019f643d74a528dc442d3df0dc3d54e",
|
|
"permissions": [
|
|
"server.read",
|
|
"server.game-client.read"
|
|
],
|
|
"bridgeActions": [
|
|
"server.instances.read",
|
|
"remote.access.request"
|
|
],
|
|
"featureKeys": [
|
|
"player.intelligence"
|
|
]
|
|
},
|
|
{
|
|
"key": "live-map",
|
|
"title": "实时地图",
|
|
"path": "/live-map",
|
|
"bundleKey": "scum-server-plugin",
|
|
"bundleVersion": "1.0.3",
|
|
"bundleIntegritySha256": "sha256:3488b316d909e597024f8f31c7bc96ab8019f643d74a528dc442d3df0dc3d54e",
|
|
"permissions": [
|
|
"server.read",
|
|
"server.game-client.read"
|
|
],
|
|
"bridgeActions": [
|
|
"server.instances.read",
|
|
"remote.access.request"
|
|
],
|
|
"featureKeys": [
|
|
"trajectory.collect"
|
|
]
|
|
},
|
|
{
|
|
"key": "gifts",
|
|
"title": "礼包管理",
|
|
"path": "/gifts",
|
|
"bundleKey": "scum-server-plugin",
|
|
"bundleVersion": "1.0.3",
|
|
"bundleIntegritySha256": "sha256:3488b316d909e597024f8f31c7bc96ab8019f643d74a528dc442d3df0dc3d54e",
|
|
"permissions": [
|
|
"server.read",
|
|
"server.game-client.read",
|
|
"server.game-client.command"
|
|
],
|
|
"bridgeActions": [
|
|
"server.instances.read",
|
|
"remote.access.request"
|
|
],
|
|
"featureKeys": [
|
|
"reward.delivery"
|
|
]
|
|
},
|
|
{
|
|
"key": "workflows",
|
|
"title": "Workflow 状态",
|
|
"path": "/workflows",
|
|
"bundleKey": "scum-server-plugin",
|
|
"bundleVersion": "1.0.3",
|
|
"bundleIntegritySha256": "sha256:3488b316d909e597024f8f31c7bc96ab8019f643d74a528dc442d3df0dc3d54e",
|
|
"permissions": [
|
|
"server.read",
|
|
"server.game-client.read",
|
|
"server.game-client.command",
|
|
"server.game-client.maintenance"
|
|
],
|
|
"bridgeActions": [
|
|
"server.instances.read",
|
|
"remote.access.request"
|
|
],
|
|
"featureKeys": [
|
|
"player.intelligence",
|
|
"reward.delivery",
|
|
"state.patch",
|
|
"vehicle.spawn",
|
|
"trajectory.collect"
|
|
]
|
|
}
|
|
],
|
|
"ai": {
|
|
"purposes": [
|
|
"config.suggest"
|
|
],
|
|
"mediation": "platform",
|
|
"configWritePolicy": "review-required"
|
|
},
|
|
"mapTrajectories": {
|
|
"mapId": "scum-island",
|
|
"mapVersion": "0.9",
|
|
"worldMinX": -500000,
|
|
"worldMinY": -500000,
|
|
"worldMaxX": 500000,
|
|
"worldMaxY": 500000,
|
|
"imageWidth": 2048,
|
|
"imageHeight": 2048,
|
|
"precision": 1,
|
|
"sampleDistance": 4,
|
|
"sampleIntervalSeconds": 20,
|
|
"retentionSeconds": 604800
|
|
},
|
|
"runtimeProfiles": {
|
|
"discovery": [
|
|
{
|
|
"key": "steamcmd",
|
|
"kind": "command.version",
|
|
"targetKey": "steamcmd",
|
|
"required": true
|
|
},
|
|
{
|
|
"key": "scum-install",
|
|
"kind": "file.exists",
|
|
"targetKey": "server/install-root",
|
|
"required": true,
|
|
"platforms": [
|
|
"windows"
|
|
]
|
|
}
|
|
],
|
|
"lifecycleProfiles": [
|
|
{
|
|
"key": "run-local",
|
|
"mode": "local-process",
|
|
"capabilities": [
|
|
"process.install",
|
|
"process.start",
|
|
"process.stop",
|
|
"process.restart",
|
|
"process.status",
|
|
"remote.run.process.start",
|
|
"remote.run.process.stop"
|
|
],
|
|
"actionRefs": {
|
|
"install": "actions/install.json",
|
|
"start": "actions/start.json",
|
|
"stop": "actions/stop.json",
|
|
"restart": "actions/restart.json",
|
|
"status": "actions/status.json"
|
|
},
|
|
"transportKeys": [
|
|
"server-files"
|
|
],
|
|
"platforms": [
|
|
"windows"
|
|
]
|
|
},
|
|
{
|
|
"key": "scum-client",
|
|
"mode": "custom-client",
|
|
"capabilities": [
|
|
"client-manager.deploy",
|
|
"client-manager.control",
|
|
"logs.read"
|
|
],
|
|
"clientManagerRef": "scum-client-manager",
|
|
"platforms": [
|
|
"windows"
|
|
]
|
|
}
|
|
],
|
|
"dependencyProbes": [
|
|
{
|
|
"key": "steamcmd",
|
|
"kind": "command.version",
|
|
"targetKey": "steamcmd",
|
|
"required": true,
|
|
"platforms": [
|
|
"windows",
|
|
"linux"
|
|
]
|
|
},
|
|
{
|
|
"key": "sqlite",
|
|
"kind": "package.installed",
|
|
"targetKey": "sqlite-driver",
|
|
"required": false,
|
|
"platforms": [
|
|
"windows",
|
|
"linux"
|
|
]
|
|
}
|
|
],
|
|
"installPlans": [
|
|
{
|
|
"key": "install-scum-server",
|
|
"title": "Install SCUM Dedicated Server",
|
|
"platforms": [
|
|
"windows"
|
|
],
|
|
"steps": [
|
|
{
|
|
"type": "steamcmd-app",
|
|
"targetKey": "server/install-root",
|
|
"packageManager": "steamcmd",
|
|
"packageName": "3792580"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"key": "install-steamcmd-linux",
|
|
"title": "Install SteamCMD",
|
|
"platforms": [
|
|
"linux"
|
|
],
|
|
"steps": [
|
|
{
|
|
"type": "package",
|
|
"targetKey": "steamcmd",
|
|
"packageManager": "apt",
|
|
"packageName": "steamcmd"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"logSources": [
|
|
{
|
|
"key": "scum-console-stdout",
|
|
"kind": "process.stdout",
|
|
"targetKey": "scum/server-process",
|
|
"streamKey": "scum.console.stdout",
|
|
"cursorKind": "sequence",
|
|
"retentionDays": 30
|
|
},
|
|
{
|
|
"key": "scum-console-stderr",
|
|
"kind": "process.stderr",
|
|
"targetKey": "scum/server-process",
|
|
"streamKey": "scum.console.stderr",
|
|
"cursorKind": "sequence",
|
|
"retentionDays": 30
|
|
},
|
|
{
|
|
"key": "scum-chat-events",
|
|
"kind": "file.tail",
|
|
"targetKey": "logs/chat",
|
|
"streamKey": "scum.chat",
|
|
"cursorKind": "fingerprint",
|
|
"retentionDays": 90
|
|
},
|
|
{
|
|
"key": "scum-server-events",
|
|
"kind": "file.tail",
|
|
"targetKey": "logs/server",
|
|
"streamKey": "scum.server",
|
|
"cursorKind": "fingerprint",
|
|
"retentionDays": 90
|
|
},
|
|
{
|
|
"key": "scum-login-events",
|
|
"kind": "file.tail",
|
|
"targetKey": "logs/login",
|
|
"streamKey": "scum.login",
|
|
"cursorKind": "fingerprint",
|
|
"retentionDays": 90
|
|
},
|
|
{
|
|
"key": "scum-kill-events",
|
|
"kind": "file.tail",
|
|
"targetKey": "logs/kill",
|
|
"streamKey": "scum.kill",
|
|
"cursorKind": "fingerprint",
|
|
"retentionDays": 90
|
|
},
|
|
{
|
|
"key": "scum-trade-events",
|
|
"kind": "file.tail",
|
|
"targetKey": "logs/trade",
|
|
"streamKey": "scum.trade",
|
|
"cursorKind": "fingerprint",
|
|
"retentionDays": 90
|
|
},
|
|
{
|
|
"key": "scum-admin-events",
|
|
"kind": "file.tail",
|
|
"targetKey": "logs/admin",
|
|
"streamKey": "scum.admin",
|
|
"cursorKind": "fingerprint",
|
|
"retentionDays": 90
|
|
},
|
|
{
|
|
"key": "scum-performance-events",
|
|
"kind": "file.tail",
|
|
"targetKey": "logs/performance",
|
|
"streamKey": "scum.performance",
|
|
"cursorKind": "fingerprint",
|
|
"retentionDays": 30
|
|
},
|
|
{
|
|
"key": "scum-client-events",
|
|
"kind": "client-manager",
|
|
"targetKey": "scum-client-manager",
|
|
"streamKey": "scum.client",
|
|
"cursorKind": "sequence",
|
|
"retentionDays": 30
|
|
}
|
|
],
|
|
"logEvents": [
|
|
{
|
|
"key": "scum-player-position",
|
|
"title": "SCUM player position",
|
|
"sourceKey": "scum-client-events",
|
|
"eventType": "player.position",
|
|
"permission": "server.logs.read",
|
|
"schemaRef": "schemas/log-events/player-position.event.schema.json",
|
|
"retentionDays": 7,
|
|
"severity": "info"
|
|
},
|
|
{
|
|
"key": "scum-vehicle-position",
|
|
"title": "SCUM vehicle position",
|
|
"sourceKey": "scum-client-events",
|
|
"eventType": "vehicle.position",
|
|
"permission": "server.logs.read",
|
|
"schemaRef": "schemas/log-events/vehicle-position.event.schema.json",
|
|
"retentionDays": 7,
|
|
"severity": "info"
|
|
},
|
|
{
|
|
"key": "scum-player-vehicle-enter",
|
|
"title": "SCUM player vehicle enter",
|
|
"sourceKey": "scum-client-events",
|
|
"eventType": "player.vehicle.enter",
|
|
"permission": "server.logs.read",
|
|
"schemaRef": "schemas/log-events/player-vehicle-enter.event.schema.json",
|
|
"retentionDays": 7,
|
|
"severity": "info"
|
|
},
|
|
{
|
|
"key": "scum-player-vehicle-leave",
|
|
"title": "SCUM player vehicle leave",
|
|
"sourceKey": "scum-client-events",
|
|
"eventType": "player.vehicle.leave",
|
|
"permission": "server.logs.read",
|
|
"schemaRef": "schemas/log-events/player-vehicle-leave.event.schema.json",
|
|
"retentionDays": 7,
|
|
"severity": "info"
|
|
},
|
|
{
|
|
"key": "scum-chat",
|
|
"title": "SCUM chat message",
|
|
"sourceKey": "scum-chat-events",
|
|
"eventType": "scum.chat",
|
|
"permission": "server.logs.read",
|
|
"schemaRef": "schemas/log-events/chat.event.schema.json",
|
|
"retentionDays": 90,
|
|
"severity": "info"
|
|
},
|
|
{
|
|
"key": "scum-login",
|
|
"title": "SCUM player login",
|
|
"sourceKey": "scum-login-events",
|
|
"eventType": "scum.login",
|
|
"permission": "server.logs.read",
|
|
"schemaRef": "schemas/log-events/login.event.schema.json",
|
|
"retentionDays": 90,
|
|
"severity": "info"
|
|
},
|
|
{
|
|
"key": "scum-logout",
|
|
"title": "SCUM player logout",
|
|
"sourceKey": "scum-login-events",
|
|
"eventType": "scum.logout",
|
|
"permission": "server.logs.read",
|
|
"schemaRef": "schemas/log-events/logout.event.schema.json",
|
|
"retentionDays": 90,
|
|
"severity": "info"
|
|
},
|
|
{
|
|
"key": "scum-kill",
|
|
"title": "SCUM player kill",
|
|
"sourceKey": "scum-kill-events",
|
|
"eventType": "scum.kill",
|
|
"permission": "server.logs.read",
|
|
"schemaRef": "schemas/log-events/kill.event.schema.json",
|
|
"retentionDays": 90,
|
|
"severity": "info"
|
|
},
|
|
{
|
|
"key": "scum-trade",
|
|
"title": "SCUM trade activity",
|
|
"sourceKey": "scum-trade-events",
|
|
"eventType": "scum.trade",
|
|
"permission": "server.logs.read",
|
|
"schemaRef": "schemas/log-events/trade.event.schema.json",
|
|
"retentionDays": 90,
|
|
"severity": "info"
|
|
},
|
|
{
|
|
"key": "scum-mine",
|
|
"title": "SCUM mine activity",
|
|
"sourceKey": "scum-server-events",
|
|
"eventType": "scum.mine",
|
|
"permission": "server.logs.read",
|
|
"schemaRef": "schemas/log-events/mine.event.schema.json",
|
|
"retentionDays": 90,
|
|
"severity": "warning"
|
|
},
|
|
{
|
|
"key": "scum-unlock",
|
|
"title": "SCUM unlock activity",
|
|
"sourceKey": "scum-server-events",
|
|
"eventType": "scum.unlock",
|
|
"permission": "server.logs.read",
|
|
"schemaRef": "schemas/log-events/unlock.event.schema.json",
|
|
"retentionDays": 90,
|
|
"severity": "warning"
|
|
},
|
|
{
|
|
"key": "scum-admin",
|
|
"title": "SCUM admin activity",
|
|
"sourceKey": "scum-admin-events",
|
|
"eventType": "scum.admin",
|
|
"permission": "server.logs.read",
|
|
"schemaRef": "schemas/log-events/admin.event.schema.json",
|
|
"retentionDays": 90,
|
|
"severity": "warning"
|
|
},
|
|
{
|
|
"key": "scum-performance",
|
|
"title": "SCUM server performance",
|
|
"sourceKey": "scum-performance-events",
|
|
"eventType": "scum.performance",
|
|
"permission": "server.logs.read",
|
|
"schemaRef": "schemas/log-events/performance.event.schema.json",
|
|
"retentionDays": 30,
|
|
"severity": "info"
|
|
}
|
|
],
|
|
"transportProfiles": [
|
|
{
|
|
"key": "server-files",
|
|
"kind": "file",
|
|
"targetKey": "server-root",
|
|
"capabilities": [
|
|
"remote.run.files.read",
|
|
"remote.run.files.write"
|
|
]
|
|
},
|
|
{
|
|
"key": "ftp",
|
|
"kind": "ftp",
|
|
"targetKey": "ftp-root",
|
|
"capabilities": [
|
|
"remote.ftp.read",
|
|
"remote.ftp.write"
|
|
]
|
|
},
|
|
{
|
|
"key": "rsync",
|
|
"kind": "rsync",
|
|
"targetKey": "rsync-root",
|
|
"capabilities": [
|
|
"remote.rsync.read",
|
|
"remote.rsync.write"
|
|
]
|
|
},
|
|
{
|
|
"key": "scum-database",
|
|
"kind": "sqlite",
|
|
"targetKey": "scum-database",
|
|
"capabilities": [
|
|
"remote.run.db.sqlite.query",
|
|
"remote.run.protected.sql"
|
|
]
|
|
},
|
|
{
|
|
"key": "scum-management",
|
|
"kind": "rcon",
|
|
"targetKey": "scum-management",
|
|
"capabilities": [
|
|
"remote.run.protected.rcon"
|
|
]
|
|
},
|
|
{
|
|
"key": "scum-program",
|
|
"kind": "program",
|
|
"targetKey": "scum-program",
|
|
"capabilities": [
|
|
"remote.run.program.command"
|
|
]
|
|
}
|
|
],
|
|
"clientManagers": [
|
|
{
|
|
"key": "scum-client-manager",
|
|
"displayName": "SCUM Client Manager",
|
|
"version": "1.0.0",
|
|
"repository": {
|
|
"url": "https://github.com/F88888/scum_client.git",
|
|
"revisionPolicy": "branch",
|
|
"branch": "main"
|
|
},
|
|
"supportedTargets": [
|
|
{
|
|
"os": "windows",
|
|
"arch": "amd64"
|
|
}
|
|
],
|
|
"build": {
|
|
"system": "go",
|
|
"entryRef": "main.go"
|
|
},
|
|
"configTemplates": [
|
|
{
|
|
"key": "client-config",
|
|
"templateRef": "config.yaml.example",
|
|
"outputRef": "config.yaml"
|
|
}
|
|
],
|
|
"outputArtifacts": [
|
|
"scum_client.exe"
|
|
],
|
|
"deployment": {
|
|
"mode": "run-supervised",
|
|
"executableRef": "scum_client.exe",
|
|
"autoStart": true,
|
|
"requiredRunCapabilities": [
|
|
"client-manager.deploy",
|
|
"client-manager.control",
|
|
"client-manager.update",
|
|
"client-manager.rollback",
|
|
"client-manager.uninstall"
|
|
]
|
|
},
|
|
"lifecycle": {
|
|
"actions": [
|
|
"start",
|
|
"stop",
|
|
"restart",
|
|
"status",
|
|
"update",
|
|
"rollback",
|
|
"uninstall"
|
|
],
|
|
"startupTimeoutSeconds": 60,
|
|
"stopTimeoutSeconds": 30
|
|
},
|
|
"health": {
|
|
"mode": "component-heartbeat",
|
|
"intervalSeconds": 30,
|
|
"degradedAfterSeconds": 90,
|
|
"offlineAfterSeconds": 120,
|
|
"requiredCapabilities": [
|
|
"component.register",
|
|
"component.heartbeat",
|
|
"component.health",
|
|
"component.control",
|
|
"game-client.bridge",
|
|
"logs.stream"
|
|
]
|
|
},
|
|
"updatePolicy": {
|
|
"strategy": "manual-staged",
|
|
"requireApproval": true,
|
|
"healthConfirmationSeconds": 60,
|
|
"retainPrevious": true
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|