From 8b0f62f71e59f2559511069b0aeaed0a0a3eb36c Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Sun, 17 Dec 2023 17:43:54 -0800 Subject: [PATCH] don't allow creeating x0 stacks with $item --- src/ItemNameIndex.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/ItemNameIndex.cc b/src/ItemNameIndex.cc index f910ed5d..490af81a 100644 --- a/src/ItemNameIndex.cc +++ b/src/ItemNameIndex.cc @@ -363,11 +363,12 @@ std::string ItemNameIndex::describe_item( } ItemData ItemNameIndex::parse_item_description(Version version, const std::string& desc) const { + ItemData ret; try { - return this->parse_item_description_phase(version, desc, false); + ret = this->parse_item_description_phase(version, desc, false); } catch (const exception& e1) { try { - return this->parse_item_description_phase(version, desc, true); + ret = this->parse_item_description_phase(version, desc, true); } catch (const exception& e2) { try { string data = parse_data_string(desc); @@ -381,14 +382,12 @@ ItemData ItemNameIndex::parse_item_description(Version version, const std::strin throw runtime_error("item code too long"); } - ItemData ret; if (data.size() <= 12) { memcpy(ret.data1.data(), data.data(), data.size()); } else { memcpy(ret.data1.data(), data.data(), 12); memcpy(ret.data2.data(), data.data() + 12, data.size() - 12); } - return ret; } catch (const exception& ed) { if (strcmp(e1.what(), e2.what())) { throw runtime_error(string_printf("cannot parse item description (as text 1: %s) (as text 2: %s) (as data: %s)", e1.what(), e2.what(), ed.what())); @@ -398,6 +397,10 @@ ItemData ItemNameIndex::parse_item_description(Version version, const std::strin } } } + if (ret.stack_size() == 0) { + ret.data1[5] = 1; + } + return ret; } ItemData ItemNameIndex::parse_item_description_phase(Version version, const std::string& description, bool skip_special) const {