1 ARMA 3 - MISSION EDITING & SCRIPTING Arma 3 - Flakfeuer simulieren
Arma 3 - Flakfeuer simulieren
Quelle: Gametwitter.de Forum | views: 104

In Vietnam oder auch Weltkrieg Szenarien nutze ich seit kurzem ein Skript, das ich mal im Bohemia Forum gefunden habe. Hierbei ging es um die Frage, wie man Flakfeuer um ein Flugzeug oder Helikopter simulieren könnte. Es sollte dabei auch die Möglichkeit von Verletzungen an der Besatzung und Passagieren bestehen.

Es wird in diesem Beispiel später eine Datei benötigt, namens flak.sqf.

Dazu später mehr. Für Immersion in der Mission ist auf jeden Fall hiermit gesorgt!

Beim dem Aufbau der Mission wird zunächst die Flugabwehr Tigris auf der Map platziert. Natürlich möglichst im Zielbereich mit einer Entfernung von 2-3 km bzw. auf dem Weg in das Zielgebiet ist es natürlich auch möglich.

In die INIT Zeile des Tigris kommt folgender Codeschnipsel:

this hideObject true;
this removeMagazinesTurret ["4Rnd_Titan_long_missiles", [0]]; 
this addEventHandler ["Fired", {deleteVehicle (_this select 6); _this execVM "flak.sqf";}];

In dem obigen Codeschnipsel wird die Tigris unsichtbar gesetzt. Die Raketen entfernt. In der Regel setze ich ein bewachte, aber nicht besetzte, Flak (z.b. eine ZU) in die Nähe falls die Spieler doch den Plan entwickeln sollten diese für einen Anflug auszuschalten. Sollte die ZU zerstört werden lösche ich natürlich per Trigger die Tigris aus der Mission.

Die flak.sqf wurde vom Autor gut kommentiert, so das das Skript auch den eignen Bedürfnissen angepasst werden kann.

Der Inhalt der flak.sqf

//Maximum distance target can be for flak to activate
_maxDistance = 4000;

//When Flak Tigris has less than this ammo count (total ammo 680) it will spawn flak.  IE value 678 will spawn one flak per three shots.
_ammoCountForFlak = 677;

//Linear Dispersion when speed is zero, dispersion added is zero.  When speed is 100 km/h, dispersion will equal this variable
_speedDispersion = 20;

//Linear Dispersion when distance is zero, dispersion added is zero.  When distance is 500m, dispersion will equal this variable
_distanceDispersion = 10;

//Height target must be for flak to activate (IE target can fly "under the radar")
_targetMinHeight = 20;


//END Editable variables

_unit = _this select 0;
if (_unit ammo "autocannon_35mm" < _ammoCountForFlak) then {
    (_unit) setAmmo ["autocannon_35mm", 680];
    _tarPos = [];
    _target = 0;
    if (isPlayer (assignedGunner _unit)) then {
        _target = cursorTarget;
        if (_unit distance _target < _maxDistance) then {
            _tarPos = getPos _target;
        };
    } else {
        _possTar = _unit nearTargets _maxDistance;
        if ((count _possTar) > 0) then {
            _i = 0;
            _hold = 0;
            {    
                _i = _unit aimedAtTarget [_x select 4,"autocannon_35mm"];
                if (_i > _hold && (_x select 3) > 0) then {
                    _target = _x select 4;
                    _tarPos = _x select 0;
                    _hold = _i;
                };
            } forEach _possTar;
        };
    };
    if ((count _tarPos) > 0) then {
        _tarX = _tarPos select 0;
        _tarY = _tarPos select 1;
        _tarZ = _tarPos select 2;
        if (_tarZ > _targetMinHeight) then {
            if !(lineIntersects [getPos _unit, _tarPos, _unit, _target]) then {
                _flakDis = ((speed _target) * (_speedDispersion / 100)) + ((_unit distance _target) * (_distanceDispersion / 500));
                _disX = ((random (_flakDis * 2)) - _flakDis) + _tarX;
                _disY = ((random (_flakDis * 2)) - _flakDis) + _tarY;
                _disZ = ((random (_flakDis * 2)) - _flakDis) + _tarZ;
                _flak = createVehicle ["SmallSecondary",[_disX, _disY, _disZ],[],0,"CAN_COLLIDE"];
            };
        };
    };
};    

Eine Kommentarfunktion ist in diesem Blog nicht vorgesehen.
Bei Problemen zum Skript bitte im Gametwitter.de Forum registieren und dort die Kommentarfunktion nutzen.