03.02.2015, 22:20
(
Последний раз редактировалось Gryphus One; 07.02.2015 в 00:23.
Причина: Solved
)
Hello, in my gamemode I have an include called callbackflooddetector that tells me if a player floods certain callbacks, because some players do that with specialized hacking tools as a way of attacking my server. Until now I was using defines for the callbacks that I want to detect flood on, but since the number of those callbacks also affects the number of cells of one of my arrays, I now thought it was better to use an enum.
To avoid very long chunks of code, I'm posting only the lines that are relevant to my problem, instead of the entire include.
This was my include before, when using defines:
And this is my new code, using an enum instead:
However, now that I'm using that enum, when I compile my gamemode with pawno I get 2 tag mismatch warnings, one for this line:
and the other for this one:
Why is this happening if all of them are just plain integers?
To avoid very long chunks of code, I'm posting only the lines that are relevant to my problem, instead of the entire include.
This was my include before, when using defines:
pawn Код:
#if defined _calflodet_included
#endinput
#endif
#define _calflodet_included
#include <a_samp>
#define mintimebetweencallbacks 200 // In miliseconds.
#define cfdOnDialogResponse 0
#define cfdOnEnterExitModShop 1
#define cfdOnPlayerClickMap 2
#define cfdOnPlayerClickPlayer 3
#define cfdOnPlayerClickPlayerTextDraw 4
#define cfdOnPlayerClickTextDraw 5
#define cfdOnPlayerDisconnect 6
#define cfdOnPlayerEditAttachedObject 7
#define cfdOnPlayerEditObject 8
#define cfdOnPlayerEnterCheckpoint 9
#define cfdOnPlayerEnterRaceCheckpoint 10
#define cfdOnPlayerEnterVehicle 11
#define cfdOnPlayerExitVehicle 12
#define cfdOnPlayerExitedMenu 13
#define cfdOnPlayerInteriorChange 14
#define cfdOnPlayerLeaveCheckpoint 15
#define cfdOnPlayerLeaveRaceCheckpoint 16
#define cfdOnPlayerObjectMoved 17
#define cfdOnPlayerPickUpPickup 18
#define cfdOnPlayerRequestClass 19
#define cfdOnPlayerRequestSpawn 20
#define cfdOnPlayerSelectObject 21
#define cfdOnPlayerSelectedMenuRow 22
#define cfdOnPlayerStateChange 23
#define cfdOnVehicleRespray 24
new stock lastcallbacktime[MAX_PLAYERS][25]; // This is where I would have to manually change the number of cells if I add or remove defines.
stock checkcallbackflood(playerid, callback)
{
new currenttime, bool:flood;
currenttime = GetTickCount();
if( (currenttime - lastcallbacktime[playerid][callback]) < mintimebetweencallbacks )
{
flood = true;
}
lastcallbacktime[playerid][callback] = currenttime;
if(flood)
{
CallRemoteFunction("OnCallbackFlood", "ii", playerid, callback); // I use CallRemoteFunction so I can use this custom callback in filterscripts too.
return 1;
}
return 0;
}
pawn Код:
#if defined _calflodet_included
#endinput
#endif
#define _calflodet_included
#include <a_samp>
#define mintimebetweencallbacks 200 // In miliseconds.
enum cfdCallbacks
{
cfdOnDialogResponse,
cfdOnEnterExitModShop,
cfdOnPlayerClickMap,
cfdOnPlayerClickPlayer,
cfdOnPlayerClickPlayerTextDraw,
cfdOnPlayerClickTextDraw,
cfdOnPlayerDisconnect,
cfdOnPlayerEditAttachedObject,
cfdOnPlayerEditObject,
cfdOnPlayerEnterCheckpoint,
cfdOnPlayerEnterRaceCheckpoint,
cfdOnPlayerEnterVehicle,
cfdOnPlayerExitVehicle,
cfdOnPlayerExitedMenu,
cfdOnPlayerInteriorChange,
cfdOnPlayerLeaveCheckpoint,
cfdOnPlayerLeaveRaceCheckpoint,
cfdOnPlayerObjectMoved,
cfdOnPlayerPickUpPickup,
cfdOnPlayerRequestClass,
cfdOnPlayerRequestSpawn,
cfdOnPlayerSelectObject,
cfdOnPlayerSelectedMenuRow,
cfdOnPlayerStateChange,
cfdOnVehicleRespray,
};
new stock lastcallbacktime[MAX_PLAYERS][cfdCallbacks]; // Now, if I add or remove callbacks from the enum, the number of cells will be automatically adjusted.
stock checkcallbackflood(playerid, callback)
{
new currenttime, bool:flood;
currenttime = GetTickCount();
if( (currenttime - lastcallbacktime[playerid][callback]) < mintimebetweencallbacks )
{
flood = true;
}
lastcallbacktime[playerid][callback] = currenttime;
if(flood)
{
CallRemoteFunction("OnCallbackFlood", "ii", playerid, callback); // I use CallRemoteFunction so I can use this custom callback in filterscripts too.
return 1;
}
return 0;
}
pawn Код:
if( (currenttime - lastcallbacktime[playerid][callback]) < mintimebetweencallbacks )
pawn Код:
lastcallbacktime[playerid][callback] = currenttime;