From e0e873044de40411716f51b8e8c90ef69b867350 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Mon, 30 Apr 2018 23:11:13 +0200 Subject: [PATCH] fix stone golems (assert). remove improvement logic from build(). --- scripts/tests/e2/e2features.lua | 6 +++--- src/kernel/build.c | 24 ++++-------------------- 2 files changed, 7 insertions(+), 23 deletions(-) diff --git a/scripts/tests/e2/e2features.lua b/scripts/tests/e2/e2features.lua index d9a7da4f8..0e8e3a24d 100644 --- a/scripts/tests/e2/e2features.lua +++ b/scripts/tests/e2/e2features.lua @@ -339,11 +339,11 @@ function test_stonegolems() u1:set_skill("building", 1) u2:set_skill("building", 1) --- test that no server crash occur +-- test that no server crash occurs u1:clear_orders() u1:add_order("Mache Burg") process_orders() - assert_equal(0 ,u1.number, "There shoud be no Stone Golems") + assert_equal(0, u1.number, "There should be no more stone golems") -- end test server crash -- test that Stone Golems build for four stones @@ -351,7 +351,7 @@ function test_stonegolems() u2:add_order("MACHE 4 BURG " .. itoa36(c1.id)) process_orders() assert_equal(230, c1.size, "resulting size should be 230") - assert_equal(1 ,u2.number, "There shoud be one Stone Golems") + assert_equal(1, u2.number, "There should be one stone golem") -- end test Stone Golems four stones end diff --git a/src/kernel/build.c b/src/kernel/build.c index c36c21a7f..e2f4f9503 100644 --- a/src/kernel/build.c +++ b/src/kernel/build.c @@ -512,15 +512,16 @@ int build(unit * u, const construction * ctype, int completed, int want, int ski if (want <= 0) return 0; - if (con == NULL) + if (con == NULL) { return ENOMATERIALS; - if (con->improvement == NULL && completed == con->maxsize) + } + if (completed == con->maxsize) { return ECOMPLETE; + } if (con->skill != NOSKILL) { int effsk; int dm = get_effect(u, oldpotiontype[P_DOMORE]); - assert(u->number); basesk = effskill(u, con->skill, 0); if (basesk == 0) return ENEEDSKILL; @@ -544,23 +545,6 @@ int build(unit * u, const construction * ctype, int completed, int want, int ski for (; want > 0 && skills > 0;) { int err, n; - /* skip over everything that's already been done: - * type->improvement==NULL means no more improvements, but no size limits - * type->improvement==type means build another object of the same time - * while material lasts type->improvement==x means build x when type - * is finished */ - while (con && con->improvement && - con->improvement != con && - con->maxsize > 0 && con->maxsize <= completed) { - completed -= con->maxsize; - con = con->improvement; - } - if (con == NULL) { - if (made == 0) - return ECOMPLETE; - break; /* completed */ - } - /* Hier ist entweder maxsize == -1, oder completed < maxsize. * Andernfalls ist das Datenfile oder sonstwas kaputt... * (enno): Nein, das ist f�r Dinge, bei denen die n�chste Ausbaustufe