diff --git a/res/messages.xml b/res/messages.xml
index 8db9c6fbf..354209ceb 100644
--- a/res/messages.xml
+++ b/res/messages.xml
@@ -2354,7 +2354,7 @@
"$unit($unit) schafft es nicht, genug Kraft aufzubringen, um $spell($spell) auf Stufe $int($level) zu zaubern."
- "$unit($unit) cannot muster enough energy to cast $spell($spell) on level $level($level)."
+ "$unit($unit) cannot muster enough energy to cast $spell($spell) on level $int($level)."
diff --git a/src/kernel/magic.c b/src/kernel/magic.c
index fdc206731..9cad61cb1 100644
--- a/src/kernel/magic.c
+++ b/src/kernel/magic.c
@@ -1128,6 +1128,7 @@ double magic_resistance(unit * target)
attrib *a;
curse *c;
int n;
+ const curse_type * ct_goodresist = 0, * ct_badresist = 0;
/* Bonus durch Rassenmagieresistenz */
double probability = target->race->magres;
@@ -1149,21 +1150,24 @@ double magic_resistance(unit * target)
/* Auswirkungen von Zaubern auf der Region */
a = a_find(target->region->attribs, &at_curse);
+ if (a) {
+ ct_badresist = ct_find("badmagicresistancezone");
+ ct_goodresist = ct_find("goodmagicresistancezone");
+ }
while (a && a->type == &at_curse) {
curse *c = (curse *) a->data.v;
unit *mage = c->magician;
if (mage != NULL) {
- if (c->type == ct_find("goodmagicresistancezone")) {
+ if (ct_goodresist && c->type == ct_goodresist) {
if (alliedunit(mage, target->faction, HELP_GUARD)) {
probability += curse_geteffect(c) * 0.01;
- break;
+ ct_goodresist = 0; /* only one effect per region */
}
- } else if (c->type == ct_find("badmagicresistancezone")) {
+ } else if (ct_badresist && c->type == ct_badresist) {
if (alliedunit(mage, target->faction, HELP_GUARD)) {
- /* TODO: hier sollte doch sicher was passieren? */
- a = a->next;
- continue;
+ probability -= curse_geteffect(c) * 0.01;
+ ct_badresist = 0; /* only one effect per region */
}
}
}