Auslese Fehler

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 versuche über einen Befehl /fraktioncontrol , alle Fraktionsmitglieder aufzulisten (Online & Offline).
    Leider bekomme ich inGame nur die Meldung "Befehl nicht erkannt".


    Darauf hin habe ich prinf gesetzt
    [30/08/2016 23:11:41] DEBUG ID 12[30/08/2016 23:11:41] DEBUG Rows 2[30/08/2016 23:11:41] DEBUG





    Wie man sieht wird der name nicht ausgelesen... ich frage mich nur warum?!
    Ich hoffe das mir jemand weiter helfen kann :)


    Edit: Debug ID und Rows stimmen


    Gruss Sascha

  • Du Benutzt strval um den Namen zu übergeben. strval gibt aber nur den integer wert eines strings zurück. Entweder direkt in die Variable namen lesen lassen oder mit strcat arbeiten.

    Danke , das hat mir sehr weiter geholfen.


    Jetzt bekomme ich den Namen angezeigt.
    Nur jetzt kommt das näste Problem, auf dem Dialog werde 2mal mein Account ausgegeben anstatt eines anderen Namens (Da noch ein test acc in der Selben frak ist).


    Habe mein Code angepasst

    Hoffe das jemand meinen fehler findet :(

  • Problem ist, dass du immer nur die erste Zeile ausliest, da du das Query jedes mal neu sendest.
    Mache es so:
    ocmd:fraktioncontrol(playerid,params[])
    {
    new frakid,irang,str[500];
    frakid = SpielerInfo[playerid][Frakt];
    printf("DEBUG ID %i",frakid);
    mysql_queryf("SELECT Name FROM user WHERE Fraktion='%i'",frakid); //Query absenden
    mysql_store_result(); //Ergebnis Speichern
    while(mysql_retrieve_row()) //Alle Zeilen des Ergebnisses durchlaufen
    {
    //Felder jeder Zeile auslesen
    mysql_fetch_field("Name",data);
    strmid(fraktionsmember,data,0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    mysql_fetch_field("Rang",data);
    irang=strval(data);
    printf("DEBUG Name %s",fraktionsmember);
    if(ReturnPlayerID(fraktionsmember) != INVALID_PLAYER_ID) format(str, sizeof(str),"%s\n Name: %s - Rang: %i ({009F00}Online{FFFFFF})\n",str, fraktionsmember, irang);
    else format(str, sizeof(str), "%s\n Name: %s - Rang: %i ({C70A00}Offline{FFFFFF})\n",str, fraktionsmember,irang);
    printf("DEBUG Ende");
    }
    mysql_free_result();
    ShowPlayerDialog(playerid, DIALOG_SONSTIGES, DIALOG_STYLE_MSGBOX, "{FFFFFF}Mitglieder-Übersicht", str, "Ok","");
    return 1;
    }

  • Problem ist, dass du immer nur die erste Zeile ausliest, da du das Query jedes mal neu sendest.
    Mache es so:
    ocmd:fraktioncontrol(playerid,params[]){ new frakid,irang,str[500]; frakid = SpielerInfo[playerid][Frakt]; printf("DEBUG ID %i",frakid); mysql_queryf("SELECT Name FROM user WHERE Fraktion='%i'",frakid); //Query absenden mysql_store_result(); //Ergebnis Speichern while(mysql_retrieve_row()) //Alle Zeilen des Ergebnisses durchlaufen { //Felder jeder Zeile auslesen mysql_fetch_field("Name",data); strmid(fraktionsmember,data,0,MAX_PLAYER_NAME,MAX_PLAYER_NAME); mysql_fetch_field("Rang",data); irang=strval(data); printf("DEBUG Name %s",fraktionsmember); if(ReturnPlayerID(fraktionsmember) != INVALID_PLAYER_ID) format(str, sizeof(str),"%s\n Name: %s - Rang: %i ({009F00}Online{FFFFFF})\n",str, fraktionsmember, irang); else format(str, sizeof(str), "%s\n Name: %s - Rang: %i ({C70A00}Offline{FFFFFF})\n",str, fraktionsmember,irang); printf("DEBUG Ende"); } mysql_free_result(); ShowPlayerDialog(playerid, DIALOG_SONSTIGES, DIALOG_STYLE_MSGBOX, "{FFFFFF}Mitglieder-Übersicht", str, "Ok",""); return 1;}


    Danke für deinen Lösungsvorschlag.
    Nette Funktion mit mysql_retrieve_row() , aber ohne das ich es ausprobiert habe , meine ich das mein Plugin was ich nutze diese funktion nicht aufweißt ( Strickenkid 2.1.1).