Hallo!
Ich habe das Problem, dass wenn ich auf mein Server Connecte, sofort wegen Healhack gekickt werde.
Dabei habe ich garkein Cheat installiert.
(Public free Anticheat http://download.tionsys.de/[PAWN]Anticheat_1.5.zip)
Der Code:
#include <a_samp>
#define Anticheat true
#define function%1(%2) forward%1(%2);public%1(%2)
#define ConnectionCheck(%1); if(!IsPlayerConnected(%1)) { return 1; }
#define ConnectionBreakCheck(%1); if(!IsPlayerConnected(%1)) { break; }
#define PlayerName(%1,%2); new %2[MAX_PLAYER_NAME]; GetPlayerName(%1, %2, sizeof(%2));
#define Log(%1,%2); { new _string[128]; format(_string, 128, %1, %2); _ANTICHEAT_Log(_string); }
#define KickPlayer(%1,%2,%3); { new _string[128]; format(_string, 128, %1, %2); SendClientMessageToAll(0xFFFF00AA, _string); Kick(%3); }
#define WarnPlayer(%1,%2,%3); { new _string[128]; format(_string, 128, %2, %3); SendClientMessage(%1, 0xFFFF00AA, _string); }
new timer;
enum PlayerInfos
{
bool: GatMoney,
pMoney,
bool: GatHealth,
Float: pHealth,
bool: GatArmour,
Float: pArmour,
bool: PlayerLooseMoney,
pDriveBys
}
new Player[MAX_PLAYERS][PlayerInfos];
enum AnticheatInfos
{
aName[128],
aValue // Why not using bool's ? You will see later ;)
}
new AnticheatInfo[4][AnticheatInfos] = {
{"Moneycheat", 1},
{"Healhack", 1},
{"Armourhack", 1},
{"DriveBy", 1}
};
enum PickupInfos
{
bool: pUsed,
pID,
pModel,
pType,
Float:pX,
Float:pY,
Float:pZ,
pVirtualworld
}
new PickupInfo[MAX_PICKUPS][PickupInfos];
public OnFilterScriptInit()
{
printf("* Anticheat ( Beta ) by Tion loadet");
timer = SetTimer("_ANTICHEAT_Main", 2000, true);
return true;
}
public OnFilterScriptExit()
{
printf("* Anticheat ( Beta ) by Tion unloadet");
KillTimer(timer);
return true;
}
public OnPlayerDeath(playerid, killerid, reason)
{
new vehicleid;
new vehiclemodel;
if(GetPlayerState(killerid) == PLAYER_STATE_DRIVER)
{
vehicleid = GetPlayerVehicleID(killerid);
vehiclemodel = GetVehicleModel(vehicleid);
if(IsPlayerInAnyVehicle(playerid)) { return true; }
if(vehiclemodel == 425) { return true; } // Hunter
if(vehiclemodel == 432) { return true; } // Rhino
if(vehiclemodel == 447) { return true; } // Seasparrow
if(vehiclemodel == 472) { return true; } // Not shure, I think Coastguard can shoot ?!?
if(vehiclemodel == 520) { return true; } // Hydra
if(AnticheatInfo[3][aValue] == 1) // Testing vor DrivyBy - if activatet
{
Player[killerid][pDriveBys]++;
if(Player[killerid][pDriveBys] > 3)
{
PlayerName(killerid, Name);
KickPlayer("Anticheat: %s wurde wegen DrivyBy gekickt", Name, killerid);
Player[killerid][pDriveBys] = 0;
}
else
{
WarnPlayer(killerid, "Anticheat: DriveBy ist auf diesem Server verboten, Warnung %d", Player[killerid][pDriveBys]);
}
}
}
return 1;
}
public OnPlayerConnect(playerid)
{
Player[playerid][GatMoney] = false;
Player[playerid][pMoney] = 10000; // I dont know why but while connection on a Server i always have $10.000 on my hand ?!?
Player[playerid][GatHealth] = false;
Player[playerid][pHealth] = 100;
Player[playerid][GatArmour] = false;
Player[playerid][pArmour] = 0;
Player[playerid][PlayerLooseMoney] = false;
Player[playerid][pDriveBys] = 0;
return true;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
for(new i = 0; i < MAX_PICKUPS; i++)
{
if((PickupInfo[i][pUsed] == true) && (pickupid == PickupInfo[i][pID]))
{
if(PickupInfo[i][pModel] == 1240) { Player[playerid][GatHealth] = true; _ANTICHEAT_SetPlayerHealth(playerid, 100); } // Heal Pickup
if(PickupInfo[i][pModel] == 1242) { Player[playerid][GatArmour] = true; _ANTICHEAT_SetPlayerArmour(playerid, 100); } // Armour Pickup
}
}
}
// Das AntiMoney-System | The AntiMoney-System
function _ANTICHEAT_GivePlayerMoney(playerid, money)
{
ConnectionCheck(playerid);
Player[playerid][GatMoney] = true;
Player[playerid][pMoney] += money;
GivePlayerMoney(playerid, money);
return true;
}
function _ANTICHEAT_ResetPlayerMoney(playerid)
{
ConnectionCheck(playerid);
Player[playerid][pMoney] = 0;
ResetPlayerMoney(playerid);
return true;
}
function _ANTICHEAT_GetPlayerMoney(playerid)
{
ConnectionCheck(playerid);
return Player[playerid][pMoney];
}
// Das Anti-Healhack-System | The Antihealhacksystem
function _ANTICHEAT_SetPlayerHealth(playerid, Float: health)
{
Player[playerid][GatHealth] = true;
Player[playerid][pHealth] = health;
SetPlayerHealth(playerid, health);
return true;
}
function _ANTICHEAT_GetPlayerHealth(playerid, &Float: health)
{
health = Player[playerid][pHealth];
return true;
}
// Das Anti-Armourhack-System | The Anti-Armourhack-System
function _ANTICHEAT_SetPlayerArmour(playerid, Float: armour)
{
Player[playerid][GatArmour] = true;
Player[playerid][pArmour] = armour;
SetPlayerArmour(playerid, armour);
return true;
}
function _ANTICHEAT_GetPlayerArmour(playerid, &Float: armour)
{
armour = Player[playerid][pArmour];
return true;
}
function _ANTICHEAT_CreatePickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld)
{
for(new i = 0; i < MAX_PICKUPS; i++)
{
if(PickupInfo[i][pUsed] == false)
{
PickupInfo[i][pUsed] = true;
PickupInfo[i][pType] = type;
PickupInfo[i][pX] = X;
PickupInfo[i][pY] = X;
PickupInfo[i][pZ] = Z;
PickupInfo[i][pVirtualworld] = Virtualworld;
PickupInfo[i][pID] = CreatePickup(model, type, X, Y, Z, Virtualworld);
return PickupInfo[i][pID];
}
}
return -1;
}
function _ANTICHEAT_AddStaticPickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld)
{
for(new i = 0; i < MAX_PICKUPS; i++)
{
if(PickupInfo[i][pUsed] == false)
{
PickupInfo[i][pUsed] = true;
PickupInfo[i][pType] = type;
PickupInfo[i][pX] = X;
PickupInfo[i][pY] = X;
PickupInfo[i][pZ] = Z;
PickupInfo[i][pVirtualworld] = Virtualworld;
PickupInfo[i][pID] = CreatePickup(model, type, X, Y, Z, Virtualworld);
return true;
}
}
return false;
}
function _ANTICHEAT_DestroyPickup(pickup)
{
for(new i = 0; i < MAX_PICKUPS; i++)
{
if(pickup == PickupInfo[i][pID])
{
DestroyPickup(PickupInfo[i][pID]);
PickupInfo[i][pUsed] = false;
return true;
}
}
return false;
}
function _ANTICHEAT_Main()
{
new Float: PlayerHealth, Float: PlayerArmour;
for(new i = 0; i < MAX_PLAYERS; i++)
{
// Vorbereitung durch Onlinecheck und herausfinden des Namens | Preparing with Onlinechack and finding out the name
ConnectionBreakCheck(i);
PlayerName(i, Name);
// Antimoneyhack | Antimoneyhack
if(AnticheatInfo[0][aValue] == 1)
{
if(Player[i][GatMoney] == false)
{
if(GetPlayerMoney(i) > Player[i][pMoney]) { ResetPlayerMoney(i); GivePlayerMoney(i, Player[i][pMoney]); Log("%s Moneycheat", Name); }
if(GetPlayerMoney(i) < Player[i][pMoney]) { _ANTICHEAT_GivePlayerMoney(i, -(Player[i][pMoney] - GetPlayerMoney(i))); Player[i][PlayerLooseMoney] = true; }
}
Player[i][GatMoney] = false;
}
else { _ANTICHEAT_ResetPlayerMoney(i); _ANTICHEAT_GivePlayerMoney(i, GetPlayerMoney(i)); }
// Anti Healhack | Anti Healhack
if(AnticheatInfo[1][aValue] == 1)
{
if(Player[i][GatHealth] == false)
{
GetPlayerHealth(i, PlayerHealth);
if(PlayerHealth > Player[i][pHealth] && Player[i][PlayerLooseMoney] == false) { Log("%s Healhack", Name); KickPlayer("Anticheat: %s wird wegen Healhacks gekickt", Name, i); }
if(PlayerHealth > Player[i][pHealth] && Player[i][PlayerLooseMoney] == true) { _ANTICHEAT_SetPlayerHealth(i, PlayerHealth); }
if(PlayerHealth < Player[i][pHealth]) { _ANTICHEAT_SetPlayerHealth(i, PlayerHealth); }
}
Player[i][PlayerLooseMoney] = false;
Player[i][GatHealth] = false;
}
else { GetPlayerHealth(i, PlayerHealth); _ANTICHEAT_SetPlayerHealth(i, PlayerHealth); }
// Anti Armorhack | Anti Armourhack
if(AnticheatInfo[2][aValue] == 1)
{
if(Player[i][GatArmour] == false)
{
GetPlayerArmour(i, PlayerArmour);
if(PlayerArmour > Player[i][pArmour]) { Log("%s Armorhack", Name); KickPlayer("Anticheat: %s wird wegen Armourhacks gekickt", Name, i); }
if(PlayerArmour < Player[i][pArmour]) { _ANTICHEAT_SetPlayerArmour(i, PlayerArmour); }
}
Player[i][GatArmour] = false;
}
else { GetPlayerArmour(i, PlayerArmour); _ANTICHEAT_SetPlayerArmour(i, PlayerArmour); }
}
return true;
}
// Nur mal so, zum Spaß ;) | Just for Fun ;)
function _ANTICHEAT_ChangeAnticheatTimer(interval)
{
KillTimer(timer);
timer = SetTimer("_ANTICHEAT_Main", interval * 1000, true);
return true;
}
// Bitte aufrufen mit "Log(string[], params,... );" | Please call with "Log(string[], params,... );"
function _ANTICHEAT_Log(string[])
{
#include <a_samp>
#define Anticheat true
#define function%1(%2) forward%1(%2);public%1(%2)
#define ConnectionCheck(%1); if(!IsPlayerConnected(%1)) { return 1; }
#define ConnectionBreakCheck(%1); if(!IsPlayerConnected(%1)) { break; }
#define PlayerName(%1,%2); new %2[MAX_PLAYER_NAME]; GetPlayerName(%1, %2, sizeof(%2));
#define Log(%1,%2); { new _string[128]; format(_string, 128, %1, %2); _ANTICHEAT_Log(_string); }
#define KickPlayer(%1,%2,%3); { new _string[128]; format(_string, 128, %1, %2); SendClientMessageToAll(0xFFFF00AA, _string); Kick(%3); }
#define WarnPlayer(%1,%2,%3); { new _string[128]; format(_string, 128, %2, %3); SendClientMessage(%1, 0xFFFF00AA, _string); }
new timer;
enum PlayerInfos
{
bool: GatMoney,
pMoney,
bool: GatHealth,
Float: pHealth,
bool: GatArmour,
Float: pArmour,
bool: PlayerLooseMoney,
pDriveBys
}
new Player[MAX_PLAYERS][PlayerInfos];
enum AnticheatInfos
{
aName[128],
aValue // Why not using bool's ? You will see later ;)
}
new AnticheatInfo[4][AnticheatInfos] = {
{"Moneycheat", 1},
{"Healhack", 1},
{"Armourhack", 1},
{"DriveBy", 1}
};
enum PickupInfos
{
bool: pUsed,
pID,
pModel,
pType,
Float:pX,
Float:pY,
Float:pZ,
pVirtualworld
}
new PickupInfo[MAX_PICKUPS][PickupInfos];
public OnFilterScriptInit()
{
printf("* Anticheat ( Beta ) by Tion loadet");
timer = SetTimer("_ANTICHEAT_Main", 2000, true);
return true;
}
public OnFilterScriptExit()
{
printf("* Anticheat ( Beta ) by Tion unloadet");
KillTimer(timer);
return true;
}
public OnPlayerDeath(playerid, killerid, reason)
{
new vehicleid;
new vehiclemodel;
if(GetPlayerState(killerid) == PLAYER_STATE_DRIVER)
{
vehicleid = GetPlayerVehicleID(killerid);
vehiclemodel = GetVehicleModel(vehicleid);
if(IsPlayerInAnyVehicle(playerid)) { return true; }
if(vehiclemodel == 425) { return true; } // Hunter
if(vehiclemodel == 432) { return true; } // Rhino
if(vehiclemodel == 447) { return true; } // Seasparrow
if(vehiclemodel == 472) { return true; } // Not shure, I think Coastguard can shoot ?!?
if(vehiclemodel == 520) { return true; } // Hydra
if(AnticheatInfo[3][aValue] == 1) // Testing vor DrivyBy - if activatet
{
Player[killerid][pDriveBys]++;
if(Player[killerid][pDriveBys] > 3)
{
PlayerName(killerid, Name);
KickPlayer("Anticheat: %s wurde wegen DrivyBy gekickt", Name, killerid);
Player[killerid][pDriveBys] = 0;
}
else
{
WarnPlayer(killerid, "Anticheat: DriveBy ist auf diesem Server verboten, Warnung %d", Player[killerid][pDriveBys]);
}
}
}
return 1;
}
public OnPlayerConnect(playerid)
{
Player[playerid][GatMoney] = false;
Player[playerid][pMoney] = 10000; // I dont know why but while connection on a Server i always have $10.000 on my hand ?!?
Player[playerid][GatHealth] = false;
Player[playerid][pHealth] = 100;
Player[playerid][GatArmour] = false;
Player[playerid][pArmour] = 0;
Player[playerid][PlayerLooseMoney] = false;
Player[playerid][pDriveBys] = 0;
return true;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
for(new i = 0; i < MAX_PICKUPS; i++)
{
if((PickupInfo[i][pUsed] == true) && (pickupid == PickupInfo[i][pID]))
{
if(PickupInfo[i][pModel] == 1240) { Player[playerid][GatHealth] = true; _ANTICHEAT_SetPlayerHealth(playerid, 100); } // Heal Pickup
if(PickupInfo[i][pModel] == 1242) { Player[playerid][GatArmour] = true; _ANTICHEAT_SetPlayerArmour(playerid, 100); } // Armour Pickup
}
}
}
// Das AntiMoney-System | The AntiMoney-System
function _ANTICHEAT_GivePlayerMoney(playerid, money)
{
ConnectionCheck(playerid);
Player[playerid][GatMoney] = true;
Player[playerid][pMoney] += money;
GivePlayerMoney(playerid, money);
return true;
}
function _ANTICHEAT_ResetPlayerMoney(playerid)
{
ConnectionCheck(playerid);
Player[playerid][pMoney] = 0;
ResetPlayerMoney(playerid);
return true;
}
function _ANTICHEAT_GetPlayerMoney(playerid)
{
ConnectionCheck(playerid);
return Player[playerid][pMoney];
}
// Das Anti-Healhack-System | The Antihealhacksystem
function _ANTICHEAT_SetPlayerHealth(playerid, Float: health)
{
Player[playerid][GatHealth] = true;
Player[playerid][pHealth] = health;
SetPlayerHealth(playerid, health);
return true;
}
function _ANTICHEAT_GetPlayerHealth(playerid, &Float: health)
{
health = Player[playerid][pHealth];
return true;
}
// Das Anti-Armourhack-System | The Anti-Armourhack-System
function _ANTICHEAT_SetPlayerArmour(playerid, Float: armour)
{
Player[playerid][GatArmour] = true;
Player[playerid][pArmour] = armour;
SetPlayerArmour(playerid, armour);
return true;
}
function _ANTICHEAT_GetPlayerArmour(playerid, &Float: armour)
{
armour = Player[playerid][pArmour];
return true;
}
function _ANTICHEAT_CreatePickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld)
{
for(new i = 0; i < MAX_PICKUPS; i++)
{
if(PickupInfo[i][pUsed] == false)
{
PickupInfo[i][pUsed] = true;
PickupInfo[i][pType] = type;
PickupInfo[i][pX] = X;
PickupInfo[i][pY] = X;
PickupInfo[i][pZ] = Z;
PickupInfo[i][pVirtualworld] = Virtualworld;
PickupInfo[i][pID] = CreatePickup(model, type, X, Y, Z, Virtualworld);
return PickupInfo[i][pID];
}
}
return -1;
}
function _ANTICHEAT_AddStaticPickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld)
{
for(new i = 0; i < MAX_PICKUPS; i++)
{
if(PickupInfo[i][pUsed] == false)
{
PickupInfo[i][pUsed] = true;
PickupInfo[i][pType] = type;
PickupInfo[i][pX] = X;
PickupInfo[i][pY] = X;
PickupInfo[i][pZ] = Z;
PickupInfo[i][pVirtualworld] = Virtualworld;
PickupInfo[i][pID] = CreatePickup(model, type, X, Y, Z, Virtualworld);
return true;
}
}
return false;
}
function _ANTICHEAT_DestroyPickup(pickup)
{
for(new i = 0; i < MAX_PICKUPS; i++)
{
if(pickup == PickupInfo[i][pID])
{
DestroyPickup(PickupInfo[i][pID]);
PickupInfo[i][pUsed] = false;
return true;
}
}
return false;
}
function _ANTICHEAT_Main()
{
new Float: PlayerHealth, Float: PlayerArmour;
for(new i = 0; i < MAX_PLAYERS; i++)
{
// Vorbereitung durch Onlinecheck und herausfinden des Namens | Preparing with Onlinechack and finding out the name
ConnectionBreakCheck(i);
PlayerName(i, Name);
// Antimoneyhack | Antimoneyhack
if(AnticheatInfo[0][aValue] == 1)
{
if(Player[i][GatMoney] == false)
{
if(GetPlayerMoney(i) > Player[i][pMoney]) { ResetPlayerMoney(i); GivePlayerMoney(i, Player[i][pMoney]); Log("%s Moneycheat", Name); }
if(GetPlayerMoney(i) < Player[i][pMoney]) { _ANTICHEAT_GivePlayerMoney(i, -(Player[i][pMoney] - GetPlayerMoney(i))); Player[i][PlayerLooseMoney] = true; }
}
Player[i][GatMoney] = false;
}
else { _ANTICHEAT_ResetPlayerMoney(i); _ANTICHEAT_GivePlayerMoney(i, GetPlayerMoney(i)); }
// Anti Healhack | Anti Healhack
if(AnticheatInfo[1][aValue] == 1)
{
if(Player[i][GatHealth] == false)
{
GetPlayerHealth(i, PlayerHealth);
if(PlayerHealth > Player[i][pHealth] && Player[i][PlayerLooseMoney] == false) { Log("%s Healhack", Name); KickPlayer("Anticheat: %s wird wegen Healhacks gekickt", Name, i); }
if(PlayerHealth > Player[i][pHealth] && Player[i][PlayerLooseMoney] == true) { _ANTICHEAT_SetPlayerHealth(i, PlayerHealth); }
if(PlayerHealth < Player[i][pHealth]) { _ANTICHEAT_SetPlayerHealth(i, PlayerHealth); }
}
Player[i][PlayerLooseMoney] = false;
Player[i][GatHealth] = false;
}
else { GetPlayerHealth(i, PlayerHealth); _ANTICHEAT_SetPlayerHealth(i, PlayerHealth); }
// Anti Armorhack | Anti Armourhack
if(AnticheatInfo[2][aValue] == 1)
{
if(Player[i][GatArmour] == false)
{
GetPlayerArmour(i, PlayerArmour);
if(PlayerArmour > Player[i][pArmour]) { Log("%s Armorhack", Name); KickPlayer("Anticheat: %s wird wegen Armourhacks gekickt", Name, i); }
if(PlayerArmour < Player[i][pArmour]) { _ANTICHEAT_SetPlayerArmour(i, PlayerArmour); }
}
Player[i][GatArmour] = false;
}
else { GetPlayerArmour(i, PlayerArmour); _ANTICHEAT_SetPlayerArmour(i, PlayerArmour); }
}
return true;
}
// Nur mal so, zum Spaß ;) | Just for Fun ;)
function _ANTICHEAT_ChangeAnticheatTimer(interval)
{
KillTimer(timer);
timer = SetTimer("_ANTICHEAT_Main", interval * 1000, true);
return true;
}
// Bitte aufrufen mit "Log(string[], params,... );" | Please call with "Log(string[], params,... );"
function _ANTICHEAT_Log(string[])
{
new log[256];
new _ANTICHEAT_Year, _ANTICHEAT_Month, _ANTICHEAT_Day;
getdate(_ANTICHEAT_Year, _ANTICHEAT_Month, _ANTICHEAT_Day);
format(log, sizeof(log), "%d.%d.%d: %s\n", _ANTICHEAT_Day, _ANTICHEAT_Month, _ANTICHEAT_Year, string);
new File:_ANTICHEAT_file = fopen("Anticheat.log", io_append);
fwrite(_ANTICHEAT_file, log);
fclose(_ANTICHEAT_file);
}