功能修改

This commit is contained in:
npc0-hue
2026-07-20 16:42:33 +08:00
parent 48b8ad8d6c
commit a0e69417db
224 changed files with 22015 additions and 884 deletions
@@ -0,0 +1,14 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMAnnouncementPayload",
"type": "object",
"additionalProperties": false,
"required": ["message"],
"properties": {
"message": {
"type": "string",
"minLength": 1,
"maxLength": 500
}
}
}
@@ -0,0 +1,17 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMAnnouncementResult",
"type": "object",
"additionalProperties": false,
"required": ["accepted"],
"properties": {
"accepted": {
"type": "boolean"
},
"messageId": {
"type": "string",
"minLength": 1,
"maxLength": 120
}
}
}
@@ -0,0 +1,37 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMCompanionHealthSnapshot",
"type": "object",
"additionalProperties": false,
"required": ["status", "observedAt"],
"properties": {
"status": {
"type": "string",
"enum": ["online", "degraded", "offline"]
},
"version": {
"type": "string",
"minLength": 1,
"maxLength": 40
},
"observedAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
},
"latencyMs": {
"type": "integer",
"minimum": 0,
"maximum": 30000
},
"capabilities": {
"type": "array",
"maxItems": 16,
"items": {
"type": "string",
"pattern": "^[a-z][a-z0-9.-]{0,79}$"
},
"uniqueItems": true
}
}
}
@@ -0,0 +1,16 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMCompanionDiagnosticsPayload",
"type": "object",
"additionalProperties": false,
"properties": {
"includeWindowState": {
"type": "boolean"
},
"maxEntries": {
"type": "integer",
"minimum": 1,
"maximum": 20
}
}
}
@@ -0,0 +1,24 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMCompanionDiagnosticsResult",
"type": "object",
"additionalProperties": false,
"required": ["status"],
"properties": {
"status": {
"type": "string",
"maxLength": 16,
"enum": ["online", "degraded", "offline"]
},
"version": {
"type": "string",
"minLength": 1,
"maxLength": 40
},
"lastHeartbeatAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
}
}
}
@@ -0,0 +1,32 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMEventStartPayload",
"type": "object",
"additionalProperties": false,
"required": ["eventType"],
"properties": {
"eventType": {
"type": "string",
"maxLength": 24,
"enum": ["airdrop", "convoy", "horde", "zombie-surge"]
},
"durationSeconds": {
"type": "integer",
"minimum": 30,
"maximum": 86400
},
"maxParticipants": {
"type": "integer",
"minimum": 1,
"maximum": 1000
},
"announce": {
"type": "boolean"
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 80
}
}
}
@@ -0,0 +1,26 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMEventStartResult",
"type": "object",
"additionalProperties": false,
"required": ["accepted", "status"],
"properties": {
"accepted": {
"type": "boolean"
},
"status": {
"type": "string",
"maxLength": 16,
"enum": ["started", "queued", "rejected"]
},
"eventId": {
"type": "string",
"maxLength": 96,
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"message": {
"type": "string",
"maxLength": 200
}
}
}
@@ -0,0 +1,66 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMFlagsSnapshot",
"type": "object",
"additionalProperties": false,
"required": ["observedAt", "flags"],
"properties": {
"observedAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
},
"flags": {
"type": "array",
"maxItems": 512,
"items": {
"type": "object",
"additionalProperties": false,
"required": ["flagId", "status"],
"properties": {
"flagId": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"status": {
"type": "string",
"enum": ["active", "inactive", "contested", "unknown"]
},
"ownerPlayerId": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"squadId": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"radiusMeters": {
"type": "number",
"minimum": 0,
"maximum": 5000
},
"position": {
"type": "object",
"additionalProperties": false,
"required": ["x", "y", "z"],
"properties": {
"x": { "type": "number", "minimum": -100000, "maximum": 100000 },
"y": { "type": "number", "minimum": -100000, "maximum": 100000 },
"z": { "type": "number", "minimum": -100000, "maximum": 100000 }
}
},
"capturedAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
},
"lastUpdatedAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
}
}
}
}
}
}
@@ -0,0 +1,29 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMMaintenancePreparePayload",
"type": "object",
"additionalProperties": false,
"required": ["scope", "noticeSeconds", "reason"],
"properties": {
"scope": {
"type": "string",
"maxLength": 16,
"enum": ["server", "database", "companion"]
},
"noticeSeconds": {
"type": "integer",
"minimum": 60,
"maximum": 86400
},
"estimatedDurationSeconds": {
"type": "integer",
"minimum": 60,
"maximum": 86400
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
}
@@ -0,0 +1,26 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMMaintenancePrepareResult",
"type": "object",
"additionalProperties": false,
"required": ["accepted", "status"],
"properties": {
"accepted": {
"type": "boolean"
},
"status": {
"type": "string",
"maxLength": 16,
"enum": ["prepared", "queued", "rejected"]
},
"maintenanceId": {
"type": "string",
"maxLength": 96,
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"message": {
"type": "string",
"maxLength": 200
}
}
}
@@ -0,0 +1,45 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMOnlineSessionsSnapshot",
"type": "object",
"additionalProperties": false,
"required": ["observedAt", "onlineCount", "sessions"],
"properties": {
"observedAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
},
"onlineCount": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"sessions": {
"type": "array",
"maxItems": 200,
"items": {
"type": "object",
"additionalProperties": false,
"required": ["sessionId", "playerName"],
"properties": {
"sessionId": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"playerName": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"startedAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
}
}
}
}
}
}
@@ -0,0 +1,22 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMPlayerLookupPayload",
"type": "object",
"additionalProperties": false,
"required": ["query", "maxResults"],
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"includeOffline": {
"type": "boolean"
},
"maxResults": {
"type": "integer",
"minimum": 1,
"maximum": 50
}
}
}
@@ -0,0 +1,48 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMPlayerLookupResult",
"type": "object",
"additionalProperties": false,
"required": ["players"],
"properties": {
"players": {
"type": "array",
"maxItems": 50,
"items": {
"type": "object",
"additionalProperties": false,
"required": ["playerId", "playerName", "status"],
"properties": {
"playerId": {
"type": "string",
"maxLength": 96,
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"playerName": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"status": {
"type": "string",
"maxLength": 16,
"enum": ["online", "offline", "unknown"]
},
"squadId": {
"type": "string",
"maxLength": 96,
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"lastSeenAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
}
}
}
},
"truncated": {
"type": "boolean"
}
}
}
@@ -0,0 +1,73 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMPlayersSnapshot",
"type": "object",
"additionalProperties": false,
"required": ["observedAt", "players"],
"properties": {
"observedAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
},
"players": {
"type": "array",
"maxItems": 1000,
"items": {
"type": "object",
"additionalProperties": false,
"required": ["playerId", "playerName", "status"],
"properties": {
"playerId": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"playerName": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"status": {
"type": "string",
"enum": ["online", "offline", "unknown"]
},
"squadId": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"pingMs": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"lastSeenAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
},
"position": {
"type": "object",
"additionalProperties": false,
"required": ["x", "y", "z"],
"properties": {
"x": { "type": "number", "minimum": -100000, "maximum": 100000 },
"y": { "type": "number", "minimum": -100000, "maximum": 100000 },
"z": { "type": "number", "minimum": -100000, "maximum": 100000 }
}
},
"tags": {
"type": "array",
"maxItems": 16,
"uniqueItems": true,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"pattern": "^[A-Za-z0-9_.:-]+$"
}
}
}
}
}
}
}
@@ -0,0 +1,10 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMFlagOwnershipParameters",
"type": "object",
"additionalProperties": false,
"required": ["flagId"],
"properties": {
"flagId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" }
}
}
@@ -0,0 +1,27 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMFlagOwnershipResult",
"type": "object",
"additionalProperties": false,
"required": ["ownership"],
"properties": {
"ownership": {
"type": "array",
"maxItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"required": ["flagId", "status"],
"properties": {
"flagId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" },
"ownerPlayerId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" },
"ownerPlayerName": { "type": "string", "minLength": 1, "maxLength": 80 },
"squadId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" },
"squadName": { "type": "string", "minLength": 1, "maxLength": 80 },
"status": { "type": "string", "minLength": 1, "maxLength": 16, "enum": ["active", "inactive", "contested", "unknown"] },
"lastUpdatedAt": { "type": "string", "minLength": 1, "maxLength": 64, "format": "date-time" }
}
}
}
}
}
@@ -0,0 +1,15 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMPlayerByIdParameters",
"type": "object",
"additionalProperties": false,
"required": ["playerId"],
"properties": {
"playerId": {
"type": "string",
"minLength": 1,
"maxLength": 96,
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
}
}
}
@@ -0,0 +1,26 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMPlayerByIdResult",
"type": "object",
"additionalProperties": false,
"required": ["players"],
"properties": {
"players": {
"type": "array",
"maxItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"required": ["playerId", "playerName"],
"properties": {
"playerId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" },
"playerName": { "type": "string", "minLength": 1, "maxLength": 80 },
"platformUserId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" },
"squadId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" },
"famePoints": { "type": "integer", "minimum": 0, "maximum": 2147483647 },
"lastSeenAt": { "type": "string", "minLength": 1, "maxLength": 64, "format": "date-time" }
}
}
}
}
}
@@ -0,0 +1,11 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMPlayerSearchParameters",
"type": "object",
"additionalProperties": false,
"required": ["nameContains", "limit"],
"properties": {
"nameContains": { "type": "string", "minLength": 1, "maxLength": 80 },
"limit": { "type": "integer", "minimum": 1, "maximum": 50 }
}
}
@@ -0,0 +1,27 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMPlayerSearchResult",
"type": "object",
"additionalProperties": false,
"required": ["players"],
"properties": {
"players": {
"type": "array",
"maxItems": 50,
"items": {
"type": "object",
"additionalProperties": false,
"required": ["playerId", "playerName", "online"],
"properties": {
"playerId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" },
"playerName": { "type": "string", "minLength": 1, "maxLength": 80 },
"platformUserId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" },
"squadId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" },
"online": { "type": "boolean" },
"lastSeenAt": { "type": "string", "minLength": 1, "maxLength": 64, "format": "date-time" }
}
}
},
"truncated": { "type": "boolean" }
}
}
@@ -0,0 +1,11 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMSquadMembersParameters",
"type": "object",
"additionalProperties": false,
"required": ["squadId", "limit"],
"properties": {
"squadId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" },
"limit": { "type": "integer", "minimum": 1, "maximum": 64 }
}
}
@@ -0,0 +1,26 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMSquadMembersResult",
"type": "object",
"additionalProperties": false,
"required": ["members"],
"properties": {
"members": {
"type": "array",
"maxItems": 64,
"items": {
"type": "object",
"additionalProperties": false,
"required": ["squadId", "playerId", "playerName", "role"],
"properties": {
"squadId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" },
"playerId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" },
"playerName": { "type": "string", "minLength": 1, "maxLength": 80 },
"role": { "type": "string", "minLength": 1, "maxLength": 16, "enum": ["leader", "member", "unknown"] },
"joinedAt": { "type": "string", "minLength": 1, "maxLength": 64, "format": "date-time" }
}
}
},
"truncated": { "type": "boolean" }
}
}
@@ -0,0 +1,10 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMVehicleOwnerParameters",
"type": "object",
"additionalProperties": false,
"required": ["vehicleId"],
"properties": {
"vehicleId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" }
}
}
@@ -0,0 +1,26 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMVehicleOwnerResult",
"type": "object",
"additionalProperties": false,
"required": ["ownership"],
"properties": {
"ownership": {
"type": "array",
"maxItems": 1,
"items": {
"type": "object",
"additionalProperties": false,
"required": ["vehicleId", "vehicleType", "status"],
"properties": {
"vehicleId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" },
"vehicleType": { "type": "string", "minLength": 1, "maxLength": 80 },
"ownerPlayerId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" },
"ownerPlayerName": { "type": "string", "minLength": 1, "maxLength": 80 },
"squadId": { "type": "string", "minLength": 1, "maxLength": 96, "pattern": "^[A-Za-z0-9_.:-]{1,96}$" },
"status": { "type": "string", "minLength": 1, "maxLength": 16, "enum": ["owned", "unowned", "unknown"] }
}
}
}
}
}
@@ -0,0 +1,24 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMRestartPreparePayload",
"type": "object",
"additionalProperties": false,
"required": ["warningSeconds", "reason"],
"properties": {
"warningSeconds": {
"type": "integer",
"minimum": 30,
"maximum": 3600
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"scheduleAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
}
}
}
@@ -0,0 +1,26 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMRestartPrepareResult",
"type": "object",
"additionalProperties": false,
"required": ["accepted", "status"],
"properties": {
"accepted": {
"type": "boolean"
},
"status": {
"type": "string",
"maxLength": 16,
"enum": ["prepared", "queued", "rejected"]
},
"restartId": {
"type": "string",
"maxLength": 96,
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"message": {
"type": "string",
"maxLength": 200
}
}
}
@@ -0,0 +1,29 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMRewardDeliverPayload",
"type": "object",
"additionalProperties": false,
"required": ["playerId", "itemId", "quantity"],
"properties": {
"playerId": {
"type": "string",
"maxLength": 96,
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"itemId": {
"type": "string",
"maxLength": 96,
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
}
@@ -0,0 +1,26 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMRewardDeliverResult",
"type": "object",
"additionalProperties": false,
"required": ["accepted", "status"],
"properties": {
"accepted": {
"type": "boolean"
},
"status": {
"type": "string",
"maxLength": 16,
"enum": ["queued", "delivered", "rejected"]
},
"deliveryId": {
"type": "string",
"maxLength": 96,
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"message": {
"type": "string",
"maxLength": 200
}
}
}
@@ -0,0 +1,62 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMSquadsSnapshot",
"type": "object",
"additionalProperties": false,
"required": ["observedAt", "squads"],
"properties": {
"observedAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
},
"squads": {
"type": "array",
"maxItems": 256,
"items": {
"type": "object",
"additionalProperties": false,
"required": ["squadId", "name", "memberCount"],
"properties": {
"squadId": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"memberCount": {
"type": "integer",
"minimum": 0,
"maximum": 64
},
"leaderPlayerId": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"memberPlayerIds": {
"type": "array",
"maxItems": 64,
"uniqueItems": true,
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
}
},
"createdAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
},
"lastActiveAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
}
}
}
}
}
}
@@ -0,0 +1,71 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMVehiclesSnapshot",
"type": "object",
"additionalProperties": false,
"required": ["observedAt", "vehicles"],
"properties": {
"observedAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
},
"vehicles": {
"type": "array",
"maxItems": 2000,
"items": {
"type": "object",
"additionalProperties": false,
"required": ["vehicleId", "vehicleType", "status"],
"properties": {
"vehicleId": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"vehicleType": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"status": {
"type": "string",
"enum": ["parked", "in_use", "damaged", "destroyed", "unknown"]
},
"ownerPlayerId": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"squadId": {
"type": "string",
"pattern": "^[A-Za-z0-9_.:-]{1,96}$"
},
"fuelPercent": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"healthPercent": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"position": {
"type": "object",
"additionalProperties": false,
"required": ["x", "y", "z"],
"properties": {
"x": { "type": "number", "minimum": -100000, "maximum": 100000 },
"y": { "type": "number", "minimum": -100000, "maximum": 100000 },
"z": { "type": "number", "minimum": -100000, "maximum": 100000 }
}
},
"lastSeenAt": {
"type": "string",
"maxLength": 64,
"format": "date-time"
}
}
}
}
}
}
@@ -0,0 +1,42 @@
{
"schemaVersion": 1,
"platform": {
"baseUrl": "https://platform.example.test"
},
"component": {
"installationId": "client-manager-installation-example",
"serverInstanceId": "server-example",
"pluginId": "game.scum",
"profileKey": "scum-client-manager",
"artifactId": "artifact-example",
"version": "1.0.0",
"sourceRevision": "example-revision",
"targetOs": "windows",
"targetArch": "amd64",
"keyGeneration": 1,
"deploymentGeneration": 1
},
"proof": {
"mode": "hmac-sha256",
"materialEnv": "SCUM_COMPONENT_PROOF"
},
"session": {
"mode": "component-session"
},
"capabilities": [
"component.register",
"component.heartbeat",
"component.health",
"component.control",
"game-client.bridge",
"logs.stream"
],
"timing": {
"heartbeatIntervalSeconds": 30,
"commandPollIntervalSeconds": 5,
"requestTimeoutSeconds": 15
},
"tls": {
"policy": "verify-system-roots"
}
}
@@ -0,0 +1,97 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SCUMPlatformCompanionConfig",
"type": "object",
"additionalProperties": false,
"required": ["schemaVersion", "platform", "component", "proof", "session", "capabilities", "timing", "tls"],
"properties": {
"schemaVersion": { "const": 1 },
"platform": {
"type": "object",
"additionalProperties": false,
"required": ["baseUrl"],
"properties": {
"baseUrl": {
"type": "string",
"format": "uri",
"pattern": "^https://(?:[A-Za-z0-9](?:[A-Za-z0-9.-]{0,251}[A-Za-z0-9])?|\\[[0-9A-Fa-f:.]+\\])(?::[1-9][0-9]{0,4})?/?$",
"maxLength": 228
}
}
},
"component": {
"type": "object",
"additionalProperties": false,
"required": ["installationId", "serverInstanceId", "pluginId", "profileKey", "artifactId", "version", "sourceRevision", "targetOs", "targetArch", "keyGeneration", "deploymentGeneration"],
"properties": {
"installationId": { "$ref": "#/$defs/identifier" },
"serverInstanceId": { "$ref": "#/$defs/identifier" },
"pluginId": { "const": "game.scum" },
"profileKey": { "const": "scum-client-manager" },
"artifactId": { "$ref": "#/$defs/identifier" },
"version": { "type": "string", "minLength": 1, "maxLength": 40 },
"sourceRevision": { "type": "string", "minLength": 1, "maxLength": 120 },
"targetOs": { "const": "windows" },
"targetArch": { "const": "amd64" },
"keyGeneration": { "type": "integer", "minimum": 1, "maximum": 2147483647 },
"deploymentGeneration": { "type": "integer", "minimum": 1, "maximum": 2147483647 }
}
},
"proof": {
"type": "object",
"additionalProperties": false,
"required": ["mode", "materialEnv"],
"properties": {
"mode": { "const": "hmac-sha256" },
"materialEnv": { "const": "SCUM_COMPONENT_PROOF" }
}
},
"session": {
"type": "object",
"additionalProperties": false,
"required": ["mode"],
"properties": {
"mode": { "const": "component-session" }
}
},
"capabilities": {
"type": "array",
"minItems": 6,
"maxItems": 6,
"uniqueItems": true,
"items": { "enum": ["component.register", "component.heartbeat", "component.health", "component.control", "game-client.bridge", "logs.stream"] },
"allOf": [
{ "contains": { "const": "component.register" } },
{ "contains": { "const": "component.heartbeat" } },
{ "contains": { "const": "component.health" } },
{ "contains": { "const": "component.control" } },
{ "contains": { "const": "game-client.bridge" } },
{ "contains": { "const": "logs.stream" } }
]
},
"timing": {
"type": "object",
"additionalProperties": false,
"required": ["heartbeatIntervalSeconds", "commandPollIntervalSeconds", "requestTimeoutSeconds"],
"properties": {
"heartbeatIntervalSeconds": { "const": 30 },
"commandPollIntervalSeconds": { "type": "integer", "minimum": 1, "maximum": 60 },
"requestTimeoutSeconds": { "type": "integer", "minimum": 1, "maximum": 60 }
}
},
"tls": {
"type": "object",
"additionalProperties": false,
"required": ["policy"],
"properties": {
"policy": { "const": "verify-system-roots" }
}
}
},
"$defs": {
"identifier": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,179}$"
}
}
}
@@ -0,0 +1,14 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"required": ["occurredAt", "adminActorId", "actionCategory", "approved"],
"properties": {
"occurredAt": { "type": "string", "format": "date-time", "minLength": 1, "maxLength": 40 },
"adminActorId": { "type": "string", "minLength": 1, "maxLength": 96 },
"actionCategory": { "type": "string", "enum": ["announcement", "teleport", "spawn", "kick", "ban", "unban", "restart", "config-review", "other"] },
"targetPlayerId": { "type": "string", "minLength": 1, "maxLength": 96 },
"reason": { "type": "string", "minLength": 1, "maxLength": 256 },
"approved": { "type": "boolean" }
}
}
@@ -0,0 +1,13 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"required": ["occurredAt", "playerId", "playerName", "channel", "message"],
"properties": {
"occurredAt": { "type": "string", "format": "date-time", "minLength": 1, "maxLength": 40 },
"playerId": { "type": "string", "minLength": 1, "maxLength": 96 },
"playerName": { "type": "string", "minLength": 1, "maxLength": 80 },
"channel": { "type": "string", "enum": ["local", "global", "squad", "admin", "unknown"] },
"message": { "type": "string", "minLength": 1, "maxLength": 512 }
}
}
@@ -0,0 +1,16 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"required": ["occurredAt", "victimPlayerId", "victimName", "weaponClass", "distanceMeters"],
"properties": {
"occurredAt": { "type": "string", "format": "date-time", "minLength": 1, "maxLength": 40 },
"killerPlayerId": { "type": "string", "minLength": 1, "maxLength": 96 },
"killerName": { "type": "string", "minLength": 1, "maxLength": 80 },
"victimPlayerId": { "type": "string", "minLength": 1, "maxLength": 96 },
"victimName": { "type": "string", "minLength": 1, "maxLength": 80 },
"weaponClass": { "type": "string", "minLength": 1, "maxLength": 80 },
"distanceMeters": { "type": "number", "minimum": 0, "maximum": 5000 },
"suicide": { "type": "boolean" }
}
}
@@ -0,0 +1,14 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"required": ["occurredAt", "playerId", "playerName", "sessionId", "outcome"],
"properties": {
"occurredAt": { "type": "string", "format": "date-time", "minLength": 1, "maxLength": 40 },
"playerId": { "type": "string", "minLength": 1, "maxLength": 96 },
"playerName": { "type": "string", "minLength": 1, "maxLength": 80 },
"sessionId": { "type": "string", "minLength": 1, "maxLength": 96 },
"outcome": { "type": "string", "enum": ["accepted", "rejected"] },
"networkFingerprint": { "type": "string", "minLength": 1, "maxLength": 128 }
}
}
@@ -0,0 +1,13 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"required": ["occurredAt", "playerId", "playerName", "sessionId", "reason"],
"properties": {
"occurredAt": { "type": "string", "format": "date-time", "minLength": 1, "maxLength": 40 },
"playerId": { "type": "string", "minLength": 1, "maxLength": 96 },
"playerName": { "type": "string", "minLength": 1, "maxLength": 80 },
"sessionId": { "type": "string", "minLength": 1, "maxLength": 96 },
"reason": { "type": "string", "enum": ["disconnect", "timeout", "kicked", "server-stop", "unknown"] }
}
}
@@ -0,0 +1,14 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"required": ["occurredAt", "playerId", "action", "mineClass", "zone", "suspicious"],
"properties": {
"occurredAt": { "type": "string", "format": "date-time", "minLength": 1, "maxLength": 40 },
"playerId": { "type": "string", "minLength": 1, "maxLength": 96 },
"action": { "type": "string", "enum": ["placed", "triggered", "detonated", "disarmed", "removed"] },
"mineClass": { "type": "string", "minLength": 1, "maxLength": 80 },
"zone": { "type": "string", "minLength": 1, "maxLength": 32 },
"suspicious": { "type": "boolean" }
}
}
@@ -0,0 +1,13 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"required": ["occurredAt", "serverFps", "frameTimeMs", "onlinePlayers", "entityCount"],
"properties": {
"occurredAt": { "type": "string", "format": "date-time", "minLength": 1, "maxLength": 40 },
"serverFps": { "type": "number", "minimum": 0, "maximum": 1000 },
"frameTimeMs": { "type": "number", "minimum": 0, "maximum": 1000 },
"onlinePlayers": { "type": "integer", "minimum": 0, "maximum": 1000 },
"entityCount": { "type": "integer", "minimum": 0, "maximum": 10000000 }
}
}
@@ -0,0 +1,15 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"required": ["occurredAt", "playerId", "tradeKind", "itemCount", "currencyDelta", "suspicious"],
"properties": {
"occurredAt": { "type": "string", "format": "date-time", "minLength": 1, "maxLength": 40 },
"playerId": { "type": "string", "minLength": 1, "maxLength": 96 },
"counterpartyPlayerId": { "type": "string", "minLength": 1, "maxLength": 96 },
"tradeKind": { "type": "string", "enum": ["purchase", "sale", "transfer", "unknown"] },
"itemCount": { "type": "integer", "minimum": 0, "maximum": 1000 },
"currencyDelta": { "type": "integer", "minimum": -1000000000, "maximum": 1000000000 },
"suspicious": { "type": "boolean" }
}
}
@@ -0,0 +1,14 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"additionalProperties": false,
"required": ["occurredAt", "playerId", "targetKind", "targetId", "outcome", "suspicious"],
"properties": {
"occurredAt": { "type": "string", "format": "date-time", "minLength": 1, "maxLength": 40 },
"playerId": { "type": "string", "minLength": 1, "maxLength": 96 },
"targetKind": { "type": "string", "enum": ["door", "container", "vehicle", "base", "unknown"] },
"targetId": { "type": "string", "minLength": 1, "maxLength": 128 },
"outcome": { "type": "string", "enum": ["success", "failed", "cancelled"] },
"suspicious": { "type": "boolean" }
}
}