Einzelnen Beitrag anzeigen
Alt 07.07.2016, 22:59   #4 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.192
Standard

SetDamage False bedeutet, dass der Player auch nicht die KI töten kann.

Das kann man aber trotzdem mit Event Handlern abfangen.

Hier, habe ich dir mit Kommentaren für jeden einzelnen Schritt gebastelt, bei Fragen hier einfach wieder was posten:

Code:
_aiUnits = []; /// Define a list (Array) 
{
    if (!isPlayer _x) then { /// If _x (counter, part of foreach loop) is not player

          _aiUnits pushback _x; /// add _x to _aiUnits list. We need this array later.
          
      };
} forEach allUnits;  /// For each units which has been placed on the map

{
       _x addEventHandler ["HandleDamage",  /// Add HandleDamage Event Handler to all AI units which we have assigned in _aiUnits
        { 
            _unit = _this select 0;    /// _unit is the same as _this select 0 (_this select 0 = unit: Object - Object the event handler is assigned to. Source = https://community.bistudio.com/wiki/Arma_3:_Event_Handlers#HandleDamage)
            _shooter = _this select 3, /// this select 3 is the source which caused the damage, so we call it _shooter
            
            if (_shooter isEqualTo player) then {        /// here we check if the shooter is equal to the actual player
        
                                                        /// I did it this way, so you can assign a command to what should happen when player hit an AI 
            }
            else {

                _unit setDamage 0;                        /// If AI hits another AI we set the damage to 0 which means the unit is fully "repaired"
                
            }
        }
    ];
} forEach _aiUnits;                                        /// Here we have a forEach loop. Foreach _aiUnits do this.

Jetzt bist du in der Lage die KI zutöten, diese aber sich selbst nicht.

Möchtest du das alle Einheiten sich nicht killen können, einfach { _x allowDamage false;} foreach allUnits eingeben und fertig. So brauchst du es nicht in jeder einzelnen Zeile angeben, falls du Gruppen platziert hast.

PS:
Falls nötig die Beschreibung.

Das Script wird folgendermaßen deployed:


In deinem Missionsordner legst du eine SQF Datei an (neues Textdokument -> speichern unter -> alle Dateitypen auswählen -> script.sqf

Dann, irgendwo im Spiel (Init einer Einheit, Auslöser oder in der Console (ingame Esc drücken)), und
"_nul = [] execVM "script.sqf " eingeben / einfügen. Somit wird das Script, welches in deinem Missionsordner ist, ausgeführt!

Geändert von JSR (07.07.2016 um 23:35 Uhr).
JSR ist offline