From 17bcb2d7a75867faa49d1f223c5476aa3c6e0a3c Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Thu, 28 Aug 2008 19:01:36 +0000 Subject: [PATCH] http://bugs.eressea.de/view.php?id=1481 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "Merkwürdiges Supermegamonster frisst Region leer" fixed error in mistletoe-zombie creation --- src/common/kernel/faction.c | 67 +++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 36 deletions(-) diff --git a/src/common/kernel/faction.c b/src/common/kernel/faction.c index aa493abde..7f9ad0077 100644 --- a/src/common/kernel/faction.c +++ b/src/common/kernel/faction.c @@ -225,7 +225,7 @@ void destroyfaction(faction * f) { region *rc; - unit *u; + unit *u = f->units; faction *ff; if (!f->alive) return; @@ -237,48 +237,43 @@ destroyfaction(faction * f) free(bm); } - for (u=f->units;u;u=u->nextF) { - region * r = u->region; - + while (u) { /* give away your stuff, make zombies if you cannot (quest items) */ - while (u) { - int result = gift_items(u, GIFT_FRIENDS|GIFT_PEASANTS); - if (result!=0) { - unit * zombie = u; - u = u->nextF; - make_zombie(zombie); - } else { - break; - } - } - if (u==NULL) continue; + int result = gift_items(u, GIFT_FRIENDS|GIFT_PEASANTS); + if (result!=0) { + unit * zombie = u; + u = u->nextF; + make_zombie(zombie); + } else { + region * r = u->region; - if (!fval(r->terrain, SEA_REGION) && !!playerrace(u->race)) { - const race * rc = u->race; - int m = rmoney(u->region); + if (!fval(r->terrain, SEA_REGION) && !!playerrace(u->race)) { + const race * rc = u->race; + int m = rmoney(r); - if ((rc->ec_flags & ECF_REC_ETHEREAL)==0) { - int p = rpeasants(u->region); - int h = rhorses(u->region); + if ((rc->ec_flags & ECF_REC_ETHEREAL)==0) { + int p = rpeasants(u->region); + int h = rhorses(u->region); - /* Personen gehen nur an die Bauern, wenn sie auch von dort - * stammen */ - if (rc->ec_flags & ECF_REC_HORSES) { /* Zentauren an die Pferde */ - h += u->number; - } else if (rc == new_race[RC_URUK]){ /* Orks zählen nur zur Hälfte */ - p += u->number/2; - } else { - p += u->number; + /* Personen gehen nur an die Bauern, wenn sie auch von dort + * stammen */ + if (rc->ec_flags & ECF_REC_HORSES) { /* Zentauren an die Pferde */ + h += u->number; + } else if (rc == new_race[RC_URUK]){ /* Orks zählen nur zur Hälfte */ + p += u->number/2; + } else { + p += u->number; + } + h += get_item(u, I_HORSE); + rsetpeasants(r, p); + rsethorses(r, h); } - h += get_item(u, I_HORSE); - rsetpeasants(r, p); - rsethorses(r, h); + m += get_money(u); + rsetmoney(r, m); } - m += get_money(u); - rsetmoney(r, m); - + set_number(u, 0); + u=u->nextF; } - set_number(u, 0); } f->alive = 0; /* no way! f->units = NULL; */