1 | /* |
1 | /* |
2 | * static char *rcsid_plugins_c = |
2 | * static char *rcsid_plugins_c = |
3 | * "$Id: plugins.c,v 1.11 2006/06/11 15:02:16 root Exp $"; |
3 | * "$Id: plugins.c,v 1.12 2006/07/15 11:57:02 elmex Exp $"; |
4 | */ |
4 | */ |
5 | |
5 | |
6 | /*****************************************************************************/ |
6 | /*****************************************************************************/ |
7 | /* CrossFire, A Multiplayer game for X-windows */ |
7 | /* CrossFire, A Multiplayer game for X-windows */ |
8 | /* */ |
8 | /* */ |
… | |
… | |
286 | int execute_global_event(int eventcode, ...) |
286 | int execute_global_event(int eventcode, ...) |
287 | { |
287 | { |
288 | va_list args; |
288 | va_list args; |
289 | object* op; |
289 | object* op; |
290 | object* op2; |
290 | object* op2; |
|
|
291 | object* op3; |
291 | mapstruct *map; |
292 | mapstruct *map; |
292 | player* pl; |
293 | player* pl; |
293 | char* buf; |
294 | char* buf; |
294 | int i, rt; |
295 | int i, rt, retval = 0, *tmpretval = NULL, fix; |
295 | crossfire_plugin* cp; |
296 | crossfire_plugin* cp; |
296 | if (plugins_list == NULL) |
297 | if (plugins_list == NULL) |
297 | return -1; |
298 | return -1; |
298 | |
299 | |
299 | va_start(args, eventcode); |
300 | va_start(args, eventcode); |
… | |
… | |
415 | if (cp->gevent[eventcode] != NULL) |
416 | if (cp->gevent[eventcode] != NULL) |
416 | cp->gevent[eventcode](&rt, eventcode, op, buf); |
417 | cp->gevent[eventcode](&rt, eventcode, op, buf); |
417 | } |
418 | } |
418 | break; |
419 | break; |
419 | |
420 | |
|
|
421 | case EVENT_FIND_UNARMED_SKILL: |
|
|
422 | op = va_arg(args, object*); |
|
|
423 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
|
|
424 | if (cp->gevent[eventcode] != NULL) |
|
|
425 | if ((tmpretval = cp->gevent[eventcode](&rt, eventcode, op)) && *tmpretval > 0) { |
|
|
426 | retval = *tmpretval; |
|
|
427 | } |
|
|
428 | } |
|
|
429 | break; |
|
|
430 | |
|
|
431 | case EVENT_PLAYER_USE_SKILL: |
|
|
432 | case EVENT_MONSTER_USE_SKILL: |
|
|
433 | op = va_arg(args, object*); |
|
|
434 | op2 = va_arg(args, object*); |
|
|
435 | op3 = va_arg(args, object*); |
|
|
436 | fix = va_arg(args, int); |
|
|
437 | buf = va_arg(args, char*); |
|
|
438 | for (cp = plugins_list; cp != NULL; cp = cp->next) { |
|
|
439 | if (cp->gevent[eventcode] != NULL) |
|
|
440 | if ((tmpretval = cp->gevent[eventcode](&rt, eventcode, op, op2, op3, fix, buf)) && *tmpretval != 0) { |
|
|
441 | retval = *tmpretval; |
|
|
442 | } |
|
|
443 | } |
|
|
444 | break; |
|
|
445 | |
420 | case EVENT_EXTCMD: |
446 | case EVENT_EXTCMD: |
421 | /*KICK: op, parms*/ |
447 | /*KICK: op, parms*/ |
422 | pl = va_arg (args, player *); |
448 | pl = va_arg (args, player *); |
423 | buf = va_arg (args, char *); |
449 | buf = va_arg (args, char *); |
424 | i = va_arg (args, int); |
450 | i = va_arg (args, int); |
… | |
… | |
427 | cp->gevent[eventcode](&rt, eventcode, pl, buf, i, buf); |
453 | cp->gevent[eventcode](&rt, eventcode, pl, buf, i, buf); |
428 | } |
454 | } |
429 | break; |
455 | break; |
430 | } |
456 | } |
431 | va_end(args); |
457 | va_end(args); |
|
|
458 | |
432 | return 0; |
459 | return retval; |
433 | } |
460 | } |
434 | |
461 | |
435 | int plugins_init_plugin(const char* libfile) |
462 | int plugins_init_plugin(const char* libfile) |
436 | { |
463 | { |
437 | LIBPTRTYPE ptr; |
464 | LIBPTRTYPE ptr; |