Beiträge von Jeffry

    mysql_format(mysql_connection, querry, sizeof(querry), "SELECT * FROM 'users' WHERE 'username' = '%s'", player_name);
    zu:
    mysql_format(mysql_connection, querry, sizeof(querry), "SELECT * FROM users WHERE `username` = '%s'", player_name);

    Was steht im Server Log, wenn du es so schreibst?
    updateHouse(id)
    {
    new string[128];
    printf("id: %d", id);
    printf("Lösche Pickup: %d", HouseInfo[id][hPickup]);
    if(HouseInfo[id][hPickup] != -1)
    {
    DestroyPickup(HouseInfo[id][hPickup]);
    }
    printf("Lösche Label: %d", _:HouseInfo[id][hText]);
    if(HouseInfo[id][hText] != Text3D:-1)
    {
    Delete3DTextLabel(HouseInfo[id][hText]);
    }
    if(!strlen(HouseInfo[id][hBesitzer]))
    {
    HouseInfo[id][hPickup] = CreatePickup(1273,1,HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z],-1);
    format(string,sizeof(string),"Zum Verkauf\nPreis: %i$\nKauflevel: %i\n/buyhouse",HouseInfo[id][hPreis],HouseInfo[id][hKauflevel]);
    HouseInfo[id][hText] = Create3DTextLabel(string, Weis, HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z], 10, 0, 1);
    }
    else
    {
    HouseInfo[id][hPickup] = CreatePickup(1272,1,HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z],-1);
    format(string,sizeof(string),"Besitzer: %s\nWert: %i$\nKauflevel: %i\n/enter",HouseInfo[id][hBesitzer],HouseInfo[id][hPreis],HouseInfo[id][hKauflevel]);
    HouseInfo[id][hText] = Create3DTextLabel(string, Weis, HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z], 10, 0, 1);
    }
    printf("Pickup erstellt: %d", HouseInfo[id][hPickup]);
    printf("Label erstellt: %d", _:HouseInfo[id][hText]);
    return 1;
    }

    Hast du das hier in die erste Zeile von OnGameModeInit eingefügt?
    for(new i=0; i<sizeof(HouseInfo); i++)
    {
    HouseInfo[i][hPickup] = -1;
    HouseInfo[i][hText] = Text3D:-1;
    }

    Kannst du zeigen, an was du das erkennst? Hast du einen print gesetzt? Wenn ja, kannst du das mal im Code zeigen, und das was ausgegeben wird?

    if(HouseInfo[id][hPickup])
    {
    DestroyPickup(HouseInfo[id][hPickup]);
    }
    if(HouseInfo[id][hText])
    {
    Delete3DTextLabel(HouseInfo[id][hText]);
    }


    zu:
    if(HouseInfo[id][hPickup] != -1)
    {
    DestroyPickup(HouseInfo[id][hPickup]);
    }
    if(HouseInfo[id][hText] != Text3D:-1)
    {
    Delete3DTextLabel(HouseInfo[id][hText]);
    }


    Und ganz oben bei OnGameModeInit:
    for(new i=0; i<sizeof(HouseInfo); i++)
    {
    HouseInfo[i][hPickup] = -1;
    HouseInfo[i][hText] = Text3D:-1;
    }

    Da haben wir doch den Fehler schon.


    Nimm den root Benutzer ohne Passwort:
    #define db_host "127.0.0.1"
    #define db_user "root"
    #define db_pass ""
    #define db_db "DATENBANKNAME"


    Das ist in 99% aller Fälle standardmäßig so eingestellt.
    Dein user "samp" wird nicht die richtigen Berechtigungen haben, das ist auf localhost (dein Rechner) so eingestellt, standardmäßig zumindest.
    Deshalb benutze, den root - User ohne Passwort, der hat ALLE Berechtigungen. Dem kannst du später auch, je nach Client, ein Passwort geben.

    Debugge es so:
    public OnHousesLoad()
    {
    printf("OnHousesLoad aufgerufen.");
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    printf("num_rows: %d", num_rows);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    printf("i: %d", i);
    new id = getFreeHouseID();
    printf("id: %d", id);
    HouseInfo[id][h_x] = cache_get_field_content_float(i,"h_x",dbhandle);
    HouseInfo[id][h_y] = cache_get_field_content_float(i,"h_y",dbhandle);
    HouseInfo[id][h_z] = cache_get_field_content_float(i,"h_z",dbhandle);
    HouseInfo[id][ih_x] = cache_get_field_content_float(i,"ih_x",dbhandle);
    HouseInfo[id][ih_y] = cache_get_field_content_float(i,"ih_y",dbhandle);
    HouseInfo[id][ih_z] = cache_get_field_content_float(i,"ih_z",dbhandle);
    HouseInfo[id][hInterior] = cache_get_field_content_int(i,"h_interior",dbhandle);
    printf("Koordinaten: %f/%f/%f", HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z]);
    new tmp_name[MAX_PLAYER_NAME];
    cache_get_field_content(i,"besitzer",tmp_name,dbhandle);
    strmid(HouseInfo[id][hBesitzer],tmp_name,0,sizeof(tmp_name),sizeof(tmp_name));
    HouseInfo[id][hID] = cache_get_field_content_int(i,"id",dbhandle);
    new string[128];
    printf("Besitzer: %s", HouseInfo[id][hBesitzer]);
    if(!strlen(HouseInfo[id][hBesitzer]))
    {
    HouseInfo[id][hPickup] = CreatePickup(1273,1,HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z],-1);
    format(string,sizeof(string),"Zum Verkauf\nPreis: %i$\n/buyhouse",HouseInfo[id][hPreis]);
    HouseInfo[id][hText] = Create3DTextLabel(string, Weis, HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z], 10, 0, 1);
    }
    else
    {
    HouseInfo[id][hPickup] = CreatePickup(1239,1,HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z],-1);
    format(string,sizeof(string),"Besitzer: %s\nWert: %i$\n/enter",HouseInfo[id][hBesitzer],HouseInfo[id][hPreis]);
    HouseInfo[id][hText] = Create3DTextLabel(string, Weis, HouseInfo[id][h_x],HouseInfo[id][h_y],HouseInfo[id][h_z], 10, 0, 1);
    }
    printf("string: %s", string);
    }
    printf("Fertig.");
    return 1;
    }


    Dann poste was im Server Log steht, wenn du die Häuser laden lässt.
    Gegebenenfalls auch gleich das, was im MySQL Log steht.

    Nein, das ist nicht egal. Wenn das Array nur eine Größe von 24 Zeichen hat (wovon eines das EOS Zeichen ist), dann kannst du nur 23 Zeichen dort rein packen (mehr geht nicht).
    Du kannst zwar mehr eingeben, es wird aber nicht mehr in der Variable drin stehen.


    Daher kann strlen davon auch nicht größer als 23 werden, somit ist >= 24 nie wahr.


    Ändere das Rangname[24] zu Rangname[25], und in sscanf das [24] zu [25], dann sollte es klappen.



    EDIT: (Post unten)
    Equ: Gerne ;)