core/sourcemod.h
author David Anderson <dvander@alliedmods.net>
Wed Jun 06 06:04:16 2007 +0000 (2007-06-06)
changeset 883 f4eff9faf362
parent 786 a04118454f26
child 893 a3bc816549a8
permissions -rw-r--r--
fixed inheritance not being used in the base menu style when removing clients from the watch list
dvander@370
     1
/**
ds@653
     2
 * vim: set ts=4 :
dvander@370
     3
 * ===============================================================
dvander@370
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@370
     5
 * ===============================================================
dvander@370
     6
 *
dvander@370
     7
 * This file is not open source and may not be copied without explicit
dvander@370
     8
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@370
     9
 * in whole or significant part.
dvander@370
    10
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@370
    11
 *
dvander@370
    12
 * Version: $Id$
dvander@370
    13
 */
dvander@370
    14
dvander@159
    15
#ifndef _INCLUDE_SOURCEMOD_GLOBALHEADER_H_
dvander@159
    16
#define _INCLUDE_SOURCEMOD_GLOBALHEADER_H_
dvander@159
    17
dvander@160
    18
#include "sm_globals.h"
dvander@317
    19
#include <ISourceMod.h>
faluco@484
    20
#include <sh_stack.h>
faluco@484
    21
#include "CDataPack.h"
faluco@484
    22
faluco@484
    23
using namespace SourceHook;
dvander@159
    24
dvander@162
    25
/**
dvander@162
    26
 * @brief Implements SourceMod's global overall management, API, and logic
dvander@162
    27
 */
dvander@162
    28
ds@661
    29
class SourceModBase : 
ds@661
    30
	public ISourceMod,
ds@661
    31
	public SMGlobalClass
dvander@160
    32
{
dvander@160
    33
public:
dvander@209
    34
	SourceModBase();
dvander@209
    35
public:
dvander@160
    36
	/**
dvander@160
    37
	 * @brief Initializes SourceMod, or returns an error on failure.
dvander@160
    38
	 */
ds@755
    39
	bool InitializeSourceMod(char *error, size_t maxlength, bool late);
dvander@209
    40
dvander@209
    41
	/** 
dvander@209
    42
	 * @brief Starts everything SourceMod needs to run
dvander@209
    43
	 */
dvander@209
    44
	void StartSourceMod(bool late);
dvander@209
    45
faluco@289
    46
	/** 
dvander@448
    47
	 * @brief Shuts down all SourceMod components
dvander@448
    48
	 */
faluco@289
    49
	void CloseSourceMod();
faluco@289
    50
dvander@209
    51
	/**
dvander@209
    52
	 * @brief Map change hook
dvander@209
    53
	 */
dvander@209
    54
	bool LevelInit(char const *pMapName, char const *pMapEntities, char const *pOldLevel, char const *pLandmarkName, bool loadGame, bool background);
dvander@209
    55
faluco@333
    56
	/**
dvander@448
    57
	 * @brief Level shutdown hook
dvander@448
    58
	 */
faluco@333
    59
	void LevelShutdown();
faluco@333
    60
dvander@209
    61
	/** 
faluco@484
    62
	 * @brief Returns whether or not a map load is in progress
dvander@209
    63
	 */
faluco@484
    64
	bool IsMapLoading() const;
dvander@209
    65
faluco@422
    66
	/** 
dvander@448
    67
	 * @brief Stores the global target index.
dvander@448
    68
	 */
faluco@422
    69
	void SetGlobalTarget(unsigned int index);
faluco@422
    70
faluco@422
    71
	/** 
dvander@448
    72
	 * @brief Returns the global target index.
dvander@448
    73
	 */
faluco@422
    74
	unsigned int GetGlobalTarget() const;
faluco@484
    75
	
faluco@484
    76
	/** 
ds@675
    77
	 * @brief Sets whether if SoureMod needs to check player auths.
ds@675
    78
	 */
faluco@484
    79
	void SetAuthChecking(bool set);
ds@661
    80
public: // SMGlobalClass
dvander@663
    81
	ConfigResult OnSourceModConfigChanged(const char *key, 
dvander@663
    82
										  const char *value, 
dvander@663
    83
										  ConfigSource source, 
dvander@663
    84
										  char *error, 
dvander@663
    85
										  size_t maxlength);
ds@661
    86
public: // ISourceMod
ds@729
    87
	const char *GetGamePath() const;
faluco@484
    88
	const char *GetSourceModPath() const;
dvander@317
    89
	size_t BuildPath(PathType type, char *buffer, size_t maxlength, char *format, ...);
dvander@317
    90
	void LogMessage(IExtension *pExt, const char *format, ...);
dvander@317
    91
	void LogError(IExtension *pExt, const char *format, ...);
dvander@347
    92
	size_t FormatString(char *buffer, size_t maxlength, IPluginContext *pContext, const cell_t *params, unsigned int param);
faluco@484
    93
	IDataPack *CreateDataPack();
faluco@484
    94
	void FreeDataPack(IDataPack *pack);
faluco@484
    95
	HandleType_t GetDataPackHandleType(bool readonly=false);
faluco@682
    96
	KeyValues *ReadKeyValuesHandle(Handle_t hndl, HandleError *err=NULL, bool root=false);
ds@729
    97
	const char *GetGameFolderName() const;
faluco@733
    98
	ISourcePawnEngine *GetScriptingEngine();
faluco@733
    99
	IVirtualMachine *GetScriptingVM();
dvander@209
   100
private:
dvander@209
   101
	/**
dvander@209
   102
	 * @brief Loading plugins
dvander@209
   103
	 */
dvander@209
   104
	void DoGlobalPluginLoads();
ds@661
   105
ds@661
   106
	/**
ds@661
   107
	 * @brief GameFrame hook
ds@661
   108
	 */
dvander@448
   109
	void GameFrame(bool simulating);
dvander@209
   110
private:
faluco@484
   111
	CStack<CDataPack *> m_freepacks;
ds@652
   112
	char m_SMBaseDir[PLATFORM_MAX_PATH];
ds@652
   113
	char m_SMRelDir[PLATFORM_MAX_PATH];
ds@696
   114
	char m_ModDir[32];
dvander@209
   115
	bool m_IsMapLoading;
faluco@333
   116
	bool m_ExecPluginReload;
faluco@786
   117
	bool m_ExecOnMapEnd;
faluco@422
   118
	unsigned int m_target;
dvander@448
   119
	bool m_CheckingAuth;
ds@661
   120
	bool m_GotBasePath;
dvander@211
   121
};
dvander@211
   122
dvander@160
   123
extern SourceModBase g_SourceMod;
dvander@685
   124
extern HandleType_t g_WrBitBufType;		//:TODO: find a better place for this
dvander@685
   125
extern HandleType_t g_RdBitBufType;		//:TODO: find a better place for this
dvander@159
   126
dvander@159
   127
#endif //_INCLUDE_SOURCEMOD_GLOBALHEADER_H_