hauskaufen | Befehl buggt und alles wird gespammt.

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
  • Hey liebe Community,
    und zwar habe immer das Problem wenn ich mir ein Haus kaufen möchte kommen die Nachrichten 10000 mal im Chat:




    Der Befehl: ocmd:hauskaufen(playerid,params[])
    {
    for(new haus=1;haus<MAX_HAUS;haus++)
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,hInfo[haus][haus_x],hInfo[haus][haus_y],hInfo[haus][haus_z]))
    {
    if(strcmp("Staat",hInfo[haus][haus_besitzer],false) == 0)
    {
    new money = GetPlayerMoney(playerid);
    if(money < hInfo[haus][haus_Preis])
    {
    GameTextForPlayer(playerid,"~r~Kein Geld",3000,4);
    }
    else
    {
    new steuersatz = dini_Int("/Steuern/Steuerin.ini","Steuer");
    new pfad[64];
    format(pfad,64,"/Häuser/%d.ini",haus);
    new steuer = hInfo[haus][haus_Preis] / 100 * steuersatz;
    dini_Set(pfad,"Besitzer",SpielerName(playerid));
    GivePlayerMoney(playerid,-hInfo[haus][haus_Preis]);
    GivePlayerMoney(playerid,-steuer);
    dini_IntSet("/Kassen/Staatskasse.ini","Kasse",++ steuer);
    KillHouse(haus);
    LoadHouse(haus);
    }
    }
    else
    {
    SendClientMessage(playerid,Grau,"Dieses Haus ist bereits verkauft.");
    }
    }
    else
    {
    SendClientMessage(playerid,Grau,"Hier kannst du kein Haus kaufen.");
    }
    }
    return 1;
    }


    Weiß jemand weiter und kann mir das erklären? :)

  • Also, wenn ich mich nicht Irre, hast du bei den Message etc immer ein return 1; vergessen.
    Hier der Code

    ocmd:hauskaufen(playerid,params[])
    {
    for(new haus=1;haus<MAX_HAUS;haus++)
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,hInfo[haus][haus_x],hInfo[haus][haus_y],hInfo[haus][haus_z]))
    {
    if(strcmp("Staat",hInfo[haus][haus_besitzer],false) == 0)
    {
    new money = GetPlayerMoney(playerid);
    if(money < hInfo[haus][haus_Preis])
    {
    GameTextForPlayer(playerid,"~r~Kein Geld",3000,4);
    }
    else
    {
    new steuersatz = dini_Int("/Steuern/Steuerin.ini","Steuer");
    new pfad[64];
    format(pfad,64,"/Häuser/%d.ini",haus);
    new steuer = hInfo[haus][haus_Preis] / 100 * steuersatz;
    dini_Set(pfad,"Besitzer",SpielerName(playerid));
    GivePlayerMoney(playerid,-hInfo[haus][haus_Preis]);
    GivePlayerMoney(playerid,-steuer);
    dini_IntSet("/Kassen/Staatskasse.ini","Kasse",++ steuer);
    KillHouse(haus);
    LoadHouse(haus);
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid,Grau,"Dieses Haus ist bereits verkauft.");
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid,Grau,"Hier kannst du kein Haus kaufen.");
    return 1;
    }
    }
    return 1;
    }

  • Euer return 1 ist zwar schön und gut aber so bekommt ihr unnötige Codezeilen, die man sich sparen kann..

    ocmd:hauskaufen(playerid,params[])
    {
    for(new haus=1;haus<MAX_HAUS;haus++)
    {
    if(!IsPlayerInRangeOfPoint(playerid,5.0,hInfo[haus][haus_x],hInfo[haus][haus_y],hInfo[haus][haus_z]))return SendClientMessage(playerid,Grau,"Hier kannst du kein Haus kaufen.");
    if(!strcmp("Staat",hInfo[haus][haus_besitzer],false) == 0)return SendClientMessage(playerid,Grau,"Dieses Haus ist bereits verkauft.");
    new money = GetPlayerMoney(playerid);
    if(money < hInfo[haus][haus_Preis])return GameTextForPlayer(playerid,"~r~Kein Geld",3000,4);
    new steuersatz = dini_Int("/Steuern/Steuerin.ini","Steuer");
    new pfad[64];
    format(pfad,64,"/Häuser/%d.ini",haus);
    new steuer = hInfo[haus][haus_Preis] / 100 * steuersatz;
    dini_Set(pfad,"Besitzer",SpielerName(playerid));
    GivePlayerMoney(playerid,-hInfo[haus][haus_Preis]);
    GivePlayerMoney(playerid,-steuer);
    dini_IntSet("/Kassen/Staatskasse.ini","Kasse",++ steuer);
    KillHouse(haus);
    LoadHouse(haus);
    return 1;
    }
    return 1;
    }

  • Die Nachricht wird so oft gesendet, wie max Haus definiert ist.
    Einfach wenn er nicht an den coordinaten ist, dann continue
    Und wenn er da ist break.
    Und dann kannst du noch machen, dass wenn Haus==max_Haus ist, dann soll die Nachricht kommen.
    Vom Handy geschrieben

  • Du hast das else ja in ner Schleife, deshalb wirds so oft gesendet. Setz einfach ne Variable, wenns geklappt hat und wenn die Variable nach der Schleife geändert wurde, weißte, dass es geklappt hat. ;)

    ▬|██████|▬
    This is Nudelholz.
    Copy Nudelholz in your Signatur
    to make better Kuchens
    and other Teigprodukte!