Anti-Cheat (funkt net)

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
  • Guten Tag,
    ich habe ein Anti-Cheat gescriptet, also jeder User hat 99 HP anstatt 100 und wenn einer 100HP hat wird er automatisch von system gebannt.
    Problem ist wenn ich 100 hp habe funktioniert die anfrage nicht und mann wird nicht gebannt sowohl ist es auch beim Armour so. Jet-Pack wird vom Script gebannt.


    Code:
    public OnPlayerUpdate(playerid)
    {
    if(GetPVarInt(playerid,"loggedin")==0)return 1;
    new string[125],Float:armour,Float:health,IP[25];
    GetPlayerIp(playerid,IP,sizeof(IP));
    if(GetPVarInt(playerid,"Adminlevel")==0)
    {
    if(GetPlayerHealth(playerid,health)==100)
    {
    format(string, sizeof(string), "[IPBAN] %s wurde gebannt. Grund: Health-Cheat", SpielerName(playerid));
    SendClientMessageToAll(COLOR_LIGHTRED, string);
    ShowTBox(playerid, "BAN" ,"~r~Du wurdest gebannt.",3);
    format(string, sizeof(string),"banip %s",IP);
    SendRconCommand(string);
    SetPVarInt(playerid,"Baned",1);
    TogglePlayerControllable(playerid,0);
    Kick(playerid);
    }
    if(GetPlayerArmour(playerid,armour)==100)
    {
    format(string, sizeof(string), "[IPBAN] %s wurde gebannt. Grund: Armour-Cheat", SpielerName(playerid));
    SendClientMessageToAll(COLOR_LIGHTRED, string);
    ShowTBox(playerid, "BAN" ,"~r~Du wurdest gebannt.",3);
    format(string, sizeof(string),"banip %s",IP);
    SendRconCommand(string);
    SetPVarInt(playerid,"Baned",1);
    TogglePlayerControllable(playerid,0);
    Kick(playerid);
    }
    }
    return 1;
    }


    Danke im Voraus.

  • Nein du sollst mit SetTimerEx & OnPlayerConnect arbeiten.
    Den Timer nennst du dann gleich wie deinen Forward und dann auch den Public.


    z.B

    OnPlayerConnect
    {
    SetTimerEx("anticheathp",900,1,"d",playerid);
    return 1;
    }


    forward anticheathp(playerid);
    public anticheathp(playerid)
    {
    // Code
    return 1;
    }

  • falls nich probiers mal so:

    GetPlayerHealth(playerid,health);
    if(health==100)
    {
    format(string, sizeof(string), "[IPBAN] %s wurde gebannt. Grund: Health-Cheat", SpielerName(playerid));
    SendClientMessageToAll(COLOR_LIGHTRED, string);
    ShowTBox(playerid, "BAN" ,"~r~Du wurdest gebannt.",3);
    format(string, sizeof(string),"banip %s",IP);
    SendRconCommand(string);
    SetPVarInt(playerid,"Baned",1);
    TogglePlayerControllable(playerid,0);
    Kick(playerid);
    }
    GetPlayerArmour(playerid,armour);
    if(armour==100)
    format(string, sizeof(string), "[IPBAN] %s wurde gebannt. Grund: Armour-Cheat", SpielerName(playerid));
    SendClientMessageToAll(COLOR_LIGHTRED, string);
    ShowTBox(playerid, "BAN" ,"~r~Du wurdest gebannt.",3);
    format(string, sizeof(string),"banip %s",IP);
    SendRconCommand(string);
    SetPVarInt(playerid,"Baned",1);
    TogglePlayerControllable(playerid,0);
    Kick(playerid);
    }

  • Funktioniert alles, danke an alle. Wollte noch kurz Fragen wie sollte man am besten gegen Geldcheat vorgehen wollte das
    Geld ausgeben und einnehmen mit einer Variable alles speichern oder gibt es eine leichtere Methode?


  • #if defined FILTERSCRIPT
    #endinput
    #endif


    #if defined _moneyhax_included
    #endinput
    #endif
    #define _moneyhax_included


    #define CHECK_TIME 30 // in seconds to check if money is equal to the saved one.


    new PMoney[MAX_PLAYERS];


    forward GetPlayerMonez(playerid);
    forward ResetPlayerMonez(playerid);
    forward GivePlayerMonez(playerid,money);
    forward MoneyCheck();


    public MoneyCheck()
    {
    new money;
    #if defined _foreach_included
    foreach(Player,playerid)
    {
    money = GetPlayerMoney(playerid);
    if( money < PMoney[playerid] && money > -1 ) PMoney[playerid]=money;
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid,PMoney[playerid]);
    }
    #else
    for(new playerid;playerid<MAX_PLAYERS;playerid++) if(IsPlayerConnected(playerid))
    {
    money = GetPlayerMoney(playerid);
    if( money < PMoney[playerid] && money > -1 ) PMoney[playerid]=money;
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid,PMoney[playerid]);


    }
    #endif


    return 1;
    }


    public GivePlayerMonez(playerid, money)
    {
    new rmoney = GetPlayerMoney(playerid);
    if( rmoney < PMoney[playerid] && rmoney > -1 ) PMoney[playerid]=rmoney;


    PMoney[playerid]+=money;
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid,PMoney[playerid]);
    return 1;
    }
    public ResetPlayerMonez(playerid)
    {
    ResetPlayerMoney(playerid);
    PMoney[playerid]=0;
    return 1;
    }
    public GetPlayerMonez(playerid) return PMoney[playerid];



    #define GivePlayerMoney GivePlayerMonez
    #define GetPlayerMoney GetPlayerMonez
    #define ResetPlayerMoney ResetPlayerMonez





    public OnGameModeInit()
    {
    SetTimer("MoneyCheck",CHECK_TIME*1000,true);
    if (funcidx("moneyhax_OnGameModeInit") != -1)
    {
    return CallLocalFunction("moneyhax_OnGameModeInit", "");
    }
    return 1;
    }


    #if defined _ALS_OnGameModeInit
    #undef OnGameModeInit
    #else
    #define _ALS_OnGameModeInit
    #endif
    #define OnGameModeInit moneyhax_OnGameModeInit
    forward moneyhax_OnGameModeInit();


    public OnPlayerConnect(playerid)
    {
    PMoney[playerid]=0;
    if (funcidx("moneyhax_OnPlayerConnect") != -1)
    {
    return CallLocalFunction("moneyhax_OnPlayerConnect", "i", playerid);
    }
    return 1;
    }


    #if defined _ALS_OnPlayerConnect
    #undef OnPlayerConnect
    #else
    #define _ALS_OnPlayerConnect
    #endif
    #define OnPlayerConnect moneyhax_OnPlayerConnect
    forward moneyhax_OnPlayerConnect(playerid);



    Das zum Include machen und und im Gamemode Includieren.
    Danach GivePlayerMoney mit GivePlayerMonez ersetzten (Replace Funktion hilft).

  • Habe noch ein Problem, habe ja abfrage wenn 100 hp (S0beit) aber wenn man zu Healautomaten läuft gibt es dann halt zb:


    if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_DRINK_SPRUNK && Health<=100)return 1;


    wenn ja würde es so gehen?

  • Schreib doch einfach das es dann Bugusing ist ^^
    Ansonsten
    if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_DRINK_SPRUNK && health>=50)return GetPlayerHealth(playerid,health),if(health==99)return 0;SetPlayerHealth(playerid,health+15);