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: