[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
  • Total requirements:64032232 bytes

    Die Meldung besagt schon, dass du ungewöhnlich viel Speicher verbrauchst.
    Ich vermute, du hast ein mehrdimensionales Array eingebaut, welches dazu führt, dass so viel Speicher reserviert werden muss. Vermutlich unabsichtlich.


    Ohne Code kann ich dir aber nicht sagen, an was es liegt.


    Entfernen kannst du die Meldung (falls der Debug Modus nicht an ist [pawn.cfg mit "-d3"]) mit folgendem Code:
    #pragma dynamic 100000
    Die Zahl so lange erhöhen, bis die Meldung weg ist.
    Schneller kompiliert der Code dadurch aber nicht.

  • die meldung kommt nur weil ich ne pawn.cfg mit "-d3" habe.

  • Jemand Ahnung, warum sich die Zahl nicht zwischenspeichern lässt?
    strmid(PIN[playerid], inputtext, 0, strval(inputtext));

  • Bereits wie oben probiert gehabt, brachte auch nichts.
    new PIN[MAX_PLAYERS][32]; //PIN Zwischenspeicherung

  • Hast du es mal mit format probiert?
    format(PIN[playerid], sizeof(PIN[]), inputtext);


    Falls das auch nicht geht, wird der Code überhaupt aufgerufen? Wenn ja, woran siehst du, dass der PIN nicht oder falsch gespeichert wird? Werden nur Zahlen gespeichert, dann kannst du es auch als Integer speichern.

  • Ging vorhin noch, jetzt komischerweise wird mir der PIN immer als Falscher Pin wiedergeben. Datenbank ist 1337, meine Eingabe ist 1337. Bereits geprintet. Woran liegt das bitte?

    if(playertextid == BankGUI1[playerid][1]) //Authentifizieren
    {
    if(PlayerInfo[playerid][pBankkontoState] == 1)return ShowPlayerDialog(playerid, DIALOG_NOTHING, DIALOG_STYLE_MSGBOX, ""HTML_SERVER""#SERVER_NAME": "HTML_WHITE"Konto gesperrt", ""HTML_WHITE"Dein Konto wurde von der Zentralen Bank gesperrt.\n\n"HTML_SERVER"Info:"HTML_WHITE" Fahre zur Bank und lasse dein Konto wieder freischalten.", "Bestätigen", "");
    if(PINReady[playerid] == 0)return ShowPlayerDialog(playerid, DIALOG_NOPIN, DIALOG_STYLE_MSGBOX, ""HTML_SERVER""#SERVER_NAME": "HTML_WHITE"PIN eingeben", ""HTML_WHITE"Du hast kein PIN eingegeben und kannst dich somit nicht einloggen.\n\n"HTML_SERVER"Info:"HTML_WHITE" Drücke erst auf das PIN Feld und gebe ein PIN ein.", "Bestätigen", "");
    if(!strcmp(PIN[playerid], PlayerInfo[playerid][pPIN], true))
    {
    for(new j; j < 7; j++)
    {
    PlayerTextDrawHide(playerid, BankGUI1[playerid][j]);
    }
    for(new j; j < 10; j++)
    {
    PlayerTextDrawShow(playerid, BankGUI2[playerid][j]);
    }
    new string[128], day, month, year;
    format(string, sizeof(string),"%d", PlayerInfo[playerid][pKontonummer]);
    PlayerTextDrawSetString(playerid, BankGUI2[playerid][1], string);
    getdate(year, month, day);
    format(string, sizeof(string),"%02d.%02d.%d", day, month, year);
    PlayerTextDrawSetString(playerid, BankGUI2[playerid][2], string);
    format(string, sizeof(string),"%s", PlayerInfo[playerid][pName]);
    PlayerTextDrawSetString(playerid, BankGUI2[playerid][3], string);
    PlayerTextDrawSetString(playerid, BankGUI2[playerid][4], "Girokonto");
    new Bankmoney = PlayerInfo[playerid][pBankguthaben];
    if(Bankmoney < 0)
    {
    format(string, sizeof(string),"~r~+$%d", Bankmoney);
    }
    else if(Bankmoney > 0)
    {
    format(string, sizeof(string),"~g~-$%d", Bankmoney);
    }
    else if(Bankmoney == 0)
    {
    format(string, sizeof(string),"~b~$%d", Bankmoney);
    }
    PlayerTextDrawSetString(playerid, BankGUI2[playerid][5], string);
    PINWrongCount[playerid] = 0;
    PINReady[playerid] = 0;
    }
    else
    {
    PINWrongCount[playerid] ++;
    PlayerTextDrawShow(playerid, BankGUI1[playerid][4]);
    switch(PINWrongCount[playerid])
    {
    case 1: PlayerTextDrawSetString(playerid, BankGUI1[playerid][5], "Falscher PIN (Versuch 1 / 3)");
    case 2: PlayerTextDrawSetString(playerid, BankGUI1[playerid][5], "Falscher PIN (Versuch 2 / 3)");
    case 3:
    {
    PlayerInfo[playerid][pBankkontoState] = 1;
    PlayerTextDrawSetString(playerid, BankGUI1[playerid][5], "Konto gesperrt (3 / 3 Versuchen)");
    }
    }
    PINReady[playerid] = 0;
    PlayerTextDrawHide(playerid, BankGUI1[playerid][6]);
    PlayerTextDrawShow(playerid, BankGUI1[playerid][5]);
    }
    return 1;
    }

  • Will abfragen ob die Nummer 5 Zeichen lang ist, geht aber nicht so, wie gewollt.
    if(strval(Kontonummer[playerid]) <= 11111 && strval(Kontonummer[playerid]) >= 99999)

  • So fragst du ja auch ab, ob die Nummer kleiner 11111 und größer 99999 ist...das ist ja ein Widerspruch, das geht ja nicht xD


    Meine Frage ist nun, wie hast du Kontonummer deklariert?

    ast2ufdyxkb1.png


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

  • Dann ist das schon ein Integer, dann musst du ihn nicht konvertieren mit strval.


    Dann kannst du das einfach so machen:


    C
    if(Kontonummer[playerid] >= 10000 && Kontonummer[playerid] <= 99999)

    ast2ufdyxkb1.png


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

  • Jetzt gehen alle, außer Kontonummern, die 5 Zeichen lang sind :D


    Kontonummer wird so zwischengespeichert

    case DIALOG_KONTONUMMER:
    {
    if(response)
    {
    Kontonummer[playerid] = strval(inputtext);
    TransferKontonummerReady[playerid] = 1;

    new string[128];
    format(string, sizeof(string),"~l~%d", strval(inputtext));
    PlayerTextDrawSetString(playerid, BankGUI5[playerid][2], string);
    }
    }

  • Jetzt gehen alle, außer Kontonummern, die 5 Zeichen lang sind

    Wie sieht denn dein Code mit der Abfrage aus usw.


    Und welche Pin-Nummer gibst du ein?


    Da Jeffry dir zu Intgern geraten hat, kannst du keine Kontonummern benutzten, die mit 0 beginnen, also wirklich nur reine Zahlenwerte die größer als 10000 sind.

    ast2ufdyxkb1.png


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

  • Willkürliche PIN Nummern gebe ich immer ein, um zu testen, ob diese wirklich nur 5 Zeichen lang sein dürfen.


    Abfrage wäre halt ab hier.
    if(Kontonummer[playerid] >= 10000 && Kontonummer[playerid] <= 99999)

  • ...ja, aber wie sieht der Code darunter aus.


    Denn ich vermute, du hast eine umgekehrte Logik in deinem Code, sonst würden ja nur die Nummern zwischen 10.000 und 99.999 funktionieren...weil die Abfrage ist ja eindeutig ^^

    ast2ufdyxkb1.png


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

  • Der ganze Code schaut so aus:

    if(Kontonummer[playerid] >= 10000 && Kontonummer[playerid] <= 99999)
    {
    new string[128];



    HideMessageBank(playerid);
    HideMessageBank2(playerid);
    HideMessageBank3(playerid);
    HideMessageBank4(playerid);
    HideMessageBank5(playerid);
    PlayerTextDrawShow(playerid, BankMessage[playerid][4]);
    format(string, sizeof(string),"Die Kontonummer muss 5 Zeichen lang sein", TransferAmount[playerid]);
    convert_encoding(string);
    PlayerTextDrawSetString(playerid, BankMessage[playerid][3], string);
    format(string,sizeof(string),"Kontonummer: %d", Kontonummer[playerid]);
    SendClientMessage(playerid, -1, string);
    PlayerTextDrawShow(playerid, BankMessage[playerid][3]);
    SetTimerEx("HideMessageBank3", 2500, false, "i", playerid);
    PlayerTextDrawHide(playerid, BankGUI5[playerid][2]);
    PlayerTextDrawHide(playerid, BankGUI5[playerid][3]);
    PlayerTextDrawHide(playerid, BankGUI5[playerid][3]);



    PlayerTextDrawShow(playerid, BankGUI5[playerid][2]);
    PlayerTextDrawShow(playerid, BankGUI5[playerid][3]);
    PlayerTextDrawShow(playerid, BankGUI5[playerid][3]);
    return 1;
    }

  • Ja und da ist dein Fehler...wenn die Länge stimmt, rufst du den Abschnitt auf, wo gesagt wird, dass es nicht stimmt...


    Also musst du die Logik umkehren:


    if(!(Kontonummer[playerid] >= 10000 && Kontonummer[playerid] <= 99999))

    ast2ufdyxkb1.png


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