Erstellen von /Stats im Dialog Menü

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
  • Schönen Guten Nachmittag, liebe Brotfische!


    Da jetzt die Nachfrage nach einem Dialog Stats Menü etwas gestiegen ist,
    habe ich mir gedacht, ich schreibe ein Tutorial darüber!


    In diesem kleinem Tutorial, erkläre ich euch wie ihr den Namen, den Score und das Geld abfragen könnt.
    Vorerst sag ich euch das dieses Tutorial zum Lernen dient, und ich somit einige stellen "Zensiert" habe :)


    Auf gehts!


    1)
    Zu aller erst legen wir ein forward an, was den zweck hat unser "Public" "weiterzuleiten/zuladen".
    forward MyDialogStatsSystem(playerid); // Legt das Forward ab diesem Moment an!


    2)
    Nun kommen wir zu dem Dialog Public, das könnt ihr ambesten einfach ganz unten ans Script dranhängen.
    Wir erstellen ein neues Public namens MyDialogStatsSystem - Wichtig ist das es genauso wie unser Forward heißt!
    public MyDialogStatsSystem(playerid)


    3)
    Nun legen wir im Public "neue" sachen an - (String,Name,Geld,Score) - Unser Hauptapteil der Stats

    public MyDialogStatsSystem(playerid){ // Klammer öffnen
    new String[128], Name[MAX_PLAYER_NAME], Geld = GetPlayerMoney(playerid), Score = GetPlayerScore(playerid); // String, Name, Geld, und Score angelegt.
    return 1;
    } // Klammer wieder schließen.


    4)
    Nun haben wir schonmal alles angelegt, jedoch müssen wir noch den Namen von dem Aufrufer herrausfinden.
    Das geht so:
    GetPlayerName(playerid,Name,sizeof Name); // Fügen wir unter dem neu angelegten ein.


    Unser Public sollte nun so aussehen:

    public MyDialogStatsSystem(playerid){ // Klammer öffnen
    // new .....
    GetPlayerName(playerid,Name,sizeof Name);
    return 1;
    } // Klammer wieder schließen.


    5)
    Jetzt können wir uns an den eigentlichen Dialog "rannmachen",
    dazu benötigen wir einmal die format funktion und unseren String.


    Folgendes fügen wir nun in unser Public ein:

    format(String, sizeof(String), "[Stats von %s]\nNickname: %s\nScore: %d\n Geld: %d", Name, Name, Score, Geld); // Unsere (New's) die wir oben neu angelegt haben - immer mit einem , trennen :5
    ShowPlayerDialog(playerid, DIALOG_STYLE_MSGBOX, 0, "Mein Spiel Stand", String, "Weiter", "Weiter"); // Öffne das Dialog fenster beim Spieler


    Erklärung:
    %s steht für einen String - BSP: Name
    %d steht für eine Zahl,einen Integer - BSP: Geld
    \n steht für eine Neue Zeile - BSP: Zeilenumbruch


    Hier seht ihr auch die Tabelle.


    Erklärung²: ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[])


    Nun sollte das Public so aussehen:

    public MyDialogStatsSystem(playerid){ // Klammer öffnen
    // new .....
    // GetPlayerName .....
    format(String, sizeof(String), "[Stats von %s]\nNickname: %s\nScore: %d\n Geld: %d", Name, Name, Score, Geld); // Unsere (New's) die wir oben neu angelegt haben - immer mit einem , trennen :5
    ShowPlayerDialog(playerid, DIALOG_STYLE_MSGBOX, 0, "Mein Spiel Stand", String, "Weiter", "Weiter"); // Öffne das Dialog fenster beim Spieler
    return 1;
    } // Klammer wieder schließen.


    6)
    Endlich geschafft!
    Unser Public ist nun endlich fertig, kann aber jederzeit erweitert werden!


    Nun können wir unseren Dialog mit "MyDialogStatsSystem(playerid);" aufrufen.


    Sprich:

    if (strcmp(cmd, "/stats", true) == 0) // unser Command, kann natürlich auch anders angeordnet sein jenachdem wie er bei euch im Script definiert ist!
    {
    MyDialogStatsSystem(playerid); // Öffnet unsere Stats :5
    return 1;
    }


    ---
    Beispiel Dowloaden


    ---
    Ingame Outcome:


    ---
    So hiermit bedanke ich mich bei euch für das tolle Lesen, und hoffe auf ein positives Feedback.


    Falls weitere Fragen existieren, könnt ihr hier gerne im Theard fragenstellen.


    ---
    Dieses Tutorial darf verändert und verbreitet werden, jedoch müsst ihr meinen Namen oder eine Verlinkung auf mein Profil erstellen!
    ---


    Rechtschreibfehler können natürlich auch hier erhalten sein, falls ihr welche findet -> Radiert ihn aus! :P


    ---


    Mit Freundlichen Grüßen


    Dominik K.

    2 Mal editiert, zuletzt von DominikK ()

  • das
    public MyDialogStatsSystem(playerid){ // Klammer öffnen
    // new .....
    // GetPlayerName .....
    format(String, sizeof(String), "[Stats von %s]\nNickname: %s\nScore: %d\n Geld: %d", Name, Name, Score, Geld); // Unsere (New's) die wir oben neu angelegt haben - immer mit einem , trennen :5
    ShowPlayerDialog(playerid, DIALOG_STYLE_MSGBOX, 0, "Mein Spiel Stand", String, "Weiter", "Weiter"); // Öffne das Dialog fenster beim Spieler
    return 1;
    } // Klammer wieder schließen.

    ist falsch da die dialog id falsch difiniert ist einfach so machen
    #define DIALOG_STATS 0


    public MyDialogStatsSystem(playerid){ // Klammer öffnen
    // new .....
    // GetPlayerName .....
    format(String, sizeof(String), "[Stats von %s]\nNickname: %s\nScore: %d\n Geld: %d", Name, Name, Score, Geld); // Unsere (New's) die wir oben neu angelegt haben - immer mit einem , trennen :5
    ShowPlayerDialog(playerid, DIALOG_STATS, 0, "Mein Spiel Stand", String, "Weiter", "Weiter"); // Öffne das Dialog fenster beim Spieler
    return 1;
    } // Klammer wieder schließen.

  • Mussman nicht ersetzen, funktioniert auch so.
    Kannman aber gerne wennman es will (Übersicht z.b)


    Mfg :thumbup:

  • Find ich mager, solltest sowas ergänzen:
    new _string_table[3][64];
    new fullstr[128];
    format(_string_table[0],64,"Liste Nummer eins mit zahl %d & format %s",2,"Hallo");
    format(_string_table[1],64,"bla mit %d mit Senf blubb",5);
    format(_string_table[2],64,"You can say %s","Hello World");
    format(fullstr,sizeof fullstr,"%s\n%s\n%s",_string_table[0],_string_table[1],_string_table[2]);
    ShowPlayerDialog(playerid,statemsg,0,"Test",fullstr,"ok","Schließen");

  • bis zu wievielen zeichen geht das weil wenn ich meine stats sachen reinmache bekomme ichein error das diese zeile zu lang ist -.-

  • Nabend
    ich bekomme folgenden error beim copillern


    C:\Users\Tiger\Desktop\dialogstats\dialogstats.pwn(36) : error 017: undefined symbol "ShowPlayerDialog"
    C:\Users\Tiger\Desktop\dialogstats\dialogstats.pwn(39) : warning 203: symbol is never used: "ret_memcpy"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    das FS


    /*
    Das beispiel Script zum Tutorial (c)
    http://forum.sa-mp.de/wbb/san-andreas-multiplayer/tutorials/p287163-erstellen-von-stats-im-dialog-men%C3%BC/#post287163
    */


    #include <a_samp>
    #include <dini>
    forward MyDialogStatsSystem(playerid);
    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Visuelle Stats im Dialog style");
    print("--------------------------------------\n");
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/stats", cmdtext, true, 10) == 0)
    {
    MyDialogStatsSystem(playerid);
    return 1;
    }
    return 0;
    }


    public MyDialogStatsSystem(playerid){
    new String[128], Name[MAX_PLAYER_NAME], Geld = GetPlayerMoney(playerid), Score = GetPlayerScore(playerid); // String, Name, Geld, und Score angelegt.
    GetPlayerName(playerid,Name,sizeof Name);
    format(String, sizeof(String), "[Stats von %s]\nNickname: %s\nScore: %d\n Geld: %d", Name, Name, Score, Geld); // Unsere (New's) die wir oben neu angelegt haben - immer mit einem , trennen :5
    ShowPlayerDialog(playerid, DIALOG_STYLE_LIST, 0, "Mein Spiel Stand", String, "Weiter", "Weiter"); // Öffne das Dialog fenster beim Spieler
    return 1;
    }


    pls help

  • Moin
    Wollte es aber in mein Registersysthem einbauen und dies hat den include dini
    pls help


    und kann mir es wer erklären wie ich z.b das adminlevel aus der Spieler ini rausbekomme ?
    Mfg
    Tigerkiller :thumbup:


    //EDIT
    Wenn ich das include dini rausnehme besteht der selbe fehler

  • Mahlzeit
    wie kann ich das jrtzt machen das man was aus der ini des spielrs ausliest ?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • \n macht eine neue Zeile.


    PS: Warum machst du das als public im Tut? oO
    Hat der Godfather mit seiner schlechten Umsetzung abgefärbt?

  • Ein Public machen für generell stats etc dann beim showstats einfach noch ne Variable hinten dran für Auswahl


    /durchsuchen
    /stats
    /check


    Alle Befehle über diesen Public arbeiten lassen und je nach Auswahl dann bestimmten String nehmen für Statsbox

  • ähhm nein?


    Wisst ihr überhaupt wo der Unterschied zwischen public, stock oder der normalen Funktion ist?
    Nur weil das im Kackfather steht, bedeutet das noch lange nicht, das es "richtig" ist.


    public sollte man nur dann nutzen, wenn man diese Funktion über einen Timer oder externes Filterscript aufrufen will.
    stock bedeutet, dass die Funktion, falls diese nicht verwendet wird, einfach übersprungen wird.
    Daher bleibt dir nur die normale Funktion ...


    und zwar:


    MyDialogStatsSystem(playerid){ // Klammer öffnen
    // new .....
    // GetPlayerName .....
    format(String, sizeof(String), "[Stats von %s]\nNickname: %s\nScore: %d\n Geld: %d", Name, Name, Score, Geld); // Unsere (New's) die wir oben neu angelegt haben - immer mit einem , trennen :5
    ShowPlayerDialog(playerid, DIALOG_STYLE_MSGBOX, 0, "Mein Spiel Stand", String, "Weiter", "Weiter"); // Öffne das Dialog fenster beim Spieler
    return 1;
    } // Klammer wieder schließen.



    if (strcmp(cmd, "/stats", true) == 0) // unser Command, kann natürlich auch anders angeordnet sein jenachdem wie er bei euch im Script definiert ist!
    {
    MyDialogStatsSystem(playerid); // Öffnet unsere Stats :5
    return 1;
    }



    EDIT: Julian, war nicht an dich. Hast bloss vor mir gepostet.

  • Ich kriege bei
    if (strcmp(cmd, "/stats", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if (gPlayerLogged[playerid] != 0)
    {
    DialogStats(playerid);
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD1, " Du bist nicht eingeloggt !");
    }
    }
    return 1;
    }
    Immer ne Warning und wenn man ingame /stats eingibt crasht der Server ;(

    GLOTZ MICH NICHT SO AN! ICH BIN AUCH NUR EINE SIGNATUR!!!

  • Muss ja auch
    if (strcmp("/stats",cmdtext,  true, 5) == 0)sein :thumbup: [MSIE_newline_end ]

  • kommen immernoch 5 warns, naja vllt crasht server nimmer, danke
    [MSIE_newline_end ] was das ?^^


    // meine warnings


    C:\Users\EL_Diabolo\Desktop\Server für GTA 0.3\gamemodes\script.pwn(3411) : warning 235: public function lacks forward declaration (symbol "RemoveRoadblock")
    C:\Users\EL_Diabolo\Desktop\Server für GTA 0.3\gamemodes\script.pwn(6130) : warning 209: function "JB_OnPlayerSpawn" should return a value
    C:\Users\EL_Diabolo\Desktop\Server für GTA 0.3\gamemodes\script.pwn(16270) : warning 202: number of arguments does not match definition
    C:\Users\EL_Diabolo\Desktop\Server für GTA 0.3\gamemodes\script.pwn(19031) : warning 202: number of arguments does not match definition
    C:\Users\EL_Diabolo\Desktop\Server für GTA 0.3\gamemodes\script.pwn(11714) : warning 204: symbol is assigned a value that is never used: "Timer"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


    Header size: 11964 bytes
    Code size: 1709016 bytes
    Data size: 5765148 bytes
    Stack/heap size: 16384 bytes; estimated max. usage=5110 cells (20440 bytes)
    Total requirements: 7502512 bytes


    5 Warnings.


    // so sieht mein /stats nun aus:
    if (strcmp("/stats",cmdtext, true, 5) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if (gPlayerLogged[playerid] != 0)
    {
    DialogStats(playerid);
    }
    else
    {
    SendClientMessage(playerid, COLOR_GRAD1, " Du bist nicht eingeloggt !");
    }
    }
    return 1;
    }

    GLOTZ MICH NICHT SO AN! ICH BIN AUCH NUR EINE SIGNATUR!!!

    2 Mal editiert, zuletzt von Diabol0 ()

  • Sry wegen Doppelpost, aber es ist sehr wichtig, mein Server crasht andauernd weil jemand /Stats eingibt
    und es beschweren sich schon viele, woran kann das liegen *verzweifel* ;(;(

    GLOTZ MICH NICHT SO AN! ICH BIN AUCH NUR EINE SIGNATUR!!!

    Einmal editiert, zuletzt von Diabol0 ()

  • Sorry das ich hier mal was schreibe ^^.
    Aber wenn du deine Stats nur über eine Zeile Anzeigen lässt, dann ehm ja kannst du nicht alles anzeigen lassen.
    Es gibt eine begrenzung wir lang es sein darf.


    Schau mal so gehts auch und es ist auch einfach.
    new string1[128],string2[128],string3[128],string4[128],string5[128],string6[128],string7[128],string8[128],string9[128],string10[128],string11[128],string12[128],string13[128],bussgeldpolkata[1280];
    format(string1, sizeof string1, "Level:[%d] Geschlecht:[%s] Alter:[%d] Herkunft:[%s] Spawnenergie:[%.1f] Geld:[$%d] Bank:[$%d] Ph:[%d]", level,atext,age,otext,shealth+50, cash, account, pnumber);
    format(string2, sizeof string2, "Premium Rang:[%s] Verheiratet:[%s] Spielzeit:[%d] LottoNr:[%d] Job:[%s]", drank,married,ptime,lotto,jtext);
    format(string3, sizeof string3, "FishesCaught:[%d] GrösterFisch:[%d] Verbrechen:[%d] Gefängniszeit:[%d] Gesucht:[%d]", fishes,bigfish,crimes,arrests,warrests);
    format(string4, sizeof string4, "Kills:[%d] Tode:[%d] Nächstes Level:[$%d] Respekt:[%d/%d] WantedLevel:[%d] Familie:[%s]",kills,deaths,costlevel,exp,expamount,wanted,f2text);
    format(string5, sizeof string5, "Drogen:[%d] Materialien:[%d] Team:[%s] Krankheit:[%s] Organisation:[%s] Rank:[%s]",drugs,mats,ttext,dtext,ftext,rtext);
    format(string6, sizeof string6, "-----\t-----\t-----\t-----\t-----\t-----\t-----\t-----\t-----\t-----\t-----\t-----\t-----\t");
    format(string7, sizeof string7, "Spielminuten seit Login: [%d] Spielminuten bis zum PayDay: [%d] Spielminuten Insgesamt: [%d]",PlayerInfo[targetid][pMinutesSinceLogin],(60-PlayerInfo[targetid][pPlayMinutes]),PlayerInfo[targetid][pGesamtMinutes]);
    format(bussgeldpolkata, sizeof bussgeldpolkata, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", string1,string2,string3,string4,string5,string6,string7,string8,string9,string10,string11,string12,string13);
    ShowPlayerDialog(playerid,19,DIALOG_STYLE_MSGBOX,"BußBundesrepublik GDT Reallife",bussgeldpolkata,"OK","Abbruch");


    So hab ich es und es läuft wunderbar.


    MFG

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