extensions/tf2/extension.h
author Nicholas Hastings <skamonkey@gmail.com>
Mon Jul 29 10:03:18 2013 -0400 (2013-07-29)
changeset 3960 d50b36dc6821
parent 3533 f35b66137b06
child 4344 c445c3266192
permissions -rw-r--r--
Updated for latest hl2sdk-dota changes.
     1 /**
     2  * vim: set ts=4 :
     3  * =============================================================================
     4  * SourceMod Team Fortress 2 Extension
     5  * Copyright (C) 2004-2011 AlliedModders LLC.  All rights reserved.
     6  * =============================================================================
     7  *
     8  * This program is free software; you can redistribute it and/or modify it under
     9  * the terms of the GNU General Public License, version 3.0, as published by the
    10  * Free Software Foundation.
    11  * 
    12  * This program is distributed in the hope that it will be useful, but WITHOUT
    13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    14  * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
    15  * details.
    16  *
    17  * You should have received a copy of the GNU General Public License along with
    18  * this program.  If not, see <http://www.gnu.org/licenses/>.
    19  *
    20  * As a special exception, AlliedModders LLC gives you permission to link the
    21  * code of this program (as well as its derivative works) to "Half-Life 2," the
    22  * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
    23  * by the Valve Corporation.  You must obey the GNU General Public License in
    24  * all respects for all other code used.  Additionally, AlliedModders LLC grants
    25  * this exception to all derivative works.  AlliedModders LLC defines further
    26  * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
    27  * or <http://www.sourcemod.net/license.php>.
    28  *
    29  * Version: $Id$
    30  */
    31 
    32 #ifndef _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
    33 #define _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_
    34 
    35 /**
    36  * @file extension.h
    37  * @brief Sample extension code header.
    38  */
    39 
    40 #include "smsdk_ext.h"
    41 #include <IBinTools.h>
    42 #include <server_class.h>
    43 #include <igameevents.h>
    44 
    45 #define MAXPLAYERS 65
    46 
    47 /**
    48  * @brief Sample implementation of the SDK Extension.
    49  * Note: Uncomment one of the pre-defined virtual functions in order to use it.
    50  */
    51 class TF2Tools : 
    52 	public SDKExtension,
    53 	public ICommandTargetProcessor,
    54 	public IConCommandBaseAccessor,
    55 	public IGameEventListener2,
    56 	public IPluginsListener,
    57 	public IClientListener
    58 {
    59 public: //SDKExtension
    60 	/**
    61 	 * @brief This is called after the initial loading sequence has been processed.
    62 	 *
    63 	 * @param error		Error message buffer.
    64 	 * @param maxlength	Size of error message buffer.
    65 	 * @param late		Whether or not the module was loaded after map load.
    66 	 * @return			True to succeed loading, false to fail.
    67 	 */
    68 	virtual bool SDK_OnLoad(char *error, size_t maxlength, bool late);
    69 	
    70 	/**
    71 	 * @brief This is called right before the extension is unloaded.
    72 	 */
    73 	virtual void SDK_OnUnload();
    74 
    75 	/**
    76 	 * @brief This is called once all known extensions have been loaded.
    77 	 * Note: It is is a good idea to add natives here, if any are provided.
    78 	 */
    79 	virtual void SDK_OnAllLoaded();
    80 
    81 	/**
    82 	 * @brief this is called when Core wants to know if your extension is working.
    83 	 *
    84 	 * @param error		Error message buffer.
    85 	 * @param maxlength	Size of error message buffer.
    86 	 * @return			True if working, false otherwise.
    87 	 */
    88 	virtual bool QueryRunning(char *error, size_t maxlength);
    89 
    90 	void NotifyInterfaceDrop(SMInterface *pInterface);
    91 	bool QueryInterfaceDrop(SMInterface *pInterface);
    92 
    93 	const char *GetExtensionVerString();
    94 	const char *GetExtensionDateString();
    95 public: //ICommandTargetProcessor
    96 	bool ProcessCommandTarget(cmd_target_info_t *info);
    97 public: //IConCommandBaseAccessor
    98 	bool RegisterConCommandBase(ConCommandBase *pVar);
    99 public: //IGameEventManager
   100 	IGameEventManager2 *m_GameEventManager;
   101 	void FireGameEvent( IGameEvent *event );
   102 public: //IPluginsListener
   103 	void OnPluginLoaded(IPlugin *plugin);
   104 	void OnPluginUnloaded(IPlugin *plugin);
   105 public: //IClientListener
   106 	void OnClientPutInServer(int client);
   107 public:
   108 #if defined SMEXT_CONF_METAMOD
   109 	/**
   110 	 * @brief Called when Metamod is attached, before the extension version is called.
   111 	 *
   112 	 * @param error			Error buffer.
   113 	 * @param maxlength		Maximum size of error buffer.
   114 	 * @param late			Whether or not Metamod considers this a late load.
   115 	 * @return				True to succeed, false to fail.
   116 	 */
   117 	virtual bool SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlength, bool late);
   118 #endif
   119 private:
   120 	bool m_CritDetoursEnabled;
   121 	bool m_IsHolidayDetourEnabled;
   122 	bool m_CondChecksEnabled;
   123 	bool m_RulesDetoursEnabled;
   124 	bool m_TeleportDetourEnabled;
   125 };
   126 
   127 enum TFClassType
   128 {
   129 	TFClass_Unknown = 0,
   130 	TFClass_Scout,
   131 	TFClass_Sniper,
   132 	TFClass_Soldier,
   133 	TFClass_DemoMan,
   134 	TFClass_Medic,
   135 	TFClass_Heavy,
   136 	TFClass_Pyro,
   137 	TFClass_Spy,
   138 	TFClass_Engineer
   139 };
   140 
   141 TFClassType ClassnameToType(const char *classname);
   142 
   143 extern IBinTools *g_pBinTools;
   144 extern IGameConfig *g_pGameConf;
   145 extern sm_sendprop_info_t *playerSharedOffset;
   146 
   147 extern CGlobalVars *gpGlobals;
   148 
   149 void OnServerActivate(edict_t *pEdictList, int edictCount, int clientMax);
   150 
   151 int FindResourceEntity();
   152 int FindEntityByNetClass(int start, const char *classname);
   153 
   154 extern int g_resourceEntity;
   155 
   156 
   157 #endif // _INCLUDE_SOURCEMOD_EXTENSION_PROPER_H_