Merge pull request #77 from badgerman/bug-1660

Bug 1660
This commit is contained in:
Enno Rehling 2014-12-14 15:43:15 +01:00
commit 684f779501
2 changed files with 46 additions and 30 deletions

View File

@ -3796,7 +3796,7 @@ int use_cmd(unit * u, struct order *ord)
/* BENUTZE 42 Yanxspirit */
t = getstrtoken();
}
itype = finditemtype(t, u->faction->locale);
itype = t ? finditemtype(t, u->faction->locale) : NULL;
if (itype != NULL) {
err = use_item(u, itype, n, ord);

View File

@ -2903,40 +2903,56 @@ const char *curse_name(const curse_type * ctype, const struct locale *lang)
return LOC(lang, mkname("spell", ctype->cname));
}
spell *unit_getspell(struct unit *u, const char *name, const struct locale * lang)
{
sc_mage * mage = get_mage(u);
if (mage) {
variant token;
void * tokens = 0;
spellbook *sb = unit_get_spellbook(u);
static void select_spellbook(void **tokens, spellbook *sb, const struct locale * lang) {
quicklist * ql;
int qi;
if (sb) {
quicklist * ql;
int qi;
assert(sb);
assert(lang);
for (qi = 0, ql = sb->spells; ql; ql_advance(&ql, &qi, 1)) {
spellbook_entry *sbe = (spellbook_entry *)ql_get(ql, qi);
spell *sp = sbe->sp;
const char *n = spell_name(sp, lang);
if (!n) {
log_error("no translation in locale %s for spell %s\n", locale_name(lang), sp->sname);
}
else {
token.v = sp;
addtoken(&tokens, n, token);
}
}
for (qi = 0, ql = sb->spells; ql; ql_advance(&ql, &qi, 1)) {
spellbook_entry *sbe = (spellbook_entry *)ql_get(ql, qi);
spell *sp = sbe->sp;
const char *n = spell_name(sp, lang);
if (!n) {
log_error("no translation in locale %s for spell %s\n", locale_name(lang), sp->sname);
}
if (tokens) {
if (findtoken(tokens, name, &token) != E_TOK_NOMATCH) {
freetokens(tokens);
return (spell *)token.v;
}
freetokens(tokens);
else {
variant token;
token.v = sp;
addtoken(tokens, n, token);
}
}
}
spell *unit_getspell(struct unit *u, const char *name, const struct locale * lang)
{
void * tokens = 0;
spellbook *sb;
sb = unit_get_spellbook(u);
if (sb) {
select_spellbook(&tokens, sb, lang);
}
u = get_familiar_mage(u);
if (u) {
sb = unit_get_spellbook(u);
if (sb) {
select_spellbook(&tokens, sb, lang);
}
}
if (tokens) {
variant token;
if (findtoken(tokens, name, &token) != E_TOK_NOMATCH) {
freetokens(tokens);
return (spell *)token.v;
}
freetokens(tokens);
}
return 0;
}