/createhaus Befehl funktioniert nicht Richtig.

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 liebe Leute,


    von meinem Haussystem funktioniert der Befehl nicht Richtig.



    ocmd:createhaus(playerid, params[])
    {
    if(!isAdmin(playerid, 3))return
    SendClientMessage(playerid, COLOR_RED, "Dein Adminrang ist zu niedrig.");
    new Float:xc, Float:yc, Float:zc;
    GetPlayerPos(playerid, xc, yc, zc);



    new id=getFreeHausID();
    hInfo[id][h_x]=xc;
    hInfo[id][h_y]=yc;
    hInfo[id][h_z]=zc;
    hInfo[id][ih_x]=266.5044;
    hInfo[id][ih_y]=304.7202;
    hInfo[id][ih_z]=999.1484;
    hInfo[id][h_interior]=2;
    strmid(hInfo[id][h_besitzer], "", 0, MAX_PLAYER_NAME, MAX_PLAYER_NAME);
    hInfo[id][h_preis]=1;
    //In Datenbank abspeichern
    new query[512];
    format(query, sizeof(query),"INSERT INTO haus (h_x, h_y, h_z, ih_x, ih_y, ih_z, h_interior, h_preis) VALUES ('%f', '%f', '%f', '0.0', '0.0', '0.0', '0', '1')",xc, yc, zc);
    mysql_pquery(handle, query,"OnHausCreated", "i", id);
    updateHaus(id);
    print(query);
    return 1;
    }


    public OnHausCreated(id){ hInfo[id][h_id]=cache_insert_id(); return 1;}



    updateHaus(id)
    {
    new string[128];
    if(hInfo[id][h_pickup])
    {
    Delete3DTextLabel(hInfo[id][h_text]);
    }
    if(hInfo[id][h_text])
    {
    DestroyPickup(hInfo[id][h_pickup]);
    }
    if(!strlen(hInfo[id][h_besitzer]))
    {
    DestroyPickup(hInfo[id][h_pickup]);
    Delete3DTextLabel(hInfo[id][h_text]);
    hInfo[id][h_pickup]=CreatePickup(1273, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,sizeof(string), "Zum Verkauf\nKosten: %i$\n/hauskaufen", hInfo[id][h_preis]);
    hInfo[id][h_text]=Create3DTextLabel(string, COLOR_RED, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
    }
    else
    {
    DestroyPickup(hInfo[id][h_pickup]);
    Delete3DTextLabel(hInfo[id][h_text]);
    hInfo[id][h_pickup]=CreatePickup(1239, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,sizeof(string), "Besitzer: %s\n/enter", hInfo[id][h_besitzer]);
    hInfo[id][h_text]=Create3DTextLabel(string, COLOR_BUSBLUE, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
    }
    return 1;
    }

    Sobald ich /createhaus eingebe wird das Haus erstellt. Erstelle ich dann aber noch eines, verschwindet das erste Haus und das neue wird erstellt.
    Alle beiden Häuser werden Richtig in die Datenbank eingetragen.


    Welchen Fehler habe ich gemacht ?

  • Das liegt daran, dass das Pickup und das Label die ID 0 haben, und somit immer das vorherige gelöscht wird.
    Schreibe es so:
    updateHaus(id)
    {
    new string[128];
    if(hInfo[id][h_pickup] != -1)
    {
    DestroyPickup(hInfo[id][h_pickup]);
    }
    if(hInfo[id][h_text] != Text3D:-1)
    {
    Delete3DTextLabel(hInfo[id][h_text]);
    }
    if(!strlen(hInfo[id][h_besitzer]))
    {
    hInfo[id][h_pickup]=CreatePickup(1273, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,sizeof(string), "Zum Verkauf\nKosten: %i$\n/hauskaufen", hInfo[id][h_preis]);
    hInfo[id][h_text]=Create3DTextLabel(string, COLOR_RED, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
    }
    else
    {
    hInfo[id][h_pickup]=CreatePickup(1239, 1, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], -1);
    format(string,sizeof(string), "Besitzer: %s\n/enter", hInfo[id][h_besitzer]);
    hInfo[id][h_text]=Create3DTextLabel(string, COLOR_BUSBLUE, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
    }
    return 1;
    }


    Füge bei OnGameModeInit das ein:
    for(new i = 0; i < sizeof(hInfo); i++)
    {
    hInfo[i][h_pickup] = -1;
    hInfo[i][h_text] = Text3D:-1;
    }


    Und setze die Variablen auch genau so zurück, wenn das Haus gelöscht wird, also überall dort, wo DestroyPickup und Delete3DTextLabel verwendet wird (außer in updateHaus, da es dort ja direkt danach neu erstellt wird).