core/smn_console.cpp
author David Anderson <dvander@alliedmods.net>
Mon Feb 26 09:21:08 2007 +0000 (2007-02-26)
changeset 539 fa7e8a232a18
parent 532 fe6bb91d79b1
child 562 cfce5c6faef6
permissions -rw-r--r--
fixed stupid export
dvander@498
     1
/**
dvander@498
     2
* ===============================================================
dvander@498
     3
* SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@498
     4
* ===============================================================
dvander@498
     5
*
dvander@498
     6
* This file is not open source and may not be copied without explicit
dvander@498
     7
* written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@498
     8
* in whole or significant part.
dvander@498
     9
* For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@498
    10
*
dvander@498
    11
* Version: $Id$
dvander@498
    12
*/
dvander@498
    13
dvander@498
    14
#include "sm_globals.h"
dvander@498
    15
#include "sourcemm_api.h"
dvander@498
    16
#include "HandleSys.h"
dvander@498
    17
#include "CConVarManager.h"
dvander@498
    18
#include "CConCmdManager.h"
dvander@514
    19
#include "PluginSys.h"
dvander@518
    20
#include "sm_stringutil.h"
dvander@518
    21
#include "CPlayerManager.h"
dvander@498
    22
dvander@498
    23
static cell_t sm_CreateConVar(IPluginContext *pContext, const cell_t *params)
dvander@498
    24
{
dvander@498
    25
	char *name, *defaultVal, *helpText;
dvander@498
    26
dvander@498
    27
	pContext->LocalToString(params[1], &name);
dvander@498
    28
dvander@498
    29
	// While the engine seems to accept a blank convar name, it causes a crash upon server quit
dvander@498
    30
	if (name == NULL || strcmp(name, "") == 0)
dvander@498
    31
	{
dvander@498
    32
		return pContext->ThrowNativeError("Null or blank convar name is not allowed");
dvander@498
    33
	}
dvander@498
    34
dvander@498
    35
	pContext->LocalToString(params[2], &defaultVal);
dvander@498
    36
	pContext->LocalToString(params[3], &helpText);
dvander@498
    37
dvander@498
    38
	bool hasMin = params[5] ? true : false;
dvander@498
    39
	bool hasMax = params[7] ? true : false;
dvander@498
    40
	float min = sp_ctof(params[6]);
dvander@498
    41
	float max = sp_ctof(params[8]);
dvander@498
    42
dvander@498
    43
	return g_ConVarManager.CreateConVar(pContext, name, defaultVal, helpText, params[4], hasMin, min, hasMax, max);
dvander@498
    44
}
dvander@498
    45
dvander@498
    46
static cell_t sm_FindConVar(IPluginContext *pContext, const cell_t *params)
dvander@498
    47
{
dvander@498
    48
	char *name;
dvander@498
    49
dvander@498
    50
	pContext->LocalToString(params[1], &name);
dvander@498
    51
dvander@498
    52
	// While the engine seems to accept a blank convar name, it causes a crash upon server quit
dvander@498
    53
	if (name == NULL || strcmp(name, "") == 0)
dvander@498
    54
	{
dvander@498
    55
		return BAD_HANDLE;
dvander@498
    56
	}
dvander@498
    57
dvander@498
    58
	return g_ConVarManager.FindConVar(name);
dvander@498
    59
}
dvander@498
    60
dvander@498
    61
static cell_t sm_HookConVarChange(IPluginContext *pContext, const cell_t *params)
dvander@498
    62
{
dvander@498
    63
	Handle_t hndl = static_cast<Handle_t>(params[1]);
dvander@498
    64
	HandleError err;
dvander@498
    65
	ConVar *cvar;
dvander@498
    66
dvander@498
    67
	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
dvander@498
    68
		!= HandleError_None)
dvander@498
    69
	{
dvander@498
    70
		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
dvander@498
    71
	}
dvander@498
    72
dvander@498
    73
	g_ConVarManager.HookConVarChange(pContext, cvar, static_cast<funcid_t>(params[2]));
dvander@498
    74
dvander@498
    75
	return 1;
dvander@498
    76
}
dvander@498
    77
dvander@498
    78
static cell_t sm_UnhookConVarChange(IPluginContext *pContext, const cell_t *params)
dvander@498
    79
{
dvander@498
    80
	Handle_t hndl = static_cast<Handle_t>(params[1]);
dvander@498
    81
	HandleError err;
dvander@498
    82
	ConVar *cvar;
dvander@498
    83
dvander@498
    84
	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
dvander@498
    85
		!= HandleError_None)
dvander@498
    86
	{
dvander@498
    87
		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
dvander@498
    88
	}
dvander@498
    89
dvander@498
    90
	g_ConVarManager.UnhookConVarChange(pContext, cvar, static_cast<funcid_t>(params[2]));
dvander@498
    91
dvander@498
    92
	return 1;
dvander@498
    93
}
dvander@498
    94
dvander@498
    95
static cell_t sm_GetConVarBool(IPluginContext *pContext, const cell_t *params)
dvander@498
    96
{
dvander@498
    97
	Handle_t hndl = static_cast<Handle_t>(params[1]);
dvander@498
    98
	HandleError err;
dvander@498
    99
	ConVar *cvar;
dvander@498
   100
dvander@498
   101
	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
dvander@498
   102
		!= HandleError_None)
dvander@498
   103
	{
dvander@498
   104
		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
dvander@498
   105
	}
dvander@498
   106
dvander@498
   107
	return cvar->GetBool();
dvander@498
   108
}
dvander@498
   109
dvander@498
   110
static cell_t sm_GetConVarInt(IPluginContext *pContext, const cell_t *params)
dvander@498
   111
{
dvander@498
   112
	Handle_t hndl = static_cast<Handle_t>(params[1]);
dvander@498
   113
	HandleError err;
dvander@498
   114
	ConVar *cvar;
dvander@498
   115
dvander@498
   116
	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
dvander@498
   117
		!= HandleError_None)
dvander@498
   118
	{
dvander@498
   119
		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
dvander@498
   120
	}
dvander@498
   121
dvander@498
   122
	return cvar->GetInt();
dvander@498
   123
}
dvander@498
   124
dvander@498
   125
/* This handles both SetConVarBool() and SetConVarInt() */
dvander@498
   126
static cell_t sm_SetConVarNum(IPluginContext *pContext, const cell_t *params)
dvander@498
   127
{
dvander@498
   128
	Handle_t hndl = static_cast<Handle_t>(params[1]);
dvander@498
   129
	HandleError err;
dvander@498
   130
	ConVar *cvar;
dvander@498
   131
dvander@498
   132
	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
dvander@498
   133
		!= HandleError_None)
dvander@498
   134
	{
dvander@498
   135
		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
dvander@498
   136
	}
dvander@498
   137
dvander@498
   138
	cvar->SetValue(params[2]);
dvander@498
   139
dvander@498
   140
	return 1;
dvander@498
   141
}
dvander@498
   142
dvander@498
   143
static cell_t sm_GetConVarFloat(IPluginContext *pContext, const cell_t *params)
dvander@498
   144
{
dvander@498
   145
	Handle_t hndl = static_cast<Handle_t>(params[1]);
dvander@498
   146
	HandleError err;
dvander@498
   147
	ConVar *cvar;
dvander@498
   148
dvander@498
   149
	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
dvander@498
   150
		!= HandleError_None)
dvander@498
   151
	{
dvander@498
   152
		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
dvander@498
   153
	}
dvander@498
   154
	
dvander@498
   155
	float value = cvar->GetFloat();
dvander@498
   156
dvander@498
   157
	return sp_ftoc(value);
dvander@498
   158
}
dvander@498
   159
dvander@498
   160
static cell_t sm_SetConVarFloat(IPluginContext *pContext, const cell_t *params)
dvander@498
   161
{
dvander@498
   162
	Handle_t hndl = static_cast<Handle_t>(params[1]);
dvander@498
   163
	HandleError err;
dvander@498
   164
	ConVar *cvar;
dvander@498
   165
dvander@498
   166
	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
dvander@498
   167
		!= HandleError_None)
dvander@498
   168
	{
dvander@498
   169
		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
dvander@498
   170
	}
dvander@498
   171
dvander@498
   172
	float value = sp_ctof(params[2]);
dvander@498
   173
	cvar->SetValue(value);
dvander@498
   174
dvander@498
   175
	return 1;
dvander@498
   176
}
dvander@498
   177
dvander@498
   178
static cell_t sm_GetConVarString(IPluginContext *pContext, const cell_t *params)
dvander@498
   179
{
dvander@498
   180
	Handle_t hndl = static_cast<Handle_t>(params[1]);
dvander@498
   181
	HandleError err;
dvander@498
   182
	ConVar *cvar;
dvander@498
   183
dvander@498
   184
	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
dvander@498
   185
		!= HandleError_None)
dvander@498
   186
	{
dvander@498
   187
		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
dvander@498
   188
	}
dvander@498
   189
dvander@498
   190
	pContext->StringToLocalUTF8(params[2], params[3], cvar->GetString(), NULL);
dvander@498
   191
dvander@498
   192
	return 1;
dvander@498
   193
}
dvander@498
   194
dvander@498
   195
static cell_t sm_SetConVarString(IPluginContext *pContext, const cell_t *params)
dvander@498
   196
{
dvander@498
   197
	Handle_t hndl = static_cast<Handle_t>(params[1]);
dvander@498
   198
	HandleError err;
dvander@498
   199
	ConVar *cvar;
dvander@498
   200
dvander@498
   201
	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
dvander@498
   202
		!= HandleError_None)
dvander@498
   203
	{
dvander@498
   204
		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
dvander@498
   205
	}
dvander@498
   206
dvander@498
   207
	char *value;
dvander@498
   208
	pContext->LocalToString(params[2], &value);
dvander@498
   209
dvander@498
   210
	cvar->SetValue(value);
dvander@498
   211
dvander@498
   212
	return 1;
dvander@498
   213
}
dvander@498
   214
dvander@498
   215
static cell_t sm_GetConVarFlags(IPluginContext *pContext, const cell_t *params)
dvander@498
   216
{
dvander@498
   217
	Handle_t hndl = static_cast<Handle_t>(params[1]);
dvander@498
   218
	HandleError err;
dvander@498
   219
	ConVar *cvar;
dvander@498
   220
dvander@498
   221
	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
dvander@498
   222
		!= HandleError_None)
dvander@498
   223
	{
dvander@498
   224
		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
dvander@498
   225
	}
dvander@498
   226
dvander@498
   227
	return cvar->GetFlags();
dvander@498
   228
}
dvander@498
   229
dvander@498
   230
static cell_t sm_SetConVarFlags(IPluginContext *pContext, const cell_t *params)
dvander@498
   231
{
dvander@498
   232
	Handle_t hndl = static_cast<Handle_t>(params[1]);
dvander@498
   233
	HandleError err;
dvander@498
   234
	ConVar *cvar;
dvander@498
   235
dvander@498
   236
	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
dvander@498
   237
		!= HandleError_None)
dvander@498
   238
	{
dvander@498
   239
		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
dvander@498
   240
	}
dvander@498
   241
dvander@498
   242
	cvar->SetFlags(params[2]);
dvander@498
   243
dvander@498
   244
	return 1;
dvander@498
   245
}
dvander@498
   246
dvander@498
   247
static cell_t sm_GetConVarMin(IPluginContext *pContext, const cell_t *params)
dvander@498
   248
{
dvander@498
   249
	Handle_t hndl = static_cast<Handle_t>(params[1]);
dvander@498
   250
	HandleError err;
dvander@498
   251
	ConVar *cvar;
dvander@498
   252
dvander@498
   253
	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
dvander@498
   254
		!= HandleError_None)
dvander@498
   255
	{
dvander@498
   256
		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
dvander@498
   257
	}
dvander@498
   258
dvander@498
   259
	cell_t *addr;
dvander@498
   260
	bool hasMin;
dvander@498
   261
	float min;
dvander@498
   262
dvander@498
   263
	pContext->LocalToPhysAddr(params[2], &addr);
dvander@498
   264
dvander@498
   265
	hasMin = cvar->GetMin(min);
dvander@498
   266
	*addr = sp_ftoc(min);
dvander@498
   267
dvander@498
   268
	return hasMin;
dvander@498
   269
}
dvander@498
   270
dvander@498
   271
static cell_t sm_GetConVarMax(IPluginContext *pContext, const cell_t *params)
dvander@498
   272
{
dvander@498
   273
	Handle_t hndl = static_cast<Handle_t>(params[1]);
dvander@498
   274
	HandleError err;
dvander@498
   275
	ConVar *cvar;
dvander@498
   276
dvander@498
   277
	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
dvander@498
   278
		!= HandleError_None)
dvander@498
   279
	{
dvander@498
   280
		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
dvander@498
   281
	}
dvander@498
   282
dvander@498
   283
	cell_t *addr;
dvander@498
   284
	bool hasMax;
dvander@498
   285
	float max;
dvander@498
   286
dvander@498
   287
	pContext->LocalToPhysAddr(params[2], &addr);
dvander@498
   288
dvander@498
   289
	hasMax = cvar->GetMax(max);
dvander@498
   290
	*addr = sp_ftoc(max);
dvander@498
   291
dvander@498
   292
	return hasMax;
dvander@498
   293
}
dvander@498
   294
dvander@498
   295
static cell_t sm_GetConVarName(IPluginContext *pContext, const cell_t *params)
dvander@498
   296
{
dvander@498
   297
	Handle_t hndl = static_cast<Handle_t>(params[1]);
dvander@498
   298
	HandleError err;
dvander@498
   299
	ConVar *cvar;
dvander@498
   300
dvander@498
   301
	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
dvander@498
   302
		!= HandleError_None)
dvander@498
   303
	{
dvander@498
   304
		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
dvander@498
   305
	}
dvander@498
   306
dvander@498
   307
	pContext->StringToLocalUTF8(params[2], params[3], cvar->GetName(), NULL);
dvander@498
   308
dvander@498
   309
	return 1;
dvander@498
   310
}
dvander@498
   311
dvander@498
   312
static cell_t sm_ResetConVar(IPluginContext *pContext, const cell_t *params)
dvander@498
   313
{
dvander@498
   314
	Handle_t hndl = static_cast<Handle_t>(params[1]);
dvander@498
   315
	HandleError err;
dvander@498
   316
	ConVar *cvar;
dvander@498
   317
dvander@498
   318
	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
dvander@498
   319
		!= HandleError_None)
dvander@498
   320
	{
dvander@498
   321
		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
dvander@498
   322
	}
dvander@498
   323
dvander@498
   324
	cvar->Revert();
dvander@498
   325
dvander@498
   326
	return 1;
dvander@498
   327
}
dvander@498
   328
dvander@498
   329
static cell_t sm_RegServerCmd(IPluginContext *pContext, const cell_t *params)
dvander@498
   330
{
dvander@498
   331
	char *name,*help;
dvander@498
   332
	IPluginFunction *pFunction;
dvander@498
   333
dvander@498
   334
	pContext->LocalToString(params[1], &name);
dvander@498
   335
	pContext->LocalToString(params[3], &help);
dvander@498
   336
	pFunction = pContext->GetFunctionById(params[2]);
dvander@498
   337
dvander@498
   338
	if (!pFunction)
dvander@498
   339
	{
dvander@498
   340
		return pContext->ThrowNativeError("Invalid function id (%X)", params[2]);
dvander@498
   341
	}
dvander@498
   342
dvander@498
   343
	g_ConCmds.AddServerCommand(pFunction, name, help, params[4]);
dvander@498
   344
dvander@498
   345
	return 1;
dvander@498
   346
}
dvander@498
   347
dvander@500
   348
static cell_t sm_RegConsoleCmd(IPluginContext *pContext, const cell_t *params)
dvander@500
   349
{
dvander@500
   350
	char *name,*help;
dvander@500
   351
	IPluginFunction *pFunction;
dvander@500
   352
dvander@500
   353
	pContext->LocalToString(params[1], &name);
dvander@500
   354
	pContext->LocalToString(params[3], &help);
dvander@500
   355
	pFunction = pContext->GetFunctionById(params[2]);
dvander@500
   356
dvander@500
   357
	if (!pFunction)
dvander@500
   358
	{
dvander@500
   359
		return pContext->ThrowNativeError("Invalid function id (%X)", params[2]);
dvander@500
   360
	}
dvander@500
   361
dvander@500
   362
	g_ConCmds.AddConsoleCommand(pFunction, name, help, params[4]);
dvander@500
   363
dvander@500
   364
	return 1;
dvander@500
   365
}
dvander@500
   366
dvander@514
   367
static cell_t sm_RegAdminCmd(IPluginContext *pContext, const cell_t *params)
dvander@514
   368
{
dvander@514
   369
	char *name,*help;
dvander@514
   370
	const char *group;
dvander@514
   371
	IPluginFunction *pFunction;
dvander@514
   372
	FlagBits flags = params[3];
dvander@514
   373
	int cmdflags = params[6];
dvander@514
   374
dvander@514
   375
	pContext->LocalToString(params[1], &name);
dvander@514
   376
	pContext->LocalToString(params[4], &help);
dvander@514
   377
	pContext->LocalToString(params[5], (char **)&group);
dvander@514
   378
	pFunction = pContext->GetFunctionById(params[2]);
dvander@514
   379
dvander@514
   380
	if (group[0] == '\0')
dvander@514
   381
	{
dvander@514
   382
		CPlugin *pPlugin = g_PluginSys.GetPluginByCtx(pContext->GetContext());
dvander@514
   383
		group = pPlugin->GetFilename();
dvander@514
   384
	}
dvander@514
   385
dvander@514
   386
	if (!pFunction)
dvander@514
   387
	{
dvander@514
   388
		return pContext->ThrowNativeError("Invalid function id (%X)", params[2]);
dvander@514
   389
	}
dvander@514
   390
dvander@514
   391
	g_ConCmds.AddAdminCommand(pFunction, name, group, flags, help, cmdflags);
dvander@514
   392
dvander@514
   393
	return 1;
dvander@514
   394
}
dvander@514
   395
dvander@517
   396
static cell_t sm_GetCmdArgs(IPluginContext *pContext, const cell_t *params)
dvander@517
   397
{
dvander@517
   398
	return engine->Cmd_Argc() - 1;
dvander@517
   399
}
dvander@517
   400
dvander@517
   401
static cell_t sm_GetCmdArg(IPluginContext *pContext, const cell_t *params)
dvander@517
   402
{
dvander@517
   403
	const char *arg = engine->Cmd_Argv(params[1]);
dvander@517
   404
	
dvander@517
   405
	pContext->StringToLocalUTF8(params[2], params[3], arg, NULL);
dvander@517
   406
dvander@517
   407
	return 1;
dvander@517
   408
}
dvander@517
   409
dvander@517
   410
static cell_t sm_GetCmdArgString(IPluginContext *pContext, const cell_t *params)
dvander@517
   411
{
dvander@517
   412
	const char *args = engine->Cmd_Args();
dvander@517
   413
dvander@517
   414
	pContext->StringToLocalUTF8(params[1], params[2], args, NULL);
dvander@517
   415
dvander@517
   416
	return 1;
dvander@517
   417
}
dvander@517
   418
dvander@518
   419
static cell_t sm_PrintToServer(IPluginContext *pCtx, const cell_t *params)
dvander@518
   420
{
dvander@518
   421
	char buffer[1024];
dvander@518
   422
	char *fmt;
dvander@518
   423
	int arg = 2;
dvander@518
   424
dvander@518
   425
	pCtx->LocalToString(params[1], &fmt);
dvander@518
   426
	size_t res = atcprintf(buffer, sizeof(buffer)-2, fmt, pCtx, params, &arg);
dvander@518
   427
dvander@518
   428
	buffer[res++] = '\n';
dvander@518
   429
	buffer[res] = '\0';
dvander@518
   430
dvander@518
   431
	META_CONPRINT(buffer);
dvander@518
   432
dvander@518
   433
	return 1;
dvander@518
   434
}
dvander@518
   435
dvander@518
   436
static cell_t sm_PrintToConsole(IPluginContext *pCtx, const cell_t *params)
dvander@518
   437
{
dvander@518
   438
	int index = params[1];
dvander@520
   439
	if ((index < 0) || (index > g_Players.GetMaxClients()))
dvander@518
   440
	{
dvander@518
   441
		return pCtx->ThrowNativeError("Invalid client index %d", index);
dvander@518
   442
	}
dvander@518
   443
dvander@520
   444
	CPlayer *pPlayer = NULL;
dvander@520
   445
	if (index != 0)
dvander@518
   446
	{
dvander@520
   447
		pPlayer = g_Players.GetPlayerByIndex(index);
dvander@520
   448
		if (!pPlayer->IsInGame())
dvander@520
   449
		{
dvander@520
   450
			return pCtx->ThrowNativeError("Client %d is not in game", index);
dvander@520
   451
		}
dvander@520
   452
		
dvander@520
   453
		/* Silent fail on bots, engine will crash */
dvander@520
   454
		if (pPlayer->IsFakeClient())
dvander@520
   455
		{
dvander@520
   456
			return 0;
dvander@520
   457
		}
dvander@519
   458
	}
dvander@518
   459
dvander@518
   460
	char buffer[1024];
dvander@518
   461
	char *fmt;
dvander@518
   462
	int arg = 3;
dvander@518
   463
dvander@518
   464
	pCtx->LocalToString(params[2], &fmt);
dvander@518
   465
	size_t res = atcprintf(buffer, sizeof(buffer)-2, fmt, pCtx, params, &arg);
dvander@518
   466
dvander@518
   467
	buffer[res++] = '\n';
dvander@518
   468
	buffer[res] = '\0';
dvander@518
   469
dvander@520
   470
	if (index != 0)
dvander@520
   471
	{
dvander@520
   472
		engine->ClientPrintf(pPlayer->GetEdict(), buffer);
dvander@520
   473
	} else {
dvander@520
   474
		META_CONPRINT(buffer);
dvander@520
   475
	}
dvander@518
   476
dvander@518
   477
	return 1;
dvander@518
   478
}
dvander@518
   479
dvander@522
   480
static cell_t sm_ServerCommand(IPluginContext *pContext, const cell_t *params)
dvander@522
   481
{
dvander@522
   482
	char buffer[1024];
dvander@522
   483
	size_t len = g_SourceMod.FormatString(buffer, sizeof(buffer)-2, pContext, params, 1);
dvander@522
   484
dvander@522
   485
	/* One byte for null terminator, one for newline */
dvander@522
   486
	buffer[len++] = '\n';
dvander@522
   487
	buffer[len] = '\0';
dvander@522
   488
dvander@522
   489
	engine->ServerCommand(buffer);
dvander@522
   490
dvander@522
   491
	return 1;
dvander@522
   492
}
dvander@522
   493
dvander@522
   494
static cell_t sm_InsertServerCommand(IPluginContext *pContext, const cell_t *params)
dvander@522
   495
{
dvander@522
   496
	char buffer[1024];
dvander@522
   497
	size_t len = g_SourceMod.FormatString(buffer, sizeof(buffer)-2, pContext, params, 1);
dvander@522
   498
dvander@522
   499
	/* One byte for null terminator, one for newline */
dvander@522
   500
	buffer[len++] = '\n';
dvander@522
   501
	buffer[len] = '\0';
dvander@522
   502
dvander@522
   503
	engine->InsertServerCommand(buffer);
dvander@522
   504
dvander@522
   505
	return 1;
dvander@522
   506
}
dvander@522
   507
dvander@522
   508
static cell_t sm_ServerExecute(IPluginContext *pContext, const cell_t *params)
dvander@522
   509
{
dvander@522
   510
	engine->ServerExecute();
dvander@522
   511
dvander@522
   512
	return 1;
dvander@522
   513
}
dvander@522
   514
dvander@532
   515
static cell_t sm_ClientCommand(IPluginContext *pContext, const cell_t *params)
dvander@532
   516
{
dvander@532
   517
	CPlayer *pPlayer = g_Players.GetPlayerByIndex(params[1]);
dvander@532
   518
dvander@532
   519
	if (!pPlayer)
dvander@532
   520
	{
dvander@532
   521
		return pContext->ThrowNativeError("Player %d is not a valid player", params[1]);
dvander@532
   522
	}
dvander@532
   523
dvander@532
   524
	if (!pPlayer->IsConnected())
dvander@532
   525
	{
dvander@532
   526
		return pContext->ThrowNativeError("Player %d is not connected", params[1]);
dvander@532
   527
	}
dvander@532
   528
dvander@532
   529
	char buffer[256];
dvander@532
   530
	g_SourceMod.FormatString(buffer, sizeof(buffer)-1, pContext, params, 2);
dvander@532
   531
dvander@532
   532
	engine->ClientCommand(pPlayer->GetEdict(), "%s", buffer);
dvander@532
   533
dvander@532
   534
	return 1;
dvander@532
   535
}
dvander@532
   536
dvander@518
   537
REGISTER_NATIVES(consoleNatives)
dvander@498
   538
{
dvander@498
   539
	{"CreateConVar",		sm_CreateConVar},
dvander@498
   540
	{"FindConVar",			sm_FindConVar},
dvander@498
   541
	{"HookConVarChange",	sm_HookConVarChange},
dvander@498
   542
	{"UnhookConVarChange",	sm_UnhookConVarChange},
dvander@498
   543
	{"GetConVarBool",		sm_GetConVarBool},
dvander@498
   544
	{"SetConVarBool",		sm_SetConVarNum},
dvander@498
   545
	{"GetConVarInt",		sm_GetConVarInt},
dvander@498
   546
	{"SetConVarInt",		sm_SetConVarNum},
dvander@498
   547
	{"GetConVarFloat",		sm_GetConVarFloat},
dvander@498
   548
	{"SetConVarFloat",		sm_SetConVarFloat},
dvander@498
   549
	{"GetConVarString",		sm_GetConVarString},
dvander@498
   550
	{"SetConVarString",		sm_SetConVarString},
dvander@498
   551
	{"GetConVarFlags",		sm_GetConVarFlags},
dvander@498
   552
	{"SetConVarFlags",		sm_SetConVarFlags},
dvander@498
   553
	{"GetConVarName",		sm_GetConVarName},
dvander@498
   554
	{"GetConVarMin",		sm_GetConVarMin},
dvander@498
   555
	{"GetConVarMax",		sm_GetConVarMax},
dvander@498
   556
	{"ResetConVar",			sm_ResetConVar},
dvander@498
   557
	{"RegServerCmd",		sm_RegServerCmd},
dvander@500
   558
	{"RegConsoleCmd",		sm_RegConsoleCmd},
dvander@517
   559
	{"GetCmdArgString",		sm_GetCmdArgString},
dvander@517
   560
	{"GetCmdArgs",			sm_GetCmdArgs},
dvander@517
   561
	{"GetCmdArg",			sm_GetCmdArg},
dvander@518
   562
	{"PrintToServer",		sm_PrintToServer},
dvander@518
   563
	{"PrintToConsole",		sm_PrintToConsole},
dvander@520
   564
	{"RegAdminCmd",			sm_RegAdminCmd},
dvander@522
   565
	{"ServerCommand",		sm_ServerCommand},
dvander@522
   566
	{"InsertServerCommand",	sm_InsertServerCommand},
dvander@522
   567
	{"ServerExecute",		sm_ServerExecute},
dvander@532
   568
	{"ClientCommand",		sm_ClientCommand},
dvander@498
   569
	{NULL,					NULL}
dvander@498
   570
};