[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
  • Hallo!


    Ich bin dabei meinscript modular zu gestalten. Ist es irgendwie möglich, die Dialoge in Includes aufzuteilen?


    Beispiel:

    Accountsystem: Dort alle Dialoge für die Accounterstellung = stock accdialoge.

    Fraktionssystem: Dort alle Dialoge für das Fraktionssystem = stock frakdialoge.

    OnDialogRespose = alle stocks mit Dialogen.


    MfG

  • Hallo!

    Ich bin dabei meinscript modular zu gestalten. Ist es irgendwie möglich, die Dialoge in Includes aufzuteilen?

    MfG

    Ja ist es. Du erstellst in der Include deine stock accdialoge/frakdialoge etc. und rufst diese dann beliebig im OnDialogResponse auf(includes im Main-Script bzw. wo du die Funktionen verwendest nicht vergessen.)

    Ich hoffe mal das ist was du meinst.

    MfG. Adrian

  • Ja genau dasmeine ich.



    Das ist der stock


    C
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
        new string[512];
        switch(dialogid)
        {
            {
                stock logindialog(playerid, response, listitem, inputtext[]);
            }    

    So sieht das public aus.


    Beim Compilen kommen keine Errors aber das Script geht nicht an mit folgendem Fehler:


    [16:33:26] Script[gamemodes/selfmade1.amx]: Run time error 17: "Invalid/unsupported P-code file format"

    [16:33:26] Failed to load 'gamemodes/selfmade1.amx' script.

  • Ich habs jett mal so gemacht, jeodch komen jetzt mehr Fehler.


    Ich hab hier mal den logindailog in ein stock und die restlichen dialoge in ein stock gemacht.

    C
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
        logindialog(playerid, dialogid, response, listitem, inputtext);
        restdialog(playerid, dialogid, response, listitem, inputtext);
    }

    So sieht nun OnDialogResponse aus.


    Nun kommen aber folgende Errors:


    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(20) : error 017: undefined symbol "DIALOG_LOGIN"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(26) : error 017: undefined symbol "DIALOG_LOGIN"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(35) : warning 209: function "logindialog" should return a value

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(16) : warning 203: symbol is never used: "response"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(41) : error 017: undefined symbol "DIALOG_CHARACTER"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(57) : error 017: undefined symbol "DIALOG_CREATE_CHARACTER_NAME"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(72) : error 017: undefined symbol "DIALOG_CREATE_CHARACTER_NAME"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(87) : error 017: undefined symbol "DIALOG_CREATE_CHARACTER_NAME"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(94) : error 017: undefined symbol "DIALOG_CREATE_CHARACTER_NAME"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(111) : error 017: undefined symbol "DIALOG_CREATE_CHARACTER_NAME"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(115) : error 017: undefined symbol "DIALOG_CREATE_CHARACTER_MALE"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(117) : error 017: undefined symbol "DIALOG_CREATE_CHARACTER_NAME"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(136) : error 017: undefined symbol "DIALOG_CREATE_CHARACTER_MALE"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(139) : error 017: undefined symbol "DIALOG_CREATE"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(144) : error 017: undefined symbol "DIALOG_CREATE_TELEPORT"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(145) : error 017: undefined symbol "DIALOG_CREATE_BUILDING"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(149) : error 017: undefined symbol "DIALOG_CREATE_TELEPORT"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(151) : error 017: undefined symbol "DIALOG_CREATE"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(155) : error 017: undefined symbol "DIALOG_TELEPORT"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(159) : error 017: undefined symbol "TeleportInfo"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(159) : error 029: invalid expression, assumed zero

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(159) : warning

    215: expression has no effect

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(159) : error 001: expected token: ";", but found "]"

    C:\Users\Alex\Desktop\RP Selfmade\pawno\include\../include/systeme/anmeldesystem.inc(159) : fatal error 107: too many error messages on one line


    Die Dialoge und TeleportInfo sind im Hauptsrcipt in Enums definiert. Wo liegt hier der Fehler?

  • "Modular" bedeutet das du jederzeit etwas entladen und laden kannst. Darauf ist weder PAWN noch SA-MP ausgelegt.


    Hunderte wollten bereits alles "strukturiert auslagern" und ließen es doch (u.a auch ich). Es ist einfach nicht dazu gedacht und unterstützt es auch nicht.


    //edit

    Und wehe einer kommt mir jetzt mit "Filterscripts sind module". Gibt direkt späre

    Mit den besten Grüßen,


    » GangstaSunny «

    Head Executive Officer of Adnimistrators.


    Front-End Developer

    Vermutlich derzeit mit einer Tasse Kaffee in der Hand. <320-8744879c5ef32ae500c986f65b16cca8346779e5e7d65a970ff872db3d0fecb8-variant.webp

  • Beitrag von Klex ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: hab es selbst gelöst danke denoch ().
  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Beitrag von GangstaSunny ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: jdjd ().
  • Du packst das MySQL Insert Query einfach in den OnPasswordHashed Callback.


    Dadurch hast du ja direkt Zugriff auf den Hash.


    Einfach nur den Code umstrukturieren :)

    ast2ufdyxkb1.png


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

  • C
    public OnPasswordHashed(playerid)
    {
        new hash[BCRYPT_HASH_LENGTH];
        bcrypt_get_hash(hash);
        new query[256];
        mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', '%e')", PlayerInfo[playerid][pName], inputtext);
        mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
        printf("Password hashed for player %d: %s", playerid, hash);
        return 1;
    }

    Ungefähr so, oder wie genau?

  • Fast, also den inputtext (das ist das Klartext Passwort) hast du ja jetzt schon zu einem Hash verwandelt, also diesen auch nur in die Datenbank speichern, ergo, so schreiben:


    C
    public OnPasswordHashed(playerid)
    {
        new hash[BCRYPT_HASH_LENGTH],query[256];
        bcrypt_get_hash(hash);
        mysql_format(handle, query, sizeof(query), "INSERT INTO `users` (`name`, `password`) VALUES ('%e', '%e')", PlayerInfo[playerid][pName], hash);
        mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
        return 1;
    }

    ast2ufdyxkb1.png


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

  • Hab das mal gemacht, Login genauso ähnlich?


    C
    public OnPasswordChecked(playerid)
    {
        new bool:match = bcrypt_is_equal(),query[256];
        mysql_format(handle, query, sizeof(query), "SELECT * FROM accounts WHERE Name = '%e' AND Password = '%e'", AccountInfo[playerid][account_Name], hash);
        mysql_pquery(handle, query, "AccountLogin", "d", playerid);
        return 1;
    }


    Soweit ist es mir auch noch klar, aber wie mache ich den Dialog am besten?

  • Da drehst du das um. Du lädst zuerst aus der MySQL Datenbank und prüfst das dann gegen.


    So zum Beispiel:


    ast2ufdyxkb1.png


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

  • AccountLogin wilil irgendiwe nicht ganz, das s sagt das inputtext bei bcrypt_check passt nicht.

    Wie mache ich am besten den Reister Dialog mit bcrypt fertig? Die Zeile wie im Tutorial hab ich schon.