ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/plugin.h
Revision: 1.10
Committed: Mon Aug 14 04:22:04 2006 UTC (17 years, 9 months ago) by elmex
Content type: text/plain
Branch: MAIN
Changes since 1.9: +2 -1 lines
Log Message:
fixed bug in cf.pm when unloading extensions.
added EVENT_DROP_ON for the trade shops and made query_cost using double

File Contents

# User Rev Content
1 root 1.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 root 1.2 // how about making this an enum
56 root 1.1 #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 root 1.2 #define EVENT_MOVE 28 /* Monster move */
70 root 1.1 /*****************************************************************************/
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 root 1.2 #define EVENT_TELL 25 /* A player 'tell' something. */
86     #define EVENT_MUZZLE 26 /* A player was Muzzled (no_shout set). */
87 root 1.1 #define EVENT_KICK 27 /* A player was Kicked by a DM */
88 root 1.2 #define EVENT_FREE_OB 29 /* Object destroyed */
89 root 1.4 #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 root 1.5 #define EVENT_MAPCLEAN 33 /* Temporary map will be deleted */
93 elmex 1.9 #define EVENT_PLAYER_LOAD 34 /* Player was just loaded from disk */
94     #define EVENT_PLAYER_SAVE 35 /* Player was just saved to disk */
95     #define EVENT_PLAYER_USE_SKILL 36 /* player was just trying to use a skill */
96     #define EVENT_MONSTER_USE_SKILL 37 /* monster was just trying to use a skill*/
97 elmex 1.8 #define EVENT_FIND_UNARMED_SKILL 38 /* lets a plugin find the unarmed skill */
98 elmex 1.9 #define EVENT_EXTCMD 39 /* Low-Level socket command */
99     #define EVENT_CAST_SPELL 40 /* Something successfully casted a spell */
100 elmex 1.10 #define EVENT_DROP_ON 41 /* Something was dropped on this (floor) */
101 root 1.2 /* should add FREE_MAP, FREE_PLAYER */
102 root 1.1
103 elmex 1.10 #define NR_EVENTS 42
104 root 1.1
105     #include <stdarg.h>
106    
107     #define CFAPI_NONE 0
108     #define CFAPI_INT 1
109     #define CFAPI_LONG 2
110     #define CFAPI_CHAR 3
111     #define CFAPI_STRING 4
112     #define CFAPI_POBJECT 5
113     #define CFAPI_PMAP 6
114     #define CFAPI_FLOAT 7
115     #define CFAPI_DOUBLE 8
116     #define CFAPI_PARCH 9
117     #define CFAPI_FUNC 10
118     #define CFAPI_PPLAYER 11
119     #define CFAPI_PPARTY 12
120     #define CFAPI_PREGION 13
121 elmex 1.3 #define CFAPI_INT16 14
122 root 1.1
123     typedef void* (*f_plug_api) (int* type, ...);
124     typedef int (*f_plug_postinit) (void);
125     typedef int (*f_plug_init)(const char* iversion, f_plug_api gethooksptr);
126    
127     #ifndef WIN32
128     #define LIBPTRTYPE void*
129     #else
130     #define LIBPTRTYPE HMODULE
131     #endif
132    
133     typedef struct _crossfire_plugin
134     {
135     f_plug_api eventfunc; /* Event Handler function */
136     f_plug_api propfunc; /* Plugin getProperty function */
137     f_plug_postinit closefunc; /* Plugin Termination function */
138     LIBPTRTYPE libptr; /* Pointer to the plugin library */
139     char id[MAX_BUF]; /* Plugin identification string */
140     char fullname[MAX_BUF]; /* Plugin full name */
141     f_plug_api gevent[NR_EVENTS]; /* Global events registered */
142     struct _crossfire_plugin *next;
143     struct _crossfire_plugin *prev;
144     } crossfire_plugin;
145    
146     extern int plugin_number;
147     extern crossfire_plugin* plugins_list;
148    
149     #ifdef WIN32
150    
151     #define plugins_dlopen(fname) LoadLibrary(fname)
152     #define plugins_dlclose(lib) FreeLibrary(lib)
153     #define plugins_dlsym(lib,name) GetProcAddress(lib,name)
154    
155     #else /*WIN32 */
156    
157     #define plugins_dlopen(fname) dlopen(fname,RTLD_NOW|RTLD_GLOBAL)
158     #define plugins_dlclose(lib) dlclose(lib)
159     #define plugins_dlsym(lib,name) dlsym(lib,name)
160     #define plugins_dlerror() dlerror()
161     #endif /* WIN32 */
162    
163    
164     /* OBJECT-RELATED HOOKS */
165    
166     #define CFAPI_OBJECT_PROP_OB_ABOVE 1
167     #define CFAPI_OBJECT_PROP_OB_BELOW 2
168     #define CFAPI_OBJECT_PROP_NEXT_ACTIVE_OB 3
169     #define CFAPI_OBJECT_PROP_PREV_ACTIVE_OB 4
170     #define CFAPI_OBJECT_PROP_INVENTORY 5
171     #define CFAPI_OBJECT_PROP_ENVIRONMENT 6
172     #define CFAPI_OBJECT_PROP_HEAD 7
173     #define CFAPI_OBJECT_PROP_CONTAINER 8
174     #define CFAPI_OBJECT_PROP_MAP 9
175     #define CFAPI_OBJECT_PROP_COUNT 10
176     #define CFAPI_OBJECT_PROP_REFCOUNT 11
177     #define CFAPI_OBJECT_PROP_NAME 12
178     #define CFAPI_OBJECT_PROP_NAME_PLURAL 13
179     #define CFAPI_OBJECT_PROP_TITLE 14
180     #define CFAPI_OBJECT_PROP_RACE 15
181     #define CFAPI_OBJECT_PROP_SLAYING 16
182     #define CFAPI_OBJECT_PROP_SKILL 17
183     #define CFAPI_OBJECT_PROP_MESSAGE 18
184     #define CFAPI_OBJECT_PROP_LORE 19
185     #define CFAPI_OBJECT_PROP_X 20
186     #define CFAPI_OBJECT_PROP_Y 21
187     #define CFAPI_OBJECT_PROP_SPEED 22
188     #define CFAPI_OBJECT_PROP_SPEED_LEFT 23
189     #define CFAPI_OBJECT_PROP_NROF 24
190     #define CFAPI_OBJECT_PROP_DIRECTION 25
191     #define CFAPI_OBJECT_PROP_FACING 26
192     #define CFAPI_OBJECT_PROP_TYPE 27
193     #define CFAPI_OBJECT_PROP_SUBTYPE 28
194     #define CFAPI_OBJECT_PROP_CLIENT_TYPE 29
195     #define CFAPI_OBJECT_PROP_RESIST 30
196     #define CFAPI_OBJECT_PROP_ATTACK_TYPE 31
197     #define CFAPI_OBJECT_PROP_PATH_ATTUNED 32
198     #define CFAPI_OBJECT_PROP_PATH_REPELLED 33
199     #define CFAPI_OBJECT_PROP_PATH_DENIED 34
200     #define CFAPI_OBJECT_PROP_MATERIAL 35
201     #define CFAPI_OBJECT_PROP_MATERIAL_NAME 36
202     #define CFAPI_OBJECT_PROP_MAGIC 37
203     #define CFAPI_OBJECT_PROP_VALUE 38
204     #define CFAPI_OBJECT_PROP_LEVEL 39
205     #define CFAPI_OBJECT_PROP_LAST_HEAL 40
206     #define CFAPI_OBJECT_PROP_LAST_SP 41
207     #define CFAPI_OBJECT_PROP_LAST_GRACE 42
208     #define CFAPI_OBJECT_PROP_LAST_EAT 43
209     #define CFAPI_OBJECT_PROP_INVISIBLE_TIME 44
210     #define CFAPI_OBJECT_PROP_PICK_UP 45
211     #define CFAPI_OBJECT_PROP_ITEM_POWER 46
212     #define CFAPI_OBJECT_PROP_GEN_SP_ARMOUR 47
213     #define CFAPI_OBJECT_PROP_WEIGHT 48
214     #define CFAPI_OBJECT_PROP_WEIGHT_LIMIT 49
215     #define CFAPI_OBJECT_PROP_CARRYING 50
216     #define CFAPI_OBJECT_PROP_GLOW_RADIUS 51
217     #define CFAPI_OBJECT_PROP_PERM_EXP 52
218     #define CFAPI_OBJECT_PROP_CURRENT_WEAPON 53
219     #define CFAPI_OBJECT_PROP_ENEMY 54
220     #define CFAPI_OBJECT_PROP_ATTACKED_BY 55
221     #define CFAPI_OBJECT_PROP_RUN_AWAY 56
222     #define CFAPI_OBJECT_PROP_CHOSEN_SKILL 57
223     #define CFAPI_OBJECT_PROP_HIDDEN 58
224     #define CFAPI_OBJECT_PROP_MOVE_STATUS 59
225     #define CFAPI_OBJECT_PROP_MOVE_TYPE 60
226     #define CFAPI_OBJECT_PROP_SPELL_ITEM 61
227     #define CFAPI_OBJECT_PROP_EXP_MULTIPLIER 62
228     #define CFAPI_OBJECT_PROP_ARCHETYPE 63
229     #define CFAPI_OBJECT_PROP_OTHER_ARCH 64
230     #define CFAPI_OBJECT_PROP_CUSTOM_NAME 65
231     #define CFAPI_OBJECT_PROP_ANIM_SPEED 66
232     #define CFAPI_OBJECT_PROP_FRIENDLY 67
233     #define CFAPI_OBJECT_PROP_SHORT_NAME 68
234     #define CFAPI_OBJECT_PROP_BASE_NAME 69
235     #define CFAPI_OBJECT_PROP_MAGICAL 70
236     #define CFAPI_OBJECT_PROP_LUCK 71
237     #define CFAPI_OBJECT_PROP_EXP 72
238     #define CFAPI_OBJECT_PROP_OWNER 73
239     #define CFAPI_OBJECT_PROP_PRESENT 74
240     #define CFAPI_OBJECT_PROP_CHEATER 75
241     #define CFAPI_OBJECT_PROP_MERGEABLE 76
242     #define CFAPI_OBJECT_PROP_PICKABLE 77
243     #define CFAPI_OBJECT_PROP_FLAGS 78
244     #define CFAPI_OBJECT_PROP_STR 79
245     #define CFAPI_OBJECT_PROP_DEX 80
246     #define CFAPI_OBJECT_PROP_CON 81
247     #define CFAPI_OBJECT_PROP_WIS 82
248     #define CFAPI_OBJECT_PROP_INT 83
249     #define CFAPI_OBJECT_PROP_POW 84
250     #define CFAPI_OBJECT_PROP_CHA 85
251     #define CFAPI_OBJECT_PROP_WC 86
252     #define CFAPI_OBJECT_PROP_AC 87
253     #define CFAPI_OBJECT_PROP_HP 88
254     #define CFAPI_OBJECT_PROP_SP 89
255     #define CFAPI_OBJECT_PROP_GP 90
256     #define CFAPI_OBJECT_PROP_FP 91
257     #define CFAPI_OBJECT_PROP_MAXHP 92
258     #define CFAPI_OBJECT_PROP_MAXSP 93
259     #define CFAPI_OBJECT_PROP_MAXGP 94
260     #define CFAPI_OBJECT_PROP_DAM 95
261     #define CFAPI_OBJECT_PROP_GOD 96
262     #define CFAPI_OBJECT_PROP_ARCH_NAME 97
263     #define CFAPI_OBJECT_PROP_INVISIBLE 98
264     #define CFAPI_OBJECT_PROP_FACE 99
265     #define CFAPI_OBJECT_ANIMATION 100
266     #define CFAPI_PLAYER_PROP_IP 150
267     #define CFAPI_PLAYER_PROP_MARKED_ITEM 151
268     #define CFAPI_PLAYER_PROP_PARTY 152
269    
270     #define CFAPI_MAP_PROP_FLAGS 0
271     #define CFAPI_MAP_PROP_DIFFICULTY 1
272     #define CFAPI_MAP_PROP_PATH 2
273     #define CFAPI_MAP_PROP_TMPNAME 3
274     #define CFAPI_MAP_PROP_NAME 4
275     #define CFAPI_MAP_PROP_RESET_TIME 5
276     #define CFAPI_MAP_PROP_RESET_TIMEOUT 6
277     #define CFAPI_MAP_PROP_PLAYERS 7
278     #define CFAPI_MAP_PROP_LIGHT 8
279     #define CFAPI_MAP_PROP_DARKNESS 9
280     #define CFAPI_MAP_PROP_WIDTH 10
281     #define CFAPI_MAP_PROP_HEIGHT 11
282     #define CFAPI_MAP_PROP_ENTER_X 12
283     #define CFAPI_MAP_PROP_ENTER_Y 13
284     #define CFAPI_MAP_PROP_TEMPERATURE 14
285     #define CFAPI_MAP_PROP_PRESSURE 15
286     #define CFAPI_MAP_PROP_HUMIDITY 16
287     #define CFAPI_MAP_PROP_WINDSPEED 17
288     #define CFAPI_MAP_PROP_WINDDIR 18
289     #define CFAPI_MAP_PROP_SKY 19
290     #define CFAPI_MAP_PROP_WPARTX 20
291     #define CFAPI_MAP_PROP_WPARTY 21
292     #define CFAPI_MAP_PROP_MESSAGE 22
293     #define CFAPI_MAP_PROP_NEXT 23
294     #define CFAPI_MAP_PROP_REGION 24
295    
296     #define CFAPI_ARCH_PROP_NAME 0
297     #define CFAPI_ARCH_PROP_NEXT 1
298     #define CFAPI_ARCH_PROP_HEAD 2
299     #define CFAPI_ARCH_PROP_MORE 3
300     #define CFAPI_ARCH_PROP_CLONE 4
301    
302     #define CFAPI_PARTY_PROP_NAME 0
303     #define CFAPI_PARTY_PROP_NEXT 1
304     #define CFAPI_PARTY_PROP_PASSWORD 2
305     #define CFAPI_PARTY_PROP_PLAYER 3
306    
307     #define CFAPI_REGION_PROP_NAME 0
308     #define CFAPI_REGION_PROP_NEXT 1
309     #define CFAPI_REGION_PROP_PARENT 2
310     #define CFAPI_REGION_PROP_LONGNAME 3
311     #define CFAPI_REGION_PROP_MESSAGE 4
312    
313     /*****************************************************************************/
314     /* Exportable functions. Any plugin should define all those. */
315     /* initPlugin is called when the plugin initialization process starts.*/
316     /* endPlugin is called before the plugin gets unloaded from memory. */
317     /* getPluginProperty is currently unused. */
318     /* registerHook is used to transmit hook pointers from server to plugin.*/
319     /* triggerEvent is called whenever an event occurs. */
320     /*****************************************************************************/
321     /*extern MODULEAPI CFParm* initPlugin(CFParm* PParm);
322     extern MODULEAPI CFParm* endPlugin(CFParm* PParm);
323     extern MODULEAPI CFParm* getPluginProperty(CFParm* PParm);
324     extern MODULEAPI CFParm* registerHook(CFParm* PParm);
325     extern MODULEAPI CFParm* triggerEvent(CFParm* PParm);
326     */
327    
328     typedef struct _hook_entry
329     {
330     f_plug_api func;
331     int fid;
332     char fname[256];
333     } hook_entry;
334    
335     #endif /*PLUGIN_H_*/