Registered player and float natives.
Added error strings to these natives. --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40265
This commit is contained in:
parent
32a2aa75e3
commit
5c6bc80f20
@ -1,12 +1,11 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include "sm_autonatives.h"
|
||||||
#include "sp_vm_api.h"
|
#include "sp_vm_api.h"
|
||||||
#include "sp_typeutil.h"
|
#include "sp_typeutil.h"
|
||||||
|
|
||||||
using namespace SourcePawn;
|
using namespace SourcePawn;
|
||||||
|
|
||||||
//:TODO: these need to be registered....
|
|
||||||
|
|
||||||
/****************************************
|
/****************************************
|
||||||
* *
|
* *
|
||||||
* FLOATING POINT NATIVE IMPLEMENTATIONS *
|
* FLOATING POINT NATIVE IMPLEMENTATIONS *
|
||||||
@ -21,7 +20,7 @@ static cell_t sm_float(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return sp_ftoc(val);
|
return sp_ftoc(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatabs(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_FloatAbs(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]);
|
float val = sp_ctof(params[1]);
|
||||||
val = (val >= 0) ? val : -val;
|
val = (val >= 0) ? val : -val;
|
||||||
@ -29,35 +28,35 @@ static cell_t sm_floatabs(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return sp_ftoc(val);
|
return sp_ftoc(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatadd(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_FloatAdd(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]) + sp_ctof(params[2]);
|
float val = sp_ctof(params[1]) + sp_ctof(params[2]);
|
||||||
|
|
||||||
return sp_ftoc(val);
|
return sp_ftoc(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatsub(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_FloatSub(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]) - sp_ctof(params[2]);
|
float val = sp_ctof(params[1]) - sp_ctof(params[2]);
|
||||||
|
|
||||||
return sp_ftoc(val);
|
return sp_ftoc(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatmul(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_FloatMul(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]) * sp_ctof(params[2]);
|
float val = sp_ctof(params[1]) * sp_ctof(params[2]);
|
||||||
|
|
||||||
return sp_ftoc(val);
|
return sp_ftoc(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatdiv(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_FloatDiv(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]) / sp_ctof(params[2]);
|
float val = sp_ctof(params[1]) / sp_ctof(params[2]);
|
||||||
|
|
||||||
return sp_ftoc(val);
|
return sp_ftoc(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatcmp(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_FloatCompare(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val1 = sp_ctof(params[1]);
|
float val1 = sp_ctof(params[1]);
|
||||||
float val2 = sp_ctof(params[2]);
|
float val2 = sp_ctof(params[2]);
|
||||||
@ -72,14 +71,14 @@ static cell_t sm_floatcmp(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatlog(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_Logarithm(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]);
|
float val = sp_ctof(params[1]);
|
||||||
float base = sp_ctof(params[2]);
|
float base = sp_ctof(params[2]);
|
||||||
|
|
||||||
if ((val <= 0) || (base <= 0))
|
if ((val <= 0) || (base <= 0))
|
||||||
{
|
{
|
||||||
//:TODO: error out! logs cant take in negative numbers and log 0=-inf
|
return pCtx->ThrowNativeError("Cannot evaluate the logarithm of zero or a negative number (val:%f base:%f).", val, base);
|
||||||
}
|
}
|
||||||
if (base == 10.0)
|
if (base == 10.0)
|
||||||
{
|
{
|
||||||
@ -91,14 +90,14 @@ static cell_t sm_floatlog(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return sp_ftoc(val);
|
return sp_ftoc(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatexp(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_Exponential(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]);
|
float val = sp_ctof(params[1]);
|
||||||
|
|
||||||
return sp_ftoc(exp(val));
|
return sp_ftoc(exp(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatpower(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_Pow(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float base = sp_ctof(params[1]);
|
float base = sp_ctof(params[1]);
|
||||||
float exponent = sp_ctof(params[2]);
|
float exponent = sp_ctof(params[2]);
|
||||||
@ -106,19 +105,19 @@ static cell_t sm_floatpower(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return sp_ftoc(pow(base, exponent));
|
return sp_ftoc(pow(base, exponent));
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatsqroot(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_SquareRoot(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]);
|
float val = sp_ctof(params[1]);
|
||||||
|
|
||||||
if (val < 0.0)
|
if (val < 0.0)
|
||||||
{
|
{
|
||||||
//:TODO: error out! we dont support complex numbers
|
return pCtx->ThrowNativeError("Cannot evaluate the square root of a negative number (val:%f).", val);
|
||||||
}
|
}
|
||||||
|
|
||||||
return sp_ftoc(sqrt(val));
|
return sp_ftoc(sqrt(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatround(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_FloatRound(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]);
|
float val = sp_ctof(params[1]);
|
||||||
|
|
||||||
@ -154,7 +153,7 @@ static cell_t sm_floatround(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return static_cast<int>(val);
|
return static_cast<int>(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatstr(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_FloatStr(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
@ -167,7 +166,7 @@ static cell_t sm_floatstr(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return sp_ftoc((float)atof(str));
|
return sp_ftoc((float)atof(str));
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatfract(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_FloatFraction(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]);
|
float val = sp_ctof(params[1]);
|
||||||
val = val - floor(val);
|
val = val - floor(val);
|
||||||
@ -175,7 +174,7 @@ static cell_t sm_floatfract(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return sp_ftoc(val);
|
return sp_ftoc(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatsin(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_Sine(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]);
|
float val = sp_ctof(params[1]);
|
||||||
val = sin(val);
|
val = sin(val);
|
||||||
@ -183,7 +182,7 @@ static cell_t sm_floatsin(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return sp_ftoc(val);
|
return sp_ftoc(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatcos(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_Cosine(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]);
|
float val = sp_ctof(params[1]);
|
||||||
val = cos(val);
|
val = cos(val);
|
||||||
@ -191,7 +190,7 @@ static cell_t sm_floatcos(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return sp_ftoc(val);
|
return sp_ftoc(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floattan(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_Tangent(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]);
|
float val = sp_ctof(params[1]);
|
||||||
val = tan(val);
|
val = tan(val);
|
||||||
@ -199,7 +198,7 @@ static cell_t sm_floattan(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return sp_ftoc(val);
|
return sp_ftoc(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatasin(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_ArcSine(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]);
|
float val = sp_ctof(params[1]);
|
||||||
val = asin(val);
|
val = asin(val);
|
||||||
@ -207,7 +206,7 @@ static cell_t sm_floatasin(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return sp_ftoc(val);
|
return sp_ftoc(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatacos(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_ArcCosine(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]);
|
float val = sp_ctof(params[1]);
|
||||||
val = acos(val);
|
val = acos(val);
|
||||||
@ -215,7 +214,7 @@ static cell_t sm_floatacos(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return sp_ftoc(val);
|
return sp_ftoc(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatatan(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_ArcTangent(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val = sp_ctof(params[1]);
|
float val = sp_ctof(params[1]);
|
||||||
val = atan(val);
|
val = atan(val);
|
||||||
@ -223,7 +222,7 @@ static cell_t sm_floatatan(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return sp_ftoc(val);
|
return sp_ftoc(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_floatatan2(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_ArcTangent2(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
float val1 = sp_ctof(params[1]);
|
float val1 = sp_ctof(params[1]);
|
||||||
float val2 = sp_ctof(params[2]);
|
float val2 = sp_ctof(params[2]);
|
||||||
@ -231,3 +230,29 @@ static cell_t sm_floatatan2(IPluginContext *pCtx, const cell_t *params)
|
|||||||
|
|
||||||
return sp_ftoc(val1);
|
return sp_ftoc(val1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
REGISTER_NATIVES(floatnatives)
|
||||||
|
{
|
||||||
|
{"float", sm_float},
|
||||||
|
{"FloatStr", sm_FloatStr},
|
||||||
|
{"FloatMul", sm_FloatMul},
|
||||||
|
{"FloatDiv", sm_FloatDiv},
|
||||||
|
{"FloatAdd", sm_FloatAdd},
|
||||||
|
{"FloatSub", sm_FloatSub},
|
||||||
|
{"FloatFraction", sm_FloatFraction},
|
||||||
|
{"FloatRound", sm_FloatRound},
|
||||||
|
{"FloatCompare", sm_FloatCompare},
|
||||||
|
{"SquareRoot", sm_SquareRoot},
|
||||||
|
{"Pow", sm_Pow},
|
||||||
|
{"Exponential", sm_Exponential},
|
||||||
|
{"Logarithm", sm_Logarithm},
|
||||||
|
{"Sine", sm_Sine},
|
||||||
|
{"Cosine", sm_Cosine},
|
||||||
|
{"Tangent", sm_Tangent},
|
||||||
|
{"FloatAbs", sm_FloatAbs},
|
||||||
|
{"ArcTangent", sm_ArcTangent},
|
||||||
|
{"ArcCosine", sm_ArcCosine},
|
||||||
|
{"ArcSine", sm_ArcSine},
|
||||||
|
{"ArcTangent2", sm_ArcTangent2},
|
||||||
|
{NULL, NULL}
|
||||||
|
};
|
@ -1,8 +1,6 @@
|
|||||||
#include "CPlayerManager.h"
|
#include "CPlayerManager.h"
|
||||||
|
|
||||||
//:TODO: register these and use the same capitalization conventions as the natives
|
static cell_t sm_GetClientCount(IPluginContext *pCtx, const cell_t *params)
|
||||||
|
|
||||||
static cell_t sm_getclientcount(IPluginContext *pCtx, const cell_t *params)
|
|
||||||
{
|
{
|
||||||
if (params[1])
|
if (params[1])
|
||||||
{
|
{
|
||||||
@ -23,87 +21,125 @@ static cell_t sm_getclientcount(IPluginContext *pCtx, const cell_t *params)
|
|||||||
return (g_PlayerManager.GetPlayerCount() + count);
|
return (g_PlayerManager.GetPlayerCount() + count);
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_getmaxclients(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_GetMaxClients(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
return g_PlayerManager.GetMaxClients();
|
return g_PlayerManager.GetMaxClients();
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_getclientname(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_GetClientName(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
int index = params[1];
|
int index = params[1];
|
||||||
if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
|
if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
|
||||||
{
|
{
|
||||||
//:TODO: runtime error
|
return pCtx->ThrowNativeError("Invalid client index %d.", index);
|
||||||
}
|
}
|
||||||
|
|
||||||
pCtx->StringToLocalUTF8(params[2], static_cast<size_t>(params[3]), g_PlayerManager.GetPlayerByIndex(index)->PlayerName(), NULL);
|
CPlayer *pPlayer = g_PlayerManager.GetPlayerByIndex(index);
|
||||||
|
if (!pPlayer->IsPlayerConnected())
|
||||||
|
{
|
||||||
|
return pCtx->ThrowNativeError("Client %d is not connected.", index);
|
||||||
|
}
|
||||||
|
|
||||||
|
pCtx->StringToLocalUTF8(params[2], static_cast<size_t>(params[3]), pPlayer->PlayerName(), NULL);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_getclientip(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_GetClientIP(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
int index = params[1];
|
int index = params[1];
|
||||||
if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
|
if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
|
||||||
{
|
{
|
||||||
//:TODO: runtime error
|
return pCtx->ThrowNativeError("Invalid client index %d.", index);
|
||||||
}
|
}
|
||||||
|
|
||||||
pCtx->StringToLocal(params[2], static_cast<size_t>(params[3]), g_PlayerManager.GetPlayerByIndex(index)->PlayerIP());
|
CPlayer *pPlayer = g_PlayerManager.GetPlayerByIndex(index);
|
||||||
|
if (!pPlayer->IsPlayerConnected())
|
||||||
|
{
|
||||||
|
return pCtx->ThrowNativeError("Client %d is not connected.", index);
|
||||||
|
}
|
||||||
|
|
||||||
|
pCtx->StringToLocal(params[2], static_cast<size_t>(params[3]), pPlayer->PlayerIP());
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_getclientauthstr(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_GetClientAuthStr(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
int index = params[1];
|
int index = params[1];
|
||||||
if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
|
if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
|
||||||
{
|
{
|
||||||
//:TODO: runtime error
|
return pCtx->ThrowNativeError("Invalid client index %d.", index);
|
||||||
}
|
}
|
||||||
|
|
||||||
pCtx->StringToLocal(params[2], static_cast<size_t>(params[3]), g_PlayerManager.GetPlayerByIndex(index)->PlayerAuthString());
|
CPlayer *pPlayer = g_PlayerManager.GetPlayerByIndex(index);
|
||||||
|
if (!pPlayer->IsPlayerConnected())
|
||||||
|
{
|
||||||
|
return pCtx->ThrowNativeError("Client %d is not connected.", index);
|
||||||
|
}
|
||||||
|
|
||||||
|
pCtx->StringToLocal(params[2], static_cast<size_t>(params[3]), pPlayer->PlayerAuthString());
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_isplayerconnected(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_IsPlayerConnected(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
int index = params[1];
|
int index = params[1];
|
||||||
if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
|
if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
|
||||||
{
|
{
|
||||||
//:TODO: runtime error
|
return pCtx->ThrowNativeError("Invalid client index %d.", index);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (g_PlayerManager.GetPlayerByIndex(index)->IsPlayerConnected()) ? 1 : 0;
|
return (g_PlayerManager.GetPlayerByIndex(index)->IsPlayerConnected()) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_isplayeringame(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_IsPlayerIngame(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
int index = params[1];
|
int index = params[1];
|
||||||
if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
|
if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
|
||||||
{
|
{
|
||||||
//:TODO: runtime error
|
return pCtx->ThrowNativeError("Invalid client index %d.", index);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (g_PlayerManager.GetPlayerByIndex(index)->IsPlayerInGame()) ? 1 : 0;
|
return (g_PlayerManager.GetPlayerByIndex(index)->IsPlayerInGame()) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_isplayerauthorized(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_IsPlayerAuthorized(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
int index = params[1];
|
int index = params[1];
|
||||||
if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
|
if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
|
||||||
{
|
{
|
||||||
//:TODO: runtime error
|
return pCtx->ThrowNativeError("Invalid client index %d.", index);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (g_PlayerManager.GetPlayerByIndex(index)->IsPlayerAuthorized()) ? 1 : 0;
|
return (g_PlayerManager.GetPlayerByIndex(index)->IsPlayerAuthorized()) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static cell_t sm_isplayerfakeclient(IPluginContext *pCtx, const cell_t *params)
|
static cell_t sm_IsPlayerFakeClient(IPluginContext *pCtx, const cell_t *params)
|
||||||
{
|
{
|
||||||
int index = params[1];
|
int index = params[1];
|
||||||
if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
|
if ((index < 1) || (index > g_PlayerManager.GetMaxClients()))
|
||||||
{
|
{
|
||||||
//:TODO: runtime error
|
return pCtx->ThrowNativeError("Invalid client index %d.", index);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (g_PlayerManager.GetPlayerByIndex(index)->IsPlayerFakeClient()) ? 1 : 0;
|
CPlayer *pPlayer = g_PlayerManager.GetPlayerByIndex(index);
|
||||||
}
|
if (!pPlayer->IsPlayerConnected())
|
||||||
|
{
|
||||||
|
return pCtx->ThrowNativeError("Client %d is not connected.", index);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (pPlayer->IsPlayerFakeClient()) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
REGISTER_NATIVES(playernatives)
|
||||||
|
{
|
||||||
|
{"GetMaxClients", sm_GetMaxClients},
|
||||||
|
{"GetClientCount", sm_GetClientCount},
|
||||||
|
{"GetClientName", sm_GetClientName},
|
||||||
|
{"GetClientIP", sm_GetClientIP},
|
||||||
|
{"GetClientAuthString", sm_GetClientAuthStr},
|
||||||
|
{"IsPlayerConnected", sm_IsPlayerConnected},
|
||||||
|
{"IsPlayerInGame", sm_IsPlayerIngame},
|
||||||
|
{"IsPlayerAuthorized", sm_IsPlayerAuthorized},
|
||||||
|
{"IsPlayerFakeClient", sm_IsPlayerFakeClient},
|
||||||
|
{NULL, NULL}
|
||||||
|
};
|
@ -81,6 +81,7 @@ native StrCopy(String:dest[], destLen, const String:source[]);
|
|||||||
* @param maxlength Maximum length of output string buffer.
|
* @param maxlength Maximum length of output string buffer.
|
||||||
* @param format Formatting rules.
|
* @param format Formatting rules.
|
||||||
* @param ... Variable number of format parameters.
|
* @param ... Variable number of format parameters.
|
||||||
|
* @return Number of cells written.
|
||||||
*/
|
*/
|
||||||
native Format(String:buffer[], maxlength, const String:format[], {Handle,Float,String,_}:...);
|
native Format(String:buffer[], maxlength, const String:format[], {Handle,Float,String,_}:...);
|
||||||
|
|
||||||
@ -93,6 +94,7 @@ native Format(String:buffer[], maxlength, const String:format[], {Handle,Float,S
|
|||||||
* @param maxlength Maximum length of output string buffer.
|
* @param maxlength Maximum length of output string buffer.
|
||||||
* @param format Formatting rules.
|
* @param format Formatting rules.
|
||||||
* @param ... Variable number of format parameters.
|
* @param ... Variable number of format parameters.
|
||||||
|
* @return Number of cells written.
|
||||||
*/
|
*/
|
||||||
native FormatEx(String:buffer[], maxlength, const String:format[], {Handle,Float,String,_}:...);
|
native FormatEx(String:buffer[], maxlength, const String:format[], {Handle,Float,String,_}:...);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user