Probleme beim Haussystem, diverse Bugs wie z.b. Text3DLabel und Pickup

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 Problem mit dem Haussystem was ich geschrieben habe.
    Es gibt keine Fehlermelduingen aus, einiges funktioniert schlichtweg nicht.


    Das Haussystem ist wie folgt aufgebaut.


    Ich habe folgende Probleme:

    • beim Laden der Häuser werden keine Text3DLabels angezeigt was er eigentlich sollte.
    • Wenn
      man den Server Restartet hat, dann zeigt er ingame nur das LETZTE Haus
      via Pickup an was man mit /addhaus erstellt hat und kann mir nicht
      erklären warum.


    Die Function soll die Pickups und Text3dLabels von Häusern erstellen
    forward genereteHouse(id);
    public genereteHouse(id)
    {
    new hausstring[470], debug2[200];
    if(HausInfo[id][h_created] == 1)
    {
    DestroyPickup(HausInfo[id][h_pickup]);
    Delete3DTextLabel(HausInfo[id][h_text]);
    if(HausInfo[id][h_sperre]==1)
    {
    format(hausstring, sizeof(hausstring), "|=== %s (%i) ===|\n{FF0A00}Diese Immobilie ist gesperrt!", HausInfo[id][h_beschreibung], id);
    HausInfo[id][h_text] = Create3DTextLabel("", 0xFF5A00FF, HausInfo[id][h_x], HausInfo[id][h_y], HausInfo[id][h_z], 15.0, 0, 1);
    } else
    {
    if(HausInfo[id][h_owned]==0)
    {
    format(hausstring, sizeof(hausstring), "|=== %s (%i) ===|\nKaufpreis: %d$\n/hauskaufen", HausInfo[id][h_beschreibung], id, HausInfo[id][h_preis]);
    HausInfo[id][h_text] = Create3DTextLabel("", 0xFF5A00FF, HausInfo[id][h_x], HausInfo[id][h_y], HausInfo[id][h_z], 15.0, 0, 1);
    }
    else
    {
    format(hausstring, sizeof(hausstring), "|=== %s (%i) ===|\nBesitzer: %s \nMietpreis: %d $\nMüll: %d \n/hausmieten", HausInfo[id][h_beschreibung], id, HausInfo[id][h_owner], HausInfo[id][h_mietpreis], HausInfo[id][h_muell]);
    HausInfo[id][h_text] = Create3DTextLabel("", 0xFF5A00FF, HausInfo[id][h_x], HausInfo[id][h_y], HausInfo[id][h_z], 15.0, 0, 1);
    }
    }
    if(HausInfo[id][h_owned]==0)
    {
    HausInfo[id][h_z] = CreatePickup(1273, 1, HausInfo[id][h_x], HausInfo[id][h_y], HausInfo[id][h_z], -1);
    }
    else
    {
    HausInfo[id][h_pickup] = CreatePickup(1272, 1, HausInfo[id][h_x], HausInfo[id][h_y], HausInfo[id][h_z], -1);
    }
    format(debug2, sizeof(debug2), "Haus %i: WURDE GELADEN!", id);
    print(debug2);
    }
    else
    {
    format(debug2, sizeof(debug2), "Haus %i: WURDE NICHT GELADEN!", id);
    print(debug2);
    }
    return 1;
    }


    Die Function um Häuser zu erstellen (Funktioniert meines erachtens)
    forward newHouse(playerid, beschreibung[]);
    public newHouse(playerid, beschreibung[])
    {
    new query[256], test[230];

    format(test, sizeof(test), "Haus gespeichert auf X: %f | Y: %f | Z: %f", TempPlayer[playerid][tpX], TempPlayer[playerid][tpY], TempPlayer[playerid][tpZ]);
    SendClientMessage(playerid, 0xFFD200FF, test);



    format(query, sizeof(query), "INSERT INTO haus (`beschreibung`, `x`, `y`, `z`) VALUES ('%s', '%f', '%f', '%f')", beschreibung, TempPlayer[playerid][tpX], TempPlayer[playerid][tpY], TempPlayer[playerid][tpZ]);
    mysql_query(query);

    new id = mysql_insert_id();
    HausInfo[id][h_created] = 1;
    format(HausInfo[id][h_owner], 32, "");
    format(HausInfo[id][h_beschreibung], 128, "%s", beschreibung);
    HausInfo[id][h_x] = TempPlayer[playerid][tpX];
    HausInfo[id][h_y] = TempPlayer[playerid][tpY];
    HausInfo[id][h_z] = TempPlayer[playerid][tpZ];
    /*format(HausInfo[id][h_x], 100, "%f", TempPlayer[playerid][tpX]);
    format(HausInfo[id][h_y], 100, "%f", TempPlayer[playerid][tpY]);
    format(HausInfo[id][h_z], 100, "%f", TempPlayer[playerid][tpZ]);*/
    HausInfo[id][h_lock] = 1;
    HausInfo[id][h_muell] = 0;
    HausInfo[id][h_mietpreis] = 500;
    HausInfo[id][h_sperre] = 0;



    HausInfo[id][h_interior] = random(9);
    HausInfo[id][h_preis] = HausInnenraum[HausInfo[id][h_interior]][addpreis];
    format(HausInfo[id][h_addtime], 50, "%f", gettime());
    format(HausInfo[id][h_updatetime], 50, "%f", gettime());
    saveHouse(id);
    genereteHouse(id);

    return 1;
    }


    LoadHouse soll wie der name schon sagt die Häuser laden
    stock LoadHouses()
    {
    new query[300], val[128], debug2[300];
    for(new i=0;i<sizeof(HausInfo);i++)
    {
    if(House_exist(i)==0) continue;


    format(query, sizeof(query), "SELECT * FROM `haus` WHERE `id`='%i'",i);
    mysql_query(query);
    mysql_store_result();

    if(mysql_retrieve_row())
    {
    format(debug2, sizeof(debug2), "Haus %i: wurde geladen!", i);
    print(debug2);
    HausInfo[i][h_created] = 1;
    mysql_get_field("besitzer",val); format(HausInfo[i][h_owner], sizeof(val), "%s", val);
    if(!strlen(HausInfo[i][h_owner]))
    {
    HausInfo[i][h_owned] = 0;
    }
    else
    {
    HausInfo[i][h_owned] = 1;
    }
    mysql_get_field("beschreibung",val); HausInfo[i][h_beschreibung] = val;
    mysql_get_field("interior",val); HausInfo[i][h_interior] = strval(val);
    mysql_get_field("hlock",val); HausInfo[i][h_lock] = strval(val);
    mysql_get_field("muell",val); HausInfo[i][h_muell] = strval(val);
    mysql_get_field("sperre",val); HausInfo[i][h_sperre] = strval(val);
    mysql_get_field("h_preis",val); HausInfo[i][h_preis] = strval(val);
    mysql_get_field("h_mietpreis",val); HausInfo[i][h_mietpreis] = strval(val);

    mysql_get_field("addtime",val); HausInfo[i][h_addtime] = strval(val);
    mysql_get_field("updatetime",val); HausInfo[i][h_updatetime] = strval(val);

    mysql_get_field("x",val); HausInfo[i][h_x] = floatstr(val);
    mysql_get_field("y",val); HausInfo[i][h_y] = floatstr(val);
    mysql_get_field("z",val); HausInfo[i][h_z] = floatstr(val);
    genereteHouse(i);
    } else
    {
    format(debug2, sizeof(debug2), "Haus %i: WURDE NICHT GELADEN!", i);
    print(debug2);
    }





    }
    return 1;
    //mysql_GetString2
    }

    Der Adminbefehl um Häuser zu erstellen

    ocmd:addhaus(playerid, params[])
    {
    new bs[200], adminfo[200];
    GetPlayerPos(playerid, TempPlayer[playerid][tpX], TempPlayer[playerid][tpY], TempPlayer[playerid][tpZ]);

    if(isPlayerAnAdmin(playerid, 3))
    {
    if(sscanf(params,"s",bs))
    {
    SendClientMessage(playerid, 0xFEFEFEFF, "{00CC1E}Verwende: {002DFF}/addhaus [Haus Beschreibung]");
    }
    else
    {
    newHouse(playerid, bs);
    format(adminfo, sizeof(adminfo), "Admin %s hat einen Neuen Haus erstellt", GetName(playerid));
    SendMessageAdmin(0xFFD200FF, adminfo);
    }
    }
    else
    {
    SendClientMessage(playerid, 0xCD0900FF, "Du hast nicht die nötigen Rechte!");
    }
    return 1;
    }



    Need help! :)

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

    Einmal editiert, zuletzt von palwal ()

  • Wenn du mit "restarten" wirklich restarten meinst, dann lass das lieber. Da kommt es gerne/öfter mal zu Fehlern.
    Benutze wirklich aus- / einschalten


    samp-server.exe schliessen und wieder öffnen.


    Jeffry :love:

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • HausInfo[id][h_text] = Create3DTextLabel("", 0xFF5A00FF, HausInfo[id][h_x], HausInfo[id][h_y], HausInfo[id][h_z], 15.0, 0, 1);
    Zu


    HausInfo[id][h_text] = Create3DTextLabel(hausstring, 0xFF5A00FF, HausInfo[id][h_x], HausInfo[id][h_y], HausInfo[id][h_z], 15.0, 0, 1);


    Dann solltest du auch die Label sehen können

  • HausInfo[id][h_text] = Create3DTextLabel("", 0xFF5A00FF, HausInfo[id][h_x], HausInfo[id][h_y], HausInfo[id][h_z], 15.0, 0, 1);

    ok 8|



    Edit: Die Text3dLabels werden immer noch net angezeigt- Allerdings wenn ich ein Haus hinzufüge dann erscheid der TextLabel nur eine halbe Sekunde und dann verschwindet er wieder.

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

    Einmal editiert, zuletzt von palwal ()

  • Das ist nur wenn das Haus eine Sperre hat 8|


    Nö, das hast du bei allen drei Möglichkeiten so:
    if(HausInfo[id][h_sperre]==1)
    {
    format(hausstring, sizeof(hausstring), "|=== %s (%i) ===|\n{FF0A00}Diese Immobilie ist gesperrt!", HausInfo[id][h_beschreibung], id);
    HausInfo[id][h_text] = Create3DTextLabel("", 0xFF5A00FF, HausInfo[id][h_x], HausInfo[id][h_y], HausInfo[id][h_z], 15.0, 0, 1);
    }
    else
    {
    if(HausInfo[id][h_owned]==0)
    {
    format(hausstring, sizeof(hausstring), "|=== %s (%i) ===|\nKaufpreis: %d$\n/hauskaufen", HausInfo[id][h_beschreibung], id, HausInfo[id][h_preis]);
    HausInfo[id][h_text] = Create3DTextLabel("", 0xFF5A00FF, HausInfo[id][h_x], HausInfo[id][h_y], HausInfo[id][h_z], 15.0, 0, 1);
    }
    else
    {
    format(hausstring, sizeof(hausstring), "|=== %s (%i) ===|\nBesitzer: %s \nMietpreis: %d $\nMüll: %d \n/hausmieten", HausInfo[id][h_beschreibung], id, HausInfo[id][h_owner], HausInfo[id][h_mietpreis], HausInfo[id][h_muell]);
    HausInfo[id][h_text] = Create3DTextLabel("", 0xFF5A00FF, HausInfo[id][h_x], HausInfo[id][h_y], HausInfo[id][h_z], 15.0, 0, 1);
    }
    }


    Bei den letzten zweien solltest du hausstring anstatt "" schreiben.


    Zwecks des neu Ladens: Ich rate dir ebenfalls den Server komplett neu zu starten und nicht nur /gmx zu machen, da das nicht alles zurücksetzt.

  • Alles abgeändert. schaue über dir mein Beitrag an den hab ich bearbeitet, das Problem besteht immer noch.


    Und warum wird immer nur ein Pickup von den Häüsern angezeigt..und zwar von den letzten??

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Setzt du denn die Standard-Werte für diese beiden Variablen zu -1? Wenn nein, dann kann das nicht klappen, weil:
    DestroyPickup(HausInfo[id][h_pickup]);
    Delete3DTextLabel(HausInfo[id][h_text]);
    Beide Variablen sind zu Beginn 0. Dann erstellst du ein Haus => Label ID ist 0 und Pickup ID ist 0 (jeweils das erste im Server).


    => Nächstes Haus löscht wieder die beiden 0's, also ist das erste Haus wieder weg....und so weiter. So bleibt nur das letzte Haus übrig.



    Entweder du entfernst die beiden Zeilen (macht ja eh keinen Sinn, wenn du es nur beim Server-Start ausführst), oder du setzt vor dem Laden der Häuser die beiden Variablen zu -1:
    for(new i=0;i<sizeof(HausInfo);i++)
    {
    HausInfo[i][h_pickup] = -1;
    HausInfo[i][h_text] = Text3D:-1;
    }


    Dann sollte es klappen.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • for(new i=0;i



    Hab ich gemacht in OnGamemodeInit. Funktioniert trotzdem nicht :/

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • Kommt denn diese Nachricht?
    format(debug2, sizeof(debug2), "Haus %i: WURDE GELADEN!", id);


    Wenn ja: Hast du das mit den Variablen vor das Laden der Häuser gesetzt, oder danach?

    Das wird für jedes Haus angezeigt was existiert. Das mit den Variablen was du gesagt hast habe ich in OnGamemodeInit gemacht

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Du hast meine Fragen nicht beantwortet. :|


    Poste bitte dein gesamten OnGameModeInit und den Server Log mit den ganzen Prints.

    Ne moment es geht jetzt nach dem ich Destrory functions in genereteHouse(id) entfernt habe.


    Allerdings wenn ich ein neues Haus erstelle dann verschwindet der Text3dLabel nach einer halben sekunde beim neuen Haus

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Hast du da irgendwelche Timer am laufen? Wenn du es kurz siehst und es dann weg geht, dann ist da ein Timer der das verursacht, oder eine Funktion dui kurz darauf aufgerufen wird.
    Vielleicht hast du noch irgendwo den selben Fehler gemacht, mit dem löschen der Labels.

  • Nein leider kein Timer und sonst keine functions die, wo die Labels löschen :(


    Edit:
    Ich hab es hinbekommen. Ich Delete vorher die Text3DLabel und lade die Text3DLabel neu und schon funktioniert es. Wenn es ne Ressourcen schonender Variante gibt..bitte sagen :)


    Jedoch habe ich das Problem, das der Kaufpreis bei ALLEN Häussern auf 48$ ist. In der Datenbank ist alles korrekt. ich hab es schon mit %f, %d und %i versucht :/
    Beim Laden:
    mysql_get_field("h_preis",val); format(HausInfo[i][h_preis], 100, "%i", val);//HausInfo[i][h_preis] = strval(val);


    Jeffry und breadfish

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

    Einmal editiert, zuletzt von palwal ()

  • format(HausInfo[i][h_preis], 100, "%i", val);


    Zu
    format(HausInfo[i][h_preis], 100, "%i", strval(val));


    Aber was genau soll das bringen? Das würde nur was bringen, wenn du dort noch mehr als eine Zahl speicherst.


    Der korrekte Weg steht hinten bei dir im Kommentar.


    HausInfo[i][h_preis] = strval(val);

  • Das was du auskomentiwert siehst habe ich auskommentiert da dieses Problem schon stande. Ich versuch dein anderen Vorschlag mal


    Edit: Nein er zeigt immernoch 48$ an :wacko:

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • stock LoadHouses()
    {
    new query[300], val[128], debug2[300];
    for(new i=0;i<sizeof(HausInfo);i++)
    {
    // if(House_exist(i)==0) continue;


    format(query, sizeof(query), "SELECT * FROM `haus` WHERE `id`='%i'",i);
    mysql_query(query);
    mysql_store_result();

    if(mysql_retrieve_row())
    {
    format(debug2, sizeof(debug2), "Haus %i: wurde geladen!", i);
    print(debug2);
    HausInfo[i][h_created] = 1;
    mysql_get_field("besitzer",val); format(HausInfo[i][h_owner], sizeof(val), "%s", val);
    if(!strlen(HausInfo[i][h_owner]))
    {
    HausInfo[i][h_owned] = 0;
    }
    else
    {
    HausInfo[i][h_owned] = 1;
    }
    mysql_get_field("beschreibung",val); HausInfo[i][h_beschreibung] = val;
    mysql_get_field("interior",val); HausInfo[i][h_interior] = strval(val);
    mysql_get_field("hlock",val); HausInfo[i][h_lock] = strval(val);
    mysql_get_field("muell",val); HausInfo[i][h_muell] = strval(val);
    mysql_get_field("sperre",val); HausInfo[i][h_sperre] = strval(val);

    mysql_get_field("h_preis",val); format(HausInfo[i][h_preis], 100, "%i", strval(val));//HausInfo[i][h_preis] = strval(val);
    mysql_get_field("h_mietpreis",val); format(HausInfo[i][h_mietpreis], 100, "%i", strval(val));

    mysql_get_field("addtime",val); HausInfo[i][h_addtime] = strval(val);
    mysql_get_field("updatetime",val); HausInfo[i][h_updatetime] = strval(val);

    mysql_get_field("x",val); HausInfo[i][h_x] = floatstr(val);
    mysql_get_field("y",val); HausInfo[i][h_y] = floatstr(val);
    mysql_get_field("z",val); HausInfo[i][h_z] = floatstr(val);
    genereteHouse(i);
    } else
    {
    format(debug2, sizeof(debug2), "Haus %i: WURDE NICHT GELADEN!", i);
    print(debug2);
    }





    }
    return 1;
    //mysql_GetString2
    }


    Das der komplette Lade-System. Ich hab echt kein Plan wo der Denk-/Scriptfehler ist :/


    __________________________________________________
    Jeffry ich hab wirklich ALLES bzw alle Varianten durchprobiert. Es wird definitiv NUR 48 ausgegeben egal wie hoch der Wert in der Datenbank gespeichert ist.
    Das ganze hab ich auch abgeprint.


    Auszug:
    mysql_get_field("preis",val); HausInfo[i][h_preis] = strval(val);////format(HausInfo[i][h_preis], 100, "%d", val);//
    mysql_get_field("mietpreis",val); format(HausInfo[i][h_mietpreis], 100, "%i", strval(val));

    mysql_get_field("addtime",val); HausInfo[i][h_addtime] = strval(val);
    mysql_get_field("updatetime",val); HausInfo[i][h_updatetime] = strval(val);

    mysql_get_field("x",val); HausInfo[i][h_x] = floatstr(val);
    mysql_get_field("y",val); HausInfo[i][h_y] = floatstr(val);
    mysql_get_field("z",val); HausInfo[i][h_z] = floatstr(val);
    format(debug2, sizeof(debug2), "Haus %i: wurde geladen! Preis %i", i, HausInfo[i][h_preis]);
    print(debug2);

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

    Einmal editiert, zuletzt von palwal ()

  • Wieso benutzt du einmal h_preis und einmal preis?


    Ist denn die Variable ein Array? Wenn nein, dann musst du es so laden, auch beim Mietpreis:
    HausInfo[i][h_preis] = strval(val);


    Format nutzt mal nur bei Strings, der pure Preis bzw Mietpreis ist aber ein Integer.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen