From 42e17f3ba9152ebc1b8abce54885df67c66c5ae0 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 26 Jan 2020 00:34:31 +0100 Subject: [PATCH] bug 2221: buildings cannot exceed maxsize. * enable the allies.lua tests --- res/translations/strings.en.po | 2 +- scripts/tests/e2/buildings.lua | 19 +++++++++++++++++++ scripts/tests/e2/init.lua | 4 +++- src/kernel/build.c | 22 +++++----------------- 4 files changed, 28 insertions(+), 19 deletions(-) diff --git a/res/translations/strings.en.po b/res/translations/strings.en.po index 0eb8d3a37..eae203dbd 100644 --- a/res/translations/strings.en.po +++ b/res/translations/strings.en.po @@ -5519,7 +5519,7 @@ msgstr "aquarians" msgctxt "iteminfo" msgid "fairyboot" -msgstr "These leather boots are embroidere with unicorn hair and allow their wearer to walk at twice his normal speed." +msgstr "These leather boots are embroidered with unicorn hair and allow their wearer to walk at twice his normal speed." msgctxt "spell" msgid "skillmod" diff --git a/scripts/tests/e2/buildings.lua b/scripts/tests/e2/buildings.lua index eb49f0ee2..845c4ba7d 100644 --- a/scripts/tests/e2/buildings.lua +++ b/scripts/tests/e2/buildings.lua @@ -29,6 +29,25 @@ function test_castle_names() assert_equal("citadel", b:get_typename(6250)) end +function test_build_tunnel_limited() + -- bug 2221 + local r = region.create(0, 0, "plain") + local b = building.create(r, "tunnel") + local f = faction.create('human') + local u = unit.create(f, r, 2) + u:set_skill('building', 6, true) + u:add_item('stone', 22) + u:add_item('log', 10) + u:add_item('iron', 2) + u:add_item('money', 700) + u.building = b + u.name = 'Xolgrim' + u:add_order('MACHE 2 BURG ' .. itoa36(b.id)) + b.size = 99 + process_orders() + assert_equal(100, b.size) +end + function test_build_castle_one_stage() local r = region.create(0, 0, 'plain') local f = faction.create('human') diff --git a/scripts/tests/e2/init.lua b/scripts/tests/e2/init.lua index 0f377a991..3bd09bafc 100644 --- a/scripts/tests/e2/init.lua +++ b/scripts/tests/e2/init.lua @@ -1,3 +1,6 @@ +require 'tests.e2.buildings' +require 'tests.e2.allies' +require 'tests.e2.quit' require 'tests.e2.movement' require 'tests.e2.carts' require 'tests.e2.quit' @@ -5,7 +8,6 @@ require 'tests.e2.astral' require 'tests.e2.spells' require 'tests.e2.e2features' require 'tests.e2.insects' -require 'tests.e2.buildings' require 'tests.e2.production' require 'tests.e2.adamantium' require 'tests.e2.undead' diff --git a/src/kernel/build.c b/src/kernel/build.c index 7e97819dc..3eb9870de 100644 --- a/src/kernel/build.c +++ b/src/kernel/build.c @@ -810,25 +810,13 @@ build_building(unit * u, const building_type * btype, int id, int want, order * } built = b->size; } - if (n <= 0 || n == INT_MAX) { - if (b == NULL) { - if (btype->maxsize > 0) { - n = btype->maxsize - built; - } - else { - n = INT_MAX; - } - } - else { - if (b->type->maxsize > 0) { - n = b->type->maxsize - built; - } - else { - n = INT_MAX; - } + + if (btype->maxsize > 0) { + int remain = btype->maxsize - built; + if (remain < n) { + n = remain; } } - built = build_stages(u, btype, built, n, basesk, &skills); if (built < 0) {