Merge branch 'master' into fire-refactor

This commit is contained in:
johnb432 2024-04-19 23:47:01 +02:00
commit 02539ef9c6
172 changed files with 1387 additions and 1067 deletions

View File

@ -23,14 +23,14 @@ All good? Then proceed and fill out the items below.
**Mods (complete and add to the following information):**
- **Arma 3:** `x.xx` [e.g. 1.00 stable, rc, dev]
- **CBA:** `3.x.x` [e.g. 3.0.0 stable, commit hash]
- **ACE3:** `3.x.x` [eg. 3.0.0 stable, commit hash]
- **ACE3:** `3.x.x` [e.g. 3.0.0 stable, commit hash]
<!-- Make sure to reproduce the issue with only CBA and ACE3 on a newly created mission! -->
**Description:**
A clear and concise description of what the bug is.
**Steps to reproduce:**
_Follow [https://ace3.acemod.org/img/wiki/user/issue_flowchart.webp](this flowchart)!_
_Follow [this flowchart](https://ace3.acemod.org/img/wiki/user/issue_flowchart.webp)!_
1. _Go to ..._
2. _Click ..._

View File

@ -16,9 +16,8 @@ GVAR(ammoMagLookup) = call CBA_fnc_createNamespace;
{
private _ammo = getText (configFile >> "CfgMagazines" >> _x >> "ammo");
if (_ammo != "") then { GVAR(ammoMagLookup) setVariable [_ammo, _x]; };
} count (getArray (configFile >> "CfgWeapons" >> "Throw" >> _x >> "magazines"));
nil
} count getArray (configFile >> "CfgWeapons" >> "Throw" >> "muzzles");
} forEach (getArray (configFile >> "CfgWeapons" >> "Throw" >> _x >> "magazines"));
} forEach getArray (configFile >> "CfgWeapons" >> "Throw" >> "muzzles");
// Add keybinds

View File

@ -44,8 +44,7 @@
_addedPickUpHelpers pushBack _pickUpHelper;
_throwablesHelped pushBack _x;
};
nil
} count _nearThrowables;
} forEach _nearThrowables;
_args set [0, getPosASL ACE_player];
_args set [3, _nearThrowables];
@ -56,11 +55,10 @@
{
// Only handling with attachTo works nicely
_x attachTo [_x getVariable [QGVAR(throwable), objNull], [0, 0, 0]];
nil
} count _addedPickUpHelpers;
} forEach _addedPickUpHelpers;
} else {
TRACE_1("Cleaning Pick Up Helpers",count _addedPickUpHelpers);
{deleteVehicle _x} count _addedPickUpHelpers;
{deleteVehicle _x} forEach _addedPickUpHelpers;
[_idPFH] call CBA_fnc_removePerFrameHandler;
};
}, 0, [(getPosASL ACE_player) vectorAdd [-100, 0, 0], [], [], []]] call CBA_fnc_addPerFrameHandler;

View File

@ -191,6 +191,8 @@
<Italian>Mostra informazioni sul vento temporaneamente</Italian>
<Japanese>一時的に風の情報を表示</Japanese>
<Korean>바람 정보 임시로 표시</Korean>
<French>Afficher temporairement les informations sur le vent</French>
<Russian>Временно показать информацию о ветре</Russian>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_EnableTempWindInfo_Description">
<English>Temporarily display Wind Info while throwing, to aid in placing smoke grenades effectively.</English>
@ -198,6 +200,8 @@
<Italian>Mostra le informazioni sul vento durante il lancio di granate, facilitando il piazzamento ottimale di fumogeni.</Italian>
<Japanese>投擲行動中に風向きの情報を一時的に表示し、発煙手榴弾の煙幕を効果的に展開しやすくします。</Japanese>
<Korean>연막탄을 효과적으로 배치하는 데 도움이 되도록 투척하는 동안 일시적으로 바람 정보를 표시합니다.</Korean>
<French>Affiche les informations sur le vent pendant le lancement pour placer les grenades fumigènes plus efficacement.</French>
<Russian>Временно отображайте информацию о ветре во время броска, чтобы помочь эффективно разместить дымовые шашки.</Russian>
</Key>
<Key ID="STR_ACE_Advanced_Throwing_Prepare">
<English>Prepare/Change Throwable</English>

View File

@ -33,7 +33,7 @@ if (_startingPos isEqualTo [0,0,0]) exitWith {
[LSTRING(GarrisonInvalidPosition)] call EFUNC(common,displayTextStructured);
};
if (count _unitsArray == 0 || {isNull (_unitsArray select 0)}) exitWith {
if (_unitsArray isEqualTo [] || {isNull (_unitsArray select 0)}) exitWith {
TRACE_1("fnc_garrison: Units error",_unitsArray);
[LSTRING(GarrisonNoUnits)] call EFUNC(common,displayTextStructured);
};
@ -43,7 +43,7 @@ if (_fillingRadius >= 50) then {
_buildings = [_buildings] call CBA_fnc_shuffle;
};
if (count _buildings == 0) exitWith {
if (_buildings isEqualTo []) exitWith {
TRACE_1("fnc_garrison: Building error",_buildings);
[LSTRING(GarrisonNoBuilding)] call EFUNC(common,displayTextStructured);
};

View File

@ -30,6 +30,6 @@ _vehicle == vehicle _unit
if (_unit == _x select FULLCREW_UNIT) exitWith {
_ejectVarName = format [QGVAR(ejectAction_%1_%2), _x select FULLCREW_ROLE, _x select FULLCREW_TURRETPATH];
};
} count fullCrew _vehicle;
} forEach fullCrew _vehicle;
_vehicle getVariable [_ejectVarName, false]
}

View File

@ -28,8 +28,8 @@ _item = configName _config;
// If the switch config entries are inherited, ignore
if (
(inheritsFrom (_config >> "MRT_SwitchItemNextClass") isNotEqualTo (_config >> "MRT_SwitchItemNextClass")) ||
{inheritsFrom (_config >> "MRT_SwitchItemPrevClass") isNotEqualTo (_config >> "MRT_SwitchItemPrevClass")}
(inheritsFrom (_config >> "MRT_SwitchItemNextClass") isNotEqualTo _config) ||
{inheritsFrom (_config >> "MRT_SwitchItemPrevClass") isNotEqualTo _config}
) exitWith {
_item // return
};

View File

@ -1244,6 +1244,7 @@
<Japanese>熱画像装置内蔵</Japanese>
<Russian>Интегрирован тепловизор.</Russian>
<Korean>열화상 내장</Korean>
<French>Thermique intégrée</French>
</Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_intPrimTi">
<English>Thermal &amp; Primary integrated</English>
@ -1251,6 +1252,7 @@
<Japanese>熱画像装置内蔵・プライマリに内蔵</Japanese>
<Russian>Интегрирован тепловизор и осн.прицел.</Russian>
<Korean>열화상과 주무기 내장</Korean>
<French>Thermique et primaire intégrés</French>
</Key>
<Key ID="STR_ACE_Arsenal_statVisionMode_NoSup">
<English>Not Supported</English>

View File

@ -0,0 +1,6 @@
class CfgVehicles {
class FxCartridge;
class FxCartridge_65_caseless: FxCartridge {
GVAR(model) = ""; // note: the vanilla 6.5 caseless don't actually use this, just being safe
};
};

View File

@ -15,3 +15,4 @@ class CfgPatches {
};
#include "CfgEventHandlers.hpp"
#include "CfgVehicles.hpp"

View File

@ -20,33 +20,30 @@ params ["_unit", "", "", "", "_ammo"];
if (!isNull objectParent _unit) exitWith {};
private _modelPath = GVAR(cachedCasings) get _ammo;
if (isNil "_modelPath") then {
private _modelPath = GVAR(cachedCasings) getOrDefaultCall [_ammo, {
private _cartridge = getText (configFile >> "CfgAmmo" >> _ammo >> "cartridge");
//Default cartridge is a 5.56mm model
_modelPath = switch (_cartridge) do {
case "FxCartridge_9mm": { "A3\Weapons_f\ammo\cartridge_small.p3d" };
case "FxCartridge_65": { "A3\weapons_f\ammo\cartridge_65.p3d" };
case "FxCartridge_762": { "A3\weapons_f\ammo\cartridge_762.p3d" };
case "FxCartridge_762x39": { "A3\weapons_f_enoch\ammo\cartridge_762x39.p3d" };
case "FxCartridge_93x64_Ball": { "A3\Weapons_F_Mark\Ammo\cartridge_93x64.p3d" };
case "FxCartridge_338_Ball": { "A3\Weapons_F_Mark\Ammo\cartridge_338_LM.p3d" };
case "FxCartridge_338_NM": { "A3\Weapons_F_Mark\Ammo\cartridge_338_NM.p3d" };
case "FxCartridge_127": { "A3\weapons_f\ammo\cartridge_127.p3d" };
case "FxCartridge_127x54": { "A3\Weapons_F_Mark\Ammo\cartridge_127x54.p3d" };
case "FxCartridge_slug": { "A3\weapons_f\ammo\cartridge_slug.p3d" };
case "FxCartridge_12Gauge_HE_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_he_lxws.p3d" };
case "FxCartridge_12Gauge_Slug_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_slug_lxws.p3d" };
case "FxCartridge_12Gauge_Smoke_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_smoke_lxws.p3d" };
case "FxCartridge_12Gauge_Pellet_lxWS": { "lxWS\weapons_1_f_lxws\Ammo\cartridge_pellet_lxws.p3d" };
case "CUP_FxCartridge_545": { "CUP\Weapons\CUP_Weapons_Ammunition\magazines\cartridge545.p3d" };
case "CUP_FxCartridge_939": { "CUP\Weapons\CUP_Weapons_Ammunition\magazines\cartridge939.p3d" };
case "": { "" };
default { "A3\Weapons_f\ammo\cartridge.p3d" };
if (_cartridge == "") then { // return (note: can't use exitWith)
""
} else {
private _cartridgeConfig = configFile >> "CfgVehicles" >> _cartridge;
// if explicitly defined, use ACE's config
if (isText (_cartridgeConfig >> QGVAR(model))) exitWith {
getText (_cartridgeConfig >> QGVAR(model))
};
// use casing's default model
private _model = getText (_cartridgeConfig >> "model");
if ("a3\weapons_f\empty" in toLowerANSI _model) exitWith { "" };
// Add file extension if missing (fileExists needs file extension)
if ((_model select [count _model - 4]) != ".p3d") then {
_model = _model + ".p3d";
};
["", _model] select (fileExists _model)
};
GVAR(cachedCasings) set [_ammo, _modelPath];
};
}, true];
if (_modelPath isEqualTo "") exitWith {};

View File

@ -145,8 +145,7 @@ if (isServer) then {
INFO_3("[%1] DC - Was Zeus [%2] while controlling unit [%3] - manually clearing `bis_fnc_moduleRemoteControl_owner`",[_x] call FUNC(getName),_dcPlayer,_x);
_x setVariable ["bis_fnc_moduleRemoteControl_owner", nil, true];
};
nil
} count (curatorEditableObjects _zeusLogic);
} forEach (curatorEditableObjects _zeusLogic);
};
}];
};

View File

@ -43,8 +43,7 @@ if (isServer) then {
{
_x params ["", "_eventArgs","_ttl"];
[_eventName, _eventArgs, _ttl] call FUNC(_handleSyncedEvent);
false
} count _eventLog;
} forEach _eventLog;
INFO_1("[%1] synchronized",_eventName);
};

View File

@ -28,18 +28,13 @@ if (_list isEqualType "") then {
};
{
if (!isNil "_x") then {
if (_x isEqualType objNull) then {
if (local _x) then {
if (_vehicle) then {
(vehicle _x) setVariable [_variable, _setting, _global];
TRACE_6("Set variable vehicle",_x,vehicle _x,typeOf (vehicle _x),_variable,_setting,_global);
} else {
_x setVariable [_variable, _setting, _global];
TRACE_5("Set variable",_x,typeOf _x,_variable,_setting,_global);
};
};
if (!isNil "_x" && {_x isEqualType objNull} && {local _x}) then {
if (_vehicle) then {
(vehicle _x) setVariable [_variable, _setting, _global];
TRACE_6("Set variable vehicle",_x,vehicle _x,typeOf (vehicle _x),_variable,_setting,_global);
} else {
_x setVariable [_variable, _setting, _global];
TRACE_5("Set variable",_x,typeOf _x,_variable,_setting,_global);
};
};
false
} count _list;
} forEach _list;

View File

@ -66,8 +66,7 @@ GVAR(settingsMovedToSQF) = [];
INFO_1("%1 delayed functions running.",count GVAR(runAtSettingsInitialized));
{
(_x select 1) call (_x select 0);
false
} count GVAR(runAtSettingsInitialized);
} forEach GVAR(runAtSettingsInitialized);
GVAR(runAtSettingsInitialized) = nil; //cleanup
#ifdef DEBUG_MODE_FULL

View File

@ -53,8 +53,7 @@ private _refresh = {
{
ctrlDelete _x;
false
} count _allControls;
} forEach _allControls;
_allControls = [];
@ -80,7 +79,6 @@ private _refresh = {
_ctrl ctrlSetTextColor _xcolor;
_ctrl ctrlCommit 0;
_allControls pushBack _ctrl;
false
} forEach (missionNamespace getVariable [QGVAR(displayIconList),[]]);
};
@ -116,8 +114,7 @@ if (_show) then {
if (_x select 0 != _iconId) then {
_newList pushBack _x;
};
false
} count _list;
} forEach _list;
missionNamespace setVariable [QGVAR(displayIconList), _newList];
call _refresh;

View File

@ -34,8 +34,7 @@ if (IS_ARRAY(_var)) then {
{
[_x, _depth] call FUNC(dumpArray);
false
} count _var;
} forEach _var;
diag_log text format ["%1],", _pad];
};

View File

@ -25,8 +25,7 @@ if (!isNil "ACE_PFH_COUNTER") then {
private _isActive = ["ACTIVE", "REMOVED"] select isNil {CBA_common_PFHhandles select (_pfh select 0)};
diag_log text format ["Registered PFH: id=%1 [%2, delay %3], %4:%5", _pfh select 0, _isActive, _parameters select 1, _pfh select 1, _pfh select 2];
false
} count ACE_PFH_COUNTER;
} forEach ACE_PFH_COUNTER;
};
diag_log text format ["ACE COUNTER RESULTS"];
@ -50,8 +49,7 @@ diag_log text format ["-------------------------------------------"];
};
_iter = _iter + 1;
false
} count _counterEntry;
} forEach _counterEntry;
// results
_averageResult = (_total / _count) * 1000;
@ -61,8 +59,7 @@ diag_log text format ["-------------------------------------------"];
} else {
diag_log text format ["%1: No results", _counterEntry select 0];
};
false
} count ACE_COUNTERS;
} forEach ACE_COUNTERS;
/*
// Dump PFH Trackers

View File

@ -50,8 +50,7 @@ if (_unit isKindOf "CAManBase") then {
_gunner = _unit turretUnit _x;
_turret = _x;
};
false
} count allTurrets [_unit, true];
} forEach allTurrets [_unit, true];
// Ensure that at least the pilot is returned if there is no gunner
if (isManualFire _unit && {isNull _gunner}) then {
_gunner = effectiveCommander _unit;

View File

@ -35,7 +35,6 @@ private _return = [];
_return pushBack [_x select 0, typeName _val, _val, _x select 2, _x select 5];
};
};
false
} count GVAR(OBJECT_VARIABLES_STORAGE);
} forEach GVAR(OBJECT_VARIABLES_STORAGE);
_return

View File

@ -29,7 +29,6 @@ private _doorTurrets = [];
if (((getNumber (_config >> "isCopilot")) == 0) && {count getArray (_config >> "weapons") > 0}) then {
_doorTurrets pushBack _x;
};
false
} count _turrets;
} forEach _turrets;
_doorTurrets

View File

@ -28,8 +28,7 @@ private _gunner = objNull;
if (_weapon in (_vehicle weaponsTurret _x)) exitWith {
_gunner = _vehicle turretUnit _x;
};
false
} count allTurrets [_vehicle, true];
} forEach allTurrets [_vehicle, true];
// ensure that at least the pilot is returned if there is no gunner
if (isManualFire _vehicle && {isNull _gunner}) then {

View File

@ -38,8 +38,7 @@ private _enemiesInVehicle = false; //Possible Side Restriction
{
if (side _unit getFriend side _x < 0.6) exitWith {_enemiesInVehicle = true};
false
} count crew _vehicle;
} forEach crew _vehicle;
switch (_position) do {
case "driver" : {

View File

@ -38,8 +38,7 @@ private _stepY = 1e10;
_stepX = getNumber (_x >> "stepX");
_stepY = getNumber (_x >> "stepY");
};
false
} count configProperties [_cfgGrid, "isClass _x", false];
} forEach configProperties [_cfgGrid, "isClass _x", false];
private _letterGrid = false;

View File

@ -25,8 +25,7 @@ if (_unit isKindOf "CAManBase") then {
} else {
{
_return = _return + ({_x == _magazine} count magazines _x);
false
} count crew _unit;
} forEach crew _unit;
(getMagazineCargo _unit) params [["_magNames", []], ["_magCount", []]];
{

View File

@ -24,7 +24,6 @@ scopeName "main";
{
if (_unit == (_vehicle turretUnit _x)) then {_x breakOut "main"};
nil
} count allTurrets [_vehicle, true];
} forEach allTurrets [_vehicle, true];
[]

View File

@ -33,7 +33,6 @@ private _crew = [];
_crew pushBack (_x select 0);
};
};
false
} count fullCrew _vehicle;
} forEach fullCrew _vehicle;
_crew

View File

@ -29,7 +29,6 @@ private _modes = [];
if (_x == "this") then {
_modes pushBack _weapon;
};
false
} count getArray (_config >> "modes");
} forEach getArray (_config >> "modes");
_modes

View File

@ -42,7 +42,6 @@ private _ammo = _muzzles apply {0};
_ammo set [_index, _x select 1];
};
};
false
} count magazinesAmmoFull _unit;
} forEach magazinesAmmoFull _unit;
[_attachments, _muzzles, _magazines, _ammo];

View File

@ -28,8 +28,7 @@ if (isNil QGVAR(LSD_Vehicles)) then {
if (_hSCount > 0) then {
GVAR(LSD_Vehicles) pushBack [_x, _hSCount];
};
nil
} count _units;
} forEach _units;
if (isNil QGVAR(LSD_Colors)) then {
GVAR(LSD_Colors) = [
@ -51,8 +50,7 @@ if (isNil QGVAR(LSD_PFH)) then {
for "_i" from 0 to (_hSCount - 1) do {
_vehicle setObjectTexture [_i, GVAR(LSD_Colors) select _index];
};
nil
} count GVAR(LSD_Vehicles);
} forEach GVAR(LSD_Vehicles);
_index = ((_index + 1) % 7) mod count GVAR(LSD_Colors);
(_this select 0) set [0, _index];

View File

@ -32,8 +32,7 @@ private _whitespaceList = [];
} else {
_whitespaceList pushBack ([_x] call CBA_fnc_trim);
};
false
} count _list;
} forEach _list;
_list = _whitespaceList;
TRACE_1("Whitespace List",_list);
@ -46,8 +45,7 @@ if (_checkNil) then {
if (!isNil _x) then {
_nilCheckedList pushBack (missionNamespace getVariable _x);
};
false
} count _list;
} forEach _list;
_list = _nilCheckedList;
};

View File

@ -27,8 +27,7 @@ if (isPlayer _unit) then {
// clear all disable user input
{
[_x, false] call FUNC(setDisableUserInputStatus);
false
} count GVAR(DISABLE_USER_INPUT_COLLECTION);
} forEach GVAR(DISABLE_USER_INPUT_COLLECTION);
};
};
@ -36,5 +35,4 @@ if (isPlayer _unit) then {
if !(_x select 4) then {
_unit setVariable [_x select 0, nil, _x select 3];
};
false
} count ([_unit] call FUNC(getAllDefinedSetVariables));
} forEach ([_unit] call FUNC(getAllDefinedSetVariables));

View File

@ -24,6 +24,4 @@ _respawnVariables pushBack "ACE_PersistentFunctions";
{
_unit setVariable [_x, _unit getVariable _x, true];
false
} count _respawnVariables;
nil
} forEach _respawnVariables;

View File

@ -47,7 +47,6 @@ private _array = [];
_array pushBack _x;
};
};
false
} count toArray _string;
} forEach toArray _string;
toString _array // return

View File

@ -58,7 +58,7 @@ if (_switch) then {
private _newGroup = createGroup (_x select 1);
[_unit] joinSilent _newGroup;
};
if (count units _currentGroup == 0) then {
if (units _currentGroup isEqualTo []) then {
deleteGroup _currentGroup;
};
_previousGroupsList set [_forEachIndex, objNull];

View File

@ -29,8 +29,7 @@ if (isNil QGVAR(publishSchedId)) then {
{
_x params ["_unit", "_varName"];
_unit setVariable [_varName, _unit getVariable _varName, true];
false
} count GVAR(publishVarNames);
} forEach GVAR(publishVarNames);
GVAR(publishVarNames) = [];
GVAR(publishNextTime) = 1e7;

View File

@ -1833,18 +1833,21 @@
<Japanese>手ぶれ</Japanese>
<Korean>무기 흔들림</Korean>
<French>Oscillation de l'arme</French>
<Russian>Колебание оружия</Russian>
</Key>
<Key ID="STR_ACE_Common_EnableSway">
<English>Enable Weapon Sway</English>
<Japanese>手ぶれを有効化</Japanese>
<Korean>무기 흔들림 추가</Korean>
<French>Activer l'oscillation de l'arme</French>
<Russian>Включить колебание оружия</Russian>
</Key>
<Key ID="STR_ACE_Common_EnableSway_Description">
<English>Enables weapon sway influenced by sway factors, such as stance, fatigue and medical condition.\nDisabling this setting will defer sway to vanilla or other mods.</English>
<Japanese>姿勢、疲労、負傷状態などの手ぶれ要因に影響を受ける武器照準の揺れを有効にします。\nこの設定を無効にすると、手ぶれの揺れはバニラまたは他のMODの処理に任されます。</Japanese>
<Korean>흔들림 계수, 자세, 피로도, 건강 상태 등의 요인에 영향을 받는 무기 흔들림을 활성화합니다.\n이 설정을 비활성화하면 바닐라 또는 다른 모드의 흔들림으로 대체됩니다.</Korean>
<French>Active l'oscillation de l'arme influencé par les facteurs d'oscillation, tels que la position, la fatigue et l'état de santé.\nLa désactivation de ce paramètre reportera l'oscillation à vanilla ou à d'autres mods.</French>
<Russian>Активируйте колебание оружия в зависимости от таких факторов, как стойка, усталость и состояние здоровья.\nОтключение этого параметра приведет к переносу раскачивания на vanilla или другие моды.</Russian>
</Key>
<Key ID="STR_ACE_Common_SwayFactor">
<English>Sway factor</English>

View File

@ -148,5 +148,141 @@ class CfgVehicles {
roles[]={"cargo"};
};
};
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_l1", "hitera_l2", "hitera_l3", "hitera_l4", "hitera_l5",
"hitera_l6", "hitera_l7", "hitera_l8", "hitera_r1", "hitera_r2",
"hitera_r3", "hitera_r4", "hitera_r5", "hitera_r6", "hitera_r7",
"hitera_r8", "hitera_t1", "hitera_t2", "hitera_t3", "hitera_t4",
"hitera_t5", "hitera_t6", "hitera_t7", "hitera_t8", "hitera_fr1",
"hitera_fr2", "hitera_fr3", "hitera_fr4", "hitera_fr5", "hitera_fr6",
"hitera_fr7", "hitera_fr8", "hitera_fr9", "hitera_fl1", "hitera_fl2",
"hitera_fl3", "hitera_fl4", "hitera_fl5"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {};
};
class CUP_T90_Base: Tank_F {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_l1", "hitera_l2", "hitera_l3", "hitera_r1", "hitera_r2",
"hitera_r3", "hitera_1_t_l", "hitera_1_t_r", "hitera_2_t_l",
"hitera_2_t_r"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {};
};
class CUP_T90M_Base: Tank_F {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_t1", "hitera_t2", "hitera_t3", "hitera_t4", "hitera_t5",
"hitera_t6", "hitera_t7", "hitera_t8", "hitera_t9", "hitera_t10",
"hitera_t11", "hitera_t12", "hitera_t13", "hitera_t14", "hitera_t15",
"hitera_t16", "hitera_t17", "hitera_t18", "hitera_t19", "hitera_t20",
"hitera_t21", "hitera_f1", "hitera_f2", "hitera_f3", "hitera_f4",
"hitera_f5", "hitera_f6", "hitera_f7", "hitera_s1", "hitera_s2",
"hitera_s3", "hitera_s4", "hitera_s5", "hitera_s6", "hitera_s7",
"hitera_s8", "hitera_s9", "hitera_s10", "hitera_s11", "hitera_s12",
"hitera_t22", "hitera_t23", "hitera_t24", "hitera_t25", "hitera_t26",
"hitera_t27", "hitera_t28", "hitera_t29", "hitera_t30", "hitera_t31",
"hitera_t32", "hitera_t33"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"hitslat_left", "hitslat_right", "hitslat_turret_rear",
"hitslat_turret_left", "hitslat_rear"
};
};
class CUP_T72_ACR_Base;
class CUP_B_T72_CZ: CUP_T72_ACR_Base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_top_l1", "hitera_top_l2", "hitera_top_l3", "hitera_top_l4",
"hitera_top_r1", "hitera_top_r2", "hitera_top_r3", "hitera_top_r4",
"hitera_front_r1", "hitera_front_r2", "hitera_front_l1",
"hitera_front_l2", "hitera_top_rear"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {};
};
class CUP_Leopard2_Base;
class CUP_Leopard2_ERA_Base: CUP_Leopard2_Base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_1", "hitera_2", "hitera_3", "hitera_4", "hitera_5", "hitera_6",
"hitera_7", "hitera_8", "hitera_9", "hitera_10", "hitera_11", "hitera_12",
"hitera_13", "hitera_14", "hitera_15", "hitera_16", "hitera_17", "hitera_18",
"hitera_19", "hitera_20", "hitera_21", "hitera_22", "hitera_23", "hitera_24",
"hitera_25", "hitera_26", "hitera_27", "hitera_28", "hitera_29", "hitera_30",
"hitera_31", "hitera_32", "hitera_33", "hitera_34", "hitera_35", "hitera_36",
"hitera_37", "hitera_38", "hitera_39", "hitera_40", "hitera_41", "hitera_42",
"hitera_43", "hitera_44", "hitera_45", "hitera_46", "hitera_47"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {};
};
class CUP_M1_Abrams_base;
class CUP_M1A2_TUSK_base: CUP_M1_Abrams_base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_l1", "hitera_l2", "hitera_l3", "hitera_l4", "hitera_r1",
"hitera_r2", "hitera_r3", "hitera_r4"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"hitslat_rear"
};
};
class CUP_M1Abrams_Base;
class CUP_M1Abrams_TUSK_Base: CUP_M1Abrams_Base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05",
"hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10",
"hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15",
"hitera_l16", "hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04",
"hitera_r05", "hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09",
"hitera_r10", "hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14",
"hitera_r15", "hitera_r16"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"hitslat_rear"
};
};
class CUP_M1Abrams_A2_Base;
class CUP_M1Abrams_A2_TUSK_Base: CUP_M1Abrams_A2_Base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05",
"hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10",
"hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15",
"hitera_l16", "hitera_l17", "hitera_l18", "hitera_l19", "hitera_l20",
"hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04", "hitera_r05",
"hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09", "hitera_r10",
"hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14", "hitera_r15",
"hitera_r16", "hitera_r17", "hitera_r18", "hitera_r19", "hitera_r20"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"hitslat_rear"
};
};
class CUP_M1A2Abrams_Base;
class CUP_M1A2Abrams_TUSK_Base: CUP_M1A2Abrams_Base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05",
"hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10",
"hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15",
"hitera_l16", "hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04",
"hitera_r05", "hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09",
"hitera_r10", "hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14",
"hitera_r15", "hitera_r16"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"hitslat_rear"
};
};
class CUP_M1A2Abrams_TUSK_II_Base: CUP_M1A2Abrams_TUSK_Base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"hitera_l01", "hitera_l02", "hitera_l03", "hitera_l04", "hitera_l05",
"hitera_l06", "hitera_l07", "hitera_l08", "hitera_l09", "hitera_l10",
"hitera_l11", "hitera_l12", "hitera_l13", "hitera_l14", "hitera_l15",
"hitera_l16", "hitera_l17", "hitera_l18", "hitera_l19", "hitera_l20",
"hitera_r01", "hitera_r02", "hitera_r03", "hitera_r04", "hitera_r05",
"hitera_r06", "hitera_r07", "hitera_r08", "hitera_r09", "hitera_r10",
"hitera_r11", "hitera_r12", "hitera_r13", "hitera_r14", "hitera_r15",
"hitera_r16", "hitera_r17", "hitera_r18", "hitera_r19", "hitera_r20"
};
};
};

View File

@ -42,66 +42,77 @@
<Japanese>[CSW] M1 榴弾</Japanese>
<Russian>[CSW] M1 HE</Russian>
<Korean>[CSW] M1 고폭탄</Korean>
<French>[CSW] M1 HE</French>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_M84Smoke_displayName">
<English>[CSW] M84 Smoke</English>
<Japanese>[CSW] M84 白煙弾</Japanese>
<Russian>[CSW] M84 Дымовая</Russian>
<Korean>[CSW] M84 연막탄</Korean>
<French>[CSW] M84 Fumigène</French>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_M60A2_displayName">
<English>[CSW] M60A2 WP</English>
<Japanese>[CSW] M60A2 白リン弾</Japanese>
<Russian>[CSW] M60A2 WP</Russian>
<Korean>[CSW] M60A2 백린연막탄</Korean>
<French>[CSW] M60A2 WP</French>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_M67AT_displayName">
<English>[CSW] M67 AT Laser Guided</English>
<Japanese>[CSW] M67 対戦車レーザー誘導弾</Japanese>
<Russian>[CSW] M67 AT Laser Guided</Russian>
<Korean>[CSW] M67 레이저유도 대전차탄</Korean>
<French>[CSW] M67 AT Guidé laser</French>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_M314Illum_displayName">
<English>[CSW] M314 Illumination</English>
<Japanese>[CSW] M314 照明弾</Japanese>
<Russian>[CSW] M314 Осветительная</Russian>
<Korean>[CSW] M314 조명탄</Korean>
<French>[CSW] M314 Illumination</French>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_3OF56_displayName">
<English>[CSW] 3OF56 HE</English>
<Japanese>[CSW] 3OF56 榴弾</Japanese>
<Russian>[CSW] 3OF56 HE</Russian>
<Korean>[CSW] 3OF56 고폭탄</Korean>
<French>[CSW] 3OF56 HE</French>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_3OF69M_displayName">
<English>[CSW] 3OF69M Laser Guided</English>
<Japanese>[CSW] 3OF69M レーザー誘導弾</Japanese>
<Russian>[CSW] 3OF69M Laser Guided</Russian>
<Korean>[CSW] 3OF69M 레이저유도탄</Korean>
<French>[CSW] 3OF69M Guidé laser</French>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_122mmWP_displayName">
<English>[CSW] 122mm WP</English>
<Japanese>[CSW] 122mm 白リン弾</Japanese>
<Russian>[CSW] 122mm WP</Russian>
<Korean>[CSW] 122mm 백린탄</Korean>
<French>[CSW] 122mm WP</French>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_122mmSmoke_displayName">
<English>[CSW] D-462 Smoke</English>
<Japanese>[CSW] D-462 白煙弾</Japanese>
<Russian>[CSW] D-462 Дымовая</Russian>
<Korean>[CSW] D-462 연막탄</Korean>
<French>[CSW] D-462 Fumigène</French>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_122mmIllum_displayName">
<English>[CSW] S-463 Illumination</English>
<Japanese>[CSW] S-463 照明弾</Japanese>
<Russian>[CSW] S-463 Осветительная</Russian>
<Korean>[CSW] S-463 조명탄</Korean>
<French>[CSW] S-463 Eclairante</French>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_CSW_mag_122mmAT_displayName">
<English>[CSW] BK-6M HEAT</English>
<Japanese>[CSW] BK-6M HEAT弾</Japanese>
<Russian>[CSW] BK-6M HEAT</Russian>
<Korean>[CSW] BK-6M 대전차고폭탄</Korean>
<French>[CSW] BK-6M HEAT</French>
</Key>
</Package>
</Project>

View File

@ -46,6 +46,7 @@
<Japanese>AN/PVS-15 (冬季迷彩, WP)</Japanese>
<Korean>AN/PVS-15 (설상, 백색광)</Korean>
<Russian>AN/PVS-15 (Белый, БФ)</Russian>
<French>AN/PVS-15 (Blanc, WP)</French>
</Key>
<Key ID="STR_ACE_Compat_CUP_Weapons_nightvision_CUP_NVG_GPNVG_black_WP">
<English>GPNVG (Black, WP)</English>
@ -82,6 +83,7 @@
<Japanese>GPNVG (冬季迷彩, WP)</Japanese>
<Korean>GPNVG (설상, 백색광)</Korean>
<Russian>AN/PVS-15 (Белый, БФ)</Russian>
<French>GPNVG (Blanc, WP)</French>
</Key>
</Package>
</Project>

View File

@ -15,6 +15,6 @@ class CfgPatches {
};
};
#include "CfgEventHandlers.hpp"
#include "CfgMagazines.hpp"
#include "CfgWeapons.hpp"
#include "CfgEventHandlers.hpp"

View File

@ -434,7 +434,11 @@ class CfgVehicles {
"era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint",
"era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint",
"era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint",
"era_31_hitpoint", "era_32_hitpoint"
"era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint",
"era_37_hitpoint", "era_38_hitpoint", "era_39_hitpoint", "era_40_hitpoint", "era_41_hitpoint", "era_42_hitpoint",
"era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", "era_47_hitpoint", "era_48_hitpoint",
"era_49_hitpoint", "era_50_hitpoint", "era_58_hitpoint", "era_59_hitpoint", "era_60_hitpoint", "era_61_hitpoint",
"era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint", "era_66_hitpoint", "era_67_hitpoint"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"SLAT_51_hitpoint", "SLAT_52_hitpoint", "SLAT_53_hitpoint",
@ -470,6 +474,9 @@ class CfgVehicles {
"era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", "era_47_hitpoint", "era_48_hitpoint",
"era_49_hitpoint", "era_50_hitpoint"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"slat_51_hitpoint", "slat_52_hitpoint", "slat_53_hitpoint", "slat_54_hitpoint"
};
};
class rhs_t90am_tv: rhs_t90_tv {
EGVAR(vehicle_damage,eraHitpoints)[] = {
@ -483,7 +490,7 @@ class CfgVehicles {
"era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint", "era_47_hitpoint", "era_48_hitpoint",
"era_49_hitpoint", "era_50_hitpoint", "era_51_hitpoint", "era_52_hitpoint", "era_53_hitpoint", "era_54_hitpoint",
"era_55_hitpoint", "era_56_hitpoint", "era_57_hitpoint", "era_58_hitpoint", "era_59_hitpoint", "era_60_hitpoint",
"era_51_hitpoint", "era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint", "era_66_hitpoint"
"era_61_hitpoint", "era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint", "era_66_hitpoint"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"SLAT_18_hitpoint", "SLAT_19_hitpoint", "SLAT_20_hitpoint", "SLAT_21_hitpoint",
@ -492,10 +499,31 @@ class CfgVehicles {
};
};
class rhs_t90sm_tv: rhs_t90am_tv {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"era_1_hitpoint", "era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint",
"era_5_hitpoint", "era_6_hitpoint", "era_7_hitpoint", "era_8_hitpoint",
"era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint",
"era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint",
"era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint",
"era_21_hitpoint", "era_22_hitpoint", "era_24_hitpoint", "era_25_hitpoint",
"era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint",
"era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint",
"era_35_hitpoint", "era_36_hitpoint", "era_37_hitpoint", "era_38_hitpoint",
"era_39_hitpoint", "era_40_hitpoint", "era_41_hitpoint", "era_42_hitpoint",
"era_43_hitpoint", "era_44_hitpoint", "era_45_hitpoint", "era_46_hitpoint",
"era_47_hitpoint", "era_48_hitpoint", "era_49_hitpoint", "era_50_hitpoint",
"era_26_hitpoint", "era_55_hitpoint", "era_56_hitpoint", "era_57_hitpoint",
"era_58_hitpoint", "era_59_hitpoint", "era_60_hitpoint", "era_61_hitpoint",
"era_62_hitpoint", "era_63_hitpoint", "era_64_hitpoint", "era_65_hitpoint",
"era_66_hitpoint", "era_23_hitpoint"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"SLAT_23_hitpoint", "SLAT_26_hitpoint", "SLAT_51_hitpoint", "SLAT_52_hitpoint",
"SLAT_53_hitpoint", "SLAT_54_hitpoint", "SLAT_55_hitpoint", "SLAT_56_hitpoint",
"SLAT_57_hitpoint"
"slat_23_hitpoint", "slat_26_hitpoint", "slat_51_hitpoint",
"slat_52_hitpoint", "slat_53_hitpoint", "slat_54_hitpoint",
"slat_55_hitpoint", "slat_56_hitpoint", "slat_57_hitpoint",
"slat_18_hitpoint", "slat_19_hitpoint", "slat_20_hitpoint",
"slat_21_hitpoint", "slat_22_hitpoint", "slat_24_hitpoint",
"slat_25_hitpoint"
};
};
@ -539,6 +567,35 @@ class CfgVehicles {
"era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint"
};
};
class rhs_t80um: rhs_t80u {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"era_1_hitpoint", "era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint", "era_5_hitpoint", "era_6_hitpoint",
"era_7_hitpoint", "era_8_hitpoint", "era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint",
"era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint",
"era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint",
"era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint", "era_29_hitpoint", "era_30_hitpoint",
"era_31_hitpoint", "era_32_hitpoint", "era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint"
};
};
class rhs_t15_base;
class rhs_t15_tv: rhs_t15_base {
EGVAR(vehicle_damage,eraHitpoints)[] = {
"era_1_hitpoint", "era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint",
"era_5_hitpoint", "era_6_hitpoint", "era_7_hitpoint", "era_8_hitpoint",
"era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint",
"era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint",
"era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint",
"era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint",
"era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint",
"era_29_hitpoint", "era_30_hitpoint", "era_31_hitpoint", "era_32_hitpoint",
"era_33_hitpoint", "era_34_hitpoint", "era_35_hitpoint", "era_36_hitpoint",
"era_37_hitpoint"
};
EGVAR(vehicle_damage,slatHitpoints)[] = {
"slat_38_hitpoint", "slat_39_hitpoint", "slat_40_hitpoint", "slat_41_hitpoint"
};
};
// Wirecutter Backpacks
class rhs_assault_umbts;

View File

@ -10,6 +10,7 @@
<Spanish>[CSW] BGM-71A TOW</Spanish>
<German>[CSW] BGM-71A TOW</German>
<Italian>[CSW] BGM-71A TOW</Italian>
<French>[CSW] BGM-71A TOW</French>
</Key>
<Key ID="STR_ACE_Compat_RHS_USF3_CSW_mag_TOWB_displayName">
<English>[CSW] BGM-71B TOW</English>
@ -20,6 +21,7 @@
<Spanish>[CSW] BGM-71B TOW</Spanish>
<German>[CSW] BGM-71B TOW</German>
<Italian>[CSW] BGM-71B TOW</Italian>
<French>[CSW] BGM-71B TOW</French>
</Key>
<Key ID="STR_ACE_Compat_RHS_USF3_CSW_mag_ITOW_displayName">
<English>[CSW] BGM-71C ITOW</English>
@ -30,6 +32,7 @@
<Spanish>[CSW] BGM-71C ITOW</Spanish>
<German>[CSW] BGM-71C ITOW</German>
<Italian>[CSW] BGM-71C ITOW</Italian>
<French>[CSW] BGM-71C ITOW</French>
</Key>
<Key ID="STR_ACE_Compat_RHS_USF3_CSW_mag_TOW2_displayName">
<English>[CSW] BGM-71D TOW-2</English>
@ -40,6 +43,7 @@
<Spanish>[CSW] BGM-71D TOW-2</Spanish>
<German>[CSW] BGM-71D TOW-2</German>
<Italian>[CSW] BGM-71D TOW-2</Italian>
<French>[CSW] BGM-71D TOW-2</French>
</Key>
<Key ID="STR_ACE_Compat_RHS_USF3_CSW_mag_TOW2A_displayName">
<English>[CSW] BGM-71E TOW-2A</English>
@ -50,6 +54,7 @@
<Spanish>[CSW] BGM-71E TOW-2A</Spanish>
<German>[CSW] BGM-71E TOW-2A</German>
<Italian>[CSW] BGM-71E TOW-2A</Italian>
<French>[CSW] BGM-71E TOW-2A</French>
</Key>
<Key ID="STR_ACE_Compat_RHS_USF3_CSW_mag_TOW2b_displayName">
<English>[CSW] BGM-71F TOW-2B</English>
@ -60,6 +65,7 @@
<Spanish>[CSW] BGM-71F TOW-2B</Spanish>
<German>[CSW] BGM-71F TOW-2B</German>
<Italian>[CSW] BGM-71F TOW-2B</Italian>
<French>[CSW] BGM-71F TOW-2B</French>
</Key>
<Key ID="STR_ACE_Compat_RHS_USF3_CSW_mag_TOW2b_aero_displayName">
<English>[CSW] BGM-71F-3 TOW-2B AERO</English>
@ -70,6 +76,7 @@
<Spanish>[CSW] BGM-71F-3 TOW-2B AERO</Spanish>
<German>[CSW] BGM-71F-3 TOW-2B AERO</German>
<Italian>[CSW] BGM-71F-3 TOW-2B AERO</Italian>
<French>[CSW] BGM-71F-3 TOW-2B AERO</French>
</Key>
<Key ID="STR_ACE_Compat_RHS_USF3_CSW_mag_TOW2bb_displayName">
<English>[CSW] BGM-71H Bunker Buster</English>
@ -80,6 +87,7 @@
<Spanish>[CSW] BGM-71H Anti-Búnquer</Spanish>
<German>[CSW] BGM-71H Bunker Buster</German>
<Italian>[CSW] BGM-71H Anti-Bunker</Italian>
<French>[CSW] BGM-71H Bunker Buster</French>
</Key>
<Key ID="STR_ACE_Compat_RHS_USF3_CSW_48Rnd_40mm_MK19_displayName">
<English>[CSW] Mk. 19 40mm M384 HE</English>
@ -90,6 +98,7 @@
<Spanish>[CSW] Mk. 19 40mm M384 HE</Spanish>
<German>[CSW] Mk. 19 40mm M384 HE</German>
<Italian>[CSW] Mk. 19 40mm M384 HE</Italian>
<French>[CSW] Mk. 19 40mm M384 HE</French>
</Key>
<Key ID="STR_ACE_Compat_RHS_USF3_CSW_48Rnd_40mm_MK19_M430I_displayName">
<English>[CSW] Mk. 19 40mm M430I HEDP</English>
@ -100,6 +109,7 @@
<Spanish>[CSW] Mk. 19 40mm M430I HEDP</Spanish>
<German>[CSW] Mk. 19 40mm M430I HEDP</German>
<Italian>[CSW] Mk. 19 40mm M430I HEDP</Italian>
<French>[CSW] Mk. 19 40mm M430I HEDP</French>
</Key>
<Key ID="STR_ACE_Compat_RHS_USF3_CSW_48Rnd_40mm_MK19_M430A1_displayName">
<English>[CSW] Mk. 19 40mm M430A1 HEDP</English>
@ -110,6 +120,7 @@
<Spanish>[CSW] Mk. 19 40mm M430A1 HEDP</Spanish>
<German>[CSW] Mk. 19 40mm M430A1 HEDP</German>
<Italian>[CSW] Mk. 19 40mm M430A1 HEDP</Italian>
<French>[CSW] Mk. 19 40mm M430A1 HEDP</French>
</Key>
<Key ID="STR_ACE_Compat_RHS_USF3_CSW_48Rnd_40mm_MK19_M1001_displayName">
<English>[CSW] Mk. 19 40mm M1001 Canister</English>
@ -120,6 +131,7 @@
<Spanish>[CSW] Mk. 19 40mm M1001 Bote de metralla</Spanish>
<German>[CSW] Mk. 19 40mm M1001 Kanister</German>
<Italian>[CSW] Mk. 19 40mm M1001 Pallettoni</Italian>
<French>[CSW] Mk. 19 40 mm M1001 Chevrotine</French>
</Key>
</Package>
</Project>

View File

@ -8,6 +8,7 @@
<Italian>AA12</Italian>
<Japanese>AA12</Japanese>
<Russian>AA12</Russian>
<French>AA12</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_AA40_Tan_Name">
<English>AA12 (Sand)</English>
@ -16,6 +17,7 @@
<Italian>AA12 (Sabbia)</Italian>
<Japanese>AA12 (サンド)</Japanese>
<Russian>AA12 (Песочный)</Russian>
<French>AA12 (Sable)</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_AA40_Snake_Name">
<English>AA12 (Snake)</English>
@ -32,6 +34,7 @@
<Italian>Galil ARM</Italian>
<Japanese>ガリル ARM</Japanese>
<Russian>Galil ARM</Russian>
<French>Galil ARM</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_Galat_Old_Name">
<English>Galil ARM (Old)</English>
@ -40,6 +43,7 @@
<Italian>Galil ARM (Vecchio)</Italian>
<Japanese>ガリル ARM (使い古し)</Japanese>
<Russian>Galil ARM (Старый)</Russian>
<French>Galil ARM (Ancien)</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_GLX_Name">
<English>GLX 160</English>
@ -48,6 +52,7 @@
<Italian>GLX-160</Italian>
<Japanese>GLX 160</Japanese>
<Russian>GLX 160</Russian>
<French>GLX 160</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_GLX_Snake_Name">
<English>GLX 160 (Snake)</English>
@ -64,6 +69,7 @@
<Italian>GLX-160 (Hex)</Italian>
<Japanese>GLX 160 (六角形迷彩)</Japanese>
<Russian>GLX 160 (Гекс)</Russian>
<French>GLX 160 (Hex)</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_GLX_GreenHex_Name">
<English>GLX 160 (Green Hex)</English>
@ -72,6 +78,7 @@
<Italian>GLX-160 (Hex Verde)</Italian>
<Japanese>GLX 160 (緑六角形迷彩)</Japanese>
<Russian>GLX 160 (Зеленый Гекс)</Russian>
<French>GLX 160 (Vert Hex)</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_GLX_Camo_Name">
<English>GLX 160 (Camo)</English>
@ -80,6 +87,7 @@
<Italian>GLX-160 (Mimetica)</Italian>
<Japanese>GLX 160 (迷彩)</Japanese>
<Russian>GLX 160 (Камуфляж)</Russian>
<French>GLX 160 (Camo)</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_GLX_Tan_Name">
<English>GLX 160 (Sand)</English>
@ -88,6 +96,7 @@
<Italian>GLX-160 (Sabbia)</Italian>
<Japanese>GLX 160 (サンド)</Japanese>
<Russian>GLX 160 (Песочный)</Russian>
<French>GLX 160 (Sable)</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_EBR_Black_Name">
<English>Mk14 Mod 1 EBR (Black)</English>
@ -96,6 +105,7 @@
<Italian>Mk14 Mod 1 EBR (Nero)</Italian>
<Japanese>Mk14 Mod 1 EBR (ブラック)</Japanese>
<Russian>Mk14 Mod 1 EBR (Черный)</Russian>
<French>Mk14 Mod 1 EBR (Noir)</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_EBR_Snake_Name">
<English>Mk14 Mod 1 EBR (Snake)</English>
@ -111,6 +121,7 @@
<German>Vektor SS-77</German>
<Japanese>ヴェクター SS-77</Japanese>
<Russian>Vektor SS-77</Russian>
<French>Vektor SS-77</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_S77_AAF_Name">
<English>Vektor SS-77 (Camo)</English>
@ -119,6 +130,7 @@
<Italian>Vektor SS-77 (Mimetica)</Italian>
<Japanese>ヴェクター SS-77 (迷彩)</Japanese>
<Russian>Vektor SS-77 (Камуфляж)</Russian>
<French>Vektor SS-77 (Camo)</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_S77_Hex_Name">
<English>Vektor SS-77 (Hex)</English>
@ -127,6 +139,7 @@
<Italian>Vektor SS-77 (Hex)</Italian>
<Japanese>ヴェクター SS-77 (六角形迷彩)</Japanese>
<Russian>Vektor SS-77 (гекс)</Russian>
<French>Vektor SS-77 (Hex)</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_S77_GreenHex_Name">
<English>Vektor SS-77 (Green Hex)</English>
@ -135,6 +148,7 @@
<Italian>Vektor SS-77 (Hex Verde)</Italian>
<Japanese>ヴェクター SS-77 (緑六角形迷彩)</Japanese>
<Russian>Vektor SS-77 (зеленый гекс)</Russian>
<French>Vektor SS-77 (VertHex)</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_S77_Desert_Name">
<English>Vektor SS-77 (Desert)</English>
@ -143,6 +157,7 @@
<Italian>Vektor SS-77 (Deserto)</Italian>
<Japanese>ヴェクター SS-77 (砂漠迷彩)</Japanese>
<Russian>Vektor SS-77 (песочныйt)</Russian>
<French>Vektor SS-77 (Désert)</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_S77_Compact_Name">
<English>Vektor SS-77 Compact</English>
@ -151,6 +166,7 @@
<Italian>Vektor SS-77 Compatto</Italian>
<Japanese>ヴェクター SS-77 コンパクト</Japanese>
<Russian>Vektor SS-77 Compact</Russian>
<French>Vektor SS-77 Compacte</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_S77_Compact_Snake_Name">
<English>Vektor SS-77 Compact (Snake)</English>
@ -167,6 +183,7 @@
<Italian>FN FAL 50.00 (Legno)</Italian>
<Japanese>FN FAL 50.00 (森林迷彩)</Japanese>
<Russian>FN FAL 50.00 (лесной)</Russian>
<French>FN FAL 50.00 (Bois)</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_SLR_GL_Wood_Name">
<English>FN FAL 50.00 GL (Wood)</English>
@ -175,6 +192,7 @@
<Italian>FN FAL 50.00 GL (Legno)</Italian>
<Japanese>FN FAL 50.00 GL (森林迷彩)</Japanese>
<Russian>FN FAL 50.00 GL (лесной)</Russian>
<French>FN FAL 50.00 GL (Bois)</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_SLR_Name">
<English>FN FAL 50.00</English>
@ -183,6 +201,7 @@
<Italian>FN FAL 50.00</Italian>
<Japanese>FN FAL 50.00</Japanese>
<Russian>FN FAL 50.00</Russian>
<French>FN FAL 50.00</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_SLR_GL_Name">
<English>FN FAL 50.00 GL</English>
@ -191,6 +210,7 @@
<Italian>FN FAL 50.00 GL</Italian>
<Japanese>FN FAL 50.00 GL</Japanese>
<Russian>FN FAL 50.00 GL</Russian>
<French>FN FAL 50.00 GL</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_SLR_Desert_Name">
<English>FN FAL 50.00 (Desert)</English>
@ -199,6 +219,7 @@
<Italian>FN FAL 50.00 (Deserto)</Italian>
<Japanese>FN FAL 50.00 (砂漠迷彩)</Japanese>
<Russian>FN FAL 50.00 (песочный)</Russian>
<French>FN FAL 50.00 (Désert)</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_SLR_Camo_Name">
<English>FN FAL 50.00 (Jungle)</English>
@ -207,6 +228,7 @@
<Italian>FN FAL 50,00 (Giungla)</Italian>
<Japanese>FN FAL 50.00 (熱帯迷彩)</Japanese>
<Russian>FN FAL 50.00 (джунгли)</Russian>
<French>FN FAL 50.00 (Jungle)</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_Velko_R4_Name">
<English>Vektor R4</English>
@ -215,6 +237,7 @@
<Italian>Vektor R4</Italian>
<Japanese>ヴェクター R5</Japanese>
<Russian>Vektor R4</Russian>
<French>Vektor R4</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_Velko_R5_Name">
<English>Vektor R5 Carbine</English>
@ -223,6 +246,7 @@
<Italian>Vektor R5 Carabina</Italian>
<Japanese>ヴェクター R5 カービン</Japanese>
<Russian>Vektor R5 Carbine</Russian>
<French>Vektor R5 Carbine</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_Velko_R5_GL_Name">
<English>Vektor R5 Carbine GL</English>
@ -231,6 +255,7 @@
<Italian>Vektor R5 Carabina GL</Italian>
<Japanese>ヴェクター R5 カービン GL</Japanese>
<Russian>Vektor R5 Carbine GL</Russian>
<French>Vektor R5 Carbine GL</French>
</Key>
<Key ID="STR_ACE_Compat_WS_RealisticNames_Velko_R5_Snake_Name">
<English>Vektor R5 Carbine (Snake)</English>

View File

@ -22,7 +22,7 @@ params ["_wirecoil", "_unit"];
private _wireNoGeo = "ACE_ConcertinaWireNoGeo" createVehicle [0,0,0];
{
_wireNoGeo animate [_x, 1];
} count WIRE_FAST;
} forEach WIRE_FAST;
GVAR(placer) = _unit;
private _dir = getDir _unit;
@ -51,7 +51,7 @@ GVAR(deployPFH) = [{
private _wire = "ACE_ConcertinaWire" createvehicle [0, 0, 0];
{
_wire animate [_x, _anim];
} count WIRE_FAST;
} forEach WIRE_FAST;
[{
params ["_args", "_idPFH"];
@ -74,7 +74,7 @@ GVAR(deployPFH) = [{
_wireNoGeo setDir _dir;
{
_wireNoGeo animate [_x, _anim];
} count WIRE_FAST;
} forEach WIRE_FAST;
}, 0, [_wireNoGeo, _wireNoGeoPos, _unit]] call CBA_fnc_addPerFrameHandler;
[LLSTRING(RollWire), "", ""] call EFUNC(interaction,showMouseHint);

View File

@ -20,7 +20,7 @@ params ["_wire"];
{
_wire animate [_x, 1];
} count WIRE_FAST;
} forEach WIRE_FAST;
[{
params ["_args", "_idPFH"];

View File

@ -50,7 +50,7 @@ if (!_doNotDropAmmo) then {
if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith {
_holder = _x;
};
} count ((getpos _target) nearObjects [DISARM_CONTAINER, 3]);
} forEach ((getpos _target) nearObjects [DISARM_CONTAINER, 3]);
};
//Create a new weapon holder

View File

@ -93,7 +93,7 @@ GVAR(disarmTarget) = _target;
if ((_x getVariable [QGVAR(disarmUnit), objNull]) == _target) exitWith {
_holder = _x;
};
} count ((getpos _target) nearObjects [DISARM_CONTAINER, 3]);
} forEach ((getpos _target) nearObjects [DISARM_CONTAINER, 3]);
//If a holder exists, show it's inventory
if (!isNull _holder) then {

View File

@ -29,10 +29,10 @@ private _hasRequired = true;
private _detonators = [_unit] call FUNC(getDetonators);
{
if !(_x in _detonators) exitWith{
if !(_x in _detonators) exitWith {
_hasRequired = false;
};
} count _requiredItems;
} forEach _requiredItems;
private _code = "";
while {true} do {

View File

@ -31,7 +31,7 @@ private _children = [];
if !(_x in _detonators) exitWith {
_hasRequiredItems = false;
};
} count _required;
} forEach _required;
if (_hasRequiredItems && {(!_isAttached) || {(getNumber (_x >> "isAttachable")) == 1}}) then {
_children pushBack
[

View File

@ -24,7 +24,6 @@ private _explosive = [];
if ((_x select 1) == _code) exitWith {
_explosive = _x;
};
false
} count GVAR(CellphoneIEDs);
} forEach GVAR(CellphoneIEDs);
_explosive

View File

@ -34,8 +34,8 @@ private _deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []];
//Only delete the hook first so the rope falls down.
//Note: ropeDetach was used here before, but the command seems a bit broken.
deleteVehicle _hook;
[{{deleteVehicle _x} count _this}, [_ropeTop, _ropeBottom, _dummy], 60] call CBA_fnc_waitAndExecute;
} count _deployedRopes;
[{{deleteVehicle _x} forEach _this}, [_ropeTop, _ropeBottom, _dummy], 60] call CBA_fnc_waitAndExecute;
} forEach _deployedRopes;
_vehicle setVariable [QGVAR(deployedRopes), [], true];

View File

@ -67,9 +67,7 @@ if (GVAR(requireRopeItems) && {_ropeClass != ""}) then {
//deployedRopes format: attachment point, top part of the rope, bottom part of the rope, attachTo helper object, occupied, broken
_deployedRopes pushBack [_ropeOrigin, _ropeTop, _ropeBottom, _dummy, _hook, false, false];
false
} count _ropeOrigins;
} forEach _ropeOrigins;
_vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true];
_vehicle setVariable [QGVAR(deploymentStage), 3, true];

View File

@ -22,5 +22,4 @@ private _synchedUnits = synchronizedObjects _module;
_x = vehicle _x;
};
[_x] call FUNC(equipFRIES);
false
} count _synchedUnits;
} forEach _synchedUnits;

View File

@ -44,8 +44,7 @@ private _turretConfig = [configOf _vehicle, _turret] call EFUNC(common,getTurret
if (_x != "this") then {
_weaponMagazines append getArray (configFile >> "CfgWeapons" >> _weapon >> _x >> "magazines");
};
false
} count _muzzles;
} forEach _muzzles;
// Fix the `in` operator being case sensitive and BI fucking up the spelling of their own classnames
private _weaponMagazinesCheck = _weaponMagazines apply {toLowerANSI _x};
@ -62,8 +61,7 @@ private _turretConfig = [configOf _vehicle, _turret] call EFUNC(common,getTurret
_initSpeed = _initSpeedCoef;
};
};
false
} count (_vehicle weaponsTurret _turret);
} forEach (_vehicle weaponsTurret _turret);
private _offset = "ace_fcs" callExtension format ["%1,%2,%3,%4", _initSpeed, _airFriction, _angleTarget, _distance];
_offset = parseNumber _offset;
@ -72,8 +70,7 @@ private _turretConfig = [configOf _vehicle, _turret] call EFUNC(common,getTurret
_FCSMagazines pushBack _magazine;
_FCSElevation pushBack _offset;
};
false
} count (_vehicle magazinesTurret _turret);
} forEach (_vehicle magazinesTurret _turret);
[_vehicle, format ["%1_%2", QGVAR(Distance), _turret], _distance] call EFUNC(common,setVariablePublic);
[_vehicle, format ["%1_%2", QGVAR(InitSpeed), _turret], _FCSInitSpeed] call EFUNC(common,setVariablePublic);

View File

@ -266,6 +266,7 @@
<Korean>다시 채우기만 가능</Korean>
<Spanish>Sólo rellenar</Spanish>
<Portuguese>Apenas reabastecer</Portuguese>
<French>Remplissage uniquement</French>
</Key>
<Key ID="STR_ACE_Field_Rations_TerrainObjectActions_DisplayName">
<English>Terrain Object Actions</English>
@ -279,6 +280,7 @@
<Korean>지형 물체 상호작용</Korean>
<Spanish>Acciones sobre objetos del terreno</Spanish>
<Portuguese>Ações para objetos do terreno</Portuguese>
<French>Actions sur les objets du terrain</French>
</Key>
<Key ID="STR_ACE_Field_Rations_TerrainObjectActions_Description">
<English>Enables water source actions for terrain objects.</English>
@ -292,6 +294,7 @@
<Korean>지형 물체에서 물을 얻는 게 가능해집니다.</Korean>
<Spanish>Habilitar acciones de suministros de agua para los objetos en el suelo.</Spanish>
<Portuguese>Habilita ações para suprimentos de água para objetos do terreno.</Portuguese>
<French>Active les actions relatives aux sources d'eau pour les objets de terrain.</French>
</Key>
<Key ID="STR_ACE_Field_Rations_AffectAdvancedFatigue_DisplayName">
<English>Affect Advanced Fatigue</English>
@ -306,6 +309,7 @@
<Korean>고급 피로도에 영향을 끼침</Korean>
<Spanish>Afecta a la Fatiga Avanzada</Spanish>
<Portuguese>Afeta a Fadiga Avançada</Portuguese>
<French>Affectation Fatigue avancée</French>
</Key>
<Key ID="STR_ACE_Field_Rations_AffectAdvancedFatigue_Description">
<English>Controls if thirst and hunger should affect ACE Advanced Fatigue.</English>
@ -320,6 +324,7 @@
<Korean>배고픔과 목마름이 고급 피로도에 영향을 끼칠지를 정합니다</Korean>
<Spanish>Controla si la sed y el hambre afectan a la Fatiga Avanzada de ACE</Spanish>
<Portuguese>Controla se a sede e a fome afetam a Fadiga Avançada do ACE.</Portuguese>
<French>Contrôle si la soif et la faim doivent affecter la fatigue avancée ACE.</French>
</Key>
<Key ID="STR_ACE_Field_Rations_HudType_DisplayName">
<English>HUD Type</English>
@ -334,6 +339,7 @@
<Korean>HUD 종류</Korean>
<Spanish>Tipo de HUD</Spanish>
<Portuguese>Tipo de HUD</Portuguese>
<French>Type de HUD</French>
</Key>
<Key ID="STR_ACE_Field_Rations_HudType_Description">
<English>Selects which HUD style will be used.</English>
@ -348,6 +354,7 @@
<Korean>사용될 HUD 스타일을 고르십시오.</Korean>
<Spanish>Selecciona qué estilo de HUD será utilizado.</Spanish>
<Portuguese>Seleciona qual estilo de HUD será usado.</Portuguese>
<French>Sélectionne le style HUD à utiliser.</French>
</Key>
<Key ID="STR_ACE_Field_Rations_ColoredIcons">
<English>Colored Icons</English>
@ -362,6 +369,7 @@
<Korean>색깔 아이콘</Korean>
<Spanish>Iconos coloreados</Spanish>
<Portuguese>Ícones coloridos</Portuguese>
<French>Icônes de couleur</French>
</Key>
<Key ID="STR_ACE_Field_Rations_DrainingIcons">
<English>Draining Icons</English>
@ -376,6 +384,7 @@
<Korean>빠지는 아이콘</Korean>
<Spanish>Iconos de drenado</Spanish>
<Portuguese>Ícones de drenagem</Portuguese>
<French>Icônes incolores</French>
</Key>
<Key ID="STR_ACE_Field_Rations_HudShowLevel_DisplayName">
<English>HUD Show Level</English>
@ -390,6 +399,7 @@
<Korean>HUD 표시</Korean>
<Spanish>Mostrar nivel en HUD</Spanish>
<Portuguese>Mostrar nível no HUD</Portuguese>
<French>Afficher le niveau dans le HUD</French>
</Key>
<Key ID="STR_ACE_Field_Rations_HudShowLevel_Description">
<English>Automatically show the HUD when either thirst or hunger are above this level.</English>
@ -404,6 +414,7 @@
<Korean>정한 퍼센트 이하로 내려가면 HUD가 나타나게 합니다.</Korean>
<Spanish>Mostrar automáticamente el HUD cuando la sed o el hambre están por encima de este nivel.</Spanish>
<Portuguese>Mostrar automaticamente o HUD quando a sede ou a fome estão acima deste nível.</Portuguese>
<French>Affiche automatiquement le HUD dès que la soif ou la faim sont au-dessus de ce niveau.</French>
</Key>
<Key ID="STR_ACE_Field_Rations_Always">
<English>Always</English>
@ -435,6 +446,7 @@
<Korean>색깔 아이콘 - 투명도</Korean>
<Spanish>Iconos coloreados - Transparencia</Spanish>
<Portuguese>Ícones coloridos - Transparência</Portuguese>
<French>Icônes de couleur - Transparence</French>
</Key>
<Key ID="STR_ACE_Field_Rations_HudTransparency_Description">
<English>Controls the transparency of the Colored Icons HUD. Dynamic setting makes the HUD less transparent as thirst or hunger increase.</English>
@ -449,6 +461,7 @@
<Korean>색깔 아이콘의 투명도를 조절합니다. 동적 설정의 경우 배고픔이나 목마름이 해결되면 덜 투명하게 바뀝니다.</Korean>
<Spanish>Controla la transparencia de los Iconos coloreados en el HUD. La opción dinámica muestra el HUD menos transparente cuando la sed o el hambre aumentan.</Spanish>
<Portuguese>Controla a transparência dos ícones coloridos no HUD. A configuração dinâmica torna o HUD menos transparente à medida que a sede ou a fome aumentam.</Portuguese>
<French>Contrôle la transparence du HUD des icônes colorées. Un réglage dynamique rend le HUD moins transparent lorsque la soif ou la faim augmentent.</French>
</Key>
<Key ID="STR_ACE_Field_Rations_Dynamic">
<English>Dynamic</English>
@ -479,6 +492,7 @@
<Korean>식수 보급량</Korean>
<Spanish>Suministro de agua</Spanish>
<Portuguese>Suprimentos de água</Portuguese>
<French>Réserve d'eau</French>
</Key>
<Key ID="STR_ACE_Field_Rations_WaterSupply_3DEN_Description">
<English>The amount of water available for ACE Field Rations water source actions (-1 disabled, -10 infinite)</English>
@ -492,6 +506,7 @@
<Korean>ACE 전투식량 물 근처 행동에서 얼마나 물을 얻어 갈 수 있는지를 정합니다 (-1은 비활성화, -10은 무한대)</Korean>
<Spanish>La cantidad de agua disponible para las acciones de suministro de agua de las Raciones de Combate de ACE (-1 deshabilitado, -10 infinito)</Spanish>
<Portuguese>A quantidade de água disponível para as ações de suprimentos de água das Rações de Campo do ACE (-1 desativado, -10 infinito)</Portuguese>
<French>Quantité d'eau disponible pour les actions relatives aux sources d'eau des rations de campagne ACE (-1 désactivé, -10 infini).</French>
</Key>
<Key ID="STR_ACE_Field_Rations_WaterSource">
<English>Water Source</English>
@ -506,6 +521,7 @@
<Korean>수원지</Korean>
<Spanish>Suministro de agua</Spanish>
<Portuguese>Fonte de água</Portuguese>
<French>Source d'eau</French>
</Key>
<Key ID="STR_ACE_Field_Rations_CheckWater">
<English>Check Remaining Water</English>
@ -520,6 +536,7 @@
<Korean>남은 물 확인</Korean>
<Spanish>Comprobar agua restante</Spanish>
<Portuguese>Verificar água restante</Portuguese>
<French>Vérifier l'eau restante</French>
</Key>
<Key ID="STR_ACE_Field_Rations_CheckingWater">
<English>Checking remaining water...</English>
@ -534,6 +551,7 @@
<Korean>남은 물 확인 중...</Korean>
<Spanish>Comprobando agua restante...</Spanish>
<Portuguese>Verificando água restante...</Portuguese>
<French>Vérification de l'eau restante...</French>
</Key>
<Key ID="STR_ACE_Field_Rations_RemainingWater">
<English>There are %1 litres left.</English>
@ -548,6 +566,7 @@
<Korean>%1 리터의 물이 남아있습니다.</Korean>
<Spanish>Quedan %1 litros.</Spanish>
<Portuguese>Ainda há %1 litros.</Portuguese>
<French>Il reste %1 litres.</French>
</Key>
<Key ID="STR_ACE_Field_Rations_NoWaterRemaining">
<English>There is no water left.</English>
@ -562,6 +581,7 @@
<Korean>물이 한 방울도 없습니다.</Korean>
<Spanish>No queda agua.</Spanish>
<Portuguese>Não há mais água.</Portuguese>
<French>Il n'y a plus d'eau.</French>
</Key>
<Key ID="STR_ACE_Field_Rations_DrinkFromSource">
<English>Drink From Source</English>
@ -575,6 +595,7 @@
<Korean>수원에서 물 마시기</Korean>
<Spanish>Beber desde el suministro</Spanish>
<Portuguese>Beber da fonte</Portuguese>
<French>Boire à la source</French>
</Key>
<Key ID="STR_ACE_Field_Rations_Refill">
<English>Refill</English>
@ -640,6 +661,7 @@
<Korean>%1 먹는 중...</Korean>
<Spanish>Comiendo %1...</Spanish>
<Portuguese>Comendo %1...</Portuguese>
<French>Manger %1...</French>
</Key>
<Key ID="STR_ACE_Field_Rations_DrinkingX">
<English>Drinking %1...</English>
@ -654,6 +676,7 @@
<Korean>%1 마시는 중...</Korean>
<Spanish>Bebiendo %1...</Spanish>
<Portuguese>Bebendo %1...</Portuguese>
<French>Boire %1...</French>
</Key>
<Key ID="STR_ACE_Field_Rations_DrinkingFromX">
<English>Drinking from %1...</English>
@ -668,6 +691,7 @@
<Korean>%1 으로 부터 마시는 중...</Korean>
<Spanish>Bebiendo desde %1...</Spanish>
<Portuguese>Bebendo de %1...</Portuguese>
<French>Boire à %1...</French>
</Key>
<Key ID="STR_ACE_Field_Rations_DrinkingFromSource">
<English>Drinking from source...</English>
@ -681,6 +705,7 @@
<Korean>수원에서 마시는 중...</Korean>
<Spanish>Bebiendo desde el suministro...</Spanish>
<Portuguese>Bebendo da fonte...</Portuguese>
<French>Boire à la source...</French>
</Key>
<Key ID="STR_ACE_Field_Rations_WaterBottle_DisplayName">
<English>Water Bottle</English>
@ -899,6 +924,7 @@
<Korean>상쾌한 레몬라임향의 탄산음료</Korean>
<Spanish>Bebida refrescante de sabor lima y limón</Spanish>
<Portuguese>Bebida refrescante de sabor limão e lima</Portuguese>
<French>Une boisson gazeuse rafraîchissante au goût de citron et de citron vert.</French>
</Key>
<Key ID="STR_ACE_Field_Rations_Can_Franta_Description">
<English>Orange flavored soft drink with a tingly, fruity taste</English>
@ -913,6 +939,7 @@
<Korean>오렌지 향의 톡쏘는 탄산음료</Korean>
<Spanish>Bebida refrescante de sabor naranja, con un chispeante y afrutado sabor.</Spanish>
<Portuguese>Bebida refrescante de sabor laranja, com um sabor frutado e formigante.</Portuguese>
<French>Une boisson gazeuse aromatisée à l'orange</French>
</Key>
<Key ID="STR_ACE_Field_Rations_Can_RedGull_Description">
<English>Red Gull gives you wings</English>
@ -927,6 +954,7 @@
<Korean>레드굴은 날개를 달아줘요</Korean>
<Spanish>Red Gull te da alas</Spanish>
<Portuguese>Red Gull te dá asas</Portuguese>
<French>Red Gull vous donne des ailes</French>
</Key>
<Key ID="STR_ACE_Field_Rations_MRE_LambCurry_DisplayName">
<English>MRE Lamb Curry</English>
@ -975,6 +1003,7 @@
<Korean>MRE 비프스튜</Korean>
<Spanish>MRE Estofado de ternera</Spanish>
<Portuguese>MRE ensopado de carne</Portuguese>
<French>MRE Ragoût de bœuf</French>
</Key>
<Key ID="STR_ACE_Field_Rations_MRE_BeefStew_Description">
<English>An MRE containing Beef Stew. Heat for best effect</English>
@ -989,6 +1018,7 @@
<Korean>비프스튜가 들어있는 MRE입니다. 뜨겁게 먹을 때 가장 좋습니다</Korean>
<Spanish>Un MRE que contiene estofado de ternera. Calentar para mejor efecto.</Spanish>
<Portuguese>Um MRE contendo ensopado de carne. Aquecer para melhor efeito</Portuguese>
<French>Un MRE contenant du ragoût de bœuf. Chauffer pour un meilleur effet</French>
</Key>
<Key ID="STR_ACE_Field_Rations_MRE_CreamTomatoSoup_DisplayName">
<English>MRE Cream Tomato Soup</English>
@ -1237,6 +1267,7 @@
<Russian>Семечки подсолнуха</Russian>
<Spanish>Pipas de girasol</Spanish>
<Portuguese>Sementes de girassol</Portuguese>
<French>Graines de tournesol</French>
</Key>
<Key ID="STR_ACE_Field_Rations_SunflowerSeeds_Description">
<English>Roasted And Salted</English>
@ -1249,6 +1280,7 @@
<Russian>Поджаренные и солёные</Russian>
<Spanish>Tostadas y saladas</Spanish>
<Portuguese>Torradas e salgadas</Portuguese>
<French>Grillé et salé</French>
</Key>
</Package>
</Project>

View File

@ -38,6 +38,7 @@
<Italian>%3Fame%4 aumenta linearmente con la velocità di movimento del soldato. Si rigenera consumando cibo.&lt;br/&gt;&lt;br/&gt;%3Usa:%4&lt;br/&gt;%2Raccogli cibo.&lt;br/&gt;%2Usa [%3%12%4] e scegli %3sopravvivenza%4.&lt;br /&gt;%2Scegli un articolo da mangiare.</Italian>
<Japanese>%3空腹度%4は兵士の移動速度に比例して増加します。食べ物を食べることで回復します。&lt;br/&gt;&lt;br/&gt;%3使用方法:%4&lt;br/&gt;%2食べ物を持つ。&lt;br/&gt;%2[%3%12%4] を使って%3サバイバル%4を選択。&lt;br/&gt;%2食べたいものを選ぶ。</Japanese>
<Russian>%3Голод%4 линейно увеличивается со скоростью передвижения солдата. Восстанавливайтесь, употребляя пищу.&lt;br/&gt;&lt;br/&gt;%3 Использование:%4&lt;br/&gt;%2Возьмите еду.&lt;br/&gt;%2Используйте [%3%12%4] и выберите %3Выживание% 4.&lt;br/&gt;%2Выберите продукт для потребления.</Russian>
<French>%3La faim%4 augmente linéairement avec la vitesse de déplacement du soldat. Il se régénère en consommant de la nourriture.&lt;br/&gt;&lt;br/&gt;%3Utilisation:%4&lt;br/&gt;%2Ramasser la nourriture.&lt;br/&gt;%2Utilisez [%3%12%4] et sélectionnez %3Survie%4.&lt;br/&gt;%2Choisissez un article à consommer.</French>
</Key>
<Key ID="STR_ACE_FieldManual_Field_Rations_Thirst_DisplayName">
<English>Thirst</English>
@ -59,6 +60,7 @@
<Italian>%3Sete%4 aumenta linearmente con la velocità di movimento del soldato. Si rigenera bevendo liquidi.&lt;br/&gt;&lt;br/&gt;%3Usa:%4&lt;br/&gt;%2Raccogli bevanda.&lt;br/&gt;%2Usa [%3%12%4] e scegli %3sopravvivenza%4.&lt;br /&gt;%2Scegli un articolo da bere.</Italian>
<Japanese>%3喉の渇き%4は兵士の移動速度に比例して増加します。飲み物を飲むことで回復します。&lt;br/&gt;&lt;br/&gt;%3使用方法:%4&lt;br/&gt;%2飲み物を持つ。&lt;br/&gt;%2[%3%12%4] を使って%3サバイバル%4を選択。&lt;br/&gt;%2飲みたいものを選ぶ。</Japanese>
<Russian>%3Жажда%4 линейно увеличивается со скоростью передвижения солдата. Восстанавливайтесь, употребляя напитки.&lt;br/&gt;&lt;br/&gt;%3 Использование:%4&lt;br/&gt;%2Возьмите напиток.&lt;br/&gt;%2Используйте [%3%12%4] и выберите %3Выживание% 4.&lt;br/&gt;%2Выберите напиток для потребления.</Russian>
<French>%3La soif%4 augmente linéairement avec la vitesse de déplacement du soldat. Elle se régénère en buvant des liquides.&lt;br/&gt;&lt;br/&gt;%3Utilisez [%3%12%4] et choisissez %3survival%4.&lt;br /&gt;%2Choisissez un article à boire.</French>
</Key>
<Key ID="STR_ACE_FieldManual_Medical_Treatment_DisplayName">
<English>Medical Treatment</English>
@ -91,6 +93,7 @@
<Italian>%3Adenosina%4 è usata per rallentare il ritmo cardiaco.&lt;br/&gt;&lt;br/&gt;%3Utilizzo:%4&lt;br/&gt;%2Usa [%3%13%4] o [%3%14%4] e seleziona un arto.&lt;br/&gt;%2Inject %3Adenosina%4.</Italian>
<Japanese>%3アデシン%4は心拍数を下げるのに使われます。&lt;br/&gt;&lt;br/&gt;%3使用方法:%4&lt;br/&gt;%2[%3%13%4] または [%3%14%4] を使って四肢を選択します。&lt;br/&gt;%2そして%3アデシン%4を注射します。</Japanese>
<Russian>%3Аденозин%4 используется для снижения частоты сердечных сокращений.&lt;br/&gt;&lt;br/&gt;%3Применение:%4&lt;br/&gt;%2Используйте [%3%13%4] или [%3%14%4] и выберите конечность.&lt;br/&gt;%2Введите %3Аденозин%4.</Russian>
<French>L'%3adénosine%4 est utilisée pour réduire la fréquence cardiaque.&lt;br/&gt;&lt;br/&gt;%3Utilisation:%4&lt;br/&gt;%2Utilisez [%3%13%4] ou [%3%14%4] et sélectionnez un membre.&lt;br/&gt;%2Injectez l'%3Adénosine%4.</French>
</Key>
<Key ID="STR_ACE_FieldManual_Medical_Treatment_Bandages_DisplayName">
<English>Bandages</English>
@ -131,6 +134,7 @@
<German>IV-Flüssigkeiten</German>
<Italian>Fluidi EV</Italian>
<Japanese>IV 輸液</Japanese>
<French>IV Fluides</French>
</Key>
<Key ID="STR_ACE_FieldManual_Medical_Treatment_IVFluids_ShortName">
<English>Restore Blood Volume</English>
@ -141,6 +145,7 @@
<Italian>Ristorano Volume di Sangue</Italian>
<Japanese>血液量を回復する</Japanese>
<Russian>Внутривенные жидкости</Russian>
<French>Restaurer le volume sanguin</French>
</Key>
<Key ID="STR_ACE_FieldManual_Medical_Treatment_IVFluids_Description">
<English>%3IV fluids%4 restore lost blood volume. Blood, Plasma, and Saline are functionally the same.&lt;br/&gt;&lt;br/&gt;%3Usage:%4&lt;br/&gt;%2Use [%3%13%4] or [%3%14%4] and select an appendage.&lt;br/&gt;%2Restore blood volume by selecting desired %3IV Fluid%4 type.</English>
@ -150,6 +155,7 @@
<German>%3IV-Flüssigkeiten%4 stellen das verlorene Blutvolumen wieder her. Blut, Plasma und Kochsalzlösung sind funktionell gleich.&lt;br/&gt;&lt;br/&gt;%3Verwende:%4&lt;br/&gt;%2Verwende [%3%13%4] oder [%3%14%4] und wählen ein Körperteil aus..&lt;br/&gt;%2Stelle das Blutvolumen wieder her, indem der gewünschte %3IV Flüssigkeitstyp%4 ausgewählt wird.</German>
<Italian>%3Fluidi EV%4 ristorano volume di sangue perso. Sangue, Plasma, e Salina sono funzionalmente identiche.&lt;br/&gt;&lt;br/&gt;%3Utilizzo:%4&lt;br/&gt;%2Usa [%3%13%4] o [%3%14%4] e seleziona un arto.&lt;br/&gt;%2Ristora il volume di sangue selezionando il tipo di %3Fluido EV%4 desiderato.</Italian>
<Japanese>%3IV 輸液%4は失われた血液を回復します。血液、血漿、生理食塩水は機能的には同じです。&lt;br/&gt;&lt;br/&gt;%3使用方法:%4&lt;br/&gt;%2[%3%13%4] または [%3%14%4] を使って四肢を選択します。&lt;br/&gt;%2希望の%3IV 輸液%4の種類を選択して、血液量を復元します。</Japanese>
<Russian>%%3Внутривенные жидкости%4восстанавливают потерянный объем крови. Кровь, плазма и физраствор функционально идентичны.&lt;br/&gt;&lt;br/&gt;%3 Использование:%4&lt;br/&gt;%2 Используйте [%3%13%4] или [%3%14%4] и выберите добавку.&lt;br/&gt;%2 Восстановите объем крови выбрав желаемый %4тип %3жидкости</Russian>
</Key>
<Key ID="STR_ACE_FieldManual_Medical_Treatment_Epinephrine_ShortName">
<English>Increase Heart Rate | Wake Up Faster</English>
@ -200,6 +206,7 @@
<Italian>Risolvi frattura</Italian>
<Japanese>骨折を治す</Japanese>
<Russian>Исправлять переломы</Russian>
<French>Réparation des fractures</French>
</Key>
<Key ID="STR_ACE_FieldManual_Medical_Treatment_Splint_Description">
<English>A %3Splint%4 is used to fix fractures. The %3Splint%4 is consumed when used.&lt;br/&gt;&lt;br/&gt;%3Usage:%4&lt;br/&gt;%2Use [%3%13%4] or [%3%14%4] and select an affected appendage.&lt;br/&gt;%2Select %3Apply Splint%4.</English>
@ -524,6 +531,7 @@
<Korean>휴대용 기상 관측 장비입니다</Korean>
<Japanese>携帯気象予報所</Japanese>
<Russian>Карманная метеостанция</Russian>
<French>Station météo de poche</French>
</Key>
<Key ID="STR_ACE_FieldManual_Items_Kestrel4500_Description">
<English>The %3Kestrel 4500 Pocket Weather Tracker%4 is a mini weather station useful for collecting the the following weather data:&lt;br/&gt;%2Heading and wind direction&lt;br/&gt;%2Crosswind and headwind&lt;br/&gt;%2Altitude and barometric pressure&lt;br/&gt;%2Wet bulb temperature&lt;br/&gt;%2Humidity and dewpoint&lt;br/&gt;%2Density altitude&lt;br/&gt;%2Wind chill and temperature&lt;br/&gt;%2Time and date&lt;br/&gt;%2Minimum, maximum, and average values&lt;br/&gt;&lt;br/&gt;%3Usage:%4&lt;br/&gt;%2Equip a %3Kestrel%4.&lt;br/&gt;%2Use [%3%12%4] and select %3Equipment%4.&lt;br/&gt;%2Select %3Open%4.</English>
@ -539,6 +547,7 @@
<Korean>위치를 삼각측량합니다</Korean>
<Japanese>三角測量で位置を特定</Japanese>
<Russian>Передавайте свое местоположение</Russian>
<French>Trianguler votre position</French>
</Key>
<Key ID="STR_ACE_FieldManual_Items_MapTools_Description">
<English>The %3Map Tools%4 are a set of tools that allows a soldier to measure distances and angles. Useful for land, and calculating firing solutions for artillery.&lt;br/&gt;&lt;br/&gt;%3Usage:%4&lt;br/&gt;%2Open %3Map%4.&lt;br/&gt;%2Use [%3%12%4] and select %3Map Tools%4.&lt;br/&gt;%2 The Tool can be moved by dragging with [%3Left-Click%4] while holding [%3ALT%4].</English>
@ -546,6 +555,7 @@
<Italian>Gli %3Strumenti Cartografici%4 permettono al soldato di misurare distanze e angoli sulla mappa. Utile a terra e per calculare direzioni di tiro per artiglieria.&lt;br/&gt;&lt;br/&gt;%3Utilizzo:%4&lt;br/&gt;%2Apri %3Mappa%4.&lt;br/&gt;%2Usa [%3%12%4] e seleziona %3Strumenti Cartografici%4.&lt;br/&gt;%2 Lo strumento può essere spostato trascinandolo con [%3Click-Sinistro%4] premendo [%3ALT%4].</Italian>
<Korean>%3독도용 도구%4는 병사가 거리와 각도를 측정할 수 있는 도구 세트입니다. 지상에서 유용하며 포병 사격 솔루션 계산에 유용합니다,&lt;br/&gt;&lt;br/&gt;%3사용 방법:%4&lt;br/&gt;%2%3지도%4를 여십시오.&lt;br/&gt;%2[%3%12%4]를 사용하여 %3독도용 도구%4를 선택하십시오.&lt;br/&gt;%2도구는 [%3Alt 키%4]를 누른 상태에서 [%3마우스 왼쪽 클릭%4]으로 드래그하여 이동할 수 있습니다.</Korean>
<Japanese>%3マップ ツール%4は、兵士が距離と角度を測定できるようにするツールのセットです。陸上や大砲の射撃工程の計算を解くのに役立ちます。&lt;br/&gt;&lt;br/&gt;%3使用方法:%4&lt;br/&gt;%2%3マップ%4を開きます。&lt;br/&gt;%2[%3%12%4] を使って%3マップ ツール%4を選択します。&lt;br/&gt;%2 [%3ALT%4] を押しながら [%3左クリック%4] でドラッグするとツールを移動できます。</Japanese>
<French>Les %3Outils cartographiques%4 sont un ensemble d'outils permettant au soldat de mesurer des distances et des angles. Utile pour la terre et le calcul des solutions de tir pour l'artillerie.&lt;br/&gt;&lt;br/&gt;%3Utilisation:%4&lt;br/&gt;%2Ouvrir la%3Carte%4.&lt;br/&gt;%2Utiliser [%3%12%4] et sélectionner %3Outils cartographiques%4.&lt;br/&gt;%2 L'outil peut être déplacé en le faisant glisser avec [%3Clic gauche%4] tout en maintenant [%3ALT%4].</French>
</Key>
<Key ID="STR_ACE_FieldManual_Items_MicroDAGR_ShortName">
<English>Advanced DAGR</English>
@ -554,6 +564,7 @@
<Korean>고급형 DAGR입니다</Korean>
<Japanese>より高度なDAGR</Japanese>
<Russian>Продвинутый DAGR</Russian>
<French>DAGR avancé</French>
</Key>
<Key ID="STR_ACE_FieldManual_Items_MicroDAGR_Description">
<English>The %3MicroDAGR GPS%4 is an advanced version of the %3DAGR%4. It provides position, navigation, and timing (PNT) data to include:&lt;br/&gt;%2Compass and heading&lt;br/&gt;%2Date and hour synced to the mission&lt;br/&gt;%2Elevation (relative to sea level)&lt;br/&gt;%2Current speed&lt;br/&gt;%2GPS with topographic and satellite view&lt;br/&gt;%2Creating, naming, and deleting waypoints&lt;br/&gt;%2Friendly identification (Requires ACE BLUFOR Tracker Setting)&lt;br/&gt;Connection to the Vector-21 Rangefinder for data import (waypoint creation and grid reference of ranged targets)&lt;br/&gt;&lt;br/&gt;%3Usage:%4&lt;br/&gt;%2For usage instructions, please visit the dedicated %3MicroDAGR%4 wiki.</English>
@ -569,6 +580,7 @@
<Korean>사거리표</Korean>
<Japanese>射表</Japanese>
<Russian>Таблицы диапазонов</Russian>
<French>Tables de tir</French>
</Key>
<Key ID="STR_ACE_FieldManual_Items_RangeTables_ShortName">
<English>Get A Firing Solution</English>
@ -577,6 +589,7 @@
<Korean>사격 솔루션을 제공합니다</Korean>
<Japanese>撃ち方の解を得る</Japanese>
<Russian>Получите расчёт</Russian>
<French>Obtenir une solution de tir</French>
</Key>
<Key ID="STR_ACE_FieldManual_Items_RangeTables_Description">
<English>%3Range Tables%4 allow for a soldier to estimate accurate shot placement on direct or indirect targets (depending on asset). The %3Range Table%4 will automatically fill depending on the soldiers selected weapon/vehicle.&lt;br/&gt;&lt;br/&gt;%3Usage:%4&lt;br/&gt;%2Use [%3%12%4] and select %3Equipment%4.&lt;br/&gt;%2Select the desired %3Range Table%4.</English>
@ -592,6 +605,7 @@
<Korean>로프</Korean>
<Japanese>ロープ</Japanese>
<Russian>Канаты</Russian>
<French>Corde</French>
</Key>
<Key ID="STR_ACE_FieldManual_Items_Ropes_ShortName">
<English>Tow With Ease</English>
@ -690,6 +704,7 @@
<Japanese>空の目を維持する</Japanese>
<Russian>Не Отрывай Глаз От Неба</Russian>
<Hungarian>Gardez les yeux au ciel</Hungarian>
<French>Gardez les yeux au ciel</French>
</Key>
<Key ID="STR_ACE_FieldManual_Items_UAVBattery_Description">
<English>%3UAV Batteries%4 are used to recharge a UAV's energy storage. Especially useful for small UAVs.&lt;br/&gt;&lt;br/&gt;%3Usage:%4&lt;br/&gt;%2Equip a %3UAV Battery%4&lt;br/&gt;%2Approach a %3UAV%4 with its %3Engine Off%4.&lt;br/&gt;%2Use [%3%13%4] and select %3Recharge%4.</English>
@ -705,6 +720,7 @@
<Korean>진입로를 만듭니다</Korean>
<Japanese>堂々入場する</Japanese>
<Russian>Создание собственного входа</Russian>
<French>Faire son entrée</French>
</Key>
<Key ID="STR_ACE_FieldManual_Items_Wirecutter_Description">
<English>%3Wirecutters%4 are a tool that allows a soldier to bypass wired fencing. Useful for creating backdoor entrances into secure areas.&lt;br/&gt;&lt;br/&gt;%3Usage:%4&lt;br/&gt;%2Move close to a fence.&lt;br/&gt;%2Use [%3%12%4] and select %3Cut Fence%4.</English>
@ -785,6 +801,7 @@
<Korean>차량 열쇠</Korean>
<Japanese>車両キー</Japanese>
<Russian>Взлом и проникновение</Russian>
<French>Clés de véhicule</French>
</Key>
<Key ID="STR_ACE_FieldManual_Items_VehicleKey_ShortName">
<English>Lock/Unlock Vehicles</English>
@ -793,6 +810,7 @@
<Korean>차량을 잠그거나 해제합니다</Korean>
<Japanese>車両のロック/ロック解除</Japanese>
<Russian>Взлом и проникновение</Russian>
<French>Verrouiller/déverrouiller un véhicule</French>
</Key>
<Key ID="STR_ACE_FieldManual_Items_VehicleKey_Description">
<English>%3Vehicle Keys%4 are used to lock/unlock your vehicles. Vehicle keys can exist for the whole side, or keys can be created for a particular vehicle itself.&lt;br/&gt;&lt;br/&gt;%3Usage:%4&lt;br/&gt;%2Equip a %3Vehicle Key%4.&lt;br/&gt;%2Approach the vehicle that the key belongs to.&lt;br/&gt;Use [%3%13%4] and select %3Lock/Unlock Vehicle%4.&lt;br/&gt;&lt;br/&gt;&lt;t underline='1'&gt;%3Note:%4&lt;/t&gt; Lockpicks and keys are only available via scripting or ACE Vehicle Key modules.</English>

View File

@ -42,7 +42,7 @@ private _sendFingerToPlayers = [];
private _nearbyMen = (ACE_player nearObjects ["CAManBase", (GVAR(maxRange) + 2)]);
{
_nearbyMen append (crew _x);
} count (ACE_player nearObjects ["StaticWeapon", (GVAR(maxRange) + 2)]);
} forEach (ACE_player nearObjects ["StaticWeapon", (GVAR(maxRange) + 2)]);
{
if ((((eyePos _x) vectorDistance _playerEyePosASL) < GVAR(maxRange)) &&
{alive _x} &&
@ -53,8 +53,7 @@ private _nearbyMen = (ACE_player nearObjects ["CAManBase", (GVAR(maxRange) + 2)]
_sendFingerToPlayers pushBack _x;
};
true
} count _nearbyMen;
} forEach _nearbyMen;
TRACE_1("sending finger to",_sendFingerToPlayers);

View File

@ -31,9 +31,7 @@ if (!hasInterface) exitWith {};
[_key, [false, (_key != -1), false]],
false
] call CBA_fnc_addKeybind;
false
} count [
} forEach [
["Freeze", 80], // Numpad 2
["Cover", 81], // Numpad 3
["Forward", 75], // Numpad 4

View File

@ -36,7 +36,6 @@ private _rotorWash = [false, 0];
_rotorWash set [1, _distance];
};
};
false
} count (position _unit nearEntities [["Helicopter"], _radius]);
} forEach (position _unit nearEntities [["Helicopter"], _radius]);
_rotorWash

View File

@ -85,7 +85,7 @@ _affected = _affected - [ACE_player];
}, [_unit]] call CBA_fnc_waitUntilAndExecute;
};
};
} count _affected;
} forEach _affected;
// Affect local player, independently of distance
if (hasInterface && {!isNull ACE_player} && {alive ACE_player}) then {

View File

@ -1,12 +1,12 @@
#include "script_component.hpp"
["ace_settingsInitialized", {
["CBA_settingsInitialized", {
// Register and remove HCs if not client that is not server and distribution or end mission enabled
if ((!hasInterface || isServer) && {XGVAR(enabled) || XGVAR(endMission) != 0}) then {
if (isServer) then {
// Request rebalance on any unit spawn (only if distribution enabled)
if (XGVAR(enabled)) then {
["AllVehicles", "initPost", LINKFUNC(handleSpawn), nil, nil, true] call CBA_fnc_addClassEventHandler;
["CAManBase", "initPost", LINKFUNC(handleSpawn), nil, nil, true] call CBA_fnc_addClassEventHandler;
};
// Add disconnect EH
addMissionEventHandler ["HandleDisconnect", {call FUNC(handleDisconnect)}];

View File

@ -12,7 +12,6 @@ if (isServer) then {
GVAR(headlessClients) = [];
GVAR(inRebalance) = false;
GVAR(endMissionCheckDelayed) = false;
GVAR(blacklistType) = [BLACKLIST_UAV];
[QXGVAR(headlessClientJoined), LINKFUNC(handleConnectHC)] call CBA_fnc_addEventHandler;
};

View File

@ -19,17 +19,14 @@ params ["_headlessClient"];
// Exit if HC already registered
// No need to check if distribution or end mission enabled, as if disabled this will never run
if (_headlessClient in GVAR(headlessClients)) exitWith {};
// Register for use
GVAR(headlessClients) pushBack _headlessClient;
if (GVAR(headlessClients) pushBackUnique _headlessClient == -1) exitWith {};
if (XGVAR(log)) then {
INFO_1("Registered HC: %1",_headlessClient);
};
// Exit if AI distribution is disabled
if (!XGVAR(enabled)) exitWith {true};
if (!XGVAR(enabled)) exitWith {};
// Rebalance
[true] call FUNC(rebalance);

View File

@ -17,7 +17,7 @@
*/
params ["_object"];
TRACE_1("HandleDisconnect",_this);
TRACE_1("HandleDisconnect",_object);
// Exit if not HC
if !(_object in GVAR(headlessClients)) exitWith {
@ -28,9 +28,7 @@ if !(_object in GVAR(headlessClients)) exitWith {
if (CBA_missionTime < 150) then {
TRACE_1("Mission start delay",CBA_missionTime);
GVAR(endMissionCheckDelayed) = true;
[{
call FUNC(endMissionNoPlayers);
}, [], 150 - CBA_missionTime] call CBA_fnc_waitAndExecute;
[LINKFUNC(endMissionNoPlayers), [], 150 - CBA_missionTime] call CBA_fnc_waitAndExecute;
} else {
// End instantly or after delay
if (XGVAR(endMission) == 1) then {
@ -39,7 +37,7 @@ if !(_object in GVAR(headlessClients)) exitWith {
} else {
TRACE_2("Delayed 60s end",GVAR(endMission),CBA_missionTime);
GVAR(endMissionCheckDelayed) = true;
[FUNC(endMissionNoPlayers), [], 60] call CBA_fnc_waitAndExecute;
[LINKFUNC(endMissionNoPlayers), [], 60] call CBA_fnc_waitAndExecute;
};
};
};

View File

@ -4,27 +4,22 @@
* Handles AI spawn and requests a rebalance if applicable.
*
* Arguments:
* 0: Object <OBJECT>
* 0: Unit <OBJECT>
*
* Return Value:
* None
*
* Example:
* [object] call ace_headless_fnc_handleSpawn
* [cursorObject] call ace_headless_fnc_handleSpawn
*
* Public: No
*/
params ["_object"];
TRACE_1("Spawn",_object);
params ["_unit"];
TRACE_1("Spawn",_unit);
// Exit if HC transferring disabled or object not a unit (including unit inside vehicle) or is player
if (!(_object in allUnits) || {isPlayer _object}) exitWith {};
// Exit and blacklist if of blacklist type
if ({_object isKindOf _x} count GVAR(blacklistType) > 0) exitWith {
_object setVariable [QXGVAR(blacklist), true];
};
// Exit if unit is player or UAV crew
if (isPlayer _unit || {unitIsUAV _unit}) exitWith {};
// Rebalance
[false] call FUNC(rebalance);

View File

@ -23,7 +23,7 @@ TRACE_3("Rebalance",GVAR(inRebalance),GVAR(headlessClients),_force);
if (GVAR(inRebalance) || {GVAR(headlessClients) isEqualTo []}) exitWith {};
// Transfer after rebalance delay
[FUNC(transferGroups), [_force], XGVAR(Delay)] call CBA_fnc_waitAndExecute;
[LINKFUNC(transferGroups), _force, XGVAR(delay)] call CBA_fnc_waitAndExecute;
// Currently in rebalance flag
GVAR(inRebalance) = true;

View File

@ -79,8 +79,8 @@ private _numTransferredHC3 = 0;
_transfer = false;
};
// No transfer if player in this group
if (isPlayer _x) exitWith {
// No transfer if player or UAV in this group
if (isPlayer _x || {unitIsUAV _x}) exitWith {
_transfer = false;
};
@ -89,14 +89,16 @@ private _numTransferredHC3 = 0;
_transfer = false;
};
// No transfer if vehicle unit is in or crew in that vehicle is blacklisted
if (vehicle _x != _x && {(vehicle _x) getVariable [QXGVAR(blacklist), false]}) exitWith {
private _vehicle = objectParent _x;
// No transfer if the vehicle the unit is in or if the crew in that vehicle is blacklisted
if ((_vehicle getVariable [QXGVAR(blacklist), false]) || {unitIsUAV _vehicle}) exitWith {
_transfer = false;
};
// Save gear if unit about to be transferred with current loadout (naked unit work-around)
if (XGVAR(transferLoadout) == 1) then {
_x setVariable [QGVAR(loadout), [_x] call CBA_fnc_getLoadout, true];
_x setVariable [QGVAR(loadout), _x call CBA_fnc_getLoadout, true];
};
} forEach (units _x);
};

View File

@ -4,7 +4,7 @@
[ELSTRING(common,Enabled), LSTRING(EnabledDesc)],
format ["ACE %1", LLSTRING(Module)],
false,
true,
1,
{[QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged)},
true
] call CBA_fnc_addSetting;
@ -15,9 +15,8 @@
[LSTRING(Delay), LSTRING(DelayDesc)],
format ["ACE %1", LLSTRING(Module)],
[0, 60, 15, -1],
true,
{[QGVAR(delay), _this] call EFUNC(common,cbaSettings_settingChanged)},
true
1,
{[QGVAR(delay), _this] call EFUNC(common,cbaSettings_settingChanged)}
] call CBA_fnc_addSetting;
[
@ -26,7 +25,7 @@
[LSTRING(EndMission), LSTRING(EndMissionDesc)],
format ["ACE %1", LLSTRING(Module)],
[[0, 1, 2], [ELSTRING(Common,Disabled), LSTRING(Instant), LSTRING(Delayed)], 0],
true,
1,
{[QGVAR(delay), _this] call EFUNC(common,cbaSettings_settingChanged)},
true
] call CBA_fnc_addSetting;
@ -37,9 +36,8 @@
[LSTRING(Log), LSTRING(LogDesc)],
format ["ACE %1", LLSTRING(Module)],
false,
true,
{[QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged)},
true
1,
{[QGVAR(enabled), _this] call EFUNC(common,cbaSettings_settingChanged)}
] call CBA_fnc_addSetting;
[
@ -48,7 +46,7 @@
[LSTRING(TransferLoadout), LSTRING(TransferLoadoutDesc)],
format ["ACE %1", LLSTRING(Module)],
[[0, 1, 2], [ELSTRING(Common,Disabled), LSTRING(TransferLoadoutCurrent), LSTRING(TransferLoadoutConfig)], 0],
true,
1,
{},
true // needs mission restart
] call CBA_fnc_addSetting;

View File

@ -17,4 +17,3 @@
#include "\z\ace\addons\main\script_macros.hpp"
#define DELAY_DEFAULT 15
#define BLACKLIST_UAV "UAV", "UAV_AI_base_F", "B_UAV_AI", "O_UAV_AI", "I_UAV_AI"

View File

@ -24,10 +24,10 @@ params ["_unit"];
TRACE_2("params",_unit,typeOf _unit);
// Exit if hearing is disabled OR autoAdd is disabled OR soldier has earplugs already in (persistence scenarios)
if (!GVAR(enableCombatDeafness) || {!GVAR(autoAddEarplugsToUnits)} || {[_unit] call FUNC(hasEarPlugsIn)}) exitWith {};
if (!GVAR(enableCombatDeafness) || {GVAR(autoAddEarplugsToUnits) == 0} || {[_unit] call FUNC(hasEarPlugsIn)}) exitWith {};
// add earplugs if the soldier has a rocket launcher
if ((secondaryWeapon _unit) != "") exitWith {
// Add earplugs if enabled for everyone or if the soldier has a rocket launcher
if (GVAR(autoAddEarplugsToUnits) == 2 || {(secondaryWeapon _unit) != ""}) exitWith {
TRACE_1("has launcher - adding",_unit);
_unit addItem "ACE_EarPlugs";
};

View File

@ -53,7 +53,7 @@ if (isNil "_loudness") then {
private _muzzleMagazines = getArray (configFile >> "CfgWeapons" >> _weapon >> _x >> "magazines");
_weaponMagazines append _muzzleMagazines;
};
} count _muzzles;
} forEach _muzzles;
{
private _ammoType = getText(configFile >> "CfgMagazines" >> _x >> "ammo");
_weaponMagazines set [_forEachIndex, [_x, _ammoType]];
@ -65,7 +65,7 @@ if (isNil "_loudness") then {
if (_ammoType == _ammo) exitWith {
_magazine = _magazineType;
};
} count _weaponMagazines;
} forEach _weaponMagazines;
if (_magazine == "") then {
_loudness = 0;

View File

@ -5,7 +5,9 @@ private _category = format ["ACE %1", localize LSTRING(Module_DisplayName)];
[LSTRING(EnableCombatDeafness_DisplayName), LSTRING(EnableCombatDeafness_Description)],
_category,
true,
1
1,
{[QGVAR(enableCombatDeafness), _this] call EFUNC(common,cbaSettings_settingChanged)},
true // Needs mission restart
] call CBA_fnc_addSetting;
[
@ -41,9 +43,9 @@ private _category = format ["ACE %1", localize LSTRING(Module_DisplayName)];
] call CBA_fnc_addSetting;
[
QGVAR(autoAddEarplugsToUnits), "CHECKBOX",
QGVAR(autoAddEarplugsToUnits), "LIST",
[LSTRING(autoAddEarplugsToUnits_DisplayName), LSTRING(autoAddEarplugsToUnits_Description)],
_category,
true,
[[0, 1, 2], [ELSTRING(common,Disabled), LSTRING(heavyWeaponUnits), ELSTRING(common,Enabled)], 1],
1
] call CBA_fnc_addSetting;

View File

@ -371,5 +371,10 @@
<Korean>귀마개 토글</Korean>
<French>Mettre/enlever les bouchons</French>
</Key>
<Key ID="STR_ACE_Hearing_heavyWeaponUnits">
<English>Only units with heavy weapons</English>
<French>Uniquement les unités dotées d'armes lourdes</French>
<Russian>Только юниты с тяжелым вооружением</Russian>
</Key>
</Package>
</Project>

View File

@ -77,8 +77,7 @@ GVAR(no_cams) sort true;
if (((getPosVisual _x) select 2) > 20 && {!(_x in GVAR(no_cams))} && {_x getHitPointDamage "HitCamera" < 0.25}) then {
GVAR(no_cams) pushBack _x;
};
true
} count GVAR(nearHuntIRs);
} forEach GVAR(nearHuntIRs);
{
if (((getPosVisual _x) select 2) <= 20 || {!(_x in GVAR(nearHuntIRs))} || {_x getHitPointDamage "HitCamera" >= 0.25}) then {
GVAR(no_cams) deleteAt _forEachIndex;

View File

@ -43,12 +43,21 @@ _origActionData params [
"_distance"
];
private _result = [_target, ACE_player, _customParams] call _conditionCode;
// Handle nil as false
if (isNil "_result") then {
ERROR_1("Action [%1] bad condition return",_actionName);
_result = false;
};
// Return nothing if the action itself is not active
if !([_target, ACE_player, _customParams] call _conditionCode) exitWith {
if (!_result) exitWith {
[]
};
// Return nothing if the action is to far (including checking sub actions) [DISABLED FOR NOW ref #2196]
// Return nothing if the action is too far (including checking sub actions) [DISABLED FOR NOW ref #2196]
// if (_distanceToBasePoint > _distance) exitWith {
// []
// };
@ -64,21 +73,19 @@ if (_insertChildrenCode isNotEqualTo {}) then {
// Collect dynamic children class actions
{
private _action = [_x select 2, _x, _fullPath, _distanceToBasePoint] call FUNC(collectActiveActionTree);
if ((count _action) > 0) then {
if (_action isNotEqualTo []) then {
_activeChildren pushBack _action;
};
nil
} count _dynamicChildren;
} forEach _dynamicChildren;
};
// Collect children class actions
{
private _action = [_object, _x, _fullPath, _distanceToBasePoint] call FUNC(collectActiveActionTree);
if ((count _action) > 0) then {
if (_action isNotEqualTo []) then {
_activeChildren pushBack _action;
};
nil
} count _origActionChildren;
} forEach _origActionChildren;
// Collect children object actions
{
@ -87,12 +94,11 @@ if (_insertChildrenCode isNotEqualTo {}) then {
// Check if the action is children of the original action
if (_pPath isEqualTo _fullPath) then {
private _action = [_object, [_actionData,[]], _fullPath, _distanceToBasePoint] call FUNC(collectActiveActionTree);
if ((count _action) > 0) then {
if (_action isNotEqualTo []) then {
_activeChildren pushBack _action;
};
};
nil
} count GVAR(objectActionList);
} forEach GVAR(objectActionList);
// If the original action has no statement, and no children, don't display it

View File

@ -114,8 +114,7 @@ private _recurseFnc = {
];
_actions pushBack _entry;
};
nil
} count (configProperties [_actionsCfg, "isClass _x", true]);
} forEach (configProperties [_actionsCfg, "isClass _x", true]);
_actions
};

View File

@ -84,8 +84,7 @@ private _recurseFnc = {
];
_actions pushBack _entry;
};
nil
} count (configProperties [_actionsCfg, "isClass _x", true]);
} forEach (configProperties [_actionsCfg, "isClass _x", true]);
_actions
};

View File

@ -33,7 +33,6 @@ private _actions = [];
_x params ["_actionData", "_children"];
_actions pushBack [_actionData, _children, _unit];
false
} count (_actionTrees select 0 select 1);
} forEach (_actionTrees select 0 select 1);
_actions

View File

@ -22,11 +22,10 @@ params ["_unit", "_target"];
[_unit, "GestureGo"] call EFUNC(common,doGesture);
private _chance = [0.5, 0.8] select (count weapons _unit > 0);
private _chance = [0.5, 0.8] select (weapons _unit isNotEqualTo []);
{
if (count weapons _x == 0 && {random 1 < _chance}) then {
if (weapons _x isEqualTo [] && {random 1 < _chance}) then {
[QGVAR(getDown), [_x], [_x]] call CBA_fnc_targetEvent;
};
false
} count (_target nearEntities ["Civilian", SEND_RADIUS]);
} forEach (_target nearEntities ["Civilian", SEND_RADIUS]);

View File

@ -35,12 +35,12 @@ if (_animations isEqualTo []) exitWith {};
private _lockedVariable = format ["bis_disabled_%1", _door];
private _lockedVariableAlt = _lockedVariable; // GM Buildings may have door names like door_01 but locking expects door_1
if ((count _door == 7) && {(_door select [0, 6]) == "door_0"}) then {
if ((count _door == 7) && {(_door select [0, 6]) == "door_0"}) then {
_lockedVariableAlt = format ["bis_disabled_door_%1", _door select [6, 1]]; // stip off the leading zero then check both vars
};
// Check if the door can be locked aka have locked variable, otherwhise cant lock it
if ((_house animationPhase (_animations select 0) <= 0) &&
if ((_house animationPhase (_animations select 0) <= 0) &&
{(_house getVariable [_lockedVariable, 0] == 1) || {_house getVariable [_lockedVariableAlt, 0] == 1}}) exitWith {
private _lockedAnimation = format ["%1_locked_source", _door];
TRACE_3("locked",_house,_lockedAnimation,isClass (configOf _house >> "AnimationSources" >> _lockedAnimation));
@ -76,7 +76,7 @@ GVAR(usedScrollWheel) = false;
if !(GVAR(usedScrollWheel)) then {
private _phase = parseNumber (_house animationPhase (_animations select 0) < 0.5);
{_house animate [_x, _phase]; false} count _animations;
{_house animate [_x, _phase]} forEach _animations;
};
// Raise local stopped opening event
@ -93,5 +93,5 @@ GVAR(usedScrollWheel) = false;
GVAR(usedScrollWheel) = true;
};
// do incremental door opening
{_house animate [_x, GVAR(doorTargetPhase)]; false} count _animations;
{_house animate [_x, GVAR(doorTargetPhase)]} forEach _animations;
}, 0.1, [_house, _animations, getPosASL ACE_player, CBA_missionTime + 0.2, diag_frameno + 2, _door]] call CBA_fnc_addPerFrameHandler;

View File

@ -22,14 +22,13 @@ params ["_unit"];
[_unit, "GestureGo"] call EFUNC(common,doGesture);
private _chance = [0.5, 0.8] select (count weapons _unit > 0);
private _chance = [0.5, 0.8] select (weapons _unit isNotEqualTo []);
{
if (count weapons _x == 0 && {random 1 < _chance}) then {
if (weapons _x isEqualTo [] && {random 1 < _chance}) then {
private _position = getPosASL _unit vectorAdd (eyeDirection _unit vectorMultiply SEND_DISTANCE);
_position set [2, 0];
[QGVAR(sendAway), [_x, _position], [_x]] call CBA_fnc_targetEvent;
};
false
} count (_unit nearEntities ["Civilian", SEND_RADIUS]);
} forEach (_unit nearEntities ["Civilian", SEND_RADIUS]);

View File

@ -102,6 +102,7 @@
<Russian>Отслеживание юнитов ИИ, убитых игроком</Russian>
<Japanese>プレイヤーに殺害されたAIユニットを追跡</Japanese>
<Korean>플레이어가 죽인 AI 트래킹</Korean>
<French>Suivi de l'IA tuée par les joueurs</French>
</Key>
<Key ID="STR_ACE_KillTracker_TrackAI_Description">
<English>Defines if killed AIs will be shown in the kill tracker during mission debriefing.</English>
@ -110,6 +111,7 @@
<Russian>Определяет, будут ли убитые ИИ отображаться в трекере убийств во время дебрифинга миссии.</Russian>
<Japanese>ミッションデブリーフィングのキルトラッカーに殺害されたAIが表示されるかどうかを定義します。</Japanese>
<Korean>사후강평 중 살해된 AI가 킬트래킹에 표시되는지 여부를 정의합니다.</Korean>
<French>Définit si les IA tuées seront affichées dans le tracker pendant le débriefing de la mission.</French>
</Key>
</Package>
</Project>

View File

@ -103,7 +103,7 @@ private _finalOwner = objNull;
TRACE_2("",count _spots,_spots);
if ((count _spots) > 0) then {
if (_spots isNotEqualTo []) then {
private _bucketList = nil;
private _bucketPos = nil;
private _c = 0;

View File

@ -73,8 +73,7 @@ GVAR(hasWatch) = true;
GVAR(hasWatch) = false;
{
if (_x isKindOf ["ItemWatch", configFile >> "CfgWeapons"]) exitWith {GVAR(hasWatch) = true;};
false
} count (assignedItems _unit);
} forEach (assignedItems _unit);
}, true] call CBA_fnc_addPlayerEventHandler;

View File

@ -15,6 +15,10 @@
* Public: No
*/
visibleMap &&
{alive ACE_player} &&
{"ItemGPS" in (assignedItems ACE_player)}
if (!visibleMap || {!alive ACE_player}) exitWith {false};
private _gpsOpened = visibleGPS;
private _gpsAvailable = openGPS true;
if (!_gpsOpened) then {openGPS false};
_gpsAvailable // return

View File

@ -41,6 +41,7 @@
<Japanese>標定盤</Japanese>
<Italian>Tavola di calcolo</Italian>
<Russian>Графическая доска</Russian>
<French>Tableau de calcul</French>
</Key>
<Key ID="STR_ACE_MapTools_PlottingBoard_Description">
<English>The Plotting Board is a map tool designed for use in the directing of short range indirect fires.</English>
@ -48,6 +49,7 @@
<Japanese>標定盤(プロッティング・ボード)は、短距離の間接射撃の指示に使用するために設計されたマップツールです。</Japanese>
<Italian>La tavola di calcolo è uno strumento utilizzato per dirigere fuoco di artiglieria a corto raggio.</Italian>
<Russian>Графическая доска - это картографический инструмент, предназначенный для использования при ведении непрямого огня с малой дистанции.</Russian>
<French>La table de calcul est un instrument utilisé pour diriger les tirs d'artillerie à courte portée.</French>
</Key>
<Key ID="STR_ACE_MapTools_MapTools_Menu">
<English>Map Tools</English>
@ -272,6 +274,7 @@
<Korean>플로팅 보드 그리기 채널 허용</Korean>
<Italian>Canali ammessi su tavola di calcolo</Italian>
<Russian>Разрешить создание каналов на миллиметровой доске.</Russian>
<French>Canaux autorisés sur la table de calcul</French>
</Key>
<Key ID="STR_ACE_MapTools_allowChannelDrawing_description">
<English>Channels in which plotting board drawing is enabled.</English>
@ -279,6 +282,7 @@
<Korean>플로팅 보드 그리기가 활성화된 채널입니다.</Korean>
<Italian>Canali in cui si può disegnare sulla tavola di calcolo.</Italian>
<Russian>Каналы, в которых включено рисование на миллиметровой доске.</Russian>
<French>Canaux dans lesquels vous pouvez dessiner sur le tableau.</French>
</Key>
<Key ID="STR_ACE_MapTools_allowDirectCommsOnly">
<English>Allow Direct Comms Only (Polylines Only)</English>
@ -286,6 +290,7 @@
<Korean>직접교신만 허용 (선 긋기만)</Korean>
<Italian>Comunicazioni Dirette (solo linee)</Italian>
<Russian>Разрешать только прямую связь (только полилинии)</Russian>
<French>Communications directes uniquement (lignes uniquement)</French>
</Key>
<Key ID="STR_ACE_MapTools_allowDirectGroupComms">
<English>Allow Direct/Group Comms (Polylines and Group Markers)</English>
@ -293,6 +298,7 @@
<Korean>직접교신/그룹무전망 허용 (선 긋기와 그룹 마커)</Korean>
<Italian>Comunicazioni dirette/gruppo (linee e marker)</Italian>
<Russian>Разрешить прямую/групповую связь (полилинии и групповые маркеры)</Russian>
<French>Autoriser les communications directes/de groupe (polylignes et marqueurs de groupe)</French>
</Key>
<Key ID="STR_ACE_MapTools_PlottingBoardLabel">
<English>Plotting Board</English>
@ -300,6 +306,7 @@
<Korean>플로팅 보드</Korean>
<Italian>Tavola di calcolo</Italian>
<Russian>Миллиметровая доска</Russian>
<French>Table de calcul</French>
</Key>
<Key ID="STR_ACE_MapTools_PlottingBoardAcrylicLabel">
<English>Plotting Board Acrylic</English>
@ -307,6 +314,7 @@
<Korean>플로팅 보드 (아크릴)</Korean>
<Italian>Acrilico tavola di calcolo</Italian>
<Russian>Миллиметровая доска акрилловая</Russian>
<French>Table de calcul Acrylique</French>
</Key>
<Key ID="STR_ACE_MapTools_PlottingBoardRulerLabel">
<English>Plotting Board Ruler</English>
@ -314,6 +322,7 @@
<Korean>플로팅 보드 (자)</Korean>
<Italian>Righello tavola di calcolo</Italian>
<Russian>Линейка для миллиметровой доски</Russian>
<French>Règle de la table de calcul</French>
</Key>
<Key ID="STR_ACE_MapTools_ToPlottingBoardLabel">
<English>To Plotting Board</English>
@ -321,6 +330,7 @@
<Korean>플로팅 보드에</Korean>
<Italian>Su tavola di calcolo</Italian>
<Russian>К миллиметровой доске.</Russian>
<French>Sur la table de calcul</French>
</Key>
<Key ID="STR_ACE_MapTools_ToPlottingBoardAcrylicLabel">
<English>To Plotting Board Acrylic</English>
@ -328,6 +338,7 @@
<Korean>플로팅 보드 (아크릴)에</Korean>
<Italian>Su acrilico tavola di calcolo</Italian>
<Russian>К миллиметровой доске акрилловой</Russian>
<French>Sur la table de calcul Acrylique</French>
</Key>
<Key ID="STR_ACE_MapTools_ToPlottingBoardRulerLabel">
<English>To Plotting Board Ruler</English>
@ -335,6 +346,7 @@
<Korean>플로팅 보드 (자)에</Korean>
<Italian>Su righello tavola di calcolo</Italian>
<Russian>К линейке миллиметровой доски.</Russian>
<French>Sur la règle de la table à calcul</French>
</Key>
<Key ID="STR_ACE_MapTools_WipeBoard">
<English>Wipe all markers off Plotting Board</English>
@ -342,6 +354,7 @@
<Korean>플로팅 보드에 있는 모든 마커 지우기</Korean>
<Italian>Cancella tutti i disegni dalla tavola</Italian>
<Russian>Сотрите все маркеры с миллиметровой доски.</Russian>
<French>Effacer tous les dessins de la planche</French>
</Key>
<Key ID="STR_ACE_MapTools_ShowPlottingBoard">
<English>Show Plotting Board</English>
@ -349,6 +362,7 @@
<Korean>플로팅 보드 보이기</Korean>
<Italian>Mostra tavola di calcolo</Italian>
<Russian>Показать миллиметровую доску.</Russian>
<French>Afficher la table de calcul</French>
</Key>
<Key ID="STR_ACE_MapTools_HidePlottingBoard">
<English>Hide Plotting Board</English>
@ -356,6 +370,7 @@
<Korean>플로팅 보드 숨기기</Korean>
<Italian>Nascondi tavola di calcolo</Italian>
<Russian>Скрыть миллиметровую доску.</Russian>
<French>Masquer la table de calcul</French>
</Key>
<Key ID="STR_ACE_MapTools_TogglePlottingBoardRuler">
<English>Toggle Plotting Board Ruler</English>
@ -363,6 +378,7 @@
<Korean>플로팅 보드 (자) 토글</Korean>
<Italian>Mostra/Nascondi Righello</Italian>
<Russian>Переключить линейку миллиметровой доски.</Russian>
<French>Afficher/masquer la règle</French>
</Key>
<Key ID="STR_ACE_MapTools_AlignTo">
<English>Align</English>
@ -412,6 +428,7 @@
<Korean>위로</Korean>
<Italian>Su</Italian>
<Russian>Вверх</Russian>
<French>Monter</French>
</Key>
<Key ID="STR_ACE_MapTools_ToMapToolLabel">
<English>To Maptool</English>
@ -419,6 +436,7 @@
<Korean>독도용 도구로</Korean>
<Italian>Su strumento cartografico</Italian>
<Russian>К инструментам карты</Russian>
<French>Outil cartographique</French>
</Key>
</Package>
</Project>

View File

@ -49,5 +49,4 @@ TRACE_2("params",_allMapMarkers,_allMapMarkersProperties);
_x setMarkerDirLocal _dir;
_x setMarkerSizeLocal [_scale, _scale];
};
false
} count allMapMarkers;
} forEach allMapMarkers;

View File

@ -19,7 +19,7 @@
*/
params ["_input", "_points", ["_randomRound", false]];
if (count _points < 1) exitWith {
if (_points isEqualTo []) exitWith {
//TODO: sensible default/error value
0
};

View File

@ -86,12 +86,6 @@
if (!isNull objectParent _unit && {local objectParent _unit}) exitWith {
[_unit] call FUNC(lockUnconsciousSeat);
};
// Prevent second ragdoll of uncon units when they're killed
if (IS_UNCONSCIOUS(_unit) && !isAwake _unit) then {
_unit enableSimulation false;
[{_this enableSimulation true}, _unit, 2] call CBA_fnc_waitAndExecute;
};
}] call CBA_fnc_addEventHandler;
["CAManBase", "deleted", {

View File

@ -1366,6 +1366,7 @@
<Japanese>出血状態の表示</Japanese>
<Korean>출혈 상태 표시</Korean>
<French>Afficher l'état des saignements</French>
<Russian>Показать состояние кровотечения</Russian>
</Key>
<Key ID="STR_ACE_Medical_GUI_showBleeding_Description">
<English>Display if the patient is bleeding, optionally with rate</English>
@ -1376,6 +1377,7 @@
<Japanese>患者が出血しているかどうかを表示します。オプションで出血速度も表示します</Japanese>
<Korean>환자가 출혈 중인지 여부를 표시합니다(선택적으로 출혈 속도 포함)</Korean>
<French>Indique si le patient saigne, éventuellement avec le taux de saignement</French>
<Russian>Показывает, есть ли у пациента кровотечение, опционально с указанием частоты</Russian>
</Key>
<Key ID="STR_ACE_Medical_GUI_ShowBleeding_Rate">
<English>Show Bleeding Rate</English>
@ -1386,6 +1388,7 @@
<Japanese>出血速度の表示</Japanese>
<Korean>출혈 속도 표시</Korean>
<French>Afficher le taux de saignement</French>
<Russian>Показать частоту кровотечения</Russian>
</Key>
<Key ID="STR_ACE_Medical_GUI_PeekMedicalOnHit_DisplayName">
<English>Peek Medical Info on Hit</English>

View File

@ -10,6 +10,12 @@ class Extended_PreInit_EventHandlers {
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_SCRIPT(XEH_postInit));
};
};
class Extended_Respawn_EventHandlers {
class CAManBase {
class ADDON {

View File

@ -0,0 +1,14 @@
#include "script_component.hpp"
["ace_killed", { // global event
params ["_unit"];
// Prevent second ragdoll of uncon units when they're killed
if (
IS_UNCONSCIOUS(_unit) && !isAwake _unit // uncon and not ragdolling
&& {isPlayer _unit || {_unit getVariable [QGVAR(AIUnconsciousness), GVAR(AIUnconsciousness)]}}
) then {
_unit enableSimulation false;
[{_this enableSimulation true}, _unit, 2] call CBA_fnc_waitAndExecute;
};
}] call CBA_fnc_addEventHandler;

View File

@ -23,4 +23,10 @@ if (_woundBleeding == 0) exitWith {0};
private _cardiacOutput = [_unit] call FUNC(getCardiacOutput);
// even if heart stops blood will still flow slowly (gravity)
(_woundBleeding * (_cardiacOutput max CARDIAC_OUTPUT_MIN) * EGVAR(medical,bleedingCoefficient))
private _bloodLoss = (_woundBleeding * (_cardiacOutput max CARDIAC_OUTPUT_MIN) * EGVAR(medical,bleedingCoefficient));
private _eventArgs = [_unit, _bloodLoss]; // Pass by reference
[QGVAR(getBloodLoss), _eventArgs] call CBA_fnc_localEvent;
_eventArgs select 1 // return

View File

@ -17,10 +17,14 @@
params ["_unit", ["_reason", "#setDead"], ["_instigator", objNull]];
TRACE_3("setDead",_unit,_reason,_instigator);
// No heart rate or blood pressure to measure when dead
_unit setVariable [VAR_HEART_RATE, 0, true];
_unit setVariable [VAR_BLOOD_PRESS, [0, 0], true];
// Clear uncon variable just to be safe
_unit setVariable [VAR_UNCON, nil, true];
_unit setVariable [QEGVAR(medical,causeOfDeath), _reason, true];
// Send a local event before death

View File

@ -10,7 +10,8 @@
* 3: Treatment <STRING>
* 4: Item User <OBJECT>
* 5: Used Item <STRING>
* 6: Bandage effectiveness coefficient <NUMBER> (default: 1)
* 6: Create litter <BOOLEAN>
* 7: Bandage effectiveness coefficient <NUMBER> (default: 1)
*
* Return Value:
* None
@ -21,10 +22,10 @@
* Public: No
*/
_this set [6, _this param [6, 1]]; // set default Bandage effectiveness coefficient
_this set [7, _this param [7, 1]]; // set bandage effectiveness coefficient
[QGVAR(bandaged), _this] call CBA_fnc_localEvent; // Raise event with reference so mods can modify this
params ["_medic", "_patient", "_bodyPart", "_classname", "", "", "_bandageEffectiveness"];
params ["_medic", "_patient", "_bodyPart", "_classname", "", "", "", "_bandageEffectiveness"];
[_patient, "activity", LSTRING(Activity_bandagedPatient), [[_medic, false, true] call EFUNC(common,getName)]] call FUNC(addToLog);

View File

@ -18,7 +18,7 @@
* Public: No
*/
params ["_patient", "_bodyPart", "_bandage", ["_bandageEffectiveness", 1]];
params ["_patient", "_bodyPart", "_bandage", ["_bandageEffectiveness", 1, [0]]];
TRACE_4("bandageLocal",_patient,_bodyPart,_bandage,_bandageEffectiveness);
_bodyPart = toLowerANSI _bodyPart;

View File

@ -19,6 +19,9 @@
// todo: move this macro to script_macros_medical.hpp?
#define MORPHINE_PAIN_SUPPRESSION 0.6
// 0.2625 = 0.6/0.8 * 0.35
// 0.6 = basic medication morph. pain suppr., 0.8 = adv. medication morph. pain suppr., 0.35 = adv. medication painkillers. pain suppr.
#define PAINKILLERS_PAIN_SUPPRESSION 0.2625
params ["_patient", "_bodyPart", "_classname"];
TRACE_3("medicationLocal",_patient,_bodyPart,_classname);
@ -36,6 +39,10 @@ if (!GVAR(advancedMedication)) exitWith {
case "Epinephrine": {
[QEGVAR(medical,WakeUp), _patient] call CBA_fnc_localEvent;
};
case "Painkillers": {
private _painSuppress = GET_PAIN_SUPPRESS(_patient);
_patient setVariable [VAR_PAIN_SUPP, (_painSuppress + PAINKILLERS_PAIN_SUPPRESSION) min 1, true];
};
};
};
TRACE_1("Running treatmentMedicationLocal with Advanced configuration for",_patient);

View File

@ -52,7 +52,7 @@ private _userAndItem = if (GET_NUMBER_ENTRY(_config >> "consumeItem") == 1) then
[objNull, ""]; // Treatment does not require items to be consumed
};
_userAndItem params ["_itemUser", "_usedItem"];
_userAndItem params ["_itemUser", "_usedItem", "_createLitter"];
private _isInZeus = !isNull findDisplay 312;
@ -161,7 +161,7 @@ if (_callbackProgress isEqualTo {}) then {
[
_treatmentTime,
[_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem],
[_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem, _createLitter],
FUNC(treatmentSuccess),
FUNC(treatmentFailure),
getText (_config >> "displayNameProgress"),

View File

@ -11,6 +11,7 @@
* 3: Treatment <STRING>
* 4: Item User <OBJECT>
* 5: Used Item <STRING>
* 6: Create Litter <BOOL>
*
* Return Value:
* None
@ -19,7 +20,8 @@
*/
params ["_args"];
_args params ["_medic", "_patient", "_bodyPart", "_classname", "_itemUser", "_usedItem"];
_args params ["_medic", "_patient", "_bodyPart", "_classname", "_itemUser", "_usedItem", "_createLitter"];
TRACE_7("",_medic,_patient,_bodyPart,_classname,_itemUser,_usedItem,_createLitter);
// Switch medic to end animation immediately
private _endInAnim = _medic getVariable QGVAR(endInAnim);
@ -45,7 +47,7 @@ GET_FUNCTION(_callbackSuccess,configFile >> QGVAR(actions) >> _classname >> "cal
_args call _callbackSuccess;
// Call litter creation handler
_args call FUNC(createLitter);
if (_createLitter) then { _args call FUNC(createLitter); };
// Emit local event for medical API
["ace_treatmentSucceded", [_medic, _patient, _bodyPart, _classname, _itemUser, _usedItem]] call CBA_fnc_localEvent;

Some files were not shown because too many files have changed in this diff Show More