tfausak / octane

:rocket: Parse Rocket League replays.
https://www.stackage.org/nightly/package/octane
Other
39 stars 1 forks source link

Correctly parse SteamIDs #40

Closed tfausak closed 8 years ago

tfausak commented 8 years ago

This fixes #38.

tfausak commented 8 years ago

@danielsamuels: Although I was parsing SteamIDs incorrectly, I think this player's SteamID is simply invalid. Here's what this branch says about it:

"Engine.PlayerReplicationInfo:UniqueId": {
  "Value": {
    "Remote": {
      "Value": {
        "Universe": 0,
        "Type": 0,
        "Number": 24488897,
        "Instance": 0
      },
      "Type": "Steam"
    },
    "Local": 0,
    "System": "Steam"
  },
  "Type": "UniqueId"
},

Compare that to "Chupis" from the same replay:

"Engine.PlayerReplicationInfo:UniqueId": {
  "Value": {
    "Remote": {
      "Value": {
        "Universe": 1,
        "Type": 1,
        "Number": 91355920,
        "Instance": 1
      },
      "Type": "Steam"
    },
    "Local": 0,
    "System": "Steam"
  },
  "Type": "UniqueId"
},
danielsamuels commented 8 years ago

Hmm, it could be STEAM_0:1:24488897 which gives you this user. Could be a match.

tfausak commented 8 years ago

Yeah, that seems more likely than this guy.

danielsamuels commented 8 years ago

Yup!

tfausak commented 8 years ago

That doesn't make a whole lot of sense, though. If the "number" part is correct, how can I be reading everything else as 0 when at least one of them should be 1?

danielsamuels commented 8 years ago

I'm not sure! May I request that the 64-bit values remain somewhere, if at all possible? I use them for a lot of things, and would prefer not to have to convert them back.

tfausak commented 8 years ago

Oh, if you're using the SteamIDs as they are now, I'd prefer to leave them alone. This one particular player's SteamID is bogus, but it's not a parsing problem.

danielsamuels commented 8 years ago

Sure, no problem - I just wasn't sure where the problem was. If it's just bad data in the replay then I can live with that.

tfausak commented 8 years ago

Yeah, I'm pretty sure it's not a parser error. Especially since it is serialized many times and is "wrong" every time, but all the other SteamIDs are fine. For some reason that SteamID has three bits as 0 when they should be 1.

"ProjectX.GRI_X:Reservations" => VReservation (CompressedWord {limit = 7, value = 0}) 0x01 (RemoteSteamId (SteamId {unpackSteamId = 0x000000000175abc1})) (Just 0x00) (Just "Ahad") (Boolean {unpack = True}) (Boolean {unpack = True})
"ProjectX.GRI_X:Reservations" => VReservation (CompressedWord {limit = 7, value = 1}) 0x01 (RemoteSteamId (SteamId {unpackSteamId = 0x0110000101214082})) (Just 0x00) (Just "Rayhush") (Boolean {unpack = True}) (Boolean {unpack = True})
"ProjectX.GRI_X:Reservations" => VReservation (CompressedWord {limit = 7, value = 2}) 0x01 (RemoteSteamId (SteamId {unpackSteamId = 0x0110000102890e3c})) (Just 0x00) (Just "TeRRoR eYeS") (Boolean {unpack = True}) (Boolean {unpack = True})
"ProjectX.GRI_X:Reservations" => VReservation (CompressedWord {limit = 7, value = 3}) 0x01 (RemoteSteamId (SteamId {unpackSteamId = 0x011000010662c745})) (Just 0x00) (Just "Mo") (Boolean {unpack = True}) (Boolean {unpack = True})
"ProjectX.GRI_X:Reservations" => VReservation (CompressedWord {limit = 7, value = 4}) 0x01 (RemoteSteamId (SteamId {unpackSteamId = 0x011000010571fb10})) (Just 0x00) (Just "Chupis") (Boolean {unpack = True}) (Boolean {unpack = True})
"ProjectX.GRI_X:Reservations" => VReservation (CompressedWord {limit = 7, value = 5}) 0x01 (RemoteSteamId (SteamId {unpackSteamId = 0x01100001043246fb})) (Just 0x00) (Just "rosellemark") (Boolean {unpack = True}) (Boolean {unpack = True})