ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/plugin.h
Revision: 1.6
Committed: Thu Mar 16 21:08:15 2006 UTC (18 years, 2 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.5: +3 -1 lines
Log Message:
allow perl to save/restore pelr data associated with players

File Contents

# Content
1 /*****************************************************************************/
2 /* Crossfire plugin support - (C) 2001 by Yann Chachkoff. */
3 /* This code is placed under the GPL. */
4 /*****************************************************************************/
5
6 /*****************************************************************************/
7 /* Headers needed. */
8 /*****************************************************************************/
9
10 #ifndef PLUGIN_H_
11 #define PLUGIN_H_
12
13 /*****************************************************************************/
14 /* This one does not exist under Win32. */
15 /*****************************************************************************/
16 #ifndef WIN32
17 #include <dlfcn.h>
18 #endif
19
20 #undef MODULEAPI
21 #ifdef WIN32
22 #ifdef PYTHON_PLUGIN_EXPORTS
23 #define MODULEAPI __declspec(dllexport)
24 #else
25 #define MODULEAPI __declspec(dllimport)
26 #endif
27 #else
28 #define MODULEAPI
29 #endif
30
31 #include <global.h>
32 #include <object.h>
33
34 #ifdef HAVE_TIME_H
35 #include <time.h>
36 #endif
37 #include <../random_maps/random_map.h>
38 #include <../random_maps/rproto.h>
39
40
41 /*****************************************************************************/
42 /* This one does not exist under Win32. */
43 /*****************************************************************************/
44 #ifndef WIN32
45 #include <dirent.h>
46 #endif
47
48 /*****************************************************************************/
49 /* Event ID codes. I sorted them to present local events first, but it is */
50 /* just a 'cosmetic' thing. */
51 /*****************************************************************************/
52 /*****************************************************************************/
53 /* Local events. Those are always linked to a specific object. */
54 /*****************************************************************************/
55 // how about making this an enum
56 #define EVENT_NONE 0 /* No event. This exists only to reserve the "0". */
57 #define EVENT_APPLY 1 /* Object applied-unapplied. */
58 #define EVENT_ATTACK 2 /* Monster attacked or Scripted Weapon used. */
59 #define EVENT_DEATH 3 /* Player or monster dead. */
60 #define EVENT_DROP 4 /* Object dropped on the floor. */
61 #define EVENT_PICKUP 5 /* Object picked up. */
62 #define EVENT_SAY 6 /* Someone speaks. */
63 #define EVENT_STOP 7 /* Thrown object stopped. */
64 #define EVENT_TIME 8 /* Triggered each time the object can react/move. */
65 #define EVENT_THROW 9 /* Object is thrown. */
66 #define EVENT_TRIGGER 10 /* Button pushed, lever pulled, etc. */
67 #define EVENT_CLOSE 11 /* Container closed. */
68 #define EVENT_TIMER 12 /* Timer connected triggered it. */
69 #define EVENT_MOVE 28 /* Monster move */
70 /*****************************************************************************/
71 /* Global events. Those are never linked to a specific object. */
72 /*****************************************************************************/
73 #define EVENT_BORN 13 /* A new character has been created. */
74 #define EVENT_CLOCK 14 /* Global time event. */
75 #define EVENT_CRASH 15 /* Triggered when the server crashes. Not recursive*/
76 #define EVENT_PLAYER_DEATH 16 /* Global Death event */
77 #define EVENT_GKILL 17 /* Triggered when anything got killed by anyone. */
78 #define EVENT_LOGIN 18 /* Player login. */
79 #define EVENT_LOGOUT 19 /* Player logout. */
80 #define EVENT_MAPENTER 20 /* A player entered a map. */
81 #define EVENT_MAPLEAVE 21 /* A player left a map. */
82 #define EVENT_MAPRESET 22 /* A map is resetting. */
83 #define EVENT_REMOVE 23 /* A Player character has been removed. */
84 #define EVENT_SHOUT 24 /* A player 'shout' something. */
85 #define EVENT_TELL 25 /* A player 'tell' something. */
86 #define EVENT_MUZZLE 26 /* A player was Muzzled (no_shout set). */
87 #define EVENT_KICK 27 /* A player was Kicked by a DM */
88 #define EVENT_FREE_OB 29 /* Object destroyed */
89 #define EVENT_MAPLOAD 30 /* Original map has been loaded */
90 #define EVENT_MAPOUT 31 /* Map has been swapped out */
91 #define EVENT_MAPIN 32 /* Temporary map has been swapped in */
92 #define EVENT_MAPCLEAN 33 /* Temporary map will be deleted */
93 #define EVENT_PLAYER_LOAD 34 /* Player was just loaded from disk */
94 #define EVENT_PLAYER_SAVE 35 /* Player was just saved to disk */
95 /* should add FREE_MAP, FREE_PLAYER */
96
97 #define NR_EVENTS 36
98
99 #include <stdarg.h>
100
101 #define CFAPI_NONE 0
102 #define CFAPI_INT 1
103 #define CFAPI_LONG 2
104 #define CFAPI_CHAR 3
105 #define CFAPI_STRING 4
106 #define CFAPI_POBJECT 5
107 #define CFAPI_PMAP 6
108 #define CFAPI_FLOAT 7
109 #define CFAPI_DOUBLE 8
110 #define CFAPI_PARCH 9
111 #define CFAPI_FUNC 10
112 #define CFAPI_PPLAYER 11
113 #define CFAPI_PPARTY 12
114 #define CFAPI_PREGION 13
115 #define CFAPI_INT16 14
116
117 typedef void* (*f_plug_api) (int* type, ...);
118 typedef int (*f_plug_postinit) (void);
119 typedef int (*f_plug_init)(const char* iversion, f_plug_api gethooksptr);
120
121 #ifndef WIN32
122 #define LIBPTRTYPE void*
123 #else
124 #define LIBPTRTYPE HMODULE
125 #endif
126
127 typedef struct _crossfire_plugin
128 {
129 f_plug_api eventfunc; /* Event Handler function */
130 f_plug_api propfunc; /* Plugin getProperty function */
131 f_plug_postinit closefunc; /* Plugin Termination function */
132 LIBPTRTYPE libptr; /* Pointer to the plugin library */
133 char id[MAX_BUF]; /* Plugin identification string */
134 char fullname[MAX_BUF]; /* Plugin full name */
135 f_plug_api gevent[NR_EVENTS]; /* Global events registered */
136 struct _crossfire_plugin *next;
137 struct _crossfire_plugin *prev;
138 } crossfire_plugin;
139
140 extern int plugin_number;
141 extern crossfire_plugin* plugins_list;
142
143 #ifdef WIN32
144
145 #define plugins_dlopen(fname) LoadLibrary(fname)
146 #define plugins_dlclose(lib) FreeLibrary(lib)
147 #define plugins_dlsym(lib,name) GetProcAddress(lib,name)
148
149 #else /*WIN32 */
150
151 #define plugins_dlopen(fname) dlopen(fname,RTLD_NOW|RTLD_GLOBAL)
152 #define plugins_dlclose(lib) dlclose(lib)
153 #define plugins_dlsym(lib,name) dlsym(lib,name)
154 #define plugins_dlerror() dlerror()
155 #endif /* WIN32 */
156
157
158 /* OBJECT-RELATED HOOKS */
159
160 #define CFAPI_OBJECT_PROP_OB_ABOVE 1
161 #define CFAPI_OBJECT_PROP_OB_BELOW 2
162 #define CFAPI_OBJECT_PROP_NEXT_ACTIVE_OB 3
163 #define CFAPI_OBJECT_PROP_PREV_ACTIVE_OB 4
164 #define CFAPI_OBJECT_PROP_INVENTORY 5
165 #define CFAPI_OBJECT_PROP_ENVIRONMENT 6
166 #define CFAPI_OBJECT_PROP_HEAD 7
167 #define CFAPI_OBJECT_PROP_CONTAINER 8
168 #define CFAPI_OBJECT_PROP_MAP 9
169 #define CFAPI_OBJECT_PROP_COUNT 10
170 #define CFAPI_OBJECT_PROP_REFCOUNT 11
171 #define CFAPI_OBJECT_PROP_NAME 12
172 #define CFAPI_OBJECT_PROP_NAME_PLURAL 13
173 #define CFAPI_OBJECT_PROP_TITLE 14
174 #define CFAPI_OBJECT_PROP_RACE 15
175 #define CFAPI_OBJECT_PROP_SLAYING 16
176 #define CFAPI_OBJECT_PROP_SKILL 17
177 #define CFAPI_OBJECT_PROP_MESSAGE 18
178 #define CFAPI_OBJECT_PROP_LORE 19
179 #define CFAPI_OBJECT_PROP_X 20
180 #define CFAPI_OBJECT_PROP_Y 21
181 #define CFAPI_OBJECT_PROP_SPEED 22
182 #define CFAPI_OBJECT_PROP_SPEED_LEFT 23
183 #define CFAPI_OBJECT_PROP_NROF 24
184 #define CFAPI_OBJECT_PROP_DIRECTION 25
185 #define CFAPI_OBJECT_PROP_FACING 26
186 #define CFAPI_OBJECT_PROP_TYPE 27
187 #define CFAPI_OBJECT_PROP_SUBTYPE 28
188 #define CFAPI_OBJECT_PROP_CLIENT_TYPE 29
189 #define CFAPI_OBJECT_PROP_RESIST 30
190 #define CFAPI_OBJECT_PROP_ATTACK_TYPE 31
191 #define CFAPI_OBJECT_PROP_PATH_ATTUNED 32
192 #define CFAPI_OBJECT_PROP_PATH_REPELLED 33
193 #define CFAPI_OBJECT_PROP_PATH_DENIED 34
194 #define CFAPI_OBJECT_PROP_MATERIAL 35
195 #define CFAPI_OBJECT_PROP_MATERIAL_NAME 36
196 #define CFAPI_OBJECT_PROP_MAGIC 37
197 #define CFAPI_OBJECT_PROP_VALUE 38
198 #define CFAPI_OBJECT_PROP_LEVEL 39
199 #define CFAPI_OBJECT_PROP_LAST_HEAL 40
200 #define CFAPI_OBJECT_PROP_LAST_SP 41
201 #define CFAPI_OBJECT_PROP_LAST_GRACE 42
202 #define CFAPI_OBJECT_PROP_LAST_EAT 43
203 #define CFAPI_OBJECT_PROP_INVISIBLE_TIME 44
204 #define CFAPI_OBJECT_PROP_PICK_UP 45
205 #define CFAPI_OBJECT_PROP_ITEM_POWER 46
206 #define CFAPI_OBJECT_PROP_GEN_SP_ARMOUR 47
207 #define CFAPI_OBJECT_PROP_WEIGHT 48
208 #define CFAPI_OBJECT_PROP_WEIGHT_LIMIT 49
209 #define CFAPI_OBJECT_PROP_CARRYING 50
210 #define CFAPI_OBJECT_PROP_GLOW_RADIUS 51
211 #define CFAPI_OBJECT_PROP_PERM_EXP 52
212 #define CFAPI_OBJECT_PROP_CURRENT_WEAPON 53
213 #define CFAPI_OBJECT_PROP_ENEMY 54
214 #define CFAPI_OBJECT_PROP_ATTACKED_BY 55
215 #define CFAPI_OBJECT_PROP_RUN_AWAY 56
216 #define CFAPI_OBJECT_PROP_CHOSEN_SKILL 57
217 #define CFAPI_OBJECT_PROP_HIDDEN 58
218 #define CFAPI_OBJECT_PROP_MOVE_STATUS 59
219 #define CFAPI_OBJECT_PROP_MOVE_TYPE 60
220 #define CFAPI_OBJECT_PROP_SPELL_ITEM 61
221 #define CFAPI_OBJECT_PROP_EXP_MULTIPLIER 62
222 #define CFAPI_OBJECT_PROP_ARCHETYPE 63
223 #define CFAPI_OBJECT_PROP_OTHER_ARCH 64
224 #define CFAPI_OBJECT_PROP_CUSTOM_NAME 65
225 #define CFAPI_OBJECT_PROP_ANIM_SPEED 66
226 #define CFAPI_OBJECT_PROP_FRIENDLY 67
227 #define CFAPI_OBJECT_PROP_SHORT_NAME 68
228 #define CFAPI_OBJECT_PROP_BASE_NAME 69
229 #define CFAPI_OBJECT_PROP_MAGICAL 70
230 #define CFAPI_OBJECT_PROP_LUCK 71
231 #define CFAPI_OBJECT_PROP_EXP 72
232 #define CFAPI_OBJECT_PROP_OWNER 73
233 #define CFAPI_OBJECT_PROP_PRESENT 74
234 #define CFAPI_OBJECT_PROP_CHEATER 75
235 #define CFAPI_OBJECT_PROP_MERGEABLE 76
236 #define CFAPI_OBJECT_PROP_PICKABLE 77
237 #define CFAPI_OBJECT_PROP_FLAGS 78
238 #define CFAPI_OBJECT_PROP_STR 79
239 #define CFAPI_OBJECT_PROP_DEX 80
240 #define CFAPI_OBJECT_PROP_CON 81
241 #define CFAPI_OBJECT_PROP_WIS 82
242 #define CFAPI_OBJECT_PROP_INT 83
243 #define CFAPI_OBJECT_PROP_POW 84
244 #define CFAPI_OBJECT_PROP_CHA 85
245 #define CFAPI_OBJECT_PROP_WC 86
246 #define CFAPI_OBJECT_PROP_AC 87
247 #define CFAPI_OBJECT_PROP_HP 88
248 #define CFAPI_OBJECT_PROP_SP 89
249 #define CFAPI_OBJECT_PROP_GP 90
250 #define CFAPI_OBJECT_PROP_FP 91
251 #define CFAPI_OBJECT_PROP_MAXHP 92
252 #define CFAPI_OBJECT_PROP_MAXSP 93
253 #define CFAPI_OBJECT_PROP_MAXGP 94
254 #define CFAPI_OBJECT_PROP_DAM 95
255 #define CFAPI_OBJECT_PROP_GOD 96
256 #define CFAPI_OBJECT_PROP_ARCH_NAME 97
257 #define CFAPI_OBJECT_PROP_INVISIBLE 98
258 #define CFAPI_OBJECT_PROP_FACE 99
259 #define CFAPI_OBJECT_ANIMATION 100
260 #define CFAPI_PLAYER_PROP_IP 150
261 #define CFAPI_PLAYER_PROP_MARKED_ITEM 151
262 #define CFAPI_PLAYER_PROP_PARTY 152
263
264 #define CFAPI_MAP_PROP_FLAGS 0
265 #define CFAPI_MAP_PROP_DIFFICULTY 1
266 #define CFAPI_MAP_PROP_PATH 2
267 #define CFAPI_MAP_PROP_TMPNAME 3
268 #define CFAPI_MAP_PROP_NAME 4
269 #define CFAPI_MAP_PROP_RESET_TIME 5
270 #define CFAPI_MAP_PROP_RESET_TIMEOUT 6
271 #define CFAPI_MAP_PROP_PLAYERS 7
272 #define CFAPI_MAP_PROP_LIGHT 8
273 #define CFAPI_MAP_PROP_DARKNESS 9
274 #define CFAPI_MAP_PROP_WIDTH 10
275 #define CFAPI_MAP_PROP_HEIGHT 11
276 #define CFAPI_MAP_PROP_ENTER_X 12
277 #define CFAPI_MAP_PROP_ENTER_Y 13
278 #define CFAPI_MAP_PROP_TEMPERATURE 14
279 #define CFAPI_MAP_PROP_PRESSURE 15
280 #define CFAPI_MAP_PROP_HUMIDITY 16
281 #define CFAPI_MAP_PROP_WINDSPEED 17
282 #define CFAPI_MAP_PROP_WINDDIR 18
283 #define CFAPI_MAP_PROP_SKY 19
284 #define CFAPI_MAP_PROP_WPARTX 20
285 #define CFAPI_MAP_PROP_WPARTY 21
286 #define CFAPI_MAP_PROP_MESSAGE 22
287 #define CFAPI_MAP_PROP_NEXT 23
288 #define CFAPI_MAP_PROP_REGION 24
289
290 #define CFAPI_ARCH_PROP_NAME 0
291 #define CFAPI_ARCH_PROP_NEXT 1
292 #define CFAPI_ARCH_PROP_HEAD 2
293 #define CFAPI_ARCH_PROP_MORE 3
294 #define CFAPI_ARCH_PROP_CLONE 4
295
296 #define CFAPI_PARTY_PROP_NAME 0
297 #define CFAPI_PARTY_PROP_NEXT 1
298 #define CFAPI_PARTY_PROP_PASSWORD 2
299 #define CFAPI_PARTY_PROP_PLAYER 3
300
301 #define CFAPI_REGION_PROP_NAME 0
302 #define CFAPI_REGION_PROP_NEXT 1
303 #define CFAPI_REGION_PROP_PARENT 2
304 #define CFAPI_REGION_PROP_LONGNAME 3
305 #define CFAPI_REGION_PROP_MESSAGE 4
306
307 /*****************************************************************************/
308 /* Exportable functions. Any plugin should define all those. */
309 /* initPlugin is called when the plugin initialization process starts.*/
310 /* endPlugin is called before the plugin gets unloaded from memory. */
311 /* getPluginProperty is currently unused. */
312 /* registerHook is used to transmit hook pointers from server to plugin.*/
313 /* triggerEvent is called whenever an event occurs. */
314 /*****************************************************************************/
315 /*extern MODULEAPI CFParm* initPlugin(CFParm* PParm);
316 extern MODULEAPI CFParm* endPlugin(CFParm* PParm);
317 extern MODULEAPI CFParm* getPluginProperty(CFParm* PParm);
318 extern MODULEAPI CFParm* registerHook(CFParm* PParm);
319 extern MODULEAPI CFParm* triggerEvent(CFParm* PParm);
320 */
321
322 typedef struct _hook_entry
323 {
324 f_plug_api func;
325 int fid;
326 char fname[256];
327 } hook_entry;
328
329 #endif /*PLUGIN_H_*/