Files
browser/platform/domain/game_player_state_patch.go
T

115 lines
3.6 KiB
Go

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
}