Für jedes if ein else ?

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


    Als beispiel habe ich mal diese funktion erstellt , bis jetzt kannte ich es nur so das man ganz am ende der funktion ein else mit SendPlayerMessage als Meldung setzt falls eine der vorgaben nicht zutrifft. Wie kann ich es aber machen das für jede bedingung eine PlayerMessage gesended wird wenn sie nicht zutrifft ?. Also wenn a nicht dann, wenn b nicht dann...usw.....



    if(pInfo[playerid][a] ==1)
    {
    if(pInfo[playerid][b] == 2)
    {
    if(pInfo[playerid][code=c] ==3)
    {
    if(pInfo[playerid][d] == 4)
    {
    pInfo[playerid][blablub] = 10
    }
    else
    {
    SendClientMessage(playerid,0xFF0000AA, "Eine der bedingungen trifft nicht auf dich zu o.O ");
    }
    }}
    return 1;
    }




    Mit freundlichen Grüßen


    Anubis


  • if(pInfo[playerid][a] ==1)
    {
    if(pInfo[playerid][b] == 2)
    {
    if(pInfo[playerid][code=c] ==3)
    {
    if(pInfo[playerid][d] == 4)
    {
    pInfo[playerid][blablub] = 10
    }
    else
    {
    return SendClientMessage(playerid,0xFF0000AA, "Die bedingung d tritt nicht auf ");
    }
    }
    else
    {
    return SendClientMessage(playerid,0xFF0000AA, "Die Bedingung c tritt nicht auf");
    }
    }
    else
    {
    return SendClientMessage(playerid,0xFF0000AA, "Die Bedingung b tritt nicht auf");
    }
    }
    else
    {
    return SendClientMessage(playerid,0xFF0000AA,"Die Bedingung a tritt nicht auf");
    }


    edit: Portgas variante is sogar vielleicht einfacher ^^

  • Viel zu lang...



    if(pInfo[playerid][a] ==1)
    {
    if(pInfo[playerid][b] == 2)
    {
    if(pInfo[playerid][code=c] ==3)
    {
    if(pInfo[playerid][d] == 4)
    {
    pInfo[playerid][blablub] = 10
    }
    else return SendClientMessage(playerid,0xFF0000AA, "Die bedingung d tritt nicht auf ");
    }
    else return SendClientMessage(playerid,0xFF0000AA, "Die Bedingung c tritt nicht auf");
    }
    else return SendClientMessage(playerid,0xFF0000AA, "Die Bedingung b tritt nicht auf");
    }
    else return SendClientMessage(playerid,0xFF0000AA,"Die Bedingung a tritt nicht auf");
    }

    Oder halt wie ich es oben geschrieben hab.

  • Ah okay, wieder was dazu gelernt.



    besten dank für eure hilfe :thumbup:



    Edit:


    Hat sich doch noch ein kleines problem ergeben,



    if(pInfo[playerid][beruf] != 1) return TogglePlayerControllable(playerid, 1); SendClientMessage(playerid,0xFF0000AA, "1 trifft nicht zu");


    Wenn ich es so mache wird er zwar davon abgehalten ins fahrzeug zu steigen aber die message kommt nicht, umgekehrt wird die message angezeigt aber toggle nicht ausgeführt. Daher es wird immer nur das erste hinter dem return ausgeführt. Woran liegt das ?

    2 Mal editiert, zuletzt von Anubis ()


  • ich glaub er geht im return nur immer bis zum ersten semikolon.. bin mir aber net sicher.. sonst machs umgekehrt, also erst die message, dann return toggle

  • So bekomme ich irgendwie warnings.....habe jetzt auch schon wieder ein bischen damit rumexperimentiert aber bekomme es einfach nicht hin, egal wie ich den code verkapsel.Ich werde mal konrketer und poste jetzt den code auf den ich das gern anwenden möchte.


    Unter public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)


    if(GetVehicleModel(vehicleid) == 532)
    {
    if(pInfo[playerid][beruf] == JOB_FARMER) // wenn er kein farmer ist dann blablubb toggle
    {
    if(pInfo[playerid][gefarmt] == 0) // wenn gefarmt nicht auf 0 ist dann blabla toggle
    {
    new starthanfgt[10];
    SendClientMessage(playerid,COLOR_HELLGRUEN, "Fahre nun die Checkpoints ab um Hanf zu ernten");
    pInfo[playerid][farmt] = 1;
    SetPlayerRaceCheckpoint(playerid,0,farmercheckpoints[0][0],farmercheckpoints[0][1],farmercheckpoints[0][2],farmercheckpoints[1][0],farmercheckpoints[1][1],farmercheckpoints[1][2],3.0);
    format(starthanfgt, sizeof(starthanfgt), "~g~%dkg",pInfo[playerid][hanfmenge]);
    GameTextForPlayer(playerid,starthanfgt, 120000, 1);
    }
    else
    {
    TogglePlayerControllable(playerid,1);
    SendClientMessage(playerid,COLOR_ROT, "Du bist kein Farmer !");
    }}
    return 1;
    }


  • if(GetVehicleModel(vehicleid) == 532)
    {
    if(pInfo[playerid][beruf] == JOB_FARMER) // wenn farmer nicht zutrifft dann blablubb toggle
    {
    if(pInfo[playerid][gefarmt] == 0) // wenn gefarmt nicht auf 0 ist dann blabla toggle
    {
    new starthanfgt[10];
    SendClientMessage(playerid,COLOR_HELLGRUEN, "Fahre nun die Checkpoints ab um Hanf zu ernten");
    pInfo[playerid][farmt] = 1;
    SetPlayerRaceCheckpoint(playerid,0,farmercheckpoints[0][0],farmercheckpoints[0][1],farmercheckpoints[0][2],farmercheckpoints[1][0],farmercheckpoints[1][1],farmercheckpoints[1][2],3.0);
    format(starthanfgt, sizeof(starthanfgt), "~g~%dkg",pInfo[playerid][hanfmenge]);
    GameTextForPlayer(playerid,starthanfgt, 120000, 1);
    }
    else
    {
    TogglePlayerControllable(playerid,1);
    SendClientMessage(playerid,COLOR_ROT, "Du bist kein Farmer !");
    }
    }
    return 1;
    }


    also hier möchtest du, das bei jedem if eine fehlermeldung kommt, wenn es nicht zutrifft?

  • Ja ausser beim ersten if wo die vehicel id überprüft wird, denn das 2te und dritte if istja wieder abhängig vom ersten. Da würde sich glaube ich deine methode anbieten, müsste ich dann aber das erste if wo es um die vehicle id geht an die stritte stelle setzen ?, weil dafür brauche ich ja keine fehlermeldung.



    Oder wie würdest du es machen ?

  • Versuchs mal so (hast du drüber auch angegeben, GetPlayerVehicleID?)


    new vehicleid = GetPlayerVehicleID(playerid);


    if(GetVehicleModel(vehicleid) == 532)
    {
    if(pInfo[playerid][beruf] == JOB_FARMER) // wenn farmer nicht zutrifft dann blablubb toggle
    {
    if(pInfo[playerid][gefarmt] == 0) // wenn gefarmt nicht auf 0 ist dann blabla toggle
    {
    new starthanfgt[10];
    SendClientMessage(playerid,COLOR_HELLGRUEN, "Fahre nun die Checkpoints ab um Hanf zu ernten");
    pInfo[playerid][farmt] = 1;
    SetPlayerRaceCheckpoint(playerid,0,farmercheckpoints[0][0],farmercheckpoints[0][1],farmercheckpoints[0][2],farmercheckpoints[1][0],farmercheckpoints[1][1],farmercheckpoints[1][2],3.0);
    format(starthanfgt, sizeof(starthanfgt), "~g~%dkg",pInfo[playerid][hanfmenge]);
    GameTextForPlayer(playerid,starthanfgt, 120000, 1);
    }
    else
    {
    TogglePlayerControllable(playerid,1);
    SendClientMessage(playerid,COLOR_ROT, "Es ist nichts gefarmt!");
    }
    }
    else
    {
    TogglePlayerControllable(playerid, 1);
    SendClientMessage(playerid, COLOR_ROT,"Du bist kein Farmer!");
    }
    return 1;
    }


    edit: ich weiss, es würde auch noch kürzer gehen, aber ich hab mehr lust auf übersicht ;)

  • Ok versuche ich mal, habs unter dem callback "public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)"



    Das returnt ja die vehicle id, deswegen habe ich kein GetVehicleID drin.

  • Sauber, funktioniert ohne probleme.Meldungen werden richtig ausgegeben und getoggelt wird auch :)


    Vielen dank :thumbup:



    Wegen dem unfreeze, wenn man jemanden unfreezed der nicht gefreezed ist dann wird er ja trotzdem von seiner aktion abgehalten.Kommt zwar schonmal vor das sich jemand dadurch reinbuggen kann aber eher selten, mache aber trotzdem noch ein remove mit rein falls es jemand macht^^ thx für den tip



    So dann close ich mal :)

  • Ich möchte damit verdeutlichen das man mehrere Abfragen einbinden kann zudem sollte das eine Beispiel Anwendungsweise
    der Abfragen darstellen & ihrer Komplexen Verwendungsweise, kein Grund zur Aufregung gehört zu den Grundlagen

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


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