From e9084d967894ca7948fd5954845c6659379303c0 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 7 Nov 2014 22:58:29 +0100 Subject: [PATCH] when free_gamedata, also unhash all factions. speed up is_monsters(). --- src/kernel/faction.c | 8 ++++++-- src/kernel/faction.h | 2 +- src/kernel/unit.c | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/kernel/faction.c b/src/kernel/faction.c index b61db7297..8204afd67 100755 --- a/src/kernel/faction.c +++ b/src/kernel/faction.c @@ -68,6 +68,7 @@ faction *factions; */ void free_faction(faction * f) { + funhash(f); if (f->msgs) free_messagelist(f->msgs); while (f->battles) { @@ -113,9 +114,12 @@ void funhash(faction * f) { int index = f->no % FMAXHASH; faction **fp = factionhash + index; - while (*fp && (*fp) != f) + while (*fp && (*fp) != f) { fp = &(*fp)->nexthash; - *fp = f->nexthash; + } + if (*fp == f) { + *fp = f->nexthash; + } } static faction *ffindhash(int no) diff --git a/src/kernel/faction.h b/src/kernel/faction.h index 91c98546a..0ec42fe5c 100644 --- a/src/kernel/faction.h +++ b/src/kernel/faction.h @@ -54,7 +54,7 @@ extern "C" { #define FFL_SAVEMASK (FFL_DEFENDER|FFL_NEWID|FFL_GM|FFL_NPC|FFL_DBENTRY|FFL_NOIDLEOUT) -#define is_monsters(f) (f && f==get_monsters()) +#define is_monsters(f) (f && fval(f, FFL_NPC) && f==get_monsters()) typedef struct faction { struct faction *next; diff --git a/src/kernel/unit.c b/src/kernel/unit.c index affd4471d..87648994b 100644 --- a/src/kernel/unit.c +++ b/src/kernel/unit.c @@ -733,7 +733,7 @@ void set_level(unit * u, skill_t sk, int value) { skill *sv = u->skills; - assert(sk != SK_MAGIC || !u->faction || is_monsters(u->faction) || u->number == 1); + assert(sk != SK_MAGIC || !u->faction || u->number == 1 || is_monsters(u->faction)); if (!skill_enabled(sk)) return;