Fix issue in item extraction when stackable is "0" instead of ""

This commit is contained in:
2023-10-25 16:41:27 +02:00
parent 074964aa87
commit b5b7149c79
3 changed files with 150 additions and 144 deletions

View File

@@ -32,7 +32,7 @@ with open("armor.txt", newline="") as f:
"name": names[code] if code in names else row["name"],
"class": "armor",
"type": row["type"],
"stackable": bool(row["stackable"]),
"stackable": row["stackable"] == "1",
}
with open("weapons.txt", newline="") as f:
@@ -48,7 +48,7 @@ with open("weapons.txt", newline="") as f:
"name": names[code] if code in names else row["name"],
"class": "weapon",
"type": row["type"],
"stackable": bool(row["stackable"]),
"stackable": row["stackable"] == "1",
}
with open("misc.txt", newline="") as f:
@@ -62,7 +62,7 @@ with open("misc.txt", newline="") as f:
"name": names[code] if code in names else row["name"],
"class": "misc",
"type": row["type"],
"stackable": bool(row["stackable"]),
"stackable": row["stackable"] == "1",
}
for code, patch in item_patches.items():

View File

@@ -3051,61 +3051,61 @@
"name": "Elixir",
"class": "misc",
"type": "elix",
"stackable": true
"stackable": false
},
"hpo": {
"name": "Healing Potion",
"class": "misc",
"type": "hpot",
"stackable": true
"stackable": false
},
"mpo": {
"name": "Mana Potion",
"class": "misc",
"type": "mpot",
"stackable": true
"stackable": false
},
"hpf": {
"name": "Full Healing Potion",
"class": "misc",
"type": "hpot",
"stackable": true
"stackable": false
},
"mpf": {
"name": "Full Mana Potion",
"class": "misc",
"type": "mpot",
"stackable": true
"stackable": false
},
"vps": {
"name": "Stamina Potion",
"class": "misc",
"type": "spot",
"stackable": true
"stackable": false
},
"yps": {
"name": "Antidote Potion",
"class": "misc",
"type": "apot",
"stackable": true
"stackable": false
},
"rvs": {
"name": "Rejuvenation Potion",
"class": "misc",
"type": "rpot",
"stackable": true
"stackable": false
},
"rvl": {
"name": "Full Rejuvenation Potion",
"class": "misc",
"type": "rpot",
"stackable": true
"stackable": false
},
"wms": {
"name": "Thawing Potion",
"class": "misc",
"type": "wpot",
"stackable": true
"stackable": false
},
"tbk": {
"name": "Tome of Town Portal",
@@ -3123,19 +3123,19 @@
"name": "Amulet",
"class": "misc",
"type": "amul",
"stackable": true
"stackable": false
},
"vip": {
"name": "Amulet of the Viper",
"class": "misc",
"type": "amul",
"stackable": true
"stackable": false
},
"rin": {
"name": "Ring",
"class": "misc",
"type": "ring",
"stackable": true
"stackable": false
},
"gld": {
"name": "Gold",
@@ -3147,13 +3147,13 @@
"name": "Scroll of Inifuss",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"bkd": {
"name": "Key to the Cairn Stones",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"aqv": {
"name": "Arrows",
@@ -3165,7 +3165,7 @@
"name": "Torch",
"class": "misc",
"type": "torc",
"stackable": true
"stackable": false
},
"cqv": {
"name": "Bolts",
@@ -3177,85 +3177,85 @@
"name": "Scroll of Town Portal",
"class": "misc",
"type": "scro",
"stackable": true
"stackable": false
},
"isc": {
"name": "Scroll of Identify",
"class": "misc",
"type": "scro",
"stackable": true
"stackable": false
},
"hrt": {
"name": "Heart",
"class": "misc",
"type": "body",
"stackable": true
"stackable": false
},
"brz": {
"name": "Brain",
"class": "misc",
"type": "body",
"stackable": true
"stackable": false
},
"jaw": {
"name": "Jawbone",
"class": "misc",
"type": "body",
"stackable": true
"stackable": false
},
"eyz": {
"name": "Eye",
"class": "misc",
"type": "body",
"stackable": true
"stackable": false
},
"hrn": {
"name": "Horn",
"class": "misc",
"type": "body",
"stackable": true
"stackable": false
},
"tal": {
"name": "Tail",
"class": "misc",
"type": "body",
"stackable": true
"stackable": false
},
"flg": {
"name": "Flag",
"class": "misc",
"type": "body",
"stackable": true
"stackable": false
},
"fng": {
"name": "Fang",
"class": "misc",
"type": "body",
"stackable": true
"stackable": false
},
"qll": {
"name": "Quill",
"class": "misc",
"type": "body",
"stackable": true
"stackable": false
},
"sol": {
"name": "Soul",
"class": "misc",
"type": "body",
"stackable": true
"stackable": false
},
"scz": {
"name": "Scalp",
"class": "misc",
"type": "body",
"stackable": true
"stackable": false
},
"spe": {
"name": "Spleen",
"class": "misc",
"type": "body",
"stackable": true
"stackable": false
},
"key": {
"name": "Key",
@@ -3267,373 +3267,373 @@
"name": "The Black Tower Key",
"class": "misc",
"type": "key",
"stackable": true
"stackable": false
},
"xyz": {
"name": "Potion of Life",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"j34": {
"name": "A Jade Figurine",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"g34": {
"name": "The Golden Bird",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"bbb": {
"name": "Lam Esen's Tome",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"box": {
"name": "Horadric Cube",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"tr1": {
"name": "Horadric Scroll",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"mss": {
"name": "Mephisto's Soulstone",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"ass": {
"name": "Book of Skill",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"qey": {
"name": "Khalim's Eye",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"qhr": {
"name": "Khalim's Heart",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"qbr": {
"name": "Khalim's Brain",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"ear": {
"name": "Ear",
"class": "misc",
"type": "play",
"stackable": true
"stackable": false
},
"gcv": {
"name": "Chipped Amethyst",
"class": "misc",
"type": "gema",
"stackable": true
"stackable": false
},
"gfv": {
"name": "Flawed Amethyst",
"class": "misc",
"type": "gema",
"stackable": true
"stackable": false
},
"gsv": {
"name": "Amethyst",
"class": "misc",
"type": "gema",
"stackable": true
"stackable": false
},
"gzv": {
"name": "Flawless Amethyst",
"class": "misc",
"type": "gema",
"stackable": true
"stackable": false
},
"gpv": {
"name": "Perfect Amethyst",
"class": "misc",
"type": "gema",
"stackable": true
"stackable": false
},
"gcy": {
"name": "Chipped Topaz",
"class": "misc",
"type": "gemt",
"stackable": true
"stackable": false
},
"gfy": {
"name": "Flawed Topaz",
"class": "misc",
"type": "gemt",
"stackable": true
"stackable": false
},
"gsy": {
"name": "Topaz",
"class": "misc",
"type": "gemt",
"stackable": true
"stackable": false
},
"gly": {
"name": "Flawless Topaz",
"class": "misc",
"type": "gemt",
"stackable": true
"stackable": false
},
"gpy": {
"name": "Perfect Topaz",
"class": "misc",
"type": "gemt",
"stackable": true
"stackable": false
},
"gcb": {
"name": "Chipped Sapphire",
"class": "misc",
"type": "gems",
"stackable": true
"stackable": false
},
"gfb": {
"name": "Flawed Sapphire",
"class": "misc",
"type": "gems",
"stackable": true
"stackable": false
},
"gsb": {
"name": "Sapphire",
"class": "misc",
"type": "gems",
"stackable": true
"stackable": false
},
"glb": {
"name": "Flawless Sapphire",
"class": "misc",
"type": "gems",
"stackable": true
"stackable": false
},
"gpb": {
"name": "Perfect Sapphire",
"class": "misc",
"type": "gems",
"stackable": true
"stackable": false
},
"gcg": {
"name": "Chipped Emerald",
"class": "misc",
"type": "geme",
"stackable": true
"stackable": false
},
"gfg": {
"name": "Flawed Emerald",
"class": "misc",
"type": "geme",
"stackable": true
"stackable": false
},
"gsg": {
"name": "Emerald",
"class": "misc",
"type": "geme",
"stackable": true
"stackable": false
},
"glg": {
"name": "Flawless Emerald",
"class": "misc",
"type": "geme",
"stackable": true
"stackable": false
},
"gpg": {
"name": "Perfect Emerald",
"class": "misc",
"type": "geme",
"stackable": true
"stackable": false
},
"gcr": {
"name": "Chipped Ruby",
"class": "misc",
"type": "gemr",
"stackable": true
"stackable": false
},
"gfr": {
"name": "Flawed Ruby",
"class": "misc",
"type": "gemr",
"stackable": true
"stackable": false
},
"gsr": {
"name": "Ruby",
"class": "misc",
"type": "gemr",
"stackable": true
"stackable": false
},
"glr": {
"name": "Flawless Ruby",
"class": "misc",
"type": "gemr",
"stackable": true
"stackable": false
},
"gpr": {
"name": "Perfect Ruby",
"class": "misc",
"type": "gemr",
"stackable": true
"stackable": false
},
"gcw": {
"name": "Chipped Diamond",
"class": "misc",
"type": "gemd",
"stackable": true
"stackable": false
},
"gfw": {
"name": "Flawed Diamond",
"class": "misc",
"type": "gemd",
"stackable": true
"stackable": false
},
"gsw": {
"name": "Diamond",
"class": "misc",
"type": "gemd",
"stackable": true
"stackable": false
},
"glw": {
"name": "Flawless Diamond",
"class": "misc",
"type": "gemd",
"stackable": true
"stackable": false
},
"gpw": {
"name": "Perfect Diamond",
"class": "misc",
"type": "gemd",
"stackable": true
"stackable": false
},
"hp1": {
"name": "Minor Healing Potion",
"class": "misc",
"type": "hpot",
"stackable": true
"stackable": false
},
"hp2": {
"name": "Light Healing Potion",
"class": "misc",
"type": "hpot",
"stackable": true
"stackable": false
},
"hp3": {
"name": "Healing Potion",
"class": "misc",
"type": "hpot",
"stackable": true
"stackable": false
},
"hp4": {
"name": "Greater Healing Potion",
"class": "misc",
"type": "hpot",
"stackable": true
"stackable": false
},
"hp5": {
"name": "Super Healing Potion",
"class": "misc",
"type": "hpot",
"stackable": true
"stackable": false
},
"mp1": {
"name": "Minor Mana Potion",
"class": "misc",
"type": "mpot",
"stackable": true
"stackable": false
},
"mp2": {
"name": "Light Mana Potion",
"class": "misc",
"type": "mpot",
"stackable": true
"stackable": false
},
"mp3": {
"name": "Mana Potion",
"class": "misc",
"type": "mpot",
"stackable": true
"stackable": false
},
"mp4": {
"name": "Greater Mana Potion",
"class": "misc",
"type": "mpot",
"stackable": true
"stackable": false
},
"mp5": {
"name": "Super Mana Potion",
"class": "misc",
"type": "mpot",
"stackable": true
"stackable": false
},
"skc": {
"name": "Chipped Skull",
"class": "misc",
"type": "gemz",
"stackable": true
"stackable": false
},
"skf": {
"name": "Flawed Skull",
"class": "misc",
"type": "gemz",
"stackable": true
"stackable": false
},
"sku": {
"name": "Skull",
"class": "misc",
"type": "gemz",
"stackable": true
"stackable": false
},
"skl": {
"name": "Flawless Skull",
"class": "misc",
"type": "gemz",
"stackable": true
"stackable": false
},
"skz": {
"name": "Perfect Skull",
"class": "misc",
"type": "gemz",
"stackable": true
"stackable": false
},
"hrb": {
"name": "Herb",
"class": "misc",
"type": "herb",
"stackable": true
"stackable": false
},
"cm1": {
"name": "Small Charm",
"class": "misc",
"type": "scha",
"stackable": true
"stackable": false
},
"cm2": {
"name": "Large Charm",
"class": "misc",
"type": "mcha",
"stackable": true
"stackable": false
},
"cm3": {
"name": "Grand Charm",
"class": "misc",
"type": "lcha",
"stackable": true
"stackable": false
},
"rps": {
"name": "Small Red Potion",
@@ -3663,294 +3663,294 @@
"name": "El Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r02": {
"name": "Eld Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r03": {
"name": "Tir Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r04": {
"name": "Nef Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r05": {
"name": "Eth Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r06": {
"name": "Ith Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r07": {
"name": "Tal Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r08": {
"name": "Ral Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r09": {
"name": "Ort Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r10": {
"name": "Thul Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r11": {
"name": "Amn Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r12": {
"name": "Sol Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r13": {
"name": "Shael Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r14": {
"name": "Dol Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r15": {
"name": "Hel Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r16": {
"name": "Io Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r17": {
"name": "Lum Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r18": {
"name": "Ko Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r19": {
"name": "Fal Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r20": {
"name": "Lem Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r21": {
"name": "Pul Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r22": {
"name": "Um Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r23": {
"name": "Mal Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r24": {
"name": "Ist Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r25": {
"name": "Gul Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r26": {
"name": "Vex Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r27": {
"name": "Ohm Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r28": {
"name": "Lo Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r29": {
"name": "Sur Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r30": {
"name": "Ber Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r31": {
"name": "Jah Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r32": {
"name": "Cham Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"r33": {
"name": "Zod Rune",
"class": "misc",
"type": "rune",
"stackable": true
"stackable": false
},
"jew": {
"name": "Jewel",
"class": "misc",
"type": "jewl",
"stackable": true
"stackable": false
},
"ice": {
"name": "Malah's Potion",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"0sc": {
"name": "Scroll of Knowledge",
"class": "misc",
"type": "scro",
"stackable": true
"stackable": false
},
"tr2": {
"name": "Scroll of Resistance",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"pk1": {
"name": "Key of Terror",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"pk2": {
"name": "Key of Hate",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"pk3": {
"name": "Key of Destruction",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"dhn": {
"name": "Diablo's Horn",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"bey": {
"name": "Baal's Eye",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"mbr": {
"name": "Mephisto's Brain",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"toa": {
"name": "Token of Absolution",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"tes": {
"name": "Twisted Essence of Suffering",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"ceh": {
"name": "Charged Essense of Hatred",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"bet": {
"name": "Burning Essence of Terror",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"fed": {
"name": "Festering Essence of Destruction",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
},
"std": {
"name": "Standard of Heroes",
"class": "misc",
"type": "ques",
"stackable": true
"stackable": false
}
}

View File

@@ -118,3 +118,9 @@ class ParseItemTest(unittest.TestCase):
data = bytes.fromhex("10208000054814dddb852a79b4708640408096ff")
data, item = parse_item(data)
self.assertEqual(data, b"")
def test_token_of_absolution(self):
# this is one of the items that had stackable "0" instead of ""
data = bytes.fromhex("100080000524d4fc5f308dc1e10908fe03")
data, item = parse_item(data)
self.assertEqual(data, b"")