예제 #1
0
파일: rage.cpp 프로젝트: Arkshine/Rage
cell AMX_NATIVE_CALL Rage::TryGetFunction(AMX* amx,cell* params)
{
	int len;
	char *functionName = g_fn_GetAmxString(amx,params[1],0,&len);

	return Global::functionsManager.get_id_of(functionName);
}
예제 #2
0
파일: rage.cpp 프로젝트: Arkshine/Rage
cell AMX_NATIVE_CALL Rage::GetFunctionFromEntity(AMX* amx,cell* params)
{
	int len;
	char *func_name = g_fn_GetAmxString(amx,params[1],0,&len);

	VirtualFunction** virtual_function_ptr = Global::virtualFunctionsManager.get_by_label(func_name);
	
	if(!virtual_function_ptr)
	{
		MF_LogError(amx, AMX_ERR_NATIVE, "Virtual function %s not registered",func_name);
		return -1;
	}

	VirtualFunction* virtual_function = *virtual_function_ptr;

	int entity = (int) params[2];

	void* object = IndexToPrivate(entity);

	if(!object)
	{
		MF_LogError(amx, AMX_ERR_NATIVE, "Failed to get private data of entity '%d' for use with virtual function '%s'",entity,func_name);
		return -1;
	}

	return virtual_function->create_get_id(object);
}
void* CharPtrHandler::convertFromAmx(AMX* amx,cell param)
{
	char *str = g_fn_GetAmxString(amx,param,0,&len);
	char *allocString = allocateMemory<char>(len+1);
	strcpy(allocString,str);
		
	return (void *) allocString; 
}
void CharPtrHandler::convertFromAmxToStructure(AMX* amx,cell param,void* address)
{
	int len;
	char *str = g_fn_GetAmxString(amx,param,0,&len);

	char* allocString = allocateMemory<char>(len+1);
	strcpy(allocString,str);

	*((const char **)address) = allocString;
}
예제 #5
0
파일: base.cpp 프로젝트: n1992d/SyPB
static cell AMX_NATIVE_CALL amxx_AddSyPB(AMX *amx, cell *params) // 1.34
{
	if (!Amxx_AddSyPB || api_version < float(1.30))
		return -2;

	const char *name = g_fn_GetAmxString(amx, params[1], 0, NULL);
	int skill = params[2];
	int team = params[3];

	return Amxx_AddSyPB(name, skill, team);
}
예제 #6
0
파일: rage.cpp 프로젝트: Arkshine/Rage
cell AMX_NATIVE_CALL Rage::GetFunction(AMX* amx,cell* params)
{
	int len;
	char *functionName = g_fn_GetAmxString(amx,params[1],0,&len);

	unsigned int id = Global::functionsManager.get_id_of(functionName);

	if(id == -1)
	{
		MF_LogError(amx, AMX_ERR_NATIVE, "Function \"%s\" not found in rage",functionName);
	}

	return id;
}
예제 #7
0
파일: rage.cpp 프로젝트: Arkshine/Rage
cell AMX_NATIVE_CALL Rage::GetFunctionFromClass(AMX* amx,cell* params)
{
	int len;
	char *func_name = g_fn_GetAmxString(amx,params[1],0,&len);

	VirtualFunction** virtual_function_ptr = Global::virtualFunctionsManager.get_by_label(func_name);
	
	if(!virtual_function_ptr)
	{
		MF_LogError(amx, AMX_ERR_NATIVE, "Virtual function %s not registered",func_name);
		return -1;
	}

	VirtualFunction* virtual_function = *virtual_function_ptr;

	char* class_name = g_fn_GetAmxString(amx,params[2],0,&len);

	static char class_name_cp[50];
	strncpy(class_name_cp,class_name,49);

	edict_t *entity = CREATE_ENTITY();
	CALL_GAME_ENTITY(PLID,class_name,&entity->v);

	if(!entity->pvPrivateData)
	{
		REMOVE_ENTITY(entity);

		MF_LogError(amx, AMX_ERR_NATIVE,"Unable to create an entity of class '%s'",class_name);
		return -1;
	}

	int ret = virtual_function->create_get_id(entity->pvPrivateData,class_name_cp);
	
	REMOVE_ENTITY(entity);

	return ret;
}
예제 #8
0
파일: rage.cpp 프로젝트: Arkshine/Rage
cell AMX_NATIVE_CALL Rage::GetFunctionFromObject(AMX* amx,cell* params)
{
	int len;
	char *func_name = g_fn_GetAmxString(amx,params[1],0,&len);

	VirtualFunction** virtual_function_ptr = Global::virtualFunctionsManager.get_by_label(func_name);
	
	if(!virtual_function_ptr)
	{
		MF_LogError(amx, AMX_ERR_NATIVE, "Virtual function %s not registered",func_name);
		return -1;
	}

	VirtualFunction* virtual_function = *virtual_function_ptr;

	void* object = (void*) params[2];

	return virtual_function->create_get_id(object);
}
예제 #9
0
파일: rage.cpp 프로젝트: Arkshine/Rage
cell AMX_NATIVE_CALL Rage::CreateHook(AMX* amx,cell* params)
{
	unsigned int function_id = params[1];

	Function** function_ptr = Global::functionsManager.get_by_id(function_id);

	if(!function_ptr)
	{
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid function %d provided to rage_create_hook",function_id);
		return -1;
	}

	Function* function = *function_ptr;

	int len;
	char *functionName = g_fn_GetAmxString(amx,params[2],0,&len);

	int id;
	int find = g_fn_AmxFindPublic(amx,functionName,&id);

	if(find == AMX_ERR_NOTFOUND)
	{
		MF_LogError(amx, AMX_ERR_NATIVE, "Function not found in the plugin (be sure it's public) %s",functionName);
		return -1;
	}

	int phase = params[3];

	if(phase != !!phase)
	{
		MF_LogError(amx, AMX_ERR_NATIVE, "Invalid phase");
		return -1;
	}

	return function->add_plugin_hook(amx,functionName,phase);


}
bool CharPtrHandler::compareTo(AMX* amx,cell* params,void* address)
{
	char *str = g_fn_GetAmxString(amx,params[0],0,NULL);
	return !strcmp(str,*((char**)address));
}