Go to the documentation of this file.
45 #include "libloaderapi.h"
49 #define NR_OF_HOOKS (sizeof(plug_hooks)/sizeof(*plug_hooks))
270 if (!strcmp(
id,
plugin->id)) {
280 static char buf[256];
284 err = GetLastError();
285 if (FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, 0,
buf,
sizeof (
buf), NULL) == 0)
286 snprintf(
buf,
sizeof (
buf),
"error %lu", err);
287 p = strchr(
buf,
'\0');
288 while (p >
buf && (p[-1] ==
'\r' || p[-1] ==
'\n'))
305 if (
op->env != NULL) {
309 if (
pl->ob->container ==
op->env)
322 tmp->contr->socket->update_look = 1;
336 request_type = va_arg(
args,
int);
337 if (request_type == 0) {
340 fid = va_arg(
args,
int);
392 if (svn_rev == NULL) {
393 LOG(
llevError,
"Unable to find SvnRevPlugin in %s\n", libfile);
404 if (initfunc == NULL) {
410 if (propfunc == NULL) {
416 if (eventfunc == NULL) {
422 if (postfunc == NULL) {
428 if (closefunc == NULL) {
440 propfunc(&i,
"Identification", cp->
id,
sizeof(cp->
id));
459 for (
int eventcode = 0; eventcode <
NR_EVENTS; eventcode++) {
481 "List of loaded plugins:\n-----------------------");
486 cp->id, cp->fullname);
499 char *buffer, *
final;
500 int length, largest_coin;
505 largest_coin = va_arg(
args,
int);
506 buffer = va_arg(
args,
char*);
507 length = va_arg(
args,
int);
517 strncpy(buffer,
final, length - 1);
518 buffer[length - 1] =
'\0';
535 num = va_arg(
args,
int *);
556 face = va_arg(
args,
const char *);
558 num = va_arg(
args,
int *);
562 (*num) = f ? f->
number : 0;
577 txt = va_arg(
args,
const char *);
578 ret = va_arg(
args,
char **);
593 eventcode = va_arg(
args,
int);
594 pname = va_arg(
args,
char *);
613 eventcode = va_arg(
args,
int);
614 pname = va_arg(
args,
char *);
629 int property = va_arg(
args,
int);
630 std::vector<object *> *
list = va_arg(
args, std::vector<object *> *);
657 int property = va_arg(
args,
int);
658 std::vector<mapstruct *> *
list = va_arg(
args, std::vector<mapstruct *> *);
673 int property = va_arg(
args,
int);
674 std::vector<archetype *> *
list = va_arg(
args, std::vector<archetype *> *);
687 int property = va_arg(
args,
int);
688 std::vector<region *> *
list = va_arg(
args, std::vector<region *> *);
701 int property = va_arg(
args,
int);
702 std::vector<partylist *> *
list = va_arg(
args, std::vector<partylist *> *);
708 list->push_back(party);
728 str = va_arg(
args,
const char *);
766 str = va_arg(
args,
const char *);
788 prepend_dir = va_arg(
args,
int);
789 ret = va_arg(
args,
int *);
811 regexp = va_arg(
args,
char *);
812 rv = va_arg(
args,
const char **);
827 dirtype = va_arg(
args,
int);
828 str = va_arg(
args,
const char **);
885 #define string_get_int(name) \
889 va_start(args, type); \
890 index = va_arg(args, int); \
891 str = va_arg(args, const char **); \
893 *str = name(index); \
894 *type = CFAPI_STRING; \
964 ob = va_arg(
args,
object *);
965 delay = va_arg(
args,
long);
967 timer = va_arg(
args,
int *);
994 id = va_arg(
args,
int);
995 err = va_arg(
args,
int *);
1042 ctype = va_arg(
args,
int);
1046 x = va_arg(
args,
int);
1047 y = va_arg(
args,
int);
1054 x = va_arg(
args,
int);
1061 nx = va_arg(
args,
int);
1062 ny = va_arg(
args,
int);
1088 string = va_arg(
args,
char *);
1108 ctype = va_arg(
args,
int);
1109 str = va_arg(
args,
const char *);
1111 size = va_arg(
args,
int);
1149 property = va_arg(
args,
int);
1154 x = va_arg(
args,
int);
1155 y = va_arg(
args,
int);
1156 nx = va_arg(
args, int16_t *);
1157 ny = va_arg(
args, int16_t *);
1158 rint = va_arg(
args,
int *);
1164 rint = va_arg(
args,
int *);
1177 *rstr =
map->tmpname;
1188 rint = va_arg(
args,
int *);
1189 *rint =
map->reset_time;
1194 rint = va_arg(
args,
int *);
1195 *rint =
map->reset_timeout;
1200 rint = va_arg(
args,
int *);
1201 *rint =
map->players;
1206 rint = va_arg(
args,
int *);
1207 *rint =
map->darkness;
1212 rint = va_arg(
args,
int *);
1218 rint = va_arg(
args,
int *);
1219 *rint =
map->height;
1224 rint = va_arg(
args,
int *);
1225 *rint =
map->enter_x;
1230 rint = va_arg(
args,
int *);
1231 *rint =
map->enter_y;
1254 rint = va_arg(
args,
int *);
1255 *rint =
map->unique;
1275 property = va_arg(
args,
int);
1279 buf = va_arg(
args,
const char *);
1304 x = va_arg(
args,
int);
1305 y = va_arg(
args,
int);
1306 rint = va_arg(
args,
int *);
1326 x = va_arg(
args,
int);
1327 y = va_arg(
args,
int);
1355 string = va_arg(
args,
const char *);
1378 x = va_arg(
args,
int);
1379 y = va_arg(
args,
int);
1380 robj = va_arg(
args,
object **);
1409 x = va_arg(
args,
int);
1410 y = va_arg(
args,
int);
1411 robj = va_arg(
args,
object **);
1433 change = va_arg(
args,
int);
1434 rint = va_arg(
args,
int *);
1466 kind = va_arg(
args,
int);
1469 op = va_arg(
args,
object *);
1472 ret = va_arg(
args,
int *);
1480 ret = va_arg(
args,
int *);
1486 op = va_arg(
args,
object *);
1487 ret = va_arg(
args,
int *);
1508 const char *keyname;
1513 op = va_arg(
args,
object *);
1514 keyname = va_arg(
args,
const char *);
1530 const char *keyname;
1537 op = va_arg(
args,
object *);
1538 keyname = va_arg(
args,
char *);
1540 add_key = va_arg(
args,
int);
1541 ret = va_arg(
args,
int *);
1571 op = va_arg(
args,
object *);
1572 property = va_arg(
args,
int);
1575 robject = va_arg(
args,
object **);
1576 *robject =
op->above;
1581 robject = va_arg(
args,
object **);
1582 *robject =
op->below;
1587 robject = va_arg(
args,
object **);
1588 *robject =
op->active_next;
1593 robject = va_arg(
args,
object **);
1594 *robject =
op->active_prev;
1599 robject = va_arg(
args,
object **);
1605 robject = va_arg(
args,
object **);
1611 robject = va_arg(
args,
object **);
1612 *robject =
op->head;
1617 robject = va_arg(
args,
object **);
1618 *robject =
op->container;
1629 rint = va_arg(
args,
int *);
1635 rbuffer = va_arg(
args,
char *);
1636 rbufsize = va_arg(
args,
int);
1643 *rsstring =
op->name_pl;
1649 *rsstring =
op->title;
1655 *rsstring =
op->race;
1661 *rsstring =
op->slaying;
1667 *rsstring =
op->skill;
1673 *rsstring =
op->msg;
1679 *rsstring =
op->lore;
1684 rint = va_arg(
args,
int *);
1690 rint = va_arg(
args,
int *);
1696 rfloat = va_arg(
args,
float *);
1697 *rfloat =
op->speed;
1702 rfloat = va_arg(
args,
float *);
1703 *rfloat =
op->speed_left;
1708 rint = va_arg(
args,
int *);
1714 rint = va_arg(
args,
int *);
1715 *rint =
op->direction;
1720 rint = va_arg(
args,
int *);
1726 rint = va_arg(
args,
int *);
1732 rint = va_arg(
args,
int *);
1733 *rint =
op->subtype;
1738 rint = va_arg(
args,
int *);
1739 *rint =
op->client_type;
1747 idx = va_arg(
args,
int);
1748 resist = va_arg(
args, int16_t *);
1749 *resist =
op->resist[idx];
1755 rint = va_arg(
args,
int *);
1756 *rint =
op->attacktype;
1761 rint = va_arg(
args,
int *);
1762 *rint =
op->path_attuned;
1767 rint = va_arg(
args,
int *);
1768 *rint =
op->path_repelled;
1773 rint = va_arg(
args,
int *);
1774 *rint =
op->path_denied;
1779 rint = va_arg(
args,
int *);
1780 *rint =
op->material;
1786 *rsstring =
op->materialname;
1791 rint = va_arg(
args,
int *);
1797 rlong = va_arg(
args,
long *);
1803 rint = va_arg(
args,
int *);
1809 rint = va_arg(
args,
int *);
1810 *rint =
op->last_heal;
1815 rint = va_arg(
args,
int *);
1816 *rint =
op->last_sp;
1821 rint = va_arg(
args,
int *);
1822 *rint =
op->last_grace;
1827 rint = va_arg(
args,
int *);
1828 *rint =
op->last_eat;
1833 rint = va_arg(
args,
int *);
1834 *rint =
op->invisible;
1839 rint = va_arg(
args,
int *);
1840 *rint =
op->pick_up;
1845 rint = va_arg(
args,
int *);
1846 *rint =
op->item_power;
1851 rint = va_arg(
args,
int *);
1852 *rint =
op->gen_sp_armour;
1857 rint = va_arg(
args,
int *);
1863 rint = va_arg(
args,
int *);
1864 *rint =
op->weight_limit;
1869 rint = va_arg(
args,
int *);
1870 *rint =
op->carrying;
1875 rint = va_arg(
args,
int *);
1876 *rint =
op->glow_radius;
1881 rint64 = va_arg(
args, int64_t *);
1882 *rint64 =
op->total_exp;
1887 robject = va_arg(
args,
object **);
1888 *robject =
op->current_weapon;
1893 robject = va_arg(
args,
object **);
1894 *robject =
op->enemy;
1899 robject = va_arg(
args,
object **);
1900 *robject =
op->attacked_by;
1905 rint = va_arg(
args,
int *);
1906 *rint =
op->run_away;
1911 robject = va_arg(
args,
object **);
1912 *robject =
op->chosen_skill;
1917 rint = va_arg(
args,
int *);
1923 rint = va_arg(
args,
int *);
1924 *rint =
op->move_status;
1929 rint = va_arg(
args,
int *);
1930 *rint =
op->attack_movement;
1935 robject = va_arg(
args,
object **);
1936 *robject =
op->spellitem;
1941 rdouble = va_arg(
args,
double *);
1942 *rdouble =
op->expmul;
1954 *rarch =
op->other_arch;
1965 rint = va_arg(
args,
int *);
1966 *rint =
op->anim_speed;
1971 rint = va_arg(
args,
int *);
1977 rbuffer = va_arg(
args,
char *);
1978 rbufsize = va_arg(
args,
int);
1986 i = va_arg(
args,
int);
1987 rbuffer = va_arg(
args,
char *);
1988 rbufsize = va_arg(
args,
int);
1996 *rsstring =
op->name;
2001 rint = va_arg(
args,
int *);
2007 rint = va_arg(
args,
int *);
2008 *rint =
op->stats.luck;
2013 rint64 = va_arg(
args, int64_t *);
2014 *rint64 =
op->stats.exp;
2019 robject = va_arg(
args,
object **);
2027 stype = va_arg(
args,
int);
2029 unsigned char ptype;
2034 ptype = (
unsigned char)(va_arg(
args,
int));
2035 robject = va_arg(
args,
object **);
2040 ptype = (
unsigned char)(va_arg(
args,
int));
2042 robject = va_arg(
args,
object **);
2048 robject = va_arg(
args,
object **);
2057 rint = va_arg(
args,
int *);
2065 op2 = va_arg(
args,
object *);
2066 rint = va_arg(
args,
int *);
2075 op2 = va_arg(
args,
object *);
2076 rint = va_arg(
args,
int *);
2085 fl = va_arg(
args,
int);
2086 rint = va_arg(
args,
int *);
2093 rint = va_arg(
args,
int *);
2094 *rint =
op->stats.Str;
2099 rint = va_arg(
args,
int *);
2100 *rint =
op->stats.Dex;
2105 rint = va_arg(
args,
int *);
2106 *rint =
op->stats.Con;
2111 rint = va_arg(
args,
int *);
2112 *rint =
op->stats.Wis;
2117 rint = va_arg(
args,
int *);
2118 *rint =
op->stats.Int;
2123 rint = va_arg(
args,
int *);
2124 *rint =
op->stats.Pow;
2129 rint = va_arg(
args,
int *);
2130 *rint =
op->stats.Cha;
2135 rint = va_arg(
args,
int *);
2136 *rint =
op->stats.wc;
2141 rint = va_arg(
args,
int *);
2142 *rint =
op->stats.ac;
2147 rint = va_arg(
args,
int *);
2148 *rint =
op->stats.hp;
2153 rint = va_arg(
args,
int *);
2154 *rint =
op->stats.sp;
2159 rint = va_arg(
args,
int *);
2160 *rint =
op->stats.grace;
2165 rint = va_arg(
args,
int *);
2166 *rint =
op->stats.food;
2171 rint = va_arg(
args,
int *);
2172 *rint =
op->stats.maxhp;
2177 rint = va_arg(
args,
int *);
2178 *rint =
op->stats.maxsp;
2183 rint = va_arg(
args,
int *);
2184 *rint =
op->stats.maxgrace;
2189 rint = va_arg(
args,
int *);
2190 *rint =
op->stats.dam;
2202 *rsstring =
op->arch->name;
2207 rint = va_arg(
args,
int *);
2208 *rint =
op->invisible;
2214 if (
op->face != NULL) {
2215 (*rsstring) =
op->face->name;
2225 if (
op->animation != NULL) {
2226 (*rsstring) =
op->animation->name;
2236 *rsstring =
op->contr->socket->host;
2241 robject = va_arg(
args,
object **);
2248 *rparty = (
op->contr ?
op->contr->party : NULL);
2253 robject = va_arg(
args,
object **);
2255 *robject =
op->contr->next ?
op->contr->next->ob : NULL;
2263 rbuffer = va_arg(
args,
char *);
2264 rbufsize = va_arg(
args,
int);
2270 robject = va_arg(
args,
object **);
2271 *robject =
op->contr->transport;
2277 *rmove =
op->move_type;
2283 *rmove =
op->move_block;
2289 *rmove =
op->move_allow;
2295 *rmove =
op->move_on;
2301 *rmove =
op->move_off;
2307 *rmove =
op->move_type;
2312 rfloat = va_arg(
args,
float *);
2313 *rfloat =
op->move_slow_penalty;
2318 rbuffer = va_arg(
args,
char *);
2319 rbufsize = va_arg(
args,
int);
2320 strlcpy(rbuffer,
op->contr->savebed_map, rbufsize);
2325 rint = va_arg(
args,
int *);
2326 *rint =
op->contr->bed_x;
2331 rint = va_arg(
args,
int *);
2332 *rint =
op->contr->bed_y;
2337 rint = va_arg(
args,
int *);
2338 *rint =
op->duration;
2360 if (strlen(
msg) == 0) {
2389 op = va_arg(
args,
object *);
2390 property = va_arg(
args,
int);
2393 if (
op != NULL && (!
op->arch || (
op != &
op->arch->clone))) {
2396 sarg = va_arg(
args,
char *);
2403 sarg = va_arg(
args,
char *);
2410 sarg = va_arg(
args,
char *);
2416 sarg = va_arg(
args,
char *);
2422 sarg = va_arg(
args,
char *);
2428 sarg = va_arg(
args,
char *);
2434 sarg = va_arg(
args,
char *);
2440 sarg = va_arg(
args,
char *);
2446 farg = va_arg(
args,
double);
2448 if (farg !=
op->speed) {
2455 farg = va_arg(
args,
double);
2457 op->speed_left = farg;
2461 iarg = va_arg(
args,
int);
2465 if (
op->nrof > (uint32_t)iarg)
2467 else if (
op->nrof < (uint32_t)iarg) {
2472 if (
op->env != NULL) {
2476 if (
pl->ob->container ==
op->env)
2491 tmp->contr->socket->update_look = 1;
2498 iarg = va_arg(
args,
int);
2500 op->direction = iarg;
2504 iarg = va_arg(
args,
int);
2510 int iargbis = va_arg(
args,
int);
2513 iarg = va_arg(
args,
int);
2514 op->resist[iargbis] = iarg;
2519 iarg = va_arg(
args,
int);
2521 op->attacktype = iarg;
2525 iarg = va_arg(
args,
int);
2527 op->path_attuned = iarg;
2531 iarg = va_arg(
args,
int);
2533 op->path_repelled = iarg;
2537 iarg = va_arg(
args,
int);
2539 op->path_denied = iarg;
2543 iarg = va_arg(
args,
int);
2545 op->material = iarg;
2552 iarg = va_arg(
args,
int);
2558 larg = va_arg(
args,
long);
2564 iarg = va_arg(
args,
int);
2571 iarg = va_arg(
args,
int);
2573 op->last_heal = iarg;
2577 iarg = va_arg(
args,
int);
2583 iarg = va_arg(
args,
int);
2585 op->last_grace = iarg;
2589 iarg = va_arg(
args,
int);
2591 op->last_eat = iarg;
2595 iarg = va_arg(
args,
int);
2597 op->invisible = iarg;
2601 iarg = va_arg(
args,
int);
2607 iarg = va_arg(
args,
int);
2609 op->item_power = iarg;
2613 iarg = va_arg(
args,
int);
2615 op->gen_sp_armour = iarg;
2619 iarg = va_arg(
args,
int);
2621 if (
op->weight != iarg) {
2626 if (
op->env != NULL) {
2630 if (
pl->ob->container ==
op->env)
2652 iarg = va_arg(
args,
int);
2654 op->weight_limit = iarg;
2658 iarg = va_arg(
args,
int);
2660 if (
op->glow_radius != iarg) {
2663 op->glow_radius = iarg;
2665 if (
tmp->map != NULL) {
2674 s64arg = va_arg(
args, int64_t);
2676 op->total_exp = s64arg;
2680 oparg = va_arg(
args,
object *);
2686 iarg = va_arg(
args,
int);
2688 op->run_away = iarg;
2692 oparg = va_arg(
args,
object *);
2694 op->chosen_skill = oparg;
2698 iarg = va_arg(
args,
int);
2704 iarg = va_arg(
args,
int);
2706 op->move_status = iarg;
2710 iarg = va_arg(
args,
int);
2712 op->attack_movement = iarg;
2716 oparg = va_arg(
args,
object *);
2718 op->spellitem = oparg;
2722 darg = va_arg(
args,
double);
2728 sarg = va_arg(
args,
char *);
2735 iarg = va_arg(
args,
int);
2737 op->anim_speed = iarg;
2741 iarg = va_arg(
args,
int);
2750 iarg = va_arg(
args,
int);
2752 op->stats.luck = iarg;
2756 s64arg = va_arg(
args, int64_t);
2758 op->stats.exp = s64arg;
2762 oparg = va_arg(
args,
object *);
2775 iarg = va_arg(
args,
int);
2776 iargbis = va_arg(
args,
int);
2787 iarg = va_arg(
args,
int);
2789 op->stats.Str = iarg;
2793 iarg = va_arg(
args,
int);
2795 op->stats.Dex = iarg;
2799 iarg = va_arg(
args,
int);
2801 op->stats.Con = iarg;
2805 iarg = va_arg(
args,
int);
2807 op->stats.Wis = iarg;
2811 iarg = va_arg(
args,
int);
2813 op->stats.Int = iarg;
2817 iarg = va_arg(
args,
int);
2819 op->stats.Pow = iarg;
2823 iarg = va_arg(
args,
int);
2825 op->stats.Cha = iarg;
2829 iarg = va_arg(
args,
int);
2831 op->stats.wc = iarg;
2835 iarg = va_arg(
args,
int);
2837 op->stats.ac = iarg;
2841 iarg = va_arg(
args,
int);
2843 op->stats.hp = iarg;
2847 iarg = va_arg(
args,
int);
2849 op->stats.sp = iarg;
2853 iarg = va_arg(
args,
int);
2855 op->stats.grace = iarg;
2859 iarg = va_arg(
args,
int);
2861 op->stats.food = iarg;
2865 iarg = va_arg(
args,
int);
2867 op->stats.maxhp = iarg;
2871 iarg = va_arg(
args,
int);
2873 op->stats.maxsp = iarg;
2877 iarg = va_arg(
args,
int);
2879 op->stats.maxgrace = iarg;
2883 iarg = va_arg(
args,
int);
2885 op->stats.dam = iarg;
2890 sarg = va_arg(
args,
char *);
2891 ret = va_arg(
args,
int *);
2906 sarg = va_arg(
args,
char *);
2907 ret = va_arg(
args,
int *);
2922 iarg = va_arg(
args,
int);
2924 op->duration = iarg;
2929 oparg = va_arg(
args,
object *);
2931 op->contr->mark = oparg;
2933 op->contr->mark_count = oparg->
count;
2935 op->contr->mark_count = 0;
2949 sarg = va_arg(
args,
char *);
2955 iarg = va_arg(
args,
int);
2957 op->contr->bed_x = iarg;
2961 iarg = va_arg(
args,
int);
2963 op->contr->bed_y = iarg;
2967 sarg = va_arg(
args,
char *);
3033 applier = va_arg(
args,
object *);
3056 applier = va_arg(
args,
object *);
3057 applied = va_arg(
args,
object *);
3058 aflags = va_arg(
args,
int);
3059 ret = va_arg(
args,
int *);
3078 op = va_arg(
args,
object *);
3101 op = va_arg(
args,
object *);
3102 owner = va_arg(
args,
object *);
3103 desc = va_arg(
args,
char *);
3104 size = va_arg(
args,
int);
3109 strncpy(desc,
final, size);
3110 desc[size - 1] =
'\0';
3122 op = va_arg(
args,
object *);
3123 ds = va_arg(
args,
int);
3140 op = va_arg(
args,
object *);
3157 op = va_arg(
args,
object *);
3175 op = va_arg(
args,
object *);
3176 skillname = va_arg(
args,
char *);
3192 op = va_arg(
args,
object *);
3193 chg = va_arg(
args,
object *);
3207 op = va_arg(
args,
object *);
3210 LOG(
llevError,
"Plugin trying to remove removed object %s\n",
op->name);
3228 op = va_arg(
args,
object *);
3231 LOG(
llevError,
"Plugin trying to free freed/non removed object %s\n",
op->name);
3257 op = va_arg(
args,
object *);
3258 kind = va_arg(
args,
int);
3259 robj = va_arg(
args,
object **);
3286 ival = va_arg(
args,
int);
3291 robj = va_arg(
args,
object **);
3299 sval = va_arg(
args,
const char *);
3300 robj = va_arg(
args,
object **);
3331 op = va_arg(
args,
object *);
3333 LOG(
llevError,
"cfapi_object_insert: called with NULL object!\n");
3338 LOG(
llevError,
"cfapi_object_insert: called with FREED object!\n");
3343 LOG(
llevError,
"cfapi_object_insert: called with not removed object %s!\n",
op->name);
3346 itype = va_arg(
args,
int);
3351 orig = va_arg(
args,
object *);
3352 flag = va_arg(
args,
int);
3353 x = va_arg(
args,
int);
3354 y = va_arg(
args,
int);
3355 robj = va_arg(
args,
object **);
3357 LOG(
llevError,
"cfapi_object_insert (0): called with NULL map, object %s!\n",
op->name);
3367 orig = va_arg(
args,
object *);
3368 flag = va_arg(
args,
int);
3369 robj = va_arg(
args,
object **);
3371 LOG(
llevError,
"cfapi_object_insert (1): called with NULL map, object %s!\n",
op->name);
3381 orig = va_arg(
args,
object *);
3382 flag = va_arg(
args,
int);
3383 x = va_arg(
args,
int);
3384 y = va_arg(
args,
int);
3385 robj = va_arg(
args,
object **);
3387 LOG(
llevError,
"cfapi_object_insert (0): called with NULL map, object %s!\n",
op->name);
3403 orig = va_arg(
args,
object *);
3404 robj = va_arg(
args,
object **);
3406 LOG(
llevError,
"cfapi_object_insert (3): called with NULL orig, object %s!\n",
op->name);
3415 LOG(
llevError,
"cfapi_object_insert (1): called with itype %d which is not valid, object %s!\n", itype,
op->name);
3438 op = va_arg(
args,
object *);
3439 nr = va_arg(
args,
int);
3441 size = va_arg(
args,
int);
3469 op = va_arg(
args,
object *);
3470 op2 = va_arg(
args,
object *);
3471 merge = va_arg(
args,
object **);
3491 op = va_arg(
args,
object *);
3492 op2 = va_arg(
args,
object *);
3493 rint = va_arg(
args,
int *);
3511 op = va_arg(
args,
object *);
3530 op = va_arg(
args,
object *);
3549 op = va_arg(
args,
object *);
3562 op = va_arg(
args,
object *);
3575 op1 = va_arg(
args,
object *);
3576 op2 = va_arg(
args,
object *);
3577 rint = va_arg(
args,
int *);
3590 trap = va_arg(
args,
object *);
3610 op = va_arg(
args,
object *);
3611 cause = va_arg(
args,
object *);
3612 rint = va_arg(
args,
int *);
3638 cause = va_arg(
args,
object *);
3656 op = va_arg(
args,
object *);
3657 rint = va_arg(
args,
int *);
3679 op = va_arg(
args,
object *);
3680 caster = va_arg(
args,
object *);
3681 dir = va_arg(
args,
int);
3682 sp = va_arg(
args,
object *);
3684 rint = va_arg(
args,
int *);
3704 op = va_arg(
args,
object *);
3705 sp = va_arg(
args,
object *);
3719 op = va_arg(
args,
object *);
3720 sp = va_arg(
args,
object *);
3739 op = va_arg(
args,
object *);
3740 spellname = va_arg(
args,
char *);
3741 robj = va_arg(
args,
object **);
3759 op = va_arg(
args,
object *);
3760 amount = va_arg(
args, uint64_t);
3761 rint = va_arg(
args,
int *);
3781 tobuy = va_arg(
args,
object *);
3782 op = va_arg(
args,
object *);
3783 rint = va_arg(
args,
int *);
3800 int x,
y, randompos, ttype, flag;
3807 op = va_arg(
args,
object *);
3808 ttype = va_arg(
args,
int);
3811 x = va_arg(
args,
int);
3812 y = va_arg(
args,
int);
3813 randompos = va_arg(
args,
int);
3814 originator = va_arg(
args,
object *);
3815 rint = va_arg(
args,
int *);
3825 originator = va_arg(
args,
object *);
3826 flag = va_arg(
args,
int);
3827 x = va_arg(
args,
int);
3828 y = va_arg(
args,
int);
3829 robj = va_arg(
args,
object **);
3831 if (
x < 0 ||
y < 0) {
3841 x = va_arg(
args,
int);
3842 y = va_arg(
args,
int);
3843 rint = va_arg(
args,
int *);
3869 op = va_arg(
args,
object *);
3872 robj = va_arg(
args,
object **);
3875 if (*robj == NULL) {
3884 if (!strncmp(
tmp->name,
str, strlen(
str)))
3887 if (
tmp->slaying && !strcmp(
tmp->slaying,
str))
3903 who = va_arg(
args,
const object *);
3919 who = va_arg(
args,
const object *);
3939 op = va_arg(
args,
object *);
3949 author->contr->count = 0;
3950 author->contr->socket->update_look = 1;
3963 op = va_arg(
args,
object *);
3965 rint = va_arg(
args,
int *);
3980 op = va_arg(
args,
object *);
3982 rint = va_arg(
args,
int *);
4007 sval = va_arg(
args,
char *);
4026 pri = va_arg(
args,
int);
4027 pl = va_arg(
args,
object *);
4028 buf = va_arg(
args,
const char *);
4048 op = va_arg(
args,
object *);
4049 rlong = va_arg(
args, int64_t *);
4069 ob = va_arg(
args,
object *);
4070 exp = va_arg(
args, int64_t);
4072 flag = va_arg(
args,
int);
4090 pl = va_arg(
args,
object *);
4091 rint = va_arg(
args,
int *);
4110 what = va_arg(
args,
int);
4115 pl = va_arg(
args,
object *);
4117 rint = va_arg(
args,
int *);
4121 if (
pl->contr == NULL) {
4122 LOG(
llevError,
"cfapi_player_knowledge: 'has' called for non player object %s",
pl->name);
4132 pl = va_arg(
args,
object *);
4135 if (
pl->contr != NULL)
4141 LOG(
llevError,
"cfapi_player_knowledge: invalid what %d", what);
4162 x = va_arg(
args,
int);
4163 y = va_arg(
args,
int);
4178 what = va_arg(
args,
object *);
4196 prop = va_arg(
args,
int);
4201 *rsstring =
arch->name;
4213 *rarch =
arch->head;
4219 *rarch =
arch->more;
4224 robject = va_arg(
args,
object **);
4225 *robject = &
arch->clone;
4252 prop = va_arg(
args,
int);
4274 obarg = va_arg(
args,
object *);
4277 for (; *rplayer != NULL; (*rplayer) = (*rplayer)->
next)
4278 if ((*rplayer)->ob->contr->party == party) {
4306 prop = va_arg(
args,
int);
4310 *rsstring = reg->
name;
4334 *rsstring = reg->
msg;
4340 rint = va_arg(
args,
int*);
4375 ob = va_arg(
args,
object *);
4376 robject = va_arg(
args,
object **);
4401 buf = va_arg(
args,
const char *);
4402 ret = va_arg(
args,
int *);
4426 use_layout = va_arg(
args,
char **);
4444 op = va_arg(
args,
object *);
4446 third = va_arg(
args,
object *);
4448 fix = va_arg(
args,
int);
4449 ret = va_arg(
args,
int *);
4469 if (
player->contr == NULL) {
4470 LOG(
llevError,
"cfapi_player_quest called with non player object %s!\n",
player->name);
4484 int *ret = va_arg(
args,
int *);
4496 int *ret = va_arg(
args,
int*);
4511 const char *
name = NULL, *extra = NULL;
4515 uint8_t register_type, command_type;
4519 register_type = va_arg(
args,
int);
4521 if (register_type == 1) {
4524 extra = va_arg(
args,
const char *);
4527 command_type = (uint8_t)va_arg(
args,
int);
4535 if (register_type == 1) {
4565 struct dirent *currentfile;
4570 snprintf(
buf,
sizeof(
buf),
"%s/plugins/", LIBDIR);
4574 if (plugdir == NULL)
4577 while ((currentfile =
readdir(plugdir)) != NULL) {
4578 l = strlen(currentfile->d_name);
4579 if (
l > strlen(PLUGIN_SUFFIX)) {
4582 if (strcmp(currentfile->d_name+
l-strlen(PLUGIN_SUFFIX), PLUGIN_SUFFIX) != 0)
4586 if (strcmp(*disable,
"All") == 0) {
4587 LOG(
llevInfo,
"plugins: disabling (all) %s\n", currentfile->d_name);
4591 if (strncmp(*disable, currentfile->d_name, strlen(*disable)) == 0 && strlen(currentfile->d_name) == strlen(PLUGIN_SUFFIX) + strlen(*disable)) {
4592 LOG(
llevInfo,
"plugins: disabling %s\n", currentfile->d_name);
4598 snprintf(
buf,
sizeof(
buf),
"%s/plugins/%s", LIBDIR, currentfile->d_name);
4599 LOG(
llevInfo,
"plugins: loading %s\n", currentfile->d_name);
static crossfire_plugin * plugins_find_plugin(const char *id)
#define GET_MAP_OB(M, X, Y)
static void cfapi_object_transfer(int *type,...)
static void cfapi_object_clean_object(int *type,...)
static void cfapi_object_forget_spell(int *type,...)
static void cfapi_map_change_light(int *type,...)
#define CFAPI_OBJECT_PROP_TITLE
static void cfapi_object_split(int *type,...)
object * object_get_owner(object *op)
int cftimer_find_free_id(void)
#define FREE_OBJ_NO_DESTROY_CALLBACK
#define CFAPI_OBJECT_PROP_X
static void cfapi_object_move(int *type,...)
static void cfapi_timer_destroy(int *type,...)
object * object_get_env_recursive(object *op)
#define CFAPI_PARTY_VECTOR
int(* f_plug_postinit)(void)
void remove_friendly_object(object *op)
#define CFAPI_OBJECT_VECTOR
#define CFAPI_OBJECT_PROP_CHA
#define CFAPI_MAP_PROP_TMPNAME
#define CFAPI_OBJECT_PROP_ARCH_NAME
#define CFAPI_OBJECT_PROP_ATTACK_MOVEMENT
static void cfapi_object_distance(int *type,...)
static void cfapi_object_delete(int *type,...)
static void cfapi_player_quest(int *type,...)
static void cfapi_timer_create(int *type,...)
void command_say(object *op, const char *params)
#define CFAPI_PARTY_PROP_NAME
static void cfapi_archetype_get_property(int *type,...)
void LOG(LogLevel logLevel, const char *format,...)
mapstruct * get_empty_map(int sizex, int sizey)
void monster_npc_say(object *npc, const char *cp)
#define CFAPI_MAP_PROP_RESET_TIME
void drain_specific_stat(object *op, int deplete_stats)
#define CFAPI_MAP_PROP_RESET_TIMEOUT
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
#define CFAPI_PLAYER_PROP_BED_X
static void cfapi_object_drop(int *type,...)
mapstruct * ready_map_name(const char *name, int flags)
#define QUERY_FLAG(xyz, p)
static void cfapi_system_get_map_vector(int *type,...)
#define CFAPI_REGION_PROP_NEXT
arch
DIALOGCHECK MINARGS 1 MAXARGS 1
archetype * get_next_archetype(archetype *current)
#define CFAPI_MAP_PROP_NEXT
void do_learn_spell(object *op, object *spell, int special_prayer)
mapstruct * has_been_loaded(const char *name)
object * map_find_by_archetype(mapstruct *m, int x, int y, const archetype *at)
object * object_merge(object *op, object *top)
object * get_next_friend(object *current)
#define CFAPI_OBJECT_PROP_SLAYING
static void cfapi_get_weekday_name(int *type,...)
void update_position(mapstruct *m, int x, int y)
#define CFAPI_OBJECT_PROP_DEX
#define CFAPI_OBJECT_PROP_FRIENDLY
#define CFAPI_OBJECT_PROP_ARCHETYPE
static void cfapi_map_out_of_map(int *type,...)
int cast_spell(object *op, object *caster, int dir, object *spell_ob, char *stringarg)
void events_unregister_object_handler(const char *id)
#define CFAPI_OBJECT_PROP_BASE_NAME
void object_set_enemy(object *op, object *enemy)
#define CFAPI_OBJECT_PROP_LAST_EAT
#define CFAPI_OBJECT_PROP_MOVE_ON
void spring_trap(object *trap, object *victim)
static void cfapi_object_get_property(int *type,...)
#define CFAPI_OBJECT_PROP_STR
static void cfapi_object_create(int *type,...)
static void cfapi_object_drain(int *type,...)
object * give_skill_by_name(object *op, const char *skill_name)
int set_random_map_variable(RMParms *rp, const char *buf)
void quest_set_player_state(player *pl, sstring quest_code, int state)
#define CFAPI_OBJECT_PROP_GOD
object * arch_present_in_ob(const archetype *at, const object *op)
void object_set_owner(object *op, object *owner)
#define CFAPI_OBJECT_PROP_NEXT_ACTIVE_OB
void player_set_own_title(struct player *pl, const char *title)
#define CFAPI_PLAYER_PROP_MARKED_ITEM
#define SET_ANIMATION(ob, newanim)
static void cfapi_object_find_archetype_inside(int *type,...)
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
knowledge
DIALOGCHECK MINARGS 1 MAXARGS 1
#define CFAPI_OBJECT_PROP_MAXSP
#define CFAPI_OBJECT_PROP_RAW_NAME
#define CFAPI_OBJECT_PROP_SPELL_ITEM
int move_player(object *op, int dir)
void object_reset(object *op)
#define CFAPI_ARCH_PROP_NEXT
#define CFAPI_OBJECT_PROP_Y
static const flag_definition flags[]
#define CFAPI_OBJECT_PROP_ENEMY
void object_copy(const object *src_ob, object *dest_ob)
void clean_object(object *op)
#define CFAPI_OBJECT_PROP_MOVE_TYPE
linux kernel c mode(defun linux-c-mode() "C mode with adjusted defaults for use with the Linux kernel."(interactive)(c-mode)(c-set-style "K&R")(setq c-basic-offset 8))
void fix_object(object *op)
void get_tod(timeofday_t *tod)
#define CFAPI_OBJECT_PROP_FACE
static void cfapi_object_say(int *type,...)
#define CFAPI_REGION_PROP_PARENT
#define CFAPI_OBJECT_PROP_ENVIRONMENT
uint8_t ignore_plugin_compatibility
#define COMMAND_TYPE_NORMAL
#define CFAPI_OBJECT_PROP_ATTACKED_BY
mapstruct * generate_random_map(const char *OutFileName, RMParms *RP, char **use_layout, sstring reset_group)
#define FOR_ABOVE_PREPARE(op_, it_)
#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
int(* f_plug_init)(const char *iversion, f_plug_api gethooksptr)
int apply_manual(object *op, object *tmp, int aflag)
const char * object_get_value(const object *op, const char *const key)
void apply_by_living_below(object *pl)
#define CFAPI_OBJECT_PROP_CURRENT_WEAPON
static void cfapi_friendlylist_get_next(int *type,...)
AssetsManager * getManager()
static void cfapi_object_identify(int *type,...)
static void cfapi_map_set_map_property(int *type,...)
object * object_insert_in_ob(object *op, object *where)
static void cfapi_object_user_event(int *type,...)
#define CFAPI_MAP_PROP_ENTER_X
static void cfapi_object_update(int *type,...)
#define CFAPI_OBJECT_PROP_INVISIBLE
static void cfapi_system_directory(int *type,...)
#define plugins_dlerror()
Plugin animator file specs[Config] name
static void cfapi_object_change_abil(int *type,...)
const char * get_season_name(const int index)
#define CFAPI_OBJECT_PROP_SKILL
event_registration events_register_global_handler(int eventcode, f_plug_event hook)
#define CFAPI_OBJECT_PROP_CLIENT_TYPE
void object_clear(object *op)
void party_join(object *op, partylist *party)
static void cfapi_object_get_key(int *type,...)
#define MSG_TYPE_COMMAND_DEBUG
int plugins_remove_plugin(const char *id)
#define CFAPI_OBJECT_PROP_PATH_DENIED
#define CFAPI_MAP_PROP_REGION
#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)
static void cfapi_register_command(int *type,...)
void transmute_materialname(object *op, const object *change)
char * stringbuffer_finish(StringBuffer *sb)
partylist * party_get_first(void)
void object_free_drop_inventory(object *ob)
void object_update(object *op, int action)
object * object_find_by_name(const object *who, const char *name)
static void cfapi_player_find(int *type,...)
DIR * opendir(const char *)
#define CFAPI_OBJECT_PROP_LORE
#define CFAPI_ARCH_PROP_HEAD
#define CFAPI_OBJECT_PROP_PICK_UP
#define CFAPI_OBJECT_PROP_MOVE_OFF
#define CFAPI_PLAYER_PROP_PARTY
void command_unregister(command_registration command)
static void cfapi_player_can_pay(int *type,...)
const char * determine_god(object *op)
int is_friendly(const object *op)
#define CFAPI_OBJECT_PROP_CHOSEN_SKILL
#define CFAPI_OBJECT_PROP_HP
short freearr_y[SIZEOFFREE]
#define CFAPI_OBJECT_PROP_MAXHP
void drop(object *op, object *tmp)
static void cfapi_map_message(int *type,...)
const char * get_weekday(const int index)
static void cfapi_map_create_path(int *type,...)
#define CFAPI_OBJECT_PROP_OB_BELOW
static void cfapi_object_apply_below(int *type,...)
#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)
int cftimer_destroy(int id)
static void cfapi_set_random_map_variable(int *type,...)
object * object_present_in_ob_by_name(int type, const char *str, const object *op)
#define CFAPI_PLAYER_PROP_BED_Y
void query_name(const object *op, char *buf, size_t size)
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()
void events_unregister_global_handler(int eventcode, event_registration id)
#define CFAPI_MAP_PROP_MESSAGE
static void cfapi_system_re_cmp(int *type,...)
#define CFAPI_OBJECT_PROP_RACE
void(* f_plug_api)(int *type,...)
static void cfapi_system_get_object_vector(int *type,...)
static void cfapi_party_get_property(int *type,...)
sstring add_string(const char *str)
static void cfapi_object_check_spell(int *type,...)
#define CFAPI_OBJECT_PROP_MOVE_BLOCK
#define CFAPI_OBJECT_PROP_FACING
static void copy_message(object *op, const char *msg)
static void cfapi_system_find_face(int *type,...)
#define CFAPI_OBJECT_PROP_WEIGHT
static void cfapi_system_get_archetype_vector(int *type,...)
static void cfapi_object_reset(int *type,...)
#define CFAPI_OBJECT_PROP_RESIST
#define CFAPI_PLAYER_PROP_IP
#define CFAPI_OBJECT_PROP_DAM
int change_map_light(mapstruct *m, int change)
const char * get_periodofday(const int index)
struct dirent * readdir(DIR *)
void query_short_name(const object *op, char *buf, size_t size)
void void ext_info_map(int color, const mapstruct *map, uint8_t type, uint8_t subtype, const char *str1)
static void cfapi_map_has_been_loaded(int *type,...)
int out_of_map(mapstruct *m, int x, int y)
sstring find_string(const char *str)
f_plug_postinit closefunc
static void cfapi_object_remove(int *type,...)
void object_update_speed(object *op)
static void cfapi_system_strdup_local(int *type,...)
#define FREE_AND_COPY(sv, nv)
#define CFAPI_OBJECT_PROP_PATH_ATTUNED
int events_execute_object_user(object *op, object *activator, object *third, const char *message, int fix)
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
#define CFAPI_OBJECT_PROP_EXP
#define SET_MAP_FLAGS(M, X, Y, C)
#define CFAPI_OBJECT_PROP_SPEED
#define CFAPI_OBJECT_PROP_TYPE
int quest_was_completed(player *pl, sstring quest_code)
#define CFAPI_OBJECT_PROP_NROF
object * object_create_arch(archetype *at)
#define CFAPI_PLAYER_PROP_TITLE
#define CFAPI_MAP_PROP_PATH
static void cfapi_object_transmute(int *type,...)
void object_free(object *ob, int flags)
#define CFAPI_OBJECT_PROP_CUSTOM_NAME
static void cfapi_region_get_property(int *type,...)
static void cfapi_unregister_command(int *type,...)
#define CFAPI_OBJECT_PROP_PICKABLE
Archetypes * archetypes()
#define CFAPI_REGION_VECTOR
void change_exp(object *op, int64_t exp, const char *skill_name, int flag)
static void cfapi_object_teleport(int *type,...)
#define CFAPI_PLAYER_QUEST_START
#define CFAPI_REGION_PROP_NAME
static void cfapi_object_spring_trap(int *type,...)
#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)
#define CFAPI_REGION_PROP_JAIL_X
static void cfapi_get_time(int *type,...)
static void cfapi_object_pay_item(int *type,...)
mapstruct * get_map_from_coord(mapstruct *m, int16_t *x, int16_t *y)
const Face * get_face_by_id(uint16_t id)
event_registration global_registration[NR_EVENTS]
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)
#define CFAPI_OBJECT_PROP_OWNER
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)
object * object_create_clone(object *asrc)
#define CFAPI_PARTY_PROP_NEXT
static void cfapi_get_month_name(int *type,...)
static void cfapi_system_check_path(int *type,...)
size_t strlcpy(char *dst, const char *src, size_t size)
#define CFAPI_MAP_PROP_NAME
void object_set_cheat(object *op)
object * object_new(void)
void create_overlay_pathname(const char *name, char *buf, size_t size)
StringBuffer * describe_item(const object *op, const object *owner, int use_media_tags, StringBuffer *buf)
#define COMMAND_TYPE_WIZARD
#define CFAPI_OBJECT_PROP_WIS
object * object_present_in_ob(uint8_t type, const object *op)
#define CFAPI_OBJECT_PROP_POW
void free_string(sstring str)
int transfer_ob(object *op, int x, int y, int randomly, object *originator)
static void cfapi_map_get_map(int *type,...)
#define CFAPI_REGION_PROP_MESSAGE
Animations * try_find_animation(const char *name)
partylist * party_get_next(const partylist *party)
std::vector< char * > disabled_plugins
#define CFAPI_OBJECT_PROP_CONTAINER
int change_abil(object *op, object *tmp)
static void send_changed_object(object *op)
#define CFAPI_OBJECT_PROP_INVENTORY
#define CFAPI_OBJECT_PROP_MAP
#define CFAPI_MAP_PROP_FLAGS
static void cfapi_system_find_string(int *type,...)
static void cfapi_system_remove_string(int *type,...)
#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)
#define PERM_EXP(exptotal)
static void cfapi_map_delete_map(int *type,...)
void plugins_display_list(object *op)
#define CFAPI_PLAYER_PROP_TRANSPORT
static void cfapi_map_get_map_property(int *type,...)
#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)
static void cfapi_system_get_region_vector(int *type,...)
static void cfapi_object_describe(int *type,...)
static void cfapi_object_give_skill(int *type,...)
static void cfapi_generate_random_map(int *type,...)
#define CFAPI_OBJECT_PROP_ANIMATION
void each(std::function< void(T *)> op)
object * object_find_by_arch_name(const object *who, const char *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)
#define CFAPI_SYSTEM_FRIENDLY_LIST
void cleanupPlugins(void)
int object_can_pick(const object *who, const object *item)
void add_friendly_object(object *op)
#define CFAPI_PLAYER_QUEST_SET_STATE
#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)
int is_magical(const object *op)
#define CFAPI_OBJECT_PROP_PREV_ACTIVE_OB
#define CFAPI_OBJECT_PROP_HEAD
char * create_pathname(const char *name, char *buf, size_t size)
object * check_spell_known(object *op, const char *name)
static void cfapi_object_change_exp(int *type,...)
int(* f_plug_event)(int *type,...)
const typedef char * sstring
int pay_for_item(object *op, object *pl, uint64_t reduction)
#define CFAPI_PLAYER_PROP_BED_MAP
object * object_split(object *orig_ob, uint32_t nr, char *err, size_t size)
#define CFAPI_OBJECT_PROP_WC
#define plugins_dlsym(lib, name)
#define CFAPI_OBJECT_PROP_GLOW_RADIUS
int object_find_free_spot(const object *ob, mapstruct *m, int x, int y, int start, int stop)
uint64_t query_money(const object *op)
static void cfapi_object_find_by_arch_name(int *type,...)
void object_set_msg(object *op, const char *msg)
void esrv_update_item(int flags, object *pl, object *op)
#define CFAPI_OBJECT_PROP_PATH_REPELLED
#define CFAPI_OBJECT_PROP_CON
#define CFAPI_ARCHETYPE_VECTOR
static const hook_entry plug_hooks[]
int on_same_map(const object *op1, const object *op2)
#define CLEAR_FLAG(xyz, p)
#define CFAPI_OBJECT_PROP_GP
#define CFAPI_OBJECT_PROP_MAGICAL
#define CFAPI_OBJECT_PROP_LAST_SP
static void cfapi_cost_string_from_value(int *type,...)
int player_arrest(object *who)
player * find_player_partial_name(const char *plname)
#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,...)
#define CFAPI_OBJECT_PROP_OTHER_ARCH
the faster the spell may be cast there are several other common only the caster may be affected by the spell The most common spell range is that of touch This denotes that the caster much touch the recipient of the spell in order to release the spell or wall For cone it usually denotes that the range depends on some such as the caster s Wisdom level If this is the it will be stated in the long spell description or the standard duration for the spell expires Only one protection or change player attribute spell may be in effect on a player at any one time If another such spell is cast upon a player
static void cfapi_get_periodofday_name(int *type,...)
#define CFAPI_OBJECT_PROP_OB_ABOVE
int knowledge_player_knows(const player *pl, const char *knowledge)
int object_distance(const object *ob1, const object *ob2)
#define CFAPI_MAP_PROP_ENTER_Y
#define string_get_int(name)
void quest_start(player *pl, sstring quest_code, int state)
#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)
region * get_region_by_map(mapstruct *m)
#define CFAPI_ARCH_PROP_MORE
static void cfapi_system_add_string(int *type,...)
void(* command_function_extra)(object *op, const char *params, const char *extra)
command_registration command_register(const char *name, uint8_t type, command_function func, float time)
#define CFAPI_SYSTEM_PARTIES
static void cfapi_log(int *type,...)
void object_remove(object *op)
archetype * try_find_archetype(const char *name)
#define CFAPI_OBJECT_PROP_MOVE_SLOW
#define CFAPI_OBJECT_PROP_MERGEABLE
signed long object_sum_weight(object *op)
const Face * try_find_face(const char *name, const Face *error)
void do_forget_spell(object *op, const char *spell)
uint64_t command_registration
static void cfapi_object_set_key(int *type,...)
int remove_depletion(object *op, int level)
static void cfapi_object_pay_amount(int *type,...)
const char * get_month_name(const int index)
#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)
static void cfapi_system_find_animation(int *type,...)
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)
command_registration command_register_extra(const char *name, const char *extra, uint8_t type, command_function_extra func, float time)
int calculate_difficulty(mapstruct *m)
static std::vector< std::string > split(const std::string &field, const std::string &by)
static void cfapi_object_apply(int *type,...)
#define CFAPI_OBJECT_PROP_VALUE
void query_base_name(const object *op, int plural, char *buf, size_t size)
#define CFAPI_OBJECT_PROP_MESSAGE
static void cfapi_object_perm_exp(int *type,...)
#define CFAPI_OBJECT_PROP_MOVE_SLOW_PENALTY
int object_set_value(object *op, const char *key, const char *value, int add_key)
#define CFAPI_OBJECT_PROP_MAXGP
#define CFAPI_OBJECT_PROP_COUNT
#define CFAPI_OBJECT_PROP_SUBTYPE
static void cfapi_player_knowledge(int *type,...)
short freearr_x[SIZEOFFREE]
#define CFAPI_PLAYER_QUEST_WAS_COMPLETED
void(* command_function)(object *op, const char *params)
#define plugins_dlclose(lib)
pluglist shows those as well as a short text describing each the list will simply appear empty The keyword for the Python plugin is Python plugout< keyword > Unloads a given plugin
static void cfapi_map_get_object_at(int *type,...)
int plugins_init_plugin(const char *libfile)
static void cfapi_object_cast(int *type,...)
int pay_for_amount(uint64_t to_pay, object *pl)
void pick_up(object *op, object *alt)
object * object_get_player_container(object *op)
const char * re_cmp(const char *, const char *)
#define CFAPI_OBJECT_PROP_FP
static void cfapi_object_query_money(int *type,...)
#define CUSTOM_NAME_FIELD
object * find_marked_object(object *op)
void free_dialog_information(object *op)
#define FOR_INV_PREPARE(op_, it_)
int check_path(const char *name, int prepend_dir)
#define CFAPI_PARTY_PROP_PASSWORD
#define CFAPI_OBJECT_PROP_LAST_GRACE
static void cfapi_get_season_name(int *type,...)
void *(* f_plug_property)(int *type,...)
static void cfapi_object_merge(int *type,...)
#define CFAPI_PLAYER_PROP_NEXT
#define CFAPI_OBJECT_PROP_DIRECTION
static void cfapi_object_clone(int *type,...)
#define CFAPI_OBJECT_PROP_SHORT_NAME
static void cfapi_object_learn_spell(int *type,...)
int object_can_merge(object *ob1, object *ob2)
#define CFAPI_OBJECT_PROP_MATERIAL_NAME
static void cfapi_map_trigger_connected(int *type,...)
static void cfapi_object_find_by_name(int *type,...)
static void cfapi_object_set_property(int *type,...)
#define plugins_dlopen(fname)
char * cost_string_from_value(uint64_t cost, int largest_coin)
#define CFAPI_OBJECT_PROP_WEIGHT_LIMIT
#define CFAPI_OBJECT_PROP_SPEED_LEFT
int quest_get_player_state(player *pl, sstring quest_code)
static void cfapi_map_find_by_archetype_name(int *type,...)
int cftimer_create(int id, long delay, object *ob, int mode)
void player_get_title(const player *pl, char *buf, size_t bufsize)
static void cfapi_object_check_trigger(int *type,...)
static void cfapi_object_clear(int *type,...)
object * identify(object *op)