| 320 | } |
| 321 | |
| 322 | bool SDKExtension::Load(PluginId id, ISmmAPI *ismm, char *error, size_t maxlen, bool late) |
| 323 | { |
| 324 | PLUGIN_SAVEVARS(); |
| 325 | |
| 326 | #ifndef META_NO_HL2SDK |
| 327 | #if !defined METAMOD_PLAPI_VERSION |
| 328 | GET_V_IFACE_ANY(serverFactory, gamedll, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL); |
| 329 | GET_V_IFACE_CURRENT(engineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER); |
| 330 | #else |
| 331 | GET_V_IFACE_ANY(GetServerFactory, gamedll, IServerGameDLL, INTERFACEVERSION_SERVERGAMEDLL); |
| 332 | #if SOURCE_ENGINE == SE_SDK2013 |
| 333 | // Shim to avoid hooking shims |
| 334 | engine = (IVEngineServer *) ismm->GetEngineFactory()("VEngineServer023", nullptr); |
| 335 | if (!engine) |
| 336 | { |
| 337 | engine = (IVEngineServer *) ismm->GetEngineFactory()("VEngineServer022", nullptr); |
| 338 | if (!engine) |
| 339 | { |
| 340 | engine = (IVEngineServer *) ismm->GetEngineFactory()("VEngineServer021", nullptr); |
| 341 | if (!engine) |
| 342 | { |
| 343 | if (error && maxlen) |
| 344 | { |
| 345 | ismm->Format(error, maxlen, "Could not find interface: VEngineServer023 or VEngineServer022"); |
| 346 | } |
| 347 | return false; |
| 348 | } |
| 349 | } |
| 350 | } |
| 351 | #else |
| 352 | GET_V_IFACE_CURRENT(GetEngineFactory, engine, IVEngineServer, INTERFACEVERSION_VENGINESERVER); |
| 353 | #endif // TF2 / CSS / DODS / HL2DM / SDK2013 |
| 354 | #endif // !METAMOD_PLAPI_VERSION |
| 355 | #endif //META_NO_HL2SDK |
| 356 | |
| 357 | m_SourceMMLoaded = true; |
| 358 | |
| 359 | return SDK_OnMetamodLoad(ismm, error, maxlen, late); |
| 360 | } |
| 361 | |
| 362 | bool SDKExtension::Unload(char *error, size_t maxlen) |
| 363 | { |