dvander@530: /** dvander@530: * =============================================================== dvander@530: * SourceMod (C)2004-2007 AlliedModders LLC. All rights reserved. dvander@530: * =============================================================== dvander@530: * dvander@530: * This file is not open source and may not be copied without explicit dvander@530: * written permission of AlliedModders LLC. This file may not be redistributed dvander@530: * in whole or significant part. dvander@530: * For information, see LICENSE.txt or http://www.sourcemod.net/license.php dvander@530: * dvander@530: * Version: $Id$ dvander@530: */ dvander@530: dvander@530: #include "sm_globals.h" dvander@532: #include "sourcemod.h" dvander@530: #include "sourcemm_api.h" dvander@591: #include "PlayerManager.h" dvander@530: dvander@530: static cell_t SetRandomSeed(IPluginContext *pContext, const cell_t *params) dvander@530: { dvander@530: engrandom->SetSeed(params[1]); dvander@530: dvander@530: return 1; dvander@530: } dvander@530: dvander@530: static cell_t GetRandomFloat(IPluginContext *pContext, const cell_t *params) dvander@530: { dvander@530: float fMin = sp_ctof(params[1]); dvander@530: float fMax = sp_ctof(params[2]); dvander@530: dvander@530: float fRandom = engrandom->RandomFloat(fMin, fMax); dvander@530: dvander@530: return sp_ftoc(fRandom); dvander@530: } dvander@530: dvander@530: static cell_t GetRandomInt(IPluginContext *pContext, const cell_t *params) dvander@530: { dvander@530: return engrandom->RandomInt(params[1], params[2]); dvander@530: } dvander@530: dvander@532: static cell_t IsMapValid(IPluginContext *pContext, const cell_t *params) dvander@532: { dvander@532: char *map; dvander@532: pContext->LocalToString(params[1], &map); dvander@532: dvander@532: return engine->IsMapValid(map); dvander@532: } dvander@532: dvander@532: static cell_t IsDedicatedServer(IPluginContext *pContext, const cell_t *params) dvander@532: { dvander@532: return engine->IsDedicatedServer(); dvander@532: } dvander@532: dvander@532: static cell_t GetEngineTime(IPluginContext *pContext, const cell_t *params) dvander@532: { dvander@532: float fTime = engine->Time(); dvander@532: return sp_ftoc(fTime); dvander@532: } dvander@532: dvander@532: static cell_t GetGameTime(IPluginContext *pContext, const cell_t *params) dvander@532: { dvander@532: return sp_ftoc(gpGlobals->curtime); dvander@532: } dvander@532: dvander@532: static cell_t CreateFakeClient(IPluginContext *pContext, const cell_t *params) dvander@532: { dvander@532: char *netname; dvander@532: dvander@532: pContext->LocalToString(params[1], &netname); dvander@532: dvander@532: edict_t *pEdict = engine->CreateFakeClient(netname); dvander@532: dvander@532: /* :TODO: does the engine fire forwards for us and whatnot? no idea... */ dvander@532: dvander@532: if (!pEdict) dvander@532: { dvander@532: return 0; dvander@532: } dvander@532: dvander@532: return engine->IndexOfEdict(pEdict); dvander@532: } dvander@532: dvander@532: static cell_t SetFakeClientConVar(IPluginContext *pContext, const cell_t *params) dvander@532: { dvander@532: CPlayer *pPlayer = g_Players.GetPlayerByIndex(params[1]); dvander@532: dvander@532: if (!pPlayer) dvander@532: { dvander@532: return pContext->ThrowNativeError("Player %d is not a valid player", params[1]); dvander@532: } dvander@532: dvander@532: if (!pPlayer->IsConnected()) dvander@532: { dvander@532: return pContext->ThrowNativeError("Player %d is not connected", params[1]); dvander@532: } dvander@532: dvander@532: if (!pPlayer->IsFakeClient()) dvander@532: { dvander@532: return pContext->ThrowNativeError("Player %d is not a fake client", params[1]); dvander@532: } dvander@532: dvander@532: char *cvar, *value; dvander@532: dvander@532: pContext->LocalToString(params[2], &cvar); dvander@532: pContext->LocalToString(params[3], &value); dvander@532: dvander@532: engine->SetFakeClientConVarValue(pPlayer->GetEdict(), cvar, value); dvander@532: dvander@532: return 1; dvander@532: } dvander@532: dvander@532: static cell_t GetGameDescription(IPluginContext *pContext, const cell_t *params) dvander@532: { dvander@532: const char *description; dvander@532: dvander@532: if (params[3]) dvander@532: { dvander@532: description = gamedll->GetGameDescription(); dvander@532: } else { dvander@532: description = SERVER_CALL(GetGameDescription)(); dvander@532: } dvander@532: dvander@532: size_t numBytes; dvander@532: dvander@532: pContext->StringToLocalUTF8(params[1], params[2], description, &numBytes); dvander@532: dvander@532: return numBytes; dvander@532: } dvander@532: dvander@532: static cell_t GetCurrentMap(IPluginContext *pContext, const cell_t *params) dvander@532: { dvander@532: size_t bytes; dvander@532: pContext->StringToLocalUTF8(params[1], params[2], STRING(gpGlobals->mapname), &bytes); dvander@532: return bytes; dvander@532: } dvander@532: dvander@530: REGISTER_NATIVES(halflifeNatives) dvander@530: { dvander@532: {"CreateFakeClient", CreateFakeClient}, dvander@532: {"GetCurrentMap", GetCurrentMap}, dvander@532: {"GetEngineTime", GetEngineTime}, dvander@532: {"GetGameDescription", GetGameDescription}, dvander@532: {"GetGameTime", GetGameTime}, dvander@530: {"GetRandomFloat", GetRandomFloat}, dvander@530: {"GetRandomInt", GetRandomInt}, dvander@532: {"IsDedicatedServer", IsDedicatedServer}, dvander@532: {"IsMapValid", IsMapValid}, dvander@532: {"SetFakeClientConVar", SetFakeClientConVar}, dvander@532: {"SetRandomSeed", SetRandomSeed}, dvander@530: {NULL, NULL}, dvander@530: };