package domain import "time" const SCUMPlayerStatePatchCommandType = "game-state.patch" const SCUMPlayerStateSnapshotType = "player.state" type GamePlayerStateFieldKind string const ( GamePlayerStateFieldSkill GamePlayerStateFieldKind = "skill" GamePlayerStateFieldAttribute GamePlayerStateFieldKind = "attribute" ) type GamePlayerStateFieldDefinition struct { Key string Label string Kind GamePlayerStateFieldKind Minimum float64 Maximum float64 } type GamePlayerStateCatalog struct { GameVersion string Fields []GamePlayerStateFieldDefinition } var SCUMPlayerStateCatalogs = []GamePlayerStateCatalog{{GameVersion: "0.9.700.90357", Fields: []GamePlayerStateFieldDefinition{{Key: "skills.running", Label: "跑步技能", Kind: GamePlayerStateFieldSkill, Minimum: 0, Maximum: 10}, {Key: "attributes.strength", Label: "力量属性", Kind: GamePlayerStateFieldAttribute, Minimum: 0, Maximum: 10}}}} type GamePlayerStateSnapshot struct { ServerInstanceID string GamePlayerRecordID string GamePlayerID string GameVersion string StateVersion string SafetyWindow string MaintenanceVerified bool PlayerOnline bool Fields map[string]float64 ObservedAt time.Time } type GamePlayerStatePatchStatus string const ( GamePlayerStatePatchPendingApproval GamePlayerStatePatchStatus = "pending-approval" GamePlayerStatePatchQueued GamePlayerStatePatchStatus = "queued" GamePlayerStatePatchExecutionFailed GamePlayerStatePatchStatus = "execution-failed" GamePlayerStatePatchExecutionUnknown GamePlayerStatePatchStatus = "execution-unknown" GamePlayerStatePatchConfirmationFailed GamePlayerStatePatchStatus = "confirmation-failed" GamePlayerStatePatchConfirmed GamePlayerStatePatchStatus = "confirmed" ) type GamePlayerStatePatchChange struct { FieldKey string Before float64 After float64 } type GamePlayerStatePatch struct { ID string ServerInstanceID string GamePlayerRecordID string GamePlayerID string GameVersion string ExpectedStateVersion string SafetyWindow string Changes []GamePlayerStatePatchChange Reason string RequesterID string ApproverID string Status GamePlayerStatePatchStatus BridgeCommandID string ExecutionSummary string ConfirmedStateVersion string CreatedAt time.Time ApprovedAt time.Time CompletedAt time.Time UpdatedAt time.Time } type GamePlayerStatePatchFilter struct { ServerInstanceID string GamePlayerRecordID string Limit int } type GamePlayerStatePatchRequest struct { GameVersion string ExpectedStateVersion string SafetyWindow string Changes []GamePlayerStatePatchChange Reason string } func CopyGamePlayerStatePatch(value GamePlayerStatePatch) GamePlayerStatePatch { value.Changes = append([]GamePlayerStatePatchChange(nil), value.Changes...) return value } func SCUMPlayerStateCatalogForVersion(version string) (GamePlayerStateCatalog, bool) { for _, catalog := range SCUMPlayerStateCatalogs { if catalog.GameVersion == version { return catalog, true } } return GamePlayerStateCatalog{}, false } func GamePlayerStateFieldForVersion(version, key string) (GamePlayerStateFieldDefinition, bool) { catalog, ok := SCUMPlayerStateCatalogForVersion(version) if !ok { return GamePlayerStateFieldDefinition{}, false } for _, field := range catalog.Fields { if field.Key == key { return field, true } } return GamePlayerStateFieldDefinition{}, false }