 |
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 rstr = va_arg(args,
sstring *);
1249 rreg = va_arg(args,
region **);
1255 rint = va_arg(args,
int *);
1273 va_start(args,
type);
1276 property = va_arg(args,
int);
1280 buf = va_arg(args,
const char *);
1303 va_start(args,
type);
1305 x = va_arg(args,
int);
1306 y = va_arg(args,
int);
1307 rint = va_arg(args,
int *);
1324 va_start(args,
type);
1327 x = va_arg(args,
int);
1328 y = va_arg(args,
int);
1338 va_start(args,
type);
1354 va_start(args,
type);
1356 string = va_arg(args,
const char *);
1357 color = va_arg(args,
int);
1377 va_start(args,
type);
1379 x = va_arg(args,
int);
1380 y = va_arg(args,
int);
1381 robj = va_arg(args,
object **);
1406 va_start(args,
type);
1408 msg = va_arg(args,
char *);
1410 x = va_arg(args,
int);
1411 y = va_arg(args,
int);
1412 robj = va_arg(args,
object **);
1432 va_start(args,
type);
1434 change = va_arg(args,
int);
1435 rint = va_arg(args,
int *);
1466 va_start(args,
type);
1467 kind = va_arg(args,
int);
1470 op = va_arg(args,
object *);
1471 direction = va_arg(args,
int);
1472 activator = va_arg(args,
object *);
1473 ret = va_arg(args,
int *);
1475 *ret =
move_ob(op, direction, activator);
1479 pl = va_arg(args,
player *);
1480 direction = va_arg(args,
int);
1481 ret = va_arg(args,
int *);
1487 op = va_arg(args,
object *);
1488 ret = va_arg(args,
int *);
1509 const char *keyname;
1513 va_start(args,
type);
1514 op = va_arg(args,
object *);
1515 keyname = va_arg(args,
const char *);
1516 value = va_arg(args,
const char **);
1531 const char *keyname;
1537 va_start(args,
type);
1538 op = va_arg(args,
object *);
1539 keyname = va_arg(args,
char *);
1540 value = va_arg(args,
char *);
1541 add_key = va_arg(args,
int);
1542 ret = va_arg(args,
int *);
1570 va_start(args,
type);
1572 op = va_arg(args,
object *);
1573 property = va_arg(args,
int);
1576 robject = va_arg(args,
object **);
1577 *robject = op->
above;
1582 robject = va_arg(args,
object **);
1583 *robject = op->
below;
1588 robject = va_arg(args,
object **);
1594 robject = va_arg(args,
object **);
1600 robject = va_arg(args,
object **);
1606 robject = va_arg(args,
object **);
1612 robject = va_arg(args,
object **);
1613 *robject = op->
head;
1618 robject = va_arg(args,
object **);
1630 rint = va_arg(args,
int *);
1636 rbuffer = va_arg(args,
char *);
1637 rbufsize = va_arg(args,
int);
1643 rsstring = va_arg(args,
sstring *);
1649 rsstring = va_arg(args,
sstring *);
1650 *rsstring = op->
title;
1655 rsstring = va_arg(args,
sstring *);
1656 *rsstring = op->
race;
1661 rsstring = va_arg(args,
sstring *);
1667 rsstring = va_arg(args,
sstring *);
1668 *rsstring = op->
skill;
1673 rsstring = va_arg(args,
sstring *);
1674 *rsstring = op->
msg;
1679 rsstring = va_arg(args,
sstring *);
1680 *rsstring = op->
lore;
1685 rint = va_arg(args,
int *);
1691 rint = va_arg(args,
int *);
1697 rfloat = va_arg(args,
float *);
1698 *rfloat = op->
speed;
1703 rfloat = va_arg(args,
float *);
1709 rint = va_arg(args,
int *);
1715 rint = va_arg(args,
int *);
1721 rint = va_arg(args,
int *);
1727 rint = va_arg(args,
int *);
1733 rint = va_arg(args,
int *);
1739 rint = va_arg(args,
int *);
1748 idx = va_arg(args,
int);
1749 resist = va_arg(args, int16_t *);
1750 *resist = op->
resist[idx];
1756 rint = va_arg(args,
int *);
1762 rint = va_arg(args,
int *);
1768 rint = va_arg(args,
int *);
1774 rint = va_arg(args,
int *);
1780 rint = va_arg(args,
int *);
1786 rsstring = va_arg(args,
sstring *);
1792 rint = va_arg(args,
int *);
1798 rlong = va_arg(args,
long *);
1804 rint = va_arg(args,
int *);
1810 rint = va_arg(args,
int *);
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 rint64 = va_arg(args, int64_t *);
1888 robject = va_arg(args,
object **);
1894 robject = va_arg(args,
object **);
1895 *robject = op->
enemy;
1900 robject = va_arg(args,
object **);
1906 rint = va_arg(args,
int *);
1912 robject = va_arg(args,
object **);
1918 rint = va_arg(args,
int *);
1924 rint = va_arg(args,
int *);
1930 rint = va_arg(args,
int *);
1936 robject = va_arg(args,
object **);
1942 rdouble = va_arg(args,
double *);
1960 rsstring = va_arg(args,
sstring *);
1966 rint = va_arg(args,
int *);
1972 rint = va_arg(args,
int *);
1978 rbuffer = va_arg(args,
char *);
1979 rbufsize = va_arg(args,
int);
1987 i = va_arg(args,
int);
1988 rbuffer = va_arg(args,
char *);
1989 rbufsize = va_arg(args,
int);
1996 rsstring = va_arg(args,
sstring *);
1997 *rsstring = op->
name;
2002 rint = va_arg(args,
int *);
2008 rint = va_arg(args,
int *);
2014 rint64 = va_arg(args, int64_t *);
2020 robject = va_arg(args,
object **);
2028 stype = va_arg(args,
int);
2030 unsigned char ptype;
2035 ptype = (
unsigned char)(va_arg(args,
int));
2036 robject = va_arg(args,
object **);
2041 ptype = (
unsigned char)(va_arg(args,
int));
2042 buf = va_arg(args,
char *);
2043 robject = va_arg(args,
object **);
2049 robject = va_arg(args,
object **);
2058 rint = va_arg(args,
int *);
2066 op2 = va_arg(args,
object *);
2067 rint = va_arg(args,
int *);
2076 op2 = va_arg(args,
object *);
2077 rint = va_arg(args,
int *);
2086 fl = va_arg(args,
int);
2087 rint = va_arg(args,
int *);
2094 rint = va_arg(args,
int *);
2100 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 rsstring = va_arg(args,
sstring *);
2202 rsstring = va_arg(args,
sstring *);
2208 rint = va_arg(args,
int *);
2214 rsstring = va_arg(args,
sstring *);
2215 if (op->
face != NULL) {
2225 rsstring = va_arg(args,
sstring *);
2236 rint = va_arg(args,
int *);
2242 rsstring = va_arg(args,
sstring *);
2248 robject = va_arg(args,
object **);
2260 robject = va_arg(args,
object **);
2270 rbuffer = va_arg(args,
char *);
2271 rbufsize = va_arg(args,
int);
2277 robject = va_arg(args,
object **);
2319 rfloat = va_arg(args,
float *);
2325 rbuffer = va_arg(args,
char *);
2326 rbufsize = va_arg(args,
int);
2332 rint = va_arg(args,
int *);
2338 rint = va_arg(args,
int *);
2344 rint = va_arg(args,
int *);
2367 if (strlen(msg) == 0) {
2395 va_start(args,
type);
2396 op = va_arg(args,
object *);
2397 property = va_arg(args,
int);
2400 if (op != NULL && (!op->
arch || (op != &op->
arch->
clone))) {
2403 sarg = va_arg(args,
char *);
2410 sarg = va_arg(args,
char *);
2417 sarg = va_arg(args,
char *);
2423 sarg = va_arg(args,
char *);
2429 sarg = va_arg(args,
char *);
2435 sarg = va_arg(args,
char *);
2441 sarg = va_arg(args,
char *);
2447 sarg = va_arg(args,
char *);
2453 farg = va_arg(args,
double);
2455 if (farg != op->
speed) {
2462 farg = va_arg(args,
double);
2468 iarg = va_arg(args,
int);
2472 if (op->
nrof > (uint32_t)iarg)
2474 else if (op->
nrof < (uint32_t)iarg) {
2479 if (op->
env != NULL) {
2505 iarg = va_arg(args,
int);
2511 iarg = va_arg(args,
int);
2517 int iargbis = va_arg(args,
int);
2520 iarg = va_arg(args,
int);
2521 op->
resist[iargbis] = iarg;
2526 iarg = va_arg(args,
int);
2532 iarg = va_arg(args,
int);
2538 iarg = va_arg(args,
int);
2544 iarg = va_arg(args,
int);
2550 iarg = va_arg(args,
int);
2559 iarg = va_arg(args,
int);
2565 larg = va_arg(args,
long);
2571 iarg = va_arg(args,
int);
2578 iarg = va_arg(args,
int);
2584 iarg = va_arg(args,
int);
2590 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);
2628 if (op->
weight != iarg) {
2633 if (op->
env != NULL) {
2659 iarg = va_arg(args,
int);
2665 iarg = va_arg(args,
int);
2672 if (tmp->
map != NULL) {
2681 s64arg = va_arg(args, int64_t);
2687 oparg = va_arg(args,
object *);
2693 iarg = va_arg(args,
int);
2699 oparg = va_arg(args,
object *);
2705 iarg = va_arg(args,
int);
2711 iarg = va_arg(args,
int);
2717 iarg = va_arg(args,
int);
2723 oparg = va_arg(args,
object *);
2729 darg = va_arg(args,
double);
2735 sarg = va_arg(args,
char *);
2742 iarg = va_arg(args,
int);
2748 iarg = va_arg(args,
int);
2757 iarg = va_arg(args,
int);
2763 s64arg = va_arg(args, int64_t);
2769 oparg = va_arg(args,
object *);
2782 iarg = va_arg(args,
int);
2783 iargbis = va_arg(args,
int);
2795 iarg = va_arg(args,
int);
2801 iarg = va_arg(args,
int);
2807 iarg = 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);
2898 sarg = va_arg(args,
char *);
2899 ret = va_arg(args,
int *);
2906 (*ret) =
face->number;
2914 sarg = va_arg(args,
char *);
2915 ret = va_arg(args,
int *);
2930 iarg = va_arg(args,
int);
2937 oparg = va_arg(args,
object *);
2957 sarg = va_arg(args,
char *);
2963 iarg = va_arg(args,
int);
2969 iarg = va_arg(args,
int);
2975 sarg = va_arg(args,
char *);
3039 va_start(args,
type);
3041 applier = va_arg(args,
object *);
3062 va_start(args,
type);
3064 applier = va_arg(args,
object *);
3065 applied = va_arg(args,
object *);
3066 aflags = va_arg(args,
int);
3067 ret = va_arg(args,
int *);
3082 object *op, **result;
3084 va_start(args,
type);
3086 op = va_arg(args,
object *);
3087 result = va_arg(args,
object **);
3107 va_start(args,
type);
3109 op = va_arg(args,
object *);
3110 owner = va_arg(args,
object *);
3111 desc = va_arg(args,
char *);
3112 size = va_arg(args,
int);
3117 strncpy(desc,
final, size);
3118 desc[size - 1] =
'\0';
3128 va_start(args,
type);
3130 op = va_arg(args,
object *);
3131 ds = va_arg(args,
int);
3146 va_start(args,
type);
3148 op = va_arg(args,
object *);
3149 level = va_arg(args,
int);
3150 result = va_arg(args,
int*);
3163 va_start(args,
type);
3165 op = va_arg(args,
object *);
3181 va_start(args,
type);
3183 op = va_arg(args,
object *);
3184 skillname = va_arg(args,
char *);
3198 va_start(args,
type);
3200 op = va_arg(args,
object *);
3201 chg = va_arg(args,
object *);
3213 va_start(args,
type);
3215 op = va_arg(args,
object *);
3234 va_start(args,
type);
3236 op = va_arg(args,
object *);
3239 LOG(
llevError,
"Plugin trying to free freed/non removed object %s\n", op->
name);
3263 va_start(args,
type);
3265 op = va_arg(args,
object *);
3266 kind = va_arg(args,
int);
3267 robj = va_arg(args,
object **);
3293 va_start(args,
type);
3294 ival = va_arg(args,
int);
3299 robj = va_arg(args,
object **);
3307 sval = va_arg(args,
const char *);
3308 robj = va_arg(args,
object **);
3337 va_start(args,
type);
3339 op = va_arg(args,
object *);
3341 LOG(
llevError,
"cfapi_object_insert: called with NULL object!\n");
3346 LOG(
llevError,
"cfapi_object_insert: called with FREED object!\n");
3351 LOG(
llevError,
"cfapi_object_insert: called with not removed object %s!\n", op->
name);
3354 itype = va_arg(args,
int);
3359 orig = va_arg(args,
object *);
3360 flag = va_arg(args,
int);
3361 x = va_arg(args,
int);
3362 y = va_arg(args,
int);
3363 robj = va_arg(args,
object **);
3365 LOG(
llevError,
"cfapi_object_insert (0): called with NULL map, object %s!\n", op->
name);
3375 orig = va_arg(args,
object *);
3376 flag = va_arg(args,
int);
3377 robj = va_arg(args,
object **);
3379 LOG(
llevError,
"cfapi_object_insert (1): called with NULL map, object %s!\n", op->
name);
3389 orig = va_arg(args,
object *);
3390 flag = va_arg(args,
int);
3391 x = va_arg(args,
int);
3392 y = va_arg(args,
int);
3393 robj = va_arg(args,
object **);
3395 LOG(
llevError,
"cfapi_object_insert (0): called with NULL map, object %s!\n", op->
name);
3411 orig = va_arg(args,
object *);
3412 robj = va_arg(args,
object **);
3414 LOG(
llevError,
"cfapi_object_insert (3): called with NULL orig, object %s!\n", op->
name);
3423 LOG(
llevError,
"cfapi_object_insert (1): called with itype %d which is not valid, object %s!\n", itype, op->
name);
3444 va_start(args,
type);
3446 op = va_arg(args,
object *);
3447 nr = va_arg(args,
int);
3448 buf = va_arg(args,
char *);
3449 size = va_arg(args,
int);
3450 split = va_arg(args,
object **);
3475 va_start(args,
type);
3477 op = va_arg(args,
object *);
3478 op2 = va_arg(args,
object *);
3479 merge = va_arg(args,
object **);
3497 va_start(args,
type);
3499 op = va_arg(args,
object *);
3500 op2 = va_arg(args,
object *);
3501 rint = va_arg(args,
int *);
3517 va_start(args,
type);
3519 op = va_arg(args,
object *);
3520 action = va_arg(args,
int);
3536 va_start(args,
type);
3538 op = va_arg(args,
object *);
3555 va_start(args,
type);
3557 op = va_arg(args,
object *);
3569 va_start(args,
type);
3570 op = va_arg(args,
object *);
3582 va_start(args,
type);
3583 op1 = va_arg(args,
object *);
3584 op2 = va_arg(args,
object *);
3585 rint = va_arg(args,
int *);
3597 va_start(args,
type);
3598 trap = va_arg(args,
object *);
3599 victim = va_arg(args,
object *);
3617 va_start(args,
type);
3618 op = va_arg(args,
object *);
3619 cause = va_arg(args,
object *);
3620 rint = va_arg(args,
int *);
3644 va_start(args,
type);
3646 cause = va_arg(args,
object *);
3647 state = va_arg(args,
int);
3663 va_start(args,
type);
3664 op = va_arg(args,
object *);
3665 rint = va_arg(args,
int *);
3686 va_start(args,
type);
3687 op = va_arg(args,
object *);
3688 caster = va_arg(args,
object *);
3689 dir = va_arg(args,
int);
3690 sp = va_arg(args,
object *);
3691 str = va_arg(args,
char *);
3692 rint = va_arg(args,
int *);
3702 *rint =
cast_spell(op, caster, dir, sp, str);
3711 va_start(args,
type);
3712 op = va_arg(args,
object *);
3713 sp = va_arg(args,
object *);
3714 prayer = va_arg(args,
int);
3726 va_start(args,
type);
3727 op = va_arg(args,
object *);
3728 sp = va_arg(args,
object *);
3746 va_start(args,
type);
3747 op = va_arg(args,
object *);
3748 spellname = va_arg(args,
char *);
3749 robj = va_arg(args,
object **);
3766 va_start(args,
type);
3767 op = va_arg(args,
object *);
3768 amount = va_arg(args, uint64_t);
3769 rint = va_arg(args,
int *);
3788 va_start(args,
type);
3789 tobuy = va_arg(args,
object *);
3790 op = va_arg(args,
object *);
3791 rint = va_arg(args,
int *);
3808 int x, y, randompos, ttype, flag;
3814 va_start(args,
type);
3815 op = va_arg(args,
object *);
3816 ttype = va_arg(args,
int);
3819 x = va_arg(args,
int);
3820 y = va_arg(args,
int);
3821 randompos = va_arg(args,
int);
3822 originator = va_arg(args,
object *);
3823 rint = va_arg(args,
int *);
3826 *rint =
transfer_ob(op, x, y, randompos, originator);
3833 originator = va_arg(args,
object *);
3834 flag = va_arg(args,
int);
3835 x = va_arg(args,
int);
3836 y = va_arg(args,
int);
3837 robj = va_arg(args,
object **);
3839 if (x < 0 || y < 0) {
3849 x = va_arg(args,
int);
3850 y = va_arg(args,
int);
3851 rint = va_arg(args,
int *);
3876 va_start(args,
type);
3877 op = va_arg(args,
object *);
3879 str = va_arg(args,
char *);
3880 robj = va_arg(args,
object **);
3883 if (*robj == NULL) {
3890 if (!strncmp(
name, str, strlen(str)))
3892 if (!strncmp(tmp->name, str, strlen(str)))
3895 if (tmp->slaying && !strcmp(tmp->slaying, str))
3910 va_start(args,
type);
3911 who = va_arg(args,
const object *);
3912 name = va_arg(args,
const char *);
3913 result = va_arg(args,
object **);
3926 va_start(args,
type);
3927 who = va_arg(args,
const object *);
3928 name = va_arg(args,
const char *);
3929 result = va_arg(args,
object **);
3946 va_start(args,
type);
3947 op = va_arg(args,
object *);
3948 author = va_arg(args,
object *);
3970 va_start(args,
type);
3971 op = va_arg(args,
object *);
3972 tmp = va_arg(args,
object *);
3973 rint = va_arg(args,
int *);
3987 va_start(args,
type);
3988 op = va_arg(args,
object *);
3989 msg = va_arg(args,
char *);
3990 rint = va_arg(args,
int *);
4013 va_start(args,
type);
4015 sval = va_arg(args,
char *);
4016 rpl = va_arg(args,
player **);
4031 va_start(args,
type);
4033 flags = va_arg(args,
int);
4034 pri = va_arg(args,
int);
4035 pl = va_arg(args,
object *);
4036 buf = va_arg(args,
const char *);
4055 va_start(args,
type);
4056 op = va_arg(args,
object *);
4057 rlong = va_arg(args, int64_t *);
4076 va_start(args,
type);
4077 ob = va_arg(args,
object *);
4078 exp = va_arg(args, int64_t);
4079 skill = va_arg(args,
const char *);
4080 flag = va_arg(args,
int);
4097 va_start(args,
type);
4098 pl = va_arg(args,
object *);
4099 rint = va_arg(args,
int *);
4115 const char *knowledge;
4117 va_start(args,
type);
4118 what = va_arg(args,
int);
4123 pl = va_arg(args,
object *);
4124 knowledge = va_arg(args,
const char *);
4125 rint = va_arg(args,
int *);
4129 if (pl->
contr == NULL) {
4130 LOG(
llevError,
"cfapi_player_knowledge: 'has' called for non player object %s", pl->
name);
4140 pl = va_arg(args,
object *);
4141 knowledge = va_arg(args,
const char *);
4143 if (pl->
contr != NULL)
4149 LOG(
llevError,
"cfapi_player_knowledge: invalid what %d", what);
4167 va_start(args,
type);
4168 who = va_arg(args,
object *);
4170 x = va_arg(args,
int);
4171 y = va_arg(args,
int);
4172 res = va_arg(args,
int *);
4184 va_start(args,
type);
4185 who = va_arg(args,
object *);
4186 what = va_arg(args,
object *);
4187 int *res = va_arg(args,
int *);
4203 va_start(args,
type);
4205 prop = va_arg(args,
int);
4209 rsstring = va_arg(args,
sstring *);
4210 *rsstring = arch->
name;
4222 *rarch = arch->
head;
4228 *rarch = arch->
more;
4233 robject = va_arg(args,
object **);
4234 *robject = &arch->
clone;
4259 va_start(args,
type);
4261 prop = va_arg(args,
int);
4264 rsstring = va_arg(args,
sstring *);
4276 rsstring = va_arg(args,
sstring *);
4283 obarg = va_arg(args,
object *);
4284 rplayer = va_arg(args,
player **);
4286 for (; *rplayer != NULL; (*rplayer) = (*rplayer)->
next)
4287 if ((*rplayer)->ob->contr->party == party) {
4313 va_start(args,
type);
4314 reg = va_arg(args,
region *);
4315 prop = va_arg(args,
int);
4318 rsstring = va_arg(args,
sstring *);
4319 *rsstring = reg->
name;
4324 rregion = va_arg(args,
region **);
4330 rregion = va_arg(args,
region **);
4336 rsstring = va_arg(args,
sstring *);
4342 rsstring = va_arg(args,
sstring *);
4343 *rsstring = reg->
msg;
4349 rint = va_arg(args,
int*);
4355 rsstring = va_arg(args,
sstring *);
4383 va_start(args,
type);
4384 ob = va_arg(args,
object *);
4385 robject = va_arg(args,
object **);
4408 va_start(args,
type);
4410 buf = va_arg(args,
const char *);
4411 ret = va_arg(args,
int *);
4432 va_start(args,
type);
4433 name = va_arg(args,
const char *);
4435 use_layout = va_arg(args,
char **);
4436 reset_group = va_arg(args,
sstring);
4452 va_start(args,
type);
4453 op = va_arg(args,
object *);
4454 activator = va_arg(args,
object *);
4455 third = va_arg(args,
object *);
4456 message = va_arg(args,
const char *);
4457 fix = va_arg(args,
int);
4458 ret = va_arg(args,
int *);
4473 va_start(args,
type);
4474 op = va_arg(args,
int);
4475 player = va_arg(args,
object *);
4478 if (
player->contr == NULL) {
4479 LOG(
llevError,
"cfapi_player_quest called with non player object %s!\n",
player->name);
4487 int state = va_arg(args,
int);
4493 int *ret = va_arg(args,
int *);
4499 int state = va_arg(args,
int);
4505 int *ret = va_arg(args,
int*);
4520 const char *
name = NULL, *extra = NULL;
4524 uint8_t register_type, command_type;
4527 va_start(args,
type);
4528 register_type = va_arg(args,
int);
4529 name = va_arg(args,
const char *);
4530 if (register_type == 1) {
4533 extra = va_arg(args,
const char *);
4536 command_type = (uint8_t)va_arg(args,
int);
4540 time = va_arg(args,
double);
4544 if (register_type == 1) {
4557 va_start(args,
type);
4574 struct dirent *currentfile;
4577 char buf[
sizeof(LIBDIR) + 9 +
sizeof(dirent::d_name)];
4579 snprintf(
buf,
sizeof(
buf),
"%s/plugins/", LIBDIR);
4583 if (plugdir == NULL)
4586 while ((currentfile =
readdir(plugdir)) != NULL) {
4587 l = strlen(currentfile->d_name);
4588 if (l > strlen(PLUGIN_SUFFIX)) {
4591 if (strcmp(currentfile->d_name+l-strlen(PLUGIN_SUFFIX), PLUGIN_SUFFIX) != 0)
4595 if (strcmp(*disable,
"All") == 0) {
4596 LOG(
llevInfo,
"plugins: disabling (all) %s\n", currentfile->d_name);
4600 if (strncmp(*disable, currentfile->d_name, strlen(*disable)) == 0 && strlen(currentfile->d_name) == strlen(PLUGIN_SUFFIX) + strlen(*disable)) {
4601 LOG(
llevInfo,
"plugins: disabling %s\n", currentfile->d_name);
4607 snprintf(
buf,
sizeof(
buf),
"%s/plugins/%s", LIBDIR, currentfile->d_name);
4608 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 UP_OBJ_FACE
Only thing that changed was the face.
#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 FREE_OBJ_NO_DESTROY_CALLBACK
Do not run the destroy callback.
#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.
#define MOVE_ALL
Mask of all movement types.
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.
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 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
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.
std::vector< char * > disabled_plugins
List of disabled plugins, 'All' means all.
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.
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 FLAG_WAS_WIZ
Player was once a wiz.
#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.
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 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.
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.
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)
This will add 'str' to the hash table.
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.
#define FLAG_FREED
Object is in the list of free objects.
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 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 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.
#define FLAG_NO_DROP
Object can't be dropped.
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
#define P_OUT_OF_MAP
This space is outside the map.
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.
#define UP_OBJ_INSERT
Object was inserted.
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 FLAG_REMOVED
Object is not in any map or invenory.
#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 P_NEED_UPDATE
This space is out of date.
#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
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.
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
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.
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_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.