feat: add controlled scum player state patches
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user