u_hasspell only needs a mage, not a unit

This commit is contained in:
Enno Rehling 2012-05-09 20:30:26 -07:00
parent 882ac9e8e9
commit 12c03644c4
2 changed files with 12 additions and 13 deletions

View File

@ -491,7 +491,7 @@ void updatespelllist(unit * u)
for (qi = 0; ql; ql_advance(&ql, &qi, 1)) { for (qi = 0; ql; ql_advance(&ql, &qi, 1)) {
spell *sp = (spell *) ql_get(ql, qi); spell *sp = (spell *) ql_get(ql, qi);
if (sp->level <= sk) { if (sp->level <= sk) {
boolean know = u_hasspell(u, sp); boolean know = u_hasspell(mage, sp);
if (know || sp->magietyp == M_COMMON if (know || sp->magietyp == M_COMMON
|| know_school(u->faction, sp->magietyp)) { || know_school(u->faction, sp->magietyp)) {
@ -552,11 +552,9 @@ void add_spell(struct quicklist **slistp, spell * sp)
} }
} }
boolean u_hasspell(const struct unit *u, const struct spell *sp) int u_hasspell(const sc_mage *mage, const struct spell *sp)
{ {
sc_mage *mage = get_mage(u); return mage ? has_spell(mage->spells, sp) : 0;
return (mage) ? has_spell(mage->spells, sp) : false;
} }
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
@ -594,10 +592,11 @@ const spell *get_combatspell(const unit * u, int nr)
void set_combatspell(unit * u, spell * sp, struct order *ord, int level) void set_combatspell(unit * u, spell * sp, struct order *ord, int level)
{ {
sc_mage *m = get_mage(u); sc_mage *mage = get_mage(u);
int i = -1; int i = -1;
if (!m) if (!mage) {
return; return;
}
/* knowsspell prüft auf ist_magier, ist_spruch, kennt_spruch */ /* knowsspell prüft auf ist_magier, ist_spruch, kennt_spruch */
if (knowsspell(u->region, u, sp) == false) { if (knowsspell(u->region, u, sp) == false) {
@ -605,7 +604,7 @@ void set_combatspell(unit * u, spell * sp, struct order *ord, int level)
cmistake(u, ord, 173, MSG_MAGIC); cmistake(u, ord, 173, MSG_MAGIC);
return; return;
} }
if (!u_hasspell(u, sp)) { if (!u_hasspell(mage, sp)) {
/* Diesen Zauber kennt die Einheit nicht */ /* Diesen Zauber kennt die Einheit nicht */
cmistake(u, ord, 169, MSG_MAGIC); cmistake(u, ord, 169, MSG_MAGIC);
return; return;
@ -623,8 +622,8 @@ void set_combatspell(unit * u, spell * sp, struct order *ord, int level)
else if (sp->sptyp & POSTCOMBATSPELL) else if (sp->sptyp & POSTCOMBATSPELL)
i = 2; i = 2;
assert(i >= 0); assert(i >= 0);
m->combatspells[i].sp = sp; mage->combatspells[i].sp = sp;
m->combatspells[i].level = level; mage->combatspells[i].level = level;
return; return;
} }
@ -944,13 +943,13 @@ boolean knowsspell(const region * r, const unit * u, const spell * sp)
} }
/* Magier? */ /* Magier? */
mage = get_mage(u); mage = get_mage(u);
if (mage == NULL) { if (!mage) {
log_warning(("%s ist kein Magier, versucht aber zu zaubern.\n", log_warning(("%s ist kein Magier, versucht aber zu zaubern.\n",
unitname(u))); unitname(u)));
return false; return false;
} }
/* steht der Spruch in der Spruchliste? */ /* steht der Spruch in der Spruchliste? */
if (!u_hasspell(u, sp)) { if (!u_hasspell(mage, sp)) {
/* ist der Spruch aus einem anderen Magiegebiet? */ /* ist der Spruch aus einem anderen Magiegebiet? */
if (know_school(u->faction, sp->magietyp)) { if (know_school(u->faction, sp->magietyp)) {
return false; return false;

View File

@ -270,7 +270,7 @@ typedef struct sc_mage {
void add_spell(struct quicklist **slistp, spell * sp); void add_spell(struct quicklist **slistp, spell * sp);
void add_spellname(sc_mage * mage, const spell * sp); void add_spellname(sc_mage * mage, const spell * sp);
/* fügt den Spruch mit der Id spellid der Spruchliste der Einheit hinzu. */ /* fügt den Spruch mit der Id spellid der Spruchliste der Einheit hinzu. */
boolean u_hasspell(const struct unit *u, const struct spell *sp); int u_hasspell(const sc_mage *mage, const struct spell *sp);
/* prüft, ob der Spruch in der Spruchliste der Einheit steht. */ /* prüft, ob der Spruch in der Spruchliste der Einheit steht. */
void update_spellbook(struct faction *f, int level); void update_spellbook(struct faction *f, int level);
void updatespelllist(struct unit *u); void updatespelllist(struct unit *u);