HILFE bei dynamischen MySQL Dialogen

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
  • Moin,


    ich habe da mal eine knifflige Angelegenheit:


    Undzwar möchte ich einen auf MySQL basierenden dynamischen Dialog (DIALOG_STYLE_LIST) erstellen, welcher je nach Listitem an
    den in der MySQL-DB definierten Usern eine Nachricht sendet.


    Da das ziemlich verwirrend klingt erkläre ich euch was ich habe und was genau ich brauche:


    Ich habe ein dynamisches Info System, welches so funktioniert, dass man eine Information "abfertigen" kann, welche dann in der
    DB "infos" gespeichert wird.
    Gespeichert werden:
    - der Autor der Information (SpielerName)
    - der Infotext


    Ich bin derzeit soweit, dass alle Infos die geschrieben wurden in dem Dialog dynamisch aufgelistet werden


    Code:

    new query[256],liste[1000];
    format(query, sizeof(query), "SELECT infoNr, infotext, infoautor from `infos`");
    mysql_query(query);
    mysql_store_result();
    if(mysql_num_rows() < 1)
    {
    ShowPlayerDialog(playerid,DIALOG_NOFUNCTION,DIALOG_STYLE_MSGBOX,"Fehler!","Es konnten keine Infos gefunden werden!","O.K.","");
    mysql_free_result();
    return 1;
    }
    while(mysql_retrieve_row())
    {
    new sname[25],sautor[64], mid, tmp[126], i = 0;
    mysql_get_field("inftext", sname);
    mysql_get_field("infoautor", sautor);
    mysql_get_field("infoNr", query); mid = strval(query);
    format(tmp, sizeof(tmp), "{FFFFFF}Info: {00FF00}%s {FFFFFF}| autor: {FF0000}%s\n", sname,sautor);
    aList[playerid][i] = mid;
    strins(liste, tmp, strlen(liste));
    i++;
    }
    mysql_free_result();
    ShowPlayerDialog(playerid, DIALOG_info_SUCHEN, DIALOG_STYLE_LIST, "Info Liste", liste, "Anfragen", "Beenden");


    Nun möchte ich, dass wenn ich z.B. auf das 2. Listitem klicke wo ein Infotext ist, den der User "Max_Mustermann" geschrieben hat,
    dieser eine Nachricht (ClientMessage) gesendet bekomt.


    Die einzige Sache, bei der ich nicht mehr weiter weiß ist:


    ,,Wie kann ich bei einem Listitem den Spielernamen rausfinden bzw. das ganze via. MySQL lösen?"

    Meine Werke

  • Sind die Spieler immer online, oder kann er auch offline sein - wenn offline, dann keine Nachricht?
    Der Spielername ist der Autor?

    Also die Information wird im Dialog immer Angezeigt, egal ob der Autor online ist oder nicht.
    Und bevor der Autor (Spielername) eine nachricht bekommt würde ich natürlich abfragen ob der Spieler auch online ist (IsPlayerConnected).

    Meine Werke

  • Dann kannst du diese Funktion nutzen:
    stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
    {
    new l_name[MAX_PLAYER_NAME];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
    {
    if(!strcmp(l_name,l_PlayerName, true)) return i;
    }
    }
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
    {
    if(strfind(l_name,l_PlayerName,true)!=-1) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }


    Dazu dann:
    aList[playerid][i] = mid;
    zu:
    aList[playerid][i] = ReturnPlayerID(sautor);
    Ich nutze dieses, da ich keinen Sinn in "mid" erkennen kann (strval vom Query?).


    Und dann kannst du beim Dialog dann die ID so auslesen:
    new pID = aList[playerid][listitem];
    if(IsPlayerConnected(pID))
    {
    //...
    }