Beiträge von Jeffry

    Deshalb sollst du einen aktuellen Versuch machen, ob es nach wie vor auftritt, nach einem Neustart des Servers.


    Wenn es wieder auftritt, poste bitte den aktuellen Log sowie einen Screenshot aus der Datenbank.

    Das Problem hier ist, dass du die Zeilen Zeile für Zeile in das Array schreibst.
    Fehlt dazwischen eine, dann wird das ignoriert, was dazu führt, dass sich die IDs verschieben/überschreiben.


    Du musst die ID aus der Zeile (im Code nachfolgend "row") lesen und mit dieser ID (im Code nachfolgend "hid") in das Array schreiben.


    Das sieht dann so aus:
    case _SQL_HAUS_LOAD:
    {
    cache_get_row_count(rows);
    new row = 0, hid;
    if(rows)
    {
    while(row<rows)
    {
    cache_get_value_name(row,"id",result);
    hid = strval(result);

    HausInfo[hid][hauscreatet] = 1;
    cache_get_value_name(row,"haus_besitzer",result); strmid(HausInfo[hid][haus_besitzer],result,0,strlen(result),24);
    cache_get_value_name(row,"haus_Owned",result); HausInfo[hid][haus_Owned] = strval(result);
    cache_get_value_name(row,"haus_innenraum",result); HausInfo[hid][haus_innenraum] = strval(result);
    cache_get_value_name(row,"haus_miete",result); HausInfo[hid][haus_miete] = strval(result);
    cache_get_value_name(row,"haus_beschreibung",result); strmid(HausInfo[hid][haus_beschreibung],result,0,strlen(result),150);
    cache_get_value_name(row,"haus_locked",result); HausInfo[hid][haus_locked] = strval(result);
    cache_get_value_name(row,"haus_slots",result); HausInfo[hid][haus_slots] = strval(result);
    cache_get_value_name(row,"haus_eingemitetenzaehler",result); HausInfo[hid][haus_eingemitetenzaehler] = strval(result);
    cache_get_value_name(row,"haus_x",result); HausInfo[hid][haus_x] = floatstr(result);
    cache_get_value_name(row,"haus_y",result); HausInfo[hid][haus_y] = floatstr(result);
    cache_get_value_name(row,"haus_z",result); HausInfo[hid][haus_z] = floatstr(result);
    cache_get_value_name(row,"haus_preis",result); HausInfo[hid][haus_preis] = strval(result);
    cache_get_value_name(row,"haus_level",result); HausInfo[hid][haus_level] = strval(result);
    cache_get_value_name(row,"haus_geldkasse",result); HausInfo[hid][haus_geldkasse] = strval(result);
    cache_get_value_name(row,"haus_Opium",result); HausInfo[hid][haus_Opium] = strval(result);
    cache_get_value_name(row,"haus_c4",result); HausInfo[hid][haus_c4] = strval(result);
    cache_get_value_name(row,"haus_Ganja",result); HausInfo[hid][haus_Ganja] = strval(result);
    cache_get_value_name(row,"haus_Kokain",result); HausInfo[hid][haus_Kokain] = strval(result);
    cache_get_value_name(row,"haus_materials",result); HausInfo[hid][haus_materials] = strval(result);
    cache_get_value_name(row,"haus_heal",result); HausInfo[hid][haus_heal] = strval(result);
    cache_get_value_name(row,"haus_armour",result); HausInfo[hid][haus_armour] = strval(result);
    cache_get_value_name(row,"haus_hatheal",result); HausInfo[hid][haus_hatheal] = strval(result);
    cache_get_value_name(row,"haus_hatarmour",result); HausInfo[hid][haus_hatarmour] = strval(result);
    cache_get_value_name(row,"hausgundumper",result); HausInfo[hid][haus_waffenschrank] = strval(result);
    new savestring[20];
    for(new i=0;i<13;i++)
    {
    format(savestring,sizeof(savestring),"hausgun%i",i);
    cache_get_value_name(row,savestring,result);
    HausInfo[hid][haus_gun][i] = strval(result);
    format(savestring,sizeof(savestring),"hausgunammo%i",i);
    cache_get_value_name(row,savestring,result);
    HausInfo[hid][haus_gunammo][i] = strval(result);
    }
    cache_get_value_name(row,"hausmull",result);
    HausInfo[hid][hausmull] = strval(result);
    cache_get_value_name(row,"haus_msg",result);
    strmid(HausInfo[hid][haus_msg],result,0,strlen(result),150);
    HausLabel[hid] = CreateDynamic3DTextLabel("LOAD",HAUSCOLOR,HausInfo[hid][haus_x],HausInfo[hid][haus_y],HausInfo[hid][haus_z] +1,20.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,0);
    CreateDynamicPickup(19198,1,Homestore[HausInfo[hid][haus_innenraum]][Hx],Homestore[HausInfo[hid][haus_innenraum]][Hy],Homestore[HausInfo[hid][haus_innenraum]][Hz],-1,-1);
    if(HausInfo[hid][haus_Owned] == 1)
    {
    HausInfo[hid][haus_pickup] = CreateDynamicPickup(OWNEDHAUSPICKUP,1,HausInfo[hid][haus_x],HausInfo[hid][haus_y],HausInfo[hid][haus_z],0);
    mysql_tquery(MySqlConnection,"SELECT * FROM accounts","OnQueryFinish","siii","SELECT * FROM accounts",_SQL_HAUSTIME_CHECK,hid,_:MySqlConnection);
    }
    else if(HausInfo[hid][haus_Owned] == 0)
    {
    HausInfo[hid][haus_pickup] = CreateDynamicPickup(NOTOWNEDHAUSPICKUP,1,HausInfo[hid][haus_x],HausInfo[hid][haus_y],HausInfo[hid][haus_z],0);
    }
    UpdateHausLabel(hid,HausInfo[hid][haus_Owned]+1);//funktion 1 wenn das haus ohne besitzer ist,funktion 2 wenn das biz mit besitzer ist
    row++;
    }
    }
    printf("- Häuser geladen %i/%i -",rows,MAX_HAUS);
    print("- Aktivität der Hausbesitzer kontrolliert -");
    return 1;
    }

    (My)SQL zu nutzen würde da natürlich am meisten Sinn machen.


    Wenn du es aber ohne SQL machen willst, dann empfehle ich es aus Performancegründen so:
    new numberFile[32];
    format(numberFile, 32, "PhoneNumbers/%d.ini", number);
    if(dini_Exists(numberFile))
    {
    return SendClientMessage(playerid, COLOR_GREY, "Fehler: Diese Nummer wird bereits genutzt.");
    }
    else
    {
    dini_Create(numberFile);
    //Nummer vergeben
    }


    Sprich, du erstellst für jede existierende Nummer (sobald sie existiert) eine separate Datei im Ordner "PhoneNumbers".


    In diese Datei kannst du dann auch Informationen zu dieser Nummer packen, zum Beispiel den Besitzer, das Guthaben, etc.
    Den Besitzer würde ich auf jeden Fall eintragen, somit hast du immer die direkte Verbindung.
    In die User-File des Besitzers schreibst du dann die Nummer rein, so kommst du immer von User zu Nummer und von Nummer zu User.