Merge branch 'master' into release-3.12.0

This commit is contained in:
jonpas 2017-12-18 17:40:27 +01:00
commit c4637da6af
63 changed files with 500 additions and 332 deletions

View File

@ -40,6 +40,6 @@ class ACE_Settings {
description = CSTRING(simulationInterval_Description);
typeName = "SCALAR";
value = 0.05;
sliderSettings[] = {0, 0.2, 0.05, 1};
sliderSettings[] = {0, 0.2, 0.05, 2};
};
};

View File

@ -85,11 +85,13 @@
<English>Enable Muzzle Velocity Variation</English>
<German>Variation der Mündungsgeschwindigkeit aktivieren</German>
<Japanese>銃口初速の変化</Japanese>
<Italian>Abilita Variazione Velocità Volata</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_muzzleVelocityVariationEnabled_Description">
<English>Simulates slight variations in muzzle velocity between each shot</English>
<German>Simuliert leichte Variationen der Mündungsgeschwindigkeit zwischen jedem Schuss.</German>
<Japanese>発射毎に僅かな銃口初速の変化をシミュレートします。</Japanese>
<Italian>Simula lievi variazioni della velocità della volata tra un colpo e l'altro</Italian>
</Key>
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_DisplayName">
<English>Enable Ammo Temperature Simulation</English>

View File

@ -20,6 +20,7 @@ class ACE_Settings {
description = CSTRING(PerformanceFactor_Description);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {0, 5, 1, 1};
};
class GVAR(recoveryFactor) {
category = CSTRING(DisplayName);
@ -27,6 +28,7 @@ class ACE_Settings {
description = CSTRING(RecoveryFactor_Description);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {0, 5, 1, 1};
};
class GVAR(loadFactor) {
category = CSTRING(DisplayName);
@ -34,6 +36,7 @@ class ACE_Settings {
description = CSTRING(LoadFactor_Description);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {0, 5, 1, 1};
};
class GVAR(terrainGradientFactor) {
category = CSTRING(DisplayName);
@ -41,5 +44,6 @@ class ACE_Settings {
description = CSTRING(TerrainGradientFactor_Description);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {0, 5, 1, 1};
};
};

View File

@ -5,9 +5,6 @@ GVAR(EH_ID) = 0;
GVAR(lastSearchTextLeft) = "";
GVAR(lastSearchTextRight) = "";
[QGVAR(addVirtualItems), {_this call FUNC(addVirtualItems)}] call CBA_fnc_addEventHandler;
[QGVAR(removeVirtualItems), {_this call FUNC(removeVirtualItems)}] call CBA_fnc_addEventHandler;
[QGVAR(initBox), {_this call FUNC(initBox)}] call CBA_fnc_addEventHandler;
[QGVAR(removeBox), {_this call FUNC(removeBox)}] call CBA_fnc_addEventHandler;

View File

@ -24,206 +24,200 @@ params [["_object", objNull, [objNull]], ["_items", [], [true, []]], ["_global",
if (_object == objNull) exitWith {};
if (_items isEqualType [] && {count _items == 0}) exitWith {};
if (_global && {isMultiplayer}) then {
[QGVAR(addVirtualItems), [_object, _items, false]] call CBA_fnc_globalEvent;
private _cargo = _object getVariable [QGVAR(virtualItems), [
[[], [], []], // Weapons 0, primary, secondary, handgun
[[], [], [], []], // WeaponAccessories 1, optic,side,muzzle,bipod
[ ], // Magazines 2
[ ], // Headgear 3
[ ], // Uniform 4
[ ], // Vest 5
[ ], // Backpacks 6
[ ], // Goggles 7
[ ], // NVGs 8
[ ], // Binoculars 9
[ ], // Map 10
[ ], // Compass 11
[ ], // Radio slot 12
[ ], // Watch slot 13
[ ], // Comms slot 14
[ ], // WeaponThrow 15
[ ], // WeaponPut 16
[ ] // InventoryItems 17
]];
} else {
private _cargo = _object getVariable [QGVAR(virtualItems), [
[[], [], []], // Weapons 0, primary, secondary, handgun
[[], [], [], []], // WeaponAccessories 1, optic,side,muzzle,bipod
[ ], // Magazines 2
[ ], // Headgear 3
[ ], // Uniform 4
[ ], // Vest 5
[ ], // Backpacks 6
[ ], // Goggles 7
[ ], // NVGs 8
[ ], // Binoculars 9
[ ], // Map 10
[ ], // Compass 11
[ ], // Radio slot 12
[ ], // Watch slot 13
[ ], // Comms slot 14
[ ], // WeaponThrow 15
[ ], // WeaponPut 16
[ ] // InventoryItems 17
]];
private _configCfgWeapons = configFile >> "CfgWeapons"; //Save this lookup in variable for perf improvement
private _configCfgWeapons = configFile >> "CfgWeapons"; //Save this lookup in variable for perf improvement
if (_items isEqualType true && {_items}) then {
private _configItems = uiNamespace getVariable QGVAR(configItems);
if (_items isEqualType true) then {
if (_items) then {
private _configItems = uiNamespace getVariable QGVAR(configItems);
{
(_x select 0) append (_x select 1);
(_x select 2) set [(_x select 3), (_x select 0) arrayIntersect (_x select 0)];
} forEach [
[(_cargo select 0 select 0),(_configItems select 0 select 0), _cargo select 0, 0],
[(_cargo select 0 select 1),(_configItems select 0 select 1), _cargo select 0, 1],
[(_cargo select 0 select 2),(_configItems select 0 select 2), _cargo select 0, 2],
[(_cargo select 1 select 0),(_configItems select 1 select 0), _cargo select 1, 0],
[(_cargo select 1 select 1),(_configItems select 1 select 1), _cargo select 1, 1],
[(_cargo select 1 select 2),(_configItems select 1 select 2), _cargo select 1, 2],
[(_cargo select 1 select 3),(_configItems select 1 select 3), _cargo select 1, 3]
];
{
(_x select 0) append (_x select 1);
(_x select 2) set [(_x select 3), (_x select 0) arrayIntersect (_x select 0)];
} forEach [
[(_cargo select 0 select 0),(_configItems select 0 select 0), _cargo select 0, 0],
[(_cargo select 0 select 1),(_configItems select 0 select 1), _cargo select 0, 1],
[(_cargo select 0 select 2),(_configItems select 0 select 2), _cargo select 0, 2],
[(_cargo select 1 select 0),(_configItems select 1 select 0), _cargo select 1, 0],
[(_cargo select 1 select 1),(_configItems select 1 select 1), _cargo select 1, 1],
[(_cargo select 1 select 2),(_configItems select 1 select 2), _cargo select 1, 2],
[(_cargo select 1 select 3),(_configItems select 1 select 3), _cargo select 1, 3]
];
for "_index" from 2 to 17 do {
(_cargo select _index) append (_configItems select _index);
_cargo set [_index, (_cargo select _index) arrayIntersect (_cargo select _index)];
};
};
} else {
{
if (_x isEqualType "") then {
private _configItemInfo = _configCfgWeapons >> _x >> "ItemInfo";
private _simulationType = getText (_configCfgWeapons >> _x >> "simulation");
switch true do {
case (isClass (_configCfgWeapons >> _x)): {
switch true do {
/* Weapon acc */
case (
isClass (_configItemInfo) &&
{(getNumber (_configItemInfo >> "type")) in [101, 201, 301, 302]} &&
{!(_x isKindOf ["CBA_MiscItem", (_configCfgWeapons)])}
): {
switch (getNumber (_configItemInfo >> "type")) do {
case 201: {
(_cargo select 1) select 0 pushBackUnique _x;
};
case 301: {
(_cargo select 1) select 1 pushBackUnique _x;
};
case 101: {
(_cargo select 1) select 2 pushBackUnique _x;
};
case 302: {
(_cargo select 1) select 3 pushBackUnique _x;
};
};
};
/* Headgear */
case (isClass (_configItemInfo) &&
{getNumber (_configItemInfo >> "type") == 605}): {
(_cargo select 3) pushBackUnique _x;
};
/* Uniform */
case (isClass (_configItemInfo) &&
{getNumber (_configItemInfo >> "type") == 801}): {
(_cargo select 4) pushBackUnique _x;
};
/* Vest */
case (isClass (_configItemInfo) &&
{getNumber (_configItemInfo >> "type") == 701}): {
(_cargo select 5) pushBackUnique _x;
};
/* NVgs */
case (_simulationType == "NVGoggles"): {
(_cargo select 8) pushBackUnique _x;
};
/* Binos */
case (_simulationType == "Binocular" ||
{(_simulationType == 'Weapon') && {(getNumber (_configCfgWeapons >> _x >> 'type') == 4096)}}): {
(_cargo select 9) pushBackUnique _x;
};
/* Map */
case (_simulationType == "ItemMap"): {
(_cargo select 10) pushBackUnique _x;
};
/* Compass */
case (_simulationType == "ItemCompass"): {
(_cargo select 11) pushBackUnique _x;
};
/* Radio */
case (_simulationType == "ItemRadio"): {
(_cargo select 12) pushBackUnique _x;
};
/* Watch */
case (_simulationType == "ItemWatch"): {
(_cargo select 13) pushBackUnique _x;
};
/* GPS */
case (_simulationType == "ItemGPS"): {
(_cargo select 14) pushBackUnique _x;
};
/* UAV terminals */
case (isClass (_configItemInfo) &&
{getNumber (_configItemInfo >> "type") == 621}): {
(_cargo select 14) pushBackUnique _x;
};
/* Weapon, at the bottom to avoid adding binos */
case (isClass (_configCfgWeapons >> _x >> "WeaponSlotsInfo") &&
{getNumber (_configCfgWeapons >> _x >> 'type') != 4096}): {
switch (getNumber (_configCfgWeapons >> _x >> "type")) do {
case 1: {
(_cargo select 0) select 0 pushBackUnique ([_x] call bis_fnc_baseWeapon);
};
case 2: {
(_cargo select 0) select 2 pushBackUnique ([_x] call bis_fnc_baseWeapon);
};
case 4: {
(_cargo select 0) select 1 pushBackUnique ([_x] call bis_fnc_baseWeapon);
};
};
};
/* Misc items */
case (
isClass (_configItemInfo) &&
((getNumber (_configItemInfo >> "type")) in [101, 201, 301, 302] &&
{(_x isKindOf ["CBA_MiscItem", (_configCfgWeapons)])}) ||
{(getNumber (_configItemInfo >> "type")) in [401, 619, 620]} ||
{(getText (_configCfgWeapons >> _x >> "simulation")) == "ItemMineDetector"}
): {
(_cargo select 17) pushBackUnique _x;
};
};
};
case (isClass (configFile >> "CfgMagazines" >> _x)): {
// Lists to check against
private _grenadeList = [];
{
_grenadeList append getArray (_configCfgWeapons >> "Throw" >> _x >> "magazines");
false
} count getArray (_configCfgWeapons >> "Throw" >> "muzzles");
private _putList = [];
{
_putList append getArray (_configCfgWeapons >> "Put" >> _x >> "magazines");
false
} count getArray (_configCfgWeapons >> "Put" >> "muzzles");
// Check what the magazine actually is
switch true do {
// Rifle, handgun, secondary weapons mags
case (
(getNumber (configFile >> "CfgMagazines" >> _x >> "type") in [256,512,1536,16]) &&
{!(_x in _grenadeList)} &&
{!(_x in _putList)}
): {
(_cargo select 2) pushBackUnique _x;
};
// Grenades
case (_x in _grenadeList): {
(_cargo select 15) pushBackUnique _x;
};
// Put
case (_x in _putList): {
(_cargo select 16) pushBackUnique _x;
};
};
};
case (isClass (configFile >> "CfgVehicles" >> _x)): {
if (getText (configFile >> "CfgVehicles" >> _x >> "vehicleClass") == "Backpacks") then {
(_cargo select 6) pushBackUnique _x;
};
};
case (isClass (configFile >> "CfgGlasses" >> _x)): {
(_cargo select 7) pushBackUnique _x;
};
};
};
} foreach _items;
for "_index" from 2 to 17 do {
(_cargo select _index) append (_configItems select _index);
_cargo set [_index, (_cargo select _index) arrayIntersect (_cargo select _index)];
};
_object setVariable [QGVAR(virtualItems), _cargo];
} else {
{
if (_x isEqualType "") then {
private _configItemInfo = _configCfgWeapons >> _x >> "ItemInfo";
private _simulationType = getText (_configCfgWeapons >> _x >> "simulation");
switch true do {
case (isClass (_configCfgWeapons >> _x)): {
switch true do {
/* Weapon acc */
case (
isClass (_configItemInfo) &&
{(getNumber (_configItemInfo >> "type")) in [101, 201, 301, 302]} &&
{!(_x isKindOf ["CBA_MiscItem", (_configCfgWeapons)])}
): {
switch (getNumber (_configItemInfo >> "type")) do {
case 201: {
(_cargo select 1) select 0 pushBackUnique _x;
};
case 301: {
(_cargo select 1) select 1 pushBackUnique _x;
};
case 101: {
(_cargo select 1) select 2 pushBackUnique _x;
};
case 302: {
(_cargo select 1) select 3 pushBackUnique _x;
};
};
};
/* Headgear */
case (isClass (_configItemInfo) &&
{getNumber (_configItemInfo >> "type") == 605}): {
(_cargo select 3) pushBackUnique _x;
};
/* Uniform */
case (isClass (_configItemInfo) &&
{getNumber (_configItemInfo >> "type") == 801}): {
(_cargo select 4) pushBackUnique _x;
};
/* Vest */
case (isClass (_configItemInfo) &&
{getNumber (_configItemInfo >> "type") == 701}): {
(_cargo select 5) pushBackUnique _x;
};
/* NVgs */
case (_simulationType == "NVGoggles"): {
(_cargo select 8) pushBackUnique _x;
};
/* Binos */
case (_simulationType == "Binocular" ||
{(_simulationType == 'Weapon') && {(getNumber (_configCfgWeapons >> _x >> 'type') == 4096)}}): {
(_cargo select 9) pushBackUnique _x;
};
/* Map */
case (_simulationType == "ItemMap"): {
(_cargo select 10) pushBackUnique _x;
};
/* Compass */
case (_simulationType == "ItemCompass"): {
(_cargo select 11) pushBackUnique _x;
};
/* Radio */
case (_simulationType == "ItemRadio"): {
(_cargo select 12) pushBackUnique _x;
};
/* Watch */
case (_simulationType == "ItemWatch"): {
(_cargo select 13) pushBackUnique _x;
};
/* GPS */
case (_simulationType == "ItemGPS"): {
(_cargo select 14) pushBackUnique _x;
};
/* UAV terminals */
case (isClass (_configItemInfo) &&
{getNumber (_configItemInfo >> "type") == 621}): {
(_cargo select 14) pushBackUnique _x;
};
/* Weapon, at the bottom to avoid adding binos */
case (isClass (_configCfgWeapons >> _x >> "WeaponSlotsInfo") &&
{getNumber (_configCfgWeapons >> _x >> 'type') != 4096}): {
switch (getNumber (_configCfgWeapons >> _x >> "type")) do {
case 1: {
(_cargo select 0) select 0 pushBackUnique ([_x] call bis_fnc_baseWeapon);
};
case 2: {
(_cargo select 0) select 2 pushBackUnique ([_x] call bis_fnc_baseWeapon);
};
case 4: {
(_cargo select 0) select 1 pushBackUnique ([_x] call bis_fnc_baseWeapon);
};
};
};
/* Misc items */
case (
isClass (_configItemInfo) &&
((getNumber (_configItemInfo >> "type")) in [101, 201, 301, 302] &&
{(_x isKindOf ["CBA_MiscItem", (_configCfgWeapons)])}) ||
{(getNumber (_configItemInfo >> "type")) in [401, 619, 620]} ||
{(getText (_configCfgWeapons >> _x >> "simulation")) == "ItemMineDetector"}
): {
(_cargo select 17) pushBackUnique _x;
};
};
};
case (isClass (configFile >> "CfgMagazines" >> _x)): {
// Lists to check against
private _grenadeList = [];
{
_grenadeList append getArray (_configCfgWeapons >> "Throw" >> _x >> "magazines");
false
} count getArray (_configCfgWeapons >> "Throw" >> "muzzles");
private _putList = [];
{
_putList append getArray (_configCfgWeapons >> "Put" >> _x >> "magazines");
false
} count getArray (_configCfgWeapons >> "Put" >> "muzzles");
// Check what the magazine actually is
switch true do {
// Rifle, handgun, secondary weapons mags
case (
(getNumber (configFile >> "CfgMagazines" >> _x >> "type") in [256,512,1536,16]) &&
{!(_x in _grenadeList)} &&
{!(_x in _putList)}
): {
(_cargo select 2) pushBackUnique _x;
};
// Grenades
case (_x in _grenadeList): {
(_cargo select 15) pushBackUnique _x;
};
// Put
case (_x in _putList): {
(_cargo select 16) pushBackUnique _x;
};
};
};
case (isClass (configFile >> "CfgVehicles" >> _x)): {
if (getText (configFile >> "CfgVehicles" >> _x >> "vehicleClass") == "Backpacks") then {
(_cargo select 6) pushBackUnique _x;
};
};
case (isClass (configFile >> "CfgGlasses" >> _x)): {
(_cargo select 7) pushBackUnique _x;
};
};
};
} foreach _items;
};
_object setVariable [QGVAR(virtualItems), _cargo, _global];

View File

@ -46,6 +46,10 @@ if (!GVAR(leftSearchbarFocus) && {!GVAR(rightSearchbarFocus)}) then {
case (_keyPressed == DIK_V && {_ctrlState}): {
[_display] call FUNC(buttonImport);
};
// Search fields
case (_keyPressed == DIK_F && {_ctrlState}): {
ctrlSetFocus (_display displayCtrl IDC_leftSearchbar);
};
// Switch vision mode
case (_keyPressed in (actionkeys "nightvision")): {
if (isNil QGVAR(visionMode)) then {
@ -99,6 +103,20 @@ if (!GVAR(leftSearchbarFocus) && {!GVAR(rightSearchbarFocus)}) then {
case (_keyPressed == DIK_V && {_ctrlState}): {
_return = false;
};
case (_keyPressed == DIK_A && {_ctrlState}): {
_return = false;
};
case (_keyPressed == DIK_X && {_ctrlState}): {
_return = false;
};
// Search fields
case (_keyPressed == DIK_F && {_ctrlState}): {
if (GVAR(rightSearchbarFocus)) then {
ctrlSetFocus (_display displayCtrl IDC_leftSearchbar);
} else {
ctrlSetFocus (_display displayCtrl IDC_rightSearchbar);
};
};
};
};

View File

@ -410,4 +410,4 @@ switch (GVAR(currentLeftPanel)) do {
};
};
(_display displayCtrl IDC_totalWeightText) ctrlSetText ([[GVAR(center), 1] call EFUNC(common,getWeight), [GVAR(center), 2] call EFUNC(common,getWeight)] joinString " / ");
(_display displayCtrl IDC_totalWeightText) ctrlSetText (format ["%1 (%2)", [GVAR(center), 2] call EFUNC(common,getWeight), [GVAR(center), 1] call EFUNC(common,getWeight)]);

View File

@ -74,4 +74,4 @@ private _fnc_selectItem = {
[IDC_buttonMuzzle, IDC_buttonItemAcc, IDC_buttonOptic, IDC_buttonBipod, IDC_buttonCurrentMag, IDC_buttonCurrentMag2] find GVAR(currentRightPanel)
] call _fnc_selectItem;
(_display displayCtrl IDC_totalWeightText) ctrlSetText ([[GVAR(center), 1] call EFUNC(common,getWeight), [GVAR(center), 2] call EFUNC(common,getWeight)] joinString " / ");
(_display displayCtrl IDC_totalWeightText) ctrlSetText (format ["%1 (%2)", [GVAR(center), 2] call EFUNC(common,getWeight), [GVAR(center), 1] call EFUNC(common,getWeight)]);

View File

@ -23,65 +23,58 @@ params [ ["_object", objNull, [objNull]], ["_items", [], [true, [""]]], ["_globa
if (_object == objNull) exitWith {};
if (_items isEqualType [] && {count _items == 0}) exitWith {};
if (_global && {isMultiplayer}) then {
[QGVAR(removeVirtualItems), [_object, _items, false]] call CBA_fnc_globalEvent;
private _cargo = _object getVariable [QGVAR(virtualItems), [
[[], [], []], // Weapons 0, primary, handgun, secondary
[[], [], [], []], // WeaponAccessories 1, optic,side,muzzle,bipod
[ ], // Magazines 2
[ ], // Headgear 3
[ ], // Uniform 4
[ ], // Vest 5
[ ], // Backpacks 6
[ ], // Goggles 7
[ ], // NVGs 8
[ ], // Binoculars 9
[ ], // Map 10
[ ], // Compass 11
[ ], // Radio slot 12
[ ], // Watch slot 13
[ ], // Comms slot 14
[ ], // WeaponThrow 15
[ ], // WeaponPut 16
[ ] // InventoryItems 17
]];
if (_items isEqualType true && {_items}) then {
[_object, _global] call FUNC(removeBox);
_object setVariable [QGVAR(virtualItems), nil, _global];
} else {
private _cargo = _object getVariable [QGVAR(virtualItems), [
[[], [], []], // Weapons 0, primary, handgun, secondary
[[], [], [], []], // WeaponAccessories 1, optic,side,muzzle,bipod
[ ], // Magazines 2
[ ], // Headgear 3
[ ], // Uniform 4
[ ], // Vest 5
[ ], // Backpacks 6
[ ], // Goggles 7
[ ], // NVGs 8
[ ], // Binoculars 9
[ ], // Map 10
[ ], // Compass 11
[ ], // Radio slot 12
[ ], // Watch slot 13
[ ], // Comms slot 14
[ ], // WeaponThrow 15
[ ], // WeaponPut 16
[ ] // InventoryItems 17
]];
if (_items isEqualType true) then {
if (_items) then {
[_object, _global] call FUNC(removeBox);
_object setVariable [QGVAR(virtualItems), nil, _global];
// Make sure all items are in string form
_items = _items select {_x isEqualType "" && {_x != ""}};
{
if (_forEachIndex isEqualTo 0) then {
_cargo set [_forEachIndex, [(_x select 0) - _items, (_x select 1) - _items, (_x select 2) - _items]];
} else {
if (_forEachIndex isEqualTo 1) then {
_cargo set [_forEachIndex, [(_x select 0) - _items, (_x select 1) - _items, (_x select 2) - _items, (_x select 3) - _items]];
} else {
_cargo set [_cargo find _x, _x - _items];
};
};
} foreach _cargo;
private _itemCount = {
if (_x isEqualTo (_cargo select 0) || {_x isEqualTo (_cargo select 1)}) then {
!(_x isEqualTo [[],[],[]] || {_x isEqualTo [[],[],[],[]]})
} else {
!(_x isEqualTo [])
};
} count _cargo;
if (_itemCount == 0) then {
[_object, _global] call FUNC(removeBox);
} else {
// Make sure all items are in string form
_items = _items select {_x isEqualType "" && {_x != ""}};
{
if (_forEachIndex isEqualTo 0) then {
_cargo set [_forEachIndex, [(_x select 0) - _items, (_x select 1) - _items, (_x select 2) - _items]];
} else {
if (_forEachIndex isEqualTo 1) then {
_cargo set [_forEachIndex, [(_x select 0) - _items, (_x select 1) - _items, (_x select 2) - _items, (_x select 3) - _items]];
} else {
_cargo set [_cargo find _x, _x - _items];
};
};
} foreach _cargo;
private _itemCount = {
if (_x isEqualTo (_cargo select 0) || {_x isEqualTo (_cargo select 1)}) then {
!(_x isEqualTo [[],[],[]] || {_x isEqualTo [[],[],[],[]]})
} else {
!(_x isEqualTo [])
};
} count _cargo;
_object setVariable [QGVAR(virtualItems), _cargo];
if (_itemCount == 0) then {
[_object, false] call FUNC(removeBox);
};
_object setVariable [QGVAR(virtualItems), _cargo, _global];
};
};

View File

@ -47,7 +47,7 @@ if (progressPosition _loadIndicatorBarCtrl > 0) then {
_removeAllCtrl ctrlCommit FADE_DELAY;
};
(_display displayCtrl IDC_totalWeightText) ctrlSetText ([[GVAR(center), 1] call EFUNC(common,getWeight), [GVAR(center), 2] call EFUNC(common,getWeight)] joinString " / ");
(_display displayCtrl IDC_totalWeightText) ctrlSetText (format ["%1 (%2)", [GVAR(center), 2] call EFUNC(common,getWeight), [GVAR(center), 1] call EFUNC(common,getWeight)]);
// change button color if unique or too big
if (_curSel != -1) then {

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Arsenal">
<Key ID="STR_ACE_Arsenal_buttonHideText">
@ -7,6 +7,7 @@
<German>Verstecken</German>
<Polish>Ukryj</Polish>
<Japanese>非表示</Japanese>
<Italian>Nascondere</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonHideTooltip">
<English>Hide interface</English>
@ -14,6 +15,7 @@
<German>Oberfläche verstecken</German>
<Polish>Ukryj interfejs</Polish>
<Japanese>インターフェイスを隠す</Japanese>
<Italian>Nascondi interfaccia</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonLoadoutsText">
<English>Loadouts</English>
@ -21,6 +23,7 @@
<German>Ausrüstungen</German>
<Polish>Zestawy wyposażenia</Polish>
<Japanese>装備</Japanese>
<Italian>Equipaggiamenti</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonExportText">
<English>Export</English>
@ -28,6 +31,7 @@
<German>Exportieren</German>
<Polish>Eksportuj</Polish>
<Japanese>出力</Japanese>
<Italian>Esporta</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonImportText">
<English>Import</English>
@ -35,6 +39,7 @@
<German>Importieren</German>
<Polish>Importuj</Polish>
<Japanese>取込</Japanese>
<Italian>Importa</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonCloseText">
<English>Close</English>
@ -42,6 +47,7 @@
<German>Schließen</German>
<Polish>Zamknij</Polish>
<Japanese>閉じる</Japanese>
<Italian>Chiudi</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_noVirtualItems">
<English>No virtual item available</English>
@ -49,6 +55,7 @@
<German>Kein virtuelles Objekt verfügbar</German>
<Polish>Brak dostępnych przedmiotów wirtualnych</Polish>
<Japanese>利用可能なバーチャル アイテムは無し</Japanese>
<Italian>Nessun oggetto virtuale disponibile</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonSaveText">
<English>Save</English>
@ -56,6 +63,7 @@
<German>Speichern</German>
<Polish>Zapisz</Polish>
<Japanese>保存</Japanese>
<Italian>Salva</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonSaveTooltip">
<English>Save the current loadout</English>
@ -63,6 +71,7 @@
<German>Ausgewählte Ausrüstung speichern</German>
<Polish>Zapisz obecny zestaw</Polish>
<Japanese>現在の装備を保存します</Japanese>
<Italian>Salva l'equipaggiamento corrente</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonRenameText">
<English>Rename</English>
@ -70,6 +79,7 @@
<German>Umbenennen</German>
<Polish>Zmień nazwę</Polish>
<Japanese>改名</Japanese>
<Italian>Rinomina</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonRenameTooltip">
<English>Rename the selected loadout</English>
@ -77,6 +87,7 @@
<German>Ausgewählte Ausrüstung umbenennen</German>
<Polish>Zmień nazwę wybranego zestawu</Polish>
<Japanese>現在選択中の装備を改名します</Japanese>
<Italian>Rinomina l'equipaggiamento selezionato</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonLoadText">
<English>Load</English>
@ -84,6 +95,7 @@
<German>Laden</German>
<Polish>Wczytaj</Polish>
<Japanese>読み込む</Japanese>
<Italian>Carica</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonLoadTooltip">
<English>Load the selected loadout</English>
@ -91,6 +103,7 @@
<German>Ausgewählte Ausrüstung laden</German>
<Polish>Wczytaj wybrany zestaw</Polish>
<Japanese>現在選択中の装備を読み込みます</Japanese>
<Italian>Carica l'equipaggiamento selezionato</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonDeleteText">
<English>Delete</English>
@ -98,6 +111,7 @@
<German>Entfernen</German>
<Polish>Skasuj</Polish>
<Japanese>削除</Japanese>
<Italian>Elimina</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonDeleteTooltip">
<English>Delete the selected loadout</English>
@ -105,6 +119,7 @@
<German>Ausgewählte Ausrüstung entfernen</German>
<Polish>Skasuj wybrany zestaw</Polish>
<Japanese>現在選択中の装備を削除します</Japanese>
<Italian>Elimina l'equipaggiamento selezionato</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_tabMyLoadoutsText">
<English>My loadouts</English>
@ -112,6 +127,7 @@
<German>Meine Ausrüstungen</German>
<Polish>Moje zestawy</Polish>
<Japanese>自分の装備</Japanese>
<Italian>I miei equipaggiamenti</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_tabMyLoadoutsTooltip">
<English>Loadouts saved in your profile</English>
@ -119,6 +135,7 @@
<German>Ausrüstungen, die in deinem Profil gespeichert sind</German>
<Polish>Zestawy zapisane w Twoim profilu</Polish>
<Japanese>自プロフィールに保存された装備です</Japanese>
<Italian>Gli equipaggiamenti salvati nel tuo profilo</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_tabDefaultLoadoutsText">
<English>Default loadouts</English>
@ -126,6 +143,7 @@
<German>Standard-Ausrüstungen</German>
<Polish>Domyślne zestawy</Polish>
<Japanese>標準の装備</Japanese>
<Italian>Equipaggiamenti standard</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_tabDefaultLoadoutsTooltip">
<English>Loadouts made available by the mission maker</English>
@ -133,6 +151,7 @@
<German>Ausrüstungen, die durch den Missionsersteller zur Verfügung gestellt worden sind</German>
<Polish>Zestawy udostępnione przez twórcę misji</Polish>
<Japanese>装備はミッション著者によって利用できます</Japanese>
<Italian>Equipaggiamenti resi disponibili dal creatore della missione</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_tabSharedLoadoutsText">
<English>Public loadouts</English>
@ -140,6 +159,7 @@
<German>Veröffentlichte Ausrüstungen</German>
<Polish>Publiczne zestawy</Polish>
<Japanese>公開装備</Japanese>
<Italian>Equipaggiamenti pubblici</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_tabSharedLoadoutsTooltip">
<English>Loadouts shared by you and other players</English>
@ -147,6 +167,7 @@
<German>Ausrüstungen, die von dir und anderen Spielern geteilt wurden</German>
<Polish>Zestawy udostępnione przez Ciebie i innych graczy</Polish>
<Japanese>自分か他人によって共有された装備です</Japanese>
<Italian>Equipaggiamenti condivisi da te e da altri giocatori</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_sortByWeightText">
<English>Sort by weight</English>
@ -154,6 +175,7 @@
<German>Nach Gewicht sortieren</German>
<Polish>Sortuj wg wagi</Polish>
<Japanese>重量で並び替え</Japanese>
<Italian>Ordina per peso</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_sortByAmountText">
<English>Sort by amount</English>
@ -161,6 +183,7 @@
<German>Nach Menge sortieren</German>
<Polish>Sortuj wg ilości</Polish>
<Japanese>量で並び替え</Japanese>
<Italian>Ordina per quantitativo</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonShareTooltip">
<English>Share or stop sharing the selected loadout</English>
@ -168,6 +191,7 @@
<German>Ausgewählte Ausrüstung teilen oder nicht mehr teilen</German>
<Polish>Udostępnij lub przestań udostępniać wybrany zestaw</Polish>
<Japanese>選択した装備の共有設定</Japanese>
<Italian>Condividi o smetti di condividere l'equipaggiamento selezionato</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonSharePrivateText">
<English>Private</English>
@ -175,6 +199,7 @@
<German>Privat</German>
<Polish>Prywatny</Polish>
<Japanese>非公開</Japanese>
<Italian>Privato</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonSharePublicText">
<English>Public</English>
@ -182,6 +207,7 @@
<German>Öffentlich</German>
<Polish>Publiczny</Polish>
<Japanese>公開</Japanese>
<Italian>Pubblico</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_exportDefaultError">
<English>The default loadouts list is empty!</English>
@ -189,6 +215,7 @@
<German>Die Standard-Ausrüstungen-Liste ist leer!</German>
<Polish>Lista domyślnych zestawów jest pusta!</Polish>
<Japanese>標準の装備一欄が空です!</Japanese>
<Italian>La lista degli equipaggiamenti standard è vuota!</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_exportDefault">
<English>Default loadouts list exported to clipboard</English>
@ -196,6 +223,7 @@
<German>Standard-Ausrüstungen-Liste in die Zwischenablage exportiert</German>
<Polish>Lista domyślnych zestawów została eksportowana do schowka</Polish>
<Japanese>標準の装備一欄はクリップボードへ出力されました</Japanese>
<Italian>La lista degli equipaggiamenti standard è stata esportata negli appunti</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_exportCurrent">
<English>Current loadout exported to clipboard</English>
@ -203,6 +231,7 @@
<German>Derzeitige Ausrüstung in die Zwischenablage exportiert</German>
<Polish>Obecny zestaw został eksportowany do schowka</Polish>
<Japanese>現在の装備はクリップボードへ出力されました</Japanese>
<Italian>Equipaggiamento corrente esportato negli appunti</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_importFormatError">
<English>Wrong format provided</English>
@ -210,6 +239,7 @@
<German>Falsches Format verwendet</German>
<Polish>Podano zły format</Polish>
<Japanese>間違ったフォーマットが入力されました</Japanese>
<Italian>Formato fornito sbagliato</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_importedDefault">
<English>Default loadouts list imported from clipboard</English>
@ -217,6 +247,7 @@
<German>Standard-Ausrüstungen-Liste aus der Zwischenablage importiert</German>
<Polish>Lista domyślnych zestawów została importowana ze schowka</Polish>
<Japanese>標準の装備一欄はクリップボードから取込されました</Japanese>
<Italian>La lista degli equipaggiamenti standard è stata importata dagli appunti</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_importedCurrent">
<English>Loadout imported from clipboard</English>
@ -224,6 +255,7 @@
<German>Ausrüstung aus der Zwischenablage importiert</German>
<Polish>Zestaw został importowany ze schowka</Polish>
<Japanese>装備はクリップボードから取込されました</Japanese>
<Italian>Equipaggiamento importato dagli appunti</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_loadoutDeleted">
<English>The following loadout was deleted:</English>
@ -231,6 +263,7 @@
<German>Folgende Ausrüstung wurde entfernt:</German>
<Polish>Następujący zestaw został skasowany:</Polish>
<Japanese>次の装備は削除されました:</Japanese>
<Italian>Il seguente equipaggiamento è stato eliminato:</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_loadoutUnshared">
<English>The following loadout is not public anymore:</English>
@ -238,6 +271,7 @@
<German>Folgende Ausrüstung ist nicht mehr öffentlich:</German>
<Polish>Następujący zestaw nie jest już publiczny:</Polish>
<Japanese>次の装備は非公開になりました:</Japanese>
<Italian>Il seguente eequipaggiamento non è più pubblico:</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_saveEmptyNameBox">
<English>The name field is empty!</English>
@ -245,6 +279,7 @@
<German>Das Feld "Name" ist leer!</German>
<Polish>Pole nazwy jest puste!</Polish>
<Japanese>名前欄が空白です!</Japanese>
<Italian>Il campo del nome è vuoto!</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_saveAuthorError">
<English>You are the author of this loadout</English>
@ -252,6 +287,7 @@
<German>Du bist der Ersteller dieser Ausrüstung</German>
<Polish>Jesteś autorem tego zestawu</Polish>
<Japanese>あなたはこの装備の作者です</Japanese>
<Italian>Sei l'autore di questo equipaggiamento</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_saveSharedError">
<English>A loadout of yours with the same name is public</English>
@ -259,6 +295,7 @@
<German>Eine deiner Ausrüstungen mit dem gleichen Namen ist öffentlich</German>
<Polish>Jeden z Twoich zestawów nazwany tak samo jest już publiczny</Polish>
<Japanese>あなたの装備は既に公開されているものと同名です</Japanese>
<Italian>Un tuo equipaggiamento con lo stesso nome è pubblico</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_loadoutSaved">
<English>The following loadout was saved:</English>
@ -266,6 +303,7 @@
<German>Folgende Ausrüstung wurde gespeichert:</German>
<Polish>Następujący zestaw został zapisany:</Polish>
<Japanese>次の装備は保存されました:</Japanese>
<Italian>Il seguente equipaggiamento è stato salvato:</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_loadoutLoaded">
<English>The following loadout was loaded:</English>
@ -273,6 +311,7 @@
<German>Folgene Ausrüstung wurde geladen:</German>
<Polish>Następujący zestaw został wczytany:</Polish>
<Japanese>次の装備が読み込みされました:</Japanese>
<Italian>Il seguente equipaggiamento è stato caricato:</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_renameExistError">
<English>A loadout with the same name already exist!</English>
@ -280,6 +319,7 @@
<German>Eine Ausrüstung mit dem gleichen Namen existiert bereits!</German>
<Polish>Zestaw z tą nazwą już istnieje!</Polish>
<Japanese>既にその名前は装備に使われています!</Japanese>
<Italian>Un equipaggiamento con lo stesso nome è gia esistente!</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_loadoutRenamed">
<English>was renamed to</English>
@ -287,6 +327,7 @@
<German>wurde umbenannt in</German>
<Polish>zmienił nazwę na</Polish>
<Japanese>次の名前に改名されました</Japanese>
<Italian>E' stato rinominato in</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_invertCameraSetting">
<English>Invert camera controls</English>
@ -294,6 +335,7 @@
<German>Kamerasteuerung invertieren</German>
<Polish>Odwróć sterowanie kamerą</Polish>
<Japanese>カメラ操作を反転</Japanese>
<Italian>Inverti comandi camera</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_modIconsSetting">
<English>Enable mod icons</English>
@ -301,6 +343,7 @@
<German>Aktiviert Mod-Icons</German>
<Polish>Włącz ikony modów</Polish>
<Japanese>MOD アイコンを表示</Japanese>
<Italian>Abilita icone mod</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_fontHeightSetting">
<English>Panel font height</English>
@ -308,6 +351,7 @@
<German>Schrifthöhe für die linke und rechte Liste</German>
<Polish>Wysokość czcionki</Polish>
<Japanese>パネルにあるフォントの高さ</Japanese>
<Italian>Altezza carattere del pannello</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_allowDefaultLoadoutsSetting">
<English>Allow default loadouts</English>
@ -315,6 +359,7 @@
<German>Erlaubt die Benutzung des Standard-Ausrüstungen-Reiters</German>
<Polish>Zezwól na użycie domyślnych zestawów</Polish>
<Japanese>標準の装備を許可</Japanese>
<Italian>Consenti equipaggiamenti standard</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_allowSharingSetting">
<English>Allow loadout sharing</English>
@ -322,6 +367,7 @@
<German>Erlaubt das Teilen von Ausrüstungen</German>
<Polish>Zezwól na udostępnianie zestawów</Polish>
<Japanese>装備の共有を許可</Japanese>
<Italian>Consenti condivisione equipaggiamenti</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_printToRPTSetting">
<English>Log missing / unavailable items</English>
@ -329,53 +375,62 @@
<German>Aktiviert die Aufzeichnung fehlender Gegenstände in der RPT</German>
<Polish>Rejestruj brakujące / niedostępne przedmioty</Polish>
<Japanese>欠落 / 利用不可アイテムを記録</Japanese>
<Italian>Log mancante / oggetto non disponibile</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonCurrentMagTooltip">
<English>Primary magazine</English>
<French>Chargeur principal </French>
<Polish>Główny magazynek</Polish>
<Japanese>プライマリ弾倉</Japanese>
<Italian>Caricatore primario</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonCurrentMag2Tooltip">
<English>Secondary magazine</English>
<French>Chargeur secondaire</French>
<Polish>Dodatkowy magazynek</Polish>
<Japanese>セカンダリ弾倉</Japanese>
<Italian>Caricatore secondario</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_settingCategory">
<English>ACE Arsenal</English>
<French>ACE Arsenal</French>
<Polish>ACE Arsenał</Polish>
<Japanese>ACE 武器庫</Japanese>
<Italian>Arsenale ACE</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_defaultLoadoutsTooltip">
<English>Allow the use of the default loadouts tab</English>
<French>Autorise l'usage de l'onglet équipements de base</French>
<Polish>Zezwól na użycie zakładki domyślnych zestawów</Polish>
<Japanese>標準の装備タブの使用を許可します</Japanese>
<Italian>Consenti l'uso della sezione per gli equipaggiamenti standard</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_modIconsTooltip">
<English>Show / hide mod icons for the left panel</English>
<French>Montrer / cacher les icones de mod pour le panneau de gauche</French>
<Polish>Pokaż / ukryj ikony modów w lewym panelu</Polish>
<Japanese>左パネルにある MOD アイコンの表示 / 非表示をします</Japanese>
<Italian>Mostra / nascondi le icone delle mod dal pannello sinistro</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_fontHeightTooltip">
<English>Change the font height for text in the left / right panels</English>
<French>Change la taille de police du texte des panneaux gauche / droite</French>
<Polish>Zmień wysokość czcionki dla tekstu lewego i prawego panelu</Polish>
<Japanese>右か左パネルにあるフォントの高さを変更します。</Japanese>
<Italian>Cambia l'altezza del font per il testo sul pannello sinistro / destro</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_printToRPTTooltip">
<English>Log missing / unavailable items in the RPT</English>
<French>Enregistre les objets manquants / indisponibles dans le RPT</French>
<Polish>Rejestruj brakujące / niedostępne przedmioty do pliku RPT</Polish>
<Japanese>PRT で欠落 / 利用不可アイテムを記録します</Japanese>
<Italian>Log mancante / oggetto non disponibile nell' RPT</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_CantOpenDisplay">
<English>Unable to open ACE arsenal</English>
<French>Impossible d'ouvrir ACE arsenal</French>
<German>Kann ACE Arsenal nicht anzeigen</German>
<Italian>Impossibile aprire l'arsenale ACE</Italian>
</Key>
</Package>
</Project>

View File

@ -41,7 +41,7 @@ if (_unit == _attachToVehicle) then { //Self Attachment
_attachedItem attachTo [_unit, [0.05, -0.09, 0.1], "leftshoulder"];
if (!_silentScripted) then {
_unit removeItem _itemClassname; // Remove item
[_onAttachText] call EFUNC(common,displayTextStructured);
[_onAttachText, 2] call EFUNC(common,displayTextStructured);
};
_unit setVariable [QGVAR(attached), [[_attachedItem, _itemClassname]], true];
} else {

View File

@ -83,4 +83,4 @@ if (_itemDisplayName == "") then {
_itemDisplayName = getText (configFile >> "CfgMagazines" >> _itemName >> "displayName");
};
[format [localize LSTRING(Item_Detached), _itemDisplayName]] call EFUNC(common,displayTextStructured);
[format [localize LSTRING(Item_Detached), _itemDisplayName], 2] call EFUNC(common,displayTextStructured);

View File

@ -101,4 +101,4 @@ private _attachList = _attachToVehicle getVariable [QGVAR(attached), []];
_attachList pushBack [_attachedObject, _itemClassname];
_attachToVehicle setVariable [QGVAR(attached), _attachList, true];
[_onAttachText] call EFUNC(common,displayTextStructured);
[_onAttachText, 2] call EFUNC(common,displayTextStructured);

View File

@ -12,5 +12,6 @@ class ACE_Settings {
typeName = "SCALAR";
value = 2.5;
category = ECSTRING(OptionsMenu,CategoryLogistics);
sliderSettings[] = {0, 10, 2.5, 1};
};
};

View File

@ -61,6 +61,7 @@ case ("SCALAR"): { // ACE's Scalar can be a float or an index for a list
_cbaValueInfo = if (isArray (_config >> "sliderSettings")) then {
getArray (_config >> "sliderSettings");
} else {
INFO_1("Using auto min/max for [%1]",_varName);
[-1, 5000, 0, 1]
};
_cbaValueInfo set [2, getNumber (_config >> "value")];

View File

@ -4,7 +4,7 @@
*
* Arguments:
* 0: The Unit (usually the player) <OBJECT>
* 0: Force a return type <SCALAR> (0: useImperial setting; 1: Metric; 2: Imperial)
* 1: Force a return type <SCALAR, BOOLEAN>
*
* Return Value:
* The return value <NUMBER>
@ -16,10 +16,9 @@
*/
#include "script_component.hpp"
params ["_unit", ["_returnFormat", 0, [0]]];
params ["_unit", ["_useImperial", false, [false, 0]]];
private _virtualLoad = 0;
private _useImperial = (!isNil QEGVAR(movement,useImperial) && {EGVAR(movement,useImperial)});
{
_virtualLoad = _virtualLoad + (_x getVariable [QEGVAR(movement,vLoad), 0]);
@ -33,7 +32,7 @@ private _useImperial = (!isNil QEGVAR(movement,useImperial) && {EGVAR(movement,u
private _weight = (loadAbs _unit + _virtualLoad) * 0.1;
//Return
if ([_useImperial, (_returnFormat == 1)] select (_returnFormat != 0)) then {
if (_useImperial in [true, 1]) then {
format ["%1lb", (round (_weight * 100)) / 100]
} else {
format ["%1kg", (round (_weight * (1/2.2046) * 100)) / 100]

View File

@ -627,11 +627,13 @@
<English>Persistent weapon laserpointer/flashlight</English>
<Russian>Автоматический ЛЦУ/тактический фонарь</Russian>
<Japanese>武器のレーザー ポインタ/フラッシュライトの永続</Japanese>
<Italian>Laser/torcia dell'arma costantemente accesi</Italian>
</Key>
<Key ID="STR_ACE_Common_SettingPersistentLaserDesc">
<English>Enable gunlight after weapon switch or vehicle enter/exit if it was previously enabled.</English>
<Russian>Включать ЛЦУ/тактический фонарь после смены оружия или входа/выхода из машины, если он был до этого включен.</Russian>
<Japanese>銃のライト等を点けていると武器を切り替えた後や車両を乗り降りしても、ライト等を点けたままにします。</Japanese>
<Italian>Abilita la torcia/laser dopo il cambio dell'arma o l'entrata/uscita del veicolo se precedentemente attiva.</Italian>
</Key>
<Key ID="STR_ACE_Common_bananaDisplayName">
<English>Banana</English>

View File

@ -27,11 +27,14 @@ class ACE_Settings {
description = CSTRING(ammoCookoffDuration_tooltip);
value = 1;
typeName = "SCALAR";
sliderSettings[] = {0, 5, 1, 1};
};
class GVAR(probabilityCoef) {
category = CSTRING(displayName);
displayName = CSTRING(probabilityCoef_name);
description = CSTRING(probabilityCoef_tooltip);
value = 1;
typeName = "SCALAR";
sliderSettings[] = {0, 5, 1, 1};
};
};

View File

@ -115,14 +115,16 @@
<Chinese>設定彈藥殉爆效果會持續多久時間 [輸入0來關閉殉爆效果]</Chinese>
<Chinesesimp>设定弹药殉爆效果会持续多久时间 [输入0来关闭殉爆效果]</Chinesesimp>
<Korean>쿡오프 지속 시간의 배수 [0 이면 비활성]</Korean>
</Key>
<Key ID="STR_ACE_CookOff_probabilityCoef_name">
</Key>
<Key ID="STR_ACE_CookOff_probabilityCoef_name">
<English>Cook-off probability coefficient</English>
<Japanese>誘爆の可能性係数</Japanese>
</Key>
<Key ID="STR_ACE_CookOff_probabilityCoef_tooltip">
<Italian>Coefficiente probabilità esplosione</Italian>
</Key>
<Key ID="STR_ACE_CookOff_probabilityCoef_tooltip">
<English>Multiplier for cook-off probability. Higher value results in higher cook-off probability</English>
<Japanese>誘爆する可能性の乗数。高い値では誘爆する可能性が高まります。</Japanese>
</Key>
<Italian>Moltiplicatore per la probabilità dell'esplosione. Un valore più alto aumenta la probabilità dell'esplosione</Italian>
</Key>
</Package>
</Project>

View File

@ -4,7 +4,7 @@
control = "Checkbox"; \
displayName = CSTRING(Eden_equipFRIES); \
tooltip = CSTRING(Eden_equipFRIES_Tooltip); \
expression = QUOTE([_this] call FUNC(equipFRIES)); \
expression = QUOTE(if (_value) then {[_this] call FUNC(equipFRIES)}); \
typeName = "BOOL"; \
condition = "objectVehicle"; \
defaultValue = false; \

View File

@ -11,6 +11,7 @@ class ACE_Settings {
typeName = "SCALAR";
displayName = CSTRING(maxRange_displayName);
description = CSTRING(maxRange_description);
sliderSettings[] = {0, 50, 4, 1};
};
class GVAR(indicatorForSelf) {
category = CSTRING(DisplayName);

View File

@ -26,6 +26,7 @@ class ACE_Settings {
description = CSTRING(MaxTrack_Desc);
typeName = "SCALAR";
value = 10;
sliderSettings[] = {0, 50, 10, -1};
};
class GVAR(maxTrackPerFrame) {
category = CSTRING(Module_DisplayName);
@ -33,5 +34,6 @@ class ACE_Settings {
description = CSTRING(MaxTrackPerFrame_Desc);
typeName = "SCALAR";
value = 10;
sliderSettings[] = {0, 50, 10, -1};
};
};

View File

@ -10,11 +10,13 @@ class ACE_Settings {
category = CSTRING(Module_DisplayName);
value = 0.5;
typeName = "SCALAR";
sliderSettings[] = {0, 1, 0.5, 1};
};
class GVAR(unconsciousnessVolume) {
category = CSTRING(Module_DisplayName);
value = 0.4;
typeName = "SCALAR";
sliderSettings[] = {0, 1, 0.4, 1};
};
class GVAR(disableEarRinging) {
category = CSTRING(Module_DisplayName);

View File

@ -5,5 +5,6 @@ class ACE_Settings {
typeName = "SCALAR";
value = 0.1;
displayName = CSTRING(minDamageToTrigger_displayName);
sliderSettings[] = {-1, 1, 0.1, 1};
};
};

View File

@ -1078,6 +1078,7 @@
<English>Pull out body</English>
<Russian>Вытащить тело</Russian>
<Japanese>身体を引き出す</Japanese>
<Italian>Estrai il corpo</Italian>
</Key>
</Package>
</Project>

View File

@ -3,5 +3,6 @@ class ACE_Settings {
value = 2;
typeName = "SCALAR";
displayName = CSTRING(dispersionCount_displayName);
sliderSettings[] = {0, 5, 2, -1};
};
};

View File

@ -5,6 +5,7 @@ class ACE_Settings {
typeName = "SCALAR";
displayName = CSTRING(BFT_Interval_DisplayName);
description = CSTRING(BFT_Interval_Description);
sliderSettings[] = {0, 30, 1, 1};
};
class GVAR(BFT_Enabled) {
category = CSTRING(Module_DisplayName);
@ -68,5 +69,6 @@ class ACE_Settings {
typeName = "SCALAR";
displayName = CSTRING(DefaultChannel_DisplayName);
description = CSTRING(DefaultChannel_Description);
sliderSettings[] = {-1, 5, -1, -1};
};
};

View File

@ -12,6 +12,7 @@ class ACE_Settings {
category = CSTRING(mapGestures_category);
typeName = "SCALAR";
value = 7;
sliderSettings[] = {0, 50, 7, 1};
};
class GVAR(interval) {
displayName = CSTRING(interval_displayName);
@ -19,6 +20,7 @@ class ACE_Settings {
category = CSTRING(mapGestures_category);
typeName = "SCALAR";
value = 0.03;
sliderSettings[] = {0, 1, 0.03, 2};
};
class GVAR(nameTextColor) {
displayName = CSTRING(nameTextColor_displayName);

View File

@ -41,6 +41,7 @@ class ACE_Settings {
description = CSTRING(MedicalSettings_bleedingCoefficient_Description);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {0, 25, 1, 1};
};
class GVAR(painCoefficient) {
category = CSTRING(Category_Medical);
@ -48,6 +49,7 @@ class ACE_Settings {
description = CSTRING(MedicalSettings_painCoefficient_Description);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {0, 25, 1, 1};
};
class GVAR(enableAdvancedWounds) {
category = CSTRING(Category_Medical);
@ -76,6 +78,7 @@ class ACE_Settings {
description = CSTRING(MedicalSettings_playerDamageThreshold_Description);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {0, 25, 1, 1};
};
class GVAR(AIDamageThreshold) {
category = CSTRING(Category_Medical);
@ -83,6 +86,7 @@ class ACE_Settings {
description = CSTRING(MedicalSettings_AIDamageThreshold_Description);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {0, 25, 1, 1};
};
class GVAR(enableUnconsciousnessAI) {
category = CSTRING(Category_Medical);
@ -120,6 +124,7 @@ class ACE_Settings {
description = CSTRING(ReviveSettings_maxReviveTime_Description);
typeName = "SCALAR";
value = 120;
sliderSettings[] = {0, 1200, 120, 0};
};
class GVAR(amountOfReviveLives) {
category = CSTRING(Category_Medical);
@ -127,6 +132,7 @@ class ACE_Settings {
description = CSTRING(ReviveSettings_amountOfReviveLives_Description);
typeName = "SCALAR";
value = -1;
sliderSettings[] = {-1, 25, -1, -1};
};
class GVAR(allowDeadBodyMovement) {
category = CSTRING(Category_Medical);
@ -156,6 +162,7 @@ class ACE_Settings {
description = CSTRING(MedicalSettings_litterCleanUpDelay_Description);
typeName = "SCALAR";
value = 0;
sliderSettings[] = {-1, 3600, 0, 0};
};
class GVAR(medicSetting_basicEpi) {
category = CSTRING(Category_Medical);
@ -291,5 +298,6 @@ class ACE_Settings {
description = CSTRING(MedicalSettings_delayUnconCaptive_Description);
typeName = "SCALAR";
value = 3;
sliderSettings[] = {0, 30, 3, 0};
};
};

View File

@ -4,7 +4,7 @@
<Key ID="STR_ACE_Medical_Injuries">
<English>INJURIES</English>
<German>VERLETZUNGEN</German>
<Italian>LESIONI</Italian>
<Italian>FERITE</Italian>
<Russian>ТРАВМЫ</Russian>
<French>BLESSURES</French>
<Polish>OBRAŻENIA</Polish>
@ -20,7 +20,7 @@
<Key ID="STR_ACE_Medical_NoInjuriesBodypart">
<English>No injuries on this bodypart...</English>
<German>Körperteil nicht verletzt...</German>
<Italian>Non ci sono lesioni in questa parte del corpo...</Italian>
<Italian>Non ci sono ferite in questa parte del corpo...</Italian>
<Russian>Данная часть тела не повреждена...</Russian>
<French>Aucune blessure ici...</French>
<Polish>Brak obrażeń na tej części ciała...</Polish>

View File

@ -29,5 +29,6 @@ class ACE_Settings {
value = 3;
typeName = "SCALAR";
category = ECSTRING(medical,Category_Medical);
sliderSettings[] = {0, 10, 3, 1};
};
};

View File

@ -1,8 +0,0 @@
class ACE_Settings {
class GVAR(useImperial) {
value = 0;
typeName = "BOOL";
isClientSettable = 1;
displayName = CSTRING(UseImperial);
};
};

View File

@ -1,4 +1,3 @@
class Extended_PreStart_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_FILE(XEH_preStart));

View File

@ -1,4 +1,3 @@
PREP(addLoadToUnitContainer);
PREP(canClimb);
PREP(climb);

View File

@ -18,4 +18,3 @@ class CfgPatches {
#include "CfgFatigue.hpp"
#include "CfgMoves.hpp"
#include "CfgVehicles.hpp"
#include "ACE_Settings.hpp"

View File

@ -13,17 +13,23 @@
*
* Public: No
*/
#include "script_component.hpp"
#include "script_component.hpp"
disableSerialization;
params ["_display"];
[{
disableSerialization;
params ["_dialog"];
private _fnc_update = {
params ["_display"];
private _control = _display displayCtrl 111;
if (isNull _dialog) exitWith {
[_this select 1] call CBA_fnc_removePerFrameHandler;
};
_control ctrlSetText format ["%1 - %2 %3 (%4)",
[ACE_player, false, true] call EFUNC(common,getName),
localize ELSTRING(common,Weight),
[ACE_player] call EFUNC(common,getWeight),
[ACE_player, true] call EFUNC(common,getWeight)
];
};
(_dialog displayCtrl 111) ctrlSetText format ["%1 - %2 %3", [ACE_player, false, true] call EFUNC(common,getName), localize ELSTRING(common,Weight), [ACE_player] call EFUNC(common,getWeight)];
}, 0, _this select 0] call CBA_fnc_addPerFrameHandler;
_display displayAddEventHandler ["MouseMoving", _fnc_update];
_display displayAddEventHandler ["MouseHolding", _fnc_update];
_display call _fnc_update;

View File

@ -56,12 +56,14 @@ class ACE_Settings {
typeName = "SCALAR";
isClientSettable = 0;
category = CSTRING(Module_DisplayName);
sliderSettings[] = {0, 50, 5, 1};
};
class GVAR(playerNamesMaxAlpha) {
value = 0.8;
typeName = "SCALAR";
isClientSettable = 0;
category = CSTRING(Module_DisplayName);
sliderSettings[] = {0, 1, 0.8, 2};
};
class GVAR(tagSize) {
value = 2;

View File

@ -12,6 +12,7 @@ class ACE_Settings {
description = CSTRING(fogScaling_Description);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {0, 2, 1, 1};
};
class GVAR(effectScaling) {
category = CSTRING(Category);
@ -19,5 +20,13 @@ class ACE_Settings {
description = CSTRING(effectScaling_Description);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {0, 2, 1, 1};
};
class GVAR(aimDownSightsBlur) {
category = CSTRING(Category);
displayName = CSTRING(aimDownSightsBlur_DisplayName);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {0, 2, 1, 1};
};
};

View File

@ -26,11 +26,17 @@ GVAR(ppEffectCCMuzzleFlash) = -1;
["ace_settingsInitialized", {
TRACE_3("settingsInitialized",GVAR(disableNVGsWithSights),GVAR(fogScaling),GVAR(effectScaling));
// Disable ALL effects if ace_nightvision_effectScaling is zero
if (GVAR(effectScaling) == 0) exitWith {};
["visionMode", LINKFUNC(onVisionModeChanged), false] call CBA_fnc_addPlayerEventHandler;
// handle only brightness if effects are disabled
if (GVAR(effectScaling) == 0) exitWith {
GVAR(ppEffectNVGBrightness) = ppEffectCreate ["ColorCorrections", 1236];
GVAR(ppEffectNVGBrightness) ppEffectForceInNVG true;
GVAR(ppEffectNVGBrightness) ppEffectAdjust [1, (-3+3)/5 + 1, 0, [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1]];
GVAR(ppEffectNVGBrightness) ppEffectCommit 0;
};
["loadout", LINKFUNC(onLoadoutChanged), true] call CBA_fnc_addPlayerEventHandler;
["visionMode", LINKFUNC(onVisionModeChanged), false] call CBA_fnc_addPlayerEventHandler;
["cameraView", LINKFUNC(onCameraViewChanged), true] call CBA_fnc_addPlayerEventHandler;
["vehicle", LINKFUNC(refreshGoggleType), false] call CBA_fnc_addPlayerEventHandler;
["turret", LINKFUNC(refreshGoggleType), true] call CBA_fnc_addPlayerEventHandler;
@ -60,6 +66,7 @@ if (!isNil QGVAR(serverPriorFog)) then {[] call FUNC(nonDedicatedFix);}; // If v
if !([ACE_player, objNull, ["isNotEscorting", "isNotInside", "isNotSitting", "isNotRefueling"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Conditions: specific
if ((currentVisionMode ACE_player != 1)) exitWith {false};
if (!(missionNamespace getVariable [QGVAR(allowBrightnessControl), true])) exitWith {false}; // just a mission setVar (not ace_setting)
// Statement
[ACE_player, 1] call FUNC(changeNVGBrightness);
@ -71,6 +78,7 @@ if (!isNil QGVAR(serverPriorFog)) then {[] call FUNC(nonDedicatedFix);}; // If v
if !([ACE_player, objNull, ["isNotEscorting", "isNotInside", "isNotSitting", "isNotRefueling"]] call EFUNC(common,canInteractWith)) exitWith {false};
// Conditions: specific
if ((currentVisionMode ACE_player != 1)) exitWith {false};
if (!(missionNamespace getVariable [QGVAR(allowBrightnessControl), true])) exitWith {false}; // just a mission setVar (not ace_setting)
// Statement
[ACE_player, -1] call FUNC(changeNVGBrightness);

View File

@ -19,7 +19,8 @@
params ["_player", "_changeInBrightness"];
TRACE_2("changeNVGBrightness",_player,_changeInBrightness);
private _brightness = _player getVariable [QGVAR(NVGBrightness), 0];
private _areEffectsDisabled = GVAR(effectScaling) == 0;
private _brightness = _player getVariable [QGVAR(NVGBrightness), [0, -3] select _areEffectsDisabled];
_brightness = ((_brightness + _changeInBrightness) min 0) max -6;
@ -28,5 +29,12 @@ _player setVariable [QGVAR(NVGBrightness), _brightness, false];
[format [(localize LSTRING(NVGBrightness)), _brightness]] call EFUNC(common,displayTextStructured);
playSound "ACE_Sound_Click";
// handle only brightness if effects are disabled
if (_areEffectsDisabled) exitWith {
// here we take (-6; 0) _brightness range and alter it to (0.4; 1.6)
GVAR(ppEffectNVGBrightness) ppEffectAdjust [1, (_brightness+3)/5 + 1, 0, [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1]];
GVAR(ppEffectNVGBrightness) ppEffectCommit 0;
};
// Trigger full ppEffects update next time run in the PFEH:
GVAR(nextEffectsUpdate) = -1;

View File

@ -19,6 +19,11 @@
params ["_unit", "_visionMode"];
TRACE_2("onVisionModeChanged",_unit,_visionMode);
// handle only brightness if effects are disabled
if (GVAR(effectScaling) == 0) exitWith {
GVAR(ppEffectNVGBrightness) ppEffectEnable (_visionMode == 1);
};
// Start PFEH when entering night vision mode:
if (_visionMode == 1) then {
if (GVAR(PFID) == -1) then {

View File

@ -88,8 +88,8 @@ if (CBA_missionTime < GVAR(nextEffectsUpdate)) then {
// Modify blur if looking down scope
if ((cameraView == "GUNNER") && {[ACE_player] call CBA_fnc_canUseWeapon}) then {
if (currentWeapon ACE_player == "") exitWith {};
if (currentWeapon ACE_player == primaryWeapon ACE_player) exitWith {_blurFinal = _blurFinal * ST_NVG_CAMERA_BLUR_SIGHTS_RIFLE}; // Rifles are bad
if (currentWeapon ACE_player == handgunWeapon ACE_player) exitWith {_blurFinal = _blurFinal * ST_NVG_CAMERA_BLUR_SIGHTS_PISTOL}; // Pistols aren't so bad
if (currentWeapon ACE_player == primaryWeapon ACE_player) exitWith {_blurFinal = _blurFinal * linearConversion [0, 1, GVAR(aimDownSightsBlur), 1, ST_NVG_CAMERA_BLUR_SIGHTS_RIFLE]}; // Rifles are bad
if (currentWeapon ACE_player == handgunWeapon ACE_player) exitWith {_blurFinal = _blurFinal * linearConversion [0, 1, GVAR(aimDownSightsBlur), 1, ST_NVG_CAMERA_BLUR_SIGHTS_PISTOL]}; // Pistols aren't so bad
};
// Scale effects based on ace_nightvision_effectScaling setting
@ -98,7 +98,6 @@ if (CBA_missionTime < GVAR(nextEffectsUpdate)) then {
private _radialBlurPower = 0.0025 * GVAR(effectScaling);
_brightFinal = linearConversion [0, 1, GVAR(effectScaling), 1, _brightFinal];
_contrastFinal = linearConversion [0, 1, GVAR(effectScaling), 1, _contrastFinal];
_blurFinal = _blurFinal * GVAR(effectScaling);
// Setup all effects

View File

@ -1,9 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="NightVision">
<Key ID="STR_ACE_NightVision_Category">
<English>ACE Nightvision</English>
<Japanese>ACE 暗視装置</Japanese>
<Italian>Visione notturna ACE</Italian>
</Key>
<Key ID="STR_ACE_NightVision_NVG_Gen1">
<English>NV Goggles (Gen1)</English>
@ -244,18 +245,25 @@
<Key ID="STR_ACE_NightVision_fogScaling_DisplayName">
<English>NVG Fog Scale</English>
<Japanese>暗視装置の霧の規模</Japanese>
<Italian>Livello Nebbia NVG</Italian>
</Key>
<Key ID="STR_ACE_NightVision_fogScaling_Description">
<English>Fog is used to limit visibility.</English>
<Japanese>霧は視界制限のために使われます。</Japanese>
<Italian>La nebbia viene utilizzata per limitare la visibilità.</Italian>
</Key>
<Key ID="STR_ACE_NightVision_effectScaling_DisplayName">
<English>NVG Effect Scale</English>
<Japanese>暗視装置の効果規模</Japanese>
<Italian>Effetto livello NVG</Italian>
</Key>
<Key ID="STR_ACE_NightVision_effectScaling_Description">
<English>Blur, grain and brightness effects [Setting to 0 will disable ALL nightvision effects]</English>
<Japanese>ぼかしと粒子、明度効果 [0 に設定で全効果を無効化します]</Japanese>
<Italian>Effetti di sfocatura, sgranatura e luminosità [Importare a 0 disabiliterà TUTTI gli effetti della visione notturna]</Italian>
</Key>
<Key ID="STR_ACE_NightVision_aimDownSightsBlur_DisplayName">
<English>Aim Down Sights Blur</English>
</Key>
</Package>
</Project>

View File

@ -43,6 +43,7 @@ class ACE_Settings {
value = 0.1;
displayName = CSTRING(unJamFailChance_displayName);
description = CSTRING(unJamFailChance_description);
sliderSettings[] = {0, 1, 0.1, 2};
};
class GVAR(enabled) {
category = CSTRING(DisplayName);

View File

@ -4,5 +4,6 @@ class ACE_Settings {
description = CSTRING(distanceCoefficient_toolTip);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {-1, 10, 5, 1};
};
};

View File

@ -101,11 +101,13 @@
<English>Hide Freefall Altimeter</English>
<German>Freifall-Höhenmesser verstecken</German>
<Japanese>降下時に高度計を非表示</Japanese>
<Italian>Nascondi Altimetro in Caduta Libera</Italian>
</Key>
<Key ID="STR_ACE_Parachute_HideAltimeter_tooltip">
<English>Hides the altitude and speed shown while free falling or parachuting.</English>
<German>Blendet den Höhen- und Geschwindigkeitsmesser während des Fallschirmspringens aus.</German>
<Japanese>自由降下時かパラシュート中に高度と速度を非表示にします。</Japanese>
<Italian>Nasconde l'altitudine e la velocità mostrate durante la caduta libera o paracadutandosi.</Italian>
</Key>
</Package>
</Project>

View File

@ -19,6 +19,7 @@ class ACE_Settings {
description = CSTRING(SearchDistance_description);
value = 15;
typeName = "SCALAR";
sliderSettings[] = {0, 50, 15, 1};
};
class GVAR(timePerPylon) {
category = CSTRING(Category_Pylons);
@ -26,6 +27,7 @@ class ACE_Settings {
description = CSTRING(TimePerPylon_description);
value = 5;
typeName = "SCALAR";
sliderSettings[] = {0, 10, 5, 1};
};
class GVAR(requireEngineer) {
category = CSTRING(Category_Pylons);

View File

@ -5,11 +5,13 @@ class ACE_Settings {
description = CSTRING(RefuelSettings_speed_Description);
value = 1;
typeName = "SCALAR";
sliderSettings[] = {0, 25, 1, 1};
};
class GVAR(hoseLength) {
category = ECSTRING(OptionsMenu,CategoryLogistics);
displayName = CSTRING(RefuelSettings_hoseLength_DisplayName);
value = 12;
typeName = "SCALAR";
sliderSettings[] = {0, 50, 12, 1};
};
};

View File

@ -29,6 +29,7 @@ class ACE_Settings {
typeName = "SCALAR";
value = 0.6;
category = ECSTRING(OptionsMenu,CategoryLogistics);
sliderSettings[] = {0, 1, 0.6, 2};
};
class GVAR(repairDamageThreshold_engineer) {
displayName = CSTRING(repairDamageThreshold_Engineer_name);
@ -36,6 +37,7 @@ class ACE_Settings {
typeName = "SCALAR";
value = 0.4;
category = ECSTRING(OptionsMenu,CategoryLogistics);
sliderSettings[] = {0, 1, 0.4, 2};
};
class GVAR(consumeItem_toolKit) {
displayName = CSTRING(consumeItem_ToolKit_name);

View File

@ -1792,26 +1792,29 @@
<Chinesesimp>引擎必须先关闭才能开始进行维修</Chinesesimp>
<Chinese>引擎必須先關閉才能開始進行維修</Chinese>
</Key>
<Key ID="STR_ACE_Repair_editorLoadedTracks">
<English>Spare Tracks</English>
<German>Ersatzketten</German>
<Japanese>予備履帯</Japanese>
<Italian>Cingoli di Scorta</Italian>
</Key>
<Key ID="STR_ACE_Repair_editorLoadedTracks_tooltip">
<English>Number of spare tracks in cargo.</English>
<German>Anzahl der Ersatzketten im Laderaum.</German>
<Japanese>カーゴ内にある予備履帯の数を指定します。</Japanese>
<Italian>Numero dei cingoli di scorta nel cargo.</Italian>
</Key>
<Key ID="STR_ACE_Repair_editorLoadedWheels">
<English>Spare Wheels</English>
<German>Ersatzreifen</German>
<Japanese>予備タイヤ</Japanese>
<Italian>Ruote di Scorta</Italian>
</Key>
<Key ID="STR_ACE_Repair_editorLoadedWheels_tooltip">
<English>Number of spare wheels in cargo.</English>
<German>Anzahl der Ersatzreifen im Laderaum.</German>
<Japanese>カーゴ内にある予備タイヤの数を指定します。</Japanese>
<Italian>Numero delle ruote di scorta nel cargo.</Italian>
</Key>
</Package>
</Project>

View File

@ -14,10 +14,11 @@ class ACE_Settings {
value = 1;
typeName = "BOOL";
};
class GVAR(bodyRemoveTimer) {
category = CSTRING(DisplayName);
displayName = CSTRING(DeadBodyRemoveTimer);
value = 0;
typeName = "SCALAR";
};
// Not used anywhere???
// class GVAR(bodyRemoveTimer) {
// category = CSTRING(DisplayName);
// displayName = CSTRING(DeadBodyRemoveTimer);
// value = 0;
// typeName = "SCALAR";
// };
};

View File

@ -38,6 +38,7 @@ class ACE_Settings {
value = 100;
displayName = CSTRING(defaultZeroRange_displayName);
description = CSTRING(defaultZeroRange_description);
sliderSettings[] = {0, 1000, 100, 0};
};
// Only relevant when advanced ballistics is enabled
@ -47,6 +48,7 @@ class ACE_Settings {
value = 15;
displayName = CSTRING(zeroReferenceTemperature_displayName);
description = CSTRING(zeroReferenceTemperature_description);
sliderSettings[] = {-55, 55, 15, 0};
};
class GVAR(zeroReferenceBarometricPressure) {
category = CSTRING(DisplayName);
@ -54,6 +56,7 @@ class ACE_Settings {
value = 1013.25;
displayName = CSTRING(zeroReferenceBarometricPressure_displayName);
description = CSTRING(zeroReferenceBarometricPressure_description);
sliderSettings[] = {0, 1013.25, 1013.25, 2};
};
class GVAR(zeroReferenceHumidity) {
category = CSTRING(DisplayName);
@ -61,6 +64,7 @@ class ACE_Settings {
value = 0.0;
displayName = CSTRING(zeroReferenceHumidity_displayName);
description = CSTRING(zeroReferenceHumidity_description);
sliderSettings[] = {0, 1, 0, 2};
};
class GVAR(deduceBarometricPressureFromTerrainAltitude) {
category = CSTRING(DisplayName);

View File

@ -13,8 +13,6 @@ GVAR(Optics) = ["", "", ""];
GVAR(Guns) = ["", "", ""];
GVAR(canAdjustElevation) = [false, false, false];
GVAR(canAdjustWindage) = [false, false, false];
GVAR(baseAngle) = [0, 0, 0];
GVAR(boreHeight) = [0, 0, 0];
GVAR(scopeAdjust) = [[[0,0],0,[0,0],0], [[0,0],0,[0,0],0], [[0,0],0,[0,0],0]];
["ace_settingsInitialized", {

View File

@ -32,8 +32,8 @@ _zeroing = _zeroing vectorMultiply MRAD_TO_DEG(1);
if (GVAR(correctZeroing) || GVAR(simplifiedZeroing)) then {
private _advancedBallistics = missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false];
private _baseAngle = GVAR(baseAngle) select _weaponIndex;
private _boreHeight = GVAR(boreHeight) select _weaponIndex;
private _baseAngle = (_unit getVariable [QGVAR(baseAngle), [0,0,0]]) select _weaponIndex;
private _boreHeight = (_unit getVariable [QGVAR(boreHeight), [0,0,0]]) select _weaponIndex;
private _oldZeroRange = currentZeroing _unit;
private _newZeroRange = [_unit] call FUNC(getCurrentZeroRange);
private _zeroCorrection = missionNamespace getVariable format[QGVAR(%1_%2_%3_%4_%5_%6_%7), _oldZeroRange, _newZeroRange, _boreHeight, _weapon, _ammo, _magazine, _advancedBallistics];

View File

@ -1,24 +1,27 @@
/*
* Author: Ruthberg
* Gets the base angle of the currently used weapon & optic combination
* Gets the base angle of the weapon & optic combination with the given weapon index
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Weapon index <NUMBER>
* 2: Weapon <CLASS>
* 3: Optic <CLASS>
*
* Return Value:
* base angle <NUMBER>
*
* Example:
* [player, 0, "srifle_LRR_F", "optic_LRPS"] call ace_scopes_fnc_getBaseAngle
* [player, 0] call ace_scopes_fnc_getBaseAngle
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_player", "_weaponIndex", "_weaponClass", "_opticsClass"];
params ["_unit", "_weaponIndex"];
if (_weaponIndex < 0 || {_weaponIndex > 2}) exitWith { 0 };
private _weaponClass = [primaryWeapon _unit, secondaryWeapon _unit, handgunWeapon _unit] select _weaponIndex;
private _opticsClass = ([_unit] call FUNC(getOptics)) select _weaponIndex;
private _weaponConfig = configFile >> "CfgWeapons" >> _weaponClass;
private _baseAngle = getNumber(_weaponConfig >> "ACE_IronSightBaseAngle");

View File

@ -1,24 +1,27 @@
/*
* Author: Ruthberg
* Gets the bore height of the currently used weapon & optic combination
* Gets the bore height of the weapon & optic combination with the given weapon index
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Weapon index <NUMBER>
* 2: Weapon <CLASS>
* 3: Optic <CLASS>
*
* Return Value:
* bore height <NUMBER>
*
* Example:
* [player, 0, "srifle_LRR_F", "optic_LRPS"] call ace_scopes_fnc_getBoreHeight
* [player, 0] call ace_scopes_fnc_getBoreHeight
*
* Public: Yes
*/
#include "script_component.hpp"
params ["_player", "_weaponIndex", "_weaponClass", "_opticsClass"];
params ["_unit", "_weaponIndex"];
if (_weaponIndex < 0 || {_weaponIndex > 2}) exitWith { 0 };
private _weaponClass = [primaryWeapon _unit, secondaryWeapon _unit, handgunWeapon _unit] select _weaponIndex;
private _opticsClass = ([_unit] call FUNC(getOptics)) select _weaponIndex;
if (_opticsClass == "") then { _opticsClass = _weaponClass; };

View File

@ -79,15 +79,17 @@ private _newOptics = [_player] call FUNC(getOptics);
};
} forEach GVAR(Optics);
private _unitBaseAngle = +(_player getVariable [QGVAR(baseAngle), [0,0,0]]);
private _unitBoreHeight = +(_player getVariable [QGVAR(boreHeight), [0,0,0]]);
private _newGuns = [primaryWeapon _player, secondaryWeapon _player, handgunWeapon _player];
{
if ((_newOptics select _x) != (GVAR(Optics) select _x) || (_newGuns select _x != GVAR(Guns) select _x)) then {
GVAR(baseAngle) set [_x, [_player, _x, _newGuns select _x, _newOptics select _x] call FUNC(getBaseAngle)];
GVAR(boreHeight) set [_x, [_player, _x, _newGuns select _x, _newOptics select _x] call FUNC(getBoreHeight)];
_unitBaseAngle set [_x, [_player, _x] call FUNC(getBaseAngle)];
_unitBoreHeight set [_x, [_player, _x] call FUNC(getBoreHeight)];
if ((_newOptics select _x) == "") then {
// Check if the weapon comes with an integrated optic
private _weaponConfig = configFile >> "CfgWeapons" >> (_newGuns select _x);
// Check if the weapon comes with an integrated optic
private _weaponConfig = configFile >> "CfgWeapons" >> (_newGuns select _x);
private _maxVertical = [0, 0];
private _verticalIncrement = 0;
private _maxHorizontal = [0, 0];
@ -113,7 +115,7 @@ private _newGuns = [primaryWeapon _player, secondaryWeapon _player, handgunWeapo
GVAR(canAdjustElevation) set [_x, (_verticalIncrement > 0) && !(_maxVertical isEqualTo [0, 0])];
GVAR(canAdjustWindage) set [_x, (_horizontalIncrement > 0) && !(_maxHorizontal isEqualTo [0, 0])];
};
// The optic or the weapon changed, reset the adjustment
private _persistentZero = profileNamespace getVariable [format[QGVAR(PersistentZero_%1_%2), _newGuns select _x, _newOptics select _x], 0];
((GVAR(scopeAdjust) select _x) select 0) params ["_minElevation", "_maxElevation"];
@ -128,6 +130,17 @@ private _newGuns = [primaryWeapon _player, secondaryWeapon _player, handgunWeapo
}
} forEach [0, 1, 2];
if (GVAR(correctZeroing) || GVAR(simplifiedZeroing)) then {
if (!(_unitBaseAngle isEqualTo (_player getVariable [QGVAR(baseAngle), [0,0,0]]))) then {
TRACE_2("syncing",_unitBaseAngle,_player getVariable QGVAR(baseAngle));
_player setVariable [QGVAR(baseAngle), _unitBaseAngle, true];
};
if (!(_unitBoreHeight isEqualTo (_player getVariable [QGVAR(boreHeight), [0,0,0]]))) then {
TRACE_2("syncing",_unitBoreHeight,_player getVariable QGVAR(boreHeight));
_player setVariable [QGVAR(boreHeight), _unitBoreHeight, true];
};
};
if (_updateAdjustment) then {
[ACE_player, QGVAR(Adjustment), _adjustment, 0.5] call EFUNC(common,setVariablePublic);
};

View File

@ -230,11 +230,13 @@
<English>Simplified zeroing</English>
<German>Vereinfachte Nullung</German>
<Japanese>簡略なゼロイン</Japanese>
<Italian>Azzeramento semplificato</Italian>
</Key>
<Key ID="STR_ACE_Scopes_simplifiedZeroing_description">
<English>Replicates the vanilla zeroing system for riflescopes.</English>
<German>Repliziert das Vanilla-Zeroing-System für Zielfernrohre.</German>
<Japanese>標準で使われるライフルスコープ用のゼロイン システムを複製します。</Japanese>
<Italian>Replica il sistema di azzeramento vanilla per le ottiche.</Italian>
</Key>
<Key ID="STR_ACE_Scopes_AdjustUpMinor">
<English>Minor adjustment up</English>
@ -370,7 +372,7 @@
<Polish>Zresetuj wyzerowanie</Polish>
<Russian>Сбросить корректировку</Russian>
<Spanish>Establecer ajuste a cero</Spanish>
<Italian>Resetta i valori del tiro</Italian>
<Italian>Imposta i valori dell'azzeramento</Italian>
<French>RAZ corrections</French>
<Hungarian>Állítások nullázása</Hungarian>
<Portuguese>Zerar ajuste</Portuguese>
@ -384,6 +386,7 @@
<English>Reset zero adjustment</English>
<German>Nullung zurücksetzen</German>
<Japanese>ゼロイン調節を初期化</Japanese>
<Italian>Resetta i valori dell'azzeramento</Italian>
</Key>
<Key ID="STR_ACE_Scopes_Description">
<English>This module adds windage and elevation adjustment turrets on high power rifle scopes.</English>

View File

@ -45,5 +45,6 @@ class ACE_Settings {
description = CSTRING(SafeZoneRadius_Description);
value = 100;
typeName = "SCALAR";
sliderSettings[] = {0, 1000, 100, 0};
};
};

View File

@ -5,6 +5,7 @@ class ACE_Settings {
description = CSTRING(DefaultLockpickStrength_Description);
value = 10;
typeName = "SCALAR";
sliderSettings[] = {-1, 60, 5, 1};
};
class GVAR(lockVehicleInventory) {
category = CSTRING(DisplayName);
@ -19,5 +20,6 @@ class ACE_Settings {
description = CSTRING(VehicleStartingLockState_Description);
value = -1;
typeName = "SCALAR";
sliderSettings[] = {-1, 2, -1, -1}; // ToDo: Make this a list?
};
};

View File

@ -39,6 +39,7 @@ class ACE_Settings {
value = 10000; // Value, NOT index. 10000 is the maximum in A3
displayName = CSTRING(limit_DisplayName);
description = CSTRING(limit_setting);
sliderSettings[] = {500, 12000, 10000, 0};
};
class GVAR(objectViewDistanceCoeff) {
category = CSTRING(Module_DisplayName);

View File

@ -19,6 +19,6 @@ class ACE_Settings {
description = CSTRING(simulationInterval_Description);
typeName = "SCALAR";
value = 0.05;
sliderSettings[] = {0, 0.2, 0.05, 1};
sliderSettings[] = {0, 0.2, 0.05, 2};
};
};