PLUGIN_EXPORT bool PLUGIN_CALL Load(void **ppData) { void **exports = reinterpret_cast<void**>(ppData[PLUGIN_DATA_AMX_EXPORTS]); ::logprintf = (logprintf_t)ppData[PLUGIN_DATA_LOGPRINTF]; void *amx_Exec_ptr = exports[PLUGIN_AMX_EXPORT_Exec]; void *amx_Exec_sub = SubHook::ReadDst(amx_Exec_ptr); if (amx_Exec_sub == 0) { exec_hook.Install(amx_Exec_ptr, (void*)AmxExec); } else { std::string module = fileutils::GetFileName(os::GetModuleName(amx_Exec_sub)); if (!module.empty()) { logprintf(" CrashDetect must be loaded before '%s'", module.c_str()); } return false; } os::SetCrashHandler(CrashDetect::OnCrash); os::SetInterruptHandler(CrashDetect::OnInterrupt); logprintf(" CrashDetect v" PROJECT_VERSION_STRING " is OK."); return true; }
PLUGIN_EXPORT void PLUGIN_CALL Unload() { logprintf_hook.Remove(); }
PLUGIN_EXPORT bool PLUGIN_CALL Load(void **ppData) { pAMXFunctions = ppData[PLUGIN_DATA_AMX_EXPORTS]; logprintf = (logprintf_t)ppData[PLUGIN_DATA_LOGPRINTF]; logprintf_hook.Install(ppData[PLUGIN_DATA_LOGPRINTF], (void*)do_logprintf); return true; }