Häuser kaufen funktioniert nicht

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 kann keine Häuser kaufen und weiß leider nicht mehr weiter.
    Mag mir wer helfen ? @Jeffry




    ocmd:hauskaufen(playerid, params[])
    {
    if(hatPlayerHaus(playerid))return
    SendClientMessage(playerid, COLOR_RED, "Du hast bereits ein Haus.");
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(!hInfo[i][h_id])continue;
    if(!IsPlayerInRangeOfPoint(playerid,5.0,hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]))continue;
    if(!strlen(hInfo[i][h_besitzer]))
    {
    if(GetPlayerMoney(playerid)<hInfo[i][h_preis])return
    SendClientMessage(playerid, COLOR_RED, "Du hast nicht genügend Geld.");
    GivePlayerMoney(playerid, -hInfo[i][h_preis]);
    strmid(hInfo[i][h_besitzer], getPlayerName(playerid), 0, MAX_PLAYER_NAME, MAX_PLAYER_NAME);
    updateHaus(i);
    saveHaus(i);
    return 1;
    }
    return SendClientMessage(playerid, COLOR_RED,"Das Haus steht nicht zum Verkauf.");
    }
    return 1;
    }



    getPlayerName(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    return name;
    }



    hatPlayerHaus(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(!hInfo[i][h_id])continue;
    if(!strlen(hInfo[i][h_besitzer]))continue;
    }
    return 0;
    }



    saveHaus(id)
    {
    new query[128];
    format(query, sizeof(query), "UPDATE haus SET besitzer='%s', h_preis='%i' WHERE id='%i'", hInfo[id][h_besitzer], hInfo[id][h_preis], hInfo[id][h_id]);
    mysql_function_query(handle, query, false, "", "");
    return 1;
    }
    updateHaus(id)
    {
    new string[128];
    if(hInfo[id][h_pickup])
    {
    DestroyPickup(hInfo[id][h_pickup]);
    }
    if(hInfo[id][h_text])
    {
    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_BLUE, hInfo[id][h_x], hInfo[id][h_y], hInfo[id][h_z], 10, 0, 1);
    }
    return 1;
    }

    Einmal editiert, zuletzt von robbi2304 ()

  • In debuggen bin ich nicht gut krieg das nie hin xD


    Liegt im jedenfall an diesem Befehl:




    ocmd:hauskaufen(playerid,params[])
    {



    if(hatPlayerHaus(playerid))return
    SendClientMessage(playerid, COLOR_RED, "Du hast kein Haus");
    for(new i=0; i<sizeof(hInfo); i++)
    {
    if(!hInfo[i][h_id])continue;
    if(!IsPlayerInRangeOfPoint(playerid,5,hInfo[i][h_x],hInfo[i][h_y], hInfo[i][h_z]))return SendClientMessage(playerid,COLOR_RED, "Nix");
    if(!strlen(hInfo[i][h_besitzer]))
    { if(GetPlayerMoney(playerid)<hInfo[i][h_preis])return
    SendClientMessage(playerid,COLOR_RED, "Du hast nicht genug Geld");
    GivePlayerMoney(playerid, -hInfo[i][h_preis]);
    strmid(hInfo[i][h_besitzer],getPlayerName(playerid), 0, MAX_PLAYER_NAME, MAX_PLAYER_NAME);
    updateHaus(i);
    saveHaus(i);
    return 1;
    }
    return SendClientMessage(playerid,COLOR_RED," Das Haus steht nicht zum Verkauf");
    }
    return 1;
    }

  • danke hab den fehler gefunden ein 1 ! zeichen zuviel
    ohne debug hätte ich das net gemerkt



    Habe nun allerdings ein Problem noch beim kaufen und verkaufen Updatet er den Pickup nicht.


    Welchen Fehler habe ich gemacht?


    UpdateHaus ist ganz oben mit eingefügt.


    Von meinem Samsung gesendet

  • irgendwo muss es ja abgerufen werden am besten nach dem verkaufen updateHaus(); hinzufügen

  • Ich bin gerade nicht zuhause um den Befehl hier zu schreiben zum Verkaufen.


    Das ist einfach nur eine abgeänderter Code von hauskaufen.


    Auch wenn ich das Haus kaufe updatet er nicht den pickup bzw löscht nicht den verkaufspickup. Es kommt nur ein neuer hinzu.


    Nach dem relogg wird alles richtig angezeigt


    Push 21.07

    Einmal editiert, zuletzt von robbi2304 ()

  • Wir wollen deinen /sellhouse, /hausverkaufen o. Ä. Befehl gerne sehen. ;)

    RTL - Das N steht für Niveau!
    MfG,
    StreetS


    Jegliche Freundesanfragen, die für mich keinen Sinn ergeben, werden professionell Ignoriert. (Gleiche mit Skype!)
    Wer es nicht kapiert wird in Breadfish & Skype blockiert.


    - Stolzer PAWN Scripter der Klasse Beherrscht

  • Ok, wenn der Code noch aktuell ist, dann vermute ich, dass dein Haus das Pickup mit der ID 0 hat. Daher greift diese Abfrage hier nicht.
    Ändere:
    if(hInfo[id][h_pickup])
    zu:
    if(hInfo[id][h_pickup] != -1)


    Sowie:
    if(hInfo[id][h_text])
    zu:
    if(hInfo[id][h_text] != Text3D:-1)


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


    Füge außerdem, nachdem du das Pickup/Label gelöscht hast (DestroyPickup/Delete3DTextLabel) jeweils die Zurücksetzung der Variable auf -1 danach hinzu, um hier Fehler zu vermeiden.