Problem mit Haussystem (Text Labels)

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
  • Moin,


    //edit: Die Fehler sind behoben, habe nur noch das Problem mit den Labels.
    Im Post weiter unten findet ihr die aktuelle, nicht funktionierende Benutzung der Labels.


    ich bin dabei ein Haussystem für mein Script zu erstellen.
    Dabei habe ich dieses Tutorial genutzt [Scripting] Simples Haussystem und hab es ein wenig nach meinen wünschen geändert.
    Im Prinzip bin ich fertig, habe allerdings ein paar Fehler, die ich nicht behoben bekomme.


    Jedes Haus hat eine eigene Datei mit allen Variablen.
    Ich denke die Fehler liegen in der Verarbeitung des Strings Besitzer.


    Der 1. Fehler liegt darin, dass der Besitzer beim Kauf des Hauses nicht aktualisiert wird.
    Hier mein Hauskaufen befehl:
    dcmd_hauskaufen(playerid,params[]) { //Haus kaufen
    #pragma unused params
    for(new h=1;h<MAX_HOUSES;h++)
    {
    if(IsPlayerInRangeOfPoint(playerid,2,hInfo[h][hax],hInfo[h][hay],hInfo[h][haz]))
    {
    new name[MAX_PLAYER_NAME],hs[128];
    GetPlayerName(playerid,name,sizeof name);
    if(pInfo[playerid][haus] > 0) {
    return SendClientMessage(playerid,COLOR_RED,"Fehler: Du hast bereits ein Haus!");
    }
    if(strcmp(hInfo[h][Besitzer],"Keiner",false)) { //bisher ungetestet
    return SendClientMessage(playerid,COLOR_RED,"Fehler: Dieses Haus ist bereits verkauft!");
    }
    if(pInfo[playerid][konto] < hInfo[h][Preis]) {
    return SendClientMessage(playerid,COLOR_RED,"Fehler: Du hast nicht genug Geld auf deinem Konto um dir dieses Haus zu kaufen!");
    }
    pInfo[playerid][konto] -=hInfo[h][Preis];
    pInfo[playerid][haus] = h;
    new pfad[50];
    format(pfad,50,"/Häuser/%d.ini",h);
    dini_Set(pfad,"Besitzer",name); //Besitzer wird nicht gesetzt
    KillHaus(h);
    LoadHaus(h);
    format(hs,sizeof(hs),"Du hast dir das Haus für {FFFF00}%d$ {00FF00}gekauft. Herzlichen Glückwunsch.",hInfo[h][Preis]);
    return SendClientMessage(playerid,COLOR_GREEN,hs);
    }
    }
    return 1;
    }


    Desweiteren habe ich noch ein weiteres Problem mit der Abfrage des Besitzers.
    Wenn das haus keinen Besitzer hat, soll ein grünes Hausicon erscheinen und an dem Icon soll ein Label stehen.
    Wird das Hau sgekauft, soll sich das Pickup sowie das Label ändern. Passiert leider beides nicht. Daher denke ich, dass es an der abfrage liegt.
    Hier mal die Abfrage:
    if(strcmp(hInfo[hausid][Besitzer],"Keiner",false)) {
    format(ls,sizeof(ls),"*** Haus ***\nBesitzer: %s",hInfo[hausid][Besitzer]);
    hInfo[hausid][Pickup] = CreatePickup(1239,1,hInfo[hausid][hax],hInfo[hausid][hay],hInfo[hausid][haz],0);
    }
    else {
    format(ls,sizeof(ls),"*** Haus ***\nZu verkaufen!\nKaufpreis %d$",hInfo[hausid][Preis]);
    hInfo[hausid][Pickup] = CreatePickup(1273,1,hInfo[hausid][hax],hInfo[hausid][hay],hInfo[hausid][haz],0);
    }
    hInfo[hausid][Label] = Create3DTextLabel(ls,COLOR_LIGHTBLUE,hInfo[hausid][hax],hInfo[hausid][hiy],hInfo[hausid][haz],10,0,1);
    return 1;
    }


    Ich hoffe ihr könnt mir helfen.

  • hInfo[h][Besitzer]Wird die überhaupt neu beschrieben?? <-- kleiner Denkanstoss
    Create3DTextLabelVorher erstellen lassen und nachher setten ;]


    Desweiteren, schau mal ob alle Abfragen korrekt arbeiten.


    Gruss: Sonic

    I didn't hit you. I high fived your face.

  • Moin,


    Danke erstmal für die Denkanstöße.


    hInfo[h][Besitzer] wird nicht neu beschrieben( bzw. überschrieben wenn du das meinst).


    Die Geschichte mit dem Label werd ich gleich mal Testen.


    //edit: If-Abfragen und überschreiben des Besitzers habe ich hinbekommen. Funktioniert.
    Das einzige Problem was ich nun noch habe, ist das mit dem Label.


    Das Label wird in einem enum definiert:
    enum Houses
    {
    ...
    Text3D:Label,
    ...
    };
    new hInfo[MAX_HOUSES][Houses];


    Dann wird es in der Funktion in der die Häuser geladen werden erstellt und der String soll angepasst werden:
    hInfo[hausid][Label] = Create3DTextLabel("*** Haus ***",COLOR_LIGHTBLUE,hInfo[hausid][hax],hInfo[hausid][hiy],hInfo[hausid][haz],50,-1,1);
    if(strcmp(hInfo[hausid][Besitzer],"Keiner",false)) {
    format(ls,sizeof(ls),"*** Haus ***\nBesitzer: %s",hInfo[hausid][Besitzer]);
    Update3DTextLabelText(hInfo[hausid][Label],COLOR_LIGHTBLUE,ls);
    hInfo[hausid][Pickup] = CreatePickup(1239,1,hInfo[hausid][hax],hInfo[hausid][hay],hInfo[hausid][haz],0);
    }
    else {
    format(ls,sizeof(ls),"*** Haus ***\nZu verkaufen!\nKaufpreis %d$",hInfo[hausid][Preis]);
    Update3DTextLabelText(hInfo[hausid][Label],COLOR_LIGHTBLUE,ls);
    hInfo[hausid][Pickup] = CreatePickup(1273,1,hInfo[hausid][hax],hInfo[hausid][hay],hInfo[hausid][haz],0);
    }


    Leider wird mir das Label nicht angezeigt. Habe auch schon bissl hier im Forum geschaut, jedoch finde ich den Fehler nicht.

  • Leider wird mir das Label nicht angezeigt. Habe auch schon bissl hier im Forum geschaut, jedoch finde ich den Fehler nicht.


    Deine Virtuelle Welt ist -1
    änder das auf 0

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski