SAMP.NET/sampdotnethook/main.cpp

112 lines
4.4 KiB
C++
Raw Permalink Normal View History

2022-08-27 17:18:04 +00:00
#define VERSION ("0.5 alpha")
2022-08-27 17:16:44 +00:00
#include "callbacks.h"
#include "a_samp.h"
#include "Mono.h"
2022-08-27 17:10:32 +00:00
typedef void (*logprintf_t)(char* format, ...);
logprintf_t logprintf;
extern void *pAMXFunctions;
2022-08-27 17:16:44 +00:00
void fnlogprintf(char *message) {
2022-08-27 17:10:32 +00:00
logprintf(message);
}
2022-08-27 17:16:44 +00:00
PLUGIN_EXPORT unsigned int PLUGIN_CALL Supports() {
2022-08-27 17:10:32 +00:00
return SUPPORTS_VERSION | SUPPORTS_AMX_NATIVES;
}
2022-08-27 17:16:44 +00:00
PLUGIN_EXPORT bool PLUGIN_CALL Load(void** ppData) {
2022-08-27 17:10:32 +00:00
// Set variables
pAMXFunctions = ppData[PLUGIN_DATA_AMX_EXPORTS];
logprintf = (logprintf_t) ppData[PLUGIN_DATA_LOGPRINTF];
2022-08-27 17:16:44 +00:00
2022-08-27 17:10:32 +00:00
// Instantiate classes
g_Invoke = new Invoke;
g_Mono = new Mono;
2022-08-27 17:16:44 +00:00
2022-08-27 17:10:32 +00:00
// Initialize the Mono instance and load the Script library
g_Mono->init();
2022-08-27 17:16:44 +00:00
2022-08-27 17:10:32 +00:00
// Output status
2022-08-27 17:18:04 +00:00
char msg[50] = "";
sprintf_s(msg, sizeof(msg), " sampdotnethook v%s is OK", VERSION);
logprintf(msg);
2022-08-27 17:10:32 +00:00
return true;
}
2022-08-27 17:16:44 +00:00
PLUGIN_EXPORT void PLUGIN_CALL Unload() {
2022-08-27 17:18:04 +00:00
char msg[50] = "";
sprintf_s(msg, sizeof(msg), " sampdotnethook v%s unloaded", VERSION);
logprintf(msg);
2022-08-27 17:10:32 +00:00
}
AMX_NATIVE_INFO PluginNatives[] = {
{ "CBOnGameModeInit", CBOnGameModeInit },
{ "CBOnGameModeExit", CBOnGameModeExit },
{ "CBOnPlayerConnect", CBOnPlayerConnect },
{ "CBOnPlayerDisconnect", CBOnPlayerDisconnect },
{ "CBOnPlayerSpawn", CBOnPlayerSpawn },
{ "CBOnPlayerDeath", CBOnPlayerDeath },
{ "CBOnVehicleSpawn", CBOnVehicleSpawn },
{ "CBOnVehicleDeath", CBOnVehicleDeath },
{ "CBOnPlayerText", CBOnPlayerText },
{ "CBOnPlayerCommandText", CBOnPlayerCommandText },
{ "CBOnPlayerRequestClass", CBOnPlayerRequestClass },
{ "CBOnPlayerEnterVehicle", CBOnPlayerEnterVehicle },
{ "CBOnPlayerExitVehicle", CBOnPlayerExitVehicle },
{ "CBOnPlayerStateChange", CBOnPlayerStateChange },
{ "CBOnPlayerEnterCheckpoint", CBOnPlayerEnterCheckpoint },
{ "CBOnPlayerLeaveCheckpoint", CBOnPlayerLeaveCheckpoint },
{ "CBOnPlayerEnterRaceCheckpoint", CBOnPlayerEnterRaceCheckpoint },
{ "CBOnPlayerLeaveRaceCheckpoint", CBOnPlayerLeaveRaceCheckpoint },
{ "CBOnRconCommand", CBOnRconCommand },
{ "CBOnPlayerRequestSpawn", CBOnPlayerRequestSpawn },
{ "CBOnObjectMoved", CBOnObjectMoved },
{ "CBOnPlayerObjectMoved", CBOnPlayerObjectMoved },
{ "CBOnPlayerPickUpPickup", CBOnPlayerPickUpPickup },
{ "CBOnVehicleMod", CBOnVehicleMod },
{ "CBOnEnterExitModShop", CBOnEnterExitModShop },
{ "CBOnVehiclePaintjob", CBOnVehiclePaintjob },
{ "CBOnVehicleRespray", CBOnVehicleRespray },
{ "CBOnVehicleDamageStatusUpdate", CBOnVehicleDamageStatusUpdate },
{ "CBOnUnoccupiedVehicleUpdate", CBOnUnoccupiedVehicleUpdate },
{ "CBOnPlayerSelectedMenuRow", CBOnPlayerSelectedMenuRow },
{ "CBOnPlayerExitedMenu", CBOnPlayerExitedMenu },
{ "CBOnPlayerInteriorChange", CBOnPlayerInteriorChange },
{ "CBOnPlayerKeyStateChange", CBOnPlayerKeyStateChange },
{ "CBOnRconLoginAttempt", CBOnRconLoginAttempt },
{ "CBOnPlayerUpdate", CBOnPlayerUpdate },
{ "CBOnPlayerStreamIn", CBOnPlayerStreamIn },
{ "CBOnPlayerStreamOut", CBOnPlayerStreamOut },
{ "CBOnVehicleStreamIn", CBOnVehicleStreamIn },
{ "CBOnVehicleStreamOut", CBOnVehicleStreamOut },
{ "CBOnDialogResponse", CBOnDialogResponse },
{ "CBOnPlayerTakeDamage", CBOnPlayerTakeDamage },
{ "CBOnPlayerGiveDamage", CBOnPlayerGiveDamage },
{ "CBOnPlayerClickMap", CBOnPlayerClickMap },
{ "CBOnPlayerClickTextDraw", CBOnPlayerClickTextDraw },
{ "CBOnPlayerClickPlayerTextDraw", CBOnPlayerClickPlayerTextDraw },
{ "CBOnPlayerClickPlayer", CBOnPlayerClickPlayer },
{ "CBOnPlayerEditObject", CBOnPlayerEditObject },
{ "CBOnPlayerEditAttachedObject", CBOnPlayerEditAttachedObject },
{ "CBOnPlayerSelectObject", CBOnPlayerSelectObject },
{ 0, 0 }
};
2022-08-27 17:16:44 +00:00
PLUGIN_EXPORT int PLUGIN_CALL AmxLoad( AMX* amx ) {
2022-08-27 17:10:32 +00:00
g_Invoke->amx_list.push_back(amx);
g_Invoke->getAddresses();
return amx_Register(amx, PluginNatives, -1);
}
2022-08-27 17:16:44 +00:00
PLUGIN_EXPORT int PLUGIN_CALL AmxUnload( AMX* amx ) {
for(std::list<AMX *>::iterator i = g_Invoke->amx_list.begin(); i != g_Invoke->amx_list.end(); ++i) {
2022-08-27 17:10:32 +00:00
if(*i == amx) {
g_Invoke->amx_list.erase(i);
break;
}
}
return AMX_ERR_NONE;
2022-08-27 17:16:44 +00:00
}