1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/public/sample_ext/smsdk_ext.cpp Fri Jan 19 05:33:04 2007 +0000
1.3 @@ -0,0 +1,279 @@
1.4 +#include <stdio.h>
1.5 +#include "smsdk_ext.h"
1.6 +
1.7 +IShareSys *g_pShareSys = NULL;
1.8 +IExtension *myself = NULL;
1.9 +IHandleSys *g_pHandleSys = NULL;
1.10 +ISourceMod *g_pSM = NULL;
1.11 +
1.12 +PLATFORM_EXTERN_C IExtensionInterface *GetSMExtAPI()
1.13 +{
1.14 + return g_pExtensionIface;
1.15 +}
1.16 +
1.17 +SDKExtension::SDKExtension()
1.18 +{
1.19 +#if defined SMEXT_CONF_METAMOD
1.20 + m_SourceMMLoaded = false;
1.21 + m_WeAreUnloaded = false;
1.22 + m_WeGotPauseChange = false;
1.23 +#endif
1.24 +}
1.25 +
1.26 +bool SDKExtension::OnExtensionLoad(IExtension *me, IShareSys *sys, char *error, size_t err_max, bool late)
1.27 +{
1.28 + g_pShareSys = sys;
1.29 + myself = me;
1.30 +
1.31 +#if defined SMEXT_CONF_METAMOD
1.32 + m_WeAreUnloaded = true;
1.33 +
1.34 + if (!m_SourceMMLoaded)
1.35 + {
1.36 + if (error)
1.37 + {
1.38 + snprintf(error, err_max, "Metamod attach failed");
1.39 + }
1.40 + return false;
1.41 + }
1.42 +#endif
1.43 +
1.44 + SM_GET_IFACE(HANDLESYSTEM, g_pHandleSys);
1.45 + SM_GET_IFACE(SOURCEMOD, g_pSM);
1.46 +
1.47 + if (SDK_OnLoad(error, err_max, late))
1.48 + {
1.49 +#if defined SMEXT_CONF_METAMOD
1.50 + m_WeAreUnloaded = true;
1.51 +#endif
1.52 + return true;
1.53 + }
1.54 +
1.55 + return false;
1.56 +}
1.57 +
1.58 +bool SDKExtension::IsMetamodExtension()
1.59 +{
1.60 +#if defined SMEXT_CONF_METAMOD
1.61 + return true;
1.62 +#else
1.63 + return false;
1.64 +#endif
1.65 +}
1.66 +
1.67 +void SDKExtension::OnExtensionPauseChange(bool state)
1.68 +{
1.69 +#if defined SMEXT_CONF_METAMOD
1.70 + m_WeGotPauseChange = true;
1.71 +#endif
1.72 + SDK_OnPauseChange(state);
1.73 +}
1.74 +
1.75 +void SDKExtension::OnExtensionsAllLoaded()
1.76 +{
1.77 + SDK_OnAllLoaded();
1.78 +}
1.79 +
1.80 +void SDKExtension::OnExtensionUnload()
1.81 +{
1.82 +#if defined SMEXT_CONF_METAMOD
1.83 + m_WeAreUnloaded = true;
1.84 +#endif
1.85 + SDK_OnUnload();
1.86 +}
1.87 +
1.88 +const char *SDKExtension::GetExtensionAuthor()
1.89 +{
1.90 + return SMEXT_CONF_AUTHOR;
1.91 +}
1.92 +
1.93 +const char *SDKExtension::GetExtensionDateString()
1.94 +{
1.95 + return SMEXT_CONF_DATESTRING;
1.96 +}
1.97 +
1.98 +const char *SDKExtension::GetExtensionDescription()
1.99 +{
1.100 + return SMEXT_CONF_DESCRIPTION;
1.101 +}
1.102 +
1.103 +const char *SDKExtension::GetExtensionVerString()
1.104 +{
1.105 + return SMEXT_CONF_VERSION;
1.106 +}
1.107 +
1.108 +const char *SDKExtension::GetExtensionName()
1.109 +{
1.110 + return SMEXT_CONF_NAME;
1.111 +}
1.112 +
1.113 +const char *SDKExtension::GetExtensionTag()
1.114 +{
1.115 + return SMEXT_CONF_LOGTAG;
1.116 +}
1.117 +
1.118 +const char *SDKExtension::GetExtensionURL()
1.119 +{
1.120 + return SMEXT_CONF_URL;
1.121 +}
1.122 +
1.123 +bool SDKExtension::SDK_OnLoad(char *error, size_t err_max, bool late)
1.124 +{
1.125 + return true;
1.126 +}
1.127 +
1.128 +void SDKExtension::SDK_OnUnload()
1.129 +{
1.130 +}
1.131 +
1.132 +void SDKExtension::SDK_OnPauseChange(bool paused)
1.133 +{
1.134 +}
1.135 +
1.136 +void SDKExtension::SDK_OnAllLoaded()
1.137 +{
1.138 +}
1.139 +
1.140 +#if defined SMEXT_CONF_METAMOD
1.141 +
1.142 +PluginId g_PLID = 0;
1.143 +ISmmPlugin *g_PLAPI = NULL;
1.144 +SourceHook::ISourceHook *g_SHPtr = NULL;
1.145 +ISmmAPI *g_SMAPI = NULL;
1.146 +
1.147 +IVEngineServer *engine = NULL;
1.148 +IServerGameDLL *gamedll = NULL;
1.149 +
1.150 +SMM_API void *PL_EXPOSURE(const char *name, int *code)
1.151 +{
1.152 + if (name && !strcmp(name, PLAPI_NAME))
1.153 + {
1.154 + if (code)
1.155 + {
1.156 + *code = IFACE_OK;
1.157 + }
1.158 + return static_cast<void *>(g_pExtensionIface);
1.159 + }
1.160 +
1.161 + if (code)
1.162 + {
1.163 + *code = IFACE_FAILED;
1.164 + }
1.165 +
1.166 + return NULL;
1.167 +}
1.168 +
1.169 +bool SDKExtension::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late)
1.170 +{
1.171 + PLUGIN_SAVEVARS();
1.172 +
1.173 + GET_V_IFACE_ANY(serverFactory, gamedll, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL);
1.174 + GET_V_IFACE_CURRENT(engineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER);
1.175 +
1.176 + m_SourceMMLoaded = true;
1.177 +
1.178 + return SDK_OnMetamodLoad(error, maxlen, late);
1.179 +}
1.180 +
1.181 +bool SDKExtension::Unload(char *error, size_t maxlen)
1.182 +{
1.183 + if (!m_WeAreUnloaded)
1.184 + {
1.185 + if (error)
1.186 + {
1.187 + snprintf(error, maxlen, "This extension must be unloaded by SourceMod.");
1.188 + }
1.189 + return false;
1.190 + }
1.191 +
1.192 + return SDK_OnMetamodUnload(error, maxlen);
1.193 +}
1.194 +
1.195 +bool SDKExtension::Pause(char *error, size_t maxlen)
1.196 +{
1.197 + if (!m_WeGotPauseChange)
1.198 + {
1.199 + if (error)
1.200 + {
1.201 + snprintf(error, maxlen, "This extension must be paused by SourceMod.");
1.202 + }
1.203 + return false;
1.204 + }
1.205 +
1.206 + m_WeGotPauseChange = false;
1.207 +
1.208 + return SDK_OnMetamodPauseChange(true, error, maxlen);
1.209 +}
1.210 +
1.211 +bool SDKExtension::Unpause(char *error, size_t maxlen)
1.212 +{
1.213 + if (!m_WeGotPauseChange)
1.214 + {
1.215 + if (error)
1.216 + {
1.217 + snprintf(error, maxlen, "This extension must be unpaused by SourceMod.");
1.218 + }
1.219 + return false;
1.220 + }
1.221 +
1.222 + m_WeGotPauseChange = false;
1.223 +
1.224 + return SDK_OnMetamodPauseChange(false, error, maxlen);
1.225 +}
1.226 +
1.227 +const char *SDKExtension::GetAuthor()
1.228 +{
1.229 + return GetExtensionAuthor();
1.230 +}
1.231 +
1.232 +const char *SDKExtension::GetDate()
1.233 +{
1.234 + return GetExtensionDateString();
1.235 +}
1.236 +
1.237 +const char *SDKExtension::GetDescription()
1.238 +{
1.239 + return GetExtensionDescription();
1.240 +}
1.241 +
1.242 +const char *SDKExtension::GetLicense()
1.243 +{
1.244 + return SMEXT_CONF_LICENSE;
1.245 +}
1.246 +
1.247 +const char *SDKExtension::GetLogTag()
1.248 +{
1.249 + return GetExtensionTag();
1.250 +}
1.251 +
1.252 +const char *SDKExtension::GetName()
1.253 +{
1.254 + return GetExtensionName();
1.255 +}
1.256 +
1.257 +const char *SDKExtension::GetURL()
1.258 +{
1.259 + return GetExtensionURL();
1.260 +}
1.261 +
1.262 +const char *SDKExtension::GetVersion()
1.263 +{
1.264 + return GetExtensionVerString();
1.265 +}
1.266 +
1.267 +bool SDKExtension::SDK_OnMetamodLoad(char *error, size_t err_max, bool late)
1.268 +{
1.269 + return true;
1.270 +}
1.271 +
1.272 +bool SDKExtension::SDK_OnMetamodUnload(char *error, size_t err_max)
1.273 +{
1.274 + return true;
1.275 +}
1.276 +
1.277 +bool SDKExtension::SDK_OnMetamodPauseChange(bool paused, char *error, size_t err_max)
1.278 +{
1.279 + return true;
1.280 +}
1.281 +
1.282 +#endif