Beiträge von Campbell

    • Verwende die entsprechenden Tags, um den Quellcode ordentlich darzustellen.

    Eine Funktion beginnt wie folgt:

    funktionsTypus funktionsName(funktionsParameter, ...) {
    // Inhalt der Funktion.
    }

    • Array erstellen (evt. mit Enumerator).
    • Datei auslesen und in Array zwischenspeichern.
    • Beim Anzeigen des Dialogs einfach alle vorhandenen Autonamen im Array zu einem String zusammensetzen und ihn anschließend mit Dialog ausgeben.
    • Bei OnDialogResponse() entspricht listitem nun bei richtiger Anwendung deinem Index im Array - Verwendbarkeit einfach gemacht.


    Versuche dich daran, setze erste Gedanken zusammen und zeige sie dann, ohne ersten Ansatz gibt's keine Snippets von mir.

    Die Art und Weise, wie du dies realisierst ist Humbuck. Lese die Datei einmal aus und erstelle anschließend einen String, der die entsprechenden Auto-Namen enthält. Speichere ebenfalls einfach die Autos in einem Array zwischen, damit du die Daten konstant benutzen kannst. Anschließend kannst du die Variable 'listitem' ganz simpel als ArrayIndex verwenden und die entsprechende Aktion ausführen.

    Beginne damit deinen Code ordentlich und sinnvoll zu strukturieren. Das wird schonmal die meisten Fehler eliminieren und widme dich dann dem Feinschliff. Der Quellcode erscheint mir als eine vollgestopfte Wand, außerdem ist vieles in deinem Script nicht benötigt.

    Code
    [25/11/2012 20:46:47] [debug] Run time error 4: "Array index out of bounds"
    [25/11/2012 20:46:47] [debug]  Accessing element at index 501 past array upper bound 49
    [25/11/2012 20:46:47] [debug] AMX backtrace:
    [25/11/2012 20:46:47] [debug] #0 00045be0 in public funcTimer () from gangfightv0.amx
    
    
    [25/11/2012 22:19:35] [debug] Run time error 4: "Array index out of bounds"
    [25/11/2012 22:19:35] [debug]  Accessing element at negative index -1
    [25/11/2012 22:19:35] [debug] AMX backtrace:
    [25/11/2012 22:19:35] [debug] #0 00043964 in public gfTimer () from gangfightv0.amx


    Weiß jemand was das bedeutet? (CrashDetect Plugin)


    Einmal verwendest du einen Index, der höher als der maximale Index (49) liegt und das andere mal verwendest du Index -1, wobei die Indexe immer bei mindestens 0 liegen.

    Habe es dir grundlegend heruntergeschrieben mit Verwendung von y_ini (http://forum.sa-mp.com/showthread.php?t=175565) - (es sind also noch Fehler enthalten): http://pastebin.com/i4Q5MXxk



    #include <a_samp>
    #include <YSI\y_ini>

    #if !defined MAX_HIGHSCORES
    #define MAX_HIGHSCORES 4
    #endif

    new Text:hsBox;
    new Text:hsClients;
    new Text:hsScores;

    enum hsEnum {
    client[MAX_PLAYER_NAME],
    score
    }

    new hsArray[MAX_HIGHSCORES][hsEnum];

    enum clientEnum {
    client[MAX_PLAYER_NAME],
    score
    }

    new clientArray[MAX_PLAYERS][clientEnum];

    main(){
    }


    // Rest siehe Pastebin ...

    • Unter OnGameModeInit() die entsprechende Datei auslesen und in einem Array speichern (falls nicht vorhanden sind alle Scores 0).
    • Im gleichen Callback verschiedene Textdraws erstellen, die die Tabelle der Highscores darstellt. Bei OnPlayerConnect() einblenden.
    • Sobald sich der Score des Spielers ändert (Ich vermuste bei Vollstreckungen, also unter OnPlayerDeath()) überprüfen, ob der neue Score den nächst höheren Highscore übertrifft.

      • Falls das zutrifft - Array mit neuen Werten überschreiben und Werte im Textdraw erneuern.


    • Bei OnGameModeExit() die Datei mit den neuen Werten im Array überschreiben. Evt. bereits bei OnPlayerDisconnect() die neuen Werte speichern, falls der Nutzer die Highscores verändert hat, um Problemen bei Server-Crashes vorzubeugen.

    Versuche es Schritt für Schritt zu realisieren, ansonsten hier mit explizieter Frage und entsprechendem Quellcode nachfragen.

    Alle ini's zu durchsuchen ist doch viel ressourcenfressender als einfach zu testen, ob jemand währendessen er verbunden ist einen Highscore knackt. Lese also beim Start des Gamemodes die 5 Highscores aus, welche du beim Stop des Gamemodes speichern könntest und gebe sie in irgendwelcher Form für alle aus (vllt. Textdraws?). Sobald nun ein verbundener Client einen der 5 Highscores überbietet wird der Highscore geändert und bei Stop des Gamemodes abgespeichert. Schlichter und effizienter.

    Code
    Script[gamemodes/selfmade.amx]: Run time error 19: "File or function is not found"


    Nun gut, so schwer sollte es nicht sein, das zu verstehen. Suche nach deinen Dateien und vergleiche sie im Pfad und Name und geh auf Nummer sicher, dass du nicht mehrere SA-MP Server miteinander vermischen tust.