Beiträge von Jeffry

    Der Besitzer muss in der Datenbank ein VARCHAR sein und das Objekt und Label musst du nicht speichern.


    Anschließend musst du per Query die Daten beim Server-Start laden und auslesen.
    Schau dir dazu mal dieses Tutorial an: [ SCRIPTING ] [jTuT] Fraktions-Fahrzeug-System mit MySQL R39-2
    Das behandelt zwar Fahrzeuge, aber das Laden und Speichern kannst du in etwa übernehmen. Versuche dich einfach mal daran.

    @RayZerHD:
    Versuche es so:
    mysql_function_query(dbhandle, "SELECT name, fraktion FROM users WHERE rank = 6;", true, "OnLeaderOnline", "d", playerid);


    Ganz unten im Gamemode (das FraktionsName müsst ihr anpassen):
    forward OnLeaderOnline(playerid);
    public OnLeaderOnline(playerid)
    {
    new rows = cache_get_row_count(dbhandle);
    if(!rows) return SendClientMessage(playerid, 0xFF0000FF, "Error: Etwas ist schief gegangen.");
    new str[512], name[32], frak;
    for(new i = 0; i < rows; i++)
    {
    cache_get_field_content(i, "name", name, dbhandle);
    frak = cache_get_field_content_int(i, "fraktion", dbhandle);
    if(ReturnPlayerID(name) != INVALID_PLAYER_ID) format(str, sizeof(str), "%s{FFFFFF}%s [%s] - {00FF00}Online\n", str, name, FraktionsName[frak]);
    else format(str, sizeof(str), "%s{FFFFFF}%s [%s] - {FF0000}Offline\n", str, name, FraktionsName[frak]);
    }
    ShowPlayerDialog(playerid, 4521, DIALOG_STYLE_MSGBOX, "OnlineList", str, "Ok");
    return 1;
    }


    @xXBastianXx:
    Mache bitte einen eigenen Thread auf. Das ist zu viel Durcheinander.

    Ahh, dann sind da zwei Labels aufeinander.


    Mach zuerst mal folgendes:
    UpdateHouseLabel();
    zu:
    UpdateHouseLabel(i);


    Und:
    stock UpdateHouseLabel(i)
    {
    new str[128];
    if(!HouseInfo[i][hOwned]) format(str, sizeof str, "%s\nZum Verkauf\nPreis: %d€", HouseInfo[i][hDescr], HouseInfo[i][hPrice]);
    else if(HouseInfo[i][hOwned] && HouseInfo[i][hRentable] == 0) format(str, sizeof str, "%s\nBesitzer: %s",HouseInfo[i][hDescr], HouseInfo[i][hOwner]);
    else if(HouseInfo[i][hOwned] && HouseInfo[i][hRentable] == 1) format(str, sizeof str, "%s\nBesitzer: %s\nMiete: %d$\n/mieten zum Mieten",HouseInfo[i][hDescr], HouseInfo[i][hOwner], HouseInfo[i][hRent]);
    UpdateDynamic3DTextLabelText(HouseInfo[i][hLabel], COLOR_HOUSELABEL, str);
    return 1;
    }


    Dan updatest du nicht immer alle Häuser, sondern nur das eine.


    Dann poste bitte den Code, mit dem du die Häuser und Labels erstellst, und die Daten dazu.

    Dann müssen wir die Namen zwischenspeichern.
    Das müsstest du dann so schreiben:
    forward OnLeaderOnline(playerid);
    public OnLeaderOnline(playerid)
    {
    new rows = cache_get_row_count();
    if(!rows) return SendClientMessage(playerid, 0xFF0000FF, "Error: Etwas ist schief gegangen.");
    new str[512], name[MAX_FRAKS][32], frak;
    for(new i = 0; i < rows; i++)
    {
    frak = cache_get_field_content_int(i, "fraktion");
    cache_get_field_content(i, "name", name[frak]);
    }
    for(new i = 0; i < MAX_FRAKS; i++)
    {
    if(!strlen(FraktionsName[i])) format(str, sizeof(str), "%s{FFFFFF}-Offen- [-Offen-] - {00FF00}Online\n", str); //Fraktion existiert nicht (?)
    else if(!strlen(name[i])) format(str, sizeof(str), "%s{FFFFFF}-Offen- [%s] - {00FF00}Online\n", str, FraktionsName[i]); //Fraktion hat keinen Leader
    else if(ReturnPlayerID(name[i]) != INVALID_PLAYER_ID) format(str, sizeof(str), "%s{FFFFFF}%s [%s] - {00FF00}Online\n", str, name[i], FraktionsName[i]); //Leader ist online
    else format(str, sizeof(str), "%s{FFFFFF}%s [%s] - {FF0000}Offline\n", str, name[i], FraktionsName[i]); //Leader ist offline
    }
    ShowPlayerDialog(playerid, 4521, DIALOG_STYLE_MSGBOX, "OnlineList", str, "Ok");
    return 1;
    }


    Beachte, dass du deine Anpassungen hier wieder machen musst.

    Das geht dann nicht. Dort muss das rein, was den Name der Fraktion anhand der Fraktions-ID ausliest.
    Hast du da schon etwas? Poste gegebenenfalls mal einen Code, der den Fraktionsnamen einer Fraktion anzeigt, damit man dir zeigen kann, wie du es machen musst.

    sscanf(row, "p<|>sd", name, frak);
    Zu
    sscanf(row, "p<|>sd", accounts, frak);


    Die ReturnPlayerID Funktion steht auf der ersten Seite in diesem Thread, die benötigst du.

    Das wäre dann auch kein wirklicher Name, sondern ein Nickname.


    Das spielt ja auch keine Rolle, IsLetterString fragt ab ob der String nur aus validen Buchstaben besteht. Wofür man das letztendlich verwendet kann sehr unterschiedlich sein. Beispiele sind wie gesagt Namen, Stadtnamen, irgendwelche Essen, etc...


    Eine Abfrage IsString würde keinen Sinn machen, da ein String nach seiner Definition jedes Zeichen beinhalten kann, das als Text dargestellt werden kann.

    Zum R5:
    Im Befehl:
    mysql_query("SELECT name, fraktion FROM users WHERE rank = 6;");
    mysql_store_result();
    new rows = mysql_num_rows();
    if(!rows) return SendClientMessage(playerid, 0xFF0000FF, "Error: Etwas ist schief gegangen.");
    new str[512], row[64], name[32], frak;
    while(mysql_fetch_row(row, "|"))
    {
    sscanf(row, "p<|>sd", name, frak);
    if(ReturnPlayerID(name) != INVALID_PLAYER_ID) format(str, sizeof(str), "%s{FFFFFF}%d [%s] - {00FF00}Online\n", str, name, FraktionsName[frak]);
    else format(str, sizeof(str), "%s{FFFFFF}%d [%s] - {FF0000}Offline\n", str, name, FraktionsName[frak]);
    }
    ShowPlayerDialog(playerid, 4521, DIALOG_STYLE_MSGBOX, "OnlineList", str, "Ok");
    return 1;


    Zum R31: Da sind die Funktionen etwas anders, da die Parameter vertauscht sind.
    Wenn du mir die Include hier einfügst, dann kann ich dir das umstellen, weil auswendig weiß ich die Änderungen nicht.