fix spellbook entries in at_reportspell (crash)

This commit is contained in:
Enno Rehling 2012-05-25 18:30:18 -07:00
parent 58cbc3ccbc
commit fc259d232b
3 changed files with 12 additions and 2 deletions

View File

@ -280,7 +280,7 @@ static void nr_spell(FILE * F, spellbook_entry * sbe, const struct locale *lang)
} }
} else { } else {
if (costtyp == SPC_LEVEL || costtyp == SPC_LINEAR) { if (costtyp == SPC_LEVEL || costtyp == SPC_LINEAR) {
itemanz *= sbe->level; itemanz *= sp->level;
} }
bytes = bytes =
snprintf(bufp, size, "%d %s", itemanz, LOC(lang, resourcename(rtype, snprintf(bufp, size, "%d %s", itemanz, LOC(lang, resourcename(rtype,

View File

@ -428,7 +428,11 @@ static void update_spells(faction * f, sc_mage * mage, int level, const spellboo
add_spellname(mage, sp); add_spellname(mage, sp);
} }
if (!ismonster && !already_seen(f, sp)) { if (!ismonster && !already_seen(f, sp)) {
a_add(&f->attribs, a_new(&at_reportspell))->data.v = sp; attrib * a = a_new(&at_reportspell);
spellbook_entry * entry = (spellbook_entry *)a->data.v;
entry->level = level;
entry->sp = sp;
a_add(&f->attribs, a);
a_add(&f->attribs, a_new(&at_seenspell))->data.v = sp; a_add(&f->attribs, a_new(&at_seenspell))->data.v = sp;
} }
} }

View File

@ -1662,8 +1662,14 @@ static int parse_spells(xmlDocPtr doc)
propValue = xmlGetProp(node, BAD_CAST "cost"); propValue = xmlGetProp(node, BAD_CAST "cost");
if (propValue != NULL) { if (propValue != NULL) {
if (strcmp((const char *)propValue, "linear") == 0) { if (strcmp((const char *)propValue, "linear") == 0) {
if ((sp->sptyp&SPELLLEVEL)==0) {
log_error("spell '%s' has linear cost but fixed level\n", sp->sname);
}
component->cost = SPC_LINEAR; component->cost = SPC_LINEAR;
} else if (strcmp((const char *)propValue, "level") == 0) { } else if (strcmp((const char *)propValue, "level") == 0) {
if ((sp->sptyp&SPELLLEVEL)==0) {
log_error("spell '%s' has levelled cost but fixed level\n", sp->sname);
}
component->cost = SPC_LEVEL; component->cost = SPC_LEVEL;
} }
xmlFree(propValue); xmlFree(propValue);