Fehler im Haussystem

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
  • Hallo,
    ich habe heute an meinem Haussystem weiter gemacht und bin eigentlich im groben schon fertig. Allerdings ist das Problem jetzt, dass wenn ich mit mit /createhouse ein Haus erstelle das alles funktioniert allerdings wenn ich dann noch eins erstelle dann wird das Pickup und der 3DText gelöscht und immer so weiter. Wenn ich den Server dann neu starte, wird immer das zuletzt erstellte haus angezeigt.
    Code:

    ocmd:createhouse(playerid,params[])
    {
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    if(PlayerInfo[playerid][pAdminlevel] <= 1337)return SendClientMessage(playerid,Grau,"Du bist nicht befugt, diesen Befehl zu nutzen!");
    new Float:xc,Float:yc,Float:zc,tmp_preis,tmp_kauflevel;
    GetPlayerPos(playerid,xc,yc,zc);
    if(sscanf(params,"ii",tmp_preis,tmp_kauflevel))return SendClientMessage(playerid,Grau,"Benutze: /createhouse [Preis] [Kauflevel]");
    new id = getFreeHouseID();
    HouseInfo[id][h_x] = xc;
    HouseInfo[id][h_y] = yc;
    HouseInfo[id][h_z] = zc;
    HouseInfo[id][ih_x] = 0.0;
    HouseInfo[id][ih_y] = 0.0;
    HouseInfo[id][ih_z] = 0.0;
    HouseInfo[id][hInterior] = 0;
    strmid(HouseInfo[id][hBesitzer],"",0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
    HouseInfo[id][hPreis] = tmp_preis;
    HouseInfo[id][hKauflevel] = tmp_kauflevel;
    updateHouse(id);
    //In Datenbank abspeichern
    new query[256];
    format(query,sizeof(query),"INSERT INTO haus (h_x, h_y, h_z, ih_x, ih_y, ih_z, h_interior, preis, kauflevel) VALUES ('%f', '%f', '%f', '0.0', '0.0', '0.0', '0', '%i', '%i')",xc, yc, zc, HouseInfo[id][hPreis], HouseInfo[id][hKauflevel]);
    mysql_function_query(dbhandle,query,true,"OnHouseCreated","i",id);
    return 1;
    }



    getFreeHouseID()
    {
    for(new i=0; i<sizeof(HouseInfo); i++)
    {
    if(HouseInfo[i][hID] == 0) return 1;
    }
    return 1;
    }


    hatPlayerHaus(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    for(new i=0; i<sizeof(HouseInfo); i++)
    {
    if(!HouseInfo[i][hID]) continue;
    if(!strlen(HouseInfo[i][hBesitzer])) continue;
    if(!strcmp(name,HouseInfo[i][hBesitzer],true)) return 1;
    }
    return 0;
    }


    updateHouse(id)
    {
    new string[128];
    if(HouseInfo[id][hPickup])
    {
    DestroyPickup(HouseInfo[id][hPickup]);
    }
    if(HouseInfo[id][hText])
    {
    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);
    }
    return 1;
    }


    saveHouse(id)
    {
    new query[128];
    format(query,sizeof(query),"UPDATE haus SET besitzer='%s', preis'%i', kauflevel'%i' WHERE id='%i'",HouseInfo[id][hBesitzer],HouseInfo[id][hPreis],HouseInfo[id][hKauflevel],HouseInfo[id][hID]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    public OnHousesCreated(id)
    {
    HouseInfo[id][hID] = cache_insert_id();
    return 1;
    }


    public OnHousesLoad()
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(!num_rows)return 1;
    for(new i=0; i<num_rows; i++)
    {
    new id = getFreeHouseID();
    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);
    HouseInfo[id][hPreis] = cache_get_field_content_int(i,"preis",dbhandle);
    HouseInfo[id][hKauflevel] = cache_get_field_content_int(i,"kauflevel",dbhandle);
    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);
    updateHouse(id);
    }
    return 1;
    }

  • 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;
    }


  • Das geht immer noch nicht immer noch das selbe Problem.

  • gemacht.

    updateHouse(id)
    {
    new string[128];
    if(HouseInfo[id][hPickup] != -1)
    {
    DestroyPickup(HouseInfo[id][hPickup]);
    }
    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);
    }
    return 1;
    }

  • 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;
    }

  • mysql_log:

    Code
    [11:27:05] [ERROR] CMySQLConnection::Connect - (error #2003) Can't connect to MySQL server on '127.0.0.1' (10061)
    [11:27:06] [ERROR] CMySQLConnection::Connect - (error #2003) Can't connect to MySQL server on '127.0.0.1' (10061)
    [11:27:06] [ERROR] CMySQLConnection::Connect - (error #2003) Can't connect to MySQL server on '127.0.0.1' (10061)


    server_log:

  • getFreeHouseID()
    {
    for(new i=0; i<sizeof(HouseInfo); i++)
    {
    if(HouseInfo[i][hID] == 0) return 1;
    }
    return 1;
    }
    zu:
    getFreeHouseID()
    {
    for(new i=0; i<sizeof(HouseInfo); i++)
    {
    if(HouseInfo[i][hID] == 0) return i;
    }
    return -1;
    }


    new id = getFreeHouseID();
    zu:
    new id = getFreeHouseID();
    if(id == -1) return 1;

  • Danke, das funktioniert jetzt allerdings speichert er nicht den Besitzer an.

    saveHouse(id)
    {
    new query[128];
    format(query,sizeof(query),"UPDATE haus SET besitzer='%s', preis'%i', kauflevel'%i' WHERE id='%i'",HouseInfo[id][hBesitzer],HouseInfo[id][hPreis],HouseInfo[id][hKauflevel],HouseInfo[id][hID]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }

  • jetzt allerdings speichert er nicht den Besitzer an.


    Sorry für die späte Antwort, ich habe momentan relativ wenig Zeit.


    saveHouse(id)
    {
    new query[128];
    format(query,sizeof(query),"UPDATE haus SET besitzer='%s', preis'%i', kauflevel'%i' WHERE id='%i'",HouseInfo[id][hBesitzer],HouseInfo[id][hPreis],HouseInfo[id][hKauflevel],HouseInfo[id][hID]);
    printf("saveHouse-Query: %s", query);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }
    Lass es dir mal so printen, was dann im Server Log steht.

  • server_log:


    mysql_log:

  • Zum Fehler:
    server_log:


    Zum Mysql, wie meinst du das genau das verstehe ich nicht so richtig.
    mysql_log:

  • Guten Abend TheTutoFreak,



    Du hast in deiner Query 2x das = Zeichen vergessen. Also preis'%i' und nicht preis='%i'


    saveHouse(id)
    {
    new query[128];
    format(query,sizeof(query),"UPDATE haus SET besitzer='%s', preis='%i', kauflevel='%i' WHERE id='%i'",HouseInfo[id][hBesitzer],HouseInfo[id][hPreis],HouseInfo[id][hKauflevel],HouseInfo[id][hID]);
    printf("saveHouse-Query: %s", query);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }