From 3567e3f783205ebfb3d5fbef353128eff41bd7d3 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Wed, 21 Feb 2007 19:59:27 +0000 Subject: [PATCH] http://eressea.upb.de/mantis/view.php?id=1141 "Partei fehlt im Report" Behandlung von Turmregionen. Hoffentlich richtig. --- src/common/gamecode/creport.c | 22 +++++--------------- src/common/gamecode/report.c | 38 ++++++++--------------------------- src/common/kernel/reports.c | 35 +++++++++++++++++++++++++++++--- src/common/kernel/reports.h | 1 + src/common/kernel/save.c | 6 +++--- 5 files changed, 49 insertions(+), 53 deletions(-) diff --git a/src/common/gamecode/creport.c b/src/common/gamecode/creport.c index 27c8d0115..9c65bd74d 100644 --- a/src/common/gamecode/creport.c +++ b/src/common/gamecode/creport.c @@ -71,6 +71,7 @@ #include #include #include +#include #include #include #include @@ -1252,7 +1253,6 @@ report_computer(const char * filename, report_context * ctx) } for (;sr!=NULL;sr=sr->next) { region * r = sr->r; - int modifier = 0; const char * tname; if (!rplane(r)) { @@ -1288,6 +1288,7 @@ report_computer(const char * filename, report_context * ctx) if (sr->mode == see_neighbour) { cr_borders(ctx->seen, r, f, sr->mode, F); } else { + int stealthmod = stealth_modifier(sr->mode); #define RESOURCECOMPAT char cbuf[8192], *pos = cbuf; #ifdef RESOURCECOMPAT @@ -1456,23 +1457,10 @@ report_computer(const char * filename, report_context * ctx) /* visible units */ for (u = r->units; u; u = u->next) { - boolean visible = true; - switch (sr->mode) { - case see_unit: - modifier=0; - break; - case see_far: - case see_lighthouse: - modifier = -2; - break; - case see_travel: - modifier = -1; - break; - default: - visible=false; + + if (u->building || u->ship || (stealthmod>INT_MIN && cansee(f, r, u, stealthmod))) { + cr_output_unit(F, r, f, u, sr->mode); } - if (u->building || u->ship || (visible && cansee(f, r, u, modifier))) - cr_output_unit(F, r, f, u, sr->mode); } } /* region traversal */ } diff --git a/src/common/gamecode/report.c b/src/common/gamecode/report.c index f08a729b6..86b8d8dd9 100644 --- a/src/common/gamecode/report.c +++ b/src/common/gamecode/report.c @@ -1989,29 +1989,12 @@ report_plaintext(const char * filename, report_context * ctx) } for (;sr!=NULL;sr=sr->next) { region * r = sr->r; - boolean unit_in_region = false; - boolean durchgezogen_in_region = false; - int turm_sieht_region = false; + int stealthmod = stealth_modifier(sr->mode); - switch (sr->mode) { - case see_lighthouse: - turm_sieht_region = true; - break; - case see_far: - break; - case see_travel: - durchgezogen_in_region = true; - break; - case see_unit: - unit_in_region = true; - anyunits = true; - break; - default: - continue; - } + if (sr->modemode==see_unit) { describe(F, r, 0, f); if (!TradeDisabled() && !fval(r->terrain, SEA_REGION) && rpeasants(r)/TRADE_FRACTION > 0) { rnl(F); @@ -2026,7 +2009,7 @@ report_plaintext(const char * filename, report_context * ctx) guards(F, r, f); durchreisende(F, r, f); } - else if (turm_sieht_region) { + else if (sr->mode==see_lighthouse) { describe(F, r, 2, f); durchreisende(F, r, f); } else { @@ -2036,12 +2019,12 @@ report_plaintext(const char * filename, report_context * ctx) } /* Statistik */ - if (wants_stats && unit_in_region == 1) + if (wants_stats && sr->mode==see_unit) statistics(F, r, f); /* Nachrichten an REGION in der Region */ - if (unit_in_region || durchgezogen_in_region) { + if (sr->mode==see_unit || sr->mode==see_travel) { message_list * mlist = r_getmessages(r, f); rp_messages(F, r->msgs, f, 0, true); if (mlist) rp_messages(F, mlist, f, 0, true); @@ -2055,15 +2038,10 @@ report_plaintext(const char * filename, report_context * ctx) /* Restliche Einheiten */ - if (sr->mode>=see_lighthouse) { + if (stealthmod>INT_MIN) { for (u = r->units; u; u = u->next) { if (!u->building && !u->ship) { - if ((u->faction == f) || - (unit_in_region && cansee(f, r, u, 0)) || - (durchgezogen_in_region && cansee(f, r, u, -1)) || - (sr->mode==see_far && cansee(f, r, u, -2)) || - (turm_sieht_region && cansee(f, r, u, -2))) - { + if (u->faction == f || cansee(f, r, u, stealthmod)) { if (dh == 0 && !(rbuildings(r) || r->ships)) { dh = 1; /* rnl(F); */ diff --git a/src/common/kernel/reports.c b/src/common/kernel/reports.c index fd17ea117..e7e6ac47d 100644 --- a/src/common/kernel/reports.c +++ b/src/common/kernel/reports.c @@ -47,6 +47,7 @@ /* libc includes */ #include +#include #include #include #include @@ -824,6 +825,22 @@ add_faction(faction_list ** flist, faction * sf) } } +int +stealth_modifier(int seen_mode) +{ + switch (seen_mode) { + case see_unit: + return 0; + case see_far: + case see_lighthouse: + return -2; + case see_travel: + return -1; + default: + return INT_MIN; + } +} + static void get_addresses(report_context * ctx) { @@ -840,8 +857,20 @@ get_addresses(report_context * ctx) } for (;sr!=NULL;sr=sr->next) { + int stealthmod = stealth_modifier(sr->mode); r = sr->r; - if (sr->mode==see_travel) { + if (sr->mode==see_lighthouse) { + unit * u = r->units; + for (;u;u=u->next) { + faction * sf = visible_faction(ctx->f, u); + if (lastf!=sf) { + if (u->building || u->ship || (stealthmod>INT_MIN && cansee(ctx->f, r, u, stealthmod))) { + add_faction(&flist, sf); + lastf = sf; + } + } + } + } if (sr->mode==see_travel) { unit * u = r->units; while (u) { faction * sf = visible_faction(ctx->f, u); @@ -851,7 +880,7 @@ get_addresses(report_context * ctx) while (a && a->type==&at_travelunit) { unit * u2 = (unit*)a->data.v; if (u2->faction==ctx->f) { - if (cansee_unit(u2, u, 0)) { + if (cansee_unit(u2, u, stealthmod)) { add_faction(&flist, sf); lastf = sf; break; @@ -868,7 +897,7 @@ get_addresses(report_context * ctx) if (u->faction!=ctx->f) { faction * sf = visible_faction(ctx->f, u); boolean ballied = sf && sf!=ctx->f && sf!=lastf - && !fval(u, UFL_PARTEITARNUNG) && cansee(ctx->f, r, u, 0); + && !fval(u, UFL_PARTEITARNUNG) && cansee(ctx->f, r, u, stealthmod); if (ballied || ALLIED(ctx->f, sf)) { add_faction(&flist, sf); lastf = sf; diff --git a/src/common/kernel/reports.h b/src/common/kernel/reports.h index ab8e211b3..2befafe71 100644 --- a/src/common/kernel/reports.h +++ b/src/common/kernel/reports.h @@ -67,6 +67,7 @@ enum { see_unit, see_battle }; +extern int stealth_modifier(int seen_mode); typedef struct seen_region { struct seen_region * nextHash; diff --git a/src/common/kernel/save.c b/src/common/kernel/save.c index 7fadd94e1..8fd1fccb3 100644 --- a/src/common/kernel/save.c +++ b/src/common/kernel/save.c @@ -1067,10 +1067,10 @@ readunit(FILE * F) orderp = &ord->next; ord = NULL; } else if (p==MAXPERSISTENT) { - log_error(("%s had %d or more persistent orders\n", unitname(u), MAXPERSISTENT)); + log_warning(("%s had %d or more persistent orders\n", unitname(u), MAXPERSISTENT)); } } else if (n==MAXORDERS) { - log_error(("%s had %d or more orders\n", unitname(u), MAXORDERS)); + log_warning(("%s had %d or more orders\n", unitname(u), MAXORDERS)); } if (ord!=NULL) free_order(ord); } @@ -1516,7 +1516,7 @@ readfaction(FILE * F) rds(F, &email); if (set_email(&f->email, email)!=0) { - log_error(("Invalid email address for faction %s: %s\n", itoa36(f->no), email)); + log_warning(("Invalid email address for faction %s: %s\n", itoa36(f->no), email)); set_email(&f->email, ""); } free(email);