Anticheat Problem

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • 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);
    }