MySQL PMs auslesen und im Dialog (LIST ausgeben)

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
  • Servus.


    Und zwar hab ich es bereits soweit, dass die PMs gespeichert werden nur arbeite ich erst seit kurzem mit MySQL
    und wollte also fragen wie ich die PMs auslese und im DIALOG_STYLE_LIST ausgebe? Desweiteren sollte man, wenn man diese auswählt
    auch die PM angezeigt bekommen (DIALOG_STYLE_MSGBOX)


    Wäre super wenn ihr mir helfen könntet! :)


    Grüße

  • Du ließt die Anzahl der PM's aus und lässt es durch eine Schleife laufen.
    Bsp:
    new dialogstring[];
    for(new i = 0; i < GRÖßE; i++)
    {
    format(dialogstring,sizeof(dialogstring),"%s\n", Nachricht[i]);
    }


    'Nachricht' ist in diesem Fall die Array, welche alle Nachrichten speichern soll.
    Du gehst somit alle Nachrichten (Nachricht[0], Nachricht[1],..) durch.
    (Ist eine Gedankenstütze, weil ich nicht weißt, wie du was gemacht hast, sollte aber so gehen ;))


    L.G.

  • Hey danke schonmal für die Antwort aber irgendwie kann ich damit grad nichts anfangen, liegt vllt auch daran, dass ich grad von der Arbeit komme xD


    Es soll später so aussehen im Dialog:


    Absender: %s - Nachricht: %s
    Und dann nochmal im Dialog MsgBox


    Absender: %s\n\nNachricht: %s

  • heyhooo: Das kann nicht funktionieren, so würde nur die letzte Nachricht angezeigt werden. Innerhalb der for-Schleife wird der Platz für die Zeichenkette immer wieder durch format überschrieben. Strins o. format("%s%s\n",string,newstring); würden eine funktionstüchtige Alternative bieten.


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • Servus.


    Es soll ja auch gesplittet werden, soweit hab ichs mal versucht aber es möchte nicht wirklich :/



    dcmd_readpm(playerid,params[])
    {
    #pragma unused params
    new Query[128],Name[MAX_PLAYER_NAME],Sender[24],Text[128];
    GetPlayerName(playerid, Name, sizeof(Name));
    format(Query, sizeof(Query), "SELECT * FROM `pms` WHERE `Name` = '%s'", Name);
    mysql_query(Query);
    mysql_store_result();
    if(!mysql_num_rows())
    {
    mysql_free_result();
    SendClientMessage(playerid, COLOR_RED,"Keine Nachrichten vorhanden.");
    return 0;
    }
    if(mysql_num_rows())
    {
    new string[1024],result[128],string1[256];
    mysql_fetch_field_row(result,"Name");
    SetPVarString(playerid, "Name", result);
    strdel(result,0,sizeof(result));

    mysql_fetch_field_row(result,"Text");
    SetPVarString(playerid, "Text",result);
    strdel(result,0,sizeof(result));
    format(string1, sizeof(string1),"Sender: %s - Nachricht: %s\n",GetPVarString(playerid,"Name",Sender,24),GetPVarString(playerid,"Text",Text,128));
    strcat(string, string1, sizeof(string));
    ShowPlayerDialog(playerid, DIALOG_READPM, DIALOG_STYLE_LIST,".:: Private Message System ::.",string,"Okay","");
    }
    return 1;
    }

  • Der entscheidene Fehler bei dir ist das du nur 1 Datensatz auslesen kannst, daher benötigst du entweder
    mysql_fetch_row_format(string[], const delimiter[], connectionHandle)


    oder


    mysql_retrieve_row(connectionHandle)


    um zur nächsten zeile zu springen und diese auszulesen.


    Daher kannst du wählen ob du das ganze mit mysql_fetch_row_format ausließt und danach mit sscanf splittest oder nix veränderst und einfach nut mysql_retrieve_row(connectionHandle) hinzufügst.
    Beachte das beide funktionen in einer while -schleife vorhanden sind.

    while(mysql_retrieve_row()){
    code...
    }




    while(mysql_fetch_row_format(result)){
    sscanf(result,"p<|>s[24]s[128]",zwei strings noch in dennen die wert temporär gespeichert werden);
    }
    sscanf plugin hierzu benötigt

  • Geil :> Nurnoch ein Problem, dass ich mir grad nicht erklären kann? xD



    if(mysql_num_rows())
    {
    new string[1024],string1[256];


    while(mysql_retrieve_row()){
    mysql_fetch_field_row(result,"Name");
    SetPVarString(playerid, "Name", result);
    strdel(result,0,sizeof(result));

    mysql_fetch_field_row(result,"Text");
    SetPVarString(playerid, "Text",result);
    strdel(result,0,sizeof(result));

    format(string1, sizeof(string1),"Sender: %s - Nachricht: %s\n",GetPVarString(playerid,"Name",Sender,24),GetPVarString(playerid,"Text",Text,128));
    strcat(string, string1, sizeof(string));
    ShowPlayerDialog(playerid, DIALOG_READPM, DIALOG_STYLE_LIST,".:: Private Message System ::.",string,"Okay","");
    }
    }



  • if(mysql_num_rows())
    {
    new string[1024],string1[256],name[24],text[128];


    while(mysql_retrieve_row()){
    mysql_fetch_field_row(result,"Name");
    format(name,sizeof name, "%s",result);
    mysql_fetch_field_row(result,"Text");
    format(text,sizeof text, "%s",result);

    format(string1, sizeof(string1),"Sender: %s - Nachricht: %s\n",name,text);
    strcat(string, string1, sizeof(string));
    ShowPlayerDialog(playerid, DIALOG_READPM, DIALOG_STYLE_LIST,".:: Private Message System ::.",string,"Okay","");
    }
    }

    Sollte so glaube ich funktionieren.
    Hatte auch schon Probleme mit SetPVarString, ist besser es in diesem Fall über normale Variablen zu machen.

  • Hey, bisher hats gut funktioniert :)


    Jedoch wollte ich die PM nun noch in einer MSG BOX auslesen, das funzt allerdings nicht so gut..^^



    if(dialogid == DIALOG_READPM)
    {
    for(new id; id<PMZahl[playerid]; id++)
    {
    new string[128], Name[MAX_PLAYER_NAME],Query[128];
    GetPlayerName(playerid, Name, sizeof(Name));
    format(string, sizeof(string),"dialogid == %d",id);
    if(strval(string))
    {
    format(Query, sizeof(Query), "SELECT * FROM `pms` WHERE `Name` = '%s'", Name);
    mysql_query(Query);
    mysql_store_result();
    new stringx[1024],string1[256],name[24],text[128],result[200];


    while(mysql_retrieve_row()){
    while(mysql_fetch_row_format(result)){
    mysql_fetch_field_row(result,"Name");
    format(name,sizeof name, "%s",result);
    mysql_fetch_field_row(result,"Text");
    format(text,sizeof text, "%s",result);
    format(string1, sizeof(string1),"Nachricht von %s:\n\nText: %s",name,text);
    strcat(stringx, string1, sizeof(stringx));
    ShowPlayerDialog(playerid, DIALOG_READPM2, DIALOG_STYLE_MSGBOX,".:: Private Message System ::.",string,"Zurück","Löschen");
    break;
    }
    break;
    }
    }
    }
    }


    //E: Editiert
    //E: Weitere Frage


    Bei einer anderen Baustelle hört das Script auf zu arbeiten, bei diesem Befehl:

    new geld = lottogeld /= gewinner;


    Woran liegt das? :/

    2 Mal editiert, zuletzt von SLiC3R ()