From de7248fb5a6ecc1fefa11a396394cfa6ac48dedb Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 13 Jul 2018 22:45:17 +0200 Subject: [PATCH] BUG 2457: Einheiten werden bei Durchreise nicht angezeigt. --- clibs | 2 +- src/reports.c | 6 ++- src/reports.test.c | 112 +++++++++++++++++++++++++++------------------ storage | 2 +- 4 files changed, 74 insertions(+), 48 deletions(-) diff --git a/clibs b/clibs index f9842e07a..d86c85254 160000 --- a/clibs +++ b/clibs @@ -1 +1 @@ -Subproject commit f9842e07a442c5453c270badf25ab72633b4edf5 +Subproject commit d86c8525489d7f11b7ba13e101bb59ecf160b871 diff --git a/src/reports.c b/src/reports.c index 06f6b0084..c30587534 100644 --- a/src/reports.c +++ b/src/reports.c @@ -2446,8 +2446,10 @@ bool visible_unit(const unit *u, const faction *f, int stealthmod, seen_mode mod return true; } else { - if (stealthmod > INT_MIN && (mode == seen_lighthouse || mode >= seen_unit)) { - return cansee(f, u->region, u, stealthmod); + if (stealthmod > INT_MIN && mode >= seen_lighthouse) { + if (mode != seen_travel || u->building || u->ship || is_guard(u)) { + return cansee(f, u->region, u, stealthmod); + } } } return false; diff --git a/src/reports.test.c b/src/reports.test.c index 2b22782ae..120af4118 100644 --- a/src/reports.test.c +++ b/src/reports.test.c @@ -1,7 +1,7 @@ #include #include "reports.h" -#include "kernel/calendar.h" +#include "guard.h" #include "keyword.h" #include "lighthouse.h" #include "laws.h" @@ -10,28 +10,29 @@ #include "spy.h" #include "travelthru.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include "kernel/ally.h" +#include "kernel/calendar.h" +#include "kernel/config.h" +#include "kernel/building.h" +#include "kernel/faction.h" +#include "kernel/item.h" +#include "kernel/race.h" +#include "kernel/region.h" +#include "kernel/ship.h" +#include "kernel/terrain.h" +#include "kernel/unit.h" +#include "kernel/spell.h" +#include "kernel/spellbook.h" +#include "kernel/terrain.h" -#include -#include -#include -#include +#include "util/attrib.h" +#include "util/language.h" +#include "util/lists.h" +#include "util/message.h" -#include -#include -#include +#include "attributes/attributes.h" +#include "attributes/key.h" +#include "attributes/otherfaction.h" #include #include @@ -824,38 +825,61 @@ static void test_newbie_warning(CuTest *tc) { } static void test_visible_unit(CuTest *tc) { - unit *u2; + unit *u; faction *f; ship *sh; + building *b; + race *rc; test_setup(); f = test_create_faction(NULL); - u2 = test_create_unit(test_create_faction(NULL), test_create_region(0, 0, NULL)); - sh = test_create_ship(u2->region, NULL); + rc = test_create_race("smurf"); + rc->flags |= RCF_UNARMEDGUARD; + u = test_create_unit(test_create_faction(rc), test_create_region(0, 0, NULL)); - CuAssertTrue(tc, cansee(f, u2->region, u2, 0)); - CuAssertTrue(tc, visible_unit(u2, f, 0, seen_unit)); - CuAssertTrue(tc, visible_unit(u2, f, 0, seen_spell)); - CuAssertTrue(tc, visible_unit(u2, f, 0, seen_battle)); - CuAssertTrue(tc, !visible_unit(u2, f, 0, seen_travel)); - CuAssertTrue(tc, !visible_unit(u2, f, 0, seen_none)); - CuAssertTrue(tc, !visible_unit(u2, f, 0, seen_neighbour)); + CuAssertTrue(tc, cansee(f, u->region, u, 0)); + CuAssertTrue(tc, visible_unit(u, f, 0, seen_unit)); + CuAssertTrue(tc, visible_unit(u, f, 0, seen_spell)); + CuAssertTrue(tc, visible_unit(u, f, 0, seen_battle)); + CuAssertTrue(tc, !visible_unit(u, f, 0, seen_travel)); + CuAssertTrue(tc, !visible_unit(u, f, 0, seen_none)); + CuAssertTrue(tc, !visible_unit(u, f, 0, seen_neighbour)); - CuAssertTrue(tc, visible_unit(u2, f, 0, seen_lighthouse)); - CuAssertTrue(tc, !visible_unit(u2, f, -2, seen_lighthouse)); - u2->ship = sh; - CuAssertTrue(tc, visible_unit(u2, f, -2, seen_lighthouse)); - u2->ship = NULL; + CuAssertTrue(tc, visible_unit(u, f, 0, seen_lighthouse)); + CuAssertTrue(tc, !visible_unit(u, f, -2, seen_lighthouse)); - set_level(u2, SK_STEALTH, 1); - CuAssertTrue(tc, !cansee(f, u2->region, u2, 0)); - CuAssertTrue(tc, cansee(f, u2->region, u2, 1)); + u->ship = sh = test_create_ship(u->region, NULL); + CuAssertTrue(tc, visible_unit(u, f, -2, seen_travel)); + CuAssertTrue(tc, visible_unit(u, f, -2, seen_lighthouse)); + u->ship = NULL; - u2->ship = sh; - CuAssertTrue(tc, visible_unit(u2, f, -2, seen_lighthouse)); - u2->ship = NULL; - CuAssertTrue(tc, visible_unit(u2, f, 1, seen_spell)); - CuAssertTrue(tc, visible_unit(u2, f, 1, seen_battle)); + setguard(u, true); + CuAssertTrue(tc, is_guard(u)); + CuAssertTrue(tc, visible_unit(u, f, -2, seen_travel)); + CuAssertTrue(tc, visible_unit(u, f, -2, seen_lighthouse)); + setguard(u, false); + + u->building = b = test_create_building(u->region, NULL); + CuAssertTrue(tc, visible_unit(u, f, -2, seen_travel)); + CuAssertTrue(tc, visible_unit(u, f, -2, seen_lighthouse)); + u->building = NULL; + + set_level(u, SK_STEALTH, 1); + CuAssertTrue(tc, !cansee(f, u->region, u, 0)); + CuAssertTrue(tc, cansee(f, u->region, u, 1)); + + u->ship = sh; + CuAssertTrue(tc, visible_unit(u, f, -2, seen_lighthouse)); + CuAssertTrue(tc, visible_unit(u, f, -2, seen_travel)); + u->ship = NULL; + + u->building = b; + CuAssertTrue(tc, visible_unit(u, f, -2, seen_lighthouse)); + CuAssertTrue(tc, visible_unit(u, f, -2, seen_travel)); + u->building = NULL; + + CuAssertTrue(tc, visible_unit(u, f, 1, seen_spell)); + CuAssertTrue(tc, visible_unit(u, f, 1, seen_battle)); test_teardown(); } diff --git a/storage b/storage index 5623ee652..0ef4b39e3 160000 --- a/storage +++ b/storage @@ -1 +1 @@ -Subproject commit 5623ee6527e97af20c7d8efc03800b6fe1579744 +Subproject commit 0ef4b39e39d8146d6ca323500a285c53843db988