-
Notifications
You must be signed in to change notification settings - Fork 0
/
526.d
97 lines (92 loc) · 4.46 KB
/
526.d
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
const int SPL_COST_TELEKINESIS = 1;
const int STEP_TELEKINESIS = 1;
var int STAGE = 0;
func int SPELL_TELEKINESIS_FOCUS_REMOVER() {
NPC = HLP_GETNPC(0x71b);
NPC.FOCUS_VOB = 0;
STAGE = 0;
return FALSE;
}
instance SPELL_TELEKINESIS_FOCUS_REMOVER.NPC(OCNPC)
instance OCITEM_TELEKINESIS(OCITEM)
var int STEP_X = 0;
var int STEP_Y = 0;
var int STEP_Z = 0;
var int NUMB_OF_STEPS = 0;
func void NEW_TELEKINESIS() {
OCITEM_TELEKINESIS._ZCVOB_TRAFOOBJTOWORLD[3] = ADDF(OCITEM_TELEKINESIS._ZCVOB_TRAFOOBJTOWORLD[3], STEP_X);
OCITEM_TELEKINESIS._ZCVOB_TRAFOOBJTOWORLD[7] = ADDF(OCITEM_TELEKINESIS._ZCVOB_TRAFOOBJTOWORLD[7], STEP_Z);
OCITEM_TELEKINESIS._ZCVOB_TRAFOOBJTOWORLD[11] = ADDF(OCITEM_TELEKINESIS._ZCVOB_TRAFOOBJTOWORLD[11], STEP_Y);
OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MINS[0] = ADDF(OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MINS[0], STEP_X);
OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MINS[1] = ADDF(OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MINS[1], STEP_Z);
OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MINS[2] = ADDF(OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MINS[2], STEP_Y);
OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MAXS[0] = ADDF(OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MAXS[0], STEP_X);
OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MAXS[1] = ADDF(OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MAXS[1], STEP_Z);
OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MAXS[2] = ADDF(OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MAXS[2], STEP_Y);
}
instance SPELL_TELEKINESIS(C_SPELL_PROTO) {
C_SPELL_PROTO();
TIME_PER_MANA = 30;
SPELLTYPE = SPELL_NEUTRAL;
TARGETCOLLECTRANGE = 0x2710;
TARGETCOLLECTALGO = TARGET_COLLECT_FOCUS;
TARGETCOLLECTTYPE = TARGET_TYPE_ITEMS;
CANTURNDURINGINVEST = SPELL_TELEKINESIS_FOCUS_REMOVER();
CANCHANGETARGETDURINGINVEST = FALSE;
}
func int SPELL_LOGIC_TELEKINESIS(var int MANAINVESTED) {
NPC = HLP_GETNPC(0x717);
if ((STAGE) == (0)) {
TEMP = 0xaaf8;
MEM_ASSIGNINST(TEMP, NPC.FOCUS_VOB);
NUMB_OF_STEPS = (NPC_GETDISTTOITEM(SELF, OCITEM_TELEKINESIS)) / (10);
STEP_X = DIVF(SUBF(NPC._ZCVOB_TRAFOOBJTOWORLD[3], OCITEM_TELEKINESIS._ZCVOB_TRAFOOBJTOWORLD[3]), MKF(NUMB_OF_STEPS));
STEP_Z = DIVF(SUBF(NPC._ZCVOB_TRAFOOBJTOWORLD[7], OCITEM_TELEKINESIS._ZCVOB_TRAFOOBJTOWORLD[7]), MKF(NUMB_OF_STEPS));
STEP_Y = DIVF(SUBF(NPC._ZCVOB_TRAFOOBJTOWORLD[11], OCITEM_TELEKINESIS._ZCVOB_TRAFOOBJTOWORLD[11]), MKF(NUMB_OF_STEPS));
};
if (((SELF.ATTRIBUTE[2]) < (STEP_TELEKINESIS)) || (((STAGE) == (0)) && ((NPC_GETDISTTOITEM(SELF, OCITEM_TELEKINESIS)) < (180)))) {
return SPL_DONTINVEST;
};
if ((MANAINVESTED) <= (STEP_TELEKINESIS)) {
return SPL_STATUS_CANINVEST_NO_MANADEC;
};
if ((MANAINVESTED) > (STEP_TELEKINESIS)) {
if ((((STAGE) - (1)) % (10)) == (0)) {
SELF.ATTRIBUTE[2] = (SELF.ATTRIBUTE[2]) - (STEP_TELEKINESIS);
};
if ((SELF.ATTRIBUTE[2]) < (0)) {
SELF.ATTRIBUTE[2] = 0;
};
if ((NPC_GETDISTTOITEM(SELF, OCITEM_TELEKINESIS)) < (150)) {
return SPL_SENDCAST;
};
if ((STAGE) == (0)) {
START_Z = SUBF(OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MAXS[1], OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MINS[1]);
OCITEM_TELEKINESIS._ZCVOB_TRAFOOBJTOWORLD[7] = ADDF(OCITEM_TELEKINESIS._ZCVOB_TRAFOOBJTOWORLD[7], START_Z);
OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MINS[1] = ADDF(OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MINS[1], START_Z);
OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MAXS[1] = ADDF(OCITEM_TELEKINESIS._ZCVOB_BBOX3D_MAXS[1], START_Z);
WLD_PLAYEFFECT("spellFX_ItemAusbuddeln", OCITEM_TELEKINESIS, OCITEM_TELEKINESIS, 0, 0, 0, FALSE);
};
NEW_TELEKINESIS();
STAGE += 1;
return SPL_NEXTLEVEL;
};
if ((NPC_GETDISTTOITEM(SELF, OCITEM_TELEKINESIS)) < (150)) {
return SPL_SENDCAST;
};
return SPL_STATUS_CANINVEST_NO_MANADEC;
}
instance SPELL_LOGIC_TELEKINESIS.NPC(OCNPC)
var int SPELL_LOGIC_TELEKINESIS.TEMP = 0;
var int SPELL_LOGIC_TELEKINESIS.START_Z = 0;
func void SPELL_CAST_TELEKINESIS() {
NPC = HLP_GETNPC(0x717);
MEM_INITGLOBALINST();
OCITEM_TELEKINESIS._ZCVOB_BITFIELD[0] = (OCITEM_TELEKINESIS._ZCVOB_BITFIELD[0]) | (ZCVOB_BITFIELD0_PHYSICSENABLED);
OCITEM_TELEKINESIS._ZCVOB_BITFIELD[2] = (OCITEM_TELEKINESIS._ZCVOB_BITFIELD[2]) | (ZCVOB_BITFIELD2_SLEEPINGMODE);
MEM_WRITEINT((MEM_WORLD.ACTIVEVOBLIST_ARRAY) + ((4) * (MEM_WORLD.ACTIVEVOBLIST_NUMINARRAY)), NPC.FOCUS_VOB);
MEM_WORLD.ACTIVEVOBLIST_NUMINARRAY += 1;
STAGE = 0;
SELF.AIVAR[20] += 1;
}
instance SPELL_CAST_TELEKINESIS.NPC(OCNPC)