mirror of
https://github.com/Luzifer/sii.git
synced 2024-12-21 00:21:15 +00:00
Add missing types for player block
Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
122b4a365c
commit
43e270d58b
3 changed files with 46 additions and 4 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +1,2 @@
|
||||||
cmd/sii-decrypt/sii-decrypt
|
cmd/sii-decrypt/sii-decrypt
|
||||||
|
game.sii
|
||||||
|
|
|
@ -32,7 +32,7 @@ type Player struct {
|
||||||
DrivingTime int64 `sii:"driving_time"`
|
DrivingTime int64 `sii:"driving_time"`
|
||||||
SleepingCount int `sii:"sleeping_count"`
|
SleepingCount int `sii:"sleeping_count"`
|
||||||
FreeRoamDistance int64 `sii:"free_roam_distance"`
|
FreeRoamDistance int64 `sii:"free_roam_distance"`
|
||||||
DiscoveryDistance float64 `sii:"discovary_distance"` // Typo is intended and copied from real save-game
|
DiscoveryDistance float32 `sii:"discovary_distance"` // Typo is intended and copied from real save-game
|
||||||
DismissedDrivers int `sii:"dismissed_drivers"`
|
DismissedDrivers int `sii:"dismissed_drivers"`
|
||||||
Trucks []Ptr `sii:"trucks"`
|
Trucks []Ptr `sii:"trucks"`
|
||||||
TruckProfitLogs []Ptr `sii:"truck_profit_logs"`
|
TruckProfitLogs []Ptr `sii:"truck_profit_logs"`
|
||||||
|
|
|
@ -49,6 +49,7 @@ func genericUnmarshal(in []byte, out interface{}) error {
|
||||||
if err := v.UnmarshalSII(data); err != nil {
|
if err := v.UnmarshalSII(data); err != nil {
|
||||||
return errors.Wrapf(err, "Unable to parse Ptr for attribute %q", attributeName)
|
return errors.Wrapf(err, "Unable to parse Ptr for attribute %q", attributeName)
|
||||||
}
|
}
|
||||||
|
valField.Set(reflect.ValueOf(v))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
case reflect.TypeOf(Placement{}):
|
case reflect.TypeOf(Placement{}):
|
||||||
|
@ -57,6 +58,7 @@ func genericUnmarshal(in []byte, out interface{}) error {
|
||||||
if err := v.UnmarshalSII(data); err != nil {
|
if err := v.UnmarshalSII(data); err != nil {
|
||||||
return errors.Wrapf(err, "Unable to parse Placement for attribute %q", attributeName)
|
return errors.Wrapf(err, "Unable to parse Placement for attribute %q", attributeName)
|
||||||
}
|
}
|
||||||
|
valField.Set(reflect.ValueOf(v))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -69,12 +71,12 @@ func genericUnmarshal(in []byte, out interface{}) error {
|
||||||
}
|
}
|
||||||
valField.SetBool(v)
|
valField.SetBool(v)
|
||||||
|
|
||||||
case reflect.Float64:
|
case reflect.Float32:
|
||||||
v, err := strconv.ParseFloat(string(getSingleValue(in, attributeName)), 64)
|
v, err := sii2float(getSingleValue(in, attributeName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "Unable to parse float for attribute %q", attributeName)
|
return errors.Wrapf(err, "Unable to parse float for attribute %q", attributeName)
|
||||||
}
|
}
|
||||||
valField.SetFloat(v)
|
valField.Set(reflect.ValueOf(v))
|
||||||
|
|
||||||
case reflect.Int, reflect.Int64:
|
case reflect.Int, reflect.Int64:
|
||||||
v, err := strconv.ParseInt(string(getSingleValue(in, attributeName)), 10, 64)
|
v, err := strconv.ParseInt(string(getSingleValue(in, attributeName)), 10, 64)
|
||||||
|
@ -100,6 +102,34 @@ func genericUnmarshal(in []byte, out interface{}) error {
|
||||||
return errors.Wrapf(err, "Unable to fetch array values for attribute %q", attributeName)
|
return errors.Wrapf(err, "Unable to fetch array values for attribute %q", attributeName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch typeField.Type.Elem() {
|
||||||
|
|
||||||
|
case reflect.TypeOf(Ptr{}):
|
||||||
|
var v []Ptr
|
||||||
|
for _, bv := range ba {
|
||||||
|
e := Ptr{}
|
||||||
|
if err := e.UnmarshalSII(bv); err != nil {
|
||||||
|
return errors.Wrapf(err, "Unable to parse Ptr for attribute %q", attributeName)
|
||||||
|
}
|
||||||
|
v = append(v, e)
|
||||||
|
}
|
||||||
|
valField.Set(reflect.ValueOf(v))
|
||||||
|
continue
|
||||||
|
|
||||||
|
case reflect.TypeOf(Placement{}):
|
||||||
|
var v []Placement
|
||||||
|
for _, bv := range ba {
|
||||||
|
e := Placement{}
|
||||||
|
if err := e.UnmarshalSII(bv); err != nil {
|
||||||
|
return errors.Wrapf(err, "Unable to parse Ptr for attribute %q", attributeName)
|
||||||
|
}
|
||||||
|
v = append(v, e)
|
||||||
|
}
|
||||||
|
valField.Set(reflect.ValueOf(v))
|
||||||
|
continue
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
switch typeField.Type.Elem().Kind() {
|
switch typeField.Type.Elem().Kind() {
|
||||||
case reflect.Bool:
|
case reflect.Bool:
|
||||||
var v []bool
|
var v []bool
|
||||||
|
@ -123,6 +153,17 @@ func genericUnmarshal(in []byte, out interface{}) error {
|
||||||
}
|
}
|
||||||
valField.Set(reflect.ValueOf(v))
|
valField.Set(reflect.ValueOf(v))
|
||||||
|
|
||||||
|
case reflect.Int64:
|
||||||
|
var v []int64
|
||||||
|
for _, bv := range ba {
|
||||||
|
pbv, err := strconv.ParseInt(string(bv), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrapf(err, "Unable to parse int for attribute %q", attributeName)
|
||||||
|
}
|
||||||
|
v = append(v, pbv)
|
||||||
|
}
|
||||||
|
valField.Set(reflect.ValueOf(v))
|
||||||
|
|
||||||
case reflect.String:
|
case reflect.String:
|
||||||
var v []string
|
var v []string
|
||||||
for _, bv := range ba {
|
for _, bv := range ba {
|
||||||
|
|
Loading…
Reference in a new issue