31.08.2015, 19:57
I started o make anti-cheat and i don`t have ideea how to make that serverside for weapons, anybody can help me with informations ?
I started o make anti-cheat and i don`t have ideea how to make that serverside for weapons, anybody can help me with informations ?
|
// Init checker for players
static bool:cheater[MAX_PLAYER_NAME];
stock GivePlayerValidWeapon(playerid, weaponid, ammo) {
new
str[16]
;
format(str, sizeof(str), "WEAPON%d", weaponid);
SetPVarInt(playerid, str, weaponid);
format(str, sizeof(str), "AMMO%d", weaponid);
SetPVarInt(playerid, str, GetrPVarInt(playerid, str) + ammo);
GivePlayerWeapon(playerid, weaponid, ammo);
}
stock GetPlayerValidAmmo(playerid) {
new weaponid = GetPlayerWeapon(playerid);
if (!weaponid) return 0;
new
str[16]
;
format(str, sizeof(str), "AMMO%d", weaponid);
return GetPVarInt(playerid, str);
}
stock GetPlayerValidWeapon(playerid) {
new weaponid = GetPlayerWeapon(playerid);
if (!weaponid) return 0;
new
str[16]
;
format(str, sizeof(str), "WEAPON%d", weaponid);
return GetPVarInt(playerid, str);
}
stock ResetPlayerValidWeapon(playerid) {
new
str[16]
;
for (new i; i < 47; i++) {
format(str, sizeof(str), "AMMO%d", i);
DeletePVar(playerid, str);
format(str, sizeof(str), "WEAPON%d", i);
DeletePVar(playerid, str);
}
}
forward KickPlayer(playerid);
public KickPlayer(playerid) {
Kick(playerid);
return true;
}
public OnPlayerSpawn(playerid) {
GivePlayerValidWeapon(playerid, 31, 200); // Give M4 ammo x200
return true;
}
public OnPlayerDisconnect(playerid, reason) {
ResetPlayerValidWeapon(playerid); // Reset all weapons
cheater[playerid] = false;
return true;
}
public OnPlayerUpdate(playerid) {
if (GetPlayerValidWeapon(playerid) != GetPlayerWeapon(playerid) && !cheater[playerid]) { // Cheсk hack weapon
new
msg[256],
name[MAX_PLAYER_NAME],
weapon[24]
;
GetPlayerName(playerid, name, sizeof(name));
GetWeaponName(GetPlayerWeapon(playerid), weapon, sizeof(weapon));
format(msg, sizeof(msg), "Srever: %s(%d) has kicked for WeaponHack %s", name, playerid, weapon);
SendClientMessageToAll(-1, msg);
SetTimerEx("KickPlayer", 200, 0, "i", playerid); // Kick cheater
cheater[playerid] = true;
}
return true;
}
gPlayerWeaponData[MAX_PLAYERS][47]
SafeGivePlayerWeapon(playerid, weaponid, ammo)
{
gPlayerWeaponData[playerid][weaponid] = ammo;
return GivePlayerWeapon(playerid, weaponid, ammo);
}
PVars are way too slow, especially if coupled with format and OnPlayerUpdate. I'd rather use an array like:
pawn Код:
pawn Код:
|
PVars are way too slow, especially if coupled with format and OnPlayerUpdate. I'd rather use an array like:
pawn Код:
pawn Код:
|