MySQL | Freundesliste (Integer+ String)

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 leute ich habe aktuell eine Denkblockade.
    Ich möchte es machen das mann 500 Freunde in seiner liste haben kann, wenn online = grün falls nicht rot
    So aber bei MySQL ist es doch normal so man die Spalten immer wd neu einfügen muss. (Neue erstellen)
    Mein Aktueller ist so:
    ocmd:fl(playerid, params[])
    {
    new usage[50], string[128], str[8], str2[25];
    if(sscanf(params, "s", usage))return SendClientMessage(playerid, Hellrot, "FEHLER: {FFFFFF}/fl [Show/Add/Del]");
    #define cmp(%0,%1,%2) strcmp(%0,%1,%2)
    if(cmp(usage, "Show", true) && cmp(usage, "Add", true) && cmp(usage, "Del", true))return SendClientMessage(playerid, Hellrot, "FEHLER: {FFFFFF}Ungültige Auswahl. (Show/Add/Del)");
    if(!cmp(usage, "Show", true))
    {
    for(new i;i<MAX_PLAYERS;i++)
    {
    str2 = "{A50000}";
    format(str, sizeof(str), "Name%i", i);
    if(IsPlayerConnected(i) && PlayerInfo[i][pEingeloggt] == true)
    {
    if(!cmp(mysql_GetString("userfriends", str, "Name", GetName(playerid)), GetName(i), true))str2 = "{2DFF00}"; else str2 = "{A50000}";
    }
    format(string, sizeof(string), "%s%s\n%s", str2, mysql_GetString("userfriends", str, "Name", GetName(playerid)), string);
    }
    ShowPlayerDialog(playerid, DIALOG_FREUNDE, DIALOG_STYLE_LIST, "Freundesliste", string, "Schließen", "");
    }
    return 1;
    }


    Wie man sieht ist der Inhalt str mit Name%i gefüllt, und da ist der Punkt :/
    Kann mir jemand Tipps geben das fertig zu stellen ?
    Falls jemand das Freundeslisten System von Nova eSports kennt :)

  • Welches MySQL Plugin nutzt du ?


    Als kleinen Tipp deine Tabelle bräuchte eigentlich nur 2 Spalten falls du den Username des Freundes speichern willst als auch den Besitzer der Liste.


    Mit MySQL ist das alles leicht lösbar da hast du den richtigen ansatz gewählt :D SQLite wäre auch einer gewesen .

  • Hier bitte ein kleiner Anfang:



    enum {
    DIALOG_FRL_OPTIONS = 1,
    DIALOG_FRL_DELETE,
    DIALOG_FRL_SHOW,
    DIALOG_FRL_ADD,
    }


    ocmd:fl(playerid, params[])
    {
    return ShowPlayerDialog(playerid, DIALOG_FRL_OPTIONS, DIALOG_STYLE_LIST, "Freundesliste", "Anschauen\nHinzufügen\nLöschen", "Auswählen", "Schließen");
    }


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    switch(dialogid){
    if(!response)return 1;
    case DIALOG_FRL_OPTIONS:{
    switch(listitem){
    case 0:return ShowPlayerDialog(playerid, DIALOG_FRL_ADD, DIALOG_STYLE_INPUT, "Freundesliste", "Gebe hier den Namen des Freundes ein", "Hinzufügen", "Zurück");
    case 1:return CreateDialog(playerid,DIALOG_FRL_SHOW);
    case 2:return CreateDialog(playerid,DIALOG_FRL_DELETE);
    }
    } case DIALOG_FRL_DELETE:{
    if(!response)return
    new query[128];
    mysql_format(sqlHandler, query,"DELETE FROM `table` WHERE `Owner` = '%e' AND `Friend` = '%e' LIMIT 1;",PlayerName(playerid),inputtext); // Limit 1 bedeutet es wird nur 1 Datensatz gelöscht wird genutzt um ein query zu optimieren %e mysql_format escaped den string automatisch
    mysql_query(query);
    return CreateDialog(playerid, DIALOG_FRL_DELETE);
    } case DIALOG_FRL_SHOW:{
    if(!response)return ShowPlayerDialog(playerid, DIALOG_FRL_OPTIONS, DIALOG_STYLE_LIST, "Freundesliste", "Anschauen\nHinzufügen\nLöschen", "Auswählen", "Schließen");
    } case DIALOG_FRL_ADD:{
    if(!response)return ShowPlayerDialog(playerid, DIALOG_FRL_OPTIONS, DIALOG_STYLE_LIST, "Freundesliste", "Anschauen\nHinzufügen\nLöschen", "Auswählen", "Schließen");
    }
    }
    return 1;
    }


    stock CreateDialog(playerid, dialogid){
    new query[64],text[1024];
    mysql_format(sqlHandler, query,"SELECT `Friend` FROM `table` WHERE `Owner` = '%e';",PlayerName(playerid));
    mysql_query(query);
    mysql_store_result();
    while(mysql_fetch_row_format(query)){ // da wir nur einen Eintrag auslesen bekommt der auch den den Delimiter | , springt auch jeweils zum nächsten Eintrag beim auslesen
    strcat(query,"\n");
    strcat(text,query);
    }
    mysql_free_result();
    return ShowPlayerDialog(playerid, DIALOG_FRL_DELETE, DIALOG_STYLE_LIST, "Freundesliste", text, "Auswählen", "Zurück");
    }