Skip to content

Commit

Permalink
Add StringBoolean enumfield type
Browse files Browse the repository at this point in the history
  • Loading branch information
Gigabyte5671 committed Dec 27, 2022
1 parent f136ce0 commit b20adff
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 5 deletions.
10 changes: 5 additions & 5 deletions data/Enumfields.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
interface EnumField {
length: number | 'Sized' | 'EnumBlockArray'| 'ArrayOfEnumBlockArrays',
type?: 'Boolean' | 'Integer' | 'IP' | 'ItemID' | 'MapID' | 'ServerList' | 'String' | 'Version' | 'Region' | 'WatchNowSection',
type?: 'Boolean' | 'StringBoolean' | 'Integer' | 'IP' | 'ItemID' | 'MapID' | 'ServerList' | 'String' | 'Version' | 'Region' | 'WatchNowSection',
name?: string | undefined
}

Expand All @@ -18,19 +18,19 @@ export const generalEnumfields = {
'06DE': {length: 'Sized', type: 'String', name: 'Clan Tag'},
'06E9': {length: 'Sized', name: undefined},
'0705': {length: 'Sized', name: 'Player Name of Kicker'},
'0013': {length: 'Sized', name: undefined},
'0013': {length: 'Sized', type: 'StringBoolean', name: undefined},
'0082': {length: 'Sized', name: undefined},
'00A2': {length: 'Sized', name: undefined},
// '00A3': {length: 'Sized', name: undefined}, // The length of this field may be incorrect, needs verification.
'00A3': {length: 6, name: undefined},
'00AA': {length: 'Sized', name: undefined},
'00AA': {length: 'Sized', type: 'StringBoolean', name: undefined},
'00AB': {length: 'Sized', name: undefined},
'01A6': {length: 'Sized', name: undefined},
'01A6': {length: 'Sized', type: 'StringBoolean', name: undefined},
'01C4': {length: 'Sized', name: undefined},
'020C': {length: 'Sized', name: undefined},
'021A': {length: 'Sized', type: 'String', name: 'Game Mode'},
'026F': {length: 'Sized', name: 'Purchase Name'},
'02AF': {length: 'Sized', name: undefined},
'02AF': {length: 'Sized', type: 'StringBoolean', name: undefined},
'02B1': {length: 'Sized', type: 'String', name: 'Internal Map Name'},
'02B6': {length: 'Sized', type: 'String', name: 'Map Name'},
'02E6': {length: 'Sized', type: 'String', name: 'Message Text'},
Expand Down
10 changes: 10 additions & 0 deletions functions/Decoder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,16 @@ function parseFieldValue (value: number[], type?: string): any {
return value[0] === 1;
}

// Occasionally, Boolean values are also represented by single string characters. We refer to these as "string-booleans".
// [ 6E ] = "n" = false, [ 79 ] = "y" = true.
if (type === 'StringBoolean') {
if (value.length !== 1 || (value[0] !== 0x6E && value[0] !== 0x79)) {
console.warn('[Decoder] Error decoding string-boolean (', value, '). Enumfield may be incorrectly typed.');
return value;
}
return value[0] === 0x79;
}

// Integers are represented by 4 bytes in reverse order.
// These bytes must be swapped before they can be read as a normal integer:
// [ 2A 38 59 01 ] => [ 01 59 38 2A ]
Expand Down

0 comments on commit b20adff

Please sign in to comment.