feat(scum): rebuild plugin-owned management data

This commit is contained in:
npc0-hue
2026-08-15 12:43:09 +08:00
parent 92b1159cc8
commit 65353cf269
113 changed files with 3116 additions and 8058 deletions
+189 -47
View File
@@ -3,7 +3,7 @@
"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",
"version": "0.1.7",
"kind": "game-plugin",
"tags": [
"scum",
@@ -127,7 +127,7 @@
"type": "announcement.send",
"title": "Send SCUM announcement",
"permission": "server.game-client.command",
"approvalLevel": "operator",
"approvalLevel": "none",
"payloadSchemaRef": "schemas/bridge/announcement.payload.schema.json",
"resultSchemaRef": "schemas/bridge/announcement.result.schema.json",
"timeoutSeconds": 60,
@@ -157,7 +157,7 @@
"type": "reward.deliver",
"title": "Deliver SCUM reward",
"permission": "server.game-client.command",
"approvalLevel": "operator",
"approvalLevel": "none",
"payloadSchemaRef": "schemas/bridge/reward-deliver.payload.schema.json",
"resultSchemaRef": "schemas/bridge/reward-deliver.result.schema.json",
"timeoutSeconds": 60,
@@ -167,7 +167,7 @@
"type": "player.notify",
"title": "Notify SCUM player about approved gift",
"permission": "server.game-client.command",
"approvalLevel": "operator",
"approvalLevel": "none",
"payloadSchemaRef": "schemas/bridge/player-notify.payload.schema.json",
"resultSchemaRef": "schemas/bridge/player-notify.result.schema.json",
"timeoutSeconds": 60,
@@ -177,7 +177,7 @@
"type": "vehicle.spawn",
"title": "Spawn catalogued SCUM vehicle",
"permission": "server.game-client.command",
"approvalLevel": "operator",
"approvalLevel": "none",
"payloadSchemaRef": "schemas/bridge/vehicle-spawn.payload.schema.json",
"resultSchemaRef": "schemas/bridge/vehicle-spawn.result.schema.json",
"timeoutSeconds": 60,
@@ -187,7 +187,7 @@
"type": "event.start",
"title": "Start SCUM event",
"permission": "server.game-client.command",
"approvalLevel": "operator",
"approvalLevel": "none",
"payloadSchemaRef": "schemas/bridge/event-start.payload.schema.json",
"resultSchemaRef": "schemas/bridge/event-start.result.schema.json",
"timeoutSeconds": 60,
@@ -197,7 +197,7 @@
"type": "restart.prepare",
"title": "Prepare SCUM restart",
"permission": "server.game-client.maintenance",
"approvalLevel": "operator",
"approvalLevel": "none",
"payloadSchemaRef": "schemas/bridge/restart-prepare.payload.schema.json",
"resultSchemaRef": "schemas/bridge/restart-prepare.result.schema.json",
"timeoutSeconds": 120,
@@ -207,7 +207,7 @@
"type": "maintenance.prepare",
"title": "Prepare SCUM maintenance",
"permission": "server.game-client.maintenance",
"approvalLevel": "platform-admin",
"approvalLevel": "none",
"payloadSchemaRef": "schemas/bridge/maintenance-prepare.payload.schema.json",
"resultSchemaRef": "schemas/bridge/maintenance-prepare.result.schema.json",
"timeoutSeconds": 120,
@@ -217,7 +217,7 @@
"type": "game-state.patch",
"title": "Patch SCUM player state",
"permission": "server.game-client.maintenance",
"approvalLevel": "platform-admin",
"approvalLevel": "none",
"payloadSchemaRef": "schemas/bridge/game-state-patch.payload.schema.json",
"resultSchemaRef": "schemas/bridge/game-state-patch.result.schema.json",
"timeoutSeconds": 120,
@@ -292,6 +292,12 @@
"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",
"rowTarget": {
"collection": "scum_users",
"upsertKeys": ["userProfileId"],
"columnMappings": { "userProfileId": "userProfileId", "steamId": "steamId", "gamePlayerId": "gamePlayerId", "displayName": "displayName", "squadId": "squadId", "squadName": "squadName", "famePoints": "famePoints", "normalBalance": "normalBalance", "goldBalance": "goldBalance", "x": "x", "y": "y", "z": "z", "lastLoginTime": "lastLoginTime", "lastSaveTime": "lastSaveTime" }
},
"maxRows": 500,
"timeoutSeconds": 15
},
@@ -304,6 +310,12 @@
"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",
"rowTarget": {
"collection": "scum_squads",
"upsertKeys": ["squadId"],
"columnMappings": { "squadId": "squadId", "name": "name", "leaderProfileId": "leaderProfileId", "leaderPlayerId": "leaderPlayerId", "memberCount": "memberCount", "score": "score", "memberLimit": "memberLimit", "message": "message", "info": "info", "lastMemberLoginTime": "lastMemberLoginTime" }
},
"maxRows": 500,
"timeoutSeconds": 15
},
@@ -316,6 +328,12 @@
"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",
"rowTarget": {
"collection": "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
},
@@ -328,6 +346,12 @@
"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",
"rowTarget": {
"collection": "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
},
@@ -340,20 +364,95 @@
"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",
"rowTarget": {
"collection": "scum_flags",
"upsertKeys": ["flagId"],
"columnMappings": { "flagId": "flagId", "entityId": "entityId", "baseId": "baseId", "ownerProfileId": "ownerProfileId", "ownerPlayerId": "ownerPlayerId", "ownerSquadId": "ownerSquadId", "ownerSquadName": "ownerSquadName", "overtakerProfileId": "overtakerProfileId", "overtakeEndTime": "overtakeEndTime", "ownershipConfidence": "ownershipConfidence", "x": "x", "y": "y", "z": "z" }
},
"maxRows": 500,
"timeoutSeconds": 15
},
{
"key": "scum.positions",
"title": "Read SCUM current player, vehicle, and flag coordinates",
"title": "Read SCUM player, vehicle, base, and flag coordinates",
"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",
"rowTarget": {
"collection": "scum_map_points",
"upsertKeys": ["subjectType", "subjectId"],
"columnMappings": { "subjectType": "subjectType", "subjectId": "subjectId", "userProfileId": "userProfileId", "gamePlayerId": "gamePlayerId", "vehicleId": "vehicleId", "entityId": "entityId", "baseId": "baseId", "x": "x", "y": "y", "z": "z", "observedAt": "observedAt" }
},
"maxRows": 500,
"timeoutSeconds": 15
},
{
"key": "scum.tasks",
"title": "Read SCUM v57 quest and task records",
"permission": "server.game-client.read",
"engine": "sqlite",
"transportKey": "scum-database",
"targetKey": "scum-database",
"parameterSchemaRef": "schemas/bridge/queries/scum-tasks.parameters.schema.json",
"resultSchemaRef": "schemas/bridge/queries/scum-tasks.result.schema.json",
"sqlRef": "sql/scum-db-v57/tasks.sql",
"rowTarget": {
"collection": "scum_tasks",
"upsertKeys": ["taskRecordId"],
"columnMappings": { "taskRecordId": "taskRecordId", "taskKind": "taskKind", "userProfileId": "userProfileId", "mapId": "mapId", "trackingDataSetId": "trackingDataSetId", "dataAssetPath": "dataAssetPath", "sequenceIndex": "sequenceIndex", "isTracked": "isTracked", "state": "state", "completionDeadline": "completionDeadline" }
},
"maxRows": 500,
"timeoutSeconds": 15
},
{
"key": "scum.events",
"title": "Read SCUM v57 native event rounds and statistics",
"permission": "server.game-client.read",
"engine": "sqlite",
"transportKey": "scum-database",
"targetKey": "scum-database",
"parameterSchemaRef": "schemas/bridge/queries/scum-events.parameters.schema.json",
"resultSchemaRef": "schemas/bridge/queries/scum-events.result.schema.json",
"sqlRef": "sql/scum-db-v57/events.sql",
"rowTarget": {
"collection": "scum_native_event_rounds",
"upsertKeys": ["eventRecordId"],
"columnMappings": { "eventRecordId": "eventRecordId", "eventId": "eventId", "roundId": "roundId", "userProfileId": "userProfileId", "startTime": "startTime", "endTime": "endTime", "state": "state", "score": "score", "enemyKills": "enemyKills", "teamKills": "teamKills", "deaths": "deaths", "assists": "assists", "headshots": "headshots" }
},
"maxRows": 500,
"timeoutSeconds": 15
},
{
"key": "scum.native-timed-gifts",
"title": "Read SCUM v57 native timed gift completion records",
"permission": "server.game-client.read",
"engine": "sqlite",
"transportKey": "scum-database",
"targetKey": "scum-database",
"parameterSchemaRef": "schemas/bridge/queries/scum-native-timed-gifts.parameters.schema.json",
"resultSchemaRef": "schemas/bridge/queries/scum-native-timed-gifts.result.schema.json",
"sqlRef": "sql/scum-db-v57/native-timed-gifts.sql",
"rowTarget": {
"collection": "scum_timed_gift_events",
"upsertKeys": ["timedGiftId"],
"columnMappings": { "timedGiftId": "timedGiftId", "userProfileId": "userProfileId", "mapId": "mapId", "spawnTime": "spawnTime", "spawnAt": "spawnAt" }
},
"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"],
"dataRefs": ["data-packs/scum-db-v57/gift-items.json", "data-packs/scum-db-v57/map-geometry.json"]
}
],
"operationTemplates": [
@@ -589,6 +688,12 @@
"snapshotTypes": [
"players"
],
"queryTemplateKeys": [
"scum.native-timed-gifts"
],
"commandTypes": [
"reward.deliver"
],
"operationKeys": [
"reward.deliver",
"player.notify"
@@ -605,22 +710,16 @@
"scum.squad-members",
"scum.vehicles",
"scum.flags",
"scum.positions"
"scum.positions",
"scum.tasks",
"scum.events",
"scum.native-timed-gifts"
],
"operationKeys": [
"player.fame.set",
"player.currency.normal.set",
"player.currency.gold.set",
"player.notify",
"reward.deliver",
"player.attribute.855.set"
"commandTypes": [
"event.start"
],
"featureKeys": [
"player.intelligence",
"reward.delivery",
"state.patch",
"vehicle.spawn",
"trajectory.collect"
"player.intelligence"
]
}
],
@@ -693,6 +792,62 @@
{
"path": "bin/scum-start.cmd",
"mode": 448
},
{
"path": "assets/map/scum-map-overview.jpg",
"mode": 384
},
{
"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/map-points.sql",
"mode": 384
},
{
"path": "sql/scum-db-v57/tasks.sql",
"mode": 384
},
{
"path": "sql/scum-db-v57/events.sql",
"mode": 384
},
{
"path": "sql/scum-db-v57/native-timed-gifts.sql",
"mode": 384
},
{
"path": "data-packs/scum-db-v57/config-maps.json",
"mode": 384
},
{
"path": "data-packs/scum-db-v57/log-parsers.json",
"mode": 384
},
{
"path": "data-packs/scum-db-v57/gift-items.json",
"mode": 384
},
{
"path": "data-packs/scum-db-v57/map-geometry.json",
"mode": 384
}
],
"productionLifecycle": {
@@ -722,6 +877,7 @@
"bundleIntegritySha256": "sha256:3488b316d909e597024f8f31c7bc96ab8019f643d74a528dc442d3df0dc3d54e",
"permissions": [
"server.read",
"server.remote.access",
"server.game-client.read",
"server.game-client.command",
"server.game-client.maintenance"
@@ -744,6 +900,7 @@
"bundleIntegritySha256": "sha256:3488b316d909e597024f8f31c7bc96ab8019f643d74a528dc442d3df0dc3d54e",
"permissions": [
"server.read",
"server.remote.access",
"server.game-client.read"
],
"bridgeActions": [
@@ -763,6 +920,7 @@
"bundleIntegritySha256": "sha256:3488b316d909e597024f8f31c7bc96ab8019f643d74a528dc442d3df0dc3d54e",
"permissions": [
"server.read",
"server.remote.access",
"server.game-client.read"
],
"bridgeActions": [
@@ -782,11 +940,13 @@
"bundleIntegritySha256": "sha256:3488b316d909e597024f8f31c7bc96ab8019f643d74a528dc442d3df0dc3d54e",
"permissions": [
"server.read",
"server.remote.access",
"server.game-client.read",
"server.game-client.command"
],
"bridgeActions": [
"server.instances.read"
"server.instances.read",
"remote.access.request"
],
"featureKeys": [
"reward.delivery"
@@ -794,27 +954,23 @@
},
{
"key": "workflows",
"title": "Workflow 状态",
"path": "/workflows",
"title": "活动管理",
"path": "/activity",
"bundleKey": "scum-server-plugin",
"bundleVersion": "1.0.3",
"bundleIntegritySha256": "sha256:3488b316d909e597024f8f31c7bc96ab8019f643d74a528dc442d3df0dc3d54e",
"permissions": [
"server.read",
"server.remote.access",
"server.game-client.read",
"server.game-client.command",
"server.game-client.maintenance"
"server.game-client.command"
],
"bridgeActions": [
"server.instances.read",
"remote.access.request"
],
"featureKeys": [
"player.intelligence",
"reward.delivery",
"state.patch",
"vehicle.spawn",
"trajectory.collect"
"player.intelligence"
]
}
],
@@ -825,20 +981,6 @@
"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": [
{