Problem mit Carlist-Befehl

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


    ich habe mir einen /carlist-Befehl erbastelt, welcher alle Fahrzeuge des bestimmten Spielers aus der Datenbank ausliest.
    Leider bekomme ich im Spiel immer einen leeren Dialog angezeigt.


    Folgender Code:
    ocmd:carlist(playerid,params[])
    {
    new q[256],str[256],all[512];
    GetPlayerName(playerid,sendername,sizeof sendername);
    format(q,sizeof q,"SELECT * FROM `Playercars` WHERE `Owner` = '%s'",sendername);
    mysql_query(q);
    mysql_store_result();
    while(mysql_fetch_row(str)) {
    new c,st,md,np[20];
    for(new i;i<MaxVehikel;i++) {
    if(!pCarInfo[i][cCreated])continue;
    c=i;
    }
    sscanf(str,"e<p<|>dd{ds[24]ffff}d{dddfdddddddddddddd}s[20]{fd}>",pvcdbID[code=c],st,md,np);
    format(all,sizeof all,"%s{FFFFFF}%s (%s)\n",all,PlayerVehicle[md],(st) ? ("{FF0000}Defekt{FFFFFF}") : ("{00FF00}Nicht defekt{FFFFFF}"));
    }
    if(strlen(all) > 0) {
    ShowPlayerDialog(playerid,DLG_CARLIST,DIALOG_STYLE_LIST,"Fahrzeugliste",all,"Auswählen","Schließen");
    } else {
    SendClientMessage(playerid,COLOR_LIGHTRED,"Du besitzt keine Fahrzeuge!");
    }
    mysql_free_result();
    return 1;
    }
    Es stehen 2 Fahrzeuge auf meinen Namen in der Datenbank.
    Woran liegt es, dass es nicht klappt? Jeffry:


    lg
    Deagle

  • Es macht wenig Sinn wenn du das gesamte Zeug aus der Datenbank lädst, aber gar nicht brauchst.


    Schreibe es so:
    ocmd:carlist(playerid,params[])
    {
    new q[256],str[256],all[512];
    GetPlayerName(playerid,sendername,sizeof sendername);
    format(q,sizeof(q),"SELECT modelID, status, numberplate FROM `Playercars` WHERE `Owner` = '%s'",sendername); //modelID, status, numberplate <- anpassen auf deine Spalten
    mysql_query(q);
    mysql_store_result();
    while(mysql_fetch_row(str))
    {
    new st,md,np[20];
    sscanf(str,"p<|>dds[20]",st,md,np);
    format(all,sizeof(all),"%s{FFFFFF}%s (%s)\n",all,PlayerVehicle[md],(st) ? ("{FF0000}Defekt{FFFFFF}") : ("{00FF00}Nicht defekt{FFFFFF}"));
    }
    if(strlen(all) > 0) ShowPlayerDialog(playerid,DLG_CARLIST,DIALOG_STYLE_LIST,"Fahrzeugliste",all,"Auswählen","Schließen");
    else SendClientMessage(playerid,COLOR_LIGHTRED,"Du besitzt keine Fahrzeuge!");
    mysql_free_result();
    return 1;
    }


    Nicht vergessen die Spaltennamen anzupassen.

  • Es macht wenig Sinn wenn du das gesamte Zeug aus der Datenbank lädst, aber gar nicht brauchst.


    ocmd:carlist(playerid,params[])
    {
    new q[256],str[256],all[512];
    GetPlayerName(playerid,sendername,sizeof sendername);
    format(q,sizeof q,"SELECT `ID`,`Status`,`Model` FROM `Playercars` WHERE `Owner` = '%s'",sendername);
    mysql_query(q);
    mysql_store_result();
    while(mysql_fetch_row(str)) {
    new c,st,md;
    for(new i;i<MAX_LISTITEMS;i++) {
    c=i;
    }
    sscanf(str,"e<p<|>ddd>",pvcdbID[code=c],st,md);
    format(all,sizeof all,"%s{FFFFFF}%s (%s)\n",all,PlayerVehicle[md],(st) ? ("{FF0000}Defekt{FFFFFF}") : ("{00FF00}Nicht defekt{FFFFFF}"));
    }
    mysql_free_result();
    if(strlen(all) > 0) {
    ShowPlayerDialog(playerid,DLG_CARLIST,DIALOG_STYLE_LIST,"Fahrzeugliste",all,"Auswählen","Schließen");
    } else {
    SendClientMessage(playerid,COLOR_LIGHTRED,"Du besitzt keine Fahrzeuge!");
    }
    return 1;
    }
    Es wird immer folgendes Ausgegeben:

    Code
    Landstalker (Nicht defekt)

    ..
    Das wird aus der Datenbank gezogen:

    SQL
    [19:16:15] CMySQLHandler::StoreResult() - Result was stored.
    [19:16:15] >> mysql_fetch_row_format( Connection handle: 1 )
    [19:16:15] CMySQLHandler::FetchRow() - Return: 1|0|411
    [19:16:15] >> mysql_fetch_row_format( Connection handle: 1 )
    [19:16:15] CMySQLHandler::FetchRow() - Return: 2|1|411
    [19:16:15] >> mysql_fetch_row_format( Connection handle: 1 )
    [19:16:15] >> mysql_free_result( Connection handle: 1 )
    [19:16:15] CMySQLHandler::FreeResult() - Result was successfully free'd.


    Was ist fail?

  • ocmd:carlist(playerid,params[])
    {
    new q[256],str[256],all[512];
    GetPlayerName(playerid,sendername,sizeof sendername);
    format(q,sizeof q,"SELECT `ID`,`Status`,`Model` FROM `Playercars` WHERE `Owner` = '%s'",sendername);
    mysql_query(q);
    mysql_store_result();
    new c = -1;
    while(mysql_fetch_row(str))
    {
    c++;
    new st,md;
    sscanf(str,"p<|>ddd",pvcdbID[code=c],st,md);
    format(all,sizeof all,"%s{FFFFFF}%s (%s)\n",all,PlayerVehicle[md-400],(st) ? ("{FF0000}Defekt{FFFFFF}") : ("{00FF00}Nicht defekt{FFFFFF}"));
    }
    mysql_free_result();
    if(strlen(all) > 0)
    {
    ShowPlayerDialog(playerid,DLG_CARLIST,DIALOG_STYLE_LIST,"Fahrzeugliste",all,"Auswählen","Schließen");
    }
    else
    {
    SendClientMessage(playerid,COLOR_LIGHTRED,"Du besitzt keine Fahrzeuge!");
    }
    return 1;
    }


    Die Schleife war sinnlos, sscanf war falsch und bei PlayerVehicle musste noch -400 hin, da du die Model ID ohne den Abzug von 400 in der Datenbank hast.