Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 27.02.2011, 13:32   #21 (permalink)
500 Beiträge
 
Benutzerbild von Anemia
 
Registriert seit: 20.05.2009
Beiträge: 605
Standard

Zitat von Buliwyf Beitrag anzeigen

Mit der ID wirst Du nicht weit kommen, weil jeder neuer AddAction-Eintrag auch eine neue ID bekommt.

Vielmehr könntest Du mit zB _x setVariable ["ARRESTED", true, true]; einen Gefangenen markieren und Deine Bedingung erweitern, in dem Du if (_animi == "AmovPercMstpSsurWnonDnon" AND not (_x getVariable "ARRESTED")) then { hinzufügst.

Hmmm verdammt was ist nun schon wieder falsch ?!?!?!
nach meinem verständniss habe ich unten nun stehen

Code:
wenn _animi == gewünschtebewegung und _x ist nicht auf ARRESTED gesetzt dann
{
_x = ARRESTED
_x = Addaction hinzufügen
}

Sonst
{
wenn _x aufderflucht dann _animi gleich bewegung von _X
wenn bewegung von _x die gewünschte bewegung dann keinebewegung.
  sonst
    {
  _x führt die gewünschte bewegung aus
    }

}
Code:
while {true} do {
if (_animi == "AmovPercMstpSsurWnonDnon" AND not (_x getVariable "ARRESTED")) then {
_x setVariable ["ARRESTED", true, true];
_x addAction ["Arrest","surrender\gotojail.sqf"];
}
else{


    {if (fleeing _x ) then {
        _animi = animationState _x;
        if (_animi == "AmovPercMstpSsurWnonDnon") then {
            _x disableAI "ANIM";
            

        } else {
            player groupChat format["%1  Feind? %3 Animation %2",_x,_animi,player countEnemy[_x]==1];
            
            _x switchmove "AmovPercMstpSsurWnonDnon";
        };

    };} forEach nearestObjects [player, ["Man"], 50];
    sleep 0.1;
};

};
Also entweder habe ich einen grundlegenden verständniss fehler oder ich hab irgendwo wieder ein doofes satzzeichen vergessen.
Anemia ist offline  
Alt 27.02.2011, 13:42   #22 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 38
Beiträge: 1.737
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

das sollte wohl eher so gemeint sein...
Code:
while {true} do {
    {if (fleeing _x ) then {
        _animi = animationState _x;
        if (_animi == "AmovPercMstpSsurWnonDnon" AND not (_x getVariable "ARRESTED")) then {
            _x disableAI "ANIM";
            _x addAction ["Arrest","surrender\gotojail.sqf"];
            _x setVariable ["ARRESTED", true, true];
        } else {
            player groupChat format["%1  Feind? %3 Animation %2",_x,_animi,player countEnemy[_x]==1];
           
            _x switchmove "AmovPercMstpSsurWnonDnon";
        };
    };} forEach nearestObjects [player, ["Man"], 50];
    sleep 0.1;
};
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___
Pfandgiraffe ist offline  
Alt 27.02.2011, 13:48   #23 (permalink)
500 Beiträge
 
Benutzerbild von Anemia
 
Registriert seit: 20.05.2009
Beiträge: 605
Standard

Zitat von Psychobastard Beitrag anzeigen

das sollte wohl eher so gemeint sein...

Code:
while {true} do {
    {if (fleeing _x ) then {
        _animi = animationState _x;
        if (_animi == "AmovPercMstpSsurWnonDnon" AND not (_x getVariable "ARRESTED")) then {
            _x disableAI "ANIM";
            _x addAction ["Arrest","surrender\gotojail.sqf"];
            _x setVariable ["ARRESTED", true, true];
        } else {
            player groupChat format["%1  Feind? %3 Animation %2",_x,_animi,player countEnemy[_x]==1];
           
            _x switchmove "AmovPercMstpSsurWnonDnon";
        };
    };} forEach nearestObjects [player, ["Man"], 50];
    sleep 0.1;
};


Funktioniert leider nicht , nun laufen einfach alle soldaten weg ohne irgendwas zu machen....
Anemia ist offline  
Alt 27.02.2011, 13:51   #24 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 52
Beiträge: 1.930
Standard

Die Zeile _x setVariable ["ARRESTED", true, true]; muss nicht in das Script, sondern in das, welches Du per ActionMenu-Eintrag aufrufst. Also in die gotojail.sqf...

Dort musst Du das _x ersetzen, durch zB _this select 0.

__________________
Buliwyf ist offline  
Alt 27.02.2011, 14:02   #25 (permalink)
500 Beiträge
 
Benutzerbild von Anemia
 
Registriert seit: 20.05.2009
Beiträge: 605
Standard

Zitat von Buliwyf Beitrag anzeigen

Die Zeile _x setVariable ["ARRESTED", true, true]; muss nicht in das Script, sondern in das, welches Du per ActionMenu-Eintrag aufrufst. Also in die gotojail.sqf...

Dort musst Du das _x ersetzen, durch zB _this select 0.


Derzeit taucht der addaction eintrag nicht bei den ki einheiten auf ?!


Um evtl. verwirrung zu vermeiden hier mal der zwischenstand....


~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~
Derzeit gibt es 2 Datein...
surrender.sqf
gotojail.sqf

Die surrender.sqf ruffe ich in der init.sqf auf.
Code:
execVM "surrender\surrender.sqf";
surrender.sqf
Code:
while {true} do {
    {if (fleeing _x ) then {
        _animi = animationState _x;
        if (_animi == "AmovPercMstpSsurWnonDnon" AND not (_x getVariable "ARRESTED")) then {
            _x disableAI "ANIM";
            _x addAction ["Arrest","surrender\gotojail.sqf"];
            _x setVariable ["ARRESTED", true, true];
        } else {
            player groupChat format["%1  Feind? %3 Animation %2",_x,_animi,player countEnemy[_x]==1];
           
            _x switchmove "AmovPercMstpSsurWnonDnon";
        };
    };} forEach nearestObjects [player, ["Man"], 50];
    sleep 0.1;
};
gotojail.sqf
Code:
_unit = _this select 0;



    if(alive _unit) then {
        sleep 5;
        _unit setpos getmarkerpos "jail";
        [_unit] joinSilent group prisoner;
        _unit allowdammage false;
        _unit setUnitPos "Up"; 
        dostop _unit;
        _unit playMoveNow "AmovPercMstpSnonWnonDnon_AmovPercMstpSsurWnonDnon";
        _unit disableAI "MOVE";
        _unit disableAI "ANIM";
    };
Anemia ist offline  
Alt 27.02.2011, 14:07   #26 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Wie ich bereits sagte, übernimmst du den Flüchtenden ohne Waffen in deine Gruppe. Dann weist du ihm die Aktion zu.

Durch die Abfrage, ob er in deiner Gruppe ist, sind Wiederholungen ausgeschlossen. Wenn er aus Reichweite der Routine ist, dann entfernst du ihn wieder aus deiner Gruppe.

Solange er in deiner Gruppe ist, kannst du Animationen vergessen. Im Arrest "frierst" du ihn dann mit den Händen über dem Kopf ein.

Es ist von Vorteil wenn du ihn in deine Gruppe übernimmst, dann läuft er automatisch zu dir und du kannst dann seine Aktion anklicken.

Allerdings könntest du ihn auch in der Routine -ohne Gruppenübernahme und Aktion- gleich in den Arrest beamen. Du setzt die Animation und den Bewegungsstop, dann beamst du ihn in den Arrest.

Code:
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"];
              // 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
  };
Vienna ist offline  
Alt 27.02.2011, 14:31   #27 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Wenn du die KI nicht in deine Gruppe aufnehmen willst, dann kannst du die Wiederholung in der schleife auch so verhindern:

Code:
while {true} do
  {
    {
      if (fleeing _x and player countEnemy[_x]==1) then 
        {
          if (NOT(stopped _x)) then
            {
               _x stop true;
               removeAllWeapons _x;
               _x switchMove "AmovPercMstpSsurWnonDnon";
               _x disableAI "ANIM";
               ...;
               ...;
            }
        }
    } forEach nearestObjects [player, ["Man"], 50];
    sleep 1
  }

Geändert von Vienna (27.02.2011 um 14:33 Uhr).
Vienna ist offline  
Alt 27.02.2011, 14:34   #28 (permalink)
500 Beiträge
 
Benutzerbild von Anemia
 
Registriert seit: 20.05.2009
Beiträge: 605
Standard

Zitat von Vienna Beitrag anzeigen


Code:
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"];
              // 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
  };
Das script funktioniert soweit , allerdings nur wenn ich den fett markierten bereich rauslösche. sonsten hat es keinen effect auf die flüchtenden einheiten.

if (fleeing _x and player countEnemy[_x]==1)

auch das mit dem addaction eintrag funktioniert nun vernünftig. die einheiten werden nach dem ins gefängniss beamen einer anderen gruppe zu geordnet und fliegen somit aus meiner gruppe raus.

Habe auch in der gotojail.sqf noch die animation hinzugefügt, so das wenn man einen typen verhaftet, er die arme hochnimmt und dann nach 10 sek weggebeamt wird.

gotojail.sqf

Code:
_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;
        
    };
Anemia ist offline  
Alt 27.02.2011, 15:06   #29 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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.
Vienna ist offline  
Alt 27.02.2011, 16:36   #30 (permalink)
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  
Alt 27.02.2011, 18:30   #31 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Die KI flieht mit und ohne Waffen. Wenn sie dann in deiner Gruppe ist, so flieht sie nicht mehr. Der Status fürs Fliehen ist dann aufgehoben.

So wäre die Abfrage, ob die KI in deiner Gruppe ist, eigentlich nicht notwendig.

Wie dieses Beispiel zeigt. Auch wird dir hier nicht nur der Feindstatus, sondern auch der Fluchtstatus angezeigt.

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

while {true} do
  {
    {
      if (fleeing _x and player countEnemy[_x]==1) 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? %2 | Fluchtstatus? %3",name _x, player countEnemy[_x]==1,fleeing _x];
        }
    } forEach nearestObjects [player, ["Man"], 50];
    sleep 1
  };
Ich würde die Aktion gar nicht einbinden, sondern den Skriptaufruf gleich anstelle der Aktion eingeben. Wenn die KIs zuvor einem Wegpunkt folgten, dann kann es sein, dass sie nicht zu dir kommen und auch Befehle nicht richtig ausführen.
Vienna ist offline  
 


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Beta-Patch für OpA erschienen det99 Community 1429 18.07.2014 17:51
Day & Weather Script Moerderhoschi Editing & Scripting 13 02.12.2012 11:29
UAV Modul nur für den Teamleader SniperWolf Editing & Scripting 2 24.01.2011 16:58
marker über script erzeugen hypercop Editing & Scripting 2 28.08.2010 23:40
Improved Bullet Cam Script miromanu Editing & Scripting 3 21.08.2010 02:01


Kontakt - HX3.de - Archiv - Nach oben

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias



SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119