core/smn_halflife.cpp
author David Anderson <dvander@alliedmods.net>
Thu Apr 05 07:09:17 2007 +0000 (2007-04-05)
changeset 667 0347227ef615
parent 659 edd2ead1f13e
child 682 a70055d6d3b3
permissions -rw-r--r--
added file headers
dvander@530
     1
/**
ds@653
     2
 * vim: set ts=4 :
dvander@530
     3
 * ===============================================================
dvander@530
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@530
     5
 * ===============================================================
dvander@530
     6
 *
dvander@530
     7
 * This file is not open source and may not be copied without explicit
dvander@530
     8
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@530
     9
 * in whole or significant part.
dvander@530
    10
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@530
    11
 *
dvander@530
    12
 * Version: $Id$
dvander@530
    13
 */
dvander@530
    14
dvander@530
    15
#include "sm_globals.h"
dvander@532
    16
#include "sourcemod.h"
dvander@530
    17
#include "sourcemm_api.h"
dvander@591
    18
#include "PlayerManager.h"
dvander@530
    19
dvander@530
    20
static cell_t SetRandomSeed(IPluginContext *pContext, const cell_t *params)
dvander@530
    21
{
dvander@530
    22
	engrandom->SetSeed(params[1]);
dvander@530
    23
dvander@530
    24
	return 1;
dvander@530
    25
}
dvander@530
    26
dvander@530
    27
static cell_t GetRandomFloat(IPluginContext *pContext, const cell_t *params)
dvander@530
    28
{
dvander@530
    29
	float fMin = sp_ctof(params[1]);
dvander@530
    30
	float fMax = sp_ctof(params[2]);
dvander@530
    31
dvander@530
    32
	float fRandom = engrandom->RandomFloat(fMin, fMax);
dvander@530
    33
dvander@530
    34
	return sp_ftoc(fRandom);
dvander@530
    35
}
dvander@530
    36
dvander@530
    37
static cell_t GetRandomInt(IPluginContext *pContext, const cell_t *params)
dvander@530
    38
{
dvander@530
    39
	return engrandom->RandomInt(params[1], params[2]);
dvander@530
    40
}
dvander@530
    41
dvander@532
    42
static cell_t IsMapValid(IPluginContext *pContext, const cell_t *params)
dvander@532
    43
{
dvander@532
    44
	char *map;
dvander@532
    45
	pContext->LocalToString(params[1], &map);
dvander@532
    46
dvander@532
    47
	return engine->IsMapValid(map);
dvander@532
    48
}
dvander@532
    49
dvander@532
    50
static cell_t IsDedicatedServer(IPluginContext *pContext, const cell_t *params)
dvander@532
    51
{
dvander@532
    52
	return engine->IsDedicatedServer();
dvander@532
    53
}
dvander@532
    54
dvander@532
    55
static cell_t GetEngineTime(IPluginContext *pContext, const cell_t *params)
dvander@532
    56
{
dvander@532
    57
	float fTime = engine->Time();
dvander@532
    58
	return sp_ftoc(fTime);
dvander@532
    59
}
dvander@532
    60
dvander@532
    61
static cell_t GetGameTime(IPluginContext *pContext, const cell_t *params)
dvander@532
    62
{
dvander@532
    63
	return sp_ftoc(gpGlobals->curtime);
dvander@532
    64
}
dvander@532
    65
dvander@532
    66
static cell_t CreateFakeClient(IPluginContext *pContext, const cell_t *params)
dvander@532
    67
{
dvander@532
    68
	char *netname;
dvander@532
    69
dvander@532
    70
	pContext->LocalToString(params[1], &netname);
dvander@532
    71
dvander@532
    72
	edict_t *pEdict = engine->CreateFakeClient(netname);
dvander@532
    73
dvander@532
    74
	/* :TODO: does the engine fire forwards for us and whatnot? no idea... */
dvander@532
    75
dvander@532
    76
	if (!pEdict)
dvander@532
    77
	{
dvander@532
    78
		return 0;
dvander@532
    79
	}
dvander@532
    80
dvander@532
    81
	return engine->IndexOfEdict(pEdict);
dvander@532
    82
}
dvander@532
    83
dvander@532
    84
static cell_t SetFakeClientConVar(IPluginContext *pContext, const cell_t *params)
dvander@532
    85
{
dvander@532
    86
	CPlayer *pPlayer = g_Players.GetPlayerByIndex(params[1]);
dvander@532
    87
dvander@532
    88
	if (!pPlayer)
dvander@532
    89
	{
dvander@532
    90
		return pContext->ThrowNativeError("Player %d is not a valid player", params[1]);
dvander@532
    91
	}
dvander@532
    92
dvander@532
    93
	if (!pPlayer->IsConnected())
dvander@532
    94
	{
dvander@532
    95
		return pContext->ThrowNativeError("Player %d is not connected", params[1]);
dvander@532
    96
	}
dvander@532
    97
dvander@532
    98
	if (!pPlayer->IsFakeClient())
dvander@532
    99
	{
dvander@532
   100
		return pContext->ThrowNativeError("Player %d is not a fake client", params[1]);
dvander@532
   101
	}
dvander@532
   102
dvander@532
   103
	char *cvar, *value;
dvander@532
   104
dvander@532
   105
	pContext->LocalToString(params[2], &cvar);
dvander@532
   106
	pContext->LocalToString(params[3], &value);
dvander@532
   107
dvander@532
   108
	engine->SetFakeClientConVarValue(pPlayer->GetEdict(), cvar, value);
dvander@532
   109
dvander@532
   110
	return 1;
dvander@532
   111
}
dvander@532
   112
dvander@532
   113
static cell_t GetGameDescription(IPluginContext *pContext, const cell_t *params)
dvander@532
   114
{
dvander@532
   115
	const char *description;
dvander@532
   116
dvander@532
   117
	if (params[3])
dvander@532
   118
	{
dvander@532
   119
		description = gamedll->GetGameDescription();
dvander@532
   120
	} else {
dvander@532
   121
		description = SERVER_CALL(GetGameDescription)();
dvander@532
   122
	}
dvander@532
   123
dvander@532
   124
	size_t numBytes;
dvander@532
   125
	
dvander@532
   126
	pContext->StringToLocalUTF8(params[1], params[2], description, &numBytes);
dvander@532
   127
dvander@532
   128
	return numBytes;
dvander@532
   129
}
dvander@532
   130
dvander@532
   131
static cell_t GetCurrentMap(IPluginContext *pContext, const cell_t *params)
dvander@532
   132
{
dvander@532
   133
	size_t bytes;
dvander@532
   134
	pContext->StringToLocalUTF8(params[1], params[2], STRING(gpGlobals->mapname), &bytes);
dvander@532
   135
	return bytes;
dvander@532
   136
}
dvander@532
   137
faluco@656
   138
static cell_t PrecacheModel(IPluginContext *pContext, const cell_t *params)
faluco@656
   139
{
faluco@656
   140
	char *model;
faluco@656
   141
	pContext->LocalToString(params[1], &model);
faluco@656
   142
faluco@656
   143
	return engine->PrecacheModel(model, params[2] ? true : false);
faluco@656
   144
}
faluco@656
   145
faluco@656
   146
static cell_t PrecacheSentenceFile(IPluginContext *pContext, const cell_t *params)
faluco@656
   147
{
faluco@656
   148
	char *sentencefile;
faluco@656
   149
	pContext->LocalToString(params[1], &sentencefile);
faluco@656
   150
faluco@656
   151
	return engine->PrecacheSentenceFile(sentencefile, params[2] ? true : false);
faluco@656
   152
}
faluco@656
   153
faluco@656
   154
static cell_t PrecacheDecal(IPluginContext *pContext, const cell_t *params)
faluco@656
   155
{
faluco@656
   156
	char *decal;
faluco@656
   157
	pContext->LocalToString(params[1], &decal);
faluco@656
   158
faluco@656
   159
	return engine->PrecacheDecal(decal, params[2] ? true : false);
faluco@656
   160
}
faluco@656
   161
faluco@656
   162
static cell_t PrecacheGeneric(IPluginContext *pContext, const cell_t *params)
faluco@656
   163
{
faluco@656
   164
	char *generic;
faluco@656
   165
	pContext->LocalToString(params[1], &generic);
faluco@656
   166
faluco@656
   167
	return engine->PrecacheGeneric(generic, params[2] ? true : false);
faluco@656
   168
}
faluco@656
   169
faluco@656
   170
static cell_t IsModelPrecached(IPluginContext *pContext, const cell_t *params)
faluco@656
   171
{
faluco@656
   172
	char *model;
faluco@656
   173
	pContext->LocalToString(params[1], &model);
faluco@656
   174
faluco@656
   175
	return engine->IsModelPrecached(model) ? 1 : 0;
faluco@656
   176
}
faluco@656
   177
faluco@656
   178
static cell_t IsDecalPrecached(IPluginContext *pContext, const cell_t *params)
faluco@656
   179
{
faluco@656
   180
	char *decal;
faluco@656
   181
	pContext->LocalToString(params[1], &decal);
faluco@656
   182
faluco@656
   183
	return engine->IsDecalPrecached(decal) ? 1 : 0;
faluco@656
   184
}
faluco@656
   185
faluco@656
   186
static cell_t IsGenericPrecached(IPluginContext *pContext, const cell_t *params)
faluco@656
   187
{
faluco@656
   188
	char *generic;
faluco@656
   189
	pContext->LocalToString(params[1], &generic);
faluco@656
   190
faluco@656
   191
	return engine->IsGenericPrecached(generic) ? 1 : 0;
faluco@656
   192
}
faluco@656
   193
faluco@656
   194
static cell_t PrecacheSound(IPluginContext *pContext, const cell_t *params)
faluco@656
   195
{
faluco@656
   196
	char *sample;
faluco@656
   197
	pContext->LocalToString(params[1], &sample);
faluco@656
   198
faluco@656
   199
	return enginesound->PrecacheSound(sample, params[2] ? true : false) ? 1 : 0;
faluco@656
   200
}
faluco@656
   201
faluco@656
   202
static cell_t IsSoundPrecached(IPluginContext *pContext, const cell_t *params)
faluco@656
   203
{
faluco@656
   204
	char *sample;
faluco@656
   205
	pContext->LocalToString(params[1], &sample);
faluco@656
   206
faluco@656
   207
	return enginesound->IsSoundPrecached(sample) ? 1 : 0;
faluco@656
   208
}
faluco@656
   209
faluco@659
   210
static cell_t FakeClientCommand(IPluginContext *pContext, const cell_t *params)
faluco@659
   211
{
faluco@659
   212
	CPlayer *pPlayer = g_Players.GetPlayerByIndex(params[1]);
faluco@659
   213
faluco@659
   214
	if (!pPlayer)
faluco@659
   215
	{
faluco@659
   216
		return pContext->ThrowNativeError("Player %d is not a valid player", params[1]);
faluco@659
   217
	}
faluco@659
   218
faluco@659
   219
	if (!pPlayer->IsConnected())
faluco@659
   220
	{
faluco@659
   221
		return pContext->ThrowNativeError("Player %d is not connected", params[1]);
faluco@659
   222
	}
faluco@659
   223
faluco@659
   224
	char buffer[256];
faluco@659
   225
	g_SourceMod.FormatString(buffer, sizeof(buffer)-1, pContext, params, 2);
faluco@659
   226
faluco@659
   227
	serverpluginhelpers->ClientCommand(pPlayer->GetEdict(), buffer);
faluco@659
   228
faluco@659
   229
	return 1;
faluco@659
   230
}
faluco@659
   231
dvander@530
   232
REGISTER_NATIVES(halflifeNatives)
dvander@530
   233
{
dvander@532
   234
	{"CreateFakeClient",		CreateFakeClient},
dvander@532
   235
	{"GetCurrentMap",			GetCurrentMap},
dvander@532
   236
	{"GetEngineTime",			GetEngineTime},
dvander@532
   237
	{"GetGameDescription",		GetGameDescription},
dvander@532
   238
	{"GetGameTime",				GetGameTime},
dvander@530
   239
	{"GetRandomFloat",			GetRandomFloat},
dvander@530
   240
	{"GetRandomInt",			GetRandomInt},
dvander@532
   241
	{"IsDedicatedServer",		IsDedicatedServer},
dvander@532
   242
	{"IsMapValid",				IsMapValid},
dvander@532
   243
	{"SetFakeClientConVar",		SetFakeClientConVar},
dvander@532
   244
	{"SetRandomSeed",			SetRandomSeed},
faluco@656
   245
	{"PrecacheModel",			PrecacheModel},
faluco@656
   246
	{"PrecacheSentenceFile",	PrecacheSentenceFile},
faluco@656
   247
	{"PrecacheDecal",			PrecacheDecal},
faluco@656
   248
	{"PrecacheGeneric",			PrecacheGeneric},
faluco@656
   249
	{"IsModelPrecached",		IsModelPrecached},
faluco@656
   250
	{"IsDecalPrecached",		IsDecalPrecached},
faluco@656
   251
	{"IsGenericPrecached",		IsGenericPrecached},
faluco@656
   252
	{"PrecacheSound",			PrecacheSound},
faluco@656
   253
	{"IsSoundPrecached",		IsSoundPrecached},
faluco@659
   254
	{"FakeClientCommand",		FakeClientCommand},
dvander@530
   255
	{NULL,						NULL},
dvander@530
   256
};