[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
  • Beitrag von Dr. Frauenarzt ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Selbst gelöst ().
  • Guten Abend zusammen,
    möchte gerne mit einem Enum verschiedene Dinge bestimmen, z.B wie das mit einem Admincar, leider habe ich das Problem,
    wenn ich den Enum "zurücksetzten" möchte, lädt mein Script nicht mehr richtig. Keine Errors oder Warns.



    enum AdminCMDEnum{
    adVeh,
    Text3D:adTitel[MAX_VEHICLES]
    };
    new aCMDEnum[MAX_PLAYERS][AdminCMDEnum];


    // Zurücksetzten


    aCMDEnum[playerid][adVeh] = INVALID_VEHICLE_ID;
    aCMDEnum[playerid][adTitel][aCMDEnum[playerid][adVeh]] = Text3D:INVALID_3DTEXT_ID;

    Delete3DTextLabel(aCMDEnum[playerid][adTitel][aCMDEnum[playerid][adVeh]]);


    Hoffe einer kann mir sagen woran es liegt.


    MfG.

    Die Missglückte Persönlichkeit, Ciao!

  • Du setzt das in der falschen Reihenfolge zurück.


    Du solltest adVeh als letztes auf INVALID_VEHICLE_ID setzen, sonst wird versucht auf den INVALID_VEHICLE_ID index zuzugreifen, was dann zu einen Fehler führt ;)


    Mit crashdetect kannst du dir solche Fehler im server.log anzeigen lassen ;)

    ast2ufdyxkb1.png


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

  • Kann mir jemand sagen wo ich ein Fehler mache ?



    Code
    [19:30:49] [debug] Run time error 4: "Array index out of bounds"
    [19:30:49] [debug]  Attempted to read/write array element at index 65535 in array of size 1000
    [19:30:49] [debug] AMX backtrace:
    [19:30:49] [debug] #0 000573cc in ?? (65535) from selfmade.amx
    [19:30:49] [debug] #1 0002f9d0 in public ShowMembers (0) from selfmade.amx
    Code
    new query[265];
    	mysql_format(handle, query, sizeof(query), "SELECT * FROM `Accounts` WHERE Fraktion = '%d'", pInfo[playerid][pFraktion]);
    	mysql_pquery(handle, query, "ShowMembers", "i", playerid);
  • An dem Code ist soviel komisch, da bin ich gerade zu faul auf das alles ein zugehen.


    Ich hoffe du siehst, dass man den Code auch etwas verkürzen und vereinfachen kann:



    Versuche den Code mal :)


    Ich denke das kam daher, dass du viel zu oft direkt auf diese playerid zugegriffen hast und wenn der Spieler nicht online ist, wird playerid = INVALID_PLAYER_ID zugewiesen.
    INVALID_PLAYER_ID = 65535


    Und ich denke eine andere Funktion konnte diesen Wert nicht handeln und hat dann verkackt :)

    ast2ufdyxkb1.png


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

  • Weiß jemand zufällig, warum der Dialog so "buggt"?

    CMD:acheckgun(playerid, params[])
    {
    new playerID, string[128], waffenid, waffenmuni, waffenname[24], header[128];
    if(PlayerInfo[playerid][pEingeloggt] != 1)return SendClientMessage(playerid, COLOR_ORANGE, "Info"HTML_WHITE": Du bist derzeit nicht eingeloggt.");
    if(PlayerInfo[playerid][pAdminlevel] < 2)return SendClientMessage(playerid, COLOR_RED, "Fehler"HTML_WHITE": Diesen Befehl darfst du nicht benutzen.");
    if(sscanf(params,"u", playerID))return SendClientMessage(playerid, COLOR_GREEN, "* Verwendung"HTML_WHITE": /acheckgun [SpielerID/Teilname]");
    if(!IsPlayerConnected(playerID))return SendClientMessage(playerid, COLOR_RED, "Fehler"HTML_WHITE": Der angegebene Spieler ist nicht online.");
    if(PlayerInfo[playerID][pEingeloggt] != 1)return SendClientMessage(playerid, COLOR_RED, "Fehler"HTML_WHITE": Der angegebene Spieler ist nicht eingeloggt.");
    strdel(DialogString, 0, sizeof(DialogString));
    for (new i = 0; i <12; i++)
    {
    GetPlayerWeaponData(playerID, i, waffenid, waffenmuni);
    GetWaffenName(waffenid, waffenname, sizeof(waffenname));
    if(waffenmuni != 0)
    {
    format(DialogString, sizeof(DialogString),""HTML_WHITE"Slot\t"HTML_WHITE"Waffe\t"HTML_WHITE"Munition"HTML_WHITE"\n\%s\n%d\t%s\t%d", DialogString, i, waffenname, waffenmuni);
    }
    }
    format(header, sizeof(header), ""HTML_ORANGE""#SERVER_NAME" "HTML_WHITE"- Waffen von (%s)", PlayerInfo[playerID][pName]);
    ShowPlayerDialog(playerid, DIALOG_ADMINS, DIALOG_STYLE_TABLIST_HEADERS, header, DialogString, "Schließen", "");
    return 1;
    }


    https://www.fast-images.de/uploads/e7e80f432e202a8ae59c.png

  • Man sollte dafür keine globalen Strings nutzen.


    Da kommt es öfters mal zu Überschreibungen und Fehlern, vermutlich ist das dein Problem hier :)

    ast2ufdyxkb1.png


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

  • Geht selbst nicht mit einem extra definierten String dafür.
    Sprich -> Die Tablist Headers werden einmal im Dialog wiedergeben, obwohl sie nur 1 mal oben stehen sollten.


    //e: Sobald ich nur eine Waffe habe, funktioniert es. Bei zwei Waffen buggt es. @Kaliber

    Einmal editiert, zuletzt von FamouZz_ ()

  • Achso das meinst du mit "buggt" ahja.


    Ja, das liegt daran, dass du in der Schleife immer wieder den Header mit rein packst.


    C
    format(DialogString, sizeof(DialogString),"%s\n%d\t%s\t%d", DialogString, i, waffenname, waffenmuni);


    Also das reicht in der Schleife und unterhalb der Schleife machst du dann einfach sowas:



    C
    strins(DialogString,""HTML_WHITE"Slot\t"HTML_WHITE"Waffe\t"HTML_WHITE"Munition"HTML_WHITE"\n",0,sizeof(DialogString));

    ast2ufdyxkb1.png


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

  • Hallo,


    Ich habe eine frage wen ich /anmelden eingebe steht immer das die Schlüssel nicht belegt sind warum?




    C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(28584) : error 001: expected token: ")", but found "["
    C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(28584) : error 029: invalid expression, assumed zero
    C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(28584) : warning 215: expression has no effect
    C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(28584) : error 001: expected token: ";", but found "]"
    C:\Users\ASUS\Desktop\Gaming-Board\gamemodes\Bearbeitetes.pwn(28584) : fatal error 107: too many error messages on one line

    Einmal editiert, zuletzt von Dr. Frauenarzt () aus folgendem Grund: Code komplett bearbeitet. + Fehlerzeile makiert

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Wo ist das außerhalb bitte?



    if(SpielerAutoInfo[playerid][0][saModelID] >= 400 && SpielerAutoInfo[playerid][0][saModelID] <= 611) -> Meiner Meinung richtig.



    if(SpielerAutoInfo[playerid][0][slot][saAnmeldungsOrt] == 0) format(Fahrzeug1, sizeof(Fahrzeug1), "Schlüssel 1: %s {FF0000}[Nicht Angemeldet]", VehicleName[SpielerAutoInfo[playerid][0][saModelID]-400]); //28584
    else format(Fahrzeug1, sizeof(Fahrzeug1), "Schlüssel 1: %s {2EFE2E}[Angemeldet]", VehicleName[SpielerAutoInfo[playerid][0][saModelID]-400]);
    -> Meiner Meinung auch richtig aber scheinbar nicht

  • Wie kann ich machen, dass wenn man in Fahrzeug "MIETCAR" einsteigt, man ein Dialog kriegt? Also soll dann mieten etc. kommen aber das krieg ich alleine hin.
    Alle Fahrzeuge sind definiert, aber das mit dem Dialog fehlt, wenn man in das einsteigt.

  • Der Code macht doch auch was er soll. SpielerAutoInfo[playerid][0][saModelID] ist außerhalb von 400 und 611. Deswegen bekommst du die Meldung.
    Lass dir die Variable doch mal ausgeben, dann weißt du Bescheid.

    PAWNit gratis nutzen?
    Geschenkcode: 2017VQXPKB8V3KA

    Hier könnte Ihre Werbung stehen.

  • Jemand Ahnung, warum das Label nicht erstellt wird?

    new Vehicle = CreateVehicle(560, Pos[0], Pos[1], Pos[2], Pos[3], 3, 3, -1, 0);
    SetVehicleNumberPlate(Vehicle, ""HTML_ORANGE"Supporter-Car");
    PutPlayerInVehicle(playerid, Vehicle, 0);
    format(string, sizeof(string), ""HTML_WHITE"Supporter Car von "HTML_ORANGE"%s",PlayerInfo[playerid][pName]);
    SupCarLabel[Vehicle] = CreateDynamic3DTextLabel(string, COLOR_WHITE, Pos[0], Pos[1], Pos[2], Pos[3], 25, INVALID_PLAYER_ID, Vehicle, 0, 0, 0, 0, 30);

  • Beitrag von Canna ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • do.de - Domain-Offensive - Domains für alle und zu super Preisen