Hilfe bei anti hack

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
  • Heu Leute ich habe ein kleines Problem und zwar habe ich mir ein antiwaffenhack System gemacht nun ja wenn man Minigun hat wird mann gebannt jedoch wird mann nicht gebannt wenn mann z.b C4 hat , mann wird auch nicht gebant wenn mann die sachen im Invi hat sondern nur wenn man die Waffe in der Hand hat ich hoffe ihr könnt mir helfen




    M.F.G
    Include

  • Ich würde den Spieler auch mal kicken falls das nicht in deinem Timer mit drin ist
    und nimm mal das if(IsPlayerConnected) raus weil die meisten hacker das loginsystem ignorieren oder falls sie sich einloggen dass die funktion auch weiter geht

    SA:MP in 2020?

  • und nimm mal das if(IsPlayerConnected) raus weil die meisten hacker das loginsystem ignorieren

    IsPlayerConnected fragt ab, ob der Spieler mit dem Server verbunden ist. Das ist unabhaengig von der eigenen Login Implementierung. Insofern ist das nicht falsch.


    @Includ Ich wuerde Dir empfehlen, das Anti Waffen Hack System nicht so aufzubauen. Das ist finde ich ueberhaupt kein guter Ansatz weil man sich einfach dann halt ne Deagle gibt. Nicht jeder braucht ne Minigun um gluecklich zu sein. [wiki]GetPlayerWeaponData[/wiki] ist dafuer geeignet um abzufragen, welche Waffen der Spieler im Inventar hat. Wobei das eigtl auch reicht wenn Du die aktuelle Waffen abfragst. Ich wuerde einfach speichern, welche Waffen der Spieler durch das Script erhalten hat. Wenn eine dabei ist, die er nicht haben darf, wird er einfach gesperrt. Das ist jeden Falls ein besserer Ansatz als den, den Du aktuell hast.

  • Wieso in Dini? Du erstellst einfach einen Wrapper fuer die GivePlayerWeapon Funktion meinetwegen so:

    // oben im script ueber der main()
    new PlayerWeapons[MAX_PLAYERS][47];


    // irgendwo im script
    stock GivePlayerWeaponEx(playerid, weaponid, ammo)
    {
    PlayerWeapons[playerid][weaponid] = 1;
    GivePlayerWeapon(playerid, weaponid, ammo);
    }


    Und dann verwendest Du anstatt GivePlayerWeapon einfach GivePlayerWeaponEx. In dem Timer kannst Du halt dann abfragen, welche Waffen der Spieler hat und dann guckst Du ob da eine '1' drinnen steht. Wenn nicht, darf der Spieler die Waffe nicht haben bzw. hat sie nicht durch das Script bekommen. Dann kannst Du ihn bannen. Variablen beim Disconnect eines Spielers muessen halt zurueckgesetzt werden.


    Das ganze kann man auch Ressourcen schonender schreiben mit Iteratoren aber Du verwendest ja keine Iteratoren gehe ich mal davon aus. Wenn Dich interessiert, was Interatoren sind und wie Du welche in SA:MP verwendest, googelst Du einfach mal. Kannst ja dann immer noch nachfragen.


    Das System das ich Dir gezeigt habe, deckt jetzt erstmal nur den Waffen Hack ab. Wenn Du noch das realisieren willst, dass man sich keine Munition cheaten kann, kannst Du Dich ja selbst mal daran versuchen.

  • IsPlayerConnected fragt ab, ob der Spieler mit dem Server verbunden ist. Das ist unabhaengig von der eigenen Login Implementierung. Insofern ist das nicht falsch.
    @Includ Ich wuerde Dir empfehlen, das Anti Waffen Hack System nicht so aufzubauen. Das ist finde ich ueberhaupt kein guter Ansatz weil man sich einfach dann halt ne Deagle gibt. Nicht jeder braucht ne Minigun um gluecklich zu sein. [wiki]GetPlayerWeaponData[/wiki] ist dafuer geeignet um abzufragen, welche Waffen der Spieler im Inventar hat. Wobei das eigtl auch reicht wenn Du die aktuelle Waffen abfragst. Ich wuerde einfach speichern, welche Waffen der Spieler durch das Script erhalten hat. Wenn eine dabei ist, die er nicht haben darf, wird er einfach gesperrt. Das ist jeden Falls ein besserer Ansatz als den, den Du aktuell hast.

    So wäre das dann aber ohne ! davor
    So fragt er dann ja ab ob der spieler nicht connected ist

    SA:MP in 2020?

  • if(PlayerWeapons[playerid][0] == 1)
    So würdest du abfragen ob die Waffe 0 bei playerid 1 ist.

  • So wäre das dann aber ohne ! davor
    So fragt er dann ja ab ob der spieler nicht connected ist

    Nein, weil hinter der Bedingung ein continue; steht. Ich weiss wieso Du verwirrt bist: Du denkst weil unten ein Block beginnt, dass die Bedingung dem Block zugeordnet wird. Das ist aber nicht richtig, da dies nur als Block gesehen wird weil die if bereits durch das "continue;" eine Aufgabe bekommen hat.


    Der Block steht ueberhaupt nicht in Zusammenhang mit der if Abfrage.


    Aktuell bedeutet das nur: Wenn Spieler nicht verbunden -> springe hoch zur for.