/* ShipWars Server Plugins Management Also contains definations for actual ShipWars Server plugin, the header file plugins/include/plugins.h should #include this header file. */ #ifndef PLUGINS_H #define PLUGINS_H #include "../server-plugins/include/swserv-plugins.h" typedef struct _plugin_struct plugin_struct; /* * Plugin: */ struct _plugin_struct { /* Name of plugin (this is usually the plugin's file name */ char *name; /* Arguments */ int argc; char **argv; void *handle; /* Pointer to OS's plugin handle */ unsigned int flags; SWServContext *ctx; /* Pointers to functions on this plugin */ int (*init_func)( int, char **, int, SWServContext * /* Context */ ); int (*manage_func)( SWServContext * /* Context */ ); void (*shutdown_func)( SWServContext * /* Context */ ); char **(*help_commands_list_func)( int *, /* Total Return */ SWServContext * /* Context */ ); int (*command_func)( const char *, /* cmd */ const char *, /* arg */ int, /* con_num */ int, /* obj_num */ int, /* uid */ int, /* gid */ SWServContext * /* Context */ ); void (*hail_notify_func)( int, /* con_num */ int, /* obj_num */ int, /* tar_obj_num */ int, /* com_channel */ const char *, /* msg */ SWServContext * /* Context */ ); void (*hit_notify_func)( int, /* wobj_num */ int, /* tobj_num */ float, /* dmg_total */ float, /* bearing (tobj_num to wobj_num) */ float, /* dmg_hull */ float, /* dmg_shield */ SWServContext * /* Context */ ); void (*destroy_notify_func)( int, /* reason (one of SW_DESTROY_REASON_*) */ int, /* destroyed_obj_num */ int, /* destroyer_obj_num */ int, /* destroyer_obj_owner_num */ SWServContext * /* Context */ ); }; extern plugin_struct **plugin; extern int total_plugins; /* Plugin utilities */ extern int PluginIsLoaded(plugin_id_t id); extern plugin_struct *PluginGetPointerFromID(plugin_id_t id); extern plugin_id_t PluginMatchByName(char *name); /* Plugin Load, Manage, and Unload */ extern plugin_id_t PluginLoad( const char *path, const unsigned int flags, const int argc, char **argv, const int con_num ); extern void PluginManage(void); extern void PluginUnload(plugin_id_t id, const int con_num); extern void PluginUnloadAll(void); /* Commands List */ extern char **PluginHelpCommandList( plugin_id_t id, int *ncommands ); /* Command */ extern int PluginCommand( plugin_id_t id, int con_num, int obj_num, const char *cmd, const char *arg, int uid, int gid ); /* Hail Notify */ extern void PluginHailNotify( plugin_id_t id, int con_num, int obj_num, int tar_obj_num, int channel, const char *message ); /* Hit Notify */ extern void PluginHitNotify( plugin_id_t id, const int wobj_num, const int tobj_num, const float bearing, /* Target to weapon */ const float dmg_structure, const float dmg_shield ); /* Destroy Notify */ extern void PluginDestroyNotify( plugin_id_t id, int reason, /* One of SW_DESTROY_REASON_* */ int destroyed_obj_num, int destroyer_obj_num, int destroyer_obj_owner_num ); /* In pluginsctx.cpp */ extern void PluginSetupContext(SWServContext *ctx); #endif /* PLUGINS_H */