diff options
Diffstat (limited to 'Script.c')
| -rw-r--r-- | Script.c | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/Script.c b/Script.c new file mode 100644 index 0000000..39f1aa3 --- /dev/null +++ b/Script.c @@ -0,0 +1,99 @@ +#strict 2 + +global func DisableSolidMaskFor(object forObj, array restoreMask, object target) +{ + target = target || this; + var helper = CreateObject(SM7I); + helper->SetCategory(forObj->GetCategory()); + SetObjectOrder(helper, forObj); + AddEffect("DisableSolidMask", helper, 1, 1, helper, SM7I, target); + return [forObj, AddEffect("RestoreSolidMask", forObj, 1, 1, 0, SM7I, restoreMask || target->GetSolidMask(), target, helper)]; +} + +global func SetSolidMaskFor(object forObj, array mask, object target) +{ + target = target || this; + var helper = CreateObject(SM7I); + helper->SetCategory(forObj->GetCategory()); + SetObjectOrder(helper, forObj); + AddEffect("DisableSolidMask", forObj, 1, 1, helper, SM7I, target); + return [forObj, AddEffect("RestoreSolidMask", helper, 1, 1, 0, SM7I, mask, target, helper)]; +} + +global func RemoveSolidMaskSetting(array setting) +{ + return EffectVar(3, setting[0], setting[1]) = true; +} + +func Initialize() +{ + SetAction("Float"); +} + +func FxDisableSolidMaskStart(object target, int effectNumber, int temp, object forObj) +{ + if(!temp) + { + EffectVar(0, target, effectNumber) = forObj; + } +} + +func FxDisableSolidMaskTimer(object target, int effectNumber) +{ + var obj = EffectVar(0, target, effectNumber); + if(!obj) + { + return FX_Execute_Kill; + } + + obj->SetSolidMask(); +} + +func FxDisableSolidMaskStop(object target, int effectNumber, int reason, bool temp) +{ + if(!temp && reason != FX_Call_RemoveClear) + { + RemoveObject(); + } +} + +func FxRestoreSolidMaskStart(object target, int effectNumber, int temp, array mask, object solidMaskObject, object helper) +{ + if(!temp) + { + EffectVar(0, target, effectNumber) = mask; + EffectVar(1, target, effectNumber) = solidMaskObject; + EffectVar(2, target, effectNumber) = helper; + } +} + +func FxRestoreSolidMaskTimer(object target, int effectNumber) +{ + var mask = EffectVar(0, target, effectNumber); + var solidMaskObject = EffectVar(1, target, effectNumber); + var helper = EffectVar(2, target, effectNumber); + if(!helper || !solidMaskObject || EffectVar(3, target, effectNumber)) + { + return FX_Execute_Kill; + } + + solidMaskObject->SetSolidMask(mask[0], mask[1], mask[2], mask[3], mask[4], mask[5]); + + helper->SetCategory(target->GetCategory()); + SetObjectOrder(target, helper, true); +} + +func FxRestoreSolidMaskStop(object target, int effectNumber, int reason, bool temp) +{ + if(!temp && reason != FX_Call_RemoveClear) + { + var helper = EffectVar(2, target, effectNumber); + if(helper) + { + RemoveObject(helper); + } + var mask = EffectVar(0, target, effectNumber); + var solidMaskObject = EffectVar(1, target, effectNumber); + solidMaskObject->SetSolidMask(mask[0], mask[1], mask[2], mask[3], mask[4], mask[5]); + } +} |
