Add PrepSDKCall_SetAddress and Address support to PrepSDKCall_SetFromConf (bug 5261, r=asherkin).
This commit is contained in:
		
							parent
							
								
									b5decd8a50
								
							
						
					
					
						commit
						0513f93f9d
					
				@ -155,6 +155,21 @@ static cell_t PrepSDKCall_SetSignature(IPluginContext *pContext, const cell_t *p
 | 
			
		||||
	return (s_call_addr != NULL) ? 1 : 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static cell_t PrepSDKCall_SetAddress(IPluginContext *pContext, const cell_t *params)
 | 
			
		||||
{
 | 
			
		||||
	s_call_addr = reinterpret_cast<void *>(params[1]);
 | 
			
		||||
 | 
			
		||||
	return (s_call_addr != NULL) ? 1 : 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Must match same enum in sdktools.inc
 | 
			
		||||
enum SDKFuncConfSource
 | 
			
		||||
{
 | 
			
		||||
	SDKConf_Virtual,
 | 
			
		||||
	SDKConf_Signature,
 | 
			
		||||
	SDKConf_Address
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static cell_t PrepSDKCall_SetFromConf(IPluginContext *pContext, const cell_t *params)
 | 
			
		||||
{
 | 
			
		||||
	IGameConfig *conf;
 | 
			
		||||
@ -173,12 +188,26 @@ static cell_t PrepSDKCall_SetFromConf(IPluginContext *pContext, const cell_t *pa
 | 
			
		||||
	char *key;
 | 
			
		||||
	pContext->LocalToString(params[3], &key);
 | 
			
		||||
 | 
			
		||||
	if (params[2] == 0)
 | 
			
		||||
	switch (params[2])
 | 
			
		||||
	{
 | 
			
		||||
		return conf->GetOffset(key, &s_vtbl_index) ? 1 : 0;
 | 
			
		||||
	} else if (params[2] == 1) {
 | 
			
		||||
		bool result = conf->GetMemSig(key, &s_call_addr) ? 1 : 0;
 | 
			
		||||
		return (result && s_call_addr != NULL) ? 1 : 0;
 | 
			
		||||
	case SDKConf_Virtual:
 | 
			
		||||
		if (conf->GetOffset(key, &s_vtbl_index))
 | 
			
		||||
		{
 | 
			
		||||
			return 1;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case SDKConf_Signature:
 | 
			
		||||
		if (conf->GetMemSig(key, &s_call_addr) && s_call_addr)
 | 
			
		||||
		{
 | 
			
		||||
			return 1;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case SDKConf_Address:
 | 
			
		||||
		if (conf->GetAddress(key, &s_call_addr) && s_call_addr)
 | 
			
		||||
		{
 | 
			
		||||
			return 1;
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
@ -477,6 +506,7 @@ sp_nativeinfo_t g_CallNatives[] =
 | 
			
		||||
	{"StartPrepSDKCall",			StartPrepSDKCall},
 | 
			
		||||
	{"PrepSDKCall_SetVirtual",		PrepSDKCall_SetVirtual},
 | 
			
		||||
	{"PrepSDKCall_SetSignature",	PrepSDKCall_SetSignature},
 | 
			
		||||
	{"PrepSDKCall_SetAddress",		PrepSDKCall_SetAddress},
 | 
			
		||||
	{"PrepSDKCall_SetFromConf",		PrepSDKCall_SetFromConf},
 | 
			
		||||
	{"PrepSDKCall_SetReturnInfo",	PrepSDKCall_SetReturnInfo},
 | 
			
		||||
	{"PrepSDKCall_AddParameter",	PrepSDKCall_AddParameter},
 | 
			
		||||
 | 
			
		||||
@ -72,6 +72,7 @@ enum SDKFuncConfSource
 | 
			
		||||
{
 | 
			
		||||
	SDKConf_Virtual = 0,	/**< Read a virtual index from the Offsets section */
 | 
			
		||||
	SDKConf_Signature = 1,	/**< Read a signature from the Signatures section */
 | 
			
		||||
	SDKConf_Address = 2,	/**< Read an address from the Addresses section */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum SDKType
 | 
			
		||||
@ -130,6 +131,14 @@ native PrepSDKCall_SetVirtual(vtblidx);
 | 
			
		||||
 */
 | 
			
		||||
native bool:PrepSDKCall_SetSignature(SDKLibrary:lib, const String:signature[], bytes);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Uses the given function address for the SDK call.
 | 
			
		||||
 *
 | 
			
		||||
 * @param addr			Address of function to use.
 | 
			
		||||
 * @return				True on success, false on failure.
 | 
			
		||||
 */
 | 
			
		||||
native bool:PrepSDKCall_SetAddress(Address:addr);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Finds an address or virtual function index in a GameConfig file and sets it as
 | 
			
		||||
 * the calling information for the SDK call.
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user