server-1.12/include/plugin.h

343 lines
16 KiB
C

/*****************************************************************************/
/* Crossfire plugin support - (C) 2001 by Yann Chachkoff. */
/* This code is placed under the GPL. */
/*****************************************************************************/
/**
* @file
* Definitions for the plugin system.
* @todo link to plugin stuff when the documentation exists in doxygen form :) remove commented things line 329+.
*/
/*****************************************************************************/
/* Headers needed. */
/*****************************************************************************/
#ifndef PLUGIN_H
#define PLUGIN_H
/*****************************************************************************/
/* This one does not exist under Win32. */
/*****************************************************************************/
#ifndef WIN32
#include <dlfcn.h>
#endif
#undef MODULEAPI
#ifdef WIN32
#ifdef PYTHON_PLUGIN_EXPORTS
#define MODULEAPI __declspec(dllexport)
#else
#define MODULEAPI __declspec(dllimport)
#endif
#else
#define MODULEAPI
#endif
#include <global.h>
#include <object.h>
#include <logger.h>
#ifdef HAVE_TIME_H
#include <time.h>
#endif
#include <../random_maps/random_map.h>
#include <../random_maps/rproto.h>
/*******************************************************************************/
/* This one does not exist under Win32. */
/*******************************************************************************/
#ifndef WIN32
#include <dirent.h>
#endif
/*******************************************************************************/
/* Event ID codes. I sorted them to present local events first, but it is */
/* just a 'cosmetic' thing. */
/*******************************************************************************/
/*******************************************************************************/
/* Local events. Those are always linked to a specific object. */
/*******************************************************************************/
#define EVENT_NONE 0 /**< No event. This exists only to reserve the "0". */
#define EVENT_APPLY 1 /**< Object applied-unapplied. */
#define EVENT_ATTACK 2 /**< Monster attacked or Scripted Weapon used. */
#define EVENT_DEATH 3 /**< Player or monster dead. */
#define EVENT_DROP 4 /**< Object dropped on the floor. */
#define EVENT_PICKUP 5 /**< Object picked up. */
#define EVENT_SAY 6 /**< Someone speaks. */
#define EVENT_STOP 7 /**< Thrown object stopped. */
#define EVENT_TIME 8 /**< Triggered each time the object can react/move. */
#define EVENT_THROW 9 /**< Object is thrown. */
#define EVENT_TRIGGER 10 /**< Button pushed, lever pulled, etc. */
#define EVENT_CLOSE 11 /**< Container closed. */
#define EVENT_TIMER 12 /**< Timer connected triggered it. */
#define EVENT_DESTROY 13 /**< Object destroyed (includes map reset/swapout) */
#define EVENT_USER 31 /**< User-defined event. */
/*******************************************************************************/
/* Global events. Those are never linked to a specific object. */
/*******************************************************************************/
#define EVENT_BORN 14 /**< A new character has been created. */
#define EVENT_CLOCK 15 /**< Global time event. */
#define EVENT_CRASH 16 /**< Triggered when the server crashes. Not recursive */
#define EVENT_PLAYER_DEATH 17 /**< Global Death event */
#define EVENT_GKILL 18 /**< Triggered when anything got killed by anyone. */
#define EVENT_LOGIN 19 /**< Player login. */
#define EVENT_LOGOUT 20 /**< Player logout. */
#define EVENT_MAPENTER 21 /**< A player entered a map. */
#define EVENT_MAPLEAVE 22 /**< A player left a map. */
#define EVENT_MAPRESET 23 /**< A map is resetting. */
#define EVENT_REMOVE 24 /**< A Player character has been removed. */
#define EVENT_SHOUT 25 /**< A player 'shout' something. */
#define EVENT_TELL 26 /**< A player 'tell' something. */
#define EVENT_MUZZLE 27 /**< A player was Muzzled (no_shout set). */
#define EVENT_KICK 28 /**< A player was Kicked by a DM */
#define EVENT_MAPUNLOAD 29 /**< A map is freed (includes swapping out) */
#define EVENT_MAPLOAD 30 /**< A map is loaded */
#define NR_EVENTS 32
#include <stdarg.h>
#define CFAPI_NONE 0
#define CFAPI_INT 1
#define CFAPI_LONG 2
#define CFAPI_CHAR 3
#define CFAPI_STRING 4 /* String with a length that must be given too. */
#define CFAPI_POBJECT 5
#define CFAPI_PMAP 6
#define CFAPI_FLOAT 7
#define CFAPI_DOUBLE 8
#define CFAPI_PARCH 9
#define CFAPI_FUNC 10
#define CFAPI_PPLAYER 11
#define CFAPI_PPARTY 12
#define CFAPI_PREGION 13
#define CFAPI_INT16 14
#define CFAPI_TIME 15
#define CFAPI_SINT64 16
#define CFAPI_SSTRING 17 /* Shared string that shouldn't be changed, or const char* */
#define CFAPI_MOVETYPE 18 /* MoveType */
/** General API function. */
typedef void *(*f_plug_api)(int *type, ...);
/** Function called after the plugin was initialized. */
typedef int (*f_plug_postinit)(void);
/** First function called in a plugin. */
typedef int (*f_plug_init)(const char *iversion, f_plug_api gethooksptr);
#ifndef WIN32
#define LIBPTRTYPE void *
#else
/** Library handle. */
#define LIBPTRTYPE HMODULE
#endif
/** One loaded plugin. */
typedef struct _crossfire_plugin {
f_plug_api eventfunc; /**< Event Handler function */
f_plug_api propfunc; /**< Plugin getProperty function */
f_plug_postinit closefunc; /**< Plugin Termination function */
LIBPTRTYPE libptr; /**< Pointer to the plugin library */
char id[MAX_BUF]; /**< Plugin identification string */
char fullname[MAX_BUF]; /**< Plugin full name */
f_plug_api gevent[NR_EVENTS]; /**< Global events registered */
struct _crossfire_plugin *next; /**< Next plugin in list */
struct _crossfire_plugin *prev; /**< Previous plugin in list */
} crossfire_plugin;
extern int plugin_number;
extern crossfire_plugin *plugins_list;
#ifdef WIN32
#define plugins_dlopen(fname) LoadLibrary(fname)
#define plugins_dlclose(lib) FreeLibrary(lib)
#define plugins_dlsym(lib, name) GetProcAddress(lib, name)
#else /*WIN32 */
#define plugins_dlopen(fname) dlopen(fname, RTLD_NOW|RTLD_GLOBAL) /**< Load a shared library. */
#define plugins_dlclose(lib) dlclose(lib) /**< Unload a shared library. */
#define plugins_dlsym(lib, name) dlsym(lib, name) /**< Get a function from a shared library. */
#define plugins_dlerror() dlerror() /**< Library error. */
#endif /* WIN32 */
/* OBJECT-RELATED HOOKS */
#define CFAPI_OBJECT_PROP_OB_ABOVE 1
#define CFAPI_OBJECT_PROP_OB_BELOW 2
#define CFAPI_OBJECT_PROP_NEXT_ACTIVE_OB 3
#define CFAPI_OBJECT_PROP_PREV_ACTIVE_OB 4
#define CFAPI_OBJECT_PROP_INVENTORY 5
#define CFAPI_OBJECT_PROP_ENVIRONMENT 6
#define CFAPI_OBJECT_PROP_HEAD 7
#define CFAPI_OBJECT_PROP_CONTAINER 8
#define CFAPI_OBJECT_PROP_MAP 9
#define CFAPI_OBJECT_PROP_COUNT 10
#define CFAPI_OBJECT_PROP_NAME 12
#define CFAPI_OBJECT_PROP_NAME_PLURAL 13
#define CFAPI_OBJECT_PROP_TITLE 14
#define CFAPI_OBJECT_PROP_RACE 15
#define CFAPI_OBJECT_PROP_SLAYING 16
#define CFAPI_OBJECT_PROP_SKILL 17
#define CFAPI_OBJECT_PROP_MESSAGE 18
#define CFAPI_OBJECT_PROP_LORE 19
#define CFAPI_OBJECT_PROP_X 20
#define CFAPI_OBJECT_PROP_Y 21
#define CFAPI_OBJECT_PROP_SPEED 22
#define CFAPI_OBJECT_PROP_SPEED_LEFT 23
#define CFAPI_OBJECT_PROP_NROF 24
#define CFAPI_OBJECT_PROP_DIRECTION 25
#define CFAPI_OBJECT_PROP_FACING 26
#define CFAPI_OBJECT_PROP_TYPE 27
#define CFAPI_OBJECT_PROP_SUBTYPE 28
#define CFAPI_OBJECT_PROP_CLIENT_TYPE 29
#define CFAPI_OBJECT_PROP_RESIST 30
#define CFAPI_OBJECT_PROP_ATTACK_TYPE 31
#define CFAPI_OBJECT_PROP_PATH_ATTUNED 32
#define CFAPI_OBJECT_PROP_PATH_REPELLED 33
#define CFAPI_OBJECT_PROP_PATH_DENIED 34
#define CFAPI_OBJECT_PROP_MATERIAL 35
#define CFAPI_OBJECT_PROP_MATERIAL_NAME 36
#define CFAPI_OBJECT_PROP_MAGIC 37
#define CFAPI_OBJECT_PROP_VALUE 38
#define CFAPI_OBJECT_PROP_LEVEL 39
#define CFAPI_OBJECT_PROP_LAST_HEAL 40
#define CFAPI_OBJECT_PROP_LAST_SP 41
#define CFAPI_OBJECT_PROP_LAST_GRACE 42
#define CFAPI_OBJECT_PROP_LAST_EAT 43
#define CFAPI_OBJECT_PROP_INVISIBLE_TIME 44
#define CFAPI_OBJECT_PROP_PICK_UP 45
#define CFAPI_OBJECT_PROP_ITEM_POWER 46
#define CFAPI_OBJECT_PROP_GEN_SP_ARMOUR 47
#define CFAPI_OBJECT_PROP_WEIGHT 48
#define CFAPI_OBJECT_PROP_WEIGHT_LIMIT 49
#define CFAPI_OBJECT_PROP_CARRYING 50
#define CFAPI_OBJECT_PROP_GLOW_RADIUS 51
#define CFAPI_OBJECT_PROP_PERM_EXP 52
#define CFAPI_OBJECT_PROP_CURRENT_WEAPON 53
#define CFAPI_OBJECT_PROP_ENEMY 54
#define CFAPI_OBJECT_PROP_ATTACKED_BY 55
#define CFAPI_OBJECT_PROP_RUN_AWAY 56
#define CFAPI_OBJECT_PROP_CHOSEN_SKILL 57
#define CFAPI_OBJECT_PROP_HIDDEN 58
#define CFAPI_OBJECT_PROP_MOVE_STATUS 59
#define CFAPI_OBJECT_PROP_ATTACK_MOVEMENT 60
#define CFAPI_OBJECT_PROP_SPELL_ITEM 61
#define CFAPI_OBJECT_PROP_EXP_MULTIPLIER 62
#define CFAPI_OBJECT_PROP_ARCHETYPE 63
#define CFAPI_OBJECT_PROP_OTHER_ARCH 64
#define CFAPI_OBJECT_PROP_CUSTOM_NAME 65
#define CFAPI_OBJECT_PROP_ANIM_SPEED 66
#define CFAPI_OBJECT_PROP_FRIENDLY 67
#define CFAPI_OBJECT_PROP_SHORT_NAME 68
#define CFAPI_OBJECT_PROP_BASE_NAME 69
#define CFAPI_OBJECT_PROP_MAGICAL 70
#define CFAPI_OBJECT_PROP_LUCK 71
#define CFAPI_OBJECT_PROP_EXP 72
#define CFAPI_OBJECT_PROP_OWNER 73
#define CFAPI_OBJECT_PROP_PRESENT 74
#define CFAPI_OBJECT_PROP_CHEATER 75
#define CFAPI_OBJECT_PROP_MERGEABLE 76
#define CFAPI_OBJECT_PROP_PICKABLE 77
#define CFAPI_OBJECT_PROP_FLAGS 78
#define CFAPI_OBJECT_PROP_STR 79
#define CFAPI_OBJECT_PROP_DEX 80
#define CFAPI_OBJECT_PROP_CON 81
#define CFAPI_OBJECT_PROP_WIS 82
#define CFAPI_OBJECT_PROP_INT 83
#define CFAPI_OBJECT_PROP_POW 84
#define CFAPI_OBJECT_PROP_CHA 85
#define CFAPI_OBJECT_PROP_WC 86
#define CFAPI_OBJECT_PROP_AC 87
#define CFAPI_OBJECT_PROP_HP 88
#define CFAPI_OBJECT_PROP_SP 89
#define CFAPI_OBJECT_PROP_GP 90
#define CFAPI_OBJECT_PROP_FP 91
#define CFAPI_OBJECT_PROP_MAXHP 92
#define CFAPI_OBJECT_PROP_MAXSP 93
#define CFAPI_OBJECT_PROP_MAXGP 94
#define CFAPI_OBJECT_PROP_DAM 95
#define CFAPI_OBJECT_PROP_GOD 96
#define CFAPI_OBJECT_PROP_ARCH_NAME 97
#define CFAPI_OBJECT_PROP_INVISIBLE 98
#define CFAPI_OBJECT_PROP_FACE 99
#define CFAPI_OBJECT_PROP_ANIMATION 100
#define CFAPI_OBJECT_PROP_NO_SAVE 101
#define CFAPI_OBJECT_PROP_MOVE_TYPE 102
#define CFAPI_OBJECT_PROP_MOVE_BLOCK 103
#define CFAPI_OBJECT_PROP_MOVE_ALLOW 104
#define CFAPI_OBJECT_PROP_MOVE_ON 105
#define CFAPI_OBJECT_PROP_MOVE_OFF 106
#define CFAPI_OBJECT_PROP_MOVE_SLOW 107
#define CFAPI_OBJECT_PROP_MOVE_SLOW_PENALTY 108
#define CFAPI_OBJECT_PROP_DURATION 109
#define CFAPI_PLAYER_PROP_IP 150
#define CFAPI_PLAYER_PROP_MARKED_ITEM 151
#define CFAPI_PLAYER_PROP_PARTY 152
#define CFAPI_PLAYER_PROP_BED_MAP 153
#define CFAPI_PLAYER_PROP_BED_X 154
#define CFAPI_PLAYER_PROP_BED_Y 155
#define CFAPI_PLAYER_PROP_NEXT 156
#define CFAPI_PLAYER_PROP_TITLE 157
#define CFAPI_MAP_PROP_FLAGS 0
#define CFAPI_MAP_PROP_DIFFICULTY 1
#define CFAPI_MAP_PROP_PATH 2
#define CFAPI_MAP_PROP_TMPNAME 3
#define CFAPI_MAP_PROP_NAME 4
#define CFAPI_MAP_PROP_RESET_TIME 5
#define CFAPI_MAP_PROP_RESET_TIMEOUT 6
#define CFAPI_MAP_PROP_PLAYERS 7
#define CFAPI_MAP_PROP_LIGHT 8
#define CFAPI_MAP_PROP_DARKNESS 9
#define CFAPI_MAP_PROP_WIDTH 10
#define CFAPI_MAP_PROP_HEIGHT 11
#define CFAPI_MAP_PROP_ENTER_X 12
#define CFAPI_MAP_PROP_ENTER_Y 13
#define CFAPI_MAP_PROP_MESSAGE 22
#define CFAPI_MAP_PROP_NEXT 23
#define CFAPI_MAP_PROP_REGION 24
#define CFAPI_MAP_PROP_UNIQUE 25
#define CFAPI_ARCH_PROP_NAME 0
#define CFAPI_ARCH_PROP_NEXT 1
#define CFAPI_ARCH_PROP_HEAD 2
#define CFAPI_ARCH_PROP_MORE 3
#define CFAPI_ARCH_PROP_CLONE 4
#define CFAPI_PARTY_PROP_NAME 0
#define CFAPI_PARTY_PROP_NEXT 1
#define CFAPI_PARTY_PROP_PASSWORD 2
#define CFAPI_PARTY_PROP_PLAYER 3
#define CFAPI_REGION_PROP_NAME 0
#define CFAPI_REGION_PROP_NEXT 1
#define CFAPI_REGION_PROP_PARENT 2
#define CFAPI_REGION_PROP_LONGNAME 3
#define CFAPI_REGION_PROP_MESSAGE 4
/*****************************************************************************/
/* Exportable functions. Any plugin should define all those. */
/* initPlugin is called when the plugin initialization process starts.*/
/* endPlugin is called before the plugin gets unloaded from memory. */
/* getPluginProperty is currently unused. */
/* registerHook is used to transmit hook pointers from server to plugin.*/
/* triggerEvent is called whenever an event occurs. */
/*****************************************************************************/
/*extern MODULEAPI CFParm *initPlugin(CFParm *PParm);
extern MODULEAPI CFParm *endPlugin(CFParm *PParm);
extern MODULEAPI CFParm *getPluginProperty(CFParm *PParm);
extern MODULEAPI CFParm *registerHook(CFParm *PParm);
extern MODULEAPI CFParm *triggerEvent(CFParm *PParm);
*/
/** One function the server exposes to plugins. */
typedef struct _hook_entry {
f_plug_api func; /**< Function itself. */
int fid; /**< Function identifier. */
const char fname[256]; /**< Function name. */
} hook_entry;
#endif /* PLUGIN_H */