Beiträge von Jeffry

    Du hast das etwas durcheinander gebracht, schau mal:


    Deins:
    format(str, sizeof(str), "Du hast deinen Skin erfolgreich geändert.%d, skinid);


    richtig:
    format(str, sizeof(str), "Du hast deinen Skin erfolgreich zu Skin %d geändert.", skinid);


    Du hattest die hinteren Anführungszeichnen vergessen, und das %d muss an die Stelle im Text zwischen den Anführungszeichen, wo du später die Nummer stehen haben willst.

    Das machst du so:
    ocmd:skin(playerid, params[]) {
    new skinid;
    if(sscanf(params, "d", skinid)) return SendClientMessage(playerid, Red, "Verwendung: /skin [Skinid]");
    if(skinid < 0 || skinid > 299) return SendClientMessage(playerid, Red, "Skinid von 0 bis 299!");
    SetPlayerSkin(playerid, skinid);
    new str[144];
    format(str, sizeof(str), "Du hast deinen Skin erfolgreich zu Skin %d geändert.", skinid);
    SendClientMessage(playerid, Grün, str);
    return 1;
    }


    format => Platzhalter mit Variablen füllen.
    %d => Zahl
    %s => Text (String)
    %f => Float (Kommazahl)
    http://wiki.sa-mp.com/wiki/Format

    Warum hast du denn alle meine Funktionen verbogen? 8|


    ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[]); //Zeile 1276
    Zu
    ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2); //Zeile 1276



    stock UpdateDialogForAll(dialogid)
    Zu
    stock UpdateDialogForAll()


    if(Info[dialogid][i] == "\n")
    Zu
    if(Info[dialogid][i] == '\n')


    In den Beispielen von mir ist das aber alles nicht so.

    Kann ich mir nicht vorstellen, dann hast du noch etwas anderes falsch gemacht.


    Wenn du deine abgeändert Version nimmst, mache die Zeile zu
    if(ItemPosition != -1) strdel(Info[dialogid], ItemPosition, ItemPosition+strlen(item) + 1); //Zeile 1299


    Das strlen hast du nämlich vergessen.

    Dann ist das Debuggen etwas schwieriger, denn du kannst es nur mit der einen Fraktion testen und musst die Werte genau beachten.


    Am besten du debuggst es mal und meldest dich dann nochmal, entweder für Nachfragen oder wenn du es geschafft hast.

    Die ersten Fehler kommen, weil du die zwei Strings nicht deklariert hast.
    new olditem[128], newitem[128];


    Der zweite Fehler kommt, weil du meine AddItemToDialog Funktion geändert hast.
    Der Fehler liegt hier:
    ItemPosition(item) + 1
    Das hast du als Variable deklariert, daher kannst du nicht mit Klammern darauf zugreifen.



    @Paradoxon: Klar, das ist möglich. Ich habe eben nur ein Beispiel gemacht. Mit den anderen Arten geht es auch. Ich kann dir gerne ein Beispiel geben, wenn du willst.
    Wegen dem Speedtest: Werde ich nächste Woche mal machen.

    Es kann durchaus sein, dass es bei allen Fraktionen so ist, muss aber nicht sein.
    Du kannst es ja mit zwei verschiedenen Fraktionen testen, dann weißt du es gleich.


    Generell ist bei beiden Varianten das Debuggen die beste Möglichkeit um die Fehlerstelle zu finden und im besten Fall auch sofort zu beheben.

    Deine Funktion ist zwar schön und gut, nur bringt die dir hier nichts, da du ShowPlayerDialog_ex verwenden musst.


    Ja, du brauchst zwei unterschiedliche Dialog IDs, da der Code ja sonst nicht weiß welchen Dialog er aktualisieren soll. Die Werte werden ja in den Arrays gespeichert, auf die man mit der dialogid zugreift.


    Beachte, dass du eine möglichst kleine Dialog id nimmst, damit du kein riesen Array benötigst, für zwei Dialoge. Am besten du nimmst 0 und 1.
    Falls du da schon Dialog IDs hast, kannst diese ja ändern.
    Ich werde irgendwann mal das System so ändern, dass eigene Dialog IDs möglich sind.

    new string[27] = "abcdefghijklmnopqrstuvwxyz", mixed[27];
    printf("string: %s", string);
    new len = strlen(string), rand;
    for(new i=0; i<len; i++)
    {
    rand = random(len-i);
    mixed[i] = string[rand];
    strdel(string, rand, rand+1);
    }
    printf("mixed: %s", mixed);


    Sollte so passen.

    Es könnte daran liegen, dass eine oder mehrere Variablen beim Logout bzw. bei OnPlayerDisconnect nicht (korrekt) zurückgesetzt werden.
    Am besten du prüfst das mal, idealerweise indem du den Code debuggst.
    [ SCRIPTING ] Debugnachrichten


    Es ist häufig die Ursache solcher komplexen Probleme, dass einfach ein oder mehrere Werte nicht (korrekt) zurückgesetzt werden, sei es durch ein return an der falschen Stelle, oder wegen der Sprengung eines Arrays (zu großer Index, oder negativer Index).

    [pwn=1896]forward SendMessageAdmin(color[], text[]);
    public SendMessageAdmin(color[], text[])[/pwn]


    zu:
    [pwn=1896]forward SendMessageAdmin(color, text[]);
    public SendMessageAdmin(color, text[])[/pwn]


    Die Farbe ist eine Zahl, daher kein Array.


    PS: Endlich mal jemand der seine Zeilen richtig nummeriert, im Code! :thumbup:

    Das ist dein Array? Na dann schreibe es so:
    Mit dem -400.
    format(str,sizeof str,"{FFFFFF}Du hast folgendes Fahrzeug ausgewählt.\n\nName: {00FF00}%s\n{FFFFFF}Importkosten: {FF0000}%s{FFFFFF}€\n{FFFFFF}Kostenaufschlag (für die Lieferanten): {FF0000}%s{FFFFFF}€\n\nGesamtkosten: {FF0000}%s{FFFFFF}€",PlayerVehicle[gItemList[selecteditem]-400],inspoints(DealerVehPrice[selecteditem]),inspoints(2000),inspoints(DealerVehPrice[selecteditem]+rnd));

    Wie ist denn PlayerVehicle definiert?
    Du willst dort den Namen des Fahrzeugs ausgeben, oder?


    Hast du da schon ein Array mit allen Namen?


    Wenn ja:
    format(str,sizeof str,"{FFFFFF}Du hast folgendes Fahrzeug ausgewählt.\n\nName: {00FF00}%s\n{FFFFFF}Importkosten: {FF0000}%s{FFFFFF}€\n{FFFFFF}Kostenaufschlag (für die Lieferanten): {FF0000}%s{FFFFFF}€\n\nGesamtkosten: {FF0000}%s{FFFFFF}€",VEHICLEARRAYHIER[gItemList[selecteditem]-400],inspoints(DealerVehPrice[selecteditem]),inspoints(2000),inspoints(DealerVehPrice[selecteditem]+rnd));

    Bei der ersten Variante hast du ein paar Buchstaben weniger zu schreiben. Alles andere ist völlig identisch.


    Es ist absolut egal wie du es machst. Weder von den Ressourcen noch von sonst irgendwas unterscheiden sich die beiden Methoden.

    if(!strlen(tmp2) || !IsNumeric(tmp2)) return SCM(playerid,GELB,"INFO: /gw [PlayerID] [WaffenID] <Munition>"))


    zu:
    if(!strlen(tmp2) || !IsNumeric(tmp2)) return SCM(playerid,GELB,"INFO: /gw [PlayerID] [WaffenID] <Munition>");



    Ich hatte wohl den falschen Code in der Zwischenablage, kommt davon wenn man nur Copy Paste macht (ich). ;(