Guten Tag, ich habe versucht mal ein eigenes anti Airbreake/speedhack system zu scripten.
Dazu frage ich innerhalb 2 sekunden 2 mal die posi ab und errechne die distanz zwischen den posis. wenn die distanz höher als 50m ist, bekommen die Admins ne warnung.
Sobald er mit einem Fahrzeug oder zu fuß über 550m ist ( Höchste punkt den man erreichen kann ~530 ) bekommen die Admins ebenfalls ne warnung. Wenn man in einem Flugobjekt sitzt und über 1000m kommt ( Höchstens ~960 zu schaffen) bekommen die Admins auch eine warnung.
Das einzige was nicht klappt, ist das mit der Distanz. sobald ich in ein autosteige, kommen jede sekund warnungen rein, obwohl ich mich kein mm bewege.
Hier ma scriptausschnitt:
public check()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
//airbreake:
new Float:px[3], Float:py[3], Float:pz[3];
if(gestorben[i] == 0 && gespawnt[i] == 0 && teleport[i] == 0 && mapport[i] == 0 && geslappt[i] == 0)
{
if(GetPlayerInterior(i) == 0 && GetPlayerVirtualWorld(i) == 0)
{
if(GetPlayerState(i) == PLAYER_STATE_DRIVER)
{
if(Airbreakecheck[i] == 0)
{
GetPlayerPos(i,px[0],py[0],pz[0]);
Airbreakecheck[i]++;
}
else if(Airbreakecheck[i] == 1)
{
GetPlayerPos(i,px[1],py[1],pz[1]);
if(distanz(i,px[0],py[0],pz[0],px[1],py[1],pz[1]) >= 50)
{
//cheater[i]++;
new str[125];
format(str,sizeof(str),"[System] %s(%d) steht unter Verdacht eines Airbreak/Speedhack-Hacks!",name,i);
Bangrund[i] = "Speedhack";
for(new j = 0; j < MAX_PLAYERS; j++)
{
if(Spieler[j][Admin] >= 2)
{
SendClientMessage(j,0xFFFF00FF,str);
}
}
}
Airbreakcheck[i] = 0;
}
GetPlayerPos(i,px[2],py[2],pz[2]);
if(pz[2] >= 1000)
{
//cheater[i]++;
new str[125];
format(str,sizeof(str),"[System] %s(%d) steht unter Verdacht eines Airbreak/Speedhack-Hacks!",name,i);
Bangrund[i] = "Speedhack";
for(new j = 0; j < MAX_PLAYERS; j++)
{
if(Spieler[j][Admin] >= 2)
{
SendClientMessage(j,0xFFFF00FF,str);
}
}
}
else if(pz[2] >= 550)
{
if(!IstImFlugobjekt(i))
{
//cheater[i]++;
new str[125];
format(str,sizeof(str),"[System] %s(%d) steht unter Verdacht eines Airbreak/Speedhack-Hacks!",name,i);
Bangrund[i] = "Speedhack";
for(new j = 0; j < MAX_PLAYERS; j++)
{
if(Spieler[j][Admin] >= 2)
{
SendClientMessage(j,0xFFFF00FF,str);
}
}
}
}
}
}
}
if(cheater[i] >= 5)
{
new bstr[125];
format(bstr,sizeof(bstr),"%s wurde vom System gebannt, Grund: %s.",name,Bangrund[i]);
SendClientMessageToAll(0xFF6347FF,bstr);
Spieler[i][ban] = 1;
Spieler[i][bangrund] = Bangrund[i];
Kick(i);
}
}
}
}
return 1;
}
Ob er in einem Flugzeug sitzt:
public IstImFlugobjekt(playerid)
{
new vehicleid = GetPlayerVehicleID(playerid);
new model = GetVehicleModel(vehicleid);
if(model == 417 || model == 425 || model == 447 || model == 460 || model == 469 || model == 476 || model == 487 || model == 488 || model == 497 || model == 511 || model == 512 || model == 513 || model == 519 || model == 520 || model == 548 || model == 553 || model == 563 || model == 577 || model == 592 || model == 593) return 1;
return 0;
}
die distanz errechnen aus den 2 posis:
stock distanz(playerid,Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2)
{
new Float:dis;
if (!IsPlayerConnected(playerid)) return -1;
dis = floatsqroot(floatpower(floatabs(floatsub(x1,x2)),2)+floatpower(floatabs(floatsub(y1,y2)),2)+floatpower(floatabs(floatsub(z1,z2)),2));
return floatround(dis);
}
Ich hoffe ihr könnt mir da weiterhelfen.
MfG
Simon