Gomule will fail to load characters (disconnect) when certain quest items are in inventory like Jade Figurine, Scroll of Resistance, etc. I suppose it only happens for their normal version, but maybe even for nightmare/hell.
Problem is, the item read is finished too early and it throws the offset position off by 1 byte.
Issue is, compact items, at D2item.java, line around 332-344. These mentioned items have no guid, but after GUID bit is read, there is still 3 bits, which overlaps to next byte, but not read by gomule.
One possible solution could be to read those 3 bits, as they, together with previous bit (has GUID) carry information about item difficulty origin.
Following PHP code
//for misc and quest item, it's difficulty where item was found, only for some specific items
if($this->item_type == 'misc' && $this->type == 'ques' && $this->compact) {
//read 3 bits and shift by 1 to add previously read hasGUID bit
if($hasGUID) {
$this->questdif = ($qskip << 1) + $hasGUID;
}
else {
$this->questdif = ($this->bitreader->ReadBits(3) << 1) + $hasGUID;
}
}
Or just skip those 3 bits, basically moving the else pFile.read(3); up one level.
Would be nicer to read them and add the difficulty info, so it would be shown also for other items like Khalim's body parts, etc.
Also one thing it fails to load is missing strings.
ui.json has to be added to GoMule/src/main/resources/d2Files/D2R_1.0/translations/
Do you remember which item had translations missing? Thanks!
I think it was the scroll of resistance or inifuss. Maybe more quest items actually. See attached stash.
Also gomule still does not read some quest items properly.
Perfect, thank you! Fixed on 3_0 support!