extensions/sdk/smsdk_ext.h
author David Anderson <dvander@alliedmods.net>
Wed Jan 17 03:01:38 2007 +0000 (2007-01-17)
changeset 304 fa485d2f25ed
parent 299 f80dd1de6ebf
child 315 5f48300aa103
permissions -rw-r--r--
Added extension loading/unloading
Extended SDK for interface sharing
Completed Metamod extension support
dvander@299
     1
#ifndef _INCLUDE_SOURCEMOD_EXTENSION_BASESDK_H_
dvander@299
     2
#define _INCLUDE_SOURCEMOD_EXTENSION_BASESDK_H_
dvander@299
     3
dvander@299
     4
#include "smsdk_config.h"
dvander@299
     5
#include <IExtensionSys.h>
dvander@299
     6
#include <IHandleSys.h>
dvander@299
     7
#include <sp_vm_api.h>
dvander@299
     8
#include <sm_platform.h>
dvander@299
     9
dvander@299
    10
#if defined SMEXT_CONF_METAMOD
dvander@299
    11
#include <ISmmPlugin.h>
dvander@299
    12
#include <eiface.h>
dvander@299
    13
#endif
dvander@299
    14
dvander@299
    15
using namespace SourceMod;
dvander@299
    16
dvander@299
    17
class SDKExtension : 
dvander@299
    18
#if defined SMEXT_CONF_METAMOD
dvander@299
    19
	public ISmmPlugin,
dvander@299
    20
#endif
dvander@299
    21
	public IExtensionInterface
dvander@299
    22
{
dvander@299
    23
public:
dvander@299
    24
	SDKExtension();
dvander@299
    25
public:
dvander@299
    26
	/**
dvander@299
    27
	 * @brief This is called after the initial loading sequence has been processed.
dvander@299
    28
	 *
dvander@299
    29
	 * @param error		Error message buffer.
dvander@299
    30
	 * @param err_max	Size of error message buffer.
dvander@299
    31
	 * @param late		Whether or not the module was loaded after map load.
dvander@299
    32
	 * @return			True to succeed loading, false to fail.
dvander@299
    33
	 */
dvander@299
    34
	virtual bool SDK_OnLoad(char *error, size_t err_max, bool late);
dvander@299
    35
	
dvander@299
    36
	/**
dvander@299
    37
	 * @brief This is called right before the extension is unloaded.
dvander@299
    38
	 */
dvander@299
    39
	virtual void SDK_OnUnload();
dvander@299
    40
dvander@299
    41
	/**
dvander@299
    42
	 * @brief This is called once all known extensions have been loaded.
dvander@299
    43
	 */
dvander@299
    44
	virtual void SDK_OnAllLoaded();
dvander@299
    45
dvander@299
    46
	/**
dvander@299
    47
	 * @brief Called when the pause state is changed.
dvander@299
    48
	 */
dvander@299
    49
	virtual void SDK_OnPauseChange(bool paused);
dvander@299
    50
dvander@299
    51
#if defined SMEXT_CONF_METAMOD
dvander@299
    52
	/**
dvander@299
    53
	 * @brief Called when Metamod is attached, before the extension version is called.
dvander@299
    54
	 *
dvander@299
    55
	 * @param error			Error buffer.
dvander@299
    56
	 * @param err_max		Maximum size of error buffer.
dvander@299
    57
	 * @param late			Whether or not Metamod considers this a late load.
dvander@299
    58
	 * @return				True to succeed, false to fail.
dvander@299
    59
	 */
dvander@299
    60
	virtual bool SDK_OnMetamodLoad(char *error, size_t err_max, bool late);
dvander@299
    61
dvander@299
    62
	/**
dvander@299
    63
	 * @brief Called when Metamod is detaching, after the extension version is called.
dvander@299
    64
	 * NOTE: By default this is blocked unless sent from SourceMod.
dvander@299
    65
	 *
dvander@299
    66
	 * @param error			Error buffer.
dvander@299
    67
	 * @param err_max		Maximum size of error buffer.
dvander@299
    68
	 * @return				True to succeed, false to fail.
dvander@299
    69
	 */
dvander@299
    70
	virtual bool SDK_OnMetamodUnload(char *error, size_t err_max);
dvander@299
    71
dvander@299
    72
	/**
dvander@299
    73
	 * @brief Called when Metamod's pause state is changing.
dvander@299
    74
	 * NOTE: By default this is blocked unless sent from SourceMod.
dvander@299
    75
	 *
dvander@299
    76
	 * @param paused		Pause state being set.
dvander@299
    77
	 * @param error			Error buffer.
dvander@299
    78
	 * @param err_max		Maximum size of error buffer.
dvander@299
    79
	 * @return				True to succeed, false to fail.
dvander@299
    80
	 */
dvander@299
    81
	virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t err_max);
dvander@299
    82
#endif
dvander@299
    83
dvander@299
    84
public: //IExtensionInterface
dvander@299
    85
	virtual bool OnExtensionLoad(IExtension *me, IShareSys *sys, char *error, size_t err_max, bool late);
dvander@299
    86
	virtual void OnExtensionUnload();
dvander@299
    87
	virtual void OnExtensionsAllLoaded();
dvander@299
    88
	virtual bool IsMetamodExtension();
dvander@299
    89
	virtual void OnExtensionPauseChange(bool state);
dvander@299
    90
	virtual const char *GetExtensionName();
dvander@299
    91
	virtual const char *GetExtensionURL();
dvander@299
    92
	virtual const char *GetExtensionTag();
dvander@299
    93
	virtual const char *GetExtensionAuthor();
dvander@299
    94
	virtual const char *GetExtensionVerString();
dvander@299
    95
	virtual const char *GetExtensionDescription();
dvander@299
    96
	virtual const char *GetExtensionDateString();
dvander@299
    97
#if defined SMEXT_CONF_METAMOD
dvander@299
    98
public: //ISmmPlugin
dvander@299
    99
	virtual bool Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlength, bool late);
dvander@299
   100
	virtual const char *GetAuthor();
dvander@299
   101
	virtual const char *GetName();
dvander@299
   102
	virtual const char *GetDescription();
dvander@299
   103
	virtual const char *GetURL();
dvander@299
   104
	virtual const char *GetLicense();
dvander@299
   105
	virtual const char *GetVersion();
dvander@299
   106
	virtual const char *GetDate();
dvander@299
   107
	virtual const char *GetLogTag();
dvander@299
   108
	virtual bool Unload(char *error, size_t maxlen);
dvander@299
   109
	virtual bool Pause(char *error, size_t maxlen);
dvander@299
   110
	virtual bool Unpause(char *error, size_t maxlen);
dvander@299
   111
private:
dvander@299
   112
	bool m_SourceMMLoaded;
dvander@299
   113
	bool m_WeAreUnloaded;
dvander@299
   114
	bool m_WeGotPauseChange;
dvander@299
   115
#endif
dvander@299
   116
};
dvander@299
   117
dvander@299
   118
extern SDKExtension *g_pExtensionIface;
dvander@299
   119
dvander@299
   120
extern IShareSys *g_pShareSys;
dvander@304
   121
extern IExtension *myself;
dvander@299
   122
extern IHandleSys *g_pHandleSys;
dvander@299
   123
dvander@299
   124
#if defined SMEXT_CONF_METAMOD
dvander@299
   125
PLUGIN_GLOBALVARS();
dvander@299
   126
extern IVEngineServer *engine;
dvander@299
   127
extern IServerGameDLL *gamedll;
dvander@299
   128
#endif
dvander@299
   129
dvander@299
   130
#define SM_MKIFACE(name) SMINTERFACE_##name##_NAME, SMINTERFACE_##name##_VERSION
dvander@299
   131
#define SM_GET_IFACE(prefix,addr) \
dvander@299
   132
	if (!g_pShareSys->RequestInterface(SM_MKIFACE(prefix), myself, (SMInterface **)&addr)) { \
dvander@299
   133
	 if (error) { \
dvander@299
   134
		snprintf(error, err_max, "Could not find interface: %s", SMINTERFACE_##prefix##_NAME); \
dvander@299
   135
	 } \
dvander@299
   136
	 return false; \
dvander@299
   137
	}
dvander@299
   138
dvander@299
   139
#endif //_INCLUDE_SOURCEMOD_EXTENSION_BASESDK_H_