Frage zum PayN'Spray und Anti-Cheat System

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
  • Eine kleine Frage an euch,


    das PNS kann man auf dem Server ja nicht deaktivieren oder den Preis beliebig anpassen wie man möchte. Ich habe mir nun ein AntiCheat System geschrieben das nicht mehr mit GivePlayerMoney arbeitet sondern mit GivePlayerGeld. Sobald der Spieler also nun ins PNS fährt, wird Ihm Geld abgezogen aber aufgrund des AntiCheats sofort wieder hinzugefügt. Gibt es eine möglichkeit den Wert zu ändern so dass das AntiCheat den Wert nicht wieder auf den zuvorliegenden Wert zurücksetzt ?

  • Du könntest es ja so machen, dass, wenn man genau 100$ verliert und von den Koordinaten her in nem PnS ist,
    keine Erstattung durch dein Anti-Cheat erfolgt.


    Das Gleiche kannst du im Prinzip auch für Snackautomaten, usw. machen.

    Wäre an sich eine Gute Idee. Allerdings könnte das eines Tages zu Bugusing führen. Spieler geht in die Werkstatt und ercheatet sich Geld.


    Würde auch wenig sinn ergeben. Hat jemand vielleicht noch eine andere Idee dazu ? Oder gibt es eine möglichkeit ein AntiCheat zu schreiben was auch mit GivePlayerMoney dann Richtig funktioniert ?

  • Soweit wie ich es verstanden habe,


    Spieler befindet sich an Position x,y,z in der Reichweite von 5 Metern. Das AntiCheat System wird , sagen wir es mal deaktiviert. Somit kann der Spieler dann auch Geld an dieser Position ercheaten.

  • Beitrag von JustMe.77 ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: ^ ().
  • Sofern der Spieler an der Position ist, und es sich um einen Abzug von 100$ handelt,
    lässt das Anti-Cheat eine Ausnahme zu.

    Ich weiß nicht genau wie ich das realisieren soll da ich dich scheinbar nicht Richtig verstehe wie du es meinst oder wir aneinander vorbei sprechen.


    Mein Verdacht hierbei, ist der Spieler genau an dieser Position kann der Spieler auch max 100$ ercheaten. Was ihm im Grude aber nichts bringen würde da alles in einer internen Variable gespeichert wird und auch abgefragt wird bis auf das PaynSpray. Trotzdem wäre es schön wenn es 1a passen würde.

  • Ich hab das ganze nun mal so aufgebaut



    forward AntiCheat()
    public AntiCheat()
    if(!IsPlayerInRangeOfPoint(playerid,5,x,y,z) && GivePlayerMoney(playerid,-100))
    {
    // Moneyzurücksetzen
    }
    else
    {
    // nichts unternehmen da PNS
    }


    allerdings sagt er mir das playerid nicht bekannt ist.


    Definiere ich es mit im public und forward also



    forward AntiCheat(playerid)
    public AntiCheat(playerid)

    heißt es es wäre angeblich schon definiert.


    Ich nutze mein AntiCheat als Include.


    Vielleicht kann mir ja einer von euch weiter helfen

  • Okay hatte etwas mehr erwartet aber kein Problem. Ich habe mal etwas angefangen. Vielleicht kannst du mir sagen ob der Ansatz Richtig ist oder nicht.



    for(new playerid;playerid<MAX_PLAYERS;playerid++) if(IsPlayerConnected(playerid))
    {
    money = GetPlayerMoney(playerid);
    if(money-=100)
    {

    }
    }

  • Da das hier eine oft gefragte Frage ist..war ich mal so freundlich und habe dir ein Include für alle Pay'NSprays erstellt:


    Source-Code: Pastebin


    Das downloade dir mal..und binde mal ein.


    Dann fügst du folgende Callbacks in dein Skript:


    Und dann kannst du da wo er was abgezogen bekommen hat, auch beim Anti-Cheat anpassen und dem einfach das Geld mit deinem System abziehen :)
    PS: Man kann auch mehr als 100$ verlieren..wenn man z.B. reinfährt..dann gegen die innere wand fährt...kurz wartet..dann kann man auch 200$ verlieren xD Mit dem System..könntest du ihm natürlich auch noch zusätzlich Geld abziehen :)


    Viel Spaß damit :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Erstmal vielen dank für deine Mühe die du dir gemacht hast. Ich habe das ganze nun mal eingebunden. Allerdings ohne Funktion. Sind bestimmte plugins hierfür noch erforderlich ? Das Include habe ich natürlich in /pawno/includes/paynspray.inc und im Gamemode eingetragen. Hinzu im GameMode den Code den du gepostet hast.

  • Allerdings ohne Funktion

    ...was ohne Funktion? :huh:


    Nein...brauchst keine Plugins...nur das...


    Kannst du denn das Skript kompilieren mit den Callbacks...


    Dann ist alles richtig...dann funktioniert es schon..


    //Edit: Bitte unterlasse Vollzitate..des einfach grausig

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Scheinst bei mir nicht Richtig zu klappen. Ich gehe davon aus das wenn er das PayNSpray verlässt, das Ihm angezeigt wird wieviel er dafür zahlen musste. So wie du es auch angegeben hast. Der SendClientMessage wird aber nicht ausgegeben warum auch immer o.o

  • ...der wird nur aufgerufen..wenn auch ein Geld unterschied existiert...


    Schau doch mit wie viel du reinfährst..und wieder ausfährst...


    Ich denke du musst dein Anti-Cheat aber bearbeiten, da er instant den Geld Wert anpasst...


    Kannst du mal zeigen...wie dein Anti-Cheat Code aussieht...

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Hier frage ich den Check von dem Money ab. Dann muss ich da aufjedenfall noch was anpassen.



    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;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen