catch attempts to cast a spell without the magic skill

This commit is contained in:
Enno Rehling 2021-04-09 21:30:26 +02:00
parent 14e2e96c73
commit e3f2ca9aaf

View file

@ -2563,39 +2563,41 @@ static castorder *cast_cmd(unit * u, order * ord)
* Vertrauter einen Spruch seines Magiers zaubert, dessen halbes Talent. * Vertrauter einen Spruch seines Magiers zaubert, dessen halbes Talent.
*/ */
skill = effskill(u, SK_MAGIC, NULL); skill = effskill(u, SK_MAGIC, NULL);
sp = unit_getspell(u, s, u->faction->locale); if (skill > 0) {
sp = unit_getspell(u, s, u->faction->locale);
/* /*
* u = Die Einheit, die den Befehl gegeben hat. * u = Die Einheit, die den Befehl gegeben hat.
* mage = Die Einheit, deren Spruchliste und Aura benutzt wird. * mage = Die Einheit, deren Spruchliste und Aura benutzt wird.
* *
* Vertraute koennen auch Zauber sprechen, die sie selbst nicht * Vertraute koennen auch Zauber sprechen, die sie selbst nicht
* koennen. `unit_getspell` findet aber nur jene Sprueche, die * koennen. `unit_getspell` findet aber nur jene Sprueche, die
* die Einheit beherrscht. In diesem Fall ist `familiar` der Vertraute. * die Einheit beherrscht. In diesem Fall ist `familiar` der Vertraute.
*/ */
if (sp) { if (sp) {
/* wir zaubern selbst */ /* wir zaubern selbst */
mage = u; mage = u;
} }
else if (skill > 0) { else {
/* als Vertrauter suchen wir einen Spender-Magier mit dem Spruch */ /* als Vertrauter suchen wir einen Spender-Magier mit dem Spruch */
mage = get_familiar_mage(u); mage = get_familiar_mage(u);
if (mage) { if (mage) {
int limit = effskill(mage, SK_MAGIC, NULL) / 2; int limit = effskill(mage, SK_MAGIC, NULL) / 2;
if (limit < skill) { if (limit < skill) {
skill = limit; skill = limit;
}
sp = unit_getspell(mage, s, mage->faction->locale);
if (sp->sptyp & NOTFAMILIARCAST) {
/* Fehler: "Diesen Spruch kann der Vertraute nicht zaubern" */
cmistake(u, ord, 177, MSG_MAGIC);
return 0;
}
familiar = u;
} }
sp = unit_getspell(mage, s, mage->faction->locale);
if (sp->sptyp & NOTFAMILIARCAST) {
/* Fehler: "Diesen Spruch kann der Vertraute nicht zaubern" */
cmistake(u, ord, 177, MSG_MAGIC);
return 0;
}
familiar = u;
} }
} }
/* OBS: hier kein else! */
if (!sp) { if (!sp || !mage) {
/* Fehler 'Spell not found' */ /* Fehler 'Spell not found' */
cmistake(u, ord, 173, MSG_MAGIC); cmistake(u, ord, 173, MSG_MAGIC);
return 0; return 0;