/*-- Prevent curse scrolls from vanishing --*/ /*-- Limit lifetime of activated curse */ #strict 2 #appendto CAHE public func Activate(pCaster,pRealcaster) { var pClonk=pRealcaster; if (!pClonk) pClonk = pCaster; if (!pClonk) return 1; pCasterClonk = pClonk; // Caster speichern, damit es sich unter keinen Umständen selber wählen kann // Auswählen wenn möglich if (pClonk->~DoSpellSelect(this, 300, pCaster)) return 1; // Clonk kann nicht auswählen: nächsten Gegner verfluchen for (var pTarget in FindObjects(Find_OCF(OCF_CrewMember), Find_Distance(300), Find_NoContainer(), Find_Exclude(pClonk))) if (SelectorTarget(pTarget)) return ActivateTarget(pClonk, pTarget); // ansonsten geht nich RemoveObject(); return 0; } public func ActivateTarget(object pCaller, object pTarget) { if (!pTarget) { if (pCaller) pCaller->OnSelectorAbort(); return RemoveObject(); } return _inherited(pCaller, pTarget); } protected func FxCurseTimer(pClonk, iEffectNumber, iEffectTime) { var rval = _inherited(pClonk, iEffectNumber, iEffectTime); if (rval != FX_OK) return rval; if (EffectVar(2, pClonk, iEffectNumber) <= 0) { if (GetActivatedLifeTime() + --EffectVar(2, pClonk, iEffectNumber) <= 0) return FX_Execute_Kill; } return FX_OK; } protected func FxCurseIsActive(pClonk, iEffectNumber) { // Old meaning of effect variable 2: true if still chasing target or false if activated // New meaning: // == 1: Still chasing target // <= 0: Was activated and remaining lifetime is GetActivatedLifeTime() + value return EffectVar(2, pClonk, iEffectNumber) <= 0; } private func GetActivatedLifeTime() { return 720 / 2; }