Einzelnen Beitrag anzeigen
Alt 27.02.2011, 15:36   #30 (permalink)
Anemia
500 Beiträge
 
Benutzerbild von Anemia
 
Registriert seit: 20.05.2009
Beiträge: 605
Standard

Zitat von Vienna Beitrag anzeigen

Wenn das mit diesem Abfrageteil and player countEnemy[_x]==1 nicht funktioniert, dann sind deine Testsoldaten keine Feinde.

Der Teil ist notwendig, damit eigene fliehende Einheiten nicht auch von der Routine betroffen sind.

Ohm das problem war das ich zu testzwecken der ki gleich in der init der einheit die waffen entzogen habe, dardurch wurde sie wohl nicht als feind erkannt.
Nun scheint alles zu funktionieren...
werde das nun mal im "kampf" erproben.

~~~~~~~~~~~~~~~
Surrender script
~~~~~~~~~~~~~~~
v.1 beta
~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~
Danke an euch (Vienna, Psychobastard, Buliwyf) ohne euch währe es sicherlich nur eine idee geblieben.

aufruf über die init.sqf

Code:
execVM "surrender\surrender.sqf";
surrender.sqf
Code:
    // -----------------------------------------------
    // Author: Anemia
    // welcome to the jungle
    // -----------------------------------------------

while {true} do
  {
    {
      if (fleeing _x and player countEnemy[_x]==1) then 
        {
          //Ist der Fliehende noch nicht in der Gruppe des Spielers?
          if (NOT(_x in units group player)) then
            {
              removeAllWeapons _x;  // dem "Gefangenen" alle Waffen entfernen
              // Den Flüchtenden in die Gruppe des Spielers aufnehmen
              [_x] joinSilent group player;  //Der Spieler erhält die Kontrolle über _x
              //Aktion dem "Gefangen" hinzufügen
              _x addAction ["Arrest","surrender\gotojail.sqf"];
player groupChat format["%1  Feind? %3 Animation %2",_x,_animi,player countEnemy[_x]==1];
              // Achtung! im Skript der Aktion ist der Gefangene aus der Gruppe zu entfernen!
              // Natürlich erst dann, wenn er außer "Reichweite" dieser Routine ist.  
            }
        }
    } forEach nearestObjects [player, ["Man"], 50];
    sleep 1
  };
gotojail.sqf
Code:
    // -----------------------------------------------
    // Author: Anemia
    // welcome to the jungle
    // -----------------------------------------------




_unit = _this select 0;



    if(alive _unit) then {
        _unit playMoveNow "AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon";
        _unit disableAI "MOVE";
        _unit disableAI "ANIM";
        sleep 10;
        _unit setpos getmarkerpos "jail";
        [_unit] joinSilent group prisoner;
        _unit allowdammage false;
        _unit setUnitPos "Up"; 
        dostop _unit;
        
    };
über den Editor muss noch eine Markierung mit namen " jail " plaziert werden. Das ist der ort an den die gefangenen gebeamt werden.



Nun habe ich noch eine weitere hürde entdeckt.

Das script wie es ist erkennt nun fliehende feindliche einheiten. Über das Surrender Modul verhalten sich die KI einheiten allerdings so das sie erst mit waffe weg laufen, wenn sie sich dann ergeben legen sie die waffen nieder und heben die hände über den kopf. Diese einheiten fliehen dann ja nicht sondern haben sich schon ergeben. Dardurch fallen sie durch das rasta des scriptes

Dafür dache ich kann ich eine abfrage einbauen ob eine feindliche einheit in meinem umkreis die animation ausführt, es funktioniert aber mal wieder nicht...


Code:
    // -----------------------------------------------
    // Author: Anemia
    // welcome to the jungle
    // -----------------------------------------------

while {true} do
  {
    {
_animi = animationState _x;
if (_animi == "AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon" AND side _x == east OR side _x ==CIV) then
     {
        // Den Flüchtenden in die Gruppe des Spielers aufnehmen
                  [_x] joinSilent group player;  //Der Spieler erhält die Kontrolle über _x
                  //Aktion dem "Gefangen" hinzufügen
                  _x addAction ["Arrest","surrender\gotojail.sqf"];
    }
if (fleeing _x and player countEnemy[_x]==1) then 
        {
          //Ist der Fliehende noch nicht in der Gruppe des Spielers?
          if (NOT(_x in units group player)) then
            {
              removeAllWeapons _x;  // dem "Gefangenen" alle Waffen entfernen
              // Den Flüchtenden in die Gruppe des Spielers aufnehmen
              [_x] joinSilent group player;  //Der Spieler erhält die Kontrolle über _x
              //Aktion dem "Gefangen" hinzufügen
              _x addAction ["Arrest","surrender\gotojail.sqf"];
          player groupChat format["%1  Feind? %3 Animation %2",_x,_animi,player countEnemy[_x]==1];
              // Achtung! im Skript der Aktion ist der Gefangene aus der Gruppe zu entfernen!
              // Natürlich erst dann, wenn er außer "Reichweite" dieser Routine ist.  
            }
        }
    } forEach nearestObjects [player, ["Man"], 50];
    sleep 1
  };

Mir sind 2 animationen bekannt , die den gleichen effeckt zu haben scheinen.

AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon
und
AmovPercMstpSsurWnonDnon
scheinen den gleichen effekt zu haben, deshalb hab ich das script oben auch schon in beiden varriationen getestet , beides leider ohne erfolg.
Anemia ist offline