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 @@
+