From 1494507f4a62546f3ef135afd9947e6a52527f45 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Tue, 19 Jan 2010 08:04:27 +0000 Subject: [PATCH] http://bugs.eressea.de/view.php?id=1696 - fixed a bug in reading spelllists - fixed elven-limit on greatbow - fixed a crashbug --- src/common/kernel/magic.c | 6 +++--- src/common/kernel/magic.h | 2 +- src/common/kernel/save.c | 2 +- src/common/kernel/unit.c | 2 +- src/scripts/eressea/modules.lua | 1 + src/scripts/eressea/rules.lua | 8 ++++++++ 6 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 src/scripts/eressea/rules.lua diff --git a/src/common/kernel/magic.c b/src/common/kernel/magic.c index 56e58dea0..5cd7e9884 100644 --- a/src/common/kernel/magic.c +++ b/src/common/kernel/magic.c @@ -211,7 +211,7 @@ int FactionSpells(void) return rules_factionspells; } -void read_spellist(struct spell_list ** slistp, struct storage * store) +void read_spellist(struct spell_list ** slistp, magic_t mtype, struct storage * store) { for (;;) { spell * sp; @@ -224,7 +224,7 @@ void read_spellist(struct spell_list ** slistp, struct storage * store) } else { store->r_tok_buf(store, spname, sizeof(spname)); if (strcmp(spname, "end")==0) break; - sp = find_spell(M_NONE, spname); + sp = find_spell(mtype, spname); } if (sp!=NULL) { add_spell(slistp, sp); @@ -272,7 +272,7 @@ read_mage(attrib * a, struct storage * store) } } } - read_spellist(&mage->spells, store); + read_spellist(&mage->spells, mage->magietyp, store); return AT_READ_OK; } diff --git a/src/common/kernel/magic.h b/src/common/kernel/magic.h index 236ddb6c1..18ed49644 100644 --- a/src/common/kernel/magic.h +++ b/src/common/kernel/magic.h @@ -383,7 +383,7 @@ extern int FactionSpells(void); extern struct spell_list ** get_spelllist(struct sc_mage * mage, struct faction * f); extern void write_spelllist(const struct spell_list * slist, struct storage * store); -extern void read_spellist(struct spell_list ** slistp, struct storage * store); +extern void read_spellist(struct spell_list ** slistp, magic_t mtype, struct storage * store); extern double MagicPower(void); #ifdef __cplusplus diff --git a/src/common/kernel/save.c b/src/common/kernel/save.c index c0bb5ef38..bc3610451 100644 --- a/src/common/kernel/save.c +++ b/src/common/kernel/save.c @@ -1298,7 +1298,7 @@ readfaction(struct storage * store) read_groups(store, f); f->spellbook = NULL; if (store->version>=REGIONOWNER_VERSION) { - read_spellist(&f->spellbook, store); + read_spellist(&f->spellbook, f->magiegebiet, store); } return f; } diff --git a/src/common/kernel/unit.c b/src/common/kernel/unit.c index 9eba732d9..803461ef9 100644 --- a/src/common/kernel/unit.c +++ b/src/common/kernel/unit.c @@ -975,11 +975,11 @@ transfermen(unit * u, unit * u2, int n) sn->level = (unsigned char)level; sn->weeks = (unsigned char)weeks; assert(sn->weeks>0 && sn->weeks<=sn->level*2+1); + assert(u2->number!=0 || (sn->level==sv->level && sn->weeks==sv->weeks)); } else if (sn) { remove_skill(u2, sk); sn = NULL; } - assert(u2->number!=0 || (sn->level==sv->level && sn->weeks==sv->weeks)); } a = a_find(u->attribs, &at_effect); while (a && a->type==&at_effect) { diff --git a/src/scripts/eressea/modules.lua b/src/scripts/eressea/modules.lua index 35788a6b8..9fe92afce 100644 --- a/src/scripts/eressea/modules.lua +++ b/src/scripts/eressea/modules.lua @@ -3,6 +3,7 @@ require "eressea.eternath" require "eressea.wedding-jadee" require "eressea.ponnuki" require "eressea.items" +require "eressea.rules" -- require "eressea.10years" require "eressea.xmas2004" require "eressea.xmas2005" diff --git a/src/scripts/eressea/rules.lua b/src/scripts/eressea/rules.lua new file mode 100644 index 000000000..5866a8ffc --- /dev/null +++ b/src/scripts/eressea/rules.lua @@ -0,0 +1,8 @@ +function item_canuse(u, iname) + local race = u.race + if iname=="greatbow" then + -- only elves use greatbow + return race=="elf" + end + return true +end