find_spellbyname sucht auch in fremden gebieten.

This commit is contained in:
Enno Rehling 2002-10-27 09:54:04 +00:00
parent eb214fee16
commit bb38c8c86a
3 changed files with 22 additions and 9 deletions

View File

@ -577,22 +577,36 @@ init_spellnames(const struct locale * lang, magic_t mtype)
return spellnames = sn; return spellnames = sn;
} }
static spell_names *
get_spellnames(const struct locale * lang, magic_t mtype)
{
spell_names * sn = spellnames;
while (sn) {
if (sn->mtype==mtype && sn->lang==lang) break;
sn=sn->next;
}
if (!sn) return init_spellnames(lang, mtype);
return sn;
}
spell * spell *
find_spellbyname(unit *u, char *name, const struct locale * lang) find_spellbyname(unit *u, char *name, const struct locale * lang)
{ {
spell_names * sn = spellnames;
spell_ptr *spt; spell_ptr *spt;
sc_mage * m = get_mage(u); sc_mage * m = get_mage(u);
spell * sp; spell * sp;
spell_names * sn;
if (!m) return NULL; if (!m) return NULL;
while (sn) { sn = get_spellnames(lang, m->magietyp);
if (sn->mtype==m->magietyp && sn->lang==lang) break; if (findtoken(&sn->names, name, (void**)&sp)==E_TOK_NOMATCH) {
sn=sn->next; magic_t mtype;
for(mtype=0;mtype!=MAXMAGIETYP;++mtype) {
sn = get_spellnames(lang, m->magietyp);
if (findtoken(&sn->names, name, (void**)&sp)!=E_TOK_NOMATCH) break;
}
if (mtype==MAXMAGIETYP) return NULL;
} }
if (!sn) sn = init_spellnames(lang, m->magietyp);
if (findtoken(&sn->names, name, (void**)&sp)==E_TOK_NOMATCH) return NULL;
for (spt = m->spellptr; spt; spt = spt->next) { for (spt = m->spellptr; spt; spt = spt->next) {
if (sp->id==spt->spellid) return sp; if (sp->id==spt->spellid) return sp;

View File

@ -188,8 +188,6 @@ typedef int (*cspell_f) (struct fighter*, int, int, struct spell * sp);
/* zauber-patzer: */ /* zauber-patzer: */
typedef void (*pspell_f) (castorder *); typedef void (*pspell_f) (castorder *);
extern spell spelldaten[];
/* besondere Spruchtypen */ /* besondere Spruchtypen */
#define FARCASTING (1<<0) /* ZAUBER [struct region x y] */ #define FARCASTING (1<<0) /* ZAUBER [struct region x y] */
#define SPELLLEVEL (1<<1) /* ZAUBER [STUFE x] */ #define SPELLLEVEL (1<<1) /* ZAUBER [STUFE x] */

View File

@ -268,5 +268,6 @@ typedef struct wall_data {
extern struct attrib_type at_cursewall; extern struct attrib_type at_cursewall;
extern struct attrib_type at_unitdissolve; extern struct attrib_type at_unitdissolve;
extern struct spell spelldaten[];
#endif #endif