1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
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]);
}
}
|