diff --git a/@AresModAchillesExpansion/addons/functions_f_achilles/functions/features/fn_chute.sqf b/@AresModAchillesExpansion/addons/functions_f_achilles/functions/features/fn_chute.sqf
index 214fe506..33a532eb 100644
--- a/@AresModAchillesExpansion/addons/functions_f_achilles/functions/features/fn_chute.sqf
+++ b/@AresModAchillesExpansion/addons/functions_f_achilles/functions/features/fn_chute.sqf
@@ -28,19 +28,30 @@ if (!isPlayer _unit) then
moveOut _unit;
unassignVehicle _unit;
[_unit] orderGetIn false;
- sleep 1;
- // if the unit already has a chute
- if (backpack _unit != "" and {getText (configfile >> "CfgVehicles" >> backpack _unit >> "backpackSimulation") isEqualTo "ParachuteSteerable"}) then
+ private _backpackClass = backpack _unit;
+ if (_backpackClass != "") then
{
+ private _container = backpackContainer _unit;
+ private _weapon_cargo = getWeaponCargo _container;
+ private _magazine_cargo = getMagazineCargo _container;
+ private _item_cargo = getItemCargo _container;
+
+ removeBackpack _unit;
+ waitUntil {sleep 1; !alive _unit || getPos _unit select 2 < 150};
+ private _chuteClass = ["b_parachute", _backpackClass] select (getText (configfile >> "CfgVehicles" >> _backpackClass >> "backpackSimulation") isEqualTo "ParachuteSteerable");
+ _unit addBackpack _chuteClass;
_unit action ["openParachute"];
+ _unit addBackpack _backpackClass;
+ _container = backpackContainer _unit;
+ {_container addWeaponCargo [_x, (_weapon_cargo select 1) select _forEachIndex]} forEach (_weapon_cargo select 0);
+ {_container addMagazineCargo [_x, (_magazine_cargo select 1) select _forEachIndex]} forEach (_magazine_cargo select 0);
+ {_container addItemCargo [_x, (_item_cargo select 1) select _forEachIndex]} forEach (_item_cargo select 0);
} else
{
- private _chute = "Steerable_Parachute_F" createVehicle [0,0,0];
- _chute setPos (getPos _unit);
- _chute setDir (getDir _unit);
- _chute setVelocity (velocity _unit);
- _unit moveInDriver _chute;
+ waitUntil {sleep 1; !alive _unit || getPos _unit select 2 < 150};
+ _unit addBackpack "b_parachute";
+ _unit action ["openParachute"];
};
// prevent AI to be killed by fall damage
waitUntil {isTouchingGround _unit or (!alive _unit)};
@@ -61,6 +72,7 @@ if (!isPlayer _unit) then
private _weapon_cargo = getWeaponCargo _container;
private _magazine_cargo = getMagazineCargo _container;
private _item_cargo = getItemCargo _container;
+
removeBackpack _unit;
_unit addBackpack "b_parachute";
private _packHolder = createVehicle ["groundWeaponHolder", [0,0,0], [], 0, "can_collide"];
diff --git a/@AresModAchillesExpansion/addons/language_f/stringtable.xml b/@AresModAchillesExpansion/addons/language_f/stringtable.xml
index 6ed25d00..91704fc4 100644
--- a/@AresModAchillesExpansion/addons/language_f/stringtable.xml
+++ b/@AresModAchillesExpansion/addons/language_f/stringtable.xml
@@ -2293,6 +2293,12 @@
距離
距离
+
+ Precision [m]
+ Precision [m]
+ Précision [m]
+ Ungenauigkeit [m]
+
Range [m]
Range [m]
diff --git a/@AresModAchillesExpansion/addons/modules_f_ares/FireSupport/functions/fn_FireSupportArtilleryFireMission.sqf b/@AresModAchillesExpansion/addons/modules_f_ares/FireSupport/functions/fn_FireSupportArtilleryFireMission.sqf
index 11d32983..41ad88e7 100644
--- a/@AresModAchillesExpansion/addons/modules_f_ares/FireSupport/functions/fn_FireSupportArtilleryFireMission.sqf
+++ b/@AresModAchillesExpansion/addons/modules_f_ares/FireSupport/functions/fn_FireSupportArtilleryFireMission.sqf
@@ -7,7 +7,7 @@
#include "\achilles\modules_f_ares\module_header.hpp"
-private ["_objects","_guns","_rounds","_ammo","_targetPos", "_artilleryAmmoDisplayName", "_ammoSelectedDisplayName"];
+private ["_objects","_guns","_rounds","_ammo","_targetPos", "_artilleryAmmoDisplayName", "_ammoSelectedDisplayName", "_precision"];
_objects = nearestObjects [(_this select 0), ["All"], 150, true];
@@ -93,7 +93,8 @@ if (_mode == 0) then
[localize "STR_AMAE_NUMBER_OF_UNITS_INVOLVED", _numberOfGuns],
[localize "STR_AMAE_ROUNDS", "", "1"],
[localize "STR_AMAE_FS_AMMO", _artilleryAmmoDisplayName],
- [format [localize "STR_AMAE_TARGET"," "], _targetChoices, 1]
+ [format [localize "STR_AMAE_TARGET"," "], _targetChoices, 1],
+ [localize "STR_AMAE_PRECISION", "", "0"]
]] call Ares_fnc_ShowChooseDialog;
if (_pickFireMissionResult isEqualTo []) exitWith {};
@@ -102,6 +103,7 @@ if (_mode == 0) then
_rounds = parseNumber (_pickFireMissionResult select 1);
_ammo = (_artilleryAmmo select (_pickFireMissionResult select 2));
_ammoSelectedDisplayName = (_artilleryAmmoDisplayName select (_pickFireMissionResult select 2));
+ _precision = parseNumber (_pickFireMissionResult select 4);
private _targetChooseAlgorithm = _pickFireMissionResult select 3;
@@ -142,7 +144,8 @@ if (_mode == 0) then
[localize "STR_AMAE_ROUNDS", "", "1"],
[localize "STR_AMAE_FS_AMMO", _artilleryAmmoDisplayName],
[localize "STR_AMAE_GRID_EAST_WEST_XXX", "","000"],
- [localize "STR_AMAE_GRID_NORTH_SOUTH_XXX", "","000"]
+ [localize "STR_AMAE_GRID_NORTH_SOUTH_XXX", "","000"],
+ [localize "STR_AMAE_PRECISION", "", "0"]
]] call Ares_fnc_ShowChooseDialog;
if (_pickFireMissionResult isEqualTo []) exitWith {};
@@ -154,6 +157,7 @@ if (_mode == 0) then
private _targetX = _pickFireMissionResult select 3;
private _targetY = _pickFireMissionResult select 4;
_targetPos = [_targetX,_targetY] call CBA_fnc_mapGridToPos;
+ _precision = parseNumber (_pickFireMissionResult select 5);
};
if (isNil "_targetPos") exitWith {[localize "STR_AMAE_NO_TARGET_IN_RANGE"] call Ares_fnc_ShowZeusMessage; playSound "FD_Start_F"};
@@ -174,7 +178,9 @@ if (_roundEta == -1) exitWith { [localize "STR_AMAE_NO_TARGET_IN_RANGE"] call Ar
// Fire the guns
{
- [_x, [_targetPos, _ammo, _rounds]] remoteExecCall ["commandArtilleryFire", _x];
+ private _theta = random 360;
+ private _deviation = [sin _theta, cos _theta, 0] vectorMultiply (random _precision);
+ [_x, [_targetPos vectorAdd _deviation, _ammo, _rounds]] remoteExecCall ["commandArtilleryFire", _x];
} forEach _gunsToFire;
[localize "STR_AMAE_FIRE_ROUNDS_AND_ETA", _rounds, _ammoSelectedDisplayName, _roundEta] call Ares_fnc_ShowZeusMessage;