extensions/sdktools/extension.cpp
author David Anderson <dvander@alliedmods.net>
Sat Jun 16 18:03:05 2007 +0000 (2007-06-16)
changeset 954 3dd58fa4ccdc
parent 950 ac855ba24c7d
child 995 7dbca35a6414
permissions -rw-r--r--
- added bool type
- added pointer support
- added three default natives
- added include file for sdktools
- cleaned up decoding api a bit
ds@783
     1
/**
ds@783
     2
 * vim: set ts=4 :
ds@783
     3
 * ===============================================================
ds@783
     4
 * SourceMod SDK Tools Extension
ds@783
     5
 * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
ds@783
     6
 * ===============================================================
ds@783
     7
 *
ds@783
     8
 * This program is free software; you can redistribute it and/or
ds@783
     9
 * modify it under the terms of the GNU General Public License
ds@783
    10
 * as published by the Free Software Foundation; either version 2
ds@783
    11
 * of the License, or (at your option) any later version.
ds@783
    12
 * This program is distributed in the hope that it will be useful,
ds@783
    13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ds@783
    14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
ds@783
    15
 * GNU General Public License for more details.
ds@783
    16
 * 
ds@783
    17
 * You should have received a copy of the GNU General Public License
ds@783
    18
 * along with this program; if not, write to the Free Software
ds@783
    19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
ds@783
    20
 *
ds@783
    21
 * Version: $Id$
ds@783
    22
 */
ds@783
    23
ds@783
    24
#include "extension.h"
dvander@950
    25
#include "vcallbuilder.h"
dvander@954
    26
#include "vnatives.h"
ds@783
    27
ds@783
    28
/**
ds@783
    29
 * @file extension.cpp
ds@783
    30
 * @brief Implement extension code here.
ds@783
    31
 */
ds@783
    32
ds@783
    33
SDKTools g_SdkTools;		/**< Global singleton for extension's main interface */
ds@783
    34
IServerGameEnts *gameents = NULL;
ds@783
    35
IBinTools *g_pBinTools = NULL;
dvander@950
    36
IGameConfig *g_pGameConf = NULL;
dvander@950
    37
HandleType_t g_CallHandle = 0;
ds@783
    38
ds@783
    39
SMEXT_LINK(&g_SdkTools);
ds@783
    40
dvander@950
    41
extern sp_nativeinfo_t g_CallNatives[];
dvander@950
    42
ds@783
    43
bool SDKTools::SDK_OnLoad(char *error, size_t maxlength, bool late)
ds@783
    44
{
dvander@950
    45
	sharesys->AddDependency(myself, "bintools.ext", true, true);
dvander@950
    46
	sharesys->AddNatives(myself, g_CallNatives);
dvander@954
    47
	sharesys->AddNatives(myself, g_Natives);
ds@783
    48
dvander@950
    49
	if (!gameconfs->LoadGameConfigFile("sdktools.games", &g_pGameConf, error, maxlength))
dvander@950
    50
	{
dvander@950
    51
		return false;
dvander@950
    52
	}
dvander@950
    53
dvander@950
    54
	g_CallHandle = handlesys->CreateType("ValveCall", this, 0, NULL, NULL, myself->GetIdentity(), NULL);
ds@783
    55
ds@783
    56
	return true;
ds@783
    57
}
ds@783
    58
dvander@950
    59
void SDKTools::OnHandleDestroy(HandleType_t type, void *object)
dvander@950
    60
{
dvander@950
    61
	if (type == g_CallHandle)
dvander@950
    62
	{
dvander@950
    63
		ValveCall *v = (ValveCall *)object;
dvander@950
    64
		delete v;
dvander@950
    65
	}
dvander@950
    66
}
dvander@950
    67
dvander@950
    68
void SDKTools::SDK_OnUnload()
dvander@950
    69
{
dvander@954
    70
	List<ValveCall *>::iterator iter;
dvander@954
    71
	for (iter = g_RegCalls.begin();
dvander@954
    72
		 iter != g_RegCalls.end();
dvander@954
    73
		 iter++)
dvander@954
    74
	{
dvander@954
    75
		delete (*iter);
dvander@954
    76
	}
dvander@954
    77
	g_RegCalls.clear();
dvander@954
    78
dvander@950
    79
	gameconfs->CloseGameConfigFile(g_pGameConf);
dvander@950
    80
}
dvander@950
    81
ds@783
    82
bool SDKTools::SDK_OnMetamodLoad(ISmmAPI *ismm, char *error, size_t maxlen, bool late)
ds@783
    83
{
ds@783
    84
	GET_V_IFACE_CURRENT(serverFactory, gameents, IServerGameEnts, INTERFACEVERSION_SERVERGAMEENTS);
ds@783
    85
ds@783
    86
	return true;
ds@783
    87
}
ds@783
    88
ds@783
    89
void SDKTools::SDK_OnAllLoaded()
ds@783
    90
{
ds@783
    91
	SM_GET_LATE_IFACE(BINTOOLS, g_pBinTools);
ds@783
    92
}
ds@783
    93
ds@783
    94
bool SDKTools::QueryRunning(char *error, size_t maxlength)
ds@783
    95
{
ds@783
    96
	SM_CHECK_IFACE(BINTOOLS, g_pBinTools);
ds@783
    97
ds@783
    98
	return true;
ds@783
    99
}