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
  • Hallo zusammen,
    ich wollte fragen, wie man das machen kann z.B. wenn er nicht in der Nähe von einem Haus ist das dann neh nachricht kommt.


    Ich nehme die for Schleife damit ich alle Häuser durchgehe, nur wenn ich dann z.B. bei IsPlayerInRangeOfPoint dann else mache werde ich zugespamt.


    Kann mir das bitte einer erklären, wäre schön wenn noch ein Beispiel dabei wäre.


    MFG

  • Sofern du die Hauskoordinaten nicht in einem Array gespeichert hast, kannst du ja einfach eine if-elseif-Kette erstellen.


    if(IsPlayerInRangeOfPoint(playerid, 3.0, 1,2,3)) return SendClientMessage(playerid, COLOR_X, "irgendwas");
    else if(IsPlayerInRangeOfPoint(playerid, 3.0, 4,5,6)) return SendClientMessage(playerid, COLOR_X, "irgendwas");
    else return SendClientMessage(playerid, COLOR_X, "du bist an keinem Haus");


    Bei 300 Häusern wirds aber schwierig.
    Ich würde ein Array à la new Float:Houses[][3] = {
    {X1, X2, X3},
    {X4, X5, X6},
    {X,Y,Z}
    } scripten, dann kannst du eine for-Schleife machen
    Kleiner Tipp: if(IsPlayerInRangeOfPoint(playerid, 3.0, Houses[i][0], Houses[i][1], Houses[i][2])) ...

    Professioneller Webentwickler.

  • Also ich habe die in einer Datei gespeichert und ich dachte man kann das einwenig ressourcen freundlicher machen. Gibt es da keinen anderen weg als du ganzezeit if(IsPlayerInRangeOfPoint(playerid,5,Haus1X,Haus1Y,Haus1Z)) ???


    MFG

  • Natürlich geht das.
    Voraussetzung hierfür ist ein Haussystem mit enum ^^


    //Sagen wir, du hast oben die Maximalen Häuser definiert, in etwa so
    #define Max_Hauser 300



    //Nun musst du die Schleife ja 300 mal durchlaufen lassen
    for( new x = 0; x < 300; x ++)


    //Du kannst die Schleife aber auch mit der Variable "Max_Hauser" durchlaufen lassen
    for( new x = 0; x < Max_Hauser; x ++)



    //Nun musst du ja abfragen, ob der Spieler in der Nähe des momentanen Hauses "x" ist
    //Dies machst du so
    if( IsPlayerInRangeOfPoint( playerid, 2.5, Haus[ x ][ HausX ], Haus[ x ][ HausY ], Haus[ x ][ HausZ ] ) )


    //Jetzt kannst du dein gewünschtes Zeug machen ^^

    Unkompetent. Das neue dynamisch.



    ihr seit schon lustig postet erros aber nicht die zeilen wo sie sind dann können wir euch auch nicht helfen^^


    Lernt Scripten, Leute, und macht eure Augen auf!


    _______________________________________
    50 Beiträge: [x] 300 Beiträge: [x]
    100 Beiträge: [x] 500 Beiträge: [x]
    150 Beiträge: [x] 1000 Beiträge: [x]
    200 Beiträge: [x]
    2000 Beiträge: []
    250 Beiträge: [X] Boardaktivitäten: Profil


    [size=36]_______________________________________

    /Edit: Schmerzt es dir eigentlich nicht so ein Müll zu schreiben 8|

  • Hab ich genau so,



    ocmd:enter(playerid,params[])
    {
    for(new haus = 0; haus <MAX_HAUS; haus++)
    {
    if(IsPlayerInRangeOfPoint(playerid,5,hInfo[haus][PosX],hInfo[haus][PosY],hInfo[haus][PosZ]))
    {
    ....
    }
    else SendClientMessage(playerid,ROT,"Du bist nicht in der Nähe von einem Haus.");
    }
    return 1;
    }


    Aber ich werde zugespamt.


    Mit der Nachricht ich bin nicht in der Nähe.


    Edit: Hab jetzt statt else return, jetzt gehe ich in ein Haus Icon und es steht du bist nicht in der Nähe.

    Einmal editiert, zuletzt von KING136 ()

  • Das ist genau das, was ich oben auch geschrieben habe.
    Du musst dann nur die Koordinaten aus dem File auslesen und in das Array "Houses" einspeichern.
    That's it, dauert eigentlich keine 10 Minuten.


    EDIT: Achso. Probier mal statt "else SendClientMessage..." einfach "else return SendClientMessage..."
    EDIT 2: Nein, Blödsinn. Du wirst zugespammt, weil du ja das SendClientMessage immer in der for-Schleife aufrufst, also du bekommst 299-300 Nachrichten. Du darfst das SendClientMessage nicht in der Schleife machen.

    Professioneller Webentwickler.

  • /edit: Nicht gelesen, dass es um nen command geht.


    ocmd:enter(playerid,params[])
    {
    for(new haus = 0; haus <MAX_HAUS; haus++)
    {
    if(!IsPlayerInRangeOfPoint(playerid,5,hInfo[haus][PosX],hInfo[haus][PosY],hInfo[haus][PosZ]))
    {
    continue;
    } ...
    // Hier dein Code zum eintreten
    return 1;
    }
    SendClientMessage(playerid,ROT,"Du bist nicht in der Nähe von einem Haus.");
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen