core/GameConfigs.h
author Scott Ehlert <ds@alliedmods.net>
Fri Jun 01 06:33:54 2007 +0000 (2007-06-01)
changeset 873 a2136b3be10d
parent 616 d5b1dcf38c07
child 947 04dcaa8312e7
permissions -rw-r--r--
- Added natives: PrintToChat() and PrintCenterText()
- Bit of reorganization with moving some natives from sourcemod.inc to halflife.inc
dvander@592
     1
/**
dvander@592
     2
 * vim: set ts=4 :
dvander@592
     3
 * ===============================================================
dvander@592
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@592
     5
 * ===============================================================
dvander@592
     6
 *
dvander@592
     7
 * This file is not open source and may not be copied without explicit
dvander@592
     8
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@592
     9
 * in whole or significant part.
dvander@592
    10
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@592
    11
 *
dvander@592
    12
 * Version: $Id$
dvander@592
    13
 */
dvander@592
    14
dvander@592
    15
#ifndef _INCLUDE_SOURCEMOD_CGAMECONFIGS_H_
dvander@592
    16
#define _INCLUDE_SOURCEMOD_CGAMECONFIGS_H_
dvander@592
    17
dvander@592
    18
#include <IGameConfigs.h>
dvander@592
    19
#include <ITextParsers.h>
dvander@592
    20
#include <sh_list.h>
dvander@592
    21
#include "sm_trie.h"
dvander@592
    22
#include "sm_globals.h"
dvander@592
    23
#include "sm_memtable.h"
dvander@592
    24
dvander@592
    25
using namespace SourceMod;
dvander@592
    26
using namespace SourceHook;
dvander@592
    27
dvander@592
    28
class SendProp;
dvander@592
    29
dvander@592
    30
class CGameConfig : 
dvander@592
    31
	public ITextListener_SMC,
dvander@592
    32
	public IGameConfig
dvander@592
    33
{
dvander@592
    34
public:
dvander@592
    35
	CGameConfig(const char *file);
dvander@592
    36
	~CGameConfig();
dvander@592
    37
public:
dvander@592
    38
	bool Reparse(char *error, size_t maxlength);
dvander@592
    39
public: //ITextListener_SMC
dvander@592
    40
	SMCParseResult ReadSMC_NewSection(const char *name, bool opt_quotes);
dvander@592
    41
	SMCParseResult ReadSMC_KeyValue(const char *key, const char *value, bool key_quotes, bool value_quotes);
dvander@592
    42
	SMCParseResult ReadSMC_LeavingSection();
dvander@592
    43
public: //IGameConfig
dvander@592
    44
	const char *GetKeyValue(const char *key);
dvander@592
    45
	bool GetOffset(const char *key, int *value);
dvander@592
    46
	SendProp *GetSendProp(const char *key);
dvander@592
    47
public:
dvander@592
    48
	void IncRefCount();
dvander@592
    49
	unsigned int DecRefCount();
dvander@592
    50
private:
dvander@592
    51
	BaseStringTable *m_pStrings;
dvander@592
    52
	char *m_pFile;
dvander@592
    53
	Trie *m_pOffsets;
dvander@592
    54
	Trie *m_pProps;
dvander@592
    55
	Trie *m_pKeys;
dvander@592
    56
	unsigned int m_RefCount;
dvander@592
    57
	/* Parse states */
dvander@592
    58
	int m_ParseState;
dvander@592
    59
	unsigned int m_IgnoreLevel;
dvander@592
    60
	char m_class[64];
dvander@592
    61
	char m_prop[64];
dvander@592
    62
	char m_offset[64];
dvander@592
    63
	char m_mod[255];
dvander@592
    64
};
dvander@592
    65
dvander@616
    66
class GameConfigManager : 
dvander@592
    67
	public IGameConfigManager,
dvander@592
    68
	public SMGlobalClass
dvander@592
    69
{
dvander@592
    70
public:
dvander@616
    71
	GameConfigManager();
dvander@616
    72
	~GameConfigManager();
dvander@592
    73
public: //IGameConfigManager
dvander@592
    74
	bool LoadGameConfigFile(const char *file, IGameConfig **pConfig, char *error, size_t maxlength);
dvander@592
    75
	void CloseGameConfigFile(IGameConfig *cfg);
dvander@592
    76
public: //SMGlobalClass
dvander@592
    77
	void OnSourceModStartup(bool late);
dvander@592
    78
	void OnSourceModAllInitialized();
dvander@592
    79
	void OnSourceModAllShutdown();
dvander@592
    80
private:
dvander@592
    81
	List<CGameConfig *> m_cfgs;
dvander@592
    82
	Trie *m_pLookup;
dvander@592
    83
};
dvander@592
    84
dvander@616
    85
extern GameConfigManager g_GameConfigs;
dvander@592
    86
extern IGameConfig *g_pGameConf;
dvander@592
    87
dvander@592
    88
#endif //_INCLUDE_SOURCEMOD_CGAMECONFIGS_H_