コード例 #1
0
ファイル: vcaller.cpp プロジェクト: popey456963/sourcemod
static cell_t PrepSDKCall_SetFromConf(IPluginContext *pContext, const cell_t *params)
{
	IGameConfig *conf;

	if (params[1] == BAD_HANDLE)
	{
		conf = g_pGameConf;
	} else {
		HandleError err;
		if ((conf = gameconfs->ReadHandle(params[1], pContext->GetIdentity(), &err)) == NULL)
		{
			return pContext->ThrowNativeError("Invalid Handle %x (error %d)", params[1], err);
		}
	}
	
	char *key;
	pContext->LocalToString(params[3], &key);

	switch (params[2])
	{
	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;
}