public/sample_ext/smsdk_ext.cpp
author David Anderson <dvander@alliedmods.net>
Fri Jan 19 05:33:04 2007 +0000 (2007-01-19)
changeset 324 e23aca731e37
child 329 996874ee27fe
permissions -rw-r--r--
reorganized SourceMod for the public SDK
     1 #include <stdio.h>
     2 #include "smsdk_ext.h"
     3 
     4 IShareSys *g_pShareSys = NULL;
     5 IExtension *myself = NULL;
     6 IHandleSys *g_pHandleSys = NULL;
     7 ISourceMod *g_pSM = NULL;
     8 
     9 PLATFORM_EXTERN_C IExtensionInterface *GetSMExtAPI()
    10 {
    11 	return g_pExtensionIface;
    12 }
    13 
    14 SDKExtension::SDKExtension()
    15 {
    16 #if defined SMEXT_CONF_METAMOD
    17 	m_SourceMMLoaded = false;
    18 	m_WeAreUnloaded = false;
    19 	m_WeGotPauseChange = false;
    20 #endif
    21 }
    22 
    23 bool SDKExtension::OnExtensionLoad(IExtension *me, IShareSys *sys, char *error, size_t err_max, bool late)
    24 {
    25 	g_pShareSys = sys;
    26 	myself = me;
    27 
    28 #if defined SMEXT_CONF_METAMOD
    29 	m_WeAreUnloaded = true;
    30 
    31 	if (!m_SourceMMLoaded)
    32 	{
    33 		if (error)
    34 		{
    35 			snprintf(error, err_max, "Metamod attach failed");
    36 		}
    37 		return false;
    38 	}
    39 #endif
    40 
    41 	SM_GET_IFACE(HANDLESYSTEM, g_pHandleSys);
    42 	SM_GET_IFACE(SOURCEMOD, g_pSM);
    43 
    44 	if (SDK_OnLoad(error, err_max, late))
    45 	{
    46 #if defined SMEXT_CONF_METAMOD
    47 		m_WeAreUnloaded = true;
    48 #endif
    49 		return true;
    50 	}
    51 
    52 	return false;
    53 }
    54 
    55 bool SDKExtension::IsMetamodExtension()
    56 {
    57 #if defined SMEXT_CONF_METAMOD
    58 	return true;
    59 #else
    60 	return false;
    61 #endif
    62 }
    63 
    64 void SDKExtension::OnExtensionPauseChange(bool state)
    65 {
    66 #if defined SMEXT_CONF_METAMOD
    67 	m_WeGotPauseChange = true;
    68 #endif
    69 	SDK_OnPauseChange(state);
    70 }
    71 
    72 void SDKExtension::OnExtensionsAllLoaded()
    73 {
    74 	SDK_OnAllLoaded();
    75 }
    76 
    77 void SDKExtension::OnExtensionUnload()
    78 {
    79 #if defined SMEXT_CONF_METAMOD
    80 	m_WeAreUnloaded = true;
    81 #endif
    82 	SDK_OnUnload();
    83 }
    84 
    85 const char *SDKExtension::GetExtensionAuthor()
    86 {
    87 	return SMEXT_CONF_AUTHOR;
    88 }
    89 
    90 const char *SDKExtension::GetExtensionDateString()
    91 {
    92 	return SMEXT_CONF_DATESTRING;
    93 }
    94 
    95 const char *SDKExtension::GetExtensionDescription()
    96 {
    97 	return SMEXT_CONF_DESCRIPTION;
    98 }
    99 
   100 const char *SDKExtension::GetExtensionVerString()
   101 {
   102 	return SMEXT_CONF_VERSION;
   103 }
   104 
   105 const char *SDKExtension::GetExtensionName()
   106 {
   107 	return SMEXT_CONF_NAME;
   108 }
   109 
   110 const char *SDKExtension::GetExtensionTag()
   111 {
   112 	return SMEXT_CONF_LOGTAG;
   113 }
   114 
   115 const char *SDKExtension::GetExtensionURL()
   116 {
   117 	return SMEXT_CONF_URL;
   118 }
   119 
   120 bool SDKExtension::SDK_OnLoad(char *error, size_t err_max, bool late)
   121 {
   122 	return true;
   123 }
   124 
   125 void SDKExtension::SDK_OnUnload()
   126 {
   127 }
   128 
   129 void SDKExtension::SDK_OnPauseChange(bool paused)
   130 {
   131 }
   132 
   133 void SDKExtension::SDK_OnAllLoaded()
   134 {
   135 }
   136 
   137 #if defined SMEXT_CONF_METAMOD
   138 
   139 PluginId g_PLID = 0;
   140 ISmmPlugin *g_PLAPI = NULL;
   141 SourceHook::ISourceHook *g_SHPtr = NULL;
   142 ISmmAPI *g_SMAPI = NULL;
   143 
   144 IVEngineServer *engine = NULL;
   145 IServerGameDLL *gamedll = NULL;
   146 
   147 SMM_API void *PL_EXPOSURE(const char *name, int *code)
   148 {
   149 	if (name && !strcmp(name, PLAPI_NAME))
   150 	{
   151 		if (code)
   152 		{
   153 			*code = IFACE_OK;
   154 		}
   155 		return static_cast<void *>(g_pExtensionIface);
   156 	}
   157 
   158 	if (code)
   159 	{
   160 		*code = IFACE_FAILED;
   161 	}
   162 
   163 	return NULL;
   164 }
   165 
   166 bool SDKExtension::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late)
   167 {
   168 	PLUGIN_SAVEVARS();
   169 
   170 	GET_V_IFACE_ANY(serverFactory, gamedll, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL);
   171 	GET_V_IFACE_CURRENT(engineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER);
   172 
   173 	m_SourceMMLoaded = true;
   174 
   175 	return SDK_OnMetamodLoad(error, maxlen, late);
   176 }
   177 
   178 bool SDKExtension::Unload(char *error, size_t maxlen)
   179 {
   180 	if (!m_WeAreUnloaded)
   181 	{
   182 		if (error)
   183 		{
   184 			snprintf(error, maxlen, "This extension must be unloaded by SourceMod.");
   185 		}
   186 		return false;
   187 	}
   188 
   189 	return SDK_OnMetamodUnload(error, maxlen);
   190 }
   191 
   192 bool SDKExtension::Pause(char *error, size_t maxlen)
   193 {
   194 	if (!m_WeGotPauseChange)
   195 	{
   196 		if (error)
   197 		{
   198 			snprintf(error, maxlen, "This extension must be paused by SourceMod.");
   199 		}
   200 		return false;
   201 	}
   202 
   203 	m_WeGotPauseChange = false;
   204 
   205 	return SDK_OnMetamodPauseChange(true, error, maxlen);
   206 }
   207 
   208 bool SDKExtension::Unpause(char *error, size_t maxlen)
   209 {
   210 	if (!m_WeGotPauseChange)
   211 	{
   212 		if (error)
   213 		{
   214 			snprintf(error, maxlen, "This extension must be unpaused by SourceMod.");
   215 		}
   216 		return false;
   217 	}
   218 
   219 	m_WeGotPauseChange = false;
   220 
   221 	return SDK_OnMetamodPauseChange(false, error, maxlen);
   222 }
   223 
   224 const char *SDKExtension::GetAuthor()
   225 {
   226 	return GetExtensionAuthor();
   227 }
   228 
   229 const char *SDKExtension::GetDate()
   230 {
   231 	return GetExtensionDateString();
   232 }
   233 
   234 const char *SDKExtension::GetDescription()
   235 {
   236 	return GetExtensionDescription();
   237 }
   238 
   239 const char *SDKExtension::GetLicense()
   240 {
   241 	return SMEXT_CONF_LICENSE;
   242 }
   243 
   244 const char *SDKExtension::GetLogTag()
   245 {
   246 	return GetExtensionTag();
   247 }
   248 
   249 const char *SDKExtension::GetName()
   250 {
   251 	return GetExtensionName();
   252 }
   253 
   254 const char *SDKExtension::GetURL()
   255 {
   256 	return GetExtensionURL();
   257 }
   258 
   259 const char *SDKExtension::GetVersion()
   260 {
   261 	return GetExtensionVerString();
   262 }
   263 
   264 bool SDKExtension::SDK_OnMetamodLoad(char *error, size_t err_max, bool late)
   265 {
   266 	return true;
   267 }
   268 
   269 bool SDKExtension::SDK_OnMetamodUnload(char *error, size_t err_max)
   270 {
   271 	return true;
   272 }
   273 
   274 bool SDKExtension::SDK_OnMetamodPauseChange(bool paused, char *error, size_t err_max)
   275 {
   276 	return true;
   277 }
   278 
   279 #endif