Ein SEHR seltsames Problem mit "If - Then"... Besser kann ich's in Kurzform nicht beschreiben! :(

  • Sonstiges

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ein SEHR seltsames Problem mit "If - Then"... Besser kann ich's in Kurzform nicht beschreiben! :(

    Hallo Forengemeinde,

    Ich habe grade ein sehr seltsames Problem mit einer "If - Then - Verzweigung".

    In der "Init.sqf" werden "true" und "false" Werte zugewiesen:

    Quellcode

    1. //Hier werden die Anfangswerte der Punkte zugewiesen!
    2. PunktEins = true;
    3. PunktZwei = true;
    4. PunktDrei = true;
    5. PunktVier = true;
    6. PunktFuenf = false;
    7. PunktSechs = false;
    8. PunktSieben = true;
    9. PunktAcht = false;
    10. PunktNeun = false;
    11. PunktZehn = false;
    Alles anzeigen


    In einem anderen script geht es um Folgendes:
    Ein Fahrzeug spawnt und soll Wegpunkte abfahren, ABER NUR Wegpunkte die "false" sind! Wenn es lange genug dort steht löst ein Trigger aus und setzt den Punkt dadurch auf "true"!
    Das ist eigentlich Alles was passiert!

    Brainfuck-Quellcode

    1. _BlueforHunterEins = [];
    2. if (isServer) then
    3. {
    4. _BlueforHunterEins = [getmarkerpos "BlueforHunterEinsStart", west, ["B_MRAP_01_gmg_F"],[],[],[],[],[],270] call BIS_fnc_spawnGroup;
    5. while {PunktestandOpfor < 101} do
    6. {
    7. if !(PunktEins) then
    8. {
    9. while !(PunktEins) do
    10. {
    11. _wpPunkt11 = _BlueforHunterEins addwaypoint [getmarkerpos "wpPunkt11", 0];
    12. _wpPunkt11 setWaypointType "Move";
    13. _wpPunkt11 setWaypointSpeed "Full";
    14. _wpPunkt11 setWaypointBehaviour "Safe";
    15. _wpPunkt11 setWaypointCombatMode "Red";
    16. _wpPunkt11 setWaypointFormation "Wedge";
    17. }
    18. };
    19. if !(PunktZwei) then
    20. {
    21. while !(PunktZwei) do
    22. {
    23. _wpPunkt21 = _BlueforHunterEins addwaypoint [getmarkerpos "wpPunkt21", 0];
    24. _wpPunkt21 setWaypointType "Move";
    25. _wpPunkt21 setWaypointSpeed "Full";
    26. _wpPunkt21 setWaypointBehaviour "Safe";
    27. _wpPunkt21 setWaypointCombatMode "Red";
    28. _wpPunkt21 setWaypointFormation "Wedge";
    29. }
    30. };
    31. if !(PunktDrei) then
    32. {
    33. while !(PunktDrei) do
    34. {
    35. _wpPunkt22 = _BlueforHunterEins addwaypoint [getmarkerpos "wpPunkt22", 0];
    36. _wpPunk22 setWaypointType "Move";
    37. _wpPunkt22 setWaypointSpeed "Full";
    38. _wpPunkt22 setWaypointBehaviour "Safe";
    39. _wpPunkt22 setWaypointCombatMode "Red";
    40. _wpPunkt22 setWaypointFormation "Wedge";
    41. }
    42. };
    43. if !(PunktVier) then
    44. {
    45. while !(PunktVier) do
    46. {
    47. _wpPunkt31 = _BlueforHunterEins addwaypoint [getmarkerpos "wpPunkt31", 0];
    48. _wpPunkt31 setWaypointType "Move";
    49. _wpPunkt31 setWaypointSpeed "Full";
    50. _wpPunkt31 setWaypointBehaviour "Safe";
    51. _wpPunkt31 setWaypointCombatMode "Red";
    52. _wpPunkt31 setWaypointFormation "Wedge";
    53. }
    54. };
    55. if !(PunktFuenf) then
    56. {
    57. while !(PunktFuenf) do
    58. {
    59. _wpPunkt32 = _BlueforHunterEins addwaypoint [getmarkerpos "wpPunkt32", 0];
    60. _wpPunkt32 setWaypointType "Move";
    61. _wpPunkt32 setWaypointSpeed "Full";
    62. _wpPunkt32 setWaypointBehaviour "Safe";
    63. _wpPunkt32 setWaypointCombatMode "Red";
    64. _wpPunkt32 setWaypointFormation "Wedge";
    65. }
    66. };
    67. if !(PunktSechs) then
    68. {
    69. while !(PunktSechs) do
    70. {
    71. _wpPunkt33 = _BlueforHunterEins addwaypoint [getmarkerpos "wpPunkt33", 0];
    72. _wpPunkt33 setWaypointType "Move";
    73. _wpPunkt33 setWaypointSpeed "Full";
    74. _wpPunkt33 setWaypointBehaviour "Safe";
    75. _wpPunkt33 setWaypointCombatMode "Red";
    76. _wpPunkt33 setWaypointFormation "Wedge";
    77. }
    78. };
    79. if !(PunktSieben) then
    80. {
    81. while !(PunktSieben) do
    82. {
    83. _wpPunkt34 = _BlueforHunterEins addwaypoint [getmarkerpos "wpPunkt34", 0];
    84. _wpPunkt34 setWaypointType "Move";
    85. _wpPunkt34 setWaypointSpeed "Full";
    86. _wpPunkt34 setWaypointBehaviour "Safe";
    87. _wpPunkt34 setWaypointCombatMode "Red";
    88. _wpPunkt34 setWaypointFormation "Wedge";
    89. }
    90. };
    91. if !(PunktAcht) then
    92. {
    93. while !(PunktAcht) do
    94. {
    95. _wpPunkt41 = _BlueforHunterEins addwaypoint [getmarkerpos "wpPunkt41", 0];
    96. _wpPunkt41 setWaypointType "Move";
    97. _wpPunkt41 setWaypointSpeed "Full";
    98. _wpPunkt41 setWaypointBehaviour "Safe";
    99. _wpPunkt41 setWaypointCombatMode "Red";
    100. _wpPunkt41 setWaypointFormation "Wedge";
    101. }
    102. };
    103. if !(PunktNeun) then
    104. {
    105. while !(PunktNeun) do
    106. {
    107. _wpPunkt42 = _BlueforHunterEins addwaypoint [getmarkerpos "wpPunkt42", 0];
    108. _wpPunkt42 setWaypointType "Move";
    109. _wpPunkt42 setWaypointSpeed "Full";
    110. _wpPunkt42 setWaypointBehaviour "Safe";
    111. _wpPunkt42 setWaypointCombatMode "Red";
    112. _wpPunkt42 setWaypointFormation "Wedge";
    113. }
    114. };
    115. if !(PunktZehn) then
    116. {
    117. while !(PunktZehn) do
    118. {
    119. _wpPunkt51 = _BlueforHunterEins addwaypoint [getmarkerpos "wpPunkt51", 0];
    120. _wpPunkt51 setWaypointType "Move";
    121. _wpPunkt51 setWaypointSpeed "Full";
    122. _wpPunkt51 setWaypointBehaviour "Safe";
    123. _wpPunkt51 setWaypointCombatMode "Red";
    124. _wpPunkt51 setWaypointFormation "Wedge";
    125. }
    126. };
    127. hint "Offensichtlich gibt's nichts mehr zu tun, Alles scheint unser zus sein!?";
    128. }
    129. };
    Alles anzeigen
    Die Fehlermeldung kommt bei Punkt "Fuenf"... "Typ Bool erwartet Code"
    Wenn ich "Fuenf" durch /*...*/ deaktiviere kommt die Fehlermeldung bei "Sechs"... Kurz gesagt: Die Fehlermeldung kommt bei allen Punkten die ich auf "false" gesetzt habe!
    Ich habe "Fuenf" dann in der Init.sqf den Wert "2" zugewiesen und den Code geändert:

    Quellcode

    1. if (PunktFuenf >=2) then
    2. {
    3. while (PunktFuenf >=2) do
    4. {
    5. _wpPunkt32 = _BlueforHunterEins addwaypoint [getmarkerpos "wpPunkt32", 0];
    6. _wpPunkt32 setWaypointType "Move";
    7. _wpPunkt32 setWaypointSpeed "Full";
    8. _wpPunkt32 setWaypointBehaviour "Safe";
    9. _wpPunkt32 setWaypointCombatMode "Red";
    10. _wpPunkt32 setWaypointFormation "Wedge";
    11. }
    12. };
    Alles anzeigen
    Und selbst da kam eine Fehlermeldung!

    Und jetzt weiß ich nicht mehr weiter! :S

    Habt Ihr einen Tip für mich?
  • der grund kann du dir eigendlich selbst beantworten wenn du schaust wie du PunktFuenf in der init.sqf definierst. es ist die erste die false ist und somit wenn man sie negiert true ist und somit in den code rein geht.

    als kleiner punkt in bezug auf Optimierung, Deine schleife wird geprüft und das so oft Pro frame wie arma schaft wodurch du andere scripts nicht ausführen lässt und warscheinlich sogar performance probleme bekommen wirst. du solltest über legen ob du nicht ein paar sleeps bzw waitUntils nutzt bzw nicht generell in den if waitUntils benutzt weil diese nur max 1x proframe prüfen. und es ist unmöglich das du intaframe änderungen an diesen stellen hast weil du eh nix anderes ausführen lässt mehr in diesem frame wo dein script läuft.
    Wer Rechtschreibfehler findet darf sie behalten
    ACE3 Core Developer
    CBA A3 Developer
    Developer of Lambs Danger, Dynasound, Enhance SoundScape, Immerse, Suppress and Align
  • Zuerst mal vielen Dank für Eure Antworten und Tips, die ich bei nächster Gelegenheit testen werde!

    @jokoho482: Je länger, bzw. je öfter ich Deinen Beitrag lese, desto mehr komme ich durcheinander und glaube, daß ich da offensichtlich etwas Grundlegendes falsch oder nicht vetstanden habe?

    Also, in der Init.sqf wird die Variable "PunktFuenf" als "false" definiert... Der Wert von Variable "PunktFuenf" ist gleich "false"... Punkt!
    In... meinem Konstrukt wird gefragt: if !(PunktFuenf) then (Wenn Variable "PunktFuenf" nicht true ist... Ist sie nicht, sie ist definitiv "false", wie in der Init.sqf definiert!
    Wie ich in einem anderen Beitrag gelernt habe, kann man Booleans nicht vergleichen, aber ich vergleiche ja nicht, ich frage lediglich:
    Ist Variable "PunktFuenf" nicht "true" (also "false")... Es gibt ja nur diese beiden Möglichkeiten!
    Oder ist Das nach Programmierlogik doch ein Vergleich? ?(

    Zitat: ...es ist die erste die false ist und somit wenn man sie negiert true ist und somit in den code rein geht.

    Aber... Wie frage ich denn ob eine Variable "true" oder "false" ist?
    Aber das wäre ja ein Vergleich, und Der ist mit Booleans nicht möglich, bzw. da war was mit ==?

    Was mich an der Sache darüber hinaus total verwirrt hat war, daß ich "true", bzw. "false" durch 2 (also eine Zahl) ersetzt habe (in der Init.sqf, sowohl als auch in meinem Konstrukt, also

    in der Init.sqf: PunktFuenf = 2; und

    Quellcode

    1. if (PunktFuenf >=2) then
    2. {
    3. while (PunktFuenf >= 2) do
    4. {
    5. _wpPunkt32 = _BlueforHunterEins addwaypoint [getmarkerpos "wpPunkt32", 0];
    6. _wpPunkt32 setWaypointType "Move";
    7. _wpPunkt32 setWaypointSpeed "Full";
    8. _wpPunkt32 setWaypointBehaviour "Safe";
    9. _wpPunkt32 setWaypointCombatMode "Red";
    10. _wpPunkt32 setWaypointFormation "Wedge";
    11. }
    12. };
    Alles anzeigen

    und es trotzdem noch eine Fehlermeldung gab, und wenn ich mich recht erinnere die Selbe? ?(

    Also, je mehr ich drüber nachdenke, desto verwirrter werde ich! ?(
  • Vergleiche gehen nur mit == oder !=
    while braucht einen CODE-Block, also geschweifte und nicht runde Klammern. Das hat er auch so geschrieben.
    Die if's sind vollkommen richtig, aber - wie ich erleutert habe - überflüssig, und die while's haben - wie jokoho erklärt hat - die falsche Syntax.
    Ich verstehe wirklich nicht, wo das Problem ist. Es wurden doch auch ausreichend korrekte Beispiele gepostet. Einfach mal Brille aufsetzten und genau hinschauen. Klammer ist nun mal nicht gleich Klammer.
  • Wenn die „korrekten Beispiele“ funktionieren und sich nicht ebenfalls mit Fehlermeldung verabschieden würden (wie übrigens das „korrekte Beispiel“ in diesem (armaworld.de/index.php?thread/…-gruppen-noch-existieren/) Beitrag auch), würde ich NICHTS (oder nur sehr wenig) lieber tun als mich entspannt zurück lehnen und spielen, anstatt dich hier mit dummen Fragen zu nerven!
    Übrigens habe ich mit runden, genauso wie mit geschweiften Klammern Fehlermeldungen (habe ich weiter oben beschrieben)!
    Aber zum Glück habe ich ja jetzt die Lösung aller Probleme: Ich besorge mir eine Brille und melde mich wieder wenn Alles funktioniert!