wowdev / WoWDBDefs

Client database definitions for World of Warcraft
Other
254 stars 95 forks source link

Feedback wanted: Unknown field names #42

Closed Marlamin closed 6 years ago

Marlamin commented 6 years ago

So I've implemented this into dumper, but want a bit of feedback for it before shipping.

COLUMNS
int ID
locstring Field_48D27B75_000_lang
locstring Field_48D27B75_001_lang
int Field_48D27B75_002
int Field_48D27B75_003
int Field_48D27B75_004

LAYOUT 48D27B75
BUILD 8.0.1.26287
$noninline,id$ID<32>
Field_48D27B75_000_lang
Field_48D27B75_001_lang
Field_48D27B75_002<u8>
Field_48D27B75_003<32>
$noninline,relation$Field_48D27B75_004<32>

Reasoning for it is that I want to get this repo going in an automated fashion but also want to do regular complete regens (maybe daily) of all builds that I have on server so we can keep an eye on how dumper changes affect stuff (and if/when stuff gets fixed). Regenerating DBDs with the current unknown field naming would make each commit be huge which is why I want a standard way of generating these that is reliable between builds.

Only thing is that I'm not entirely sure how I'll do this for pre-layouthash stuff, but maybe using concatenated build e.g. Field_33512340_001.

Older stuff currently in DBD with the current Field_3240242934 stuff will be untouched. This is for new stuff and raw repo only.

bloerwald commented 6 years ago

Reasoning for randomness was

The source of entropy being completely random names was easiest, I would avoid anything manually assembled, ie version concat, or entropy we don’t know the source from, ie layout hash. If you want to redump the same binary over and over with deterministic output, I guess md5(binary) would be fine. That’s specific to one build, random enough to not clash, and deterministic over dumper invocations.

Marlamin commented 6 years ago

Fair enough, will have to stick to only Windows builds then, and RenderService for some of the named builds but I'm sure I can work with that. Full MD5 or partial MD5? Full might get a bit long.

Marlamin commented 6 years ago

Because @bloerwald is lazy:

<@bloerwald> I wouldn’t value readability in auto generated names; don’t see why win only; if too long do crc32
Marlamin commented 6 years ago

Went with build without dots for now, which is unique per build. If there's a branch conflict I guess it wouldn't really matter that much either because they're just field names.

COLUMNS
int ID
locstring Field_81028151_000_lang
locstring Field_81028151_001_lang
int Field_81028151_002

LAYOUT A01D47C8
BUILD 8.1.0.28151
$noninline,id$ID<32>
Field_81028151_000_lang
Field_81028151_001_lang
Field_81028151_002<u8>

Will close this eventually if there's no comments on this.

bloerwald commented 6 years ago

Please at least make it somewhat safe by replacing dots with underscores. Without fixed width and zero padding these are always risky.