Schon wieder ein Problem mit for Schleife

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 Com,


    Wenn ich jetzt im haus stehe, kommt die Nachricht du bist an keinem Haus, was beendet oder stoppt nu schon wieder die Schleife


    if(!strcmp(cmd, "/hausenter", true))
    {
    for(new i = 0; i <MaxHaus; i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,PlayerHaus[i][Hausx],PlayerHaus[i][Hausy],PlayerHaus[i][Hausz]))
    {
    if(PlayerHaus[i][Hausid] == PlayerInfo[playerid][pHauskey] || PlayerHaus[i][Hausid] == PlayerInfo[playerid][pMietKey] || PlayerInfo[playerid][pAdmin] == 2000)// return SendClientMessage(playerid,WHITE,"Dieses Haus gehört dir nicht!");
    {
    new Float:xasdf, Float:yasdf, Float:zasdf;
    new Inter;
    xasdf = PlayerHaus[i][AHausx];
    yasdf = PlayerHaus[i][AHausy];
    zasdf = PlayerHaus[i][AHausz];
    Inter = PlayerHaus[i][Interior];
    SetPlayerPos(playerid,xasdf,yasdf,zasdf);
    SetPlayerInterior(playerid,Inter);
    SetPlayerVirtualWorld(playerid,PlayerHaus[i][Hausid]);
    }
    else {
    SendClientMessage(playerid,WHITE,"Dir gehört das Haus nicht!");
    return 1;
    }
    }
    else {
    SendClientMessage(playerid,WHITE,"Du bist an keinem Haus!");
    return 1;
    }
    }
    return 1;
    //return SendClientMessage(playerid,WHITE,"Du bist an keinem Haus!");
    }


    Mfg

  • Wenn zum Beispiel der erste array Eintrag nicht deinen Koordinaten entspricht, springt es sofort in dein "Else" Abschnitt rein, sendet die Nachricht und das return beendet die schleife dann damit auch.


    Von daher arbeite mit einem boolean , den du auf true setzt, wenn deine abfrage zu trifft.
    Außerhalb der schleife fragst du dann ab, ob er auf false ist. Wenn er auf false ist, sendest du ihm die Nachricht, das er nicht an einem haus ist

  • Wenn zum Beispiel der erste array Eintrag nicht deinen Koordinaten entspricht, springt es sofort in dein "Else" Abschnitt rein, sendet die Nachricht und das return beendet die schleife dann damit auch.


    Von daher arbeite mit einem boolean , den du auf true setzt, wenn deine abfrage zu trifft.
    Außerhalb der schleife fragst du dann ab, ob er auf false ist. Wenn er auf false ist, sendest du ihm die Nachricht, das er nicht an einem haus ist


    Wie soll ich es denn machen? Es ging doch noch gestern

  • Hier sind ja heute mal wieder richtig Profis unterwegs
    *Hust*ironie*Hust* zum einen liegt es daran das du keine Ahung hast was du skriptest beziehungsweise wie kein verstaendnis darueber ueber den ablauf deines Codes.


    1. fuer dein eines else bei der range abfrage solltest du mit einem boolean arbeiten wo du letzt endlich am ende des codes abfraegst also den wert des booleans.


    da ich leider am handy bin kann ich hier keinen code gescheit posten daher schau bei mir in die signatur unter tutorials

  • Hier sind ja heute mal wieder richtig Profis unterwegs
    *Hust*ironie*Hust* zum einen liegt es daran das du keine Ahung hast was du skriptest beziehungsweise wie kein verstaendnis darueber ueber den ablauf deines Codes.


    1. fuer dein eines else bei der range abfrage solltest du mit einem boolean arbeiten wo du letzt endlich am ende des codes abfraegst also den wert des booleans.


    da ich leider am handy bin kann ich hier keinen code gescheit posten daher schau bei mir in die signatur unter tutorials


    Da steht ein Zollsystem -,-


    Es geht leider immernoch nicht jedoch gestenr ging es mit genau dem gleichen Code


    Mfg


    Edit: Oh ich bin blöd ich bin Adminrank 2020 -,-


    Danke geht wieder


  • Ja wegen dem boolean


    if(!strcmp(cmd, "/hausenter", true))
    {
    new bool:is_at_house;
    for(new i = 0; i <MaxHaus; i++){
    if(IsPlayerInRangeOfPoint(playerid,5.0,PlayerHaus[i][Hausx],PlayerHaus[i][Hausy],PlayerHaus[i][Hausz])){
    if(PlayerHaus[i][Hausid] != PlayerInfo[playerid][pHauskey] || PlayerHaus[i][Hausid] != PlayerInfo[playerid][pMietKey])return SendClientMessage(playerid,WHITE,"Dieses Haus gehört dir nicht!");
    SetPlayerPos(playerid,PlayerHaus[i][AHausx],PlayerHaus[i][AHausy],PlayerHaus[i][AHausz]);
    SetPlayerInterior(playerid,PlayerHaus[i][Interior]);
    SetPlayerVirtualWorld(playerid,PlayerHaus[i][Hausid]);
    is_at_house = false;
    break;
    }else is_at_house = true;
    }
    if(is_at_house)return SendClientMessage(playerid,WHITE,"Du bist an keinem Haus!");
    return 1;
    }


    du musst wissen das du durch das else mit dem return 1; deine schleife abbrichst sollte der spieler nicht an dem ersten haus sein ^^.
    um dies zu vermeiden und um dem spieler dennoch eine nachricht zu senden kommt das boolean ins spielen.


    if(PlayerHaus[i][Hausid] != PlayerInfo[playerid][pHauskey] || PlayerHaus[i][Hausid] != PlayerInfo[playerid][pMietKey])return SendClientMessage(playerid,WHITE,"Dieses Haus gehört dir nicht!");


    bei diesem return ist es berechtigt der spieler wird ja nicht an zwei häusern gleichzeitig sein, wenn es doch der fall ist so musst du die range verringern.


    Ich hoffe du verstehst nun was ich meinte ?