SA-MP/server/gamemodes.cpp
RD42 2df59766ac [server] Implement CGameMode::Frame(...)
* Update `CNetGame::Process()`
2024-06-25 22:26:45 +08:00

1354 lines
33 KiB
C++

#include "main.h"
#define CHECK_INIT() { if (!m_bInitialised) return 0; };
extern "C" int amx_CoreInit(AMX* amx);
extern "C" int amx_CoreCleanup(AMX* amx);
extern "C" int amx_FloatInit(AMX* amx);
extern "C" int amx_FloatCleanup(AMX* amx);
extern "C" int amx_StringInit(AMX* amx);
extern "C" int amx_StringCleanup(AMX* amx);
extern "C" int amx_FileInit(AMX* amx);
extern "C" int amx_FileCleanup(AMX* amx);
extern "C" int amx_TimeInit(AMX* amx);
extern "C" int amx_TimeCleanup(AMX* amx);
int AMXAPI aux_LoadProgram(AMX* amx, char* filename);
int AMXAPI aux_FreeProgram(AMX *amx);
void AMXPrintError(CGameMode* pGameMode, AMX *amx, int error);
int amx_CustomInit(AMX *amx);
int amx_sampDbInit(AMX *amx);
int amx_sampDbCleanup(AMX *amx);
char szGameModeFileName[256];
extern CNetGame* pNetGame;
//----------------------------------------------------------------------------------
CGameMode::CGameMode()
{
m_bInitialised = false;
m_bSleeping = false;
}
//----------------------------------------------------------------------------------
CGameMode::~CGameMode()
{
Unload();
}
//----------------------------------------------------------------------------------
bool CGameMode::Load(char* pFileName)
{
if (m_bInitialised)
Unload();
FILE* f = fopen(pFileName, "rb");
if (!f) return false;
fclose(f);
memset((void*)&m_amx, 0, sizeof(AMX));
m_fSleepTime = 0.0f;
strcpy(szGameModeFileName, pFileName);
int err = aux_LoadProgram(&m_amx, szGameModeFileName);
if (err != AMX_ERR_NONE)
{
AMXPrintError(this, &m_amx, err);
logprintf("Failed to load '%s' script.", szGameModeFileName);
return false;
}
amx_CoreInit(&m_amx);
amx_FloatInit(&m_amx);
amx_StringInit(&m_amx);
amx_FileInit(&m_amx);
amx_TimeInit(&m_amx);
amx_CustomInit(&m_amx);
amx_sampDbInit(&m_amx);
pPlugins->DoAmxLoad(&m_amx);
m_bInitialised = true;
// Execute OnGameModeInit callback, if it exists!
int tmp;
if (!amx_FindPublic(&m_amx, "OnGameModeInit", &tmp))
amx_Exec(&m_amx, (cell*)&tmp, tmp);
pNetGame->GetFilterScripts()->OnGameModeInit();
// ----------------------------------------------
// Call in filterscripts
pNetGame->GetFilterScripts()->OnGameModeInit();
cell ret = 0;
err = amx_Exec(&m_amx, &ret, AMX_EXEC_MAIN);
if (err == AMX_ERR_SLEEP)
{
m_bSleeping = true;
m_fSleepTime = ((float)ret / 1000.0f);
}
else if (err != AMX_ERR_NONE)
{
m_bSleeping = false;
AMXPrintError(this, &m_amx, err);
}
return true;
}
//----------------------------------------------------------------------------------
void CGameMode::Unload()
{
// Execute OnGameModeExit callback, if it exists!
int tmp;
if (!amx_FindPublic(&m_amx, "OnGameModeExit", &tmp))
amx_Exec(&m_amx, (cell*)&tmp, tmp);
// ----------------------------------------------
// Call in filterscripts
pNetGame->GetFilterScripts()->OnGameModeExit();
CScriptTimers* pScriptTimers = pNetGame->GetTimers();
if(pScriptTimers) pScriptTimers->DeleteForMode(&m_amx);
if (m_bInitialised)
{
aux_FreeProgram(&m_amx);
pPlugins->DoAmxUnload(&m_amx);
amx_sampDbCleanup(&m_amx);
amx_TimeCleanup(&m_amx);
amx_FileCleanup(&m_amx);
amx_StringCleanup(&m_amx);
amx_FloatCleanup(&m_amx);
amx_CoreCleanup(&m_amx);
}
m_bInitialised = false;
m_bSleeping = false;
}
//----------------------------------------------------------------------------------
void CGameMode::Frame(float fElapsedTime)
{
if (!m_bInitialised)
return;
if (!m_bSleeping)
return;
if (m_fSleepTime > 0.0f)
{
m_fSleepTime -= fElapsedTime;
}
else
{
cell ret;
int err = amx_Exec(&m_amx, &ret, AMX_EXEC_CONT);
if (err == AMX_ERR_SLEEP)
{
m_bSleeping = true;
m_fSleepTime = ((float)ret / 1000.0f);
}
else
{
m_bSleeping = false;
AMXPrintError(this, &m_amx, err);
}
}
}
//----------------------------------------------------------------------------------
int CGameMode::CallPublic(char* szFuncName)
{
CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, szFuncName, &idx))
amx_Exec(&m_amx, &ret, idx);
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerConnect(playerid);
int CGameMode::OnPlayerConnect(cell playerid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnPlayerConnect", &idx))
{
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerDisconnect(playerid, reason);
int CGameMode::OnPlayerDisconnect(cell playerid, cell reason)
{
//CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnPlayerDisconnect", &idx))
{
amx_Push(&m_amx, reason);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerSpawn(playerid);
int CGameMode::OnPlayerSpawn(cell playerid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnPlayerSpawn", &idx))
{
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerDeath(playerid, killerid, reason);
int CGameMode::OnPlayerDeath(cell playerid, cell killerid, cell reason)
{
CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnPlayerDeath", &idx))
{
amx_Push(&m_amx, reason);
amx_Push(&m_amx, killerid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnVehicleSpawn(vehicleid);
int CGameMode::OnVehicleSpawn(cell vehicleid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnVehicleSpawn", &idx))
{
amx_Push(&m_amx, vehicleid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnVehicleDeath(vehicleid, killerid);
int CGameMode::OnVehicleDeath(cell vehicleid, cell killerid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnVehicleDeath", &idx))
{
amx_Push(&m_amx, killerid);
amx_Push(&m_amx, vehicleid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerText(playerid, text[]);
int CGameMode::OnPlayerText(cell playerid, unsigned char * szText)
{
CHECK_INIT();
int idx;
cell ret = 1; // DEFAULT TO 1!
int orig_strlen = strlen((char*)szText) + 1;
if (!amx_FindPublic(&m_amx, "OnPlayerText", &idx))
{
cell amx_addr, *phys_addr;
amx_PushString(&m_amx, &amx_addr, &phys_addr, (char*)szText, 0, 0);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
amx_GetString((char*)szText, phys_addr, 0, orig_strlen);
amx_Release(&m_amx, amx_addr);
}
if (ret && pNetGame->GetPlayerPool()->GetSlotState((PLAYERID)playerid)) {
pNetGame->GetPlayerPool()->GetAt((PLAYERID)playerid)->Say(szText, strlen((char*)szText));
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerCommandText(playerid, cmdtext[]);
int CGameMode::OnPlayerCommandText(cell playerid, unsigned char * szCommandText)
{
CHECK_INIT();
int idx;
cell ret = 0;
//int orig_strlen = strlen((char*)szCommandText);
if(!pNetGame->GetPlayerPool()->GetSlotState((PLAYERID)playerid))
return (int)ret;
if (!amx_FindPublic(&m_amx, "OnPlayerCommandText", &idx))
{
cell amx_addr, *phys_addr;
amx_PushString(&m_amx, &amx_addr, &phys_addr, (char*)szCommandText, 0, 0);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
amx_Release(&m_amx, amx_addr);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerInfoChange(playerid);
int CGameMode::OnPlayerInfoChange(cell playerid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnPlayerInfoChange", &idx))
{
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerRequestClass(playerid, classid);
int CGameMode::OnPlayerRequestClass(cell playerid, cell classid)
{
CHECK_INIT();
int idx;
cell ret = 1; // DEFAULT TO 1!
if(!pNetGame->GetPlayerPool()->GetSlotState((PLAYERID)playerid))
return (int)ret;
if (!amx_FindPublic(&m_amx, "OnPlayerRequestClass", &idx))
{
amx_Push(&m_amx, classid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerRequestSpawn(playerid);
int CGameMode::OnPlayerRequestSpawn(cell playerid)
{
CHECK_INIT();
int idx;
cell ret = 1; // DEFAULT TO 1!
if(!pNetGame->GetPlayerPool()->GetSlotState((PLAYERID)playerid))
return (int)ret;
if (!amx_FindPublic(&m_amx, "OnPlayerRequestSpawn", &idx))
{
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerEnterVehicle(playerid, vehicleid, ispassenger);
int CGameMode::OnPlayerEnterVehicle(cell playerid, cell vehicleid, cell ispassenger)
{
CHECK_INIT();
int idx;
cell ret = 0;
if(!pNetGame->GetPlayerPool()->GetSlotState((PLAYERID)playerid))
return (int)ret;
if (!amx_FindPublic(&m_amx, "OnPlayerEnterVehicle", &idx))
{
amx_Push(&m_amx, ispassenger);
amx_Push(&m_amx, vehicleid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerExitVehicle(playerid, vehicleid);
int CGameMode::OnPlayerExitVehicle(cell playerid, cell vehicleid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if(!pNetGame->GetPlayerPool()->GetSlotState((PLAYERID)playerid))
return (int)ret;
if (!amx_FindPublic(&m_amx, "OnPlayerExitVehicle", &idx))
{
amx_Push(&m_amx, vehicleid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerStateChange(playerid, newstate, oldstate);
int CGameMode::OnPlayerStateChange(cell playerid, cell newstate, cell oldstate)
{
CHECK_INIT();
int idx;
cell ret = 0;
if(!pNetGame->GetPlayerPool()->GetSlotState((PLAYERID)playerid))
return (int)ret;
if (!amx_FindPublic(&m_amx, "OnPlayerStateChange", &idx))
{
amx_Push(&m_amx, oldstate);
amx_Push(&m_amx, newstate);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid);
int CGameMode::OnPlayerInteriorChange(cell playerid, cell newid, cell oldid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if(!pNetGame->GetPlayerPool()->GetSlotState((PLAYERID)playerid))
return (int)ret;
if (!amx_FindPublic(&m_amx, "OnPlayerInteriorChange", &idx))
{
amx_Push(&m_amx, oldid);
amx_Push(&m_amx, newid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerEnterCheckpoint(playerid);
int CGameMode::OnPlayerEnterCheckpoint(cell playerid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if(!pNetGame->GetPlayerPool()->GetSlotState((PLAYERID)playerid))
return (int)ret;
if (!amx_FindPublic(&m_amx, "OnPlayerEnterCheckpoint", &idx))
{
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerLeaveCheckpoint(playerid);
int CGameMode::OnPlayerLeaveCheckpoint(cell playerid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnPlayerLeaveCheckpoint", &idx))
{
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerEnterRaceCheckpoint(playerid);
int CGameMode::OnPlayerEnterRaceCheckpoint(cell playerid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnPlayerEnterRaceCheckpoint", &idx))
{
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerLeaveRaceCheckpoint(playerid);
int CGameMode::OnPlayerLeaveRaceCheckpoint(cell playerid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnPlayerLeaveRaceCheckpoint", &idx))
{
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerKeyStateChange(playerid,newkeys,oldkeys);
int CGameMode::OnPlayerKeyStateChange(cell playerid, cell newkeys, cell oldkeys)
{
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnPlayerKeyStateChange", &idx))
{
amx_Push(&m_amx, oldkeys);
amx_Push(&m_amx, newkeys);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnRconCommand(cmd[]);
int CGameMode::OnRconCommand(char* szCommand)
{
CHECK_INIT();
int idx;
cell ret = 0;
//int orig_strlen = strlen(szCommand);
if (!amx_FindPublic(&m_amx, "OnRconCommand", &idx))
{
cell amx_addr, *phys_addr;
amx_PushString(&m_amx, &amx_addr, &phys_addr, szCommand, 0, 0);
amx_Exec(&m_amx, &ret, idx);
amx_Release(&m_amx, amx_addr);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnObjectMoved(objectid);
int CGameMode::OnObjectMoved(cell objectid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnObjectMoved", &idx))
{
amx_Push(&m_amx, objectid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerObjectMoved(playerid, objectid);
int CGameMode::OnPlayerObjectMoved(cell playerid, cell objectid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnPlayerObjectMoved", &idx))
{
amx_Push(&m_amx, objectid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerPickedUpPickup(playerid, pickupid);
int CGameMode::OnPlayerPickedUpPickup(cell playerid, cell pickupid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnPlayerPickUpPickup", &idx))
{
amx_Push(&m_amx, pickupid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerExitedMenu(playerid);
int CGameMode::OnPlayerExitedMenu(cell playerid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnPlayerExitedMenu", &idx))
{
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerSelectedMenuRow(playerid, row);
int CGameMode::OnPlayerSelectedMenuRow(cell playerid, cell row)
{
CHECK_INIT();
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnPlayerSelectedMenuRow", &idx))
{
amx_Push(&m_amx, row);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnVehicleRespray(playerid, vehicleid, color1, color2);
int CGameMode::OnVehicleRespray(cell playerid, cell vehicleid, cell color1, cell color2)
{
CHECK_INIT();
int idx;
cell ret = 1;
if (!amx_FindPublic(&m_amx, "OnVehicleRespray", &idx))
{
amx_Push(&m_amx, color2);
amx_Push(&m_amx, color1);
amx_Push(&m_amx, vehicleid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnVehicleMod(playerid, vehicleid, componentid);
int CGameMode::OnVehicleMod(cell playerid, cell vehicleid, cell componentid)
{
CHECK_INIT();
int idx;
cell ret = 1;
if (!amx_FindPublic(&m_amx, "OnVehicleMod", &idx))
{
amx_Push(&m_amx, componentid);
amx_Push(&m_amx, vehicleid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnEnterExitModShop(playerid, enterexit, interiorid);
int CGameMode::OnEnterExitModShop(cell playerid, cell enterexit, cell interiorid)
{
CHECK_INIT();
int idx;
cell ret = 1;
if(!amx_FindPublic(&m_amx, "OnEnterExitModShop", &idx))
{
amx_Push(&m_amx, interiorid);
amx_Push(&m_amx, enterexit);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnVehiclePaintjob(playerid, vehicleid, paintjobid);
int CGameMode::OnVehiclePaintjob(cell playerid, cell vehicleid, cell paintjobid)
{
CHECK_INIT();
int idx;
cell ret = 1;
if (!amx_FindPublic(&m_amx, "OnVehiclePaintjob", &idx))
{
amx_Push(&m_amx, paintjobid);
amx_Push(&m_amx, vehicleid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnScriptCash(playerid, amount, increasetype);
int CGameMode::OnScriptCash(cell playerid, cell amount, cell type)
{
CHECK_INIT();
int idx;
cell ret = 1;
if (!amx_FindPublic(&m_amx, "OnScriptCash", &idx))
{
amx_Push(&m_amx, type);
amx_Push(&m_amx, amount);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnRconLoginAttempt( ip[], password[], success );
int CGameMode::OnRconLoginAttempt(char *szIP, char *szPassword, cell success)
{
CHECK_INIT();
int idx;
cell ret;
if(!amx_FindPublic(&m_amx, "OnRconLoginAttempt", &idx))
{
cell amx_addr, amx_addr2, *phys_addr;
amx_Push(&m_amx, success);
amx_PushString(&m_amx, &amx_addr, &phys_addr, szPassword, 0, 0);
amx_PushString(&m_amx, &amx_addr2, &phys_addr, szIP, 0, 0);
amx_Exec(&m_amx, &ret, idx);
amx_Release(&m_amx, amx_addr);
amx_Release(&m_amx, amx_addr2);
}
return 1;
}
//----------------------------------------------------------------------------------
// forward OnPlayerUpdate(playerid)
int CGameMode::OnPlayerUpdate(cell playerid)
{
CHECK_INIT();
int idx;
cell ret = 1;
if(!amx_FindPublic(&m_amx, "OnPlayerUpdate", &idx))
{
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerStreamIn(playerid, forplayerid);
int CGameMode::OnPlayerStreamIn(cell playerid, cell forplayerid)
{
CHECK_INIT();
int idx;
cell ret = 1;
if(!amx_FindPublic(&m_amx, "OnPlayerStreamIn", &idx))
{
amx_Push(&m_amx, forplayerid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerStreamOut(playerid, forplayerid);
int CGameMode::OnPlayerStreamOut(cell playerid, cell forplayerid)
{
CHECK_INIT();
int idx;
cell ret = 1;
if(!amx_FindPublic(&m_amx, "OnPlayerStreamOut", &idx))
{
amx_Push(&m_amx, forplayerid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnVehicleStreamIn(vehicleid, forplayerid);
int CGameMode::OnVehicleStreamIn(cell vehicleid, cell forplayerid)
{
CHECK_INIT();
int idx;
cell ret = 1;
if(!amx_FindPublic(&m_amx, "OnVehicleStreamIn", &idx))
{
amx_Push(&m_amx, forplayerid);
amx_Push(&m_amx, vehicleid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnVehicleStreamOut(vehicleid, forplayerid);
int CGameMode::OnVehicleStreamOut(cell vehicleid, cell forplayerid)
{
CHECK_INIT();
int idx;
cell ret = 1;
if(!amx_FindPublic(&m_amx, "OnVehicleStreamOut", &idx))
{
amx_Push(&m_amx, forplayerid);
amx_Push(&m_amx, vehicleid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnActorStreamIn(actorid, forplayerid);
int CGameMode::OnActorStreamIn(cell actorid, cell forplayerid)
{
CHECK_INIT();
int idx;
cell ret = 1;
if(!amx_FindPublic(&m_amx, "OnActorStreamIn", &idx))
{
amx_Push(&m_amx, forplayerid);
amx_Push(&m_amx, actorid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnActorStreamOut(actorid, forplayerid);
int CGameMode::OnActorStreamOut(cell actorid, cell forplayerid)
{
CHECK_INIT();
int idx;
cell ret = 1;
if(!amx_FindPublic(&m_amx, "OnActorStreamOut", &idx))
{
amx_Push(&m_amx, forplayerid);
amx_Push(&m_amx, actorid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
int CGameMode::OnDialogResponse(cell playerid, cell dialogid, cell response, cell listitem, char *szInputText)
{
CHECK_INIT();
int idx;
cell ret = 0;
if(!pNetGame->GetPlayerPool()->GetSlotState((PLAYERID)playerid))
return (int)ret;
if(!amx_FindPublic(&m_amx, "OnDialogResponse", &idx))
{
cell amx_addr, *phys_addr;
amx_PushString(&m_amx, &amx_addr, &phys_addr, szInputText, 0, 0);
amx_Push(&m_amx, listitem);
amx_Push(&m_amx, response);
amx_Push(&m_amx, dialogid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
amx_Release(&m_amx, amx_addr);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerClickPlayer(playerid, clickedplayerid, source);
int CGameMode::OnPlayerClickPlayer(cell playerid, cell clickedplayerid, cell source)
{
CHECK_INIT();
int idx;
cell ret = 0;
if(!pNetGame->GetPlayerPool()->GetSlotState((PLAYERID)playerid))
return 0;
if(!amx_FindPublic(&m_amx, "OnPlayerClickPlayer", &idx))
{
amx_Push(&m_amx, source);
amx_Push(&m_amx, clickedplayerid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart);
int CGameMode::OnPlayerTakeDamage(cell playerid, cell issuerid, float amount, cell weaponid, cell bodypart)
{
int idx;
cell ret = 0;
if(!amx_FindPublic(&m_amx, "OnPlayerTakeDamage", &idx))
{
amx_Push(&m_amx, bodypart);
amx_Push(&m_amx, weaponid);
amx_Push(&m_amx, amx_ftoc(amount));
amx_Push(&m_amx, issuerid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart);
int CGameMode::OnPlayerGiveDamage(cell playerid, cell damagedid, float amount, cell weaponid, cell bodypart)
{
int idx;
cell ret = 0;
if(!amx_FindPublic(&m_amx, "OnPlayerGiveDamage", &idx))
{
amx_Push(&m_amx, bodypart);
amx_Push(&m_amx, weaponid);
amx_Push(&m_amx, amx_ftoc(amount));
amx_Push(&m_amx, damagedid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerGiveDamageActor(playerid, damaged_actorid, Float:amount, weaponid, bodypart);
int CGameMode::OnPlayerGiveDamageActor(cell playerid, cell damaged_actorid, float amount, cell weaponid, cell bodypart)
{
int idx;
cell ret = 0;
if(!amx_FindPublic(&m_amx, "OnPlayerGiveDamageActor", &idx))
{
amx_Push(&m_amx, bodypart);
amx_Push(&m_amx, weaponid);
amx_Push(&m_amx, amx_ftoc(amount));
amx_Push(&m_amx, damaged_actorid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnVehicleDamageStatusUpdate(vehicleid, playerid);
int CGameMode::OnVehicleDamageStatusUpdate(cell vehicleid, cell playerid)
{
CHECK_INIT();
int idx;
cell ret = 0;
if(!amx_FindPublic(&m_amx, "OnVehicleDamageStatusUpdate", &idx))
{
amx_Push(&m_amx, playerid);
amx_Push(&m_amx, vehicleid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, Float:new_x, Float:new_y, Float:new_z, Float:vel_x, Float:vel_y, Float:vel_z);
int CGameMode::OnUnoccupiedVehicleUpdate(cell vehicleid, cell playerid, cell passenger_seat, int a5, PVECTOR vecNew, PVECTOR vecVel)
{
CHECK_INIT();
int idx;
cell ret = 1;
cell vel_y = amx_ftoc(vecVel->Y);
cell vel_z = amx_ftoc(vecVel->Z);
cell vel_x = amx_ftoc(vecVel->X);
cell new_x = amx_ftoc(vecNew->X);
cell new_y = amx_ftoc(vecNew->Y);
cell new_z = amx_ftoc(vecNew->Z);
if(!amx_FindPublic(&m_amx, "OnUnoccupiedVehicleUpdate", &idx))
{
amx_Push(&m_amx, vel_z);
amx_Push(&m_amx, vel_y);
amx_Push(&m_amx, vel_x);
amx_Push(&m_amx, new_z);
amx_Push(&m_amx, new_y);
amx_Push(&m_amx, new_x);
amx_Push(&m_amx, passenger_seat);
amx_Push(&m_amx, playerid);
amx_Push(&m_amx, vehicleid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ);
int CGameMode::OnPlayerClickMap(cell playerid, float fX, float fY, float fZ)
{
int idx;
cell ret = 0;
if(!amx_FindPublic(&m_amx, "OnPlayerClickMap", &idx))
{
amx_Push(&m_amx, amx_ftoc(fZ));
amx_Push(&m_amx, amx_ftoc(fY));
amx_Push(&m_amx, amx_ftoc(fX));
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerEditAttachedObject(playerid, response, index, modelid, boneid,
// Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ,
// Float:fRotX, Float:fRotY, Float:fRotZ,
// Float:fScaleX, Float:fScaleY, Float:fScaleZ );
int CGameMode::OnPlayerEditAttachedObject(cell playerid, cell index, cell response, struc_64 *pInfo)
{
int idx;
cell ret = 0;
cell offset_x = amx_ftoc(pInfo->vecOffset.X);
cell offset_y = amx_ftoc(pInfo->vecOffset.Y);
cell offset_z = amx_ftoc(pInfo->vecOffset.Z);
cell rot_x = amx_ftoc(pInfo->vecRotation.X);
cell rot_y = amx_ftoc(pInfo->vecRotation.Y);
cell rot_z = amx_ftoc(pInfo->vecRotation.Z);
cell scale_x = amx_ftoc(pInfo->vecScale.X);
cell scale_y = amx_ftoc(pInfo->vecScale.Y);
cell scale_z = amx_ftoc(pInfo->vecScale.Z);
if(!amx_FindPublic(&m_amx, "OnPlayerEditAttachedObject", &idx))
{
amx_Push(&m_amx, scale_z);
amx_Push(&m_amx, scale_y);
amx_Push(&m_amx, scale_x);
amx_Push(&m_amx, rot_z);
amx_Push(&m_amx, rot_y);
amx_Push(&m_amx, rot_x);
amx_Push(&m_amx, offset_z);
amx_Push(&m_amx, offset_y);
amx_Push(&m_amx, offset_x);
amx_Push(&m_amx, pInfo->iBoneID);
amx_Push(&m_amx, pInfo->iModelID);
amx_Push(&m_amx, index);
amx_Push(&m_amx, response);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerEditObject( playerid, playerobject, objectid, response,
// Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ );
int CGameMode::OnPlayerEditObject(cell playerid, cell playerobject, cell objectid, cell response, float fX, float fY, float fZ, float fRotX, float fRotY, float fRotZ)
{
int idx;
cell ret = 0;
if(!amx_FindPublic(&m_amx, "OnPlayerEditObject", &idx))
{
amx_Push(&m_amx, amx_ftoc(fRotZ));
amx_Push(&m_amx, amx_ftoc(fRotY));
amx_Push(&m_amx, amx_ftoc(fRotX));
amx_Push(&m_amx, amx_ftoc(fZ));
amx_Push(&m_amx, amx_ftoc(fY));
amx_Push(&m_amx, amx_ftoc(fX));
amx_Push(&m_amx, response);
amx_Push(&m_amx, objectid);
amx_Push(&m_amx, playerobject);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ);
int CGameMode::OnPlayerSelectObject(cell playerid, cell type, cell objectid, cell modelid, float fX, float fY, float fZ)
{
int idx;
cell ret = 0;
if(!amx_FindPublic(&m_amx, "OnPlayerSelectObject", &idx))
{
amx_Push(&m_amx, amx_ftoc(fZ));
amx_Push(&m_amx, amx_ftoc(fY));
amx_Push(&m_amx, amx_ftoc(fX));
amx_Push(&m_amx, modelid);
amx_Push(&m_amx, objectid);
amx_Push(&m_amx, type);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerClickTextDraw(playerid, Text:clickedid);
int CGameMode::OnPlayerClickTextDraw(cell playerid, cell clickedid)
{
int idx;
cell ret = 0;
if(!amx_FindPublic(&m_amx, "OnPlayerClickTextDraw", &idx))
{
amx_Push(&m_amx, clickedid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid);
int CGameMode::OnPlayerClickPlayerTextDraw(cell playerid, cell playertextid)
{
int idx;
cell ret = 0;
if(!amx_FindPublic(&m_amx, "OnPlayerClickPlayerTextDraw", &idx))
{
amx_Push(&m_amx, playertextid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
int CGameMode::OnClientCheckResponse(cell a2, cell a3, cell a4, cell a5)
{
int idx;
cell ret = 0;
if(!amx_FindPublic(&m_amx, "OnClientCheckResponse", &idx))
{
amx_Push(&m_amx, a5);
amx_Push(&m_amx, a4);
amx_Push(&m_amx, a3);
amx_Push(&m_amx, a2);
amx_Exec(&m_amx, &ret, idx);
if(ret) return 1;
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
int CGameMode::OnPlayerWeaponShot(cell playerid, cell weaponid, cell hittype, cell hitid, PVECTOR vecPos)
{
int idx;
cell ret = 1;
cell x = amx_ftoc(vecPos->X);
cell y = amx_ftoc(vecPos->Y);
cell z = amx_ftoc(vecPos->Z);
if(!amx_FindPublic(&m_amx, "OnPlayerWeaponShot", &idx))
{
amx_Push(&m_amx, z);
amx_Push(&m_amx, y);
amx_Push(&m_amx, x);
amx_Push(&m_amx, hitid);
amx_Push(&m_amx, hittype);
amx_Push(&m_amx, weaponid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnIncomingConnection(playerid, ip_address[], port);
int CGameMode::OnIncomingConnection(cell playerid, char *ip_address, cell port)
{
int idx;
cell ret = 0;
if (!amx_FindPublic(&m_amx, "OnIncomingConnection", &idx))
{
cell amx_addr, *phys_addr;
amx_Push(&m_amx, port);
amx_PushString(&m_amx, &amx_addr, &phys_addr, ip_address, 0, 0);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
amx_Release(&m_amx, amx_addr);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnTrailerUpdate(playerid, vehicleid);
int CGameMode::OnTrailerUpdate(cell playerid, cell vehicleid)
{
int idx;
cell ret = 1;
if(!amx_FindPublic(&m_amx, "OnTrailerUpdate", &idx))
{
amx_Push(&m_amx, vehicleid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------
// forward OnVehicleSirenStateChange(playerid, vehicleid, newstate);
int CGameMode::OnVehicleSirenStateChange(cell playerid, cell vehicleid, cell newstate)
{
int idx;
cell ret = 1;
if(!amx_FindPublic(&m_amx, "OnVehicleSirenStateChange", &idx))
{
amx_Push(&m_amx, newstate);
amx_Push(&m_amx, vehicleid);
amx_Push(&m_amx, playerid);
amx_Exec(&m_amx, &ret, idx);
}
return (int)ret;
}
//----------------------------------------------------------------------------------