39 #include "svnversion.h" 43 #define NR_OF_HOOKS (sizeof(plug_hooks)/sizeof(*plug_hooks)) 251 if (plugins_list == NULL)
254 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
255 if (!strcmp(
id, cp->
id)) {
264 static char buf[256];
268 err = GetLastError();
269 if (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, 0, buf,
sizeof(buf), NULL) == 0)
270 snprintf(buf,
sizeof(buf),
"error %lu", err);
271 p = strchr(buf,
'\0');
272 while (p > buf && (p[-1] ==
'\r' || p[-1] ==
'\n'))
288 if (op->
env != NULL) {
310 int user_event(
object *op,
object *activator,
object *third,
const char *message,
int fix) {
314 static int do_execute_event(
object *op,
int eventcode,
object *activator,
object *third,
const char *message,
int fix,
talk_info *talk) {
321 LOG(
llevDebug,
"********** EVENT HANDLER **********\n");
323 if (activator != NULL)
328 if (tmp->title != NULL)
330 if (tmp->slaying != NULL)
332 if (tmp->name != NULL)
336 if (tmp->title == NULL) {
341 }
else if (tmp->slaying == NULL) {
348 if (plugin == NULL) {
350 LOG(
llevError,
"The requested plugin doesn't exist: %s at %d/%d in map %s\n", tmp->title, env->
x, env->
y, env->
map->
name);
358 rv = plugin->
eventfunc(&rvt, op, activator, third, message, fix, tmp, talk);
364 LOG(
llevDebug,
"Removing unique event %s\n", tmp->slaying);
377 int execute_event(
object *op,
int eventcode,
object *activator,
object *third,
const char *message,
int fix) {
378 return do_execute_event(op, eventcode, activator, third, message, fix, NULL);
395 if (plugins_list == NULL)
398 va_start(args, eventcode);
403 op = va_arg(args,
object *);
404 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
405 if (cp->
gevent[eventcode] != NULL)
406 cp->
gevent[eventcode](&rt, eventcode, op);
412 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
413 if (cp->
gevent[eventcode] != NULL)
414 cp->
gevent[eventcode](&rt, eventcode);
419 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
420 if (cp->
gevent[eventcode] != NULL)
421 cp->
gevent[eventcode](&rt, eventcode);
427 op = va_arg(args,
object *);
428 op2 = va_arg(args,
object *);
429 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
430 if (cp->
gevent[eventcode] != NULL)
431 cp->
gevent[eventcode](&rt, eventcode, op, op2);
437 op = va_arg(args,
object *);
438 op2 = va_arg(args,
object *);
439 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
440 if (cp->
gevent[eventcode] != NULL)
441 cp->
gevent[eventcode](&rt, eventcode, op, op2);
447 pl = va_arg(args,
player *);
448 buf = va_arg(args,
char *);
449 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
450 if (cp->
gevent[eventcode] != NULL)
451 cp->
gevent[eventcode](&rt, eventcode, pl, buf);
457 pl = va_arg(args,
player *);
458 buf = va_arg(args,
char *);
459 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
460 if (cp->
gevent[eventcode] != NULL)
461 cp->
gevent[eventcode](&rt, eventcode, pl, buf);
467 op = va_arg(args,
object *);
469 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
470 if (cp->
gevent[eventcode] != NULL)
471 cp->
gevent[eventcode](&rt, eventcode, op, map);
477 op = va_arg(args,
object *);
479 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
480 if (cp->
gevent[eventcode] != NULL)
481 cp->
gevent[eventcode](&rt, eventcode, op, map);
488 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
489 if (cp->
gevent[eventcode] != NULL)
490 cp->
gevent[eventcode](&rt, eventcode, map);
496 op = va_arg(args,
object *);
497 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
498 if (cp->
gevent[eventcode] != NULL)
499 cp->
gevent[eventcode](&rt, eventcode, op);
505 op = va_arg(args,
object *);
506 buf = va_arg(args,
char *);
507 i = va_arg(args,
int);
508 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
509 if (cp->
gevent[eventcode] != NULL)
510 cp->
gevent[eventcode](&rt, eventcode, op, buf, i);
516 op = va_arg(args,
object *);
517 buf = va_arg(args,
const char *);
518 op2 = va_arg(args,
object *);
519 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
520 if (cp->
gevent[eventcode] != NULL)
521 cp->
gevent[eventcode](&rt, eventcode, op, buf, op2);
527 op = va_arg(args,
object *);
528 buf = va_arg(args,
char *);
529 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
530 if (cp->
gevent[eventcode] != NULL)
531 cp->
gevent[eventcode](&rt, eventcode, op, buf);
537 op = va_arg(args,
object *);
538 buf = va_arg(args,
char *);
539 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
540 if (cp->
gevent[eventcode] != NULL)
541 cp->
gevent[eventcode](&rt, eventcode, op, buf);
548 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
549 if (cp->
gevent[eventcode] != NULL)
550 cp->
gevent[eventcode](&rt, eventcode, map);
557 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
558 if (cp->
gevent[eventcode] != NULL)
559 cp->
gevent[eventcode](&rt, eventcode, map);
575 va_start(args, type);
576 request_type = va_arg(args,
int);
577 if (request_type == 0) {
580 fid = va_arg(args,
int);
586 *rapi = plug_hooks[fid].
func;
592 buf = va_arg(args,
char *);
597 if (!strcmp(buf, plug_hooks[i].fname)) {
598 *rapi = plug_hooks[i].
func;
633 if (svn_rev == NULL) {
634 LOG(
llevError,
"Unable to find SvnRevPlugin in %s\n", libfile);
639 LOG(
llevError,
"SVN Version mismatch in in %s (%s != %s)\n", libfile, svn_rev, SVN_REV);
645 if (initfunc == NULL) {
651 if (propfunc == NULL) {
657 if (eventfunc == NULL) {
663 if (postfunc == NULL) {
669 if (closefunc == NULL) {
682 propfunc(&i,
"Identification", cp->
id,
sizeof(cp->
id));
686 if (plugins_list == NULL) {
689 for (ccp = plugins_list; ccp->
next != NULL; ccp = ccp->
next)
707 if (plugins_list == NULL)
710 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
711 if (!strcmp(
id, cp->
id)) {
750 "List of loaded plugins:\n-----------------------");
752 if (plugins_list == NULL)
755 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
771 char *buffer, *
final;
772 int length, largest_coin;
775 va_start(args, type);
777 largest_coin = va_arg(args,
int);
778 buffer = va_arg(args,
char*);
779 length = va_arg(args,
int);
789 strncpy(buffer,
final, length - 1);
790 buffer[length - 1] =
'\0';
805 va_start(args, type);
806 name = va_arg(args,
const char *);
807 num = va_arg(args,
int *);
811 (*num) = anim ? anim->
num : 0;
827 va_start(args, type);
828 face = va_arg(args,
const char *);
829 error = va_arg(args,
int);
830 num = va_arg(args,
int *);
834 (*num) = f ? f->
number : 0;
848 va_start(args, type);
849 txt = va_arg(args,
const char *);
850 ret = va_arg(args,
char **);
864 va_start(args, type);
865 eventcode = va_arg(args,
int);
866 pname = va_arg(args,
char *);
873 cp->
gevent[eventcode] = hook;
882 va_start(args, type);
883 eventcode = va_arg(args,
int);
884 pname = va_arg(args,
char *);
890 cp->
gevent[eventcode] = NULL;
904 va_start(args, type);
905 str = va_arg(args,
const char *);
923 va_start(args, type);
942 va_start(args, type);
943 str = va_arg(args,
const char *);
962 va_start(args, type);
964 name = va_arg(args,
char *);
965 prepend_dir = va_arg(args,
int);
966 ret = va_arg(args,
int *);
985 va_start(args, type);
987 str = va_arg(args,
char *);
988 regexp = va_arg(args,
char *);
989 rv = va_arg(args,
const char **);
991 *rv =
re_cmp(str, regexp);
1002 va_start(args, type);
1004 dirtype = va_arg(args,
int);
1005 str = va_arg(args,
const char **);
1054 va_start(args, type);
1062 #define string_get_int(name) \ 1066 va_start(args, type); \ 1067 index = va_arg(args, int); \ 1068 str = va_arg(args, const char **); \ 1070 *str = name(index); \ 1071 *type = CFAPI_STRING; \ 1140 va_start(args, type);
1141 ob = va_arg(args,
object *);
1142 delay = va_arg(args,
long);
1143 mode = va_arg(args,
int);
1144 timer = va_arg(args,
int *);
1170 va_start(args, type);
1171 id = va_arg(args,
int);
1172 err = va_arg(args,
int *);
1187 const char *message;
1189 va_start(args, type);
1191 message = va_arg(args,
const char *);
1192 LOG(logLevel,
"%s", message);
1217 va_start(args, type);
1219 ctype = va_arg(args,
int);
1223 x = va_arg(args,
int);
1224 y = va_arg(args,
int);
1230 name = va_arg(args,
const char *);
1231 x = va_arg(args,
int);
1238 nx = va_arg(args,
int);
1239 ny = va_arg(args,
int);
1264 va_start(args, type);
1265 string = va_arg(args,
char *);
1283 va_start(args, type);
1285 ctype = va_arg(args,
int);
1286 str = va_arg(args,
const char *);
1287 name = va_arg(args,
char *);
1288 size = va_arg(args,
int);
1323 va_start(args, type);
1326 property = va_arg(args,
int);
1331 x = va_arg(args,
int);
1332 y = va_arg(args,
int);
1335 rint = va_arg(args,
int *);
1341 rint = va_arg(args,
int *);
1347 rstr = va_arg(args,
sstring *);
1353 rstr = va_arg(args,
sstring *);
1359 rstr = va_arg(args,
sstring *);
1365 rint = va_arg(args,
int *);
1371 rint = va_arg(args,
int *);
1377 rint = va_arg(args,
int *);
1383 rint = va_arg(args,
int *);
1389 rint = va_arg(args,
int *);
1395 rint = va_arg(args,
int *);
1401 rint = va_arg(args,
int *);
1407 rint = va_arg(args,
int *);
1413 rstr = va_arg(args,
sstring *);
1425 rreg = va_arg(args,
region **);
1431 rint = va_arg(args,
int *);
1449 va_start(args, type);
1452 property = va_arg(args,
int);
1456 buf = va_arg(args,
const char *);
1479 va_start(args, type);
1481 x = va_arg(args,
int);
1482 y = va_arg(args,
int);
1483 rint = va_arg(args,
int *);
1500 va_start(args, type);
1503 x = va_arg(args,
int);
1504 y = va_arg(args,
int);
1514 va_start(args, type);
1530 va_start(args, type);
1532 string = va_arg(args,
const char *);
1533 color = va_arg(args,
int);
1553 va_start(args, type);
1555 x = va_arg(args,
int);
1556 y = va_arg(args,
int);
1557 robj = va_arg(args,
object **);
1582 va_start(args, type);
1584 msg = va_arg(args,
char *);
1586 x = va_arg(args,
int);
1587 y = va_arg(args,
int);
1588 robj = va_arg(args,
object **);
1608 va_start(args, type);
1610 change = va_arg(args,
int);
1611 rint = va_arg(args,
int *);
1642 va_start(args, type);
1643 kind = va_arg(args,
int);
1646 op = va_arg(args,
object *);
1647 direction = va_arg(args,
int);
1648 activator = va_arg(args,
object *);
1649 ret = va_arg(args,
int *);
1651 *ret =
move_ob(op, direction, activator);
1655 pl = va_arg(args,
player *);
1656 direction = va_arg(args,
int);
1657 ret = va_arg(args,
int *);
1663 op = va_arg(args,
object *);
1664 ret = va_arg(args,
int *);
1685 const char *keyname;
1689 va_start(args, type);
1690 op = va_arg(args,
object *);
1691 keyname = va_arg(args,
const char *);
1692 value = va_arg(args,
const char **);
1707 const char *keyname;
1713 va_start(args, type);
1714 op = va_arg(args,
object *);
1715 keyname = va_arg(args,
char *);
1716 value = va_arg(args,
char *);
1717 add_key = va_arg(args,
int);
1718 ret = va_arg(args,
int *);
1746 va_start(args, type);
1748 op = va_arg(args,
object *);
1749 property = va_arg(args,
int);
1752 robject = va_arg(args,
object **);
1753 *robject = op->
above;
1758 robject = va_arg(args,
object **);
1759 *robject = op->
below;
1764 robject = va_arg(args,
object **);
1770 robject = va_arg(args,
object **);
1776 robject = va_arg(args,
object **);
1782 robject = va_arg(args,
object **);
1788 robject = va_arg(args,
object **);
1789 *robject = op->
head;
1794 robject = va_arg(args,
object **);
1806 rint = va_arg(args,
int *);
1812 rbuffer = va_arg(args,
char *);
1813 rbufsize = va_arg(args,
int);
1819 rsstring = va_arg(args,
sstring *);
1825 rsstring = va_arg(args,
sstring *);
1826 *rsstring = op->
title;
1831 rsstring = va_arg(args,
sstring *);
1832 *rsstring = op->
race;
1837 rsstring = va_arg(args,
sstring *);
1843 rsstring = va_arg(args,
sstring *);
1844 *rsstring = op->
skill;
1849 rsstring = va_arg(args,
sstring *);
1850 *rsstring = op->
msg;
1855 rsstring = va_arg(args,
sstring *);
1856 *rsstring = op->
lore;
1861 rint = va_arg(args,
int *);
1867 rint = va_arg(args,
int *);
1873 rfloat = va_arg(args,
float *);
1874 *rfloat = op->
speed;
1879 rfloat = va_arg(args,
float *);
1885 rint = va_arg(args,
int *);
1891 rint = va_arg(args,
int *);
1897 rint = va_arg(args,
int *);
1903 rint = va_arg(args,
int *);
1909 rint = va_arg(args,
int *);
1915 rint = va_arg(args,
int *);
1924 idx = va_arg(args,
int);
1925 resist = va_arg(args,
int16_t *);
1926 *resist = op->
resist[idx];
1932 rint = va_arg(args,
int *);
1938 rint = va_arg(args,
int *);
1944 rint = va_arg(args,
int *);
1950 rint = va_arg(args,
int *);
1956 rint = va_arg(args,
int *);
1962 rsstring = va_arg(args,
sstring *);
1968 rint = va_arg(args,
int *);
1974 rlong = va_arg(args,
long *);
1980 rint = va_arg(args,
int *);
1986 rint = va_arg(args,
int *);
1992 rint = va_arg(args,
int *);
1998 rint = va_arg(args,
int *);
2004 rint = va_arg(args,
int *);
2010 rint = va_arg(args,
int *);
2016 rint = va_arg(args,
int *);
2022 rint = va_arg(args,
int *);
2028 rint = va_arg(args,
int *);
2034 rint = va_arg(args,
int *);
2040 rint = va_arg(args,
int *);
2046 rint = va_arg(args,
int *);
2052 rint = va_arg(args,
int *);
2058 rint64 = va_arg(args,
int64_t *);
2064 robject = va_arg(args,
object **);
2070 robject = va_arg(args,
object **);
2071 *robject = op->
enemy;
2076 robject = va_arg(args,
object **);
2082 rint = va_arg(args,
int *);
2088 robject = va_arg(args,
object **);
2094 rint = va_arg(args,
int *);
2100 rint = va_arg(args,
int *);
2106 rint = va_arg(args,
int *);
2112 robject = va_arg(args,
object **);
2118 rdouble = va_arg(args,
double *);
2136 rsstring = va_arg(args,
sstring *);
2142 rint = va_arg(args,
int *);
2148 rint = va_arg(args,
int *);
2154 rbuffer = va_arg(args,
char *);
2155 rbufsize = va_arg(args,
int);
2163 i = va_arg(args,
int);
2164 rbuffer = va_arg(args,
char *);
2165 rbufsize = va_arg(args,
int);
2172 rsstring = va_arg(args,
sstring *);
2173 *rsstring = op->
name;
2178 rint = va_arg(args,
int *);
2184 rint = va_arg(args,
int *);
2190 rint64 = va_arg(args,
int64_t *);
2196 robject = va_arg(args,
object **);
2204 stype = va_arg(args,
int);
2206 unsigned char ptype;
2211 ptype = (
unsigned char)(va_arg(args,
int));
2212 robject = va_arg(args,
object **);
2217 ptype = (
unsigned char)(va_arg(args,
int));
2218 buf = va_arg(args,
char *);
2219 robject = va_arg(args,
object **);
2225 robject = va_arg(args,
object **);
2234 rint = va_arg(args,
int *);
2242 op2 = va_arg(args,
object *);
2243 rint = va_arg(args,
int *);
2252 op2 = va_arg(args,
object *);
2253 rint = va_arg(args,
int *);
2262 fl = va_arg(args,
int);
2263 rint = va_arg(args,
int *);
2270 rint = va_arg(args,
int *);
2276 rint = va_arg(args,
int *);
2282 rint = va_arg(args,
int *);
2288 rint = va_arg(args,
int *);
2294 rint = va_arg(args,
int *);
2300 rint = va_arg(args,
int *);
2306 rint = va_arg(args,
int *);
2312 rint = va_arg(args,
int *);
2318 rint = va_arg(args,
int *);
2324 rint = va_arg(args,
int *);
2330 rint = va_arg(args,
int *);
2336 rint = va_arg(args,
int *);
2342 rint = va_arg(args,
int *);
2348 rint = va_arg(args,
int *);
2354 rint = va_arg(args,
int *);
2360 rint = va_arg(args,
int *);
2366 rint = va_arg(args,
int *);
2372 rsstring = va_arg(args,
sstring *);
2378 rsstring = va_arg(args,
sstring *);
2384 rint = va_arg(args,
int *);
2390 rbuffer = va_arg(args,
char *);
2391 rbufsize = va_arg(args,
int);
2393 strncpy(rbuffer, op->
face->
name, rbufsize);
2394 rbuffer[rbufsize - 1] =
'\0';
2400 rbuffer = va_arg(args,
char *);
2401 rbufsize = va_arg(args,
int);
2405 rbuffer[rbufsize - 1] =
'\0';
2414 rsstring = va_arg(args,
sstring *);
2420 robject = va_arg(args,
object **);
2432 robject = va_arg(args,
object **);
2442 rbuffer = va_arg(args,
char *);
2443 rbufsize = va_arg(args,
int);
2485 rfloat = va_arg(args,
float *);
2491 rbuffer = va_arg(args,
char *);
2492 rbufsize = va_arg(args,
int);
2498 rint = va_arg(args,
int *);
2504 rint = va_arg(args,
int *);
2510 rint = va_arg(args,
int *);
2542 if (msg[0] != 0 && msg[size-1] ==
'\n') {
2547 temp = malloc(size+2);
2550 snprintf(temp, size+2,
"%s\n", msg);
2577 va_start(args, type);
2578 op = va_arg(args,
object *);
2579 property = va_arg(args,
int);
2582 if (op != NULL && (!op->
arch || (op != &op->
arch->
clone))) {
2585 sarg = va_arg(args,
char *);
2592 sarg = va_arg(args,
char *);
2599 sarg = va_arg(args,
char *);
2605 sarg = va_arg(args,
char *);
2611 sarg = va_arg(args,
char *);
2617 sarg = va_arg(args,
char *);
2623 sarg = va_arg(args,
char *);
2629 sarg = va_arg(args,
char *);
2635 farg = va_arg(args,
double);
2637 if (farg != op->
speed) {
2644 farg = va_arg(args,
double);
2650 iarg = va_arg(args,
int);
2661 if (op->
env != NULL) {
2687 iarg = va_arg(args,
int);
2693 iarg = va_arg(args,
int);
2699 int iargbis = va_arg(args,
int);
2702 iarg = va_arg(args,
int);
2703 op->
resist[iargbis] = iarg;
2708 iarg = va_arg(args,
int);
2714 iarg = va_arg(args,
int);
2720 iarg = va_arg(args,
int);
2726 iarg = va_arg(args,
int);
2732 iarg = va_arg(args,
int);
2741 iarg = va_arg(args,
int);
2747 larg = va_arg(args,
long);
2753 iarg = va_arg(args,
int);
2760 iarg = va_arg(args,
int);
2766 iarg = va_arg(args,
int);
2772 iarg = va_arg(args,
int);
2778 iarg = va_arg(args,
int);
2784 iarg = va_arg(args,
int);
2790 iarg = va_arg(args,
int);
2796 iarg = va_arg(args,
int);
2802 iarg = va_arg(args,
int);
2808 iarg = va_arg(args,
int);
2810 if (op->
weight != iarg) {
2815 if (op->
env != NULL) {
2841 iarg = va_arg(args,
int);
2847 iarg = va_arg(args,
int);
2854 if (tmp->
map != NULL) {
2863 s64arg = va_arg(args,
int64_t);
2869 oparg = va_arg(args,
object *);
2875 iarg = va_arg(args,
int);
2881 oparg = va_arg(args,
object *);
2887 iarg = va_arg(args,
int);
2893 iarg = va_arg(args,
int);
2899 iarg = va_arg(args,
int);
2905 oparg = va_arg(args,
object *);
2911 darg = va_arg(args,
double);
2917 sarg = va_arg(args,
char *);
2924 iarg = va_arg(args,
int);
2930 iarg = va_arg(args,
int);
2939 iarg = va_arg(args,
int);
2945 s64arg = va_arg(args,
int64_t);
2951 oparg = va_arg(args,
object *);
2964 iarg = va_arg(args,
int);
2965 iargbis = va_arg(args,
int);
2976 iarg = va_arg(args,
int);
2982 iarg = va_arg(args,
int);
2988 iarg = va_arg(args,
int);
2994 iarg = va_arg(args,
int);
3000 iarg = va_arg(args,
int);
3006 iarg = va_arg(args,
int);
3012 iarg = va_arg(args,
int);
3018 iarg = va_arg(args,
int);
3024 iarg = va_arg(args,
int);
3030 iarg = va_arg(args,
int);
3036 iarg = va_arg(args,
int);
3042 iarg = va_arg(args,
int);
3048 iarg = va_arg(args,
int);
3054 iarg = va_arg(args,
int);
3060 iarg = va_arg(args,
int);
3066 iarg = va_arg(args,
int);
3072 iarg = va_arg(args,
int);
3079 sarg = va_arg(args,
char *);
3080 ret = va_arg(args,
int *);
3095 sarg = va_arg(args,
char *);
3096 ret = va_arg(args,
int *);
3111 iarg = va_arg(args,
int);
3118 oparg = va_arg(args,
object *);
3138 sarg = va_arg(args,
char *);
3144 iarg = va_arg(args,
int);
3150 iarg = va_arg(args,
int);
3156 sarg = va_arg(args,
char *);
3220 va_start(args, type);
3222 applier = va_arg(args,
object *);
3243 va_start(args, type);
3245 applier = va_arg(args,
object *);
3246 applied = va_arg(args,
object *);
3247 aflags = va_arg(args,
int);
3248 ret = va_arg(args,
int *);
3263 object *op, **result;
3265 va_start(args, type);
3267 op = va_arg(args,
object *);
3268 result = va_arg(args,
object **);
3288 va_start(args, type);
3290 op = va_arg(args,
object *);
3291 owner = va_arg(args,
object *);
3292 desc = va_arg(args,
char *);
3293 size = va_arg(args,
int);
3298 strncpy(desc,
final, size);
3299 desc[size - 1] =
'\0';
3309 va_start(args, type);
3311 op = va_arg(args,
object *);
3312 ds = va_arg(args,
int);
3327 va_start(args, type);
3329 op = va_arg(args,
object *);
3330 level = va_arg(args,
int);
3331 result = va_arg(args,
int*);
3344 va_start(args, type);
3346 op = va_arg(args,
object *);
3362 va_start(args, type);
3364 op = va_arg(args,
object *);
3365 skillname = va_arg(args,
char *);
3379 va_start(args, type);
3381 op = va_arg(args,
object *);
3382 chg = va_arg(args,
object *);
3394 va_start(args, type);
3396 op = va_arg(args,
object *);
3415 va_start(args, type);
3417 op = va_arg(args,
object *);
3420 LOG(
llevError,
"Plugin trying to free freed/non removed object %s\n", op->
name);
3444 va_start(args, type);
3446 op = va_arg(args,
object *);
3447 kind = va_arg(args,
int);
3448 robj = va_arg(args,
object **);
3474 va_start(args, type);
3475 ival = va_arg(args,
int);
3480 robj = va_arg(args,
object **);
3488 sval = va_arg(args,
const char *);
3489 robj = va_arg(args,
object **);
3518 va_start(args, type);
3520 op = va_arg(args,
object *);
3522 LOG(
llevError,
"cfapi_object_insert: called with NULL object!\n");
3527 LOG(
llevError,
"cfapi_object_insert: called with FREED object!\n");
3532 LOG(
llevError,
"cfapi_object_insert: called with not removed object %s!\n", op->
name);
3535 itype = va_arg(args,
int);
3540 orig = va_arg(args,
object *);
3541 flag = va_arg(args,
int);
3542 x = va_arg(args,
int);
3543 y = va_arg(args,
int);
3544 robj = va_arg(args,
object **);
3546 LOG(
llevError,
"cfapi_object_insert (0): called with NULL map, object %s!\n", op->
name);
3556 orig = va_arg(args,
object *);
3557 flag = va_arg(args,
int);
3558 robj = va_arg(args,
object **);
3560 LOG(
llevError,
"cfapi_object_insert (1): called with NULL map, object %s!\n", op->
name);
3570 orig = va_arg(args,
object *);
3571 flag = va_arg(args,
int);
3572 x = va_arg(args,
int);
3573 y = va_arg(args,
int);
3574 robj = va_arg(args,
object **);
3576 LOG(
llevError,
"cfapi_object_insert (0): called with NULL map, object %s!\n", op->
name);
3592 orig = va_arg(args,
object *);
3593 robj = va_arg(args,
object **);
3595 LOG(
llevError,
"cfapi_object_insert (3): called with NULL orig, object %s!\n", op->
name);
3604 LOG(
llevError,
"cfapi_object_insert (1): called with itype %d which is not valid, object %s!\n", itype, op->
name);
3625 va_start(args, type);
3627 op = va_arg(args,
object *);
3628 nr = va_arg(args,
int);
3629 buf = va_arg(args,
char *);
3630 size = va_arg(args,
int);
3631 split = va_arg(args,
object **);
3656 va_start(args, type);
3658 op = va_arg(args,
object *);
3659 op2 = va_arg(args,
object *);
3660 merge = va_arg(args,
object **);
3678 va_start(args, type);
3680 op = va_arg(args,
object *);
3681 op2 = va_arg(args,
object *);
3682 rint = va_arg(args,
int *);
3698 va_start(args, type);
3700 op = va_arg(args,
object *);
3701 action = va_arg(args,
int);
3717 va_start(args, type);
3719 op = va_arg(args,
object *);
3736 va_start(args, type);
3738 op = va_arg(args,
object *);
3750 va_start(args, type);
3751 op = va_arg(args,
object *);
3763 va_start(args, type);
3764 op1 = va_arg(args,
object *);
3765 op2 = va_arg(args,
object *);
3766 rint = va_arg(args,
int *);
3778 va_start(args, type);
3779 trap = va_arg(args,
object *);
3780 victim = va_arg(args,
object *);
3798 va_start(args, type);
3799 op = va_arg(args,
object *);
3800 cause = va_arg(args,
object *);
3801 rint = va_arg(args,
int *);
3825 va_start(args, type);
3827 cause = va_arg(args,
object *);
3828 state = va_arg(args,
int);
3844 va_start(args, type);
3845 op = va_arg(args,
object *);
3846 rint = va_arg(args,
int *);
3867 va_start(args, type);
3868 op = va_arg(args,
object *);
3869 caster = va_arg(args,
object *);
3870 dir = va_arg(args,
int);
3871 sp = va_arg(args,
object *);
3872 str = va_arg(args,
char *);
3873 rint = va_arg(args,
int *);
3883 *rint =
cast_spell(op, caster, dir, sp, str);
3892 va_start(args, type);
3893 op = va_arg(args,
object *);
3894 sp = va_arg(args,
object *);
3895 prayer = va_arg(args,
int);
3907 va_start(args, type);
3908 op = va_arg(args,
object *);
3909 sp = va_arg(args,
object *);
3927 va_start(args, type);
3928 op = va_arg(args,
object *);
3929 spellname = va_arg(args,
char *);
3930 robj = va_arg(args,
object **);
3947 va_start(args, type);
3948 op = va_arg(args,
object *);
3950 rint = va_arg(args,
int *);
3969 va_start(args, type);
3970 tobuy = va_arg(args,
object *);
3971 op = va_arg(args,
object *);
3972 rint = va_arg(args,
int *);
3989 int x, y, randompos, ttype, flag;
3995 va_start(args, type);
3996 op = va_arg(args,
object *);
3997 ttype = va_arg(args,
int);
4000 x = va_arg(args,
int);
4001 y = va_arg(args,
int);
4002 randompos = va_arg(args,
int);
4003 originator = va_arg(args,
object *);
4004 rint = va_arg(args,
int *);
4007 *rint =
transfer_ob(op, x, y, randompos, originator);
4014 originator = va_arg(args,
object *);
4015 flag = va_arg(args,
int);
4016 x = va_arg(args,
int);
4017 y = va_arg(args,
int);
4018 robj = va_arg(args,
object **);
4020 if (x < 0 || y < 0) {
4030 x = va_arg(args,
int);
4031 y = va_arg(args,
int);
4032 rint = va_arg(args,
int *);
4057 va_start(args, type);
4058 op = va_arg(args,
object *);
4060 str = va_arg(args,
char *);
4061 robj = va_arg(args,
object **);
4064 if (*robj == NULL) {
4070 if (!strncmp(name, str, strlen(str)))
4072 if (!strncmp(tmp->name, str, strlen(str)))
4074 if (tmp->slaying && !strcmp(tmp->slaying, str))
4089 va_start(args, type);
4090 who = va_arg(args,
const object *);
4091 name = va_arg(args,
const char *);
4092 result = va_arg(args,
object **);
4105 va_start(args, type);
4106 who = va_arg(args,
const object *);
4107 name = va_arg(args,
const char *);
4108 result = va_arg(args,
object **);
4125 va_start(args, type);
4126 op = va_arg(args,
object *);
4127 author = va_arg(args,
object *);
4149 va_start(args, type);
4150 op = va_arg(args,
object *);
4151 tmp = va_arg(args,
object *);
4152 rint = va_arg(args,
int *);
4166 va_start(args, type);
4167 op = va_arg(args,
object *);
4168 msg = va_arg(args,
char *);
4169 rint = va_arg(args,
int *);
4192 va_start(args, type);
4194 sval = va_arg(args,
char *);
4195 rpl = va_arg(args,
player **);
4210 va_start(args, type);
4212 flags = va_arg(args,
int);
4213 pri = va_arg(args,
int);
4214 pl = va_arg(args,
object *);
4215 buf = va_arg(args,
char *);
4234 va_start(args, type);
4235 op = va_arg(args,
object *);
4236 rlong = va_arg(args,
int64_t *);
4255 va_start(args, type);
4256 ob = va_arg(args,
object *);
4258 skill = va_arg(args,
const char *);
4259 flag = va_arg(args,
int);
4276 va_start(args, type);
4277 pl = va_arg(args,
object *);
4278 rint = va_arg(args,
int *);
4294 const char *knowledge;
4296 va_start(args, type);
4297 what = va_arg(args,
int);
4302 pl = va_arg(args,
object *);
4303 knowledge = va_arg(args,
const char *);
4304 rint = va_arg(args,
int *);
4308 if (pl->
contr == NULL) {
4309 LOG(
llevError,
"cfapi_player_knowledge: 'has' called for non player object %s", pl->
name);
4319 pl = va_arg(args,
object *);
4320 knowledge = va_arg(args,
const char *);
4322 if (pl->
contr != NULL)
4328 LOG(
llevError,
"cfapi_player_knowledge: invalid what %d", what);
4346 va_start(args, type);
4347 who = va_arg(args,
object *);
4349 x = va_arg(args,
int);
4350 y = va_arg(args,
int);
4351 res = va_arg(args,
int *);
4383 va_start(args, type);
4384 who = va_arg(args,
object *);
4385 what = va_arg(args,
object *);
4401 va_start(args, type);
4403 prop = va_arg(args,
int);
4407 rsstring = va_arg(args,
sstring *);
4408 *rsstring = arch->
name;
4420 *rarch = arch->
head;
4426 *rarch = arch->
more;
4431 robject = va_arg(args,
object **);
4432 *robject = &arch->
clone;
4457 va_start(args, type);
4459 prop = va_arg(args,
int);
4462 rsstring = va_arg(args,
sstring *);
4474 rsstring = va_arg(args,
sstring *);
4481 obarg = va_arg(args,
object *);
4482 rplayer = va_arg(args,
player **);
4484 for (; *rplayer != NULL; (*rplayer) = (*rplayer)->
next)
4485 if ((*rplayer)->ob->contr->party == party) {
4511 va_start(args, type);
4512 reg = va_arg(args,
region *);
4513 prop = va_arg(args,
int);
4516 rsstring = va_arg(args,
sstring *);
4517 *rsstring = reg->
name;
4522 rregion = va_arg(args,
region **);
4528 rregion = va_arg(args,
region **);
4534 rsstring = va_arg(args,
sstring *);
4540 rsstring = va_arg(args,
sstring *);
4541 *rsstring = reg->
msg;
4547 rint = va_arg(args,
int*);
4553 rsstring = va_arg(args,
sstring *);
4582 va_start(args, type);
4583 ob = va_arg(args,
object *);
4584 robject = va_arg(args,
object **);
4592 if (ob == link->
ob) {
4594 *robject = link->
next->
ob;
4624 va_start(args, type);
4626 buf = va_arg(args,
const char *);
4627 ret = va_arg(args,
int *);
4647 va_start(args, type);
4648 name = va_arg(args,
const char *);
4650 use_layout = va_arg(args,
char **);
4661 const char *message;
4666 va_start(args, type);
4667 op = va_arg(args,
object *);
4668 activator = va_arg(args,
object *);
4669 third = va_arg(args,
object *);
4670 message = va_arg(args,
const char *);
4671 fix = va_arg(args,
int);
4672 ret = va_arg(args,
int *);
4675 *ret =
user_event(op, activator, third, message, fix);
4687 va_start(args, type);
4688 op = va_arg(args,
int);
4689 player = va_arg(args,
object *);
4692 if (player->
contr == NULL) {
4693 LOG(
llevError,
"cfapi_player_quest called with non player object %s!\n", player->
name);
4701 int state = va_arg(args,
int);
4707 int *ret = va_arg(args,
int *);
4713 int state = va_arg(args,
int);
4719 int *ret = va_arg(args,
int*);
4752 assert(cmd != NULL);
4753 assert(command != NULL);
4755 if (plugins_list == NULL)
4758 for (cp = plugins_list; cp != NULL; cp = cp->
next) {
4759 if (cp->
propfunc(&i,
"command?", cmd, command) != NULL)
4770 struct dirent *currentfile;
4779 if (plugdir == NULL)
4782 while ((currentfile =
readdir(plugdir)) != NULL) {
4783 l = strlen(currentfile->
d_name);
4792 if (strcmp(disable->
name,
"All") == 0) {
4802 disable = disable->
next;
4825 for (cp = plugins_list; cp != NULL; ) {
4837 plugins_list = NULL;
#define CFAPI_OBJECT_PROP_STR
#define CFAPI_OBJECT_PROP_MAP
#define CFAPI_OBJECT_PROP_RUN_AWAY
static void cfapi_object_clear(int *type,...)
void draw_ext_info_format(int flags, int pri, const object *pl, uint8_t type, uint8_t subtype, const char *format,...)
int object_distance(const object *ob1, const object *ob2)
void spring_trap(object *trap, object *victim)
static void cfapi_map_trigger_connected(int *type,...)
static void copy_message(object *op, const char *msg)
static void cfapi_set_random_map_variable(int *type,...)
#define CFAPI_OBJECT_PROP_MAGIC
void apply_by_living_below(object *pl)
#define CFAPI_PLAYER_QUEST_GET_STATE
#define CFAPI_PARTY_PROP_PASSWORD
int apply_manual(object *op, object *tmp, int aflag)
#define CFAPI_OBJECT_PROP_MATERIAL
const char * determine_god(object *op)
#define CFAPI_OBJECT_PROP_ANIMATION
mapstruct * generate_random_map(const char *OutFileName, RMParms *RP, char **use_layout)
#define CFAPI_OBJECT_PROP_SP
#define CFAPI_OBJECT_PROP_CARRYING
#define plugins_dlopen(fname)
#define CFAPI_OBJECT_PROP_NAME
#define CFAPI_OBJECT_PROP_OB_BELOW
#define CFAPI_PLAYER_PROP_TITLE
#define CFAPI_MAP_PROP_NAME
void object_free(object *ob, int flags)
int move_player(object *op, int dir)
static void cfapi_object_drain(int *type,...)
static void cfapi_system_register_global_event(int *type,...)
void quest_start(player *pl, sstring quest_code, int state)
static void cfapi_system_find_animation(int *type,...)
static void cfapi_object_move(int *type,...)
#define CFAPI_OBJECT_PROP_RACE
object * check_spell_known(object *op, const char *name)
const Face * get_face_by_id(uint16_t id)
#define CFAPI_MAP_PROP_ENTER_Y
static void cfapi_object_check_spell(int *type,...)
#define CFAPI_REGION_PROP_MESSAGE
int is_magical(const object *op)
#define CFAPI_MAP_PROP_FLAGS
#define CFAPI_MAP_PROP_DARKNESS
#define CFAPI_OBJECT_PROP_ARCHETYPE
#define CFAPI_OBJECT_PROP_WEIGHT
static void cfapi_get_month_name(int *type,...)
#define CFAPI_OBJECT_PROP_ATTACK_TYPE
static void cfapi_object_pickup(int *type,...)
#define CFAPI_OBJECT_PROP_FACE
mapstruct * get_empty_map(int sizex, int sizey)
static void cfapi_archetype_get_property(int *type,...)
static void cfapi_object_pay_amount(int *type,...)
void do_forget_spell(object *op, const char *spell)
linked_char * disabled_plugins
static void cfapi_object_get_property(int *type,...)
#define plugins_dlsym(lib, name)
static void cfapi_object_spring_trap(int *type,...)
#define CFAPI_OBJECT_PROP_GOD
#define CFAPI_OBJECT_PROP_PICK_UP
#define CFAPI_MAP_PROP_DIFFICULTY
void player_get_title(const struct pl *pl, char *buf, size_t bufsize)
#define CFAPI_MAP_PROP_HEIGHT
#define CFAPI_OBJECT_PROP_DIRECTION
object * object_get_env_recursive(object *op)
EXTERN objectlink * first_friendly_object
#define CFAPI_OBJECT_PROP_NEXT_ACTIVE_OB
#define CFAPI_OBJECT_PROP_MAXGP
int player_arrest(object *who)
#define CFAPI_OBJECT_PROP_HIDDEN
static void cfapi_region_get_property(int *type,...)
static void cfapi_object_on_same_map(int *type,...)
static void cfapi_system_find_face(int *type,...)
void fatal(enum fatal_error err)
static void cfapi_object_give_skill(int *type,...)
#define CFAPI_OBJECT_PROP_MOVE_STATUS
const char * get_season_name(const int index)
int pay_for_item(object *op, object *pl)
char * create_pathname(const char *name, char *buf, size_t size)
void knowledge_give(player *pl, const char *marker, const object *book)
mapstruct * ready_map_name(const char *name, int flags)
#define CFAPI_OBJECT_PROP_SUBTYPE
partylist * party_get_next(const partylist *party)
void free_string(sstring str)
signed long object_sum_weight(object *op)
const Animations * try_find_animation(const char *name)
#define CFAPI_REGION_PROP_JAIL_X
static void cfapi_get_periodofday_name(int *type,...)
#define CFAPI_ARCH_PROP_MORE
#define SET_ANIMATION(ob, newanim)
static void cfapi_object_find_by_arch_name(int *type,...)
mapstruct * get_map_from_coord(mapstruct *m, int16_t *x, int16_t *y)
void esrv_update_item(int flags, object *pl, object *op)
#define CFAPI_OBJECT_PROP_CONTAINER
const char * object_get_value(const object *op, const char *const key)
void pick_up(object *op, object *alt)
#define CFAPI_OBJECT_PROP_INVENTORY
void query_base_name(const object *op, int plural, char *buf, size_t size)
static void cfapi_object_set_property(int *type,...)
#define CFAPI_OBJECT_PROP_FLAGS
static void cfapi_get_season_name(int *type,...)
short freearr_x[SIZEOFFREE]
int calculate_difficulty(mapstruct *m)
#define CFAPI_OBJECT_PROP_NAME_PLURAL
static void cfapi_log(int *type,...)
const char * get_weekday(const int index)
region * get_region_by_map(mapstruct *m)
static void cfapi_object_find_archetype_inside(int *type,...)
DIR * opendir(const char *)
#define CFAPI_OBJECT_PROP_OWNER
static void cfapi_object_teleport(int *type,...)
static void cfapi_system_re_cmp(int *type,...)
static int do_execute_event(object *op, int eventcode, object *activator, object *third, const char *message, int fix, talk_info *talk)
const char * party_get_password(const partylist *party)
crossfire_plugin * plugins_list
#define CFAPI_OBJECT_PROP_MOVE_ON
static void cfapi_map_get_map_property(int *type,...)
#define CFAPI_OBJECT_PROP_MESSAGE
#define FREE_OBJ_NO_DESTROY_CALLBACK
static void cfapi_map_delete_map(int *type,...)
#define CFAPI_OBJECT_PROP_EXP_MULTIPLIER
#define plugins_dlclose(lib)
#define CFAPI_MAP_PROP_RESET_TIMEOUT
#define object_was_destroyed(op, old_tag)
object * arch_present_in_ob(const archetype *at, const object *op)
#define CFAPI_PLAYER_QUEST_START
static void cfapi_object_insert(int *type,...)
void remove_friendly_object(object *op)
#define CFAPI_REGION_PROP_NEXT
void object_update(object *op, int action)
static void cfapi_object_drop(int *type,...)
static void cfapi_object_fix(int *type,...)
static void cfapi_map_set_map_property(int *type,...)
static void cfapi_object_set_key(int *type,...)
#define CFAPI_MAP_PROP_NEXT
static void cfapi_party_get_property(int *type,...)
int object_can_merge(object *ob1, object *ob2)
#define CFAPI_OBJECT_PROP_SLAYING
static void cfapi_map_create_path(int *type,...)
int plugin_event_say(object *npc, talk_info *talk)
void free_dialog_information(object *op)
struct archt * other_arch
static void cfapi_system_find_string(int *type,...)
object * object_find_by_name(const object *who, const char *name)
void draw_ext_info(int flags, int pri, const object *pl, uint8_t type, uint8_t subtype, const char *message)
static void cfapi_object_apply_below(int *type,...)
void transmute_materialname(object *op, const object *change)
char savebed_map[MAX_BUF]
static void cfapi_timer_create(int *type,...)
static void cfapi_player_quest(int *type,...)
static void cfapi_object_split(int *type,...)
#define CFAPI_OBJECT_PROP_CHOSEN_SKILL
#define CFAPI_OBJECT_PROP_OTHER_ARCH
#define CFAPI_OBJECT_PROP_LAST_SP
int change_map_light(mapstruct *m, int change)
#define CFAPI_REGION_PROP_JAIL_PATH
static void cfapi_object_delete(int *type,...)
#define CFAPI_OBJECT_PROP_LAST_GRACE
static void cfapi_object_find_by_name(int *type,...)
#define CFAPI_OBJECT_PROP_COUNT
short freearr_y[SIZEOFFREE]
static void cfapi_object_remove(int *type,...)
void command_say(object *op, const char *params)
object * give_skill_by_name(object *op, const char *skill_name)
static void cfapi_object_transmute(int *type,...)
const char * get_month_name(const int index)
void map_newmap_cmd(socket_struct *ns)
struct _crossfire_plugin * next
void object_set_owner(object *op, object *owner)
#define CFAPI_PLAYER_PROP_BED_X
static void cfapi_object_identify(int *type,...)
struct obj * chosen_skill
int object_set_value(object *op, const char *key, const char *value, int add_key)
void object_free_drop_inventory(object *ob)
int change_abil(object *op, object *tmp)
object * object_insert_in_map_at(object *op, mapstruct *m, object *originator, int flag, int x, int y)
#define CFAPI_MAP_PROP_PLAYERS
int move_to(object *op, int x, int y)
int is_friendly(const object *op)
sstring find_string(const char *str)
#define CFAPI_OBJECT_PROP_FACING
int user_event(object *op, object *activator, object *third, const char *message, int fix)
static void cfapi_object_say(int *type,...)
static void cfapi_system_remove_string(int *type,...)
static void cfapi_object_change_exp(int *type,...)
#define CFAPI_PLAYER_PROP_IP
#define CFAPI_OBJECT_PROP_ENVIRONMENT
static void cfapi_object_merge(int *type,...)
#define CFAPI_OBJECT_PROP_GP
#define CFAPI_OBJECT_PROP_CHA
#define CFAPI_PARTY_PROP_PLAYER
object * object_new(void)
static void cfapi_player_knowledge(int *type,...)
#define CFAPI_OBJECT_PROP_ATTACKED_BY
void player_set_own_title(struct pl *pl, const char *title)
int object_can_pick(const object *who, const object *item)
object * object_insert_in_ob(object *op, object *where)
#define CFAPI_OBJECT_PROP_MOVE_SLOW_PENALTY
#define CFAPI_MAP_PROP_UNIQUE
int knowledge_player_knows(const player *pl, const char *knowledge)
void *(* f_plug_property)(int *type,...)
#define CFAPI_OBJECT_PROP_INT
#define CFAPI_MAP_PROP_RESET_TIME
#define CFAPI_ARCH_PROP_HEAD
void monster_npc_say(object *npc, const char *cp)
static void cfapi_timer_destroy(int *type,...)
const char * materialname
#define CFAPI_OBJECT_PROP_LEVEL
#define FOR_ABOVE_FINISH()
void update_all_los(const mapstruct *map, int x, int y)
#define CFAPI_OBJECT_PROP_HEAD
#define CFAPI_PLAYER_PROP_BED_MAP
#define CFAPI_OBJECT_PROP_MOVE_ALLOW
static void cfapi_player_message(int *type,...)
#define CFAPI_OBJECT_PROP_RAW_NAME
void drain_specific_stat(object *op, int deplete_stats)
static void cfapi_object_user_event(int *type,...)
#define CFAPI_ARCH_PROP_NEXT
f_plug_postinit closefunc
#define PERM_EXP(exptotal)
struct linked_char * next
int plugins_init_plugin(const char *libfile)
uint64_t query_money(const object *op)
int(* f_plug_postinit)(void)
void update_position(mapstruct *m, int x, int y)
int execute_event(object *op, int eventcode, object *activator, object *third, const char *message, int fix)
void add_friendly_object(object *op)
#define CFAPI_OBJECT_PROP_FP
#define FOR_ABOVE_PREPARE(op_, it_)
#define CFAPI_OBJECT_PROP_MAGICAL
static void cfapi_map_find_by_archetype_name(int *type,...)
static void cfapi_object_pay_item(int *type,...)
archetype * find_archetype_by_object_name(const char *name)
#define CFAPI_OBJECT_PROP_LAST_EAT
object * object_present_in_ob(uint8_t type, const object *op)
const char * re_cmp(const char *, const char *)
void object_reset(object *op)
int pay_for_amount(uint64_t to_pay, object *pl)
#define CFAPI_OBJECT_PROP_MOVE_OFF
#define CFAPI_OBJECT_PROP_WEIGHT_LIMIT
#define CFAPI_PLAYER_QUEST_SET_STATE
struct obj * current_weapon
object * object_create_clone(object *asrc)
#define string_get_int(name)
#define CFAPI_OBJECT_PROP_CURRENT_WEAPON
static void cfapi_player_can_pay(int *type,...)
static void cfapi_system_check_path(int *type,...)
int move_ob(object *op, int dir, object *originator)
int cftimer_destroy(int id)
#define CFAPI_OBJECT_PROP_X
void do_learn_spell(object *op, object *spell, int special_prayer)
static void cfapi_map_out_of_map(int *type,...)
#define CFAPI_OBJECT_PROP_CHEATER
static void cfapi_object_get_key(int *type,...)
#define CFAPI_OBJECT_PROP_PICKABLE
static void cfapi_system_directory(int *type,...)
void cleanupPlugins(void)
uint8_t ignore_plugin_compatibility
#define CFAPI_MAP_PROP_MESSAGE
void object_clear(object *op)
command_array_struct * find_plugin_command(const char *cmd, command_array_struct *command)
static crossfire_plugin * plugins_find_plugin(const char *id)
#define CFAPI_OBJECT_PROP_ENEMY
#define CFAPI_REGION_PROP_JAIL_Y
object * find_marked_object(object *op)
#define CFAPI_OBJECT_PROP_PATH_REPELLED
void plugins_display_list(object *op)
static void cfapi_object_learn_spell(int *type,...)
archetype * try_find_archetype(const char *name)
char d_name[_MAX_FNAME+1]
static void cfapi_object_create(int *type,...)
#define CFAPI_MAP_PROP_TMPNAME
unsigned __int64 uint64_t
struct regiondef * parent
int on_same_map(const object *op1, const object *op2)
#define QUERY_FLAG(xyz, p)
#define CLEAR_FLAG(xyz, p)
#define CFAPI_OBJECT_PROP_LORE
static void cfapi_player_find(int *type,...)
partylist * party_get_first(void)
void change_exp(object *op, int64_t exp, const char *skill_name, int flag)
#define CFAPI_OBJECT_PROP_ITEM_POWER
#define CFAPI_REGION_PROP_LONGNAME
#define MSG_TYPE_COMMAND_DEBUG
static void cfapi_object_apply(int *type,...)
static void cfapi_system_unregister_global_event(int *type,...)
const Animations * animation
int quest_get_player_state(player *pl, sstring quest_code)
#define CFAPI_PARTY_PROP_NAME
#define CFAPI_PLAYER_PROP_PARTY
object * object_create_arch(archetype *at)
void drop(object *op, object *tmp)
#define CFAPI_OBJECT_PROP_EXP
static void cfapi_object_describe(int *type,...)
#define plugins_dlerror()
int object_find_first_free_spot(const object *ob, mapstruct *m, int x, int y)
int(* f_plug_event)(int *type,...)
#define CFAPI_OBJECT_PROP_TOTAL_EXP
static const flag_definition flags[]
static void cfapi_system_strdup_local(int *type,...)
int16_t resist[NROFATTACKS]
#define CFAPI_OBJECT_PROP_DAM
#define CFAPI_OBJECT_PROP_MOVE_TYPE
#define CFAPI_OBJECT_PROP_SKILL
#define CFAPI_PLAYER_PROP_NEXT
#define CFAPI_OBJECT_PROP_AC
static void cfapi_object_check_trigger(int *type,...)
#define SET_MAP_FLAGS(M, X, Y, C)
#define CFAPI_OBJECT_PROP_BASE_NAME
#define CFAPI_REGION_PROP_PARENT
static void cfapi_friendlylist_get_next(int *type,...)
object * object_split(object *orig_ob, uint32_t nr, char *err, size_t size)
#define CFAPI_ARCH_PROP_NAME
StringBuffer * describe_item(const object *op, const object *owner, int use_media_tags, StringBuffer *buf)
void quest_set_player_state(player *pl, sstring quest_code, int state)
object * object_decrease_nrof(object *op, uint32_t i)
static void cfapi_object_perm_exp(int *type,...)
int set_random_map_variable(RMParms *rp, const char *buf)
#define CFAPI_OBJECT_PROP_SPEED_LEFT
#define FREE_AND_COPY(sv, nv)
void get_tod(timeofday_t *tod)
static void cfapi_object_query_money(int *type,...)
int cftimer_create(int id, long delay, object *ob, int mode)
static void cfapi_map_has_been_loaded(int *type,...)
mapstruct * has_been_loaded(const char *name)
#define CFAPI_OBJECT_PROP_HP
static void cfapi_object_cast(int *type,...)
#define CFAPI_OBJECT_PROP_TITLE
int cftimer_find_free_id(void)
#define CFAPI_PLAYER_PROP_BED_Y
#define CFAPI_OBJECT_PROP_SPEED
#define CFAPI_MAP_PROP_PATH
static void cfapi_get_hooks(int *type,...)
void object_set_enemy(object *op, object *enemy)
int remove_depletion(object *op, int level)
#define CFAPI_OBJECT_PROP_FRIENDLY
#define CFAPI_OBJECT_PROP_ANIM_SPEED
#define CFAPI_OBJECT_PROP_LUCK
void party_join(object *op, partylist *party)
struct dirent * readdir(DIR *)
const char * get_periodofday(const int index)
object * object_merge(object *op, object *top)
#define CFAPI_OBJECT_PROP_ARCH_NAME
void query_short_name(const object *op, char *buf, size_t size)
object * object_get_player_container(object *op)
static void cfapi_system_add_string(int *type,...)
int out_of_map(mapstruct *m, int x, int y)
#define CFAPI_OBJECT_PROP_INVISIBLE_TIME
static void cfapi_get_time(int *type,...)
static void cfapi_map_get_object_at(int *type,...)
#define CFAPI_OBJECT_PROP_DEX
#define CFAPI_OBJECT_PROP_ATTACK_MOVEMENT
#define CFAPI_MAP_PROP_REGION
static void cfapi_object_change_abil(int *type,...)
void delete_map(mapstruct *m)
#define CFAPI_MAP_PROP_WIDTH
#define CFAPI_OBJECT_PROP_CON
sstring add_string(const char *str)
#define CFAPI_PLAYER_QUEST_WAS_COMPLETED
EXTERN player * first_player
char * cost_string_from_value(uint64_t cost, int largest_coin)
#define CFAPI_PARTY_PROP_NEXT
object * identify(object *op)
static void cfapi_object_clean_object(int *type,...)
#define GET_MAP_OB(M, X, Y)
int check_path(const char *name, int prepend_dir)
#define CFAPI_OBJECT_PROP_NROF
#define CFAPI_OBJECT_PROP_MAXSP
void object_copy(const object *src_ob, object *dest_ob)
#define CFAPI_ARCH_PROP_CLONE
struct _crossfire_plugin * prev
static void cfapi_object_transfer(int *type,...)
#define EVENT_PLAYER_DEATH
static void cfapi_object_remove_depletion(int *type,...)
int get_map_flags(mapstruct *oldmap, mapstruct **newmap, int16_t x, int16_t y, int16_t *nx, int16_t *ny)
void object_set_cheat(object *op)
#define CFAPI_PLAYER_PROP_MARKED_ITEM
static void cfapi_map_get_map(int *type,...)
static void cfapi_object_distance(int *type,...)
#define CFAPI_OBJECT_PROP_LAST_HEAL
#define CFAPI_OBJECT_PROP_CLIENT_TYPE
#define CFAPI_OBJECT_PROP_INVISIBLE
void player_update_bg_music(object *player)
void LOG(LogLevel logLevel, const char *format,...)
#define CFAPI_OBJECT_PROP_TYPE
static const hook_entry plug_hooks[]
static void cfapi_object_forget_spell(int *type,...)
#define CFAPI_OBJECT_PROP_POW
static void cfapi_get_weekday_name(int *type,...)
static void cfapi_map_message(int *type,...)
static void cfapi_object_update(int *type,...)
EXTERN region * first_region
#define CFAPI_OBJECT_PROP_GEN_SP_ARMOUR
int transfer_ob(object *op, int x, int y, int randomly, object *originator)
#define CFAPI_OBJECT_PROP_GLOW_RADIUS
static void cfapi_object_clone(int *type,...)
static void cfapi_object_reset(int *type,...)
void object_set_msg(object *op, const char *msg)
int object_find_free_spot(const object *ob, mapstruct *m, int x, int y, int start, int stop)
#define CFAPI_OBJECT_PROP_PRESENT
#define CFAPI_OBJECT_PROP_MERGEABLE
#define CFAPI_OBJECT_PROP_WC
void query_name(const object *op, char *buf, size_t size)
#define CFAPI_OBJECT_PROP_RESIST
#define CFAPI_OBJECT_PROP_SHORT_NAME
#define CFAPI_OBJECT_PROP_MOVE_SLOW
#define CFAPI_OBJECT_PROP_MATERIAL_NAME
void create_overlay_pathname(const char *name, char *buf, size_t size)
const Face * find_face(const char *name, const Face *error)
object * map_find_by_archetype(mapstruct *m, int x, int y, const archetype *at)
#define CFAPI_OBJECT_PROP_MAXHP
#define CFAPI_OBJECT_PROP_VALUE
static void cfapi_cost_string_from_value(int *type,...)
void ext_info_map(int color, const mapstruct *map, uint8_t type, uint8_t subtype, const char *str1)
#define CFAPI_OBJECT_PROP_SPELL_ITEM
#define CFAPI_OBJECT_PROP_PATH_ATTUNED
int(* f_plug_init)(const char *iversion, f_plug_api gethooksptr)
void fix_object(object *op)
static void send_changed_object(object *op)
player * find_player_partial_name(const char *plname)
#define CFAPI_OBJECT_PROP_WIS
EXTERN mapstruct * first_map
int quest_was_completed(player *pl, sstring quest_code)
#define CFAPI_OBJECT_PROP_DURATION
EXTERN archetype * first_archetype
void object_update_speed(object *op)
#define CFAPI_MAP_PROP_ENTER_X
void clean_object(object *op)
object * object_get_owner(object *op)
#define CFAPI_OBJECT_PROP_OB_ABOVE
#define CFAPI_OBJECT_PROP_Y
#define CFAPI_OBJECT_PROP_CUSTOM_NAME
char * stringbuffer_finish(StringBuffer *sb)
f_plug_event gevent[NR_EVENTS]
size_t strlcpy(char *dst, const char *src, size_t size)
int plugins_remove_plugin(const char *id)
void(* f_plug_api)(int *type,...)
int execute_global_event(int eventcode,...)
object * object_find_by_arch_name(const object *who, const char *name)
object * object_present_in_ob_by_name(int type, const char *str, const object *op)
#define CFAPI_OBJECT_PROP_PREV_ACTIVE_OB
#define FOR_INV_PREPARE(op_, it_)
int cast_spell(object *op, object *caster, int dir, object *spell_ob, char *stringarg)
void object_remove(object *op)
static void cfapi_generate_random_map(int *type,...)
#define CFAPI_OBJECT_PROP_PATH_DENIED
static void cfapi_map_update_position(int *type,...)
#define CFAPI_OBJECT_PROP_MOVE_BLOCK
#define CFAPI_REGION_PROP_NAME
static void cfapi_map_change_light(int *type,...)