core/smn_halflife.cpp
author David Anderson <dvander@alliedmods.net>
Thu Mar 15 04:45:33 2007 +0000 (2007-03-15)
changeset 617 dc7671b320e4
parent 591 86e97f3eda1f
child 653 ef60870067ff
permissions -rw-r--r--
fixed two spelling mistakes
dvander@530
     1
/**
dvander@530
     2
 * ===============================================================
dvander@530
     3
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@530
     4
 * ===============================================================
dvander@530
     5
 *
dvander@530
     6
 * This file is not open source and may not be copied without explicit
dvander@530
     7
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@530
     8
 * in whole or significant part.
dvander@530
     9
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@530
    10
 *
dvander@530
    11
 * Version: $Id$
dvander@530
    12
 */
dvander@530
    13
dvander@530
    14
#include "sm_globals.h"
dvander@532
    15
#include "sourcemod.h"
dvander@530
    16
#include "sourcemm_api.h"
dvander@591
    17
#include "PlayerManager.h"
dvander@530
    18
dvander@530
    19
static cell_t SetRandomSeed(IPluginContext *pContext, const cell_t *params)
dvander@530
    20
{
dvander@530
    21
	engrandom->SetSeed(params[1]);
dvander@530
    22
dvander@530
    23
	return 1;
dvander@530
    24
}
dvander@530
    25
dvander@530
    26
static cell_t GetRandomFloat(IPluginContext *pContext, const cell_t *params)
dvander@530
    27
{
dvander@530
    28
	float fMin = sp_ctof(params[1]);
dvander@530
    29
	float fMax = sp_ctof(params[2]);
dvander@530
    30
dvander@530
    31
	float fRandom = engrandom->RandomFloat(fMin, fMax);
dvander@530
    32
dvander@530
    33
	return sp_ftoc(fRandom);
dvander@530
    34
}
dvander@530
    35
dvander@530
    36
static cell_t GetRandomInt(IPluginContext *pContext, const cell_t *params)
dvander@530
    37
{
dvander@530
    38
	return engrandom->RandomInt(params[1], params[2]);
dvander@530
    39
}
dvander@530
    40
dvander@532
    41
static cell_t IsMapValid(IPluginContext *pContext, const cell_t *params)
dvander@532
    42
{
dvander@532
    43
	char *map;
dvander@532
    44
	pContext->LocalToString(params[1], &map);
dvander@532
    45
dvander@532
    46
	return engine->IsMapValid(map);
dvander@532
    47
}
dvander@532
    48
dvander@532
    49
static cell_t IsDedicatedServer(IPluginContext *pContext, const cell_t *params)
dvander@532
    50
{
dvander@532
    51
	return engine->IsDedicatedServer();
dvander@532
    52
}
dvander@532
    53
dvander@532
    54
static cell_t GetEngineTime(IPluginContext *pContext, const cell_t *params)
dvander@532
    55
{
dvander@532
    56
	float fTime = engine->Time();
dvander@532
    57
	return sp_ftoc(fTime);
dvander@532
    58
}
dvander@532
    59
dvander@532
    60
static cell_t GetGameTime(IPluginContext *pContext, const cell_t *params)
dvander@532
    61
{
dvander@532
    62
	return sp_ftoc(gpGlobals->curtime);
dvander@532
    63
}
dvander@532
    64
dvander@532
    65
static cell_t CreateFakeClient(IPluginContext *pContext, const cell_t *params)
dvander@532
    66
{
dvander@532
    67
	char *netname;
dvander@532
    68
dvander@532
    69
	pContext->LocalToString(params[1], &netname);
dvander@532
    70
dvander@532
    71
	edict_t *pEdict = engine->CreateFakeClient(netname);
dvander@532
    72
dvander@532
    73
	/* :TODO: does the engine fire forwards for us and whatnot? no idea... */
dvander@532
    74
dvander@532
    75
	if (!pEdict)
dvander@532
    76
	{
dvander@532
    77
		return 0;
dvander@532
    78
	}
dvander@532
    79
dvander@532
    80
	return engine->IndexOfEdict(pEdict);
dvander@532
    81
}
dvander@532
    82
dvander@532
    83
static cell_t SetFakeClientConVar(IPluginContext *pContext, const cell_t *params)
dvander@532
    84
{
dvander@532
    85
	CPlayer *pPlayer = g_Players.GetPlayerByIndex(params[1]);
dvander@532
    86
dvander@532
    87
	if (!pPlayer)
dvander@532
    88
	{
dvander@532
    89
		return pContext->ThrowNativeError("Player %d is not a valid player", params[1]);
dvander@532
    90
	}
dvander@532
    91
dvander@532
    92
	if (!pPlayer->IsConnected())
dvander@532
    93
	{
dvander@532
    94
		return pContext->ThrowNativeError("Player %d is not connected", params[1]);
dvander@532
    95
	}
dvander@532
    96
dvander@532
    97
	if (!pPlayer->IsFakeClient())
dvander@532
    98
	{
dvander@532
    99
		return pContext->ThrowNativeError("Player %d is not a fake client", params[1]);
dvander@532
   100
	}
dvander@532
   101
dvander@532
   102
	char *cvar, *value;
dvander@532
   103
dvander@532
   104
	pContext->LocalToString(params[2], &cvar);
dvander@532
   105
	pContext->LocalToString(params[3], &value);
dvander@532
   106
dvander@532
   107
	engine->SetFakeClientConVarValue(pPlayer->GetEdict(), cvar, value);
dvander@532
   108
dvander@532
   109
	return 1;
dvander@532
   110
}
dvander@532
   111
dvander@532
   112
static cell_t GetGameDescription(IPluginContext *pContext, const cell_t *params)
dvander@532
   113
{
dvander@532
   114
	const char *description;
dvander@532
   115
dvander@532
   116
	if (params[3])
dvander@532
   117
	{
dvander@532
   118
		description = gamedll->GetGameDescription();
dvander@532
   119
	} else {
dvander@532
   120
		description = SERVER_CALL(GetGameDescription)();
dvander@532
   121
	}
dvander@532
   122
dvander@532
   123
	size_t numBytes;
dvander@532
   124
	
dvander@532
   125
	pContext->StringToLocalUTF8(params[1], params[2], description, &numBytes);
dvander@532
   126
dvander@532
   127
	return numBytes;
dvander@532
   128
}
dvander@532
   129
dvander@532
   130
static cell_t GetCurrentMap(IPluginContext *pContext, const cell_t *params)
dvander@532
   131
{
dvander@532
   132
	size_t bytes;
dvander@532
   133
	pContext->StringToLocalUTF8(params[1], params[2], STRING(gpGlobals->mapname), &bytes);
dvander@532
   134
	return bytes;
dvander@532
   135
}
dvander@532
   136
dvander@530
   137
REGISTER_NATIVES(halflifeNatives)
dvander@530
   138
{
dvander@532
   139
	{"CreateFakeClient",		CreateFakeClient},
dvander@532
   140
	{"GetCurrentMap",			GetCurrentMap},
dvander@532
   141
	{"GetEngineTime",			GetEngineTime},
dvander@532
   142
	{"GetGameDescription",		GetGameDescription},
dvander@532
   143
	{"GetGameTime",				GetGameTime},
dvander@530
   144
	{"GetRandomFloat",			GetRandomFloat},
dvander@530
   145
	{"GetRandomInt",			GetRandomInt},
dvander@532
   146
	{"IsDedicatedServer",		IsDedicatedServer},
dvander@532
   147
	{"IsMapValid",				IsMapValid},
dvander@532
   148
	{"SetFakeClientConVar",		SetFakeClientConVar},
dvander@532
   149
	{"SetRandomSeed",			SetRandomSeed},
dvander@530
   150
	{NULL,						NULL},
dvander@530
   151
};