Haus wird überschrieben /createhouse

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
  • Guten Tag,


    wenn Ich /createhouse eingebe, denn wird zwar ein neues Haus erstellt (Pickup & 3D-Text), jedoch verschwindet das Alte, das Ich davor erstellt habe.
    Komisch ist es, dass in der Datenbank beide Häuser zu finden sind.
    Also wird das Haus überschrieben, der Pickup und der 3D-Text zerstört und dafür das neue erstellt.
    Wo habe Ich einen Fehler gemacht?



    ocmd:createhouse(playerid, params[])
    {
    if(!IsPlayerAnAdmin(playerid, 4))return 0;
    new Float: Create_X, Float: Create_Y, Float:Create_Z;
    GetPlayerPos(playerid, Create_X, Create_Y, Create_Z);

    new id=GetFreeHouseID();
    hInfo[id][HausPickup_X] = Create_X;
    hInfo[id][HausPickup_Y] = Create_Y;
    hInfo[id][HausPickup_Z] = Create_Z;
    hInfo[id][HausEnter_X] = 235.508994;
    hInfo[id][HausEnter_Y] = 1189.169897;
    hInfo[id][HausEnter_Z] = 1080.339966;
    hInfo[id][Haus_Interior] = 3;
    format(hInfo[id][Haus_Besitzer], MAX_PLAYER_NAME, "");
    hInfo[id][Haus_Preis] = 500;
    UpdateHouse(id);

    //In Datenbank abspeichern
    new query[256];
    format(query, sizeof(query), "INSERT INTO haus (HausPickupX, HausPickupY, HausPickupZ, HausEnterX, HausEnterY, HausEnterZ, HausInterior, HausPreis) VALUES ('%f', '%f', '%f', '%f', '%f', '%f', '%i', '%i')",
    Create_X, Create_Y, Create_Z, hInfo[id][HausEnter_X], hInfo[id][HausEnter_Y], hInfo[id][HausEnter_Z], hInfo[id][Haus_Interior], hInfo[id][Haus_Preis]);
    mysql_function_query(dbhandle, query, true, "OnHouseCreated", "i", id);
    return 1;
    }


    stock GetFreeHouseID()
    {
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(hInfo[i][Haus_ID]==0)return 1;
    }
    return 0;
    }


    public OnHouseCreated(id)
    {
    hInfo[id][Haus_ID] = cache_insert_id();
    }


    public UpdateHouse(id)
    {
    new string[128];
    if(hInfo[id][Haus_Pickup])
    {
    DestroyPickup(hInfo[id][Haus_Pickup]);
    }
    if(hInfo[id][Haus_Text])
    {
    Delete3DTextLabel(hInfo[id][Haus_Text]);
    }
    if(!strlen(hInfo[id][Haus_Besitzer]))
    {
    hInfo[id][Haus_Pickup] = CreatePickup(1273, 1, hInfo[id][HausPickup_X], hInfo[id][HausPickup_Y], hInfo[id][HausPickup_Z], -1);
    format(string, sizeof(string), "Dieses Haus steht zum Verkauf!\nKosten: %i$", hInfo[id][Haus_Preis]);
    hInfo[id][Haus_Text] = Create3DTextLabel(string, COLOR_RED, hInfo[id][HausPickup_X], hInfo[id][HausPickup_Y], hInfo[id][HausPickup_Z], 10, 0, 1);
    }
    else
    {
    hInfo[id][Haus_Pickup] = CreatePickup(1272, 1, hInfo[id][HausPickup_X], hInfo[id][HausPickup_Y], hInfo[id][HausPickup_Z], -1);
    format(string, sizeof(string), "Besitzer: %s", hInfo[id][Haus_Besitzer]);
    hInfo[id][Haus_Text] = Create3DTextLabel(string, COLOR_RED, hInfo[id][HausPickup_X], hInfo[id][HausPickup_Y], hInfo[id][HausPickup_Z], 10, 0, 1);
    }
    return 1;
    }

  • Da ich mal vermute, das du das ganze gerade aus einem Thread von mir kopiert hast verweise ich dich mal auch dort hin



    /createhaus Befehl funktioniert nicht Richtig.

  • Um mal kurz nachzufragen, weil das ja fast der gleiche Code ist, und ich zudem den Code bestimmt einmal im Monat hier sehe:


    Habt ihr den aus einem Tutorial, oder aus einem fertigen Gamemode?

    Der Code stammt aus einem Tutorial von MrMonat



    // Edit falscher Link


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Einmal editiert, zuletzt von robbi2304 ()

  • Code
    stock GetFreeHouseID()
    {
        for(new i=0; i<sizeof(hInfo); i++)
        {
            if(hInfo[i][Haus_ID]==0)return 1;
        }
        return 0;
    }

    Die Funktion ist ja an sich auch Quatsch, du willst ja den nächsten freien Index von deinem Array haben und nicht herrausfinden, ob einer frei ist oder nicht. return 1 musst du ersetzen mit return i.