From a75accfcd0434c68b87a3439ec812da757cf457d Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 21 May 2004 22:10:18 +0000 Subject: [PATCH] =?UTF-8?q?http://eressea.upb.de/mantis/bug=5Fview=5Fpage.?= =?UTF-8?q?php=3Fbug=5Fid=3D0000095=20Exploit,=20ZERST=C3=96RE=20strassen?= =?UTF-8?q?=20mehrfach?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/gamecode/economy.c | 81 +++++++++++++++++++---------------- 1 file changed, 45 insertions(+), 36 deletions(-) diff --git a/src/common/gamecode/economy.c b/src/common/gamecode/economy.c index 0ffaaa97c..deb0242e2 100644 --- a/src/common/gamecode/economy.c +++ b/src/common/gamecode/economy.c @@ -1260,51 +1260,60 @@ maintain_buildings(boolean crash) void economics(void) { - region *r; - unit *u; - strlist *S; + region *r; + unit *u; + strlist *S; - /* Geben vor Selbstmord (doquit)! Hier alle unmittelbaren Befehle. - * Rekrutieren vor allen Einnahmequellen. Bewachen JA vor Steuern - * eintreiben. */ + /* Geben vor Selbstmord (doquit)! Hier alle unmittelbaren Befehle. + * Rekrutieren vor allen Einnahmequellen. Bewachen JA vor Steuern + * eintreiben. */ - for (r = regions; r; r = r->next) if (r->units) { - request *recruitorders = NULL; + for (r = regions; r; r = r->next) if (r->units) { + request *recruitorders = NULL; - for (u = r->units; u; u = u->next) { - for (S = u->orders; S; S = S->next) { - switch (igetkeyword(S->s, u->faction->locale)) { + for (u = r->units; u; u = u->next) { + for (S = u->orders; S; S = S->next) { + strlist ** slist = &S->next; + switch (igetkeyword(S->s, u->faction->locale)) { + case K_DESTROY: + destroy(r, u, S->s); + while (*slist) { + strlist * scur = *slist; + const char * cmd = scur->s; + if (igetkeyword(cmd, u->faction->locale)==K_DESTROY) { + *slist = scur->next; + scur->next = NULL; + freestrlist(scur); + } else slist = &scur->next; + } + break; - case K_DESTROY: - destroy(r, u, S->s); - break; + case K_GIVE: + case K_LIEFERE: + dogive(r, u, S, 0); + break; - case K_GIVE: - case K_LIEFERE: - dogive(r, u, S, 0); - break; + case K_FORGET: + forgetskill(u); + break; - case K_FORGET: - forgetskill(u); - break; + } + } + } + /* RECRUIT orders */ - } - } - } - /* RECRUIT orders */ + for (u = r->units; u; u = u->next) { + for (S = u->orders; S; S = S->next) { + if (igetkeyword(S->s, u->faction->locale) == K_RECRUIT) { + recruit(r, u, S, &recruitorders); + break; + } + } + } - for (u = r->units; u; u = u->next) { - for (S = u->orders; S; S = S->next) { - if (igetkeyword(S->s, u->faction->locale) == K_RECRUIT) { - recruit(r, u, S, &recruitorders); - break; - } - } - } + if (recruitorders) expandrecruit(r, recruitorders); - if (recruitorders) expandrecruit(r, recruitorders); - - } + } } /* ------------------------------------------------------------- */