Beiträge von Jeffry

    Ah, sorry, ich hab das Prinzip verwechselt. Es muss nicht 0 sein.


    stock LoadMieter(id) {
    new query[250], check, field[200];
    if(HausInfo[id][hDB] == 0) return 1;
    format(query, sizeof(query), "SELECT * FROM hausmieten WHERE DB = '%i'", HausInfo[id][hDB]);
    mysql_query(query);
    mysql_store_result();
    for(new x=0;x<sizeof(HausMieten);x++) {
    if(HausMieten[x][hmDB] != 0) continue;
    if(mysql_retrieve_row()) {
    check++;
    mysql_fetch_field_row(field,"Player");format(HausMieten[x][hmPlayer], 100, "%s", field);
    HausMieten[x][hmDB] = HausInfo[id][hDB];
    }
    }
    mysql_free_result();
    return 1;
    }


    So sollte es passen.

    Weil er erst durch alle Drive-Ins gehen muss, und prüfen muss, ob du an einem der Drive-Ins bist.
    Erst wenn du an keinem bist, kann die Meldung ausgegeben werden.


    => Es kann erst gesagt werden, dass du an keinem Drive-In bist, wenn alle geprüft sind, und das ist nach der Schleife.

    public OnAccountLoad(playerid)
    {
    SpielerInfo[playerid][pSkin] = cache_get_field_content_int(0, "Skin", Handle);
    SetPlayerSkin(playerid, SpielerInfo[playerid][pSkin]);
    SendClientMessage(playerid, COLOR_GREEN, "Du hast dich Erfolgreich Eingeloggt!");
    return 1;
    }


    Und bei OnPlayerSpawn:
    SetPlayerSkin(playerid, SpielerInfo[playerid][pSkin]);

    Mit der gleichen Schleife:
    for(new i = 0; i < sizeof(bsn); i++)
    {
    printf("%f %f %f",bsn[i][bsn_x], bsn[i][bsn_y], bsn[i][bsn_z]);
    if(IsPlayerInRangeOfPoint(playerid,2.5,bsn[i][bsn_x], bsn[i][bsn_y], bsn[i][bsn_z]))
    {
    switch(listitem)
    {
    case 0:
    {
    //Zeile 1
    //Mach was hier
    }
    case 1:
    {
    //Zeile 2
    //Mach was hier
    }
    }
    return 1;
    }
    }


    Oder du speicherst die BSN ID beim Befehl in einer Spielervariable, das kommt aufs gleiche raus.

    tock LoadMieter(id) {
    new query[250], check, field[200];
    if(HausInfo[id][hDB] == 0) return 1;
    format(query, sizeof(query), "SELECT * FROM hausmieten WHERE DB = '%i'", HausInfo[id][hDB]);
    mysql_query(query);
    mysql_store_result();
    for(new x=0;x<sizeof(HausMieten);x++) {
    if(HausMieten[x][hmDB] == 0) continue;
    if(mysql_retrieve_row()) {
    check++;
    mysql_fetch_field_row(field,"Player");format(HausMieten[x][hmPlayer], 100, "%s", field);
    HausMieten[x][hmDB] = HausInfo[id][hDB];
    }
    }
    mysql_free_result();
    return 1;
    }


    Versuche es so.

    ocmd:drivein(playerid)
    {
    for(new i = 0; i < sizeof(bsn); i++)
    {
    printf("%f %f %f",bsn[i][bsn_x], bsn[i][bsn_y], bsn[i][bsn_z]);
    if(IsPlayerInRangeOfPoint(playerid,2.5,bsn[i][bsn_x], bsn[i][bsn_y], bsn[i][bsn_z]))
    {
    new string [128];
    format(string,sizeof(string),"Menü\tPreis\tLeben\n\%s\t%d\t%d\n\%s\t%d\t%d",bsn[i][Menu1],bsn[i][Geldmenu1],bsn[i][Lebenmenu1],bsn[i][Menu2],bsn[i][Geldmenu2],bsn[i][Lebenmenu2]);
    ShowPlayerDialog(playerid,DIALOG_DRIVEIN,DIALOG_STYLE_TABLIST_HEADERS,"Drivein Menü",string,"Bestellen","Abbrechen");
    return 1;
    }
    }
    return SendClientMessage(playerid,ROT,"Du bist an Keinem Drivein!");
    }

    Es gibt ja hauptsächlich diese drei Methoden:
    for(new i = 0; i < MAX_PLAYERS; i++)
    for(new i = 0; i < GetMaxPlayers(); i++)
    for(new i = 0; i <= GetPlayerPoolSize(); i++)


    wobei man letztere beide eher so schreiben sollte:
    for(new i = 0, j = GetMaxPlayers(); i < j; i++)
    for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)


    MAX_PLAYERS:
    Das ist die Zahl, die in der a_samp.inc angegeben wurde. Die sollte der Anzahl der Slots entsprechen.


    GetMaxPlayers:
    Anzahl der Slots, die in der server.cfg stehen. Sollte MAX_PLAYERS entsprechen.


    => Daher sind Variante 1 & 2 eigentlich gleich, nur dass GetMaxPlayers etwas mehr (minimal) auf die Ressourcen geht.


    GetPlayerPoolSize:
    Das wurde mit 0.3.7 hinzugefügt und gibt dir die höchste Spieler-ID aus, die gerade online ist. Das kann, je nach leeren Slots, einige Schleifendurchläufe sparen. Von der Performance ist es daher die beste Variante.

    1)
    Ich gehe davon aus das ist, weil du zu viele Queries sendest = Lag. Connecte die NPCs nach dem Laden der Häuser, gegebenenfalls mit einem Timer.


    2)
    for(new x=0;x<sizeof(HausInfo);x++)
    {
    printf("x: %d | hDB: %d", x, HausInfo[x][hDB]);
    if(HausInfo[x][hDB] == 0) continue;
    printf("Mieter: %d", IsMieter(playerid, HausInfo[x][hDB]));
    if(IsMieter(playerid, HausInfo[x][hDB]))
    {
    mcheck++;
    printf("mcheck: %d | lock: %d", mcheck, HausInfo[x][hALock]);
    if(HausInfo[x][hALock] == 1)
    {
    format(mstr, sizeof(mstr), "[Mietwohnung %i] {FF0000}Administrativ gesperrt", mcheck);
    SendClientMessage(playerid, 0xFFFA00FF, mstr);
    print(mstr);
    }
    else
    {
    format(mstr, sizeof(mstr), "[Mietwohnung %i] -%i", mcheck, HausInfo[x][hMietPreis]);
    SendClientMessage(playerid, 0xFFFA00FF, mstr);
    print(mstr);
    sendMiete(playerid, HausInfo[x][hDB]);
    print("Miete gesendet.");
    }
    }
    }

    Was steht so im Server Log?


    3 & 4)
    Nutze die neuste Plugin Version, das R39-3.

    Lass dir nach
    mysql_format(MySQL,query,sizeof query,"SELECT * FROM `"#SERVERTAG"_whitelist` WHERE `Name` = '%s'",SpielerInfo[playerid][pName]);
    mal das query ausgeben, ob das passt:
    printf("query: %s", query);


    Was wird geprintet?