diff --git a/src/common/gamecode/creport.c b/src/common/gamecode/creport.c index c9286d260..6219b0b2c 100644 --- a/src/common/gamecode/creport.c +++ b/src/common/gamecode/creport.c @@ -928,6 +928,20 @@ show_allies_cr(FILE * F, const faction * f, const ally * sf) } } +/* prints allies */ +static void +show_alliances_cr(FILE * F, const faction * f) +{ + if (f->alliance) { + alliance * al = f->alliance; + assert(al->leader); + fprintf(F, "ALLIANCE %d\n", al->id); + fprintf(F, "\"%s\";name\n", al->name); + fprintf(F, "%d;leader\n", al->leader->no); + fprintf(F, "%d;leader\n", al->leader->no); + } +} + /* prints all visible spells in a region */ static void show_active_spells(const region * r) @@ -957,7 +971,6 @@ cr_find_address(FILE * F, const faction * uf, const faction_list * addresses) fprintf(F, "\"%s\";locale\n", locale_name(f->locale)); if (f->alliance!=NULL && f->alliance==uf->alliance) { fprintf(F, "%d;alliance\n", f->alliance->id); - fprintf(F, "\"%s\";alliancename\n", f->alliance->name); } } flist = flist->next; @@ -1344,8 +1357,14 @@ report_computer(const char * filename, report_context * ctx, const char * charse fprintf(F, "\"%s\";mailto\n", mailto); fprintf(F, "\"%s\";mailcmd\n", locale_string(f->locale, "mailcmd")); } + + show_alliances_cr(F, f); + fprintf(F, "PARTEI %d\n", f->no); fprintf(F, "\"%s\";locale\n", locale_name(f->locale)); + if (f->alliance) { + fprintf(F, "%d;alliance\n", f->alliance->id); + } fprintf(F, "%d;age\n", f->age); fprintf(F, "%d;Optionen\n", f->options); #if SCORE_MODULE diff --git a/src/common/gamecode/report.c b/src/common/gamecode/report.c index 950482fbc..c252a2747 100644 --- a/src/common/gamecode/report.c +++ b/src/common/gamecode/report.c @@ -2051,10 +2051,12 @@ report_plaintext(const char * filename, report_context * ctx, const char * chars centre(F, buf, true); if (f->race == new_race[RC_HUMAN]) { int maxmig = count_maxmigrants(f); - m = msg_message("nr_migrants", "units maxunits", count_migrants(f), maxmig); - nr_render(m, f->locale, buf, sizeof(buf), f); - msg_release(m); - centre(F, buf, true); + if (maxmig>0) { + m = msg_message("nr_migrants", "units maxunits", count_migrants(f), maxmig); + nr_render(m, f->locale, buf, sizeof(buf), f); + msg_release(m); + centre(F, buf, true); + } } { int maxh = maxheroes(f); diff --git a/src/common/kernel/eressea.c b/src/common/kernel/eressea.c index edecf8c4a..c000eab7a 100644 --- a/src/common/kernel/eressea.c +++ b/src/common/kernel/eressea.c @@ -1223,15 +1223,23 @@ count_migrants (const faction * f) int count_maxmigrants(const faction * f) { - int x = 0; - if (f->race == new_race[RC_HUMAN]) { - int nsize = count_all(f); - if (nsize>0) { - x = (int)(log10(nsize / 50.0) * 20); - if (x < 0) x = 0; - } + static int migrants = -1; + + if (migrants<0) { + migrants = get_param_int(global.parameters, "rules.migrants", INT_MAX); } - return x; + if (migrants==INT_MAX) { + int x = 0; + if (f->race == new_race[RC_HUMAN]) { + int nsize = count_all(f); + if (nsize>0) { + x = (int)(log10(nsize / 50.0) * 20); + if (x < 0) x = 0; + } + } + return x; + } + return migrants; } void diff --git a/src/common/kernel/reports.c b/src/common/kernel/reports.c index 8bc4e8bd4..b0d8d952f 100644 --- a/src/common/kernel/reports.c +++ b/src/common/kernel/reports.c @@ -944,6 +944,13 @@ get_addresses(report_context * ctx) flist->data = ctx->f; + if (ctx->f->alliance) { + faction_list * member = ctx->f->alliance->members; + for (;member;member=member->next) { + add_faction(&flist, member->data); + } + } + for (r=ctx->first;sr==NULL && r!=ctx->last;r=r->next) { sr = find_seen(ctx->seen, r); } diff --git a/src/res/e3a.xml b/src/res/e3a.xml index f00a07f1c..7d61daf0e 100644 --- a/src/res/e3a.xml +++ b/src/res/e3a.xml @@ -138,6 +138,7 @@ +