"param"-Befehl Hilfe

  • Hallo Leute,



    ich möchte für eine Funktion optionale Argumente ermöglichen, was soweit auch funktioniert.


    Jetzt würde ich die Funktion allerdings gerne abändern, um stattdessen den param-Befehl zu nutzen, habe damit allerdings Probleme und würde mich über Hilfe freuen.


    Hier erst einmal der funktionierende Code:



    Und das hier ist, was ich u.a. bisher probiert habe:


    Code
    1. _param1a = if (count _this > 1) then {param [1,0,[[0,0,0]],[3]]; _array1 pushback _param1a;};
    2. _param1b = if (count _this > 2) then {param [2,0,[0],[1]]; _array1 pushback _param1b;};


    Wenn ich es so formuliere,


    Code
    1. _param1a = param [1,0,[[0,0,0]],[3]]; _array1 pushback _param1a;
    2. _param1b = param [2,0,[0],[1]]; _array1 pushback _param1b;
    3. _param2a = param [3,0,[[0,0,0]],[3]]; _array2 pushback _param2a;
    4. _param2b = param [4,0,[0],[1]]; _array2 pushback _param2b;


    bin ich ja gezwungen, sämtliche Argumente anzugeben.


    Die Funktion rufe ich über [this,[0,0,0],0,[0,0,0],0] call fnc_x; auf.




    Danke und Grüße.
    smile:)

  • das sollte so funktionieren

  • Eine Frage hätte ich da noch. Wie schafft man es denn, dass nur die params im _array landen, die im call genutzt werden?


    [this,[0,0,0],0] call fnc_x


    Das wären bei mir jetzt _param1a (position) und _param1b (direction), die in _array1 (positions) und _array2 (directions) gelangen sollen.
    _param2a und _param2b habe ich im call ja nicht definiert und diese sollen dann auch in der Funktion selbst "deaktiviert"/"ignoriert" werden.


    Ändere ich in der Funktion params [] zu,

    Code
    1. ...],
    2. ["_param2a", nil],
    3. ["_param2b", nil]
    4. ];

    , dann habe ich in _array1 und _array2 jeweils ein Element "any". Die stören dann leider den Ablauf.



    Grüße.
    smile:)

  • C
    1. params [["_param2a", nil], ["_param2b", nil]];
    2. params ["_param2a", "_param2b"];

    Zeile 1 macht keinen Sinn. Da kann man gleich stattdessen Zeile 2 schreiben, wenn man als Default-Wert nur nil angibt.




    Zitat

    Wie schafft man es denn, dass nur die params im _array landen, die im call genutzt werden


    Der Satz ist irgendwie unvollständig. Was ist _array ? Was bedeutet "im call genutzt werden"? Du solltest allgemein etwas verständlichere Variablennamen benutzen. "_param2a" und "_param2b" kann alles mögliche sein.

  • Ah, sorry, ich hatte alles umbenannt, um es genereller zu halten. Hier in der Datei habe ich aussagekräftigere Namen vergeben.
    Mit _array meinte ich _array1 und _array2 in Post #2.


    Konkret sieht es bei mir gerade so aus:




    Wenn ich jetzt allerdings z.B. [p2,[3144.13,3984.86,1.24656],115] call fnc_randPosDir ausführe, dann sind ja in der Funktion nur _pos1 und _dir1 von mir angesprochen -> in den Arrays _pos und _dir landen aber auch jeweils die default-Werte von _pos2+_pos3 und _dir2+_dir3 und das würde ich gerne unterbinden. Ich möchte, dass es so gehandhabt wird, wie in Post #1 in der ursprünglichen Form der Funktion, allerdings den param-Befehl verwenden.


    Ich hoffe, ich konnte es jetzt besser erklären.
    ^^



    Grüße.
    smile:)

  • so Doch etwas Früher :D
    Jedoch ändert sich die Syntax Minimal


    sie sieht nun so aus
    [p2,[[3144.13,3984.86,1.24656],115]] call fnc_randPosDir[/i]


    und kann unendlich viele Positionen enthalten ohne das du in probleme bekommst solange du nicht 1E6 überschreibest ;D

  • Ich danke dir vielmals für deine Zeit! Ich wollte gerade fragen, wie ich die Funktion denn jetzt callen kann ^^


    Momentan wirft er leider noch eine Fehlermeldung für Zeile 15 aus.
    Error Allgemeiner Fehler in Audruck.


    Und p2 bleibt unbewegt auf seiner Startposition.



    Grüße.
    smile:)

  • hier ist noch mal eine Function mit erweiterter Syntax wo man auch dir weglassen kann und Objecte und Marker als Position angeben kann von dem dann die Rotation und Position auslesen kann :D

  • Gerade getestet:
    [p2,[[3144.13,3984.86,1.24656],115]] call fnc_randPosDir



    Line 11
    Error Fehlende )


    p2 unverändert an seiner Startposition.



    Könnte man auch noch die Körperhaltung mit in die Argumente nehmen? ^^

    Code
    1. if ((_stances select _dice) isEqualTo "R") then {
    2. _stance = ["MIDDLE","UP"];
    3. _stanceDice = floor (random (count _stance));
    4. _stanceDice = _stance select _stanceDice;
    5. _unit setUnitPos _stanceDice;};
    6. if ((_stances select _dice) isEqualTo "U") then {_unit setUnitPos "UP"};
    7. if ((_stances select _dice) isEqualTo "M") then {_unit setUnitPos "MIDDLE"};


    Eventuell der Vollständigkeit halber dann vielleicht noch "A" für automatisch und "D" für liegend(?)



    Und als i-Tüpfelchen den KI-Skill, z.B. -1 für den generellen MissionsSkill, 0 für Random, 1,2,3 für jeweils erhöhte Werte? Die Werte für 0-3 könnte man dann ja in der Funktion je nach Bedürfnis selbst bestimmen.



    Grüße.
    smile:)

  • Hey,


    so funktioniert auf jeden Fall schon einmal der Code aus Post #8.



    [p2,[ [[3144.13,3984.86,1.24656],0], [[3144.13,3984.86,1.24656],90],[[3144.13,3984.86,1.24656],180]]] call fnc_randPosDir


    Bei Post #13 müsste isEqualToType wohl isEqualType heißen, damit funktioniert's aber auch noch nicht.



    Grüße.
    smile:)