summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--TemplePushing.c4s/System.c4g/Goblet.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/TemplePushing.c4s/System.c4g/Goblet.c b/TemplePushing.c4s/System.c4g/Goblet.c
index b665574..7877443 100644
--- a/TemplePushing.c4s/System.c4g/Goblet.c
+++ b/TemplePushing.c4s/System.c4g/Goblet.c
@@ -46,7 +46,11 @@ private func FillCheck()
private func RemoveBadEffect(object clonk)
{
// Unfreeze clonk if frozen
- if (Frozen(clonk)) Unfreeze(clonk);
+ if (Frozen(clonk))
+ {
+ Unfreeze(clonk);
+ return true;
+ }
// Extinguish clonk if on fire
if (clonk->OnFire())
@@ -56,7 +60,7 @@ private func RemoveBadEffect(object clonk)
}
// Remove a curse if at least one is present
- if (RemoveAnyEffect("*Curse*", clonk)) return true;
+ if (RemoveAnyEffect("*Curse*", clonk, "!CAHE->FxCurseIsActive")) return true;
// Remove plague effect if present
if (RemoveAnyEffect("Poison", clonk)) return true;
@@ -64,18 +68,19 @@ private func RemoveBadEffect(object clonk)
// Remove a negative spell if at least one is present
if (RemoveAnyEffect("*NSpell", clonk)) return true;
- // Fail there is no bad effect to remove
+ // Fail if there is no bad effect to remove
return false;
}
-private func RemoveAnyEffect(string name, object target)
+private func RemoveAnyEffect(string name, object target, string checkCall)
{
// Create an array of effect numbers matching name and target
var effectNumbers = [];
- for (var i = 0; i < GetEffectCount(); ++i)
+ for (var i = 0; i < GetEffectCount(name, target); ++i)
{
var effectNumber = GetEffect(name, target, i);
if (effectNumber == 0) break;
+ if (checkCall && eval(Format("%s(Object(%d), %d)", checkCall, ObjectNumber(target), effectNumber))) continue;
effectNumbers[GetLength(effectNumbers)] = effectNumber;
}
@@ -83,7 +88,7 @@ private func RemoveAnyEffect(string name, object target)
if (GetLength(effectNumbers) == 0) return false;
// Randomly select an effect to remove
- RemoveEffect(0, target, Random(effectNumbers));
+ RemoveEffect(0, target, effectNumbers[Random(GetLength(effectNumbers))]);
return true; // Success
}