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); }
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; }
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); }
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; }
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; }
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); }
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)); }