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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
#ifndef TIBIA_MOVEUSE_HH_
#define TIBIA_MOVEUSE_HH_ 1
#include "common.hh"
#include "containers.hh"
#include "map.hh"
#include "script.hh"
#define MOVEUSE_MAX_PARAMETERS 5
struct TPlayerData;
enum MoveUseActionType: int {
MOVEUSE_ACTION_CREATEONMAP = 0,
MOVEUSE_ACTION_CREATE = 1,
MOVEUSE_ACTION_MONSTERONMAP = 2,
MOVEUSE_ACTION_MONSTER = 3,
MOVEUSE_ACTION_EFFECTONMAP = 4,
MOVEUSE_ACTION_EFFECT = 5,
MOVEUSE_ACTION_TEXTONMAP = 6,
MOVEUSE_ACTION_TEXT = 7,
MOVEUSE_ACTION_CHANGEONMAP = 8,
MOVEUSE_ACTION_CHANGE = 9,
MOVEUSE_ACTION_CHANGEREL = 10,
MOVEUSE_ACTION_SETATTRIBUTE = 11,
MOVEUSE_ACTION_CHANGEATTRIBUTE = 12,
MOVEUSE_ACTION_SETQUESTVALUE = 13,
MOVEUSE_ACTION_DAMAGE = 14,
MOVEUSE_ACTION_SETSTART = 15,
MOVEUSE_ACTION_WRITENAME = 16,
MOVEUSE_ACTION_WRITETEXT = 17,
MOVEUSE_ACTION_LOGOUT = 18,
MOVEUSE_ACTION_MOVEALLONMAP = 19,
MOVEUSE_ACTION_MOVEALL = 20,
MOVEUSE_ACTION_MOVEALLREL = 21,
MOVEUSE_ACTION_MOVETOPONMAP = 22,
MOVEUSE_ACTION_MOVETOP = 23,
MOVEUSE_ACTION_MOVETOPREL = 24,
MOVEUSE_ACTION_MOVE = 25,
MOVEUSE_ACTION_MOVEREL = 26,
MOVEUSE_ACTION_RETRIEVE = 27,
MOVEUSE_ACTION_DELETEALLONMAP = 28,
MOVEUSE_ACTION_DELETETOPONMAP = 29,
MOVEUSE_ACTION_DELETEONMAP = 30,
MOVEUSE_ACTION_DELETE = 31,
MOVEUSE_ACTION_DELETEININVENTORY = 32,
MOVEUSE_ACTION_DESCRIPTION = 33,
MOVEUSE_ACTION_LOADDEPOT = 34,
MOVEUSE_ACTION_SAVEDEPOT = 35,
MOVEUSE_ACTION_SENDMAIL = 36,
MOVEUSE_ACTION_NOP = 37,
};
enum MoveUseConditionType: int {
MOVEUSE_CONDITION_ISPOSITION = 0,
MOVEUSE_CONDITION_ISTYPE = 1,
MOVEUSE_CONDITION_ISCREATURE = 2,
MOVEUSE_CONDITION_ISPLAYER = 3,
MOVEUSE_CONDITION_HASFLAG = 4,
MOVEUSE_CONDITION_HASTYPEATTRIBUTE = 5,
MOVEUSE_CONDITION_HASINSTANCEATTRIBUTE = 6,
MOVEUSE_CONDITION_HASTEXT = 7,
MOVEUSE_CONDITION_ISPEACEFUL = 8,
MOVEUSE_CONDITION_MAYLOGOUT = 9,
MOVEUSE_CONDITION_HASPROFESSION = 10,
MOVEUSE_CONDITION_HASLEVEL = 11,
MOVEUSE_CONDITION_HASRIGHT = 12,
MOVEUSE_CONDITION_HASQUESTVALUE = 13,
MOVEUSE_CONDITION_TESTSKILL = 14,
MOVEUSE_CONDITION_COUNTOBJECTS = 15,
MOVEUSE_CONDITION_COUNTOBJECTSONMAP = 16,
MOVEUSE_CONDITION_ISOBJECTTHERE = 17,
MOVEUSE_CONDITION_ISCREATURETHERE = 18,
MOVEUSE_CONDITION_ISPLAYERTHERE = 19,
MOVEUSE_CONDITION_ISOBJECTININVENTORY = 20,
MOVEUSE_CONDITION_ISPROTECTIONZONE = 21,
MOVEUSE_CONDITION_ISHOUSE = 22,
MOVEUSE_CONDITION_ISHOUSEOWNER = 23,
MOVEUSE_CONDITION_ISDRESSED = 24,
MOVEUSE_CONDITION_RANDOM = 25,
};
enum MoveUseEventType: int {
MOVEUSE_EVENT_USE = 0,
MOVEUSE_EVENT_MULTIUSE = 1,
MOVEUSE_EVENT_MOVEMENT = 2,
MOVEUSE_EVENT_COLLISION = 3,
MOVEUSE_EVENT_SEPARATION = 4,
};
enum MoveUseModifierType: int {
MOVEUSE_MODIFIER_NORMAL = 0,
MOVEUSE_MODIFIER_INVERT = 1,
MOVEUSE_MODIFIER_TRUE = 2,
};
enum MoveUseParameterType: int {
MOVEUSE_PARAMETER_OBJECT = 0,
MOVEUSE_PARAMETER_TYPE = 1,
MOVEUSE_PARAMETER_FLAG = 2,
MOVEUSE_PARAMETER_TYPEATTRIBUTE = 3,
MOVEUSE_PARAMETER_INSTANCEATTRIBUTE = 4,
MOVEUSE_PARAMETER_COORDINATE = 5,
MOVEUSE_PARAMETER_VECTOR = 6,
MOVEUSE_PARAMETER_RIGHT = 7,
MOVEUSE_PARAMETER_SKILL = 8,
MOVEUSE_PARAMETER_NUMBER = 9,
MOVEUSE_PARAMETER_TEXT = 10,
MOVEUSE_PARAMETER_COMPARISON = 11,
};
struct TMoveUseAction {
MoveUseActionType Action;
int Parameters[MOVEUSE_MAX_PARAMETERS];
};
struct TMoveUseRule {
int FirstCondition;
int LastCondition;
int FirstAction;
int LastAction;
};
struct TMoveUseCondition {
MoveUseModifierType Modifier;
MoveUseConditionType Condition;
int Parameters[MOVEUSE_MAX_PARAMETERS];
};
struct TMoveUseDatabase {
TMoveUseDatabase(void) : Rules(1, 100, 100), NumberOfRules(0) {}
vector<TMoveUseRule> Rules;
int NumberOfRules;
};
struct TDelayedMail {
uint32 CharacterID;
int DepotNumber;
uint8 *Packet;
int PacketSize;
};
int PackAbsoluteCoordinate(int x, int y, int z);
void UnpackAbsoluteCoordinate(int Packed, int *x, int *y, int *z);
int PackRelativeCoordinate(int x, int y, int z);
void UnpackRelativeCoordinate(int Packed, int *x, int *y, int *z);
Object GetEventObject(int Nr, Object User, Object Obj1, Object Obj2, Object Temp);
bool Compare(int Value1, int Operator, int Value2);
bool CheckCondition(MoveUseEventType EventType, TMoveUseCondition *Condition,
Object User, Object Obj1, Object Obj2, Object *Temp);
Object CreateObject(Object Con, ObjectType Type, uint32 Value);
void ChangeObject(Object Obj, ObjectType NewType, uint32 Value);
void MoveOneObject(Object Obj, Object Con);
void MoveAllObjects(Object Obj, Object Dest, Object Exclude, bool MoveUnmovable);
void DeleteAllObjects(Object Obj, Object Exclude, bool DeleteUnmovable);
void ClearField(Object Obj, Object Exclude);
void LoadDepotBox(uint32 CreatureID, int Nr, Object Con);
void SaveDepotBox(uint32 CreatureID, int Nr, Object Con);
void SendMail(Object Obj);
void SendMails(TPlayerData *PlayerData);
void TextEffect(const char *Text, int x, int y, int z, int Radius);
void ExecuteAction(MoveUseEventType EventType, TMoveUseAction *Action,
Object User, Object Obj1, Object Obj2, Object *Temp);
bool HandleEvent(MoveUseEventType EventType, Object User, Object Obj1, Object Obj2);
void UseContainer(uint32 CreatureID, Object Con, int NextContainerNr);
void UseChest(uint32 CreatureID, Object Chest);
void UseLiquidContainer(uint32 CreatureID, Object Obj, Object Dest);
void UseFood(uint32 CreatureID, Object Obj);
void UseTextObject(uint32 CreatureID, Object Obj);
void UseAnnouncer(uint32 CreatureID, Object Obj);
void UseKeyDoor(uint32 CreatureID, Object Key, Object Door);
void UseNameDoor(uint32 CreatureID, Object Door);
void UseLevelDoor(uint32 CreatureID, Object Door);
void UseQuestDoor(uint32 CreatureID, Object Door);
void UseWeapon(uint32 CreatureID, Object Weapon, Object Target);
void UseChangeObject(uint32 CreatureID, Object Obj);
void UseObject(uint32 CreatureID, Object Obj);
void UseObjects(uint32 CreatureID, Object Obj1, Object Obj2);
void MovementEvent(Object Obj, Object Start, Object Dest);
void SeparationEvent(Object Obj, Object Start);
void CollisionEvent(Object Obj, Object Dest);
void LoadParameters(TReadScriptFile *Script, int *Parameters, int NumberOfParameters, ...);
void LoadCondition(TReadScriptFile *Script, TMoveUseCondition *Condition);
void LoadAction(TReadScriptFile *Script, TMoveUseAction *Action);
void LoadDataBase(void);
void InitMoveUse(void);
void ExitMoveUse(void);
#endif //TIBIA_MOVEUSE_HH_
|