From af9a86efa7731c0c2e80b7f29c25d3d27cf35950 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 10 Feb 2006 21:15:08 +0000 Subject: [PATCH] some time ago when races were added to xml, the global familiarrace-list was broken. fixed. --- src/common/kernel/race.c | 22 ++++++++++++++++++---- src/common/kernel/race.h | 2 +- src/common/spells/spells.c | 1 + 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/common/kernel/race.c b/src/common/kernel/race.c index 63b4867d6..653faf81c 100644 --- a/src/common/kernel/race.c +++ b/src/common/kernel/race.c @@ -59,7 +59,24 @@ /** external variables **/ race * races; -race_list * familiarraces; + +race_list * +get_familiarraces(void) +{ + static int init = 0; + static race_list * familiarraces; + + if (!init) { + race * rc = races; + for (;rc!=NULL;rc=rc->next) { + if (rc->init_familiar!=NULL) { + racelist_insert(&familiarraces, rc); + } + } + init = false; + } + return familiarraces; +} void racelist_clear(struct race_list **rl) @@ -110,9 +127,6 @@ race * rc_add(race * rc) { rc->next = races; - if (rc->init_familiar!=NULL) { - racelist_insert(&familiarraces, rc); - } return races = rc; } diff --git a/src/common/kernel/race.h b/src/common/kernel/race.h index 2c055a331..05232d895 100644 --- a/src/common/kernel/race.h +++ b/src/common/kernel/race.h @@ -102,7 +102,7 @@ typedef struct race_list { extern void racelist_clear(struct race_list **rl); extern void racelist_insert(struct race_list **rl, const struct race *r); -extern struct race_list * familiarraces; +extern struct race_list * get_familiarraces(void); extern struct race * races; extern struct race * rc_find(const char *); diff --git a/src/common/spells/spells.c b/src/common/spells/spells.c index d791a080d..3cecfb174 100644 --- a/src/common/spells/spells.c +++ b/src/common/spells/spells.c @@ -521,6 +521,7 @@ select_familiar(const race * magerace, magic_t magiegebiet) assert(magerace->familiars[0]); if (rnd < 3) { + race_list * familiarraces = get_familiarraces(); unsigned int maxlen = listlen(familiarraces); if (maxlen>0) { race_list * rclist = familiarraces;