if Abfragen

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
  • Gibts hier im Forum ein gutes Tutorial zu if abfragen?
    Ich brauch abfragen für Fahrzeuge, Punkte und Produkteb zum Abholen und liefern.


    Meine ersten selbstständigen versuche enden nur mit 26 Errors:



    if(strcmp("/start",cmdtext,true,10)==0)
    {
    if(!IsPlayerInRangeOfPoint(playerid,Koordinatenscheiß,Radius))
    {
    return SendClientMessage(playerid,Rot,"Du bist am falschen Punkt.");
    {
    if(!IsPlayerInRangeOfPoint(playerid,Koordinatenscheiß,Radius))
    {
    return SendClientMessage(playerid,Rot,"Du bist am falschen punkt.");
    }
    Das eigentliche zueg, was dann passieren soll...


    Wenn nur eine Abfrage drin ist, klappt das alles.
    Aber wie baue ich 2 Abfragen ein?


    mfg Noxi

  • Es gibt ein Tutorial dafür
    //E: [ SCRIPTING ] if and else
    //E2: if(strcmp("/start",cmdtext,true,10)==0)
    {
    if(!IsPlayerInRangeOfPoint(playerid,Koordinatenscheiß,Radius))
    {
    return SendClientMessage(playerid,Rot,"Du bist am falschen Punkt.");
    }
    if(!IsPlayerInRangeOfPoint(playerid,Koordinatenscheiß,Radius))
    {
    return SendClientMessage(playerid,Rot,"Du bist am falschen punkt.");
    }
    Das eigentliche zueg, was dann passieren soll...
    }
    Oder noch kürzer:
    if(strcmp(/start,cmdtext,true,10)==0)
    {
    if(!IsPlayerInrange blabla) return SendClientMessage(playerid,Rot,"Blub");
    if(!erneutistplayerinrange(blabla)) return SendClientMessage(playerid,Rot,"Blub");
    Sache die passieren soll...
    }

    Ist jetzt nicht sonderlich schön, reicht aber zur Demonstrierung^^

    Greetz

    Einmal editiert, zuletzt von MewMega ()

  • Achte darauf, richtig einzurücken und die offenen geschweiften Klammern auch wieder zu schließen. Nach Zeile 5 zum Beispiel muss wieder eine geschlossene geschweifte Klammer folgen. Benutzt du nach einer IF-Abfrage nur eine einzige Anweisung (in deinem Fall das Return-Statement) kannst du die geschweiften Klammern auch weglassen.


  • if(strcmp("/zget",cmdtext,true,10)==0)
    {
    if(!IsPlayerInVehicle(playerid,537) return SendClientMessage(playerid,Rot,"Du bist in keinen Zug!");
    if(!IsPlayerInRangeOfPoint(playerid,5,583.5240,1274.2026,12.2996)) return SendClientMessage(playerid,Rot,"Du bist nicht am Get!");
    }
    SetPlayerCheckpoint(playerid,2125.4929,-1953.7500,14.2473,4);
    SendClientMessage(playerid,Grün,"Du hast die Produkte erfolgreich aufgenommen!");
    SendClientMessage(playerid,Grün,"Fahre nun zum Deliver, um die Produkte abzuliefern!");
    return 1;
    }



    Ich hab das jetzt so zusammen gefummelt, aber da stimmt nicht.
    Schon deswegen nicht, weil ichs nicht compilen kann.

  • Die Klammer nach den 2 if-Abfragen muss weg. Und bei der 1. if-Abfrage musst du eine normale Klammer noch schließen.
    //E:
    if(strcmp("/zget",cmdtext,true,10)==0)
    {
    if(!IsPlayerInVehicle(playerid,537)) return SendClientMessage(playerid,Rot,"Du bist in keinen Zug!");
    if(!IsPlayerInRangeOfPoint(playerid,5,583.5240,1274.2026,12.2996)) return SendClientMessage(playerid,Rot,"Du bist nicht am Get!");
    SetPlayerCheckpoint(playerid,2125.4929,-1953.7500,14.2473,4);
    SendClientMessage(playerid,Grün,"Du hast die Produkte erfolgreich aufgenommen!");
    SendClientMessage(playerid,Grün,"Fahre nun zum Deliver, um die Produkte abzuliefern!");
    return 1;
    }

    Greetz

  • Das machst du am besten mit PVar und dann fragst du ab ob sie auf 0 oder 1 ist. Wenn sie auf 0 ist, soll er etwas aufnehmen. Wenn sie auf 1 ist, soll er sie ablegen. Ungefähr so:
    if(strcmp("/get",cmdtext,true,10)==0)
    {
    if(GetPVarInt(playerid,"Zug")==0)
    {
    Aufnehmen... und whatever
    SetPVarInt(playerid,"Zug",1); //WICHTIG
    }
    if(GetPVarInt(playerid,"Zug")==1)
    {
    Ablegen und whatever...
    SetPVarInt(playerid,"Zug",0);
    }
    }
    So könnte das dann aussehen (nur Beispiel zu PVar)

    Greetz

  • Kann ich das einfach drunter klatschen, oder wie muss das da eingefügt werden?
    Bestimmt da, wo auch die sendClientMessages stehen oder?


    Und ich habe noch ein kleines problem.
    Das Fahrzeug, mit dem der job ausgeführt werden soll, ist Car ID 537 (Zug mit Flach hängern)
    Der steht in LV zum fahren bereit.
    Die abfrage: if(!IsPlayerInVehicle(playerid,537)) ist auch da.
    Wenn ich mit dem zug dann am richtigen punkt den befehl eingebe, kommt, das ich in keinem zug bin.
    Was ist da noch falsch?

  • Und wie wird das aufgeteilt?
    Was kommt zum /get befehl, und was zum /deliver befehl?
    Und muss was definiert werden?

  • Bei PVars muss nichts definiert werden, du setzt einfach ihren Wert und sie werden zwischengespeichert. Genau das ist der Vorteil daran. Du machst also zB einen get Befehl - Wenn PVar auf 0 ist, bekommst du Sachen. Wenn PVar auf 1 ist, soll ne Meldung kommen. Das gleiche mit deliver. Nur dass da der Spieler Geld bekommt, wenn PVar auf 1 ist und ne Meldung wenn 0. 0 steht quasi für keine Mats, 1 steht für Mats.

    Greetz


  • if(strcmp("/zget",cmdtext,true,10)==0)
    {
    if(!IsPlayerInVehicle(playerid,1)) return SendClientMessage(playerid,Rot,"Du bist in keinem Zug!");
    if(!IsPlayerInRangeOfPoint(playerid,5,583.5240,1274.2026,12.2996)) return SendClientMessage(playerid,Rot,"Du bist nicht am Get!");
    SetPlayerCheckpoint(playerid,2125.4929,-1953.7500,14.2473,4);
    if(GetPVarInt(playerid,"Produkte")==0)
    {
    SetPVarInt(playerid,"Produkte",1);
    }
    SendClientMessage(playerid,Grün,"Du hast die Produkte erfolgreich aufgenommen!");
    SendClientMessage(playerid,Grün,"Fahre nun zum Deliver, um die Produkte abzuliefern!");
    }
    else
    {
    if(GetPVarInt(playerid,"Produkte")==1)
    {
    SetPVarInt(playerid,"Produkte",1);
    }
    SendClientMessage(playerid,Rot,"Du hast schon Produkte!");
    SendClientMessage(playerid,Rot,"Du musst diese erst abliefern, damit du neue Aufnehmen kannst!");
    return 1;
    }

    if(strcmp("/zdeliver",cmdtext,true,10)==0)
    {
    if(!IsPlayerInVehicle(playerid,1)) return SendClientMessage(playerid,Rot,"Du bist in keinem Zug!");
    if(!IsPlayerInRangeOfPoint(playerid,5,2125.4929,-1953.7500,14.2473)) return SendClientMessage(playerid,Rot,"Du bist nicht am Deliver!");
    SetPlayerCheckpoint(playerid,2125.4929,-1953.7500,14.2473,4);
    if(GetPVarInt(playerid,"Produkte")==1)
    {
    SetPVarInt(playerid,"Produkte",0);
    }
    GivePlayerMoney(playerid,1000);
    SendClientMessage(playerid,Grün,"Du hast die Produkte abgeliefert, und ein bisschen Geld bekommen!");
    SendClientMessage(playerid,Grün,"Fahre nun wieder zum Get, um neue Produkte zu holen!");
    }
    else
    {
    if(GetPVarInt(playerid,"Produkte")==0)
    {
    SetPVarInt(playerid,"Produkte",0);
    }
    SendClientMessage(playerid,Rot,"Du hast noch keine Produkte aufgenommen!");
    SendClientMessage(playerid,Rot,"Fahre erst welche holen!");
    return 1;
    }



    ///gmx (Vorübergehend)
    if(strcmp("/gmx",cmdtext,true,10)==0)
    {
    SendClientMessage(playerid,Rot,"Der Server wird neu gestartet.");
    SendRconCommand("gmx");
    return 1;
    }

    ///veh (vorübergehend)
    if(!strcmp(strget(cmdtext, 0), "/veh")){
    {{
    new autoid = strval(strget(cmdtext, 1));
    new farbe1 = strval(strget(cmdtext, 2));
    new farbe2 = strval(strget(cmdtext, 2));
    if(autoid <= 399) { SendClientMessage(playerid, 0xFF0000AA, "[Auto]:So Eine Car ID gibt es Nicht (400 bis 612)"); }
    if(autoid >= 612) { SendClientMessage(playerid, 0xFF0000AA, "[Auto]:So Eine Car ID gibt es Nicht (400 bis 612)"); }
    else {
    new Float:x, Float:y, Float:z, Float:za, gla;
    GetPlayerPos(playerid,x,y,z); GetPlayerFacingAngle(playerid,za); gla = CreateVehicle(autoid,x,y,z,za,farbe1,farbe2,-1); PutPlayerInVehicle(playerid,gla,0); }}}
    SetTimerEx("Getunnt", 250, false, "i", playerid);
    return 1;
    }
    return 0;
    }



    Habe das nun so, und wird wahrscheinlich nicht ganz stimmen, da das alles durcheinander ist.
    wenn ich gmx eingeben, wollte der server neustarten, aber da kommt dann das mit den mats.
    halt alles gemischt, und nichts läuft so wie es soll.