[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • Leider nicht aber wie oben schon beschrieben - schau selber erstmal durch das auskommentieren des halben Codes in dem Callback, wo der Fehler genau liegt.

    So siehst du den Fehler am schnellsten und falls du ihn am Ende nicht direkt siehst, kann du den Codeabschnitt immernoch hier reinposten.

    Der Fehler wurde heute gelöst.

    unter onplayerdissconect bei resetplayervriabels hat ein argument gefehlt.

  • Guten Abend,


    ich versuch mich mal wieder in SAMP und bin auf folgendes Problem gestoßen.


    Der Nachricht "Du wurdest von ... gekickt" kommt beim Spieler nicht an, woran kann das liegen?


    Vielen Dank im Voraus.


    Mit freundlichen Grüßen


    Allrounder18

  • Das wird daran liegen, dass du trotz deines DelayedKick Timers die Kick-Funktion in Zeile 16 aufrufst. Einfach die entfernen.

    Danke hat geklappt, jetzt kommt nen anderer Fehler.


    Wenn ich in der Zeile "... wurde von ... vom Server gekickt" true anstatt false eingebe erscheint die Message nicht, woran kann das liegen?


    Vielen Dank im Voraus.


    Mit freundlichen Grüßen


    Allrounder18

  • In Zeile 10 muss das playerid und nicht pID sein.


    Zum Anderen musst evtl mal print-Debuggen, welchen Wert AccountInfo[playerid][account_Admin] hat und welchen Wert der dazugehörige AdminInfo-AdminRang hat.

    ast2ufdyxkb1.png


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

  • In Zeile 10 muss das playerid und nicht pID sein.


    Zum Anderen musst evtl mal print-Debuggen, welchen Wert AccountInfo[playerid][account_Admin] hat und welchen Wert der dazugehörige AdminInfo-AdminRang hat.

    Danke, ich hab das Gefühl es lieg an folgendem Code.


    Edit: Der Print sieht so aus: Kicknachricht: {FF0000}Projektleiter{FFFFFF}{FF0000} Allrounder18(0){FFFFFF} hat {FF0000}Allrounder18(0){FFFFFF} gekickt. Grund: Test


    Edit: Fehler gefunden, das Script wollte keine zwei Codes mit Fabre hintereinander.


    Danke für die Hile.

  • Moin, hat jemand noch die funktion IsEMailValid? das SAMP Forum is ja leider dwon :(

  • Moin weiß jemand warum der Fehler kommt?

    Console

    Code
    [debug] Run time error 4: "Array index out of bounds"
    [debug]  Attempted to read/write array element at index 65535 in array of size 1000
    [debug] AMX backtrace:
    [debug] #0 0000e2ec in public ocmd_auninvite (0, 2579148)
    [debug] #1 native CallLocalFunction () in samp-server.exe
    [debug] #2 00006200 in public OnPlayerCommandText (0, 2579096)

    Einmal editiert, zuletzt von Marschl ()

  • Nabend,


    ich hab folgendes Problem. Und zwar wenn ich die Schleife durchlaufe wird mir nicht die MAX_FRAK_VEHICLE hochgezält sondern eine viel zu hohe zahl.


    In der Console wird folgedes geloggt:

    Hoffe mir kann jmd helfen ich verzweilfe langsam :D

    • Offizieller Beitrag

    Marschl

    Du gibst ja auch printf("%d", fVehInfo[i][fvehID]); in deiner Schleife an. Ich gehe mal davon aus, dass in der fvehID die Datensatz-ID des Fahrzeuges gespeichert ist.

    Damit der Schleifendurchgang geprinted wird, brauchst du nur die lokale Variable i in deinem print angeben.

  • Marschl

    Du gibst ja auch printf("%d", fVehInfo[i][fvehID]); in deiner Schleife an. Ich gehe mal davon aus, dass in der fvehID die Datensatz-ID des Fahrzeuges gespeichert ist.

    Damit der Schleifendurchgang geprinted wird, brauchst du nur die lokale Variable i in deinem print angeben.

    Vielen dank mein Hirn war gestern matsch :D so ein dummer Fehler.

    Allerdings bekomme ich jetzt in der Console folgender Fehler:

    Code
    4
    [debug] Run time error 4: "Array index out of bounds"
    [debug]  Attempted to read/write array element at index 16 in array of size 16

    Code:

    Code
    for(new i = 0; i < MAX_FRAK_VEHICLE; i++)
        {
            if(IsValidVehicle(fVehInfo[i][fvehID]) == 1)continue;
            printf("%d", i);
    
            format(msg, sizeof(msg), "* AdminInfo"HTML_WEISS": Du hast ein Fraktionsvehicle für die Fraktion %s erstellt.", fInfo[frak][fName]);
            return SendClientMessage(playerid, COLOR_GELB, msg);
        }
    • Offizieller Beitrag

    Allerdings bekomme ich jetzt in der Console folgender Fehler:

    Ich denke, dass es sich wieder um denselben Fehler handelt.

    Ich gehe mal davon aus, dass in der fvehID die Datensatz-ID des Fahrzeuges gespeichert ist.

    Falls das so ist, wieder nur i verwenden. (Zeile 3)

    vehicleID ist nicht der eindeutige Key in der Datenbank.

  • Das Ding ist das ist der aktuelle Code ohne erstellen des Vehicle oder speichern. Ich gehe nur die Schleife durch und printe i


    es gibt aktuell 4 fahrzeuge in der Datenbank die werden auch korrekt geladen


    so lade ich sie:


    //edit fehler gefunden es lag an meiner SendClientMessage :( hahah

    2 Mal editiert, zuletzt von Marschl ()

    • Offizieller Beitrag

    Marschl


    Ich gehe mal davon aus, dass der Fehler von fInfo[frak][fName] erzeugt wird. frak scheint größer zu sein, als der mögliche Index von fInfo zulässt.

    Dabei noch eine Frage: Fragst du innerhalb der Schleife ab, ob das Fahrzeug valide ist und wenn nicht, dann soll er das Fahrzeug erstellen?


    Das sieht alles nämlich etwas zu unkonventionell aus. Magst du mal sonst dein Befehl hier reinschreiben, dann kann man mal schauen, was man da verbessern kann.

  • Klar Edgar

    • Offizieller Beitrag

    Ich würde das folgendermaßen aufbauen:

    Füge deinem Vehicle-Enum noch einen Wert hinzu, bspw: fvehInUse (als Boolean-Wert)

    Damit kannst du prüfen, ob der Index/Slot bereits in Verwendung ist.


    Diesen Wert musst du immer auf true setzen, wenn du ein Fahrzeug erstellst und somit diesen Slot verwendest und auf false, wenn du diesen wieder freigibst.


    Mit dieser Funktion kannst du den nächsten freien slot erhalten.

    Code: getNextFreeVehicleSlot.stock.inc
    stock getNextFreeVehicleSlot() {
        for(new i; i < MAX_FRAK_VEHICLE; i++) {
            if (!fVehInfo[i][fvehInUse]) return i;
        }
        return -1;
    }


    Dann kannst du das folgendermaßen in deinen Befehl einbauen:


    Vergiss nicht, an den Stellen in deinem Script, an der du Fahrzeuge erstellst auch fVehInfo[freeSlot][fvehInUse] = true; zu verwenden und

    da, wo du welche wieder löscht dann auf false.


    Und dein Enum um fvehInUse erweitern.


    Anmerkung zur deiner Methode mit IsValidVehicle:

    Sollte das Fahrzeug irgendwann mal irgendwie verschwinden (Explodiert, nicht geladen, Troller und so weiter) dann wird das Fahrzeug durch dein Befehl überschrieben, da es nunmal nicht valide ist.


    Mit meiner Empfehlung auf fvehInUse zu prüfen, hast du die alleinige Kontrolle über den "Datensatz", ob dieser verwenden wird oder nicht. Mit IsValidVehicle hingegen kann dir auch mal das Spielgeschähen dazwischen funken, das ist aber in diesem Fall nie gewollt.

    Habe das schnell frei aus dem Kopf erledigt, könnte sein, dass da auch Denkfehler mitbei sind, einfach mal testen.

  • Beitrag von Marschl ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Warum zum teufel wird das destroyen aufgerufen und gleichzeitig auch die Fehlermessage dass ich in keinem FrakVeh bin? obwohl beim printen bei beide das gleiche raus kommt

    Code: Console
    9 9
  • Warum zum teufel wird das destroyen aufgerufen und gleichzeitig auch die Fehlermessage dass ich in keinem FrakVeh bin?

    Weil du da ein else in der Schleife hast.


    Kannst so Funktionen auch wunderbar auslagern:


    ast2ufdyxkb1.png


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

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