ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/pod/events.pod
Revision: 1.28
Committed: Mon Oct 6 18:26:35 2008 UTC (15 years, 8 months ago) by elmex
Branch: MAIN
Changes since 1.27: +6 -0 lines
Log Message:
refactored drop code a bit, and hopefully fixed some bugs with it.

File Contents

# User Rev Content
1 root 1.23 =head1 DELIANTRA PLUG-IN EVENTS
2 pippijn 1.1
3     This document briefly describes each plug-in event. It is also used to
4     generate the event-list itself, so is always complete. Be careful wehn
5     changing it, though.
6    
7     =head2 NOTATION
8    
9     the event description below uses a variant of the forth stack notation -
10     an opening parenthesis followed by the type of each parameter, optionally
11     followed by two dashes and the returning parameters. If the latter is
12     missing, the event will be invoked but cannot change wether the event gets
13     processed.
14    
15     If it is specified (even if no return values are supported), a plug-in
16     can override (e.g. using C<cf::override> in Perl) event processing,
17     basically short-circuiting it. For example, if you override from within a
18     player BIRTH event, nothing much will happen with respect to the built-in
19     processing, but if you override from within a player TELL event, the tell
20     will be ignored (presumably your plug-in took care of it).
21    
22    
23 root 1.12 =head2 ATTACHABLE EVENTS
24 pippijn 1.1
25 root 1.12 No time to document this, screw me.
26 pippijn 1.1
27     =head3 instantiate (object init-args...)
28    
29 root 1.12 An object was instantiated.
30    
31     For objects, this event occurs when a map is loaded for the first time
32     when it was instantiated from an archetype, or when the object was created
33 pippijn 1.1 dynamically. The arguments are as specified in the C<attach> attribute of
34     the object or archetype.
35    
36     This is useful to initialise any per-object state you might need.
37    
38     =head3 reattach (object)
39    
40     Invoked whenever attachments/plug-ins need to get reattached to the
41     object. This usually happens when it was loaded from disk, or when the
42     server was reloaded. This event will only be generated if the object has
43     attachments.
44    
45     =head3 clone (object destination)
46    
47 root 1.12 An object with _attached plugin_ is cloned, that is, a copy was made. The
48     copy automatically has all attachments the original object had. The perl
49     variables get copied in a shallow way (references are shared between
50     instances). If this is not the behaviour you need, you have to adjust the
51     B<destination> object as you see fit.
52    
53     =head3 destroy (object -- )
54    
55 root 1.23 Invoked when the deliantra object gets destroyed, and only when the object
56 root 1.12 has a handler for this event. This event can occur many times, as its
57     called when the in-memory object is destroyed, not when the object itself
58     dies.
59    
60    
61     =head2 OBJECT EVENTS
62    
63     Object events always relate to a specific object, which is always the
64     first argument. Not all events get generated for every object, some are
65     specific to an object type.
66 pippijn 1.1
67 root 1.20 =head3 add_bonus (item creator difficulty max_magic flags -- )
68 root 1.6
69     A basic item has been created (e.g. for shops, monsters drops etc.)
70     that needs bonus values applied. The B<creator> object is a template
71     object that can be used to inherit stuff (and can be NULL). Flags is a
72     combination of GT_ENVIRONMENT (???) or GT_STARTEQUIP (set FLAG_STARTEQUIP
73     on item or set its value to 0) or GT_MINIMAL (???)
74    
75     When overriden, built-in bonus generation is skipped, otherwise
76     treasure generation continues as it would without this hook.
77    
78     In general, if flags != 0 or creator != 0 you should just return and leave
79     item generation to the standard code.
80    
81 root 1.12 =head3 remove (object -- )
82    
83     Invoked before the object is removed from its environment.
84    
85     =head3 insert (object -- )
86 pippijn 1.1
87 root 1.12 Called after the object was inserted into a container or map.
88 pippijn 1.1
89 root 1.12 =head3 tick (object -- )
90 pippijn 1.1
91     Invoked whenever the object "ticks", i.e. has positive B<speed_left>. Only
92     during ticks should an objetc process any movement or other events.
93    
94     =head3 kill (object hitter -- )
95    
96 root 1.25 Invoked whenever an object was killed (hp < 0 caused by an attack) and is
97     about to get removed. Overriding processing will skip removal, but to do
98     this successfully you have to keep the object from dieing, otherwise the
99     event gets invoked again and again.
100 pippijn 1.1
101     =head3 apply (object who -- applytype)
102    
103     Invoked whenever the object is being applied in some way. The applytype is one of:
104    
105     =over 4
106    
107     =item B<0> player or monster can't apply objects of that type
108    
109     =item B<1> has been applied, or there was an error applying the object
110    
111     =item B<2> objects of that type can't be applied if not in inventory
112    
113     =back
114    
115 root 1.27 =head3 reset (object)
116    
117     Invoked whenever the object is initialised on a map after it was
118     loaded. This can be used to emulate shop-floor behaviour for example.
119    
120 pippijn 1.1 =head3 throw (object thrower)
121    
122     Invoked when an B<object> is thrown by B<thrower>.
123    
124     =head3 stop (object -- )
125    
126     Invoked when a thrown B<object> (arrow, other stuff) hits something and is
127     thus being "stopped".
128    
129     =head3 can_apply (who object -- reason)
130    
131     =head3 can_be_applied (object who -- reason)
132    
133     Check wether the B<object> can be applied/readied/etc. by the
134     object B<who> and return reason otherwise. Reason is a bitset composed of
135     C<CAN_APPLY_*>-flags.
136    
137     =head3 be_ready (object who -- success)
138    
139     =head3 ready (who object -- success)
140    
141     Invoked whenever an B<object> is being applied by object B<who>. See
142     I<can_apply> for an alternative if you just want to check wether something
143     can apply an object.
144    
145     =head3 be_unready (object who -- deleted)
146    
147     =head3 unready (who object -- deleted)
148    
149     Unwield/unapply/unready the given spell/weapon/skill/etc. B<object>,
150     currently applied by B<who>. If your override, make sure you give 'who'
151     (if it is a player) an indication of whats wrong. Must return true if the
152     object was freed.
153    
154 root 1.19 =head3 use_skill (skill who part direction stringarg -- )
155 pippijn 1.1
156     Invoked whenever a skill is used by somebody or something.
157    
158 root 1.19 =head3 cast_spell (spell owner casting_object direction stringarg -- )
159 pippijn 1.1
160     Invoked whenever a given spell is cast by B<casting_object> (used by
161     B<owner>).
162    
163     =head3 drop (object who -- )
164    
165     Invoked whenever an item gets dropped by somebody, e.g. as a result of a
166     drop command.
167 elmex 1.28 B<NOTE:> If you put the object somewhere else or destroyed the object
168     you have to override! If you do nothing with the object and override it is
169     given back to the dropper.
170 pippijn 1.1
171     =head3 drop_on (floor object who -- )
172    
173     Invoked whenever some B<object> is being dropped on the B<floor> object.
174 elmex 1.28 B<NOTE:> If you put the object somewhere else or destroyed the object
175     you have to override! If you do nothing with the object and override it is
176     given back to the dropper.
177 pippijn 1.1
178     =head3 say (object player message)
179    
180     Invoked whenever the I<object> can hear a B<message> being said by
181     B<player> in its vicinity.
182    
183     =head3 monster_move (monster enemy -- )
184    
185     Invoked whenever the B<monster> tries to move, just after B<enemy> and
186     other parameters have been determined, but before movement is actually
187     executed.
188    
189     =head3 attack (object hitter -- damage)
190    
191     Object gets attacked by somebody - when overriden, should return the
192     damage that has been dealt.
193    
194     =head3 skill_attack (attacker victim message skill -- success)
195    
196     Invoked whenever an B<attacker> attacks B<victim> using a B<skill> (skill
197     cna be C<undef>). B<message> is the message that describes the attack when
198     damage is done.
199    
200     =head3 weapon_attack (weapon hitter victim)
201    
202     Invoked whenever an object is used as a B<weapon> by B<hitter> to attack
203     B<victim>.
204    
205     =head3 inscribe_note (book pl message skill -- )
206    
207     Used whenever a book gets inscribed with a message.
208    
209     =head3 trigger (object who -- )
210    
211     Invoked whenever a lever-like B<object> has been activated/triggered in some
212     (manual) way.
213    
214     =head3 move_trigger (object victim originator -- )
215    
216     Invoked whenever a trap-like B<object> has been activated, usually by
217     moving onto it. This includes not just traps, but also buttons, holes,
218     signs and similar stuff.
219    
220 root 1.15 =head3 open (container who -- )
221    
222     Invoked whenever a container gets opened. When overriden, the container will not
223     get opened, but you must tell op about the reason.
224    
225 pippijn 1.1 =head3 close (container who -- )
226    
227 root 1.15 Invoked whenever a container gets closed. When overriden, the container
228     will not get closed, but you must tell op about the reason. This event
229     is not crash-safe, i.e. containers might be closed due to a server crash
230     without this event being invoked.
231 pippijn 1.1
232    
233     =head2 GLOBAL EVENTS
234    
235     Global events have no relation to specific objects.
236    
237 root 1.3 =head3 cleanup ()
238    
239     Called when the server is cleaning up, just before it calls exit.
240    
241 root 1.24 =head3 clock ()
242 pippijn 1.1
243     Is invoked on every server tick, usually every 0.12 seconds.
244    
245 root 1.24 =head3 resource_update ()
246    
247     Is invoked after each time the server reloads its resources, which is
248     usually one of the earliest things it does when starting up.
249    
250 root 1.3
251 pippijn 1.1 =head2 PLAYER EVENTS
252    
253     Player events always have a player object as first argument.
254    
255     =head3 birth (player)
256    
257     Invoked as very first thing after creating a player.
258    
259     =head3 quit (player)
260    
261     Invoked wheneever a player quits, before actually removing him/her.
262    
263     =head3 kick (player params -- )
264    
265 root 1.14 Invoked when the given player is being kicked, before the kick is
266     executed.
267 pippijn 1.1
268 root 1.14 =head3 load (player -- )
269 pippijn 1.1
270     Invoked whenever a player has been loaded from disk, but before
271     actual login.
272    
273 root 1.14 =head3 save (player -- )
274 pippijn 1.1
275 root 1.14 Invoked just before a player gets serialised.
276 pippijn 1.1
277 root 1.14 =head3 save_done (player -- )
278 root 1.13
279 root 1.14 Invoked just after a player was serialised.
280 root 1.13
281     =head3 connect (player -- )
282    
283     Invoked just after the player object was connected to a client.
284    
285     =head3 disconnect (player -- )
286    
287     Invoked just before the player gets disconnected from the client.
288    
289 pippijn 1.1 =head3 login (player)
290    
291     Invoked whenever a player logs in.
292    
293 root 1.21 =head3 logout (player cleanly -- )
294 pippijn 1.1
295     Invoked whenever a player logs out, gets disconnected etc.
296    
297     =head3 death (player)
298    
299     Invoked whenever a player dies, before the death actually gets processed.
300    
301 root 1.4 =head3 map_change (player newmap x y -- )
302 pippijn 1.1
303 root 1.4 Invoked before a player moves from one map to another, can override the movement.
304 pippijn 1.1
305 root 1.22 =head3 region_change (player newregion oldregion -- )
306    
307     Invoked when a player entered a new region. Cannot be overriden.
308    
309 root 1.7 =head3 command (player command args -- time)
310    
311     Execute a user command send by the client. Programmable plug-ins usually
312     handle this event internally.
313    
314 pippijn 1.1 =head3 extcmd (player string)
315    
316 root 1.7 Invoked whenever a client issues the C<extcmd> protocol command.
317     Programmable plug-ins usually handle this event internally.
318 pippijn 1.1
319     =head3 move (player direction -- )
320    
321 root 1.18 Called whenever the player is supposed to move or attack. The handler
322     must handle the cases of speed_left or weapon_sp_left being negative,
323     fire being on, is responsible for decreaseing the speed_left value
324     on successful moves etc. etc.. When overriden, must return a boolean
325     indicating wether a move could be effected.
326    
327 pippijn 1.1 =head3 pray_altar (player altar skill -- )
328    
329     Invoked whenever the B<player> prays over an B<altar>, using the given B<skill>.
330    
331     =head3 tell (player name message -- )
332    
333     Invoked whenever the player uses the B<tell> or B<reply> command, before
334     it gets processed.
335    
336 pippijn 1.16 =head3 told (player player message -- )
337    
338     Invoked right before a message is being told to a player using B<tell> or
339     B<reply>.
340    
341 pippijn 1.1 =head3 say (player message --)
342    
343     =head3 chat (player message --)
344    
345     =head3 shout (player message --)
346    
347     Invoked whenever the player uses the B<say>, B<chat> or B<shout> command,
348     before it gets processed.
349    
350    
351     =head2 MAP EVENTS
352    
353     These events are generally dependent on a map and thus all have a map
354     as first argument.
355    
356     =head3 instantiate (map)
357    
358     Original B<map> has been loaded (e.g. on first use, or after a map
359     reset).
360    
361     =head3 swapin (map)
362    
363     Invoked when a previously swapped-out temporary B<map> has been loaded again.
364    
365     =head3 swapout (map)
366    
367     Invoked after a B<map> has been swapped out to disk.
368    
369     =head3 reset (map)
370    
371     Invoked when a B<map> gets reset.
372    
373     =head3 clean (map)
374    
375     Invoked when a temporary B<map> gets deleted on-disk.
376    
377 root 1.4 =head3 enter (map player x y -- )
378 pippijn 1.1
379 root 1.4 Invoked whenever a player tries to enter the B<map>, while he/she is still
380 root 1.5 on the old map. Overriding means the player won't be able to enter, and,
381     if newmap/x/y are given, will be redirected to that map instead.
382 pippijn 1.1
383 root 1.4 =head3 leave (map player -- )
384 pippijn 1.1
385 root 1.4 Invoked whenever a player tries to leave the B<map>. Overriding means the
386     player won't be able to leave.
387 pippijn 1.1
388 root 1.9 =head3 trigger (map connection state -- )
389 pippijn 1.1
390     Invoked whenever something activates a B<connection> on the B<map>. If B<state>
391     is true the connection was 'state' and if false it is 'released'.
392 root 1.5
393 root 1.8
394     =head2 CLIENT EVENTS
395    
396     These events are very similar to player events, but they are might be
397     handled asynchronously as soon as the command reaches the server, even when
398     the player hasn't logged in yet (meaning there is no player yet).
399    
400 root 1.9 =head3 connect (client -- )
401    
402     Called as soon as a new connection to the server is established. Should
403     not be overriden.
404    
405 root 1.17 =head3 setup (client string -- )
406    
407     Client sent the setup command to negotiate parameters. Handling is
408     mandatory and done by F<login.ext>.
409    
410 root 1.9 =head3 addme (client -- )
411    
412 root 1.17 The client sent an addme, thus ending the initial handshaking. Handling is mandatory
413     and done by F<login.ext>.
414 root 1.9
415 root 1.10 =head3 reply (client replystring -- )
416    
417     Called when the client submits a reply in the ST_CUSTOM state. Usually
418     handled internally by language plugins.
419    
420 root 1.9 =head3 exticmd (client string -- )
421 root 1.8
422     Like C<extcmd>, but can be called before a player has logged in.
423    
424     Programmable plug-ins usually handle this event internally.
425