B_G_Soldier_F vs. O_Soldier_F - Side Zugehörigkeit East erzwingen

  • Hallo zusammen,


    kann mir jemand erklären, warum folgender Code wunderbar funktioniert:

    Code
    1. private _gruppe = createGroup east;
    2. private _einheit = _gruppe createUnit ["O_Soldier_F", _spawnPos, [], 15, "NONE"];

    Aber bei folgendem Code (man beachte: nur anderer Klassenname) immer eine Einheit entsteht die der Side "west" angehört.



    Code
    1. private _gruppe = createGroup east;
    2. private _einheit = _gruppe createUnit ["B_G_Soldier_F", _spawnPos, [], 15, "NONE"];


    Das Problem: Die O_Soldier_F Einheiten schießen brav NICHT aufeinander und gehören der Gruppe east an wie gewünscht. Die B_G_Soldier_F schießen sich gegenseitig über den Haufen und gehören seltsamerweise der side west an obwohl sie in einer east Gruppe gegründet wurden.



    Gruß,


    Schmitt

  • Versuchs mal mit join:


    C
    1. _gruppe = createGroup east;
    2. _einheit1 = _gruppe createUnit ["O_Soldier_F", _spawnPos, [], 15, "NONE"];
    3. _einheit2 = _gruppe createUnit ["B_G_Soldier_F", _spawnPos, [], 15, "NONE"];
    4. systemChat format ["vor join: %1,%2",side _einheit1,side _einheit2]; // vor join: east,west
    5. [_einheit2] join _gruppe;
    6. systemChat format ["nach join: %1,%2",side _einheit1,side _einheit2]; // nach join: east,east

    createUnit aus der Wiki, letzter Hinweis von Ffur2007slx2_5.



    Es steht auch nicht in der Wiki, das "createUnit" die side einer Einheit verändert.
    Und alles was nicht in der Wiki steht, existiert eben nicht.


    Edit:
    Leider steht da aber auch nichts bei join.
    Müsste mal jemand nachtragen.

  • Finde ich nicht so gut, manchmal will ich verschiedene Seiten in einer Gruppe haben, z.B. bei einer Gefangennahme.Wenn die Gruppenzuweisung automatisiert wird, muß man es dann wieder rückgängig machen.

    Man modifiziert ja nicht die Einheit selbst, sondern erstellt eine Vererbung:

    Code
    1. class B_G_Soldier_F;
    2. class O_B_G_Soldier_F : B_G_Soldier_F {
    3. side = 0;
    4. /*
    5. Hier noch einige weitere Eigenschaften,
    6. welche modifiziert werden sollten.
    7. Wie Bspw. Sortierung im Editor, Curator
    8. */
    9. };

    Aber das ist nicht für einen Einzelfall sinnvoll, sondern eher wenn man es häufiger nutzen will.

  • Wenn es darum geht, eine beliebige Einheit einer vorbestimmten Seite zu erzeugen, gibt es so viele Möglichkeiten...
    Erstens: https://community.bistudio.com/wiki/BIS_fnc_spawnGroup
    Zweitens: O_G_Soldier_F verwenden (https://community.bistudio.com/wiki/Arma_3_CfgVehicles_EAST)
    Drittens: Einheiten spawnen und dann mit einer Funktion wie dieser https://github.com/Pergor/ADV_…nctions/AI/fn_setSide.sqf die Seite wechseln.



    Die Frage ist aber, worum es hier wirklich geht. Ist es nur akademisches Interesse, warum der genannte Code nicht die Seite wechselt? Dann ist es wohl leicht erklärt: Einfach nur eine Einheit in eine durch createGroup erzeugte Gruppe zu spawnen scheint die Seiten-Zugehörigkeit der Gruppe zu der der Einheit zu wechseln. Das ist alles.


    Ich würde mal spontan vermuten, dass die Seiten-Zugehörigkeit der B_G_-Einheiten auf east wechseln würde, wenn die erste (und/oder ranghöchste) Einheit in der Gruppe side east wäre:

    C
    1. private _gruppe = createGroup east;
    2. private _einheit = _gruppe createUnit ["B_G_Soldier_F", _spawnPos, [], 15, "NONE"];

    -> side _gruppe wird zu west.

    Code
    1. private _gruppe = createGroup east;
    2. private _einheit_1 = _gruppe createUnit ["O_Soldier_F", _spawnPos, [], 15, "NONE"];
    3. _einheit_1 setRank "CORPORAL";
    4. private _einheit_2 = _gruppe createUnit ["B_G_Soldier_F", _spawnPos, [], 15, "NONE"];

    - side _gruppe müsste east sein.


    Zusätzlich könntest du dir mit sowas wie
    hint format ["Seite der Einheit: %1, Seite der Gruppe: %2",(side _einheit), side (_gruppe)];
    mal anschauen, ob es da Unterschiede gibt, um herauszufinden, was genau passiert.