summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Longbons <b.r.longbons@gmail.com>2015-01-13 12:07:15 -0800
committerBen Longbons <b.r.longbons@gmail.com>2015-01-13 12:07:15 -0800
commit8f3cbcd68f95e1977e0fe0c9fdc40de2c2c9edee (patch)
tree4d41fa0905865c81d9577912d4dcaa092bc046b1
parent94ec7fbe018d194a96ce915692947296ff2a258b (diff)
downloadtmwa-8f3cbcd68f95e1977e0fe0c9fdc40de2c2c9edee.tar.gz
tmwa-8f3cbcd68f95e1977e0fe0c9fdc40de2c2c9edee.tar.bz2
tmwa-8f3cbcd68f95e1977e0fe0c9fdc40de2c2c9edee.tar.xz
tmwa-8f3cbcd68f95e1977e0fe0c9fdc40de2c2c9edee.zip
Fix value_multiply shop items
-rw-r--r--src/ast/npc.cpp5
-rw-r--r--src/ast/npc_test.cpp17
2 files changed, 15 insertions, 7 deletions
diff --git a/src/ast/npc.cpp b/src/ast/npc.cpp
index 6b75503..e9c3464 100644
--- a/src/ast/npc.cpp
+++ b/src/ast/npc.cpp
@@ -140,13 +140,18 @@ namespace npc
{
return Err(item.data.name.span.error_str("item name problem (too long?)"_s));
}
+ item.data.value_multiply = false;
if (value.startswith('-'))
{
item.data.value.span.begin.warning("Shop value multiplier should use '*' instead of '-' now"_s);
+ item.data.value_multiply = true;
+ item.data.value.span.begin.column += 1;
value = value.xslice_t(1);
}
else if (value.startswith('*'))
{
+ item.data.value_multiply = true;
+ item.data.value.span.begin.column += 1;
value = value.xslice_t(1);
}
if (!extract(value, &item.data.value.data))
diff --git a/src/ast/npc_test.cpp b/src/ast/npc_test.cpp
index 7cced35..a753623 100644
--- a/src/ast/npc_test.cpp
+++ b/src/ast/npc_test.cpp
@@ -134,9 +134,9 @@ namespace npc
{
// 1 2 3 4 5
//2345678901234567890123456789012345678901234567890123456789
- "map.gat,1,2,3|shop|Flower Shop|4,5:6,Named:7,Spaced :8"_s,
- "map.gat,1,2,3|shop|Flower Shop|4,5:6,Named:7,Spaced :8\n"_s,
- "map.gat,1,2,3|shop|Flower Shop|4,5:6,Named:7,Spaced :8{"_s,
+ "map.gat,1,2,3|shop|Flower Shop|4,5:6,Named:7,Spaced :*8"_s,
+ "map.gat,1,2,3|shop|Flower Shop|4,5:6,Named:7,Spaced :*8\n"_s,
+ "map.gat,1,2,3|shop|Flower Shop|4,5:6,Named:7,Spaced :*8{"_s,
// no optional fields in shop
};
for (auto input : inputs)
@@ -145,7 +145,7 @@ namespace npc
auto res = TRY_UNWRAP(parse_top(lr), FAIL());
EXPECT_TRUE(res.get_success().is_some());
auto top = TRY_UNWRAP(std::move(res.get_success()), FAIL());
- EXPECT_SPAN(top.span, 1,1, 1,54);
+ EXPECT_SPAN(top.span, 1,1, 1,55);
auto p = top.get_if<Shop>();
EXPECT_TRUE(p);
if (p)
@@ -163,22 +163,25 @@ namespace npc
EXPECT_EQ(p->name.data, stringish<NpcName>("Flower Shop"_s));
EXPECT_SPAN(p->npc_class.span, 1,32, 1,32);
EXPECT_EQ(p->npc_class.data, wrap<Species>(4));
- EXPECT_SPAN(p->items.span, 1,34, 1,54);
+ EXPECT_SPAN(p->items.span, 1,34, 1,55);
EXPECT_EQ(p->items.data.size(), 3);
EXPECT_SPAN(p->items.data[0].span, 1,34, 1,36);
EXPECT_SPAN(p->items.data[0].data.name.span, 1,34, 1,34);
EXPECT_EQ(p->items.data[0].data.name.data, stringish<ItemName>("5"_s));
+ EXPECT_EQ(p->items.data[0].data.value_multiply, false);
EXPECT_SPAN(p->items.data[0].data.value.span, 1,36, 1,36);
EXPECT_EQ(p->items.data[0].data.value.data, 6);
EXPECT_SPAN(p->items.data[1].span, 1,38, 1,44);
EXPECT_SPAN(p->items.data[1].data.name.span, 1,38, 1,42);
EXPECT_EQ(p->items.data[1].data.name.data, stringish<ItemName>("Named"_s));
+ EXPECT_EQ(p->items.data[1].data.value_multiply, false);
EXPECT_SPAN(p->items.data[1].data.value.span, 1,44, 1,44);
EXPECT_EQ(p->items.data[1].data.value.data, 7);
- EXPECT_SPAN(p->items.data[2].span, 1,46, 1,54);
+ EXPECT_SPAN(p->items.data[2].span, 1,46, 1,55);
EXPECT_SPAN(p->items.data[2].data.name.span, 1,46, 1,52);
EXPECT_EQ(p->items.data[2].data.name.data, stringish<ItemName>("Spaced"_s));
- EXPECT_SPAN(p->items.data[2].data.value.span, 1,54, 1,54);
+ EXPECT_EQ(p->items.data[2].data.value_multiply, true);
+ EXPECT_SPAN(p->items.data[2].data.value.span, 1,55, 1,55);
EXPECT_EQ(p->items.data[2].data.value.data, 8);
}
}