int AMXAPI native_handler(AMX *amx, int index) { Handler *pHandler = (Handler *)amx->userdata[UD_HANDLER]; char name[sNAMEMAX + 1]; amx_GetNative(amx, index, name); return pHandler->HandleNative(name, index, 0); }
static cell AMX_NATIVE_CALL invalid_native(AMX *amx, cell *params) { //A script has accidentally called an invalid native! give them a // first chance to block the resulting error. Handler *pHandler = (Handler *)amx->userdata[UD_HANDLER]; //this should never happen if (!pHandler) { LogError(amx, AMX_ERR_INVNATIVE, "Invalid native attempt"); return 0; } //this should never happen because this native won't be called // if the plugin isn't filtering. if (!pHandler->IsNativeFiltering()) { LogError(amx, AMX_ERR_INVNATIVE, "Invalid native attempt"); return 0; } char name[sNAMEMAX + 1]; int native = (int)(_INT_PTR)(amx->usertags[UT_NATIVE]); int err = amx_GetNative(amx, native, name); if (err != AMX_ERR_NONE) name[0] = '\0'; //1 - because we're trapping usage if (!pHandler->HandleNative(name, native, 1)) { amx->usertags[UT_NATIVE] = (void *)native; LogError(amx, AMX_ERR_INVNATIVE, NULL); return 0; } //Someday maybe allow native filters to write their own return value? return 0; }