extensions/sdktools/vcaller.cpp
changeset 4346 a2f9c923d545
parent 4144 353e86f4c6ab
     1.1 --- a/extensions/sdktools/vcaller.cpp	Tue May 06 18:48:53 2014 -0700
     1.2 +++ b/extensions/sdktools/vcaller.cpp	Wed May 07 12:58:16 2014 -0400
     1.3 @@ -155,6 +155,21 @@
     1.4  	return (s_call_addr != NULL) ? 1 : 0;
     1.5  }
     1.6  
     1.7 +static cell_t PrepSDKCall_SetAddress(IPluginContext *pContext, const cell_t *params)
     1.8 +{
     1.9 +	s_call_addr = reinterpret_cast<void *>(params[1]);
    1.10 +
    1.11 +	return (s_call_addr != NULL) ? 1 : 0;
    1.12 +}
    1.13 +
    1.14 +// Must match same enum in sdktools.inc
    1.15 +enum SDKFuncConfSource
    1.16 +{
    1.17 +	SDKConf_Virtual,
    1.18 +	SDKConf_Signature,
    1.19 +	SDKConf_Address
    1.20 +};
    1.21 +
    1.22  static cell_t PrepSDKCall_SetFromConf(IPluginContext *pContext, const cell_t *params)
    1.23  {
    1.24  	IGameConfig *conf;
    1.25 @@ -173,12 +188,26 @@
    1.26  	char *key;
    1.27  	pContext->LocalToString(params[3], &key);
    1.28  
    1.29 -	if (params[2] == 0)
    1.30 +	switch (params[2])
    1.31  	{
    1.32 -		return conf->GetOffset(key, &s_vtbl_index) ? 1 : 0;
    1.33 -	} else if (params[2] == 1) {
    1.34 -		bool result = conf->GetMemSig(key, &s_call_addr) ? 1 : 0;
    1.35 -		return (result && s_call_addr != NULL) ? 1 : 0;
    1.36 +	case SDKConf_Virtual:
    1.37 +		if (conf->GetOffset(key, &s_vtbl_index))
    1.38 +		{
    1.39 +			return 1;
    1.40 +		}
    1.41 +		break;
    1.42 +	case SDKConf_Signature:
    1.43 +		if (conf->GetMemSig(key, &s_call_addr) && s_call_addr)
    1.44 +		{
    1.45 +			return 1;
    1.46 +		}
    1.47 +		break;
    1.48 +	case SDKConf_Address:
    1.49 +		if (conf->GetAddress(key, &s_call_addr) && s_call_addr)
    1.50 +		{
    1.51 +			return 1;
    1.52 +		}
    1.53 +		break;
    1.54  	}
    1.55  
    1.56  	return 0;
    1.57 @@ -477,6 +506,7 @@
    1.58  	{"StartPrepSDKCall",			StartPrepSDKCall},
    1.59  	{"PrepSDKCall_SetVirtual",		PrepSDKCall_SetVirtual},
    1.60  	{"PrepSDKCall_SetSignature",	PrepSDKCall_SetSignature},
    1.61 +	{"PrepSDKCall_SetAddress",		PrepSDKCall_SetAddress},
    1.62  	{"PrepSDKCall_SetFromConf",		PrepSDKCall_SetFromConf},
    1.63  	{"PrepSDKCall_SetReturnInfo",	PrepSDKCall_SetReturnInfo},
    1.64  	{"PrepSDKCall_AddParameter",	PrepSDKCall_AddParameter},