pred@2009: /**
pred@2009: * vim: set ts=4 :
pred@2009: * =============================================================================
pred@2009: * SourceMod Client Preferences Extension
pred@2009: * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
pred@2009: * =============================================================================
pred@2009: *
pred@2009: * This program is free software; you can redistribute it and/or modify it under
pred@2009: * the terms of the GNU General Public License, version 3.0, as published by the
pred@2009: * Free Software Foundation.
pred@2009: *
pred@2009: * This program is distributed in the hope that it will be useful, but WITHOUT
pred@2009: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
pred@2009: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
pred@2009: * details.
pred@2009: *
pred@2009: * You should have received a copy of the GNU General Public License along with
pred@2009: * this program. If not, see .
pred@2009: *
pred@2009: * As a special exception, AlliedModders LLC gives you permission to link the
pred@2009: * code of this program (as well as its derivative works) to "Half-Life 2," the
pred@2009: * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
pred@2009: * by the Valve Corporation. You must obey the GNU General Public License in
pred@2009: * all respects for all other code used. Additionally, AlliedModders LLC grants
pred@2009: * this exception to all derivative works. AlliedModders LLC defines further
pred@2009: * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
pred@2009: * or .
pred@2009: *
pred@2009: * Version: $Id$
pred@2009: */
pred@2009:
pred@2009: #ifndef _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
pred@2009: #define _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
pred@2009:
pred@2009: #define MAXCLIENTS 64
pred@2009:
ds@2051: #include
ds@2051: #include
pred@2009: #include "smsdk_ext.h"
pred@2048: #include "sh_list.h"
pred@2009: #include "cookie.h"
pred@2048: #include "menus.h"
pred@2087: #include "query.h"
pred@2009:
dvander@2373: enum DbDriver
dvander@2373: {
dvander@2373: Driver_MySQL,
dvander@2373: Driver_SQLite
dvander@2373: };
pred@2009:
pred@2048: #define MAX_TRANSLATE_PARAMS 32
pred@2048:
pred@2207: class TQueryOp;
pred@2207:
pred@2009: /**
pred@2009: * @brief Sample implementation of the SDK Extension.
pred@2009: * Note: Uncomment one of the pre-defined virtual functions in order to use it.
pred@2009: */
pred@2009: class ClientPrefs : public SDKExtension
pred@2009: {
pred@2009: public:
pred@2009: /**
pred@2009: * @brief This is called after the initial loading sequence has been processed.
pred@2009: *
pred@2009: * @param error Error message buffer.
pred@2009: * @param maxlength Size of error message buffer.
pred@2009: * @param late Whether or not the module was loaded after map load.
pred@2009: * @return True to succeed loading, false to fail.
pred@2009: */
pred@2009: virtual bool SDK_OnLoad(char *error, size_t maxlength, bool late);
pred@2009:
pred@2009: /**
pred@2009: * @brief This is called right before the extension is unloaded.
pred@2009: */
pred@2009: virtual void SDK_OnUnload();
pred@2009:
pred@2009: /**
pred@2009: * @brief This is called once all known extensions have been loaded.
pred@2009: * Note: It is is a good idea to add natives here, if any are provided.
pred@2009: */
pred@2009: virtual void SDK_OnAllLoaded();
pred@2009:
dvander@2135: virtual bool QueryInterfaceDrop(SMInterface *pInterface);
dvander@2135:
dvander@2135: virtual void NotifyInterfaceDrop(SMInterface *pInterface);
dvander@2135:
pred@2207: void DatabaseConnect();
pred@2207:
pred@2207: bool AddQueryToQueue(TQueryOp *query);
pred@2207: void ProcessQueryCache();
pred@2207:
pred@2009: /**
pred@2009: * @brief Called when the pause state is changed.
pred@2009: */
pred@2009: //virtual void SDK_OnPauseChange(bool paused);
pred@2009:
pred@2009: /**
pred@2009: * @brief this is called when Core wants to know if your extension is working.
pred@2009: *
pred@2009: * @param error Error message buffer.
pred@2009: * @param maxlength Size of error message buffer.
pred@2009: * @return True if working, false otherwise.
pred@2009: */
pred@2009: //virtual bool QueryRunning(char *error, size_t maxlength);
pred@2009: public:
pred@2009: #if defined SMEXT_CONF_METAMOD
pred@2009: /**
pred@2009: * @brief Called when Metamod is attached, before the extension version is called.
pred@2009: *
pred@2009: * @param error Error buffer.
pred@2009: * @param maxlength Maximum size of error buffer.
pred@2009: * @param late Whether or not Metamod considers this a late load.
pred@2009: * @return True to succeed, false to fail.
pred@2009: */
pred@2009: //virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlength, bool late);
pred@2009:
pred@2009: /**
pred@2009: * @brief Called when Metamod is detaching, after the extension version is called.
pred@2009: * NOTE: By default this is blocked unless sent from SourceMod.
pred@2009: *
pred@2009: * @param error Error buffer.
pred@2009: * @param maxlength Maximum size of error buffer.
pred@2009: * @return True to succeed, false to fail.
pred@2009: */
pred@2009: //virtual bool SDK_OnMetamodUnload(char *error, size_t maxlength);
pred@2009:
pred@2009: /**
pred@2009: * @brief Called when Metamod's pause state is changing.
pred@2009: * NOTE: By default this is blocked unless sent from SourceMod.
pred@2009: *
pred@2009: * @param paused Pause state being set.
pred@2009: * @param error Error buffer.
pred@2009: * @param maxlength Maximum size of error buffer.
pred@2009: * @return True to succeed, false to fail.
pred@2009: */
pred@2009: //virtual bool SDK_OnMetamodPauseChange(bool paused, char *error, size_t maxlength);
pred@2009: #endif
pred@2009: public:
pred@2009: IDBDriver *Driver;
pred@2009: IDatabase *Database;
pred@2207: bool databaseLoading;
pred@2048: IPhraseCollection *phrases;
pred@2207: const DatabaseInfo *DBInfo;
pred@2207:
pred@2207: IMutex *cookieMutex;
pred@2207:
pred@2207: private:
pred@2207: SourceHook::List cachedQueries;
pred@2207: IMutex *queryMutex;
pred@2009: };
pred@2009:
pred@2009: class CookieTypeHandler : public IHandleTypeDispatch
pred@2009: {
pred@2009: public:
pred@2009: void OnHandleDestroy(HandleType_t type, void *object)
pred@2009: {
pred@2207: /* No delete needed since Cookies are persistent */
pred@2009: }
pred@2009: };
pred@2009:
pred@2048: class CookieIteratorHandler : public IHandleTypeDispatch
pred@2048: {
pred@2048: public:
pred@2048: void OnHandleDestroy(HandleType_t type, void *object)
pred@2048: {
pred@2048: delete (SourceHook::List::iterator *)object;
pred@2048: }
pred@2048: };
pred@2048:
pred@2048: size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...);
pred@2048:
pred@2009: extern sp_nativeinfo_t g_ClientPrefNatives[];
pred@2009:
pred@2009: extern ClientPrefs g_ClientPrefs;
pred@2009: extern HandleType_t g_CookieType;
pred@2009: extern CookieTypeHandler g_CookieTypeHandler;
pred@2009:
pred@2048: extern HandleType_t g_CookieIterator;
pred@2048: extern CookieIteratorHandler g_CookieIteratorHandler;
pred@2048:
pred@2048: bool Translate(char *buffer,
pred@2048: size_t maxlength,
pred@2048: const char *format,
pred@2048: unsigned int numparams,
pred@2048: size_t *pOutLength,
pred@2048: ...);
pred@2048:
dvander@2373: extern DbDriver g_DriverType;
pred@2009:
pred@2009: #endif // _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
dvander@2373: