core/smn_convar.cpp
changeset 465 8856d2e7018d
parent 457 9b8a85bf4175
child 469 e9a53be35abd
     1.1 --- a/core/smn_convar.cpp	Sun Feb 11 00:17:54 2007 +0000
     1.2 +++ b/core/smn_convar.cpp	Sun Feb 11 11:09:38 2007 +0000
     1.3 @@ -25,8 +25,7 @@
     1.4  	// While the engine seems to accept a blank convar name, it causes a crash upon server quit
     1.5  	if (name == NULL || strcmp(name, "") == 0)
     1.6  	{
     1.7 -		pContext->ThrowNativeError("Null or blank convar name is not allowed.");
     1.8 -		return BAD_HANDLE;
     1.9 +		return pContext->ThrowNativeError("Null or blank convar name is not allowed.");
    1.10  	}
    1.11  
    1.12  	pContext->LocalToString(params[2], &defaultVal);
    1.13 @@ -55,6 +54,40 @@
    1.14  	return g_ConVarManager.FindConVar(name);
    1.15  }
    1.16  
    1.17 +static cell_t sm_HookConVarChange(IPluginContext *pContext, const cell_t *params)
    1.18 +{
    1.19 +	Handle_t hndl = static_cast<Handle_t>(params[1]);
    1.20 +	HandleError err;
    1.21 +	ConVar *cvar;
    1.22 +
    1.23 +	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
    1.24 +		!= HandleError_None)
    1.25 +	{
    1.26 +		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
    1.27 +	}
    1.28 +
    1.29 +	g_ConVarManager.HookConVarChange(pContext, cvar, static_cast<funcid_t>(params[2]));
    1.30 +
    1.31 +	return 1;
    1.32 +}
    1.33 +
    1.34 +static cell_t sm_UnhookConVarChange(IPluginContext *pContext, const cell_t *params)
    1.35 +{
    1.36 +	Handle_t hndl = static_cast<Handle_t>(params[1]);
    1.37 +	HandleError err;
    1.38 +	ConVar *cvar;
    1.39 +
    1.40 +	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
    1.41 +		!= HandleError_None)
    1.42 +	{
    1.43 +		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
    1.44 +	}
    1.45 +
    1.46 +	g_ConVarManager.UnhookConVarChange(pContext, cvar, static_cast<funcid_t>(params[2]));
    1.47 +
    1.48 +	return 1;
    1.49 +}
    1.50 +
    1.51  static cell_t sm_GetConVarBool(IPluginContext *pContext, const cell_t *params)
    1.52  {
    1.53  	Handle_t hndl = static_cast<Handle_t>(params[1]);
    1.54 @@ -255,6 +288,23 @@
    1.55  	return hasMax;
    1.56  }
    1.57  
    1.58 +static cell_t sm_GetConVarName(IPluginContext *pContext, const cell_t *params)
    1.59 +{
    1.60 +	Handle_t hndl = static_cast<Handle_t>(params[1]);
    1.61 +	HandleError err;
    1.62 +	ConVar *cvar;
    1.63 +
    1.64 +	if ((err=g_HandleSys.ReadHandle(hndl, g_ConVarManager.GetHandleType(), NULL, (void **)&cvar))
    1.65 +		!= HandleError_None)
    1.66 +	{
    1.67 +		return pContext->ThrowNativeError("Invalid ConVar Handle %x (error %d)", hndl, err);
    1.68 +	}
    1.69 +
    1.70 +	pContext->StringToLocalUTF8(params[2], params[3], cvar->GetName(), NULL);
    1.71 +
    1.72 +	return 1;
    1.73 +}
    1.74 +
    1.75  static cell_t sm_ResetConVar(IPluginContext *pContext, const cell_t *params)
    1.76  {
    1.77  	Handle_t hndl = static_cast<Handle_t>(params[1]);
    1.78 @@ -274,20 +324,23 @@
    1.79  
    1.80  REGISTER_NATIVES(convarNatives)
    1.81  {
    1.82 -	{"CreateConVar",	sm_CreateConVar},
    1.83 -	{"FindConVar",		sm_FindConVar},
    1.84 -	{"GetConVarBool",	sm_GetConVarBool},
    1.85 -	{"SetConVarBool",	sm_SetConVarNum},
    1.86 -	{"GetConVarInt",	sm_GetConVarInt},
    1.87 -	{"SetConVarInt",	sm_SetConVarNum},
    1.88 -	{"GetConVarFloat",	sm_GetConVarFloat},
    1.89 -	{"SetConVarFloat",	sm_SetConVarFloat},
    1.90 -	{"GetConVarString",	sm_GetConVarString},
    1.91 -	{"SetConVarString",	sm_SetConVarString},
    1.92 -	{"GetConVarFlags",	sm_GetConVarFlags},
    1.93 -	{"SetConVarFlags",	sm_SetConVarFlags},
    1.94 -	{"GetConVarMin",	sm_GetConVarMin},
    1.95 -	{"GetConVarMax",	sm_GetConVarMax},
    1.96 -	{"ResetConVar",		sm_ResetConVar},
    1.97 -	{NULL,				NULL}
    1.98 +	{"CreateConVar",		sm_CreateConVar},
    1.99 +	{"FindConVar",			sm_FindConVar},
   1.100 +	{"HookConVarChange",	sm_HookConVarChange},
   1.101 +	{"UnhookConVarChange",	sm_UnhookConVarChange},
   1.102 +	{"GetConVarBool",		sm_GetConVarBool},
   1.103 +	{"SetConVarBool",		sm_SetConVarNum},
   1.104 +	{"GetConVarInt",		sm_GetConVarInt},
   1.105 +	{"SetConVarInt",		sm_SetConVarNum},
   1.106 +	{"GetConVarFloat",		sm_GetConVarFloat},
   1.107 +	{"SetConVarFloat",		sm_SetConVarFloat},
   1.108 +	{"GetConVarString",		sm_GetConVarString},
   1.109 +	{"SetConVarString",		sm_SetConVarString},
   1.110 +	{"GetConVarFlags",		sm_GetConVarFlags},
   1.111 +	{"SetConVarFlags",		sm_SetConVarFlags},
   1.112 +	{"GetConVarName",		sm_GetConVarName},
   1.113 +	{"GetConVarMin",		sm_GetConVarMin},
   1.114 +	{"GetConVarMax",		sm_GetConVarMax},
   1.115 +	{"ResetConVar",			sm_ResetConVar},
   1.116 +	{NULL,					NULL}
   1.117  };