 |
Crossfire Server, Trunk
1.75.0
|
Go to the documentation of this file.
46 #include "libloaderapi.h"
50 #define NR_OF_HOOKS (sizeof(plug_hooks)/sizeof(*plug_hooks))
271 if (!strcmp(
id, plugin->id)) {
281 static char buf[256];
285 err = GetLastError();
286 if (FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, 0,
buf,
sizeof (
buf), NULL) == 0)
287 snprintf(
buf,
sizeof (
buf),
"error %lu", err);
288 p = strchr(
buf,
'\0');
289 while (p >
buf && (p[-1] ==
'\r' || p[-1] ==
'\n'))
306 if (op->
env != NULL) {
336 va_start(args,
type);
337 request_type = va_arg(args,
int);
338 if (request_type == 0) {
341 fid = va_arg(args,
int);
353 buf = va_arg(args,
char *);
393 if (svn_rev == NULL) {
394 LOG(
llevError,
"Unable to find SvnRevPlugin in %s\n", libfile);
405 if (initfunc == NULL) {
411 if (propfunc == NULL) {
417 if (eventfunc == NULL) {
423 if (postfunc == NULL) {
429 if (closefunc == NULL) {
441 propfunc(&i,
"Identification", cp->
id,
sizeof(cp->
id));
456 auto plugin = std::find_if(
plugins_list.begin(),
plugins_list.end(), [&
id] (
const auto cp) { return strcmp(id, cp->id) == 0; });
460 for (
int eventcode = 0; eventcode <
NR_EVENTS; eventcode++) {
482 "List of loaded plugins:\n-----------------------");
487 cp->id, cp->fullname);
501 int length, largest_coin;
504 va_start(args,
type);
505 cost = va_arg(args, uint64_t);
506 largest_coin = va_arg(args,
int);
507 buffer = va_arg(args,
char*);
508 length = va_arg(args,
int);
518 strncpy(
buffer,
final, length - 1);
519 buffer[length - 1] =
'\0';
534 va_start(args,
type);
535 name = va_arg(args,
const char *);
536 num = va_arg(args,
int *);
540 (*num) = anim ? anim->
num : 0;
556 va_start(args,
type);
557 face = va_arg(args,
const char *);
558 error = va_arg(args,
int);
559 num = va_arg(args,
int *);
563 (*num) = f ? f->
number : 0;
577 va_start(args,
type);
578 txt = va_arg(args,
const char *);
579 ret = va_arg(args,
char **);
593 va_start(args,
type);
594 eventcode = va_arg(args,
int);
595 pname = va_arg(args,
char *);
613 va_start(args,
type);
614 eventcode = va_arg(args,
int);
615 pname = va_arg(args,
char *);
629 va_start(args,
type);
630 int property = va_arg(args,
int);
631 std::vector<object *> *
list = va_arg(args, std::vector<object *> *);
637 list->push_back(pl->ob);
657 va_start(args,
type);
658 int property = va_arg(args,
int);
659 std::vector<mapstruct *> *
list = va_arg(args, std::vector<mapstruct *> *);
664 list->push_back(map);
673 va_start(args,
type);
674 int property = va_arg(args,
int);
675 std::vector<archetype *> *
list = va_arg(args, std::vector<archetype *> *);
687 va_start(args,
type);
688 int property = va_arg(args,
int);
689 std::vector<region *> *
list = va_arg(args, std::vector<region *> *);
701 va_start(args,
type);
702 int property = va_arg(args,
int);
703 std::vector<partylist *> *
list = va_arg(args, std::vector<partylist *> *);
709 list->push_back(party);
728 va_start(args,
type);
729 str = va_arg(args,
const char *);
747 va_start(args,
type);
766 va_start(args,
type);
767 str = va_arg(args,
const char *);
786 va_start(args,
type);
788 name = va_arg(args,
char *);
789 prepend_dir = va_arg(args,
int);
790 ret = va_arg(args,
int *);
809 va_start(args,
type);
811 str = va_arg(args,
char *);
812 regexp = va_arg(args,
char *);
813 rv = va_arg(args,
const char **);
815 *rv =
re_cmp(str, regexp);
826 va_start(args,
type);
828 dirtype = va_arg(args,
int);
829 str = va_arg(args,
const char **);
878 va_start(args,
type);
886 #define string_get_int(name) \
890 va_start(args, type); \
891 index = va_arg(args, int); \
892 str = va_arg(args, const char **); \
894 *str = name(index); \
895 *type = CFAPI_STRING; \
964 va_start(args,
type);
965 ob = va_arg(args,
object *);
966 delay = va_arg(args,
long);
967 mode = va_arg(args,
int);
968 timer = va_arg(args,
int *);
994 va_start(args,
type);
995 id = va_arg(args,
int);
996 err = va_arg(args,
int *);
1013 va_start(args,
type);
1014 logLevel =
static_cast<LogLevel>(va_arg(args,
int));
1015 message = va_arg(args,
const char *);
1041 va_start(args,
type);
1043 ctype = va_arg(args,
int);
1047 x = va_arg(args,
int);
1048 y = va_arg(args,
int);
1054 name = va_arg(args,
const char *);
1055 x = va_arg(args,
int);
1062 nx = va_arg(args,
int);
1063 ny = va_arg(args,
int);
1088 va_start(args,
type);
1089 string = va_arg(args,
char *);
1107 va_start(args,
type);
1109 ctype = va_arg(args,
int);
1110 str = va_arg(args,
const char *);
1111 name = va_arg(args,
char *);
1112 size = va_arg(args,
int);
1147 va_start(args,
type);
1150 property = va_arg(args,
int);
1155 x = va_arg(args,
int);
1156 y = va_arg(args,
int);
1157 nx = va_arg(args, int16_t *);
1158 ny = va_arg(args, int16_t *);
1159 rint = va_arg(args,
int *);
1165 rint = va_arg(args,
int *);
1171 rstr = va_arg(args,
sstring *);
1177 rstr = va_arg(args,
sstring *);
1183 rstr = va_arg(args,
sstring *);
1189 rint = va_arg(args,
int *);
1195 rint = va_arg(args,
int *);
1201 rint = va_arg(args,
int *);
1207 rint = va_arg(args,
int *);
1213 rint = va_arg(args,
int *);
1219 rint = va_arg(args,
int *);
1225 rint = va_arg(args,
int *);
1231 rint = va_arg(args,
int *);
1237 rint = va_arg(args,
int*);
1243 rint = va_arg(args,
int*);
1249 rstr = va_arg(args,
sstring *);
1261 rreg = va_arg(args,
region **);
1267 rint = va_arg(args,
int *);
1285 va_start(args,
type);
1288 property = va_arg(args,
int);
1292 buf = va_arg(args,
const char *);
1315 va_start(args,
type);
1317 x = va_arg(args,
int);
1318 y = va_arg(args,
int);
1319 rint = va_arg(args,
int *);
1336 va_start(args,
type);
1339 x = va_arg(args,
int);
1340 y = va_arg(args,
int);
1350 va_start(args,
type);
1366 va_start(args,
type);
1368 string = va_arg(args,
const char *);
1369 color = va_arg(args,
int);
1389 va_start(args,
type);
1391 x = va_arg(args,
int);
1392 y = va_arg(args,
int);
1393 robj = va_arg(args,
object **);
1418 va_start(args,
type);
1420 msg = va_arg(args,
char *);
1422 x = va_arg(args,
int);
1423 y = va_arg(args,
int);
1424 robj = va_arg(args,
object **);
1444 va_start(args,
type);
1446 change = va_arg(args,
int);
1447 rint = va_arg(args,
int *);
1478 va_start(args,
type);
1479 kind = va_arg(args,
int);
1482 op = va_arg(args,
object *);
1483 direction = va_arg(args,
int);
1484 activator = va_arg(args,
object *);
1485 ret = va_arg(args,
int *);
1487 *ret =
move_ob(op, direction, activator);
1491 pl = va_arg(args,
player *);
1492 direction = va_arg(args,
int);
1493 ret = va_arg(args,
int *);
1499 op = va_arg(args,
object *);
1500 ret = va_arg(args,
int *);
1521 const char *keyname;
1525 va_start(args,
type);
1526 op = va_arg(args,
object *);
1527 keyname = va_arg(args,
const char *);
1528 value = va_arg(args,
const char **);
1543 const char *keyname;
1549 va_start(args,
type);
1550 op = va_arg(args,
object *);
1551 keyname = va_arg(args,
char *);
1552 value = va_arg(args,
char *);
1553 add_key = va_arg(args,
int);
1554 ret = va_arg(args,
int *);
1582 va_start(args,
type);
1584 op = va_arg(args,
object *);
1585 property = va_arg(args,
int);
1588 robject = va_arg(args,
object **);
1589 *robject = op->
above;
1594 robject = va_arg(args,
object **);
1595 *robject = op->
below;
1600 robject = va_arg(args,
object **);
1606 robject = va_arg(args,
object **);
1612 robject = va_arg(args,
object **);
1618 robject = va_arg(args,
object **);
1624 robject = va_arg(args,
object **);
1625 *robject = op->
head;
1630 robject = va_arg(args,
object **);
1642 rint = va_arg(args,
int *);
1648 rbuffer = va_arg(args,
char *);
1649 rbufsize = va_arg(args,
int);
1655 rsstring = va_arg(args,
sstring *);
1661 rsstring = va_arg(args,
sstring *);
1662 *rsstring = op->
title;
1667 rsstring = va_arg(args,
sstring *);
1668 *rsstring = op->
race;
1673 rsstring = va_arg(args,
sstring *);
1679 rsstring = va_arg(args,
sstring *);
1680 *rsstring = op->
skill;
1685 rsstring = va_arg(args,
sstring *);
1686 *rsstring = op->
msg;
1691 rsstring = va_arg(args,
sstring *);
1692 *rsstring = op->
lore;
1697 rint = va_arg(args,
int *);
1703 rint = va_arg(args,
int *);
1709 rfloat = va_arg(args,
float *);
1710 *rfloat = op->
speed;
1715 rfloat = va_arg(args,
float *);
1721 rint = va_arg(args,
int *);
1727 rint = va_arg(args,
int *);
1733 rint = va_arg(args,
int *);
1739 rint = va_arg(args,
int *);
1745 rint = va_arg(args,
int *);
1751 rint = va_arg(args,
int *);
1760 idx = va_arg(args,
int);
1761 resist = va_arg(args, int16_t *);
1762 *resist = op->
resist[idx];
1768 rint = va_arg(args,
int *);
1774 rint = va_arg(args,
int *);
1780 rint = va_arg(args,
int *);
1786 rint = va_arg(args,
int *);
1792 rint = va_arg(args,
int *);
1798 rsstring = va_arg(args,
sstring *);
1804 rint = va_arg(args,
int *);
1810 rlong = va_arg(args,
long *);
1816 rint = va_arg(args,
int *);
1822 rint = va_arg(args,
int *);
1828 rint = va_arg(args,
int *);
1834 rint = va_arg(args,
int *);
1840 rint = va_arg(args,
int *);
1846 rint = va_arg(args,
int *);
1852 rint = va_arg(args,
int *);
1858 rint = va_arg(args,
int *);
1864 rint = va_arg(args,
int *);
1870 rint = va_arg(args,
int *);
1876 rint = va_arg(args,
int *);
1882 rint = va_arg(args,
int *);
1888 rint = va_arg(args,
int *);
1894 rint64 = va_arg(args, int64_t *);
1900 robject = va_arg(args,
object **);
1906 robject = va_arg(args,
object **);
1907 *robject = op->
enemy;
1912 robject = va_arg(args,
object **);
1918 rint = va_arg(args,
int *);
1924 robject = va_arg(args,
object **);
1930 rint = va_arg(args,
int *);
1936 rint = va_arg(args,
int *);
1942 rint = va_arg(args,
int *);
1948 robject = va_arg(args,
object **);
1954 rdouble = va_arg(args,
double *);
1972 rsstring = va_arg(args,
sstring *);
1978 rint = va_arg(args,
int *);
1984 rint = va_arg(args,
int *);
1990 rbuffer = va_arg(args,
char *);
1991 rbufsize = va_arg(args,
int);
1999 i = va_arg(args,
int);
2000 rbuffer = va_arg(args,
char *);
2001 rbufsize = va_arg(args,
int);
2008 rsstring = va_arg(args,
sstring *);
2009 *rsstring = op->
name;
2014 rint = va_arg(args,
int *);
2020 rint = va_arg(args,
int *);
2026 rint64 = va_arg(args, int64_t *);
2032 robject = va_arg(args,
object **);
2040 stype = va_arg(args,
int);
2042 unsigned char ptype;
2047 ptype = (
unsigned char)(va_arg(args,
int));
2048 robject = va_arg(args,
object **);
2053 ptype = (
unsigned char)(va_arg(args,
int));
2054 buf = va_arg(args,
char *);
2055 robject = va_arg(args,
object **);
2061 robject = va_arg(args,
object **);
2070 rint = va_arg(args,
int *);
2078 op2 = va_arg(args,
object *);
2079 rint = va_arg(args,
int *);
2088 op2 = va_arg(args,
object *);
2089 rint = va_arg(args,
int *);
2098 fl = va_arg(args,
int);
2099 rint = va_arg(args,
int *);
2106 rint = va_arg(args,
int *);
2112 rint = va_arg(args,
int *);
2118 rint = va_arg(args,
int *);
2124 rint = va_arg(args,
int *);
2130 rint = va_arg(args,
int *);
2136 rint = va_arg(args,
int *);
2142 rint = va_arg(args,
int *);
2148 rint = va_arg(args,
int *);
2154 rint = va_arg(args,
int *);
2160 rint = va_arg(args,
int *);
2166 rint = va_arg(args,
int *);
2172 rint = va_arg(args,
int *);
2178 rint = va_arg(args,
int *);
2184 rint = va_arg(args,
int *);
2190 rint = va_arg(args,
int *);
2196 rint = va_arg(args,
int *);
2202 rint = va_arg(args,
int *);
2208 rsstring = va_arg(args,
sstring *);
2214 rsstring = va_arg(args,
sstring *);
2220 rint = va_arg(args,
int *);
2226 rsstring = va_arg(args,
sstring *);
2227 if (op->
face != NULL) {
2237 rsstring = va_arg(args,
sstring *);
2248 rint = va_arg(args,
int *);
2254 rsstring = va_arg(args,
sstring *);
2260 rsstring = va_arg(args,
sstring *);
2266 robject = va_arg(args,
object **);
2278 robject = va_arg(args,
object **);
2288 rbuffer = va_arg(args,
char *);
2289 rbufsize = va_arg(args,
int);
2295 robject = va_arg(args,
object **);
2337 rfloat = va_arg(args,
float *);
2343 rbuffer = va_arg(args,
char *);
2344 rbufsize = va_arg(args,
int);
2350 rint = va_arg(args,
int *);
2356 rint = va_arg(args,
int *);
2362 rint = va_arg(args,
int *);
2385 if (strlen(msg) == 0) {
2413 va_start(args,
type);
2414 op = va_arg(args,
object *);
2415 property = va_arg(args,
int);
2418 if (op != NULL && (!op->
arch || (op != &op->
arch->
clone))) {
2421 sarg = va_arg(args,
char *);
2428 sarg = va_arg(args,
char *);
2435 sarg = va_arg(args,
char *);
2441 sarg = va_arg(args,
char *);
2447 sarg = va_arg(args,
char *);
2453 sarg = va_arg(args,
char *);
2459 sarg = va_arg(args,
char *);
2465 sarg = va_arg(args,
char *);
2471 farg = va_arg(args,
double);
2473 if (farg != op->
speed) {
2480 farg = va_arg(args,
double);
2486 iarg = va_arg(args,
int);
2490 if (op->
nrof > (uint32_t)iarg)
2492 else if (op->
nrof < (uint32_t)iarg) {
2497 if (op->
env != NULL) {
2523 iarg = va_arg(args,
int);
2529 iarg = va_arg(args,
int);
2535 int iargbis = va_arg(args,
int);
2538 iarg = va_arg(args,
int);
2539 op->
resist[iargbis] = iarg;
2544 iarg = va_arg(args,
int);
2550 iarg = va_arg(args,
int);
2556 iarg = va_arg(args,
int);
2562 iarg = va_arg(args,
int);
2568 iarg = va_arg(args,
int);
2577 iarg = va_arg(args,
int);
2583 larg = va_arg(args,
long);
2589 iarg = va_arg(args,
int);
2596 iarg = va_arg(args,
int);
2602 iarg = va_arg(args,
int);
2608 iarg = va_arg(args,
int);
2614 iarg = va_arg(args,
int);
2620 iarg = va_arg(args,
int);
2626 iarg = va_arg(args,
int);
2632 iarg = va_arg(args,
int);
2638 iarg = va_arg(args,
int);
2644 iarg = va_arg(args,
int);
2646 if (op->
weight != iarg) {
2651 if (op->
env != NULL) {
2677 iarg = va_arg(args,
int);
2683 iarg = va_arg(args,
int);
2690 if (tmp->
map != NULL) {
2699 s64arg = va_arg(args, int64_t);
2705 oparg = va_arg(args,
object *);
2711 iarg = va_arg(args,
int);
2717 oparg = va_arg(args,
object *);
2723 iarg = va_arg(args,
int);
2729 iarg = va_arg(args,
int);
2735 iarg = va_arg(args,
int);
2741 oparg = va_arg(args,
object *);
2747 darg = va_arg(args,
double);
2753 sarg = va_arg(args,
char *);
2760 iarg = va_arg(args,
int);
2766 iarg = va_arg(args,
int);
2775 iarg = va_arg(args,
int);
2781 s64arg = va_arg(args, int64_t);
2787 oparg = va_arg(args,
object *);
2800 iarg = va_arg(args,
int);
2801 iargbis = va_arg(args,
int);
2813 iarg = va_arg(args,
int);
2819 iarg = va_arg(args,
int);
2825 iarg = va_arg(args,
int);
2831 iarg = va_arg(args,
int);
2837 iarg = va_arg(args,
int);
2843 iarg = va_arg(args,
int);
2849 iarg = va_arg(args,
int);
2855 iarg = va_arg(args,
int);
2861 iarg = va_arg(args,
int);
2867 iarg = va_arg(args,
int);
2873 iarg = va_arg(args,
int);
2879 iarg = va_arg(args,
int);
2885 iarg = va_arg(args,
int);
2891 iarg = va_arg(args,
int);
2897 iarg = va_arg(args,
int);
2903 iarg = va_arg(args,
int);
2909 iarg = va_arg(args,
int);
2916 sarg = va_arg(args,
char *);
2917 ret = va_arg(args,
int *);
2924 (*ret) =
face->number;
2932 sarg = va_arg(args,
char *);
2933 ret = va_arg(args,
int *);
2948 iarg = va_arg(args,
int);
2955 oparg = va_arg(args,
object *);
2975 sarg = va_arg(args,
char *);
2981 iarg = va_arg(args,
int);
2987 iarg = va_arg(args,
int);
2993 sarg = va_arg(args,
char *);
3057 va_start(args,
type);
3059 applier = va_arg(args,
object *);
3080 va_start(args,
type);
3082 applier = va_arg(args,
object *);
3083 applied = va_arg(args,
object *);
3084 aflags = va_arg(args,
int);
3085 ret = va_arg(args,
int *);
3100 object *op, **result;
3102 va_start(args,
type);
3104 op = va_arg(args,
object *);
3105 result = va_arg(args,
object **);
3125 va_start(args,
type);
3127 op = va_arg(args,
object *);
3128 owner = va_arg(args,
object *);
3129 desc = va_arg(args,
char *);
3130 size = va_arg(args,
int);
3135 strncpy(desc,
final, size);
3136 desc[size - 1] =
'\0';
3146 va_start(args,
type);
3148 op = va_arg(args,
object *);
3149 ds = va_arg(args,
int);
3164 va_start(args,
type);
3166 op = va_arg(args,
object *);
3167 level = va_arg(args,
int);
3168 result = va_arg(args,
int*);
3181 va_start(args,
type);
3183 op = va_arg(args,
object *);
3199 va_start(args,
type);
3201 op = va_arg(args,
object *);
3202 skillname = va_arg(args,
char *);
3216 va_start(args,
type);
3218 op = va_arg(args,
object *);
3219 chg = va_arg(args,
object *);
3231 va_start(args,
type);
3233 op = va_arg(args,
object *);
3252 va_start(args,
type);
3254 op = va_arg(args,
object *);
3257 LOG(
llevError,
"Plugin trying to free freed/non removed object %s\n", op->
name);
3281 va_start(args,
type);
3283 op = va_arg(args,
object *);
3284 kind = va_arg(args,
int);
3285 robj = va_arg(args,
object **);
3311 va_start(args,
type);
3312 ival = va_arg(args,
int);
3317 robj = va_arg(args,
object **);
3325 sval = va_arg(args,
const char *);
3326 robj = va_arg(args,
object **);
3355 va_start(args,
type);
3357 op = va_arg(args,
object *);
3359 LOG(
llevError,
"cfapi_object_insert: called with NULL object!\n");
3364 LOG(
llevError,
"cfapi_object_insert: called with FREED object!\n");
3369 LOG(
llevError,
"cfapi_object_insert: called with not removed object %s!\n", op->
name);
3372 itype = va_arg(args,
int);
3377 orig = va_arg(args,
object *);
3378 flag = va_arg(args,
int);
3379 x = va_arg(args,
int);
3380 y = va_arg(args,
int);
3381 robj = va_arg(args,
object **);
3383 LOG(
llevError,
"cfapi_object_insert (0): called with NULL map, object %s!\n", op->
name);
3393 orig = va_arg(args,
object *);
3394 flag = va_arg(args,
int);
3395 robj = va_arg(args,
object **);
3397 LOG(
llevError,
"cfapi_object_insert (1): called with NULL map, object %s!\n", op->
name);
3407 orig = va_arg(args,
object *);
3408 flag = va_arg(args,
int);
3409 x = va_arg(args,
int);
3410 y = va_arg(args,
int);
3411 robj = va_arg(args,
object **);
3413 LOG(
llevError,
"cfapi_object_insert (0): called with NULL map, object %s!\n", op->
name);
3429 orig = va_arg(args,
object *);
3430 robj = va_arg(args,
object **);
3432 LOG(
llevError,
"cfapi_object_insert (3): called with NULL orig, object %s!\n", op->
name);
3441 LOG(
llevError,
"cfapi_object_insert (1): called with itype %d which is not valid, object %s!\n", itype, op->
name);
3462 va_start(args,
type);
3464 op = va_arg(args,
object *);
3465 nr = va_arg(args,
int);
3466 buf = va_arg(args,
char *);
3467 size = va_arg(args,
int);
3468 split = va_arg(args,
object **);
3493 va_start(args,
type);
3495 op = va_arg(args,
object *);
3496 op2 = va_arg(args,
object *);
3497 merge = va_arg(args,
object **);
3515 va_start(args,
type);
3517 op = va_arg(args,
object *);
3518 op2 = va_arg(args,
object *);
3519 rint = va_arg(args,
int *);
3535 va_start(args,
type);
3537 op = va_arg(args,
object *);
3538 action = va_arg(args,
int);
3554 va_start(args,
type);
3556 op = va_arg(args,
object *);
3573 va_start(args,
type);
3575 op = va_arg(args,
object *);
3587 va_start(args,
type);
3588 op = va_arg(args,
object *);
3600 va_start(args,
type);
3601 op1 = va_arg(args,
object *);
3602 op2 = va_arg(args,
object *);
3603 rint = va_arg(args,
int *);
3615 va_start(args,
type);
3616 trap = va_arg(args,
object *);
3617 victim = va_arg(args,
object *);
3635 va_start(args,
type);
3636 op = va_arg(args,
object *);
3637 cause = va_arg(args,
object *);
3638 rint = va_arg(args,
int *);
3662 va_start(args,
type);
3664 cause = va_arg(args,
object *);
3665 state = va_arg(args,
int);
3681 va_start(args,
type);
3682 op = va_arg(args,
object *);
3683 rint = va_arg(args,
int *);
3704 va_start(args,
type);
3705 op = va_arg(args,
object *);
3706 caster = va_arg(args,
object *);
3707 dir = va_arg(args,
int);
3708 sp = va_arg(args,
object *);
3709 str = va_arg(args,
char *);
3710 rint = va_arg(args,
int *);
3720 *rint =
cast_spell(op, caster, dir, sp, str);
3729 va_start(args,
type);
3730 op = va_arg(args,
object *);
3731 sp = va_arg(args,
object *);
3732 prayer = va_arg(args,
int);
3744 va_start(args,
type);
3745 op = va_arg(args,
object *);
3746 sp = va_arg(args,
object *);
3764 va_start(args,
type);
3765 op = va_arg(args,
object *);
3766 spellname = va_arg(args,
char *);
3767 robj = va_arg(args,
object **);
3784 va_start(args,
type);
3785 op = va_arg(args,
object *);
3786 amount = va_arg(args, uint64_t);
3787 rint = va_arg(args,
int *);
3806 va_start(args,
type);
3807 tobuy = va_arg(args,
object *);
3808 op = va_arg(args,
object *);
3809 rint = va_arg(args,
int *);
3826 int x, y, randompos, ttype, flag;
3832 va_start(args,
type);
3833 op = va_arg(args,
object *);
3834 ttype = va_arg(args,
int);
3837 x = va_arg(args,
int);
3838 y = va_arg(args,
int);
3839 randompos = va_arg(args,
int);
3840 originator = va_arg(args,
object *);
3841 rint = va_arg(args,
int *);
3844 *rint =
transfer_ob(op, x, y, randompos, originator);
3851 originator = va_arg(args,
object *);
3852 flag = va_arg(args,
int);
3853 x = va_arg(args,
int);
3854 y = va_arg(args,
int);
3855 robj = va_arg(args,
object **);
3857 if (x < 0 || y < 0) {
3867 x = va_arg(args,
int);
3868 y = va_arg(args,
int);
3869 rint = va_arg(args,
int *);
3894 va_start(args,
type);
3895 op = va_arg(args,
object *);
3897 str = va_arg(args,
char *);
3898 robj = va_arg(args,
object **);
3901 if (*robj == NULL) {
3908 if (!strncmp(
name, str, strlen(str)))
3910 if (!strncmp(tmp->name, str, strlen(str)))
3913 if (tmp->slaying && !strcmp(tmp->slaying, str))
3928 va_start(args,
type);
3929 who = va_arg(args,
const object *);
3930 name = va_arg(args,
const char *);
3931 result = va_arg(args,
object **);
3944 va_start(args,
type);
3945 who = va_arg(args,
const object *);
3946 name = va_arg(args,
const char *);
3947 result = va_arg(args,
object **);
3964 va_start(args,
type);
3965 op = va_arg(args,
object *);
3966 author = va_arg(args,
object *);
3988 va_start(args,
type);
3989 op = va_arg(args,
object *);
3990 tmp = va_arg(args,
object *);
3991 rint = va_arg(args,
int *);
4005 va_start(args,
type);
4006 op = va_arg(args,
object *);
4007 msg = va_arg(args,
char *);
4008 rint = va_arg(args,
int *);
4031 va_start(args,
type);
4033 sval = va_arg(args,
char *);
4034 rpl = va_arg(args,
player **);
4049 va_start(args,
type);
4051 flags = va_arg(args,
int);
4052 pri = va_arg(args,
int);
4053 pl = va_arg(args,
object *);
4054 buf = va_arg(args,
const char *);
4073 va_start(args,
type);
4074 op = va_arg(args,
object *);
4075 rlong = va_arg(args, int64_t *);
4094 va_start(args,
type);
4095 ob = va_arg(args,
object *);
4096 exp = va_arg(args, int64_t);
4097 skill = va_arg(args,
const char *);
4098 flag = va_arg(args,
int);
4115 va_start(args,
type);
4116 pl = va_arg(args,
object *);
4117 rint = va_arg(args,
int *);
4133 const char *knowledge;
4135 va_start(args,
type);
4136 what = va_arg(args,
int);
4141 pl = va_arg(args,
object *);
4142 knowledge = va_arg(args,
const char *);
4143 rint = va_arg(args,
int *);
4147 if (pl->
contr == NULL) {
4148 LOG(
llevError,
"cfapi_player_knowledge: 'has' called for non player object %s", pl->
name);
4158 pl = va_arg(args,
object *);
4159 knowledge = va_arg(args,
const char *);
4161 if (pl->
contr != NULL)
4167 LOG(
llevError,
"cfapi_player_knowledge: invalid what %d", what);
4185 va_start(args,
type);
4186 who = va_arg(args,
object *);
4188 x = va_arg(args,
int);
4189 y = va_arg(args,
int);
4190 res = va_arg(args,
int *);
4202 va_start(args,
type);
4203 who = va_arg(args,
object *);
4204 what = va_arg(args,
object *);
4205 int *res = va_arg(args,
int *);
4221 va_start(args,
type);
4223 prop = va_arg(args,
int);
4227 rsstring = va_arg(args,
sstring *);
4228 *rsstring = arch->
name;
4240 *rarch = arch->
head;
4246 *rarch = arch->
more;
4251 robject = va_arg(args,
object **);
4252 *robject = &arch->
clone;
4277 va_start(args,
type);
4279 prop = va_arg(args,
int);
4282 rsstring = va_arg(args,
sstring *);
4294 rsstring = va_arg(args,
sstring *);
4301 obarg = va_arg(args,
object *);
4302 rplayer = va_arg(args,
player **);
4304 for (; *rplayer != NULL; (*rplayer) = (*rplayer)->
next)
4305 if ((*rplayer)->ob->contr->party == party) {
4331 va_start(args,
type);
4332 reg = va_arg(args,
region *);
4333 prop = va_arg(args,
int);
4336 rsstring = va_arg(args,
sstring *);
4337 *rsstring = reg->
name;
4342 rregion = va_arg(args,
region **);
4348 rregion = va_arg(args,
region **);
4354 rsstring = va_arg(args,
sstring *);
4360 rsstring = va_arg(args,
sstring *);
4361 *rsstring = reg->
msg;
4367 rint = va_arg(args,
int*);
4373 rsstring = va_arg(args,
sstring *);
4401 va_start(args,
type);
4402 ob = va_arg(args,
object *);
4403 robject = va_arg(args,
object **);
4426 va_start(args,
type);
4428 buf = va_arg(args,
const char *);
4429 ret = va_arg(args,
int *);
4450 va_start(args,
type);
4451 name = va_arg(args,
const char *);
4453 use_layout = va_arg(args,
char **);
4454 reset_group = va_arg(args,
sstring);
4470 va_start(args,
type);
4471 op = va_arg(args,
object *);
4472 activator = va_arg(args,
object *);
4473 third = va_arg(args,
object *);
4474 message = va_arg(args,
const char *);
4475 fix = va_arg(args,
int);
4476 ret = va_arg(args,
int *);
4491 va_start(args,
type);
4492 op = va_arg(args,
int);
4493 player = va_arg(args,
object *);
4496 if (
player->contr == NULL) {
4497 LOG(
llevError,
"cfapi_player_quest called with non player object %s!\n",
player->name);
4505 int state = va_arg(args,
int);
4511 int *ret = va_arg(args,
int *);
4517 int state = va_arg(args,
int);
4523 int *ret = va_arg(args,
int*);
4538 const char *
name = NULL, *extra = NULL;
4542 uint8_t register_type, command_type;
4545 va_start(args,
type);
4546 register_type = va_arg(args,
int);
4547 name = va_arg(args,
const char *);
4548 if (register_type == 1) {
4551 extra = va_arg(args,
const char *);
4554 command_type = (uint8_t)va_arg(args,
int);
4558 time = va_arg(args,
double);
4562 if (register_type == 1) {
4575 va_start(args,
type);
4592 struct dirent *currentfile;
4595 char buf[
sizeof(LIBDIR) + 9 +
sizeof(dirent::d_name)];
4597 snprintf(
buf,
sizeof(
buf),
"%s/plugins/", LIBDIR);
4601 if (plugdir == NULL)
4604 while ((currentfile =
readdir(plugdir)) != NULL) {
4605 l = strlen(currentfile->d_name);
4606 if (l > strlen(PLUGIN_SUFFIX)) {
4609 if (strcmp(currentfile->d_name+l-strlen(PLUGIN_SUFFIX), PLUGIN_SUFFIX) != 0)
4613 if (strcmp(disable->c_str(),
"All") == 0) {
4614 LOG(
llevInfo,
"plugins: disabling (all) %s\n", currentfile->d_name);
4618 if (strncmp(disable->c_str(), currentfile->d_name, disable->length()) == 0 && strlen(currentfile->d_name) == strlen(PLUGIN_SUFFIX) + disable->length()) {
4619 LOG(
llevInfo,
"plugins: disabling %s\n", currentfile->d_name);
4625 snprintf(
buf,
sizeof(
buf),
"%s/plugins/%s", LIBDIR, currentfile->d_name);
4626 LOG(
llevInfo,
"plugins: loading %s\n", currentfile->d_name);
static crossfire_plugin * plugins_find_plugin(const char *id)
Find a plugin from its internal name.
f_plug_property propfunc
Plugin getProperty function
sstring name
Face name, as used by archetypes and such.
sstring name_pl
The plural name of the object.
#define GET_MAP_OB(M, X, Y)
Gets the bottom object on a map.
New face structure - this enforces the notion that data is face by face only - you can not change the...
static void cfapi_object_transfer(int *type,...)
Object transfer.
static void cfapi_object_clean_object(int *type,...)
static void cfapi_object_forget_spell(int *type,...)
int16_t bed_y
x,y - coordinates of respawn (savebed).
static void cfapi_map_change_light(int *type,...)
Wrapper for change_map_light().
#define CFAPI_OBJECT_PROP_TITLE
static void cfapi_object_split(int *type,...)
Wrapper for object_split().
object * object_get_owner(object *op)
Returns the object which this object marks as being the owner.
const char * mapdir
Where the map files are.
player * next
Pointer to next player, NULL if this is last.
int cftimer_find_free_id(void)
Finds a free ID for a new timer.
#define CFAPI_OBJECT_PROP_X
static void cfapi_object_move(int *type,...)
Moves an object.
static void cfapi_timer_destroy(int *type,...)
Wrapper for cftimer_destroy().
player * first_player
First player.
struct Settings settings
Global settings.
int32_t move_status
What stage in attack mode.
object * object_get_env_recursive(object *op)
Utility function.
#define CFAPI_PARTY_VECTOR
Pointer to a std::vector<partylist *>
int(* f_plug_postinit)(void)
Function called after the plugin was initialized.
void remove_friendly_object(object *op)
Removes the specified object from the linked list of friendly objects.
#define CFAPI_OBJECT_VECTOR
Pointer to a std::vector<object *>
#define CFAPI_OBJECT_PROP_CHA
int16_t maxhp
Max hit points.
#define CFAPI_MAP_PROP_TMPNAME
#define CFAPI_OBJECT_PROP_ARCH_NAME
#define CFAPI_OBJECT_PROP_ATTACK_MOVEMENT
@ llevError
Error, serious thing.
static void cfapi_object_distance(int *type,...)
Wrapper for object_distance().
static void cfapi_object_delete(int *type,...)
static void cfapi_player_quest(int *type,...)
Quest-related wrappers, for all quest-related operations.
static void cfapi_timer_create(int *type,...)
Wrapper for cfapi_timer_create().
uint32_t path_attuned
Paths the object is attuned to.
void command_say(object *op, const char *params)
'say' command.
#define CFAPI_PARTY_PROP_NAME
static void cfapi_archetype_get_property(int *type,...)
#define NR_EVENTS
Number of events, maximum code + 1.
void LOG(LogLevel logLevel, const char *format,...)
Logs a message to stderr, or to file.
mapstruct * get_empty_map(int sizex, int sizey)
Creates and returns a map of the specific size.
void monster_npc_say(object *npc, const char *cp)
Simple function to have some NPC say something.
#define CFAPI_MAP_PROP_RESET_TIME
void drain_specific_stat(object *op, int deplete_stats)
Drain a specified stat from op.
#define CFAPI_MAP_PROP_RESET_TIMEOUT
archetype * more
Next part of a linked object.
static void cfapi_system_register_global_event(int *type,...)
#define CFAPI_REGION_PROP_LONGNAME
static void cfapi_system_get_party_vector(int *type,...)
#define CFAPI_OBJECT_PROP_LEVEL
std::vector< crossfire_plugin * > plugins_list
List of loaded plugins.
uint16_t client_type
Public type information.
#define CFAPI_PLAYER_PROP_BED_X
object * inv
Pointer to the first object in the inventory.
static void cfapi_object_drop(int *type,...)
Wrapper for drop().
mapstruct * ready_map_name(const char *name, int flags)
Makes sure the given map is loaded and swapped in.
#define QUERY_FLAG(xyz, p)
static void cfapi_system_get_map_vector(int *type,...)
#define CFAPI_REGION_PROP_NEXT
archetype * get_next_archetype(archetype *current)
#define CFAPI_MAP_PROP_NEXT
#define NR_OF_HOOKS
Number of hooked functions a plugin can call.
std::vector< std::string > disabled_plugins
List of disabled plugins, 'All' means all.
void do_learn_spell(object *op, object *spell, int special_prayer)
Actually makes op learn spell.
uint8_t ignore_plugin_compatibility
If set, don't check plugin version.
mapstruct * has_been_loaded(const char *name)
Checks whether map has been loaded.
object * map_find_by_archetype(mapstruct *m, int x, int y, const archetype *at)
Searches for any objects with a matching archetype at the given map and coordinates.
object * object_merge(object *op, object *top)
This function goes through all objects below and including top, and merges op to the first matching o...
uint32_t mark_count
Count of marked object.
object * get_next_friend(object *current)
Get the next object on the friendly list.
bool pick_up(object *op, object *alt)
Try to pick up an item.
#define CFAPI_OBJECT_PROP_SLAYING
static void cfapi_get_weekday_name(int *type,...)
Wrapper for get_season_name().
void update_position(mapstruct *m, int x, int y)
This function updates various attributes about a specific space on the map (what it looks like,...
#define CFAPI_OBJECT_PROP_DEX
#define CFAPI_OBJECT_PROP_FRIENDLY
#define CFAPI_OBJECT_PROP_ARCHETYPE
int8_t item_power
Power rating of the object.
static void cfapi_map_out_of_map(int *type,...)
Wrapper for out_of_map().
const char * datadir
Read only data files.
struct archetype * arch
Pointer to archetype.
int cast_spell(object *op, object *caster, int dir, object *spell_ob, char *stringarg)
Main dispatch when someone casts a spell.
void events_unregister_object_handler(const char *id)
Remove an object event handler.
int16_t players
How many players are on this level right now.
#define CFAPI_PLAYER_PROP_COUNT
#define CFAPI_OBJECT_PROP_BASE_NAME
uint16_t attack_movement
What kind of attack movement.
One function the server exposes to plugins.
float speed
Frequency of object 'moves' relative to server tick rate.
void object_set_enemy(object *op, object *enemy)
Sets the enemy of an object.
int16_t invisible
How much longer the object will be invis.
char * tmpname
Name of temporary file.
#define CFAPI_OBJECT_PROP_LAST_EAT
#define CFAPI_OBJECT_PROP_MOVE_ON
object * ob
The object representing the player.
void spring_trap(object *trap, object *victim)
This function generalizes attacks by runes/traps.
static void cfapi_object_get_property(int *type,...)
Main object property getter.
char fullname[MAX_BUF]
Plugin full name
#define CFAPI_OBJECT_PROP_STR
object * transport
Transport the player is in.
static void cfapi_object_create(int *type,...)
Wrapper for object_new(), create_archetype() and create_archetype_by_object_name().
float speed_left
How much speed is left to spend this round.
uint8_t pick_up
See crossfire.doc.
static void cfapi_object_drain(int *type,...)
struct mapstruct * map
Pointer to the map in which this object is present.
object * give_skill_by_name(object *op, const char *skill_name)
Given the skill name skill_name, we find the skill archetype/object, set appropriate values,...
int set_random_map_variable(RMParms *rp, const char *buf)
void quest_set_player_state(player *pl, sstring quest_code, int state)
Set the state of a quest for a player.
#define CFAPI_OBJECT_PROP_GOD
unsigned char MoveType
Typdef here to define type large enough to hold bitmask of all movement types.
object * arch_present_in_ob(const archetype *at, const object *op)
Searches for any objects with a matching archetype in the inventory of the given object.
void object_set_owner(object *op, object *owner)
Sets the owner and sets the skill and exp pointers to owner's current skill and experience objects.
double expmul
needed experience = (calc_exp*expmul) - means some races/classes can need less/more exp to gain level...
Represents the ingame time.
#define UP_OBJ_INSERT
Object was inserted.
#define CFAPI_OBJECT_PROP_NEXT_ACTIVE_OB
void player_set_own_title(struct player *pl, const char *title)
Sets the custom title.
uint16_t height
Width and height of map.
#define CFAPI_PLAYER_PROP_MARKED_ITEM
#define SET_ANIMATION(ob, newanim)
static void cfapi_object_find_archetype_inside(int *type,...)
Kinda wrapper for arch__present_in_ob().
non standard information is not specified or uptime this means how long since the executable has been started A particular host may have been running a server for quite a long time
#define CFAPI_SYSTEM_ARCHETYPES
void draw_ext_info_format(int flags, int pri, const object *pl, uint8_t type, uint8_t subtype, const char *format,...) PRINTF_ARGS(6
archetype * head
The main part of a linked object.
#define CFAPI_OBJECT_PROP_MAXSP
#define CFAPI_OBJECT_PROP_RAW_NAME
#define CFAPI_OBJECT_PROP_SPELL_ITEM
int move_player(object *op, int dir)
Move player in the given direction.
void object_reset(object *op)
Totally resets the specified object, without freeing associated memory.
#define CFAPI_ARCH_PROP_NEXT
int8_t direction
Means the object is moving that way.
#define CFAPI_OBJECT_PROP_Y
static const flag_definition flags[]
Flag mapping.
tag_t count
Unique object number for this object.
#define CFAPI_OBJECT_PROP_ENEMY
int16_t last_grace
As last_sp, except for grace.
void object_copy(const object *src_ob, object *dest_ob)
Copy object first frees everything allocated by the second object, and then copies the contents of th...
void clean_object(object *op)
Remove and free all objects in the inventory of the given object.
#define CFAPI_OBJECT_PROP_MOVE_TYPE
char savebed_map[MAX_BUF]
Map where player will respawn after death.
void fix_object(object *op)
Updates all abilities given by applied objects in the inventory of the given object.
void get_tod(timeofday_t *tod)
Computes the ingame time of the day.
#define CFAPI_OBJECT_PROP_FACE
static void cfapi_object_say(int *type,...)
#define CFAPI_REGION_PROP_PARENT
#define CFAPI_OBJECT_PROP_ENVIRONMENT
#define COMMAND_TYPE_NORMAL
Standard commands.
#define CFAPI_OBJECT_PROP_ATTACKED_BY
char * name
Shortend name of the region as maps refer to it.
mapstruct * generate_random_map(const char *OutFileName, RMParms *RP, char **use_layout, sstring reset_group)
Main random map routine.
#define FOR_ABOVE_PREPARE(op_, it_)
Constructs a loop iterating over all objects above an object.
object * enemy
Monster/player to follow even if not closest.
#define CFAPI_SYSTEM_PLAYERS
#define CFAPI_OBJECT_PROP_PRESENT
#define CFAPI_REGION_PROP_JAIL_PATH
#define CFAPI_MAP_PROP_WIDTH
static void cfapi_get_hooks(int *type,...)
#define CFAPI_ARCH_PROP_NAME
#define CFAPI_OBJECT_PROP_ITEM_POWER
#define CFAPI_MAP_PROP_UNIQUE
uint8_t hide
The object is hidden, not invisible.
sstring title
Of foo, etc.
int(* f_plug_init)(const char *iversion, f_plug_api gethooksptr)
First function called in a plugin.
int apply_manual(object *op, object *tmp, int aflag)
Main apply handler.
char path[HUGE_BUF]
Filename of the map.
void apply_by_living_below(object *pl)
Attempt to apply the object 'below' the player.
#define MSG_TYPE_MISC
Messages that don't go elsewhere.
void initPlugins(void)
Plugins initialization.
#define CFAPI_OBJECT_PROP_CURRENT_WEAPON
int16_t level
Level of creature or object.
static void cfapi_friendlylist_get_next(int *type,...)
Friend list access, to get objects on it.
AssetsManager * getManager()
static void cfapi_object_identify(int *type,...)
Wrapper for identify().
static void cfapi_map_set_map_property(int *type,...)
object * object_insert_in_ob(object *op, object *where)
This function inserts the object op in the linked list inside the object environment.
object * above
Pointer to the object stacked above this one.
LIBPTRTYPE libptr
Pointer to the plugin library
static void cfapi_object_user_event(int *type,...)
#define MSG_TYPE_COMMAND
Responses to commands, eg, who.
#define CFAPI_MAP_PROP_ENTER_X
static void cfapi_object_update(int *type,...)
Wrapper for object_update().
#define CFAPI_OBJECT_PROP_INVISIBLE
static void cfapi_system_directory(int *type,...)
int16_t resist[NROFATTACKS]
Resistance adjustments for attacks.
#define plugins_dlerror()
Library error.
Plugin animator file specs[Config] name
#define FLAG_REMOVED
Object is not in any map or invenory.
static void cfapi_object_change_abil(int *type,...)
Wrapper for change_abil().
const char * get_season_name(const int index)
give access to season names
#define CFAPI_OBJECT_PROP_SKILL
event_registration events_register_global_handler(int eventcode, f_plug_event hook)
Register a global event handler.
#define CFAPI_OBJECT_PROP_CLIENT_TYPE
uint32_t path_denied
Paths the object is denied access to.
void object_clear(object *op)
Frees everything allocated by an object, and also clears all variables and flags to default settings.
char * longname
Official title of the region, this might be defined to be the same as name.
uint32_t update_look
If true, we need to send the look window.
void party_join(object *op, partylist *party)
Makes a player join a party.
static void cfapi_object_get_key(int *type,...)
Gets a key/value value for an object.
#define TIMER_ERR_ID
Invalid timer id.
#define MSG_TYPE_COMMAND_DEBUG
Various debug type commands.
int32_t carrying
How much weight this object contains.
int plugins_remove_plugin(const char *id)
Unload the specified plugin.
#define CFAPI_OBJECT_PROP_PATH_DENIED
#define CFAPI_MAP_PROP_REGION
#define TIMER_ERR_NONE
No error.
uint32_t path_repelled
Paths the object is repelled from.
int16_t y
Position in the map for this object.
#define CFAPI_OBJECT_PROP_ANIM_SPEED
static event_registration m
static void cfapi_system_unregister_global_event(int *type,...)
#define CFAPI_OBJECT_PROP_AC
void events_register_object_handler(const char *id, f_plug_event handler)
Register an object event handler.
#define MOVE_ALL
Mask of all movement types.
static void cfapi_register_command(int *type,...)
char * stringbuffer_finish(StringBuffer *sb)
Deallocate the string buffer instance and return the string.
partylist * party_get_first(void)
Returns the first party from the list of all parties.
#define FLAG_FREED
Object is in the list of free objects.
void object_free_drop_inventory(object *ob)
Frees everything allocated by an object, removes it from the list of used objects,...
void object_update(object *op, int action)
object_update() updates the array which represents the map.
struct player * contr
Pointer to the player which control this object.
static uint32_t NROF(const object *const ob)
Returns ob->nrof, unless it is 0, in which case return 1.
object * object_find_by_name(const object *who, const char *name)
Finds an object in inventory name.
static void cfapi_player_find(int *type,...)
Wrapper for find_player_partial_name().
DIR * opendir(const char *)
#define CFAPI_OBJECT_PROP_LORE
#define CFAPI_ARCH_PROP_HEAD
object * chosen_skill
The skill chosen to use.
#define CFAPI_OBJECT_PROP_PICK_UP
#define CFAPI_OBJECT_PROP_MOVE_OFF
int32_t last_heal
Last healed.
uint8_t subtype
Subtype of object.
#define CFAPI_PLAYER_PROP_PARTY
void command_unregister(command_registration command)
Unregister a previously registered command.
f_plug_api func
Function itself.
static void cfapi_player_can_pay(int *type,...)
Wrapper for can_pay().
Used to link together several objects.
#define CFAPI_MAP_PROP_WPARTY
const char * determine_god(object *op)
Determines if op worships a god.
int is_friendly(const object *op)
Checks if the given object is already in the friendly list or not.
#define CFAPI_OBJECT_PROP_CHOSEN_SKILL
#define FLAG_NO_DROP
Object can't be dropped.
#define CFAPI_OBJECT_PROP_HP
short freearr_y[SIZEOFFREE]
Y offset when searching around a spot.
#define CFAPI_OBJECT_PROP_MAXHP
void drop(object *op, object *tmp)
Drop an item, either on the floor or in a container.
static void cfapi_map_message(int *type,...)
uint8_t anim_speed
Ticks between animation-frames.
const char * get_weekday(const int index)
give access to weekday names
static void cfapi_map_create_path(int *type,...)
Wrapper for create_pathname() and create_overlay_pathname().
#define CFAPI_OBJECT_PROP_OB_BELOW
static void cfapi_object_apply_below(int *type,...)
Applies an object below.
#define CFAPI_OBJECT_PROP_HIDDEN
#define CFAPI_OBJECT_PROP_CARRYING
#define CFAPI_OBJECT_PROP_TOTAL_EXP
int move_ob(object *op, int dir, object *originator)
Op is trying to move in direction dir.
int cftimer_destroy(int id)
Destroys an existing timer.
static void cfapi_set_random_map_variable(int *type,...)
Wrapper for set_random_map_variable().
object * object_present_in_ob_by_name(int type, const char *str, const object *op)
Searches for any objects with a matching type & name variable in the inventory of the given object.
#define CFAPI_PLAYER_PROP_BED_Y
void query_name(const object *op, char *buf, size_t size)
Describes an item.
#define FREE_OBJ_NO_DESTROY_CALLBACK
Do not run the destroy callback.
static void cfapi_object_remove_depletion(int *type,...)
#define CFAPI_OBJECT_PROP_GEN_SP_ARMOUR
#define CFAPI_REGION_PROP_JAIL_Y
#define CFAPI_OBJECT_PROP_CHEATER
#define FOR_ABOVE_FINISH()
Finishes FOR_ABOVE_PREPARE().
void events_unregister_global_handler(int eventcode, event_registration id)
Remove a global event handler.
#define CFAPI_MAP_PROP_MESSAGE
uint16_t number
This is the image unique identifier.
sstring client
Client string sent by client.
static void cfapi_system_re_cmp(int *type,...)
Wrapper for re_cmp().
#define CFAPI_OBJECT_PROP_RACE
void(* f_plug_api)(int *type,...)
General API function.
object clone
An object from which to do object_copy()
uint8_t run_away
Monster runs away if it's hp goes below this percentage.
static void cfapi_system_get_object_vector(int *type,...)
static void cfapi_party_get_property(int *type,...)
Party-related functions.
int32_t weight_limit
Weight-limit of object.
sstring add_string(const char *str)
Share a string.
static void cfapi_object_check_spell(int *type,...)
Wrapper for check_spell_known().
#define CFAPI_OBJECT_PROP_MOVE_BLOCK
#define CFAPI_OBJECT_PROP_FACING
mapstruct * first_map
First map.
static void copy_message(object *op, const char *msg)
Utility function to copy the string to op->msg.
static void cfapi_system_find_face(int *type,...)
Wrapper for find_face().
region * parent
Pointer to the region that is a parent of the current region, if a value isn't defined in the current...
#define CFAPI_OBJECT_PROP_WEIGHT
static void cfapi_system_get_archetype_vector(int *type,...)
static void cfapi_object_reset(int *type,...)
Wrapper for clear_reset().
#define CFAPI_OBJECT_PROP_RESIST
#define CFAPI_PLAYER_PROP_IP
#define CFAPI_OBJECT_PROP_DAM
char * msg
The description of the region.
object * below
Pointer to the object stacked below this one.
int change_map_light(mapstruct *m, int change)
Used to change map light level (darkness) up or down.
MoveType move_type
Type of movement this object uses.
#define NDI_DELAYED
If set, then message is sent only after the player's tick completes.
const char * get_periodofday(const int index)
give access to weekday names
struct dirent * readdir(DIR *)
void query_short_name(const object *op, char *buf, size_t size)
query_short_name(object) is similar to query_name(), but doesn't contain any information about object...
void void ext_info_map(int color, const mapstruct *map, uint8_t type, uint8_t subtype, const char *str1)
Writes to everyone on the specified map.
static void cfapi_map_has_been_loaded(int *type,...)
Wrapper for has_been_loaded().
const Face * face
Face with colors.
int out_of_map(mapstruct *m, int x, int y)
Return 1 if coordinates X and Y are out of the map M, taking into account tiling.
char * jailmap
Where a player that is arrested in this region should be imprisoned.
sstring find_string(const char *str)
Searches a string in the shared strings.
char * host
Which host it is connected from (ip address).
int32_t last_eat
How long since we last ate.
int32_t value
How much money it is worth (or contains)
f_plug_postinit closefunc
Plugin Termination function
static void cfapi_object_remove(int *type,...)
void object_update_speed(object *op)
Updates the speed of an object.
static void cfapi_system_strdup_local(int *type,...)
Wrapper for strdup_local().
#define FREE_AND_COPY(sv, nv)
Release the shared string if not NULL, and make it a reference to nv.
char id[MAX_BUF]
Plugin identification string
#define CFAPI_OBJECT_PROP_PATH_ATTUNED
int events_execute_object_user(object *op, object *activator, object *third, const char *message, int fix)
Execute an EVENT_USER on the specified object.
uint8_t type
PLAYER, BULLET, etc.
TIPS on SURVIVING Crossfire is populated with a wealth of different monsters These monsters can have varying immunities and attack types In some of them can be quite a bit smarter than others It will be important for new players to learn the abilities of different monsters and learn just how much it will take to kill them This section discusses how monsters can interact with players Most monsters in the game are out to mindlessly kill and destroy the players These monsters will help boost a player s after he kills them When fighting a large amount of monsters in a single attempt to find a narrower hallway so that you are not being attacked from all sides Charging into a room full of Beholders for instance would not be open the door and fight them one at a time For there are several maps designed for them Find these areas and clear them out All throughout these a player can find signs and books which they can read by stepping onto them and hitting A to apply the book sign These messages will help the player to learn the system One more always keep an eye on your food If your food drops to your character will soon so BE CAREFUL ! NPCs Non Player Character are special monsters which have intelligence Players may be able to interact with these monsters to help solve puzzles and find items of interest To speak with a monster you suspect to be a simply move to an adjacent square to them and push the double ie Enter your message
#define CFAPI_ARCH_PROP_CLONE
int16_t dam
How much damage this object does when hitting.
int8_t magic
Any magical bonuses to this item.
#define CFAPI_OBJECT_PROP_EXP
#define SET_MAP_FLAGS(M, X, Y, C)
Sets map flags.
#define CFAPI_OBJECT_PROP_SPEED
#define CFAPI_OBJECT_PROP_TYPE
object * active_prev
Previous object in the 'active list This is used in process_events so that the entire object list doe...
int quest_was_completed(player *pl, sstring quest_code)
Check if a quest was completed once for a player, without taking account the current state.
#define CFAPI_OBJECT_PROP_NROF
sstring materialname
Specific material name.
object * object_create_arch(archetype *at)
Create a full object using the given archetype.
#define CFAPI_PLAYER_PROP_TITLE
#define CFAPI_MAP_PROP_PATH
static void cfapi_object_transmute(int *type,...)
void object_free(object *ob, int flags)
Frees everything allocated by an object, removes it from the list of used objects,...
#define CFAPI_OBJECT_PROP_CUSTOM_NAME
static void cfapi_region_get_property(int *type,...)
Regions-related functions.
static void cfapi_unregister_command(int *type,...)
#define CFAPI_OBJECT_PROP_PICKABLE
#define FOR_INV_FINISH()
Finishes FOR_INV_PREPARE().
#define CFAPI_REGION_VECTOR
Pointer to a std::vector<region *>
MoveType move_on
Move types affected moving on to this space.
int32_t food
How much food in stomach.
void change_exp(object *op, int64_t exp, const char *skill_name, int flag)
Changes experience to a player/monster.
static void cfapi_object_teleport(int *type,...)
Teleports an object at a specified destination if possible.
#define P_NEED_UPDATE
This space is out of date.
#define CFAPI_PLAYER_QUEST_START
#define CFAPI_REGION_PROP_NAME
static void cfapi_object_spring_trap(int *type,...)
The archetype structure is a set of rules on how to generate and manipulate objects which point to ar...
#define CFAPI_OBJECT_PROP_INVISIBLE_TIME
#define CFAPI_OBJECT_PROP_ATTACK_TYPE
#define CFAPI_SYSTEM_MAPS
int move_to(object *op, int x, int y)
Move an object one square toward a specified destination on the same map.
#define P_OUT_OF_MAP
This space is outside the map.
#define CFAPI_REGION_PROP_JAIL_X
static void cfapi_get_time(int *type,...)
Wrapper for get_tod().
static void cfapi_object_pay_item(int *type,...)
Wrapper for pay_for_item().
const char * confdir
Configuration files.
mapstruct * get_map_from_coord(mapstruct *m, int16_t *x, int16_t *y)
This is basically the same as out_of_map above(), but instead we return NULL if no map is valid (coor...
void each(std::function< void(T *)> op)
Apply a function to each asset.
const Face * get_face_by_id(uint16_t id)
Get a face from its unique identifier.
event_registration global_registration[NR_EVENTS]
Global event registration identifiers.
with a maximum of six This is not so if you are wearing plate you receive no benefit Armour is additive with all the supplementry forms of which means that it lasts until the next semi permanent spell effect is cast upon the character weak special and current protections and immunities dark elf priest killer panther all others vampire that they only take damage from cold based attacks but it also inflicts hp rnd The range of the cone covers(2+Wisdom bonus) squares. spell will not cure poison or disease prayer
void delete_map(mapstruct *m)
Frees the map, including the mapstruct.
char * partyname
Party name.
sstring race
Human, goblin, dragon, etc.
#define CFAPI_OBJECT_PROP_OWNER
int8_t facing
Object is oriented/facing that way.
const Animations * animation
Animation of this item, NULL if not animated.
static void cfapi_object_pickup(int *type,...)
#define CFAPI_SYSTEM_REGIONS
static void cfapi_object_on_same_map(int *type,...)
#define CFAPI_OBJECT_PROP_NAME_PLURAL
object * object_insert_in_map_at(object *op, mapstruct *m, object *originator, int flag, int x, int y)
Same as object_insert_in_map() except it handle separate coordinates and do a clean job preparing mul...
struct archetype * other_arch
Pointer used for various things - mostly used for what this objects turns into or what this object cr...
object * object_create_clone(object *asrc)
Create clone from object to another.
#define CFAPI_PARTY_PROP_NEXT
Archetypes * archetypes()
Get archetypes.
#define MAX_BUF
Used for all kinds of things.
static void cfapi_get_month_name(int *type,...)
Wrapper for get_season_name().
static void cfapi_system_check_path(int *type,...)
Wrapper for check_path().
size_t strlcpy(char *dst, const char *src, size_t size)
Portable implementation of strlcpy(3).
#define CFAPI_MAP_PROP_NAME
void object_set_cheat(object *op)
object_set_cheat(object) sets the cheat flag (WAS_WIZ) in the object and in all it's inventory (recur...
object * object_new(void)
Grabs an object from the list of unused objects, makes sure it is initialised, and returns it.
void create_overlay_pathname(const char *name, char *buf, size_t size)
Same as create_pathname(), but for the overlay maps.
object * head
Points to the main object of a large body.
StringBuffer * describe_item(const object *op, const object *owner, int use_media_tags, StringBuffer *buf)
Describes an item, in all its details.
#define COMMAND_TYPE_WIZARD
Wizard-only commands.
#define CFAPI_OBJECT_PROP_WIS
object * object_present_in_ob(uint8_t type, const object *op)
Searches for any objects with a matching type variable in the inventory of the given object.
object * current_weapon
Pointer to the weapon currently used.
const char * re_cmp(const char *, const char *)
re-cmp - get regular expression match.
int32_t weight
Attributes of the object.
#define CFAPI_OBJECT_PROP_POW
void free_string(sstring str)
This will reduce the refcount, and if it has reached 0, str will be freed.
int transfer_ob(object *op, int x, int y, int randomly, object *originator)
Move an object (even linked objects) to another spot on the same map.
static void cfapi_map_get_map(int *type,...)
Gets map information.
int8_t wc
Weapon Class, lower WC increases probability of hitting.
#define CFAPI_REGION_PROP_MESSAGE
float move_slow_penalty
How much this slows down the object.
const char * playerdir
Where the player files are.
Animations * try_find_animation(const char *name)
partylist * party_get_next(const partylist *party)
Returns the next party from the list of all parties.
int16_t maxgrace
Maximum grace.
#define CFAPI_OBJECT_PROP_CONTAINER
int change_abil(object *op, object *tmp)
Permanently alters an object's stats/flags based on another object.
static void send_changed_object(object *op)
Notify clients about a changed object.
#define CFAPI_OBJECT_PROP_INVENTORY
#define CFAPI_OBJECT_PROP_MAP
object * mark
Marked object.
#define CFAPI_MAP_PROP_FLAGS
static void cfapi_system_find_string(int *type,...)
Wrapper for find_string().
static void cfapi_system_remove_string(int *type,...)
Wrapper for free_string().
#define CFAPI_MAP_PROP_DARKNESS
#define CFAPI_MAP_PROP_PLAYERS
#define CFAPI_OBJECT_PROP_RUN_AWAY
object * object_decrease_nrof(object *op, uint32_t i)
Decreases a specified number from the amount of an object.
#define PERM_EXP(exptotal)
Convert saved total experience into permanent experience.
static void cfapi_map_delete_map(int *type,...)
void plugins_display_list(object *op)
Displays a list of loaded plugins (keystrings and description) in the game log window.
#define CFAPI_PLAYER_PROP_TRANSPORT
sstring lore
Obscure information about this object, to get put into books and the like.
#define NDI_UNIQUE
Print immediately, don't buffer.
sstring slaying
Which race to do double damage to.
static void cfapi_map_get_map_property(int *type,...)
int8_t glow_radius
indicates the glow radius of the object
#define CFAPI_PARTY_PROP_PLAYER
std::vector< region * > all_regions
#define CFAPI_PLAYER_QUEST_GET_STATE
#define CFAPI_MAP_PROP_DIFFICULTY
archetype * find_archetype_by_object_name(const char *name)
This function retrieves an archetype given the name that appears during the game (for example,...
void transmute_materialname(object *op, const object *change)
When doing transmutation of objects, we have to recheck the resistances, as some that did not apply p...
sstring name
The name of the object, obviously...
static void cfapi_system_get_region_vector(int *type,...)
static void cfapi_object_describe(int *type,...)
Wrapper for describe_item().
static void cfapi_object_give_skill(int *type,...)
static void cfapi_generate_random_map(int *type,...)
Wrapper for generate_random_map().
object * spellitem
Spell ability monster is choosing to use.
ServerSettings serverSettings
#define CFAPI_OBJECT_PROP_ANIMATION
object * object_find_by_arch_name(const object *who, const char *name)
Find object in inventory by archetype name.
#define CFAPI_OBJECT_PROP_INT
#define CFAPI_OBJECT_PROP_SP
static void cfapi_object_fix(int *type,...)
const char * party_get_password(const partylist *party)
Returns the party's password.
#define CFAPI_SYSTEM_FRIENDLY_LIST
void cleanupPlugins(void)
Call the crossfire_plugin::closefunc on the various plugins, used at server shutdown.
int object_can_pick(const object *who, const object *item)
Finds out if an object can be picked up.
void add_friendly_object(object *op)
Add a new friendly object to the list of friendly objects.
#define CFAPI_PLAYER_QUEST_SET_STATE
same as sound ncom command like but with extra the client want tick commands so it knows animation timing the client wants to be informed of pickup mode changes Mode will be sent when the player successfully logs and afterward any time the value is but over many options have become defaults This documents those now obsolete client can handle the bit exp values that are now used values are sent as bit Setting this flag also means that skill exp will be and it will be sent in revised method as described in the stats command Value is an integer in string format else Deprecated client should presume all servers support this server will return FALSE Deprecated replaced with sound2 setup but rather that the server was unable to complete the given protocol request the command(just the command name) that generated the failure. reason the server will only keep track of the latest mark sent The server will generally send a drawinfo command informing the player
#define CFAPI_OBJECT_PROP_NAME
#define CFAPI_OBJECT_PROP_EXP_MULTIPLIER
int get_map_flags(mapstruct *oldmap, mapstruct **newmap, int16_t x, int16_t y, int16_t *nx, int16_t *ny)
This rolls up wall, blocks_magic, blocks_view, etc, all into one function that just returns a P_.
int16_t maxsp
Max spell points.
int is_magical(const object *op)
Checks whether object is magical.
#define CFAPI_OBJECT_PROP_PREV_ACTIVE_OB
uint32_t reset_timeout
How many seconds must elapse before this map should be reset.
#define CFAPI_OBJECT_PROP_HEAD
object * env
Pointer to the object which is the environment.
char * create_pathname(const char *name, char *buf, size_t size)
Get the full path to a map file.
object * check_spell_known(object *op, const char *name)
Checks to see if player knows the spell.
static void cfapi_object_change_exp(int *type,...)
Wrapper for change_exp().
int32_t last_sp
As last_heal, but for spell points.
int(* f_plug_event)(int *type,...)
Function to call to handle global or object-related events.
const typedef char * sstring
This represents one animation.
int8_t gen_sp_armour
Sp regen penalty this object has (was last_heal)
int pay_for_item(object *op, object *pl, uint64_t reduction)
Player attemps to buy an item, if she has enough money then remove coins as needed from active contai...
#define CFAPI_PLAYER_PROP_BED_MAP
sstring skill
Name of the skill this object uses/grants.
object * object_split(object *orig_ob, uint32_t nr, char *err, size_t size)
object_split(ob,nr) splits up ob into two parts.
#define CFAPI_OBJECT_PROP_WC
char * name
Name of map as given by its creator.
#define plugins_dlsym(lib, name)
Get a function from a shared library.
#define CFAPI_OBJECT_PROP_GLOW_RADIUS
int object_find_free_spot(const object *ob, mapstruct *m, int x, int y, int start, int stop)
object_find_free_spot(object, map, x, y, start, stop) will search for a spot at the given map and coo...
uint64_t query_money(const object *op)
Determine the amount of money the given object contains, including what is inside containers.
static void cfapi_object_find_by_arch_name(int *type,...)
void object_set_msg(object *op, const char *msg)
Set the message field of an object.
void esrv_update_item(int flags, object *pl, object *op)
Updates object *op for player *pl.
#define CFAPI_OBJECT_PROP_PATH_REPELLED
sstring msg
If this is a book/sign/magic mouth/etc.
#define CFAPI_OBJECT_PROP_CON
#define CFAPI_ARCHETYPE_VECTOR
Pointer to a std::vector<archetype *>
static const hook_entry plug_hooks[]
All hooked functions plugins can call.
if you malloc the data for the buffer
sstring object_get_value(const object *op, const char *const key)
Get an extra value by key.
int on_same_map(const object *op1, const object *op2)
Checks whether 2 objects are on the same map or not.
#define CFAPI_MAP_VECTOR
Pointer to a std::vector<mapstruct *>
#define CLEAR_FLAG(xyz, p)
int can_pay(object *pl)
Checks all unpaid items in op's inventory, adds up all the money they have, and checks that they can ...
#define CFAPI_OBJECT_PROP_GP
#define CFAPI_OBJECT_PROP_MAGICAL
uint16_t num
Where we are in the array.
#define CFAPI_OBJECT_PROP_LAST_SP
static void cfapi_cost_string_from_value(int *type,...)
Wrapper for cost_string_from_value, modified to take a buffer and length instead of a StringBuffer.
int8_t ac
Armor Class, lower AC increases probability of not getting hit.
int player_arrest(object *who)
Put a player into jail, taking into account cursed exits and player's region.
player * find_player_partial_name(const char *plname)
Find a player by a partial name.
object * attacked_by
This object start to attack us! only player & monster.
int16_t duration
Number of moves (see 'speed') spell lasts.
#define CFAPI_OBJECT_PROP_MATERIAL
static void cfapi_object_insert(int *type,...)
#define CFAPI_OBJECT_PROP_DURATION
#define CFAPI_OBJECT_PROP_MOVE_STATUS
static void cfapi_map_update_position(int *type,...)
Wrapper for update_position().
#define CFAPI_OBJECT_PROP_OTHER_ARCH
#define UP_OBJ_FACE
Only thing that changed was the face.
static void cfapi_get_periodofday_name(int *type,...)
Wrapper for get_season_name().
#define CFAPI_OBJECT_PROP_OB_ABOVE
partylist * party
Party this player is part of.
char * msg
Message map creator may have left.
int knowledge_player_knows(const player *pl, const char *knowledge)
Determines whether a player knows a specific knowledge or not.
uint32_t count
Any numbers typed before a command.
int object_distance(const object *ob1, const object *ob2)
Return the square of the distance between the two given objects.
#define CFAPI_MAP_PROP_ENTER_Y
#define string_get_int(name)
void quest_start(player *pl, sstring quest_code, int state)
Start a quest for a player.
#define CFAPI_OBJECT_PROP_LAST_HEAL
static void cfapi_player_message(int *type,...)
#define CFAPI_OBJECT_PROP_MOVE_ALLOW
void knowledge_give(player *pl, const char *marker, const object *book)
Give a knowledge item from its code.
int wparty
Highly fasten conversion between worldmap and weathermap.
region * get_region_by_map(mapstruct *m)
Gets a region from a map.
#define CFAPI_ARCH_PROP_MORE
static void cfapi_system_add_string(int *type,...)
Wrapper for add_string().
object * container
Current container being used.
void(* command_function_extra)(object *op, const char *params, const char *extra)
One command function, with a custom parameter specified at registration time.
command_registration command_register(const char *name, uint8_t type, command_function func, float time)
Register a player-issued command.
#define CFAPI_SYSTEM_PARTIES
#define CFAPI_MAP_PROP_WPARTX
static void cfapi_log(int *type,...)
Wrapper for LOG().
object * active_next
Next object in the 'active' list This is used in process_events so that the entire object list does n...
void object_remove(object *op)
This function removes the object op from the linked list of objects which it is currently tied to.
archetype * try_find_archetype(const char *name)
#define CFAPI_OBJECT_PROP_MOVE_SLOW
#define CFAPI_OBJECT_PROP_MERGEABLE
MoveType move_off
Move types affected moving off this space.
signed long object_sum_weight(object *op)
object_sum_weight() is a recursive function which calculates the weight an object is carrying.
const Face * try_find_face(const char *name, const Face *error)
void do_forget_spell(object *op, const char *spell)
Erases spell from player's inventory.
int16_t enter_y
Enter_x and enter_y are default entrance coordinates to use for a map such that when an exit specifie...
uint64_t command_registration
Identifier when registering a command.
static void cfapi_object_set_key(int *type,...)
Write a key/value for an object.
int remove_depletion(object *op, int level)
Remove depletion from op, if present, and warn player of such restorations.
static void cfapi_object_pay_amount(int *type,...)
Wrapper for pay_for_amount().
const char * get_month_name(const int index)
give access to month names
#define CFAPI_OBJECT_PROP_MAGIC
#define CFAPI_OBJECT_PROP_FLAGS
#define CFAPI_OBJECT_PROP_LUCK
#define CFAPI_MAP_PROP_HEIGHT
int object_teleport(object *op, mapstruct *map, int x, int y)
Move the specified object in a free spot around the map's x & y.
static void cfapi_system_find_animation(int *type,...)
Wrapper for find_animation().
Crossfire Architecture the general intention is to enhance the enjoyability and playability of CF In this code
void update_all_los(const mapstruct *map, int x, int y)
This function makes sure that update_los() will be called for all players on the given map within the...
uint8_t state
How the object was last drawn (animation)
uint32_t unique
If set, this is a per player unique map.
command_registration command_register_extra(const char *name, const char *extra, uint8_t type, command_function_extra func, float time)
Register a player-issued command with an extra parameter.
int calculate_difficulty(mapstruct *m)
This routine is supposed to find out the difficulty of the map.
sstring name
More definite name, like "generate_kobold".
uint32_t nrof
Number of objects.
#define FLAG_WAS_WIZ
Player was once a wiz.
socket_struct * socket
Socket information for this player.
mapstruct * next
Next map, linked list.
static std::vector< std::string > split(const std::string &field, const std::string &by)
static void cfapi_object_apply(int *type,...)
Applies an object.
uint32_t reset_time
Server time when map gets reset, seconds since epoch.
#define CFAPI_OBJECT_PROP_VALUE
void query_base_name(const object *op, int plural, char *buf, size_t size)
Query a short name for the item.
#define CFAPI_OBJECT_PROP_MESSAGE
living stats
Str, Con, Dex, etc.
static void cfapi_object_perm_exp(int *type,...)
Wrapper for permanent experience calculation.
How to Install a Crossfire Server on you must install a python script engine on your computer Python is the default script engine of Crossfire You can find the python engine you have only to install them The VisualC Crossfire settings are for but you habe then to change the pathes in the VC settings Go in Settings C and Settings Link and change the optional include and libs path to the new python installation path o except the maps ! You must download a map package and install them the share folder Its must look like doubleclick on crossfire32 dsw There are projects in your libcross lib and plugin_python You need to compile all Easiest way is to select the plugin_python ReleaseLog as active this will compile all others too Then in Visual C press< F7 > to compile If you don t have an appropriate compiler you can try to get the the VC copies the crossfire32 exe in the crossfire folder and the plugin_python dll in the crossfire share plugins folder we will remove it when we get time for it o Last showing lots of weird write to the Crossfire mailing list
#define CFAPI_OBJECT_PROP_MOVE_SLOW_PENALTY
MoveType move_allow
What movement types explicitly allowed.
LogLevel
Log levels for the LOG() function.
int object_set_value(object *op, const char *key, const char *value, int add_key)
Updates the key in op to value.
#define CFAPI_OBJECT_PROP_MAXGP
#define CFAPI_OBJECT_PROP_COUNT
#define CFAPI_OBJECT_PROP_SUBTYPE
const char * tmpdir
Directory to use for temporary files.
static void cfapi_player_knowledge(int *type,...)
Wrapper for knowledge-related functions().
short freearr_x[SIZEOFFREE]
X offset when searching around a spot.
#define CFAPI_PLAYER_QUEST_WAS_COMPLETED
int64_t total_exp
All exp ever earned (used to calc perm_exp)
void(* command_function)(object *op, const char *params)
One command function.
#define plugins_dlclose(lib)
Unload a shared library.
static void cfapi_map_get_object_at(int *type,...)
Wrapper for GET_MAP_OB().
int plugins_init_plugin(const char *libfile)
Try to load the specified plugin.
uint8_t darkness
Indicates level of darkness of map.
static void cfapi_object_cast(int *type,...)
Wrapper for query_money().
uint32_t attacktype
Bitmask of attacks this object does.
int pay_for_amount(uint64_t to_pay, object *pl)
Takes the amount of money from the the player inventory and from it's various pouches using the pay_f...
object * object_get_player_container(object *op)
Finds the player carrying an object.
#define CFAPI_OBJECT_PROP_FP
static void cfapi_object_query_money(int *type,...)
Wrapper for query_money().
uint16_t material
What materials this object consist of.
#define CUSTOM_NAME_FIELD
Key in an object for the player-assigned custom name.
object * find_marked_object(object *op)
Return the object the player has marked with the 'mark' command below.
MoveType move_block
What movement types this blocks.
void free_dialog_information(object *op)
Frees obj::dialog_information.
#define FOR_INV_PREPARE(op_, it_)
Constructs a loop iterating over the inventory of an object.
int8_t luck
Affects thaco and ac from time to time.
int check_path(const char *name, int prepend_dir)
This function checks if a file with the given path exists.
#define CFAPI_PLAYER_PROP_CLIENT
#define CFAPI_PARTY_PROP_PASSWORD
#define CFAPI_OBJECT_PROP_LAST_GRACE
static void cfapi_get_season_name(int *type,...)
Wrapper for get_season_name().
void *(* f_plug_property)(int *type,...)
Get various plugin properties.
static void cfapi_object_merge(int *type,...)
Wrapper for object_merge().
#define CFAPI_PLAYER_PROP_NEXT
#define CFAPI_OBJECT_PROP_DIRECTION
static void cfapi_object_clone(int *type,...)
Clone an object, either through object_create_clone() or object_copy().
#define CFAPI_OBJECT_PROP_SHORT_NAME
sstring name
Name of the animation sequence.
static void cfapi_object_learn_spell(int *type,...)
int object_can_merge(object *ob1, object *ob2)
Examines the 2 objects given to it, and returns true if they can be merged together,...
@ llevDebug
Only for debugging purposes.
#define CFAPI_OBJECT_PROP_MATERIAL_NAME
int16_t jaily
The coodinates in jailmap to which the player should be sent.
static void cfapi_map_trigger_connected(int *type,...)
Wrapper for trigger_connected().
static void cfapi_object_find_by_name(int *type,...)
static void cfapi_object_set_property(int *type,...)
Sets the property of an object.
#define plugins_dlopen(fname)
Load a shared library.
char * cost_string_from_value(uint64_t cost, int largest_coin)
Converts a price to number of coins.
#define CFAPI_OBJECT_PROP_WEIGHT_LIMIT
in that case they will be relative to whatever the PWD of the crossfire server process is You probably shouldn though Notes on Specific and settings file datadir Usually usr share crossfire Contains data that the server does not need to modify while such as the etc A default install will pack the and treasurelist definitions into a single or trs file and the graphics into a face(metadata) and .tar(bitmaps) file
const char * uniquedir
Directory for the unique items.
#define CFAPI_OBJECT_PROP_SPEED_LEFT
int quest_get_player_state(player *pl, sstring quest_code)
Get the quest state for a player.
static void cfapi_map_find_by_archetype_name(int *type,...)
Kinda wrapper for map_find_by_archetype() (but uses a string, not an archetype*).
int cftimer_create(int id, long delay, object *ob, int mode)
Creates a new timer.
void player_get_title(const player *pl, char *buf, size_t bufsize)
Returns the player's title.
static void cfapi_object_check_trigger(int *type,...)
Wrapper for check_trigger().
static void cfapi_object_clear(int *type,...)
Wrapper for object_clear().
object * identify(object *op)
Identifies an item.
const char * localdir
Read/write data files.