17.01.2010, 02:48
This is a simple proof of concept anti-airbreak that I made. It works by getting the players Z position, and if it is a certain distance higher than the ground height, then you can do something.
An issue I couldn't figure out for the time, is that if a player goes off a massive jump, or jumps off a massivly high building, then they will be above the ground like a hacker would be. This issue makes this just a proof of concept.
Note: This filterscript requires the MapAndreas plugin. It also requires the foreach include.
An issue I couldn't figure out for the time, is that if a player goes off a massive jump, or jumps off a massivly high building, then they will be above the ground like a hacker would be. This issue makes this just a proof of concept.
Note: This filterscript requires the MapAndreas plugin. It also requires the foreach include.
Code:
//Simple Anti-Airbreak
//If the player is more than 10 meters above the ground, and not in a vehicle, then ban the player.
//(More than 100 meters off the ground for all non-planes/helis) - Player could go off jumps
#pragma tabsize 0
#include <a_samp>
#include <mapandreas>
#include <foreach> // ForEach Loop
#include "../include/gl_common.inc"
forward AirBreak();
public OnFilterScriptInit()
{
print("\nAnti-AirBreak Loaded\n");
MapAndreas_Init(MAP_ANDREAS_MODE_FULL);
SetTimer("AirBreak", 2900, true);
return 1;
}
IsVehicleAir(playerid, vehicleid)
{
vehicleid = GetPlayerVehicleID(playerid);
switch(GetVehicleModel(vehicleid))
{
case 592, 577, 511, 512, 593, 520, 553, 476, 519, 460, 513, 548, 425, 417, 487, 488, 498, 563, 447, 469: return true;
}
return false;
}
public AirBreak()
{
foreach (Player, i)
{
new Float:X, Float:Y, Float:Z, Float:ZM, Float:difference;
GetPlayerPos(i,X,Y,Z); //Get the players position
MapAndreas_FindZ_For2DCoord(X,Y,ZM); //Gets the max Z cord
difference = Z-ZM;
if(!IsVehicleAir(i, GetPlayerVehicleID(i)))
{
if (difference > 100 && GetPlayerState(i) == PLAYER_STATE_PASSENGER || GetPlayerState(i) == PLAYER_STATE_DRIVER)
{
//Do something here, like send a warning to admins or ban the player
}
//If players Z cord is more than 100 meters above the ground
if(difference > 10 && GetPlayerState(i) == PLAYER_STATE_ONFOOT)
{
//Do something here, like send a warning to admins or ban the playe
}
}
}
}

