115 lines
3.6 KiB
Go
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
|
|
}
|