Auftragsystem crasht.

Aus gegebenem Anlass: Sichert eure Backupcodes wenn ihr die Zwei-Faktor-Authentifizierung aktiviert habt!

Infos dazu findet ihr nochmal hier

  • Hey,


    ich experimentiere derzeit mit Menüs rum und möchte eine Art Auftragsystem


    erstellen, Spieler können ihre eigenen Aufträge erstellen mit Titel, Beschreibung (wird im Dialog angezeigt) und zusätzlichen


    Koordinaten zum Jobort. Dazu möchte ich gerne die Funktion AddItem in einer for-schleife verwenden, was mir ehrlich gesagt


    schon Bauchschmerzen bereitet hat, da ich mir unsicher bin ob solche Systeme so überhaupt funktionieren können.



    Das Problem ist aber, dass die Variablen eines Auftrages alle leer sind, heißt: Die Beschreibung, der Name des Autors ist alles leer


    und ich weiß nicht warum. Ich nehme an, dass das der Grund für den Crash ist. Ich logge bereits alles, schaut es euch bitte an:


    CODE: https://pastebin.com/TZiDtkQU


    dJnVBCG.png

    IMCDREa.png



    LG

  • da ich mir unsicher bin ob solche Systeme so überhaupt funktionieren können.

    Oh ja, das tuen sie, sei unbesorgt :)



    Ich logge bereits alles, schaut es euch bitte an:

    Das ist nicht einmal im Ansatz "alles" xD


    1. Lade crashdetect und schau in den server_log, falls der Server nochmal crasht.
    2. Wie rufst du AddAuftrag auf?
    3. Nutze nicht strmid, um Strings zu beschreiben, nutze dafür format:
    C
    1. format(Auftrag[i][a_autor],MAX_PLAYER_NAME+1,autor);
    2. format(Auftrag[i][a_description],30,titel);
    3. format(Auftrag[i][a_auftragtext],256,auftragtext);

    ast2ufdyxkb1.png


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

  • Meiner Erfahrung nach liegt dein Problem daran dass dein Script nicht richtig lädt. In deinem Script ist ein Fehler oder irgendein plugin wird falsch geladen hol dir crashdetect und guck was schief läuft

  • Moin,


    danke für den Link, das mit dem Dialog funktioniert schon.


    Nur wird jedes mal, wenn ich /auftrage eingebe, ein weiterer in der Liste


    erstellt. Ich habe versucht, das mit einer IsMenuUnique() Funktion zu unterbinden,


    die den Titel des Auftrages mit anderen vergleicht, um zu überprüfen, ob er mehrmals vorkommt.


    Das klappt allerdings erst, sobald ich einen neuen Auftrag mit dem gleichen Titel erstellt habe,


    bis dahin kann ich das ganze Menü mit dem gleichen Auftrag vollspammen, wenn ich /auftrage eingebe!


    https://pastebin.com/uMM6Vd48



    i5bpOzG.png



    TKkxGNX.png

  • Erstelle das Menü nicht in der Schleife, bei /auftrage...dort wird das ja öfter aufgerufen.


    Das IsUniqueMenue brauchst du auch nicht.


    Füge einfach den Punkt vom Menü unter AddAuftrag hinzu.

    ast2ufdyxkb1.png


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

  • Um dir ein konkretes Beispiel in deiner Situation zu geben, müsst ich mehr Code sehen.


    Aber grundsätzlich, kannst du ja sowas machen:


    C
    1. new start = 0;
    2. for(new i=start; i<start+5; i++)

    und dann z.B. start bei Seite 2 auf 5 erhöhen und dann bekommst halt immer die nächsten Einträge.

    ast2ufdyxkb1.png


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

  • Beitrag von Studs ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Das ist der gesamte Code: https://pastebin.com/DwvVyRQ1


    Schon mal eine gute Idee und den Menüpunkt "Nächste Seite" ab 10 Einträgen(Nächste Seite ist dann der 11te Eintrag im Menü)


    da müsste ich doch innerhalb der For-Schleife überprüfen, ob es mehr als 10 Einträge gibt und dann einen neuen Menüpunkt namens "Nächste Seite"


    hinzufügen, oder soll ich das doch irgendwie extern machen, außerhalb des loopes?




    // Push 23.03.20 15:59

  • Also du könntest über deiner AddAuftrag Funktion, die Seite hinzufügen aber das

    Problem hierbei ist, mann sieht dennoch dann 12 Items bzw. das 13 sogar als überschrift.

    siehe https://wiki.sa-mp.com/wiki/AddMenuItem

    Deswegen würde ich das so nicht ganz machen, du machst gerade jedes Item(Auftrag) gleich als AddMenuItem aber das wird dir bald Probleme geben.


    Ich würde dir empfehlen wenn du es über so ein Menu weiter machen willst, erstelle dir gleich ein Menu mit genau 10 Items und der "Nächsten Seite".

    Also so hier, das wäre ein Lösungsansatz/vorschlag von mir (mit diesem kannst du dann auch ganz einfach Items/Aufträge wieder löschen)

    Was genau, habe ich da jetzt gemacht?



    Beachte bitte: "128 menus in total" und da das Menu dann Player abhängig sein müsste, wegen Nächste Seite, kann es bei zu vielen Spielern zu Probleme führen.

    (Bei anderen Ansätzen, bin ich gerne offen, falls dieser unnötig oder co. ist)

    MfG Mogly1.

  • Moin Mogly!


    Vielen Dank für deine Mühe & Erklärung.


    Ich habe das Problem inzwischen gelöst, indem ich für jeden einzelnen Spieler


    ein eigenes Menü erstelle und dieses sobald es geschlossen wird, oder eine nächste


    Seite aufgerufen wird, zerstört wird / neu aufgebaut wird. Zusätzlich dazu


    überprüft eine öffentliche Variable "menus" wie viele Menüs es insgesamt gibt


    und verhindert somit, dass es mehr als 128 geben kann.


    LG