Merge branch 'master' into pr/8215

This commit is contained in:
PabstMirror 2023-01-19 22:35:23 -06:00
commit 16dee0a280
371 changed files with 6054 additions and 1034 deletions

View File

@ -56,8 +56,10 @@ jobs:
run: |
rm -r z\ace\addons\
rm -r z\ace\optionals\
rm -r z\ace\tools\pDummies\
xcopy /e /h /q pullrequest\addons z\ace\addons\
xcopy /e /h /q pullrequest\optionals z\ace\optionals\
xcopy /e /h /q pullrequest\tools\pDummies z\ace\tools\pDummies\
- name: Setup build environment
run: |
subst P: .

View File

@ -35,7 +35,7 @@ Walter Pearce <jaynus@gmail.com>
11RDP-LoupVert <loupvert@11rdp.fr>
654wak654 <ozanegitmen@gmail.com>
[BIG]Bull
ACCtomeek <tomeek99@gmail.com>
ACCtomeek
adam3adam <br.ada@seznam.cz>
Adanteh
aeroson
@ -68,6 +68,7 @@ Clon1998 <ps.patti1998@gmail.com>
Codingboy
Coren <coren4@gmail.com>
Crusty
Cyruz143
dabako <dabako@dabakoworld.de>
dgibso29 <gibson@earringpranks.com>
Dharma Bellamkonda <dharma.bellamkonda@gmail.com>
@ -130,6 +131,7 @@ meat <p.humberdroz@gmail.com>
Michail Nikolaev
MikeMatrix <m.braun92@gmail.com>
mjc4wilton <mjc4wilton@gmail.com>
Mysteryjuju
nic547 <nic547@outlook.com>
nikolauska <nikolauska1@gmail.com>
nomisum <nomisum@gmail.com>
@ -147,6 +149,7 @@ QuickDagger
rakowozz
ramius86 <pasini86@hotmail.com>
Raspu86
RcINS
Riccardo Petricca <petriccarcc@gmail.com>
Robert Boklahánics <bokirobi@gmail.com>
ruPaladin <happyworm24@rambler.ru>
@ -162,6 +165,7 @@ Sniperwolf572 <tenga6@gmail.com>
System98
SzwedzikPL <szwedzikpl@gmail.com>
Tachi <zaveruha007@gmail.com>
tbeswick96
Tessa Elieff <Fastroping Sound - CreativeCommons Attributions 3.0>
Timi007 <timi007@gmx.net>
Toaster <jonathan.pereira@gmail.com>
@ -178,4 +182,4 @@ wizpig64
YetheSamartaka
xrufix
Zakant <Zakant@gmx.de>
zGuba
zGuba

View File

@ -4,7 +4,7 @@
<p align="center">
<a href="https://github.com/acemod/ACE3/releases/latest">
<img src="https://img.shields.io/badge/Version-3.15.0-blue.svg?style=flat-square" alt="ACE3 Version">
<img src="https://img.shields.io/badge/Version-3.15.2-blue.svg?style=flat-square" alt="ACE3 Version">
</a>
<a href="https://github.com/acemod/ACE3/issues">
<img src="https://img.shields.io/github/issues-raw/acemod/ACE3.svg?style=flat-square&label=Issues" alt="ACE3 Issues">

View File

@ -35,7 +35,7 @@
<Key ID="STR_ACE_Advanced_Throwing_Enable_DisplayName">
<English>Enable Advanced Throwing</English>
<Spanish>Activar Lanzamiento Avanzado</Spanish>
<Russian>Включить улучшенный бросок</Russian>
<Russian>Вкл. улучшенный бросок</Russian>
<Japanese>アドバンスド スローイングを有効化</Japanese>
<Polish>Aktywuj zaawansowane rzucanie</Polish>
<German>Aktiviere erweitertes Wurfsystem</German>
@ -128,7 +128,7 @@
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUp_DisplayName">
<English>Enable Throwables Pick Up</English>
<Spanish>Habilitar recoger objetos lanzados</Spanish>
<Russian>Включить подбор гранат</Russian>
<Russian>Вкл. подбор гранат</Russian>
<Japanese>投てき物の拾い上げを有効化</Japanese>
<Polish>Zezwól na podnoszenie obiektów miotanych</Polish>
<German>Aktiviere Aufheben von Wurfobjekten</German>
@ -158,7 +158,7 @@
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUpAttached_DisplayName">
<English>Enable Attached Throwables Pick Up</English>
<Spanish>Activar coger objetos lanzables que se enganchan</Spanish>
<Russian>Включить подбор прикрепленных гранат</Russian>
<Russian>Вкл. подбор прикрепленных гранат</Russian>
<Japanese>取り付けられた投てき物の拾い上げを有効化</Japanese>
<Polish>Zezwól na podnoszenie przyczepionych obiektów miotanych</Polish>
<German>Aktiviere erneute Aufnahme befestigter Wurfobjekte</German>

Binary file not shown.

Binary file not shown.

View File

@ -18,11 +18,14 @@ class CfgModels {
skeletonName = "";
};
class ace_entrchtool: Default {};
class ace_envelope_big: Default {};
class ace_envelope_big4: Default {};
class ace_envelope_big4_nogeo: Default {};
class ace_envelope_small: Default {};
class ace_envelope_small4: Default {};
class ace_envelope_small4_nogeo: Default {};
class ace_envelope: Default {
sections[] = {"velka"};
};
class ace_envelope_big: ace_envelope {};
class ace_envelope_big4: ace_envelope {};
class ace_envelope_big4_nogeo: ace_envelope {};
class ace_envelope_small: ace_envelope {};
class ace_envelope_small4: ace_envelope {};
class ace_envelope_small4_nogeo: ace_envelope {};
class LWTS_optic: Default {};
};
};

View File

@ -34,6 +34,7 @@ PREP(fillLeftPanel);
PREP(fillLoadoutsList);
PREP(fillRightPanel);
PREP(fillSort);
PREP(getLoadout);
PREP(handleLoadoutsSearchbar);
PREP(handleMouse);
PREP(handleScrollWheel);

View File

@ -59,10 +59,11 @@ GVAR(lastSortRight) = "";
if (!isNil QGVAR(currentLoadoutsTab) && {GVAR(currentLoadoutsTab) == IDC_buttonSharedLoadouts}) then {
private _curSelData =_contentPanelCtrl lnbData [(lnbCurSelRow _contentPanelCtrl), 1];
([_loadoutData] call FUNC(verifyLoadout)) params ["_loadout", "_nullItemsAmount", "_unavailableItemsAmount"];
([_loadoutData] call FUNC(verifyLoadout)) params ["_extendedLoadout", "_nullItemsAmount", "_unavailableItemsAmount"];
private _newRow = _contentPanelCtrl lnbAddRow [_playerName, _loadoutName];
_extendedLoadout params ["_loadout"];
ADD_LOADOUTS_LIST_PICTURES
_contentPanelCtrl lnbSetData [[_newRow, 1], _playerName + _loadoutName];
@ -85,3 +86,20 @@ GVAR(lastSortRight) = "";
};
};
}] call CBA_fnc_addEventHandler;
["CBA_loadoutSet", {
params ["_unit", "_loadout", "_extendedInfo"];
private _face = _extendedInfo getOrDefault [QGVAR(face), ""];
if (_face != "") then {
_unit setFace _face;
};
private _voice = _extendedInfo getOrDefault [QGVAR(voice), ""];
if (_voice != "") then {
_unit setSpeaker _voice;
};
private _insignia = _extendedInfo getOrDefault [QGVAR(insignia), ""];
if (_insignia != "") then {
_unit setVariable ["BIS_fnc_setUnitInsignia_class", nil];
[_unit, _insignia] call bis_fnc_setUnitInsignia;
};
}] call CBA_fnc_addEventHandler;

View File

@ -14,9 +14,13 @@ PREP_RECOMPILE_END;
[QGVAR(enableIdentityTabs), "CHECKBOX", localize LSTRING(enableIdentityTabsSettings), localize LSTRING(settingCategory), true, true] call CBA_fnc_addSetting;
// Arsenal loadouts
[QGVAR(allowDefaultLoadouts), "CHECKBOX", [LSTRING(allowDefaultLoadoutsSetting), LSTRING(defaultLoadoutsTooltip)], localize LSTRING(settingCategory), true, true] call CBA_fnc_addSetting;
[QGVAR(allowSharedLoadouts), "CHECKBOX", localize LSTRING(allowSharingSetting), localize LSTRING(settingCategory), true, true] call CBA_fnc_addSetting;
[QGVAR(EnableRPTLog), "CHECKBOX", [LSTRING(printToRPTSetting), LSTRING(printToRPTTooltip)], localize LSTRING(settingCategory), false, false] call CBA_fnc_addSetting;
[QGVAR(allowDefaultLoadouts), "CHECKBOX", [LSTRING(allowDefaultLoadoutsSetting), LSTRING(defaultLoadoutsTooltip)], [localize LSTRING(settingCategory), localize LSTRING(loadoutSubcategory)], true, true] call CBA_fnc_addSetting;
[QGVAR(allowSharedLoadouts), "CHECKBOX", localize LSTRING(allowSharingSetting), [localize LSTRING(settingCategory), localize LSTRING(loadoutSubcategory)], true, true] call CBA_fnc_addSetting;
[QGVAR(EnableRPTLog), "CHECKBOX", [LSTRING(printToRPTSetting), LSTRING(printToRPTTooltip)], [localize LSTRING(settingCategory), localize LSTRING(loadoutSubcategory)], false, false] call CBA_fnc_addSetting;
[QGVAR(loadoutsSaveFace), "CHECKBOX", localize LSTRING(loadoutsSaveFaceSetting), [localize LSTRING(settingCategory), localize LSTRING(loadoutSubcategory)], false] call CBA_fnc_addSetting;
[QGVAR(loadoutsSaveVoice), "CHECKBOX", localize LSTRING(loadoutsSaveVoiceSetting), [localize LSTRING(settingCategory), localize LSTRING(loadoutSubcategory)], false] call CBA_fnc_addSetting;
[QGVAR(loadoutsSaveInsignia), "CHECKBOX", localize LSTRING(loadoutsSaveInsigniaSetting), [localize LSTRING(settingCategory), localize LSTRING(loadoutSubcategory)], true] call CBA_fnc_addSetting;
[QGVAR(statsToggle), {
params ["_display", "_showStats"];

View File

@ -6,7 +6,7 @@
*
* Arguments:
* 0: Name of loadout <STRING>
* 1: getUnitLoadout array <ARRAY>
* 1: CBA extended loadout or getUnitLoadout array <ARRAY>
*
* Return Value:
* None
@ -17,7 +17,15 @@
* Public: Yes
*/
params [["_name", "", [""]], ["_loadout", [], [[]], 10]];
params [["_name", "", [""]], ["_loadout", [], [[]]]];
private _extendedInfo = createHashMap;
if (count _loadout == 2) then {
_extendedInfo = _loadout select 1;
_loadout = _loadout select 0;
};
if (count _loadout != 10) exitWith {};
if (isNil QGVAR(defaultLoadoutsList)) then {
GVAR(defaultLoadoutsList) = [];
@ -36,7 +44,7 @@ for "_dataIndex" from 0 to 10 do {
if (_weapon != "") then {
private _baseWeapon = _weapon call BIS_fnc_baseWeapon;
if (_weapon != _baseWeapon) then {
if (_weapon != _baseWeapon) then {
(_loadout select _dataIndex) set [0, _baseWeapon];
};
};
@ -71,7 +79,7 @@ for "_dataIndex" from 0 to 10 do {
private _baseWeapon = _weapon call BIS_fnc_baseWeapon;
if (_weapon != _baseWeapon) then {
(_x select 0)set [0, _baseWeapon];
(_x select 0) set [0, _baseWeapon];
};
};
};
@ -100,7 +108,7 @@ for "_dataIndex" from 0 to 10 do {
private _loadoutIndex = (+(GVAR(defaultLoadoutsList))) findIf {(_x select 0) == _name};
if (_loadoutIndex == -1) then {
GVAR(defaultLoadoutsList) pushBack [_name, _loadout];
GVAR(defaultLoadoutsList) pushBack [_name, [_loadout, _extendedInfo]];
} else {
GVAR(defaultLoadoutsList) set [_loadoutIndex, [_name, _loadout]];
GVAR(defaultLoadoutsList) set [_loadoutIndex, [_name, [_loadout, _extendedInfo]]];
};

View File

@ -43,7 +43,7 @@ if (GVAR(shiftState)) then {
[_display, localize LSTRING(exportDefault)] call FUNC(message);
} else {
private _export = str getUnitLoadout GVAR(center);
private _export = str ([GVAR(center)] call FUNC(getLoadout));
"ace_clipboard" callExtension (_export + ";");
"ace_clipboard" callExtension "--COMPLETE--";

View File

@ -39,8 +39,9 @@ if (GVAR(shiftState) && {is3DEN}) then {
set3DENMissionAttributes [[QGVAR(DummyCategory), QGVAR(DefaultLoadoutsListAttribute), GVAR(defaultLoadoutsList)]];
} else {
if (count _data == 10) then {
GVAR(center) setUnitLoadout _data;
private _count = count _data;
if (_count == 10 || { _count == 2 }) then {
[GVAR(center), _data] call CBA_fnc_setLoadout;
GVAR(currentItems) = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", [], [], [], [], [], []];
for "_index" from 0 to 15 do {
@ -92,8 +93,19 @@ if (GVAR(shiftState) && {is3DEN}) then {
call FUNC(updateUniqueItemsList);
// Reapply insignia
[GVAR(center), ""] call bis_fnc_setUnitInsignia;
[GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia;
if (QGVAR(insignia) in _loadout#1) then {
GVAR(currentInsignia) = _loadout#1 getOrDefault [QGVAR(insignia), ""];
} else {
[GVAR(center), ""] call bis_fnc_setUnitInsignia;
[GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia;
};
if (QGVAR(face) in _loadout#1) then {
GVAR(currentFace) = _loadout#1 getOrDefault [QGVAR(face), GVAR(currentFace)];
};
if (QGVAR(voice) in _loadout#1) then {
GVAR(currentVoice) = _loadout#1 getOrDefault [QGVAR(voice), GVAR(currentVoice)];
};
[_display, _display displayCtrl GVAR(currentLeftPanel)] call FUNC(fillLeftPanel);

View File

@ -34,7 +34,7 @@ private _loadout = switch GVAR(currentLoadoutsTab) do {
};
};
GVAR(center) setUnitLoadout [_loadout, true];
[GVAR(center), _loadout, true] call CBA_fnc_setLoadout;
GVAR(currentItems) = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", [], [], [], [], [], []];
for "_index" from 0 to 15 do {
@ -91,9 +91,21 @@ for "_index" from 0 to 15 do {
call FUNC(updateUniqueItemsList);
// Reapply insignia
[GVAR(center), ""] call bis_fnc_setUnitInsignia;
[GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia;
if (QGVAR(insignia) in _loadout#1) then {
GVAR(currentInsignia) = _loadout#1 getOrDefault [QGVAR(insignia), ""];
} else {
[GVAR(center), ""] call bis_fnc_setUnitInsignia;
[GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia;
};
if (QGVAR(face) in _loadout#1) then {
GVAR(currentFace) = _loadout#1 getOrDefault [QGVAR(face), GVAR(currentFace)];
};
if (QGVAR(voice) in _loadout#1) then {
GVAR(currentVoice) = _loadout#1 getOrDefault [QGVAR(voice), GVAR(currentVoice)];
};
[(findDisplay IDD_ace_arsenal), [localize LSTRING(loadoutLoaded), _loadoutName] joinString " "] call FUNC(message);
[QGVAR(onLoadoutLoad), [_loadout, _loadoutName]] call CBA_fnc_localEvent;
[QGVAR(onLoadoutLoad), [_loadout#0, _loadoutName]] call CBA_fnc_localEvent;
[QGVAR(onLoadoutLoadExtended), [_loadout, _loadoutName]] call CBA_fnc_localEvent;

View File

@ -35,16 +35,17 @@ if (count _similarLoadouts > 0) exitWith {
// Update loadout info in profile / 3DEN and list namespaces
private _loadoutToRename = (_data select {_x select 0 == _loadoutName}) select 0;
(_contentPanelCtrl getVariable (_loadoutName + str GVAR(currentLoadoutsTab))) params ["_loadout", "_nullItemsAmount", "_unavailableItemsAmount", "_nullItemsList", "_unavailableItemsList"];
(_contentPanelCtrl getVariable (_loadoutName + str GVAR(currentLoadoutsTab))) params ["_extendedLoadout", "_nullItemsAmount", "_unavailableItemsAmount", "_nullItemsList", "_unavailableItemsList"];
_data set [_data find _loadoutToRename, [_editBoxContent, (_loadoutToRename select 1)]];
_contentPanelCtrl setVariable [_loadoutName + str GVAR(currentLoadoutsTab), nil];
_contentPanelCtrl setVariable [_editBoxContent + str GVAR(currentLoadoutsTab), [_loadout, _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList]];
_contentPanelCtrl setVariable [_editBoxContent + str GVAR(currentLoadoutsTab), [_extendedLoadout, _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList]];
// Add new row
_contentPanelCtrl lnbDeleteRow _curSelRow;
private _newRow = _contentPanelCtrl lnbAddRow ["",_editBoxContent];
_extendedLoadout params ["_loadout"];
ADD_LOADOUTS_LIST_PICTURES
if (_nullItemsAmount > 0) then {

View File

@ -31,7 +31,8 @@ private _cursSelRow = lnbCurSelRow _contentPanelCtrl;
private _loadoutName = _contentPanelCtrl lnbText [_cursSelRow, 1];
private _curSelLoadout = (_contentPanelCtrl getVariable (_loadoutName + str GVAR(currentLoadoutsTab))) select 0;
private _loadout = getUnitLoadout GVAR(center);
private _extendedLoadout = GVAR(center) call FUNC(getLoadout);
private _loadout = _extendedLoadout select 0;
private _loadoutIndex = _data findIf {(_x select 0) == _editBoxContent};
private _sharedLoadoutsVars = GVAR(sharedLoadoutsNamespace) getVariable QGVAR(sharedLoadoutsVars);
@ -62,7 +63,7 @@ switch (GVAR(currentLoadoutsTab)) do {
if (_weapon != "") then {
private _baseWeapon = _weapon call BIS_fnc_baseWeapon;
if (_weapon != _baseWeapon) then {
if (_weapon != _baseWeapon) then {
(_loadout select _dataIndex) set [0, _baseWeapon];
};
};
@ -135,9 +136,9 @@ switch (GVAR(currentLoadoutsTab)) do {
};
if (_loadoutIndex isEqualto -1) then {
_data pushBack [_editBoxContent, _loadout];
_data pushBack [_editBoxContent, _extendedLoadout];
} else {
_data set [_loadoutIndex, [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _loadout]];
_data set [_loadoutIndex, [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _extendedLoadout]];
};
// Delete "old" loadout row
@ -149,7 +150,7 @@ switch (GVAR(currentLoadoutsTab)) do {
ADD_LOADOUTS_LIST_PICTURES
_contentPanelCtrl setVariable [_editBoxContent + str GVAR(currentLoadoutsTab), [_loadout] call FUNC(verifyLoadout)];
_contentPanelCtrl setVariable [_editBoxContent + str GVAR(currentLoadoutsTab), [_extendedLoadout] call FUNC(verifyLoadout)];
_contentPanelCtrl lnbSort [1, false];
@ -243,9 +244,9 @@ switch (GVAR(currentLoadoutsTab)) do {
};
if (_loadoutIndex == -1) then {
GVAR(defaultLoadoutsList) pushBack [_editBoxContent, _loadout];
GVAR(defaultLoadoutsList) pushBack [_editBoxContent, _extendedLoadout];
} else {
GVAR(defaultLoadoutsList) set [_loadoutIndex, [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _loadout]];
GVAR(defaultLoadoutsList) set [_loadoutIndex, [[_editBoxContent, _loadoutName] select (_loadoutName isEqualTo _editBoxContent), _extendedLoadout]];
};
for '_i' from 0 to (((lnbsize _contentPanelCtrl) select 0) - 1) do {
@ -256,7 +257,7 @@ switch (GVAR(currentLoadoutsTab)) do {
ADD_LOADOUTS_LIST_PICTURES
_contentPanelCtrl setVariable [_editBoxContent + str GVAR(currentLoadoutsTab), [_loadout] call FUNC(verifyLoadout)];
_contentPanelCtrl setVariable [_editBoxContent + str GVAR(currentLoadoutsTab), [_extendedLoadout] call FUNC(verifyLoadout)];
_contentPanelCtrl lnbSort [1, false];
@ -295,4 +296,5 @@ switch (GVAR(currentLoadoutsTab)) do {
};
[(findDisplay IDD_ace_arsenal), [localize LSTRING(loadoutSaved), _editBoxContent] joinString " "] call FUNC(message);
private _savedLoadout = (_data select {_x select 0 == _editBoxContent}) select 0;
[QGVAR(onLoadoutSave), [_data find _savedLoadout, _savedLoadout]] call CBA_fnc_localEvent;
[QGVAR(onLoadoutSave), [_data find _savedLoadout, _savedLoadout#0]] call CBA_fnc_localEvent;
[QGVAR(onLoadoutSaveExtended), [_data find _savedLoadout, _savedLoadout]] call CBA_fnc_localEvent;

View File

@ -44,7 +44,7 @@ if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then {
[_loadoutData] call FUNC(verifyLoadout)
} else {
_loadoutCachedInfo
} params ["_loadout", "_nullItemsAmount", "_unavailableItemsAmount", "_nullItemsList", "_unavailableItemsList"];
} params ["_extendedLoadout", "_nullItemsAmount", "_unavailableItemsAmount", "_nullItemsList", "_unavailableItemsList"];
// Log missing / nil items to RPT
if (GVAR(EnableRPTLog) && {isNil "_loadoutCachedInfo"} && {(_nullItemsAmount > 0) || {_unavailableItemsAmount > 0}}) then {
@ -64,6 +64,7 @@ if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then {
private _newRow = _contentPanelCtrl lnbAddRow ["",_loadoutName];
_extendedLoadout params ["_loadout"];
ADD_LOADOUTS_LIST_PICTURES
if (_nullItemsAmount > 0) then {
@ -76,7 +77,7 @@ if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then {
};
};
_contentPanelCtrl setVariable [_loadoutName + str GVAR(currentLoadoutsTab), [_loadout, _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList]];
_contentPanelCtrl setVariable [_loadoutName + str GVAR(currentLoadoutsTab), [_extendedLoadout, _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList]];
if ((profileName + _loadoutName) in _sharedLoadoutsVars && {GVAR(currentLoadoutsTab) == IDC_buttonMyLoadouts}) then {
_contentPanelCtrl lnbSetPicture [[_newRow, 0], QPATHTOF(data\iconPublic.paa)];
@ -99,11 +100,12 @@ if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then {
[QGVAR(loadoutUnshared), [_contentPanelCtrl, profileName, _loadoutName]] call CBA_fnc_remoteEvent;
} else {
([_loadoutData] call FUNC(verifyLoadout)) params ["_loadout", "_nullItemsAmount", "_unavailableItemsAmount"];
([_loadoutData] call FUNC(verifyLoadout)) params ["_extendedLoadout", "_nullItemsAmount", "_unavailableItemsAmount"];
_contentPanelCtrl lnbSetColumnsPos [0, 0.15, 0.40, 0.50, 0.60, 0.70, 0.75, 0.80, 0.85, 0.90];
private _newRow = _contentPanelCtrl lnbAddRow [_playerName, _loadoutName];
_extendedLoadout params ["_loadout"];
ADD_LOADOUTS_LIST_PICTURES
_contentPanelCtrl lnbSetData [[_newRow, 1], _playerName + _loadoutName];

View File

@ -65,12 +65,12 @@ private _fnc_fill_right_Container = {
private _lbAdd = _ctrlPanel lnbAddRow ["", _displayName, "0"];
private _columns = count lnbGetColumnsPosition _ctrlPanel;
_ctrlPanel lnbSetData [[_lbAdd, 0], _x];
_ctrlPanel lnbSetData [[_lbAdd, 0], _className];
_ctrlPanel lnbSetPicture [[_lbAdd, 0], _picture];
_ctrlPanel lnbSetValue [[_lbAdd, 0], _mass];
_ctrlPanel setVariable [_x, _mass];
_ctrlPanel setVariable [_className, _mass];
_ctrlPanel lnbSetValue [[_lbAdd, 2], [0, 1] select (_isUnique)];
_ctrlPanel lbSetTooltip [_lbAdd * _columns,format ["%1\n%2", _displayName, _x]];
_ctrlPanel lbSetTooltip [_lbAdd * _columns, format ["%1\n%2", _displayName, _className]];
};
// Retrieve compatible mags

View File

@ -0,0 +1,37 @@
#include "script_component.hpp"
/*
* Author: Brett Mayson
* Get the extended loadout of a unit, including identity options if enabled
*
* Arguments:
* 0: Unit <OBJECT>
*
* Return Value:
* CBA Extended Loadout <ARRAY>
*
* Example:
* [_unit] call ace_arsenal_fnc_getLoadout
*
* Public: Yes
*/
params [["_unit", objNull, [objNull]]];
if (isNull _unit) exitWith {};
([_unit] call CBA_fnc_getLoadout) params ["_loadout", "_extendedInfo"];
if (GVAR(loadoutsSaveFace)) then {
_extendedInfo set [QGVAR(face), face _unit];
};
if (GVAR(loadoutsSaveVoice)) then {
_extendedInfo set [QGVAR(voice), speaker _unit];
};
if (GVAR(loadoutsSaveInsignia)) then {
private _insignia = _unit getVariable ["BIS_fnc_setUnitInsignia_class", ""];
if (_insignia != "") then {
_extendedInfo set [QGVAR(insignia), _insignia];
};
};
[_loadout, _extendedInfo]

View File

@ -57,5 +57,7 @@ if (_global && {isMultiplayer} && {{_object in _x} count GVAR(EHIDArray) == 0})
[_object, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToObject);
[_object, _items, false] call FUNC(addVirtualItems);
[QGVAR(boxInitialized), [_object, _items]] call CBA_fnc_localEvent;
};
};

View File

@ -32,7 +32,7 @@ if (is3DEN) then {
// Apply the loadout from the dummy to all selected units
if (_exitCode == 1) then {
{
_x setUnitLoadout (getUnitLoadout GVAR(center));
[_x, GVAR(center) call FUNC(getLoadout)] call CBA_fnc_setLoadout;
} foreach (get3DENSelected "object");
save3DENInventory (get3DENSelected "object");

View File

@ -79,7 +79,7 @@ for "_index" from 0 to 14 do {
};
if ((_array select 2) isNotEqualTo "") then {
((GVAR(virtualItems) select _index) select 2) pushBackUnique (_array select 2);
((GVAR(virtualItems) select _index) select 2) pushBackUnique (_array select 2);
};
};

View File

@ -30,6 +30,7 @@ if (_global && {isMultiplayer}) then {
[QGVAR(removeBox), [_object, false]] call CBA_fnc_globalEvent;
};
} else {
_object setVariable [QGVAR(virtualItems), nil, false];
_object setVariable [QGVAR(virtualItems), nil, false];
[_object, 0, ["ACE_MainActions", QGVAR(interaction)]] call EFUNC(interact_menu,removeActionFromObject);
[QGVAR(boxRemoved), _object] call CBA_fnc_localEvent;
};

View File

@ -5,7 +5,7 @@
* Verify the provided loadout.
*
* Arguments:
* 0: Loadout <ARRAY> (getUnitLoadout format)
* 0: Loadout <ARRAY> (CBA Extended Loadout or getUnitLoadout format)
*
* Return Value:
* Verified loadout and missing / unavailable items list and count <ARRAY>
@ -15,6 +15,14 @@
params ["_loadout"];
private _extendedInfo = createHashMap;
// Check if the provided loadout is a CBA extended loadout
if (count _loadout == 2) then {
_extendedInfo = _loadout select 1;
_loadout = _loadout select 0;
};
private _weaponCfg = configFile >> "CfgWeapons";
private _magCfg = configFile >> "CfgMagazines";
private _vehcCfg = configFile >> "CfgVehicles";
@ -236,4 +244,4 @@ for "_dataIndex" from 0 to 9 do {
};
};
[_loadout, _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList]
[[_loadout, _extendedInfo], _nullItemsAmount, _unavailableItemsAmount, _nullItemsList, _unavailableItemsList]

View File

@ -27,7 +27,7 @@ cba_diagnostic_projectileMaxLines = 10;
{
_x enableSimulation false;
_x hideObject true;
} forEach (allMissionObjects "" - [_player]);
} forEach (allMissionObjects "" - [_player] - attachedObjects _player);
if ((_player getVariable ["cba_projectile_firedEhId", -1]) != -1) then {
_player call CBA_fnc_removeUnitTrackProjectiles;
@ -54,7 +54,7 @@ cba_diagnostic_projectileMaxLines = 10;
] call BIS_fnc_GUImessage;
if (_return) then {
profileNamespace setVariable [QGVAR(missionLastLoadout), getUnitLoadout player];
profileNamespace setVariable [QGVAR(missionLastLoadout), [player] call CBA_fnc_getLoadout];
_display closeDisplay 2;
findDisplay 46 closeDisplay 0;
};

View File

@ -5,7 +5,7 @@ params ["_unit"];
private _loadout = profileNamespace getVariable QGVAR(missionLastLoadout);
if (!isNil "_loadout") then {
_unit setUnitLoadout _loadout;
[_unit, _loadout] call CBA_fnc_setLoadout;
};
_unit allowDamage false;

View File

@ -764,7 +764,7 @@
<Korean>모드 아이콘 허가</Korean>
<Chinese>啟用模組圖示</Chinese>
<Chinesesimp>启用模组图示</Chinesesimp>
<Russian>Включить иконки модов</Russian>
<Russian>Вкл. иконки модов</Russian>
<Portuguese>Ativar ícones de mods</Portuguese>
<Czech>Zapnout ikony modů</Czech>
<Turkish>Mod simgelerini etkinleştir</Turkish>
@ -881,6 +881,22 @@
<Czech>ACE Arzenál</Czech>
<Turkish>ACE Arsenal</Turkish>
</Key>
<Key ID="STR_ACE_Arsenal_loadoutSubcategory">
<English>Loadouts</English>
<Spanish>Equipamiento</Spanish>
<French>Sets d'équipement</French>
<German>Ausrüstungen</German>
<Polish>Zestawy wyposażenia</Polish>
<Japanese>装備</Japanese>
<Italian>Equipaggiamenti</Italian>
<Korean>로드아웃</Korean>
<Chinese>裝備</Chinese>
<Chinesesimp>负载</Chinesesimp>
<Russian>Комплекты</Russian>
<Portuguese>Loadouts</Portuguese>
<Czech>Sady vybavení</Czech>
<Turkish>Kıyafetler</Turkish>
</Key>
<Key ID="STR_ACE_Arsenal_defaultLoadoutsTooltip">
<English>Allow the use of the default loadouts tab</English>
<Spanish>Permitir el uso de la pestaña de equipamientos por defecto</Spanish>
@ -967,7 +983,7 @@
<French>Importer les sets BI VA dans l'arsenal ACE</French>
<German>Importiert die BI-VA-Ausrüstungen in das ACE-Arsenal</German>
<Japanese>標準の VA 装備から ACE 武器庫へ取り込み</Japanese>
<Korean>바닐라 로드아웃을 ace 아스날로 가져오기</Korean>
<Korean>바닐라 로드아웃을 ACE 아스날로 가져오기</Korean>
<Chinese>匯入BI原廠虛擬軍火庫的裝備到ACE虛擬軍火庫中</Chinese>
<Chinesesimp>导入 BI 原版虚拟军火库的负载到 ACE 虚拟军火库中</Chinesesimp>
<Italian>Importa l'arsenale virtuale BI nell'arsenale ACE</Italian>
@ -1250,7 +1266,7 @@
<Chinese>啟用臉譜/聲音/徽章選項</Chinese>
<Italian>Abilita volti, voci e insegne</Italian>
<Polish>Aktywuj zakładki twarz / głos / insygnia</Polish>
<Russian>Включить вкладки Лиц / Голосов / Знаков различия</Russian>
<Russian>Вкл. вкладки: лица, голоса, эмблемы</Russian>
<Portuguese>Ativar as abas de rostos / vozes / insígnias</Portuguese>
<Czech>Povolit záložky s tvářemi, hlasy a insigniemi</Czech>
<Turkish>Yüzler/sesler/peçler bölmelerini etkinleştir</Turkish>
@ -1449,5 +1465,20 @@
<Chinesesimp>碰炸引信</Chinesesimp>
<Korean>충격 신관</Korean>
</Key>
<Key ID="STR_ACE_Arsenal_loadoutsSaveFaceSetting">
<English>Save Face</English>
<Korean>얼굴 저장</Korean>
<Russian>Сохранить лицо</Russian>
</Key>
<Key ID="STR_ACE_Arsenal_loadoutsSaveVoiceSetting">
<English>Save Voice</English>
<Korean>목소리 저장</Korean>
<Russian>Сохранить голос</Russian>
</Key>
<Key ID="STR_ACE_Arsenal_loadoutsSaveInsigniaSetting">
<English>Save Insignia</English>
<Korean>계급장 저장</Korean>
<Russian>Сохранить эмблему</Russian>
</Key>
</Package>
</Project>

View File

@ -80,7 +80,7 @@
<Portuguese>Computador de Artilharia Desabilitado</Portuguese>
<Spanish>Computadora de artillería deshabilitada</Spanish>
<Turkish>Topçu Bilgisayarı Devre Dışı</Turkish>
<Russian>Артиллерийский Компьютер Отключён</Russian>
<Russian>Орудийный компьютер отключён</Russian>
<Korean>탄도계산컴퓨터 비활성화</Korean>
</Key>
<Key ID="STR_ACE_ArtilleryTables_disableArtilleryComputer_description">
@ -96,7 +96,7 @@
<Portuguese>Desabilitar o computador de artilharia padrão</Portuguese>
<Spanish>Deshabilita la computadora de artillería por defecto de Arma 3</Spanish>
<Turkish>Topçu bilgisayarını devre dışı bırak</Turkish>
<Russian>Отключить ванильный артиллерийский компьютер</Russian>
<Russian>Отключить ванильный орудийный компьютер</Russian>
<Korean>바닐라 탄도계산컴퓨터를 비활성화 합니다.</Korean>
</Key>
</Package>

View File

@ -2825,6 +2825,7 @@
<Polish>Magazynek 6.5x47 mm 30rd Piaskowy (HPBT Scenar)</Polish>
<Chinesesimp>6.5x47 mm 30发 沙色弹匣HPBT Scenar</Chinesesimp>
<Korean>6.5x47 mm 30발 사막 탄창 (HPBT Scenar)</Korean>
<Russian>Магазин из 30-ти 6.5x47 мм Песочный (HPBT Scenar)</Russian>
</Key>
<Key ID="STR_ACE_Ballistics_30Rnd_65x47_Scenar_msbs_mag_Name">
<English>6.5x47 mm 30Rnd Promet Mag (HPBT Scenar)</English>
@ -2834,6 +2835,7 @@
<Polish>Magazynek 6.5x47 mm 30rd Promet (HPBT Scenar)</Polish>
<Chinesesimp>6.5x47 mm 30发 Promet 弹匣HPBT Scenar</Chinesesimp>
<Korean>6.5x47 mm 30발 프로멧 탄창 (HPBT Scenar)</Korean>
<Russian>Магазин из 30-ти 6.5x47 мм Promet (HPBT Scenar)</Russian>
</Key>
<Key ID="STR_ACE_Ballistics_30Rnd_65x47_Scenar_black_mag_Name">
<English>6.5x47 mm 30Rnd Black Mag (HPBT Scenar)</English>
@ -2843,6 +2845,7 @@
<Polish>Magazynek 6.5x47 mm 30rd Czarny (HPBT Scenar)</Polish>
<Chinesesimp>6.5x47 mm 30发 黑色弹匣HPBT Scenar</Chinesesimp>
<Korean>6.5x47 mm 30발 검정 탄창 (HPBT Scenar)</Korean>
<Russian>Магазин из 30-ти 6.5x47 мм Чёрный (HPBT Scenar)</Russian>
</Key>
<Key ID="STR_ACE_Ballistics_30Rnd_65x47_Scenar_khaki_mag_Name">
<English>6.5x47 mm 30Rnd Khaki Mag (HPBT Scenar)</English>
@ -2852,6 +2855,7 @@
<Polish>Magazynek 6.5x47 mm 30rd Khaki (HPBT Scenar)</Polish>
<Chinesesimp>6.5x47 mm 30发 卡其色弹匣HPBT Scenar</Chinesesimp>
<Korean>6.5x47 mm 30발 카키 탄창 (HPBT Scenar)</Korean>
<Russian>Магазин из 30-ти 6.5x47 мм Хаки (HPBT Scenar)</Russian>
</Key>
<Key ID="STR_ACE_Ballistics_30Rnd_65x47_Scenar_mag_NameShort">
<English>6.5 mm Lapua</English>
@ -2912,6 +2916,7 @@
<Polish>Magazynek 6.5 mm Creedmor 30Rnd Piaskowy</Polish>
<Chinesesimp>6.5 mm 30发 沙色弹匣Creedmor</Chinesesimp>
<Korean>6.5 mm 크리드무어 30발 사막 탄창</Korean>
<Russian>Магазин из 30-ти 6.5 мм Creedmor Песочный</Russian>
</Key>
<Key ID="STR_ACE_Ballistics_30Rnd_65_Creedmor_msbs_mag_Name">
<English>6.5 mm Creedmor 30Rnd Promet Mag</English>
@ -2921,6 +2926,7 @@
<Polish>Magazynek 6.5 mm Creedmor 30Rnd Promet</Polish>
<Chinesesimp>6.5 mm 30发 Promet 弹匣Creedmor</Chinesesimp>
<Korean>6.5 mm 크리드무어 30발 프로멧 탄창</Korean>
<Russian>Магазин из 30-ти 6.5 мм Creedmor Promet</Russian>
</Key>
<Key ID="STR_ACE_Ballistics_30Rnd_65_Creedmor_black_mag_Name">
<English>6.5 mm Creedmor 30Rnd Black Mag</English>
@ -2930,6 +2936,7 @@
<Polish>Magazynek 6.5 mm Creedmor 30Rnd Czarny</Polish>
<Chinesesimp>6.5 mm 30发 黑色弹匣Creedmor</Chinesesimp>
<Korean>6.5 mm 크리드무어 30발 검정 탄창</Korean>
<Russian>Магазин из 30-ти 6.5 мм Creedmor Чёрный</Russian>
</Key>
<Key ID="STR_ACE_Ballistics_30Rnd_65_Creedmor_khaki_mag_Name">
<English>6.5 mm Creedmor 30Rnd Khaki Mag</English>
@ -2939,6 +2946,7 @@
<Polish>Magazynek 6.5 mm Creedmor 30Rnd Khaki</Polish>
<Chinesesimp>6.5 mm 30发 卡其色弹匣Creedmor</Chinesesimp>
<Korean>6.5 mm 크리드무어 30발 카키 탄창</Korean>
<Russian>Магазин из 30-ти 6.5 мм Creedmor Хаки</Russian>
</Key>
<Key ID="STR_ACE_Ballistics_30Rnd_65_Creedmor_mag_NameShort">
<English>6.5 mm CM</English>

View File

@ -20,18 +20,21 @@ TRACE_1("params", _vehicle);
scopeName "main";
private _seats = fullCrew [_vehicle, "", true];
reverse _seats;
{
_x params ["_unit", "_role", "_cargoIndex", "_turretPath", "_isPersonTurret"];
if (isNull _unit && {_role == "cargo"} && {_cargoIndex > -1} && {!_isPersonTurret}) then {
[_cargoIndex, false] breakOut "main";
};
} forEach (fullCrew [_vehicle, "", true]);
} forEach _seats;
{
_x params ["_unit", "_role", "_cargoIndex", "_turretPath", "_isPersonTurret"];
if (isNull _unit && {_cargoIndex > -1}) then {
[_cargoIndex, true] breakOut "main";
};
} forEach (fullCrew [_vehicle, "", true]);
} forEach _seats;
[-1, false]

View File

@ -265,11 +265,11 @@ class CfgVehicles {
};
class VTOL_Base_F;
class VTOL_01_base_F: VTOL_Base_F {
GVAR(space) = 4;
GVAR(space) = 20;
GVAR(hasCargo) = 1;
};
class VTOL_02_base_F: VTOL_Base_F {
GVAR(space) = 4;
GVAR(space) = 10;
GVAR(hasCargo) = 1;
};

View File

@ -19,6 +19,7 @@ params ["_unloader", "_object"];
TRACE_2("unloadCarryItem-start",_unloader,_object);
if !(["ace_dragging"] call EFUNC(common,isModLoaded)) exitWith {};
if (!GVAR(carryAfterUnload) || {getNumber (configOf _object >> QGVAR(blockUnloadCarry)) > 0}) exitWith {};
// When unloading attached objects, this code will run before server has finished moving object to the safe position
[{
@ -35,5 +36,5 @@ if !(["ace_dragging"] call EFUNC(common,isModLoaded)) exitWith {};
};
}, _this, 1.0, { // delay is based on how long it will take server event to trigger and take effect
// not a hard error if this fails, could have just unloaded to other side of vehicle because of findSafePos
TRACE_1("unloadCarryItem-failed to unload nearby player",_this);
TRACE_1("unloadCarryItem-failed to unload nearby player",_this);
}] call CBA_fnc_waitUntilAndExecute;

View File

@ -42,3 +42,12 @@
false,
{[QGVAR(enableRename), _this, true] call EFUNC(common,cbaSettings_settingChanged)}
] call CBA_fnc_addSetting;
[
QGVAR(carryAfterUnload), "CHECKBOX",
[LSTRING(carryAfterUnload), LSTRING(carryAfterUnload_description)],
[LELSTRING(OptionsMenu,CategoryLogistics), LLSTRING(openMenu)],
true,
false,
{[QGVAR(carryAfterUnload), _this] call EFUNC(common,cbaSettings_settingChanged)}
] call CBA_fnc_addSetting;

View File

@ -37,7 +37,7 @@
<English>Renamed to:&lt;br/&gt;%1</English>
<Japanese>名前を次に変更:&lt;br/&gt;%1</Japanese>
<French>Renommé en :&lt;br/&gt;%1</French>
<Russian>Переименовано в:</Russian>
<Russian>Переименовано в:&lt;br/&gt;%1</Russian>
<German>Neu Bewaffnet: &lt;br/&gt;%1</German>
<Polish>Nazwa zmieniona na:&lt;br/&gt;%1</Polish>
<Chinesesimp>重命名为:&lt;br/&gt;%1</Chinesesimp>
@ -67,7 +67,7 @@
<English>Enable Rename Action</English>
<Japanese>名前変更を有効化</Japanese>
<French>Possibilité de renommage</French>
<Russian>Включить возможность переименования</Russian>
<Russian>Вкл. возможность переименования</Russian>
<German>Aktiviere Umbenennungs-Aktion</German>
<Polish>Włącz możliwość zmiany nazwy</Polish>
<Chinesesimp>启用重命名动作</Chinesesimp>
@ -136,7 +136,7 @@
<German>Aktiviere Fracht</German>
<Polish>Aktywuj cargo</Polish>
<Portuguese>Ativar carga</Portuguese>
<Russian>Включить модуль перевозки грузов</Russian>
<Russian>Вкл. модуль перевозки грузов</Russian>
<Czech>Povolit náklad</Czech>
<Spanish>Habilitar carga</Spanish>
<Italian>Abilita Cargo</Italian>
@ -297,6 +297,7 @@
<Polish>Własna nazwa</Polish>
<Chinesesimp>自定义名称</Chinesesimp>
<Korean>임의 명칭</Korean>
<Russian>Собственное название</Russian>
</Key>
<Key ID="STR_ACE_Cargo_customName_edenDesc">
<English>Set a custom cargo name used in the cargo interface.</English>
@ -410,7 +411,7 @@
<Chinesesimp>空投时间系数</Chinesesimp>
<Polish>Współczynnik czasu zrzutu</Polish>
<Korean>공중 투하 시간 계수</Korean>
<Russian>Коэффициент времени десантирования</Russian>
<Russian>Коэф. времени десантирования</Russian>
<Portuguese>Fator de Tempo para soltar a carga</Portuguese>
<Czech>Koeficient času nákladního výsadku</Czech>
<Spanish>Coeficiente de tiempo para lanzamiento</Spanish>
@ -436,7 +437,7 @@
<Japanese>積載時間の係数</Japanese>
<Polish>Współczynnik czasu załadowania</Polish>
<Italian>Coefficente Tempo Caricamento</Italian>
<Russian>Коэффициент времени погрузки</Russian>
<Russian>Коэф. времени погрузки</Russian>
<Portuguese>Fator de tempo para carregar</Portuguese>
<French>Coefficient du temps de chargement</French>
<Chinese>裝載時間係數</Chinese>
@ -482,5 +483,15 @@
<Chinesesimp>成功卸货后,重新打开货物菜单。</Chinesesimp>
<Korean>화물을 성공적으로 내리고 난 다음 화물 메뉴를 열지 결정합니다.</Korean>
</Key>
<Key ID="STR_ACE_Cargo_carryAfterUnload">
<English>Carry After Unload</English>
<Korean>화물 내린 후 운반</Korean>
<Russian>Нести после выгрузки</Russian>
</Key>
<Key ID="STR_ACE_Cargo_carryAfterUnload_description">
<English>Controls whether cargo items are carried or dragged after unloading.</English>
<Korean>화물 아이템을 내린 후 들거나 끌지 여부를 결정합니다.</Korean>
<Russian>Нужно ли переносить или тащить предметы после их выгрузки.</Russian>
</Key>
</Package>
</Project>

View File

@ -3,18 +3,43 @@
<Package name="Casings">
<Key ID="STR_ACE_Casings_Settings_DisplayName">
<English>ACE Casings</English>
<Japanese>ACE 薬莢</Japanese>
<Polish>ACE Łuski</Polish>
<Korean>ACE 탄피</Korean>
<Chinesesimp>ACE 弹壳</Chinesesimp>
<Russian>ACE Гильзы</Russian>
</Key>
<Key ID="STR_ACE_Casings_displayName">
<English>Casings Enabled</English>
<Japanese>薬莢の有効化</Japanese>
<Polish>Łuski włączone</Polish>
<Korean>탄피 활성화</Korean>
<Chinesesimp>开启弹壳生成</Chinesesimp>
<Russian>Гильзы включены</Russian>
</Key>
<Key ID="STR_ACE_Casings_description">
<English>Enable persistent casings (POTENTIAL performance impact on old/weak systems)</English>
<Japanese>永続的な薬莢を有効にする (古い/弱いシステムに対する潜在的なパフォーマンスの影響)</Japanese>
<Polish>Włącz pozostawanie łusek (MOŻLIWY wpływ na wydajność na starych/słabych komputerach)</Polish>
<Korean>영구적으로 남는 탄피를 활성화합니다(오래되고 취약한 시스템에 잠재적인 성능에 영향을 미칩니다.)</Korean>
<Chinesesimp>开启生成持续存在的弹壳(可能对较老和性能不行的系统有影响)</Chinesesimp>
<Russian>Включить постоянные гильзы (ПОТЕНЦИАЛЬНО может повлиять на производительность на старых/слабых системах)</Russian>
</Key>
<Key ID="STR_ACE_Casings_maxCasings_displayName">
<English>Maximum casings</English>
<Japanese>薬莢の最大量</Japanese>
<Polish>Maksymalna liczba łusek</Polish>
<Korean>탄피 최대 갯수</Korean>
<Chinesesimp>最大弹壳量</Chinesesimp>
<Russian>Макс. кол-во гильз</Russian>
</Key>
<Key ID="STR_ACE_Casings_maxCasings_description">
<English>Maximum amount of casings to display</English>
<Japanese>表示される薬莢の最大の数</Japanese>
<Polish>Maksymalna liczba wyświetlanych łusek</Polish>
<Korean>표시할 최대 탄피 갯수</Korean>
<Chinesesimp>显示的最大弹壳数量</Chinesesimp>
<Russian>Максимальное количество гильз для отображения</Russian>
</Key>
</Package>
</Project>

View File

@ -75,7 +75,7 @@
<Italian>Luce chimica (Arancione)</Italian>
<Chinese>螢光棒 (橘色)</Chinese>
<Chinesesimp>荧光棒(橘色)</Chinesesimp>
<Russian>Химсвет (Оранжевый)</Russian>
<Russian>Химсвет (оранжевый)</Russian>
<Portuguese>Bastão de Luz (Laranja)</Portuguese>
<Czech>Chemické světlo (Oranžové)</Czech>
<Spanish>Luz química (naranja)</Spanish>
@ -107,7 +107,7 @@
<Italian>Tipo: Luce - Arancione&lt;br/&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 橘色&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型:光—橘色&lt;br /&gt;发数1&lt;br /&gt;使用于:手</Chinesesimp>
<Russian>Тип: Свет - Оранжевый&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Russian>Тип: Свет - оранжевый&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Portuguese>Tipo: Luz - Laranja&lt;br/&gt;Usos: 1&lt;br/&gt;Usado em: Mão</Portuguese>
<Czech>Typ: Světlo - Oranžové&lt;br/&gt;Počet použití: 1&lt;br/&gt;Použít v ruce</Czech>
<Spanish>Tipo: Luz - Naranja&lt;br /&gt;Cantidad: 1&lt;br /&gt;Usado en: Mano</Spanish>
@ -123,7 +123,7 @@
<Italian>Luce chimica (Bianca)</Italian>
<Chinese>螢光棒 (白色)</Chinese>
<Chinesesimp>荧光棒(白色)</Chinesesimp>
<Russian>Химсвет (Белый)</Russian>
<Russian>Химсвет (белый)</Russian>
<Portuguese>Bastão de Luz (Branco)</Portuguese>
<Czech>Chemické světlo (Bílé)</Czech>
<Spanish>Luz química (Blanca)</Spanish>
@ -155,7 +155,7 @@
<Italian>Tipo: Luce - Bianca&lt;br/&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 白色&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型:光—白色&lt;br /&gt;发数1&lt;br /&gt;使用于:手</Chinesesimp>
<Russian>Тип: Свет - Белый&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Russian>Тип: Свет - белый&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Portuguese>Tipo: Luz - Branco&lt;br/&gt;Usos: 1&lt;br/&gt;Usado em: Mão</Portuguese>
<Czech>Typ: Světlo - Bílé&lt;br/&gt;Počet použití: 1&lt;br/&gt;Použít v ruce</Czech>
<Spanish>Tipo: Luz - Blanca&lt;br /&gt;Cantidad: 1&lt;br /&gt;Usado en: Mano</Spanish>
@ -171,7 +171,7 @@
<Italian>Luce chimica (Hi Rossa)</Italian>
<Chinese>螢光棒 (超亮紅色)</Chinese>
<Chinesesimp>荧光棒(高亮红色)</Chinesesimp>
<Russian>Химсвет (Ярко-Красный)</Russian>
<Russian>Химсвет (ярко-красный)</Russian>
<Portuguese>Bastão de Luz (Vermelho Forte)</Portuguese>
<Czech>Chemické světlo (Červené jasné)</Czech>
<Spanish>Luz química (Roja Hi)</Spanish>
@ -187,7 +187,7 @@
<Italian>Luce Hi Rossa</Italian>
<Chinese>超亮紅色光</Chinese>
<Chinesesimp>高亮红色光</Chinesesimp>
<Russian>Яркий Красный свет</Russian>
<Russian>Яркий красный свет</Russian>
<Portuguese>Luz forte vermelha</Portuguese>
<Czech>Červené jasné světlo</Czech>
<Spanish>Luz roja Hi</Spanish>
@ -203,7 +203,7 @@
<Italian>Tipo: Luce - Rossa Hi (30 minuti)&lt;br /&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 超亮紅色 (30分鐘)&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型光—高亮红色30分钟&lt;br /&gt;发数1&lt;br /&gt;使用于:手</Chinesesimp>
<Russian>Тип: Свет - Ярко-Красный (30 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Russian>Тип: Свет - ярко-красный (30 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Portuguese>Tipo: Luz - Vermelho Forte (30 minutos)&lt;br/&gt;Usos: 1&lt;br/&gt;Usado em: Mão</Portuguese>
<Czech>Typ: Světlo - Červené jasné&lt;br/&gt;Počet použití: 1&lt;br/&gt;Použít v ruce</Czech>
<Spanish>Tipo: Luz - Roja Hi (30 minutos)&lt;br /&gt;Cantidad: 1&lt;br /&gt;Usado en: Mano</Spanish>
@ -219,7 +219,7 @@
<Italian>Luce chimica (Hi Gialla)</Italian>
<Chinese>螢光棒 (超亮黃色)</Chinese>
<Chinesesimp>荧光棒(高亮黄色)</Chinesesimp>
<Russian>Химсвет (Ярко-Желтый)</Russian>
<Russian>Химсвет (ярко-жёлтый)</Russian>
<Portuguese>Bastão de Luz (Amarelo Forte)</Portuguese>
<Czech>Chemické světlo (Žluté jasné)</Czech>
<Spanish>Luz química (Amarilla Hi)</Spanish>
@ -235,7 +235,7 @@
<Italian>Luce Hi Gialla</Italian>
<Chinese>超亮黃色光</Chinese>
<Chinesesimp>高亮黄色光</Chinesesimp>
<Russian>Яркий Желтый свет</Russian>
<Russian>Яркий жёлтый свет</Russian>
<Portuguese>Luz forte amarela</Portuguese>
<Czech>Žluté jasné světlo</Czech>
<Spanish>Luz amarilla Hi</Spanish>
@ -251,7 +251,7 @@
<Italian>Tipo: Luce - Gialla Hi (30 minuti)&lt;br /&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 超亮黃色 (30分鐘)&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型光—高亮黄色30分钟&lt;br /&gt;发数1&lt;br /&gt;使用于:手</Chinesesimp>
<Russian>Тип: Свет - Ярко-Желтый (30 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Russian>Тип: Свет - ярко-жёлтый (30 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Portuguese>Tipo: Luz - Amarelo Forte (30 minutos)&lt;br/&gt;Usos: 1&lt;br/&gt;Usado em: Mão</Portuguese>
<Czech>Typ: Světlo - Žluté jasné&lt;br/&gt;Počet použití: 1&lt;br/&gt;Použít v ruce</Czech>
<Spanish>Tipo: Luz - Amarilla Hi (30 minutos)&lt;br /&gt;Cantidad: 1&lt;br /&gt;Usado en: Mano</Spanish>
@ -267,7 +267,7 @@
<Italian>Luce chimica (Hi Bianca)</Italian>
<Chinese>螢光棒 (超亮白色)</Chinese>
<Chinesesimp>荧光棒(高亮白色)</Chinesesimp>
<Russian>Химсвет (Ярко-Белый)</Russian>
<Russian>Химсвет (ярко-белый)</Russian>
<Portuguese>Bastão de Luz (Branco Forte)</Portuguese>
<Czech>Chemické světlo (Bílé jasné)</Czech>
<Spanish>Luz química (Blanca Hi)</Spanish>
@ -283,7 +283,7 @@
<Italian>Luce Hi Bianca</Italian>
<Chinese>超亮白色光</Chinese>
<Chinesesimp>高亮白色光</Chinesesimp>
<Russian>Яркий Белый свет</Russian>
<Russian>Яркий белый свет</Russian>
<Portuguese>Luz forte branca</Portuguese>
<Czech>Bílé jasné světlo</Czech>
<Spanish>Luz blanca Hi</Spanish>
@ -299,7 +299,7 @@
<Italian>Tipo: Luce - Bianca Hi (30 minuti)&lt;br /&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 超亮白色 (30分鐘)&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型光—高亮白色30分钟&lt;br /&gt;发数1&lt;br /&gt;使用于:手</Chinesesimp>
<Russian>Тип: Свет - Ярко-Белый (30 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Russian>Тип: Свет - ярко-белый (30 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Portuguese>Tipo: Luz - Branco Forte (30 minutos)&lt;br/&gt;Usos: 1&lt;br/&gt;Usado em: Mão</Portuguese>
<Czech>Typ: Světlo - Bílé jasné&lt;br/&gt;Počet použití: 1&lt;br/&gt;Použít v ruce</Czech>
<Spanish>Tipo: Luz - Blanca Hi (30 minutos)&lt;br /&gt;Cantidad: 1&lt;br /&gt;Usado en: Mano</Spanish>
@ -312,7 +312,7 @@
<Polish>Świetlik (jaskrawy niebieski)</Polish>
<German>Knicklicht (Blau, Hell)</German>
<Italian>Luce chimica (Hi Blu)</Italian>
<Russian>Химсвет (Ярко-Синий)</Russian>
<Russian>Химсвет (ярко-синий)</Russian>
<Portuguese>Bastão de Luz (Azul Forte)</Portuguese>
<Chinese>螢光棒(超亮藍色)</Chinese>
<Chinesesimp>荧光棒(高亮蓝色)</Chinesesimp>
@ -328,7 +328,7 @@
<Japanese>高輝度の青色</Japanese>
<Polish>Jaskrawe niebieskie światło</Polish>
<Italian>Luce Hi Blu</Italian>
<Russian>Яркий Синий свет</Russian>
<Russian>Яркий синий свет</Russian>
<Portuguese>Luz forte azul</Portuguese>
<Chinese>超亮藍色光</Chinese>
<Chinesesimp>高亮蓝色光</Chinesesimp>
@ -344,7 +344,7 @@
<Japanese>種類: 照明 - 高輝度 青 (30分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - jaskrawe niebieskie (30 minut)&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
<Italian>Tipo: Luce - Hi blu (30 minuti)&lt;br/&gt;Rimanenti:1 &lt;br/&gt;Usata in: Mano</Italian>
<Russian>Тип: Свет - Ярко-Синий (30 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Russian>Тип: Свет - ярко-синий (30 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Portuguese>Tipo: Luz - Azul Forte (30 minutos)&lt;br/&gt;Usos: 1&lt;br/&gt;Usado em: Mão</Portuguese>
<Chinese>類型: 光 - 超亮藍色 (30分鐘)&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型光—高亮蓝色30分钟&lt;br /&gt;发数1&lt;br /&gt;使用于:手</Chinesesimp>
@ -360,7 +360,7 @@
<Japanese>ケミライト (高輝度 緑)</Japanese>
<Polish>Świetlik (jaskrawy zielony)</Polish>
<Italian>Luce chimica (Hi Verde)</Italian>
<Russian>Химсвет (Ярко-Зеленый)</Russian>
<Russian>Химсвет (ярко-зелёный)</Russian>
<Portuguese>Bastão de Luz (Verde Forte)</Portuguese>
<Chinese>螢光棒(超亮綠色)</Chinese>
<Chinesesimp>荧光棒(高亮绿色)</Chinesesimp>
@ -376,7 +376,7 @@
<Japanese>高輝度の青色</Japanese>
<Polish>Jaskrawe zielone światło</Polish>
<Italian>Luce Hi Verde</Italian>
<Russian>Яркий Зеленый свет</Russian>
<Russian>Яркий зелёный свет</Russian>
<Portuguese>Luz forte verde</Portuguese>
<Chinese>超亮綠色光</Chinese>
<Chinesesimp>高亮绿色光</Chinesesimp>
@ -392,7 +392,7 @@
<Japanese>種類: 照明 - 高輝度 緑 (30分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - jaskrawe zielone (30 minut)&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
<Italian>Tipo: Luce - Hi verde (30 minuti)&lt;br/&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Russian>Тип: Свет - Ярко-Зеленый (30 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Russian>Тип: Свет - ярко-зелёный (30 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Portuguese>Tipo: Luz - Verde Forte (30 minutos)&lt;br/&gt;Usos: 1&lt;br/&gt;Usado em: Mão</Portuguese>
<Chinese>類型: 光 - 超亮綠色 (30分鐘)&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型光—高亮绿色30分钟&lt;br /&gt;发数1&lt;br /&gt;使用于:手</Chinesesimp>
@ -408,7 +408,7 @@
<Japanese>ケミライト (高輝度 オレンジ)</Japanese>
<Polish>Świetlik (ultra-jaskrawy pomarańczowy)</Polish>
<Italian>Luce chimica (Ultra-Hi Arancione)</Italian>
<Russian>Химсвет (Ультраяркий Оранжевый)</Russian>
<Russian>Химсвет (ультраяркий оранжевый)</Russian>
<Portuguese>Bastão de Luz (Laranja Ultra Forte)</Portuguese>
<Chinese>螢光棒(極亮橘色)</Chinese>
<Chinesesimp>荧光棒(高亮橘色)</Chinesesimp>
@ -424,7 +424,7 @@
<Japanese>ウルトラ高輝度のオレンジ色</Japanese>
<Polish>Ultra-jaskrawe pomarańczowe światło</Polish>
<Italian>Luce Ultra-Hi Arancione</Italian>
<Russian>Ультраяркий Оранжевый свет</Russian>
<Russian>Ультраяркий оранжевый свет</Russian>
<Portuguese>Luz ultra forte laranja</Portuguese>
<Chinese>極亮橘色光</Chinese>
<Chinesesimp>高亮橘色光</Chinesesimp>
@ -440,7 +440,7 @@
<Japanese>種類: 照明 - ウルトラ高輝度 オレンジ (5分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯</Japanese>
<Polish>Typ: Światło - ultra-jaskrawe pomarańczowe (5 minut)&lt;br/&gt;Pociski: 1&lt;br/&gt;Używany w: ręce</Polish>
<Italian>Tipo: Luce - Ultra-Hi (5 minuti)&lt;br/&gt;Rimanenti: 1&lt;br/&gt;Usata in: Mano</Italian>
<Russian>Тип: Свет - Ультраяркий Оранжевый (5 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Russian>Тип: Свет - ультраяркий оранжевый (5 минут)&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Portuguese>Tipo: Luz - Laranja Ultra Forte (5 minutos)&lt;br/&gt;Usos: 1&lt;br/&gt;Usado em: Mão</Portuguese>
<Chinese>類型: 光 - 極亮橘色 (5分鐘)&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型光—高亮橘色5分钟&lt;br /&gt;发数1&lt;br /&gt;使用于:手</Chinesesimp>
@ -459,7 +459,7 @@
<Italian>Luce chimica (IR)</Italian>
<Chinese>螢光棒 (紅外線)</Chinese>
<Chinesesimp>荧光棒(红外线)</Chinesesimp>
<Russian>Химсвет (Инфракрасный)</Russian>
<Russian>Химсвет (инфракрасный)</Russian>
<Portuguese>Bastão de Luz (IV)</Portuguese>
<Czech>Chemické světlo (Infračervené)</Czech>
<Spanish>Luz química (IR)</Spanish>
@ -491,7 +491,7 @@
<Italian>Tipo: Luce - Infrarossi&lt;br /&gt;Usata in: Mano</Italian>
<Chinese>類型: 光 - 紅外線&lt;br /&gt;發數: 1&lt;br /&gt;使用於: 手</Chinese>
<Chinesesimp>类型:光—红外线&lt;br /&gt;发数1&lt;br /&gt;使用于:手</Chinesesimp>
<Russian>Тип: Свет - Инфракрасный&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Russian>Тип: Свет - инфракрасный&lt;br /&gt;1 штука&lt;br /&gt;В руках</Russian>
<Portuguese>Tipo: Luz - Infravermelho&lt;br/&gt;Usos: 1&lt;br/&gt;Usado em: Mão</Portuguese>
<Czech>Typ: Světlo - Infračervené&lt;br/&gt;Počet použití: 1&lt;br/&gt;Použít v ruce</Czech>
<Spanish>Tipo: Luz infra-roja&lt;br /&gt;Cantidad: 1&lt;br /&gt;Usado en: Mano</Spanish>
@ -507,7 +507,7 @@
<Italian>Scudo Luce chimica (Vuoto)</Italian>
<Chinese>螢光棒保護殼 (空)</Chinese>
<Chinesesimp>荧光棒保护壳(空)</Chinesesimp>
<Russian>Контейнер для Химсвета (Пуст)</Russian>
<Russian>Контейнер для химсвета (пустой)</Russian>
<Portuguese>Estojo de Luz (Vazio)</Portuguese>
<Czech>Clona na chemické světlo</Czech>
<Spanish>Protector de luz química (Vacía)</Spanish>
@ -523,7 +523,7 @@
<Italian>Scudo per luci chimiche. Combina con una luce chimica per una luce da lettura.</Italian>
<Chinese>螢光棒的保護殼. 與螢光棒結合後可充當閱讀燈</Chinese>
<Chinesesimp>荧光棒的保护壳。与萤光棒结合后可充当阅读灯。</Chinesesimp>
<Russian>Защитный контейнер для Химсвета. Объедините с Химсветом, чтобы подготовить Свет для чтения</Russian>
<Russian>Защитный контейнер для химсвета. Объедините с химсветом, чтобы подготовить ночник.</Russian>
<Portuguese>Estojo para os bastões de luz. Combine com o bastão de luz para preparar luz de leitura.</Portuguese>
<Czech>Clona na chemické světlo. Při vložení chemického světla vznikne praktické světlo na čtení.</Czech>
<Spanish>Protector para luz química. Combina con luz química para preparar una luz de lectura</Spanish>
@ -539,7 +539,7 @@
<Italian>Scudo Luce Chimica (Verde)</Italian>
<Chinese>螢光棒保護殼 (綠色)</Chinese>
<Chinesesimp>荧光棒保护壳(绿色)</Chinesesimp>
<Russian>Контейнер для Химсвета (Зел)</Russian>
<Russian>Контейнер для химсвета (зелёный)</Russian>
<Portuguese>Estojo de Luz (Verde)</Portuguese>
<Czech>Clona s vloženým chemickým světlem (Zelené)</Czech>
<Spanish>Protector de luz química (Verde)</Spanish>
@ -555,7 +555,7 @@
<Italian>Luce da lettura Verde.</Italian>
<Chinese>綠色閱讀燈</Chinese>
<Chinesesimp>绿色阅读灯。</Chinesesimp>
<Russian>Ночник из Химсвета (Зеленый)</Russian>
<Russian>Ночник из зелёного химсвета.</Russian>
<Portuguese>Luz de leitura verde.</Portuguese>
<Czech>Zelené světlo na čtení.</Czech>
<Spanish>Luz de lectura verde</Spanish>
@ -571,7 +571,7 @@
<Italian>Scudo Luce Chimica (Rossa)</Italian>
<Chinese>螢光棒保護殼 (紅色)</Chinese>
<Chinesesimp>荧光棒保护壳(红色)</Chinesesimp>
<Russian>Контейнер для Химсвета (Красн)</Russian>
<Russian>Контейнер для химсвета (красный)</Russian>
<Portuguese>Estojo de Luz (Vermelho)</Portuguese>
<Czech>Clona s vloženým chemickým světlem (Červené)</Czech>
<Spanish>Protector de luz química (Roja)</Spanish>
@ -587,7 +587,7 @@
<Italian>Luce da lettura Rossa.</Italian>
<Chinese>紅色閱讀燈</Chinese>
<Chinesesimp>红色阅读灯。</Chinesesimp>
<Russian>Ночник из Химсвета (Красный)</Russian>
<Russian>Ночник из красного химсвета.</Russian>
<Portuguese>Luz de leitura vermelha.</Portuguese>
<Czech>Červené světlo na čtení.</Czech>
<Spanish>Luz de lectura roja</Spanish>
@ -603,7 +603,7 @@
<Italian>Scudo Luce Chimica (Blu)</Italian>
<Chinese>螢光棒保護殼 (藍色)</Chinese>
<Chinesesimp>荧光棒保护壳(蓝色)</Chinesesimp>
<Russian>Контейнер для Химсвета (Син)</Russian>
<Russian>Контейнер для химсвета (синий)</Russian>
<Portuguese>Estojo de Luz (Azul)</Portuguese>
<Czech>Clona s vloženým chemickým světlem (Modré)</Czech>
<Spanish>Protector de luz química (Azul)</Spanish>
@ -619,7 +619,7 @@
<Italian>Luce da lettura Blu.</Italian>
<Chinese>藍色閱讀燈</Chinese>
<Chinesesimp>蓝色阅读灯。</Chinesesimp>
<Russian>Ночник из Химсвета (Синий)</Russian>
<Russian>Ночник из синего химсвета.</Russian>
<Portuguese>Luz de leitura azul.</Portuguese>
<Czech>Modré světlo na čtení.</Czech>
<Spanish>Luz de lectura azul</Spanish>
@ -635,7 +635,7 @@
<Italian>Scudo Luce Chimica (Gialla)</Italian>
<Chinese>螢光棒保護殼 (黃色)</Chinese>
<Chinesesimp>荧光棒保护壳(黄色)</Chinesesimp>
<Russian>Контейнер для Химсвета (Желт)</Russian>
<Russian>Контейнер для химсвета (жёлтый)</Russian>
<Portuguese>Estojo de Luz (Amarelo)</Portuguese>
<Czech>Clona s vloženým chemickým světlem (Žluté)</Czech>
<Spanish>Protector de luz química (Amarilla)</Spanish>
@ -651,7 +651,7 @@
<Italian>Luce da lettura Gialla.</Italian>
<Chinese>黃色閱讀燈</Chinese>
<Chinesesimp>黄色阅读灯。</Chinesesimp>
<Russian>Ночник из Химсвета (Желтый)</Russian>
<Russian>Ночник из жёлтого химсвета.</Russian>
<Portuguese>Luz de leitura amarela.</Portuguese>
<Czech>Žluté světlo na čtení.</Czech>
<Spanish>Luz de lectura amarilla</Spanish>
@ -667,7 +667,7 @@
<Italian>Scudo Luce Chimica (Arancione)</Italian>
<Chinese>螢光棒保護殼 (橘色)</Chinese>
<Chinesesimp>荧光棒保护壳(橘色)</Chinesesimp>
<Russian>Контейнер для Химсвета (Оранж)</Russian>
<Russian>Контейнер для химсвета (оранжевый)</Russian>
<Portuguese>Estojo de Luz (Laranja)</Portuguese>
<Czech>Clona s vloženým chemickým světlem (Oranžové)</Czech>
<Spanish>Protector de luz química (Naranja)</Spanish>
@ -683,7 +683,7 @@
<Italian>Luce da lettura Arancione.</Italian>
<Chinese>橘色閱讀燈</Chinese>
<Chinesesimp>橘色阅读灯。</Chinesesimp>
<Russian>Ночник из Химсвета (Оранжевый)</Russian>
<Russian>Ночник из оранжевого химсвета.</Russian>
<Portuguese>Luz de leitura laranja.</Portuguese>
<Czech>Oranžové světlo na čtení.</Czech>
<Spanish>Luz de lectura naranja</Spanish>
@ -699,7 +699,7 @@
<Italian>Scudo Luce Chimica (Bianca)</Italian>
<Chinese>螢光棒保護殼 (白色)</Chinese>
<Chinesesimp>荧光棒保护壳(白色)</Chinesesimp>
<Russian>Контейнер для Химсвета (Белый)</Russian>
<Russian>Контейнер для химсвета (белый)</Russian>
<Portuguese>Estojo de Luz (Branco)</Portuguese>
<Czech>Clona s vloženým chemickým světlem (Bílé)</Czech>
<Spanish>Protector de luz química (Blanca)</Spanish>
@ -715,7 +715,7 @@
<Italian>Luce da lettura Bianca.</Italian>
<Chinese>白色閱讀燈</Chinese>
<Chinesesimp>白色阅读灯。</Chinesesimp>
<Russian>Ночник из Химсвета (Белый)</Russian>
<Russian>Ночник из белого химсвета.</Russian>
<Portuguese>Luz de leitura branca.</Portuguese>
<Czech>Bílé světlo na čtení.</Czech>
<Spanish>Luz de lectura blanca</Spanish>

View File

@ -143,6 +143,7 @@ PREP(removeSpecificMagazine);
PREP(requestCallback);
PREP(resetAllDefaults);
PREP(restoreVariablesJIP);
PREP(rscObjectHelper);
PREP(runAfterSettingsInit);
PREP(runTests);
PREP(sanitizeString);

View File

@ -556,4 +556,17 @@ GVAR(deviceKeyCurrentIndex) = -1;
true
}, {false}, [19, [false, false, true]], false] call CBA_fnc_addKeybind; //ALT + R Key
["CBA_loadoutSet", {
params ["_unit", "_loadout"];
// remove if with https://github.com/CBATeam/CBA_A3/pull/1548
if (count _loadout == 2) then {
_loadout = _loadout select 0;
};
_loadout params ["_primaryWeaponArray"];
if ((_primaryWeaponArray param [0, ""]) == "ACE_FakePrimaryWeapon") then {
TRACE_1("Ignoring fake gun",_primaryWeaponArray);
_loadout set [0, []];
};
}] call CBA_fnc_addEventHandler;
GVAR(commonPostInited) = true;

View File

@ -0,0 +1,64 @@
#include "script_component.hpp"
/*
* Author: PabstMirror
* Convert between screen and 3d object coordinates
*
* Arguments:
* 0: Function <STRING>
* 1: Input array <CODE>
* 2: Scale (optional: 1) <NUMBER>
*
* Return Value:
* Value <ARRAY>
*
* Example:
* ["2d", [0,0,0], 1] call ace_common_fnc_rscObjectHelper
*
* Public: Maybe
*/
params ["_func", "_array", ["_scale", 1]];
private _adjustCam = 1;
private _topFOV = getResolution # 6;
private _leftFOV = getResolution # 7;
private _topLeftX = (_leftFOV-1)*0.5/_leftFOV;
private _bottomRightX = 1-_topLeftX;
private _topLeftY = 0;
private _bottomRightY = 1;
private _return = [];
switch (toLower _func) do {
case ("2d"): {
_array params ["_pointX", "_z", "_pointY"];
private _scrX = _pointX * (_bottomRightX - _topLeftX) + _topLeftX;
private _vX = _leftFOV * (_scrX - 0.5) * _adjustCam * _z;
private _scrY = _pointY * (_bottomRightY - _topLeftY) + _topLeftY;
private _vY = _topFOV * (0.5 - _scrY) * _adjustCam * _z;
_vX = _vX / _scale;
_vY = _vY / _scale;
_return = [_vX, _vY, _z];
};
case ("3d"): {
_array params ["_vX", "_vY", "_z"]; // z is distance from screen
_vX = _vX * _scale;
_vY = _vY * _scale;
private _scrX = _vX / (_leftFOV * _adjustCam * _z) + 0.5;
private _pointX = (_scrX - _topLeftX) / (_bottomRightX - _topLeftX);
private _scrY = 0.5 - _vY / (_topFOV * _adjustCam * _z);
private _pointY = (_scrY - _topLeftY) / (_bottomRightY - _topLeftY);
_return = [_pointX, _z, _pointY];
};
};
_return

View File

@ -415,7 +415,7 @@
<Polish>Wyłącz menu dowodzenia</Polish>
<Czech>Vypnout velící menu</Czech>
<French>Désactiver menu commande</French>
<Russian>Выключить командное меню</Russian>
<Russian>Выкл. командное меню</Russian>
<Hungarian>Parancsnoki menü kikapcsolása</Hungarian>
<Italian>Disabilita menù di comando</Italian>
<Portuguese>Desabilitar menu de comando</Portuguese>
@ -558,7 +558,7 @@
<Spanish>Comprueba la lista de PBOs permitidos</Spanish>
<Russian>Задать список непроверяемых аддонов.</Russian>
<German>Ermöglicht das Erstellen einer Liste von immer erlaubten Erweiterungen.</German>
<Korean>허용할 드온의 목록입니다.</Korean>
<Korean>허용할 드온의 목록입니다.</Korean>
</Key>
<Key ID="STR_ACE_Common_SettingFeedbackIconsName">
<English>Feedback icons</English>
@ -597,7 +597,7 @@
<German>Position der Fortschrittsanzeige</German>
<Spanish>Ubicación de la barra de progreso</Spanish>
<Italian>Posizione della barra di avanzamento</Italian>
<Russian>Положение прогресс-бара</Russian>
<Russian>Положение индикатора процесса</Russian>
<Polish>Lokalizacja paska postępu</Polish>
<French>Position de la barre de progression</French>
<Czech>Pozice ukazetele průběhu činnosti</Czech>
@ -743,7 +743,7 @@
<French>Banane</French>
<Hungarian>Banán</Hungarian>
<Portuguese>Banana</Portuguese>
<Japanese>甘蕉</Japanese>
<Japanese>バナナ</Japanese>
<Korean>바나나</Korean>
<Chinese>香蕉</Chinese>
<Chinesesimp>香蕉</Chinesesimp>
@ -759,7 +759,7 @@
<Polish>Rodzaj roślin z rodziny bananowatych, obejmujący około 80 gatunków.&lt;br /&gt;Przedstawiciele są typowymi przedstawicielami flory międzyzwrotnikowej Azji, Afryki i Australii.&lt;br /&gt;Część gatunków dostarcza jadalnych owoców. Słowo banan pochodzi prawdopodobnie od arabskiego słowa banan, co oznacza palec, lub afrykańskiego języka wolof, w którym rośliny te określa się mianem banaana.</Polish>
<French>Une banane est un fruit comestible qui, d'un point de vue botanique, fait partie du groupe des baies.\nProduite par plusieurs espèces de grandes plantes à fleurs herbacées du genre Musa.</French>
<Portuguese>A banana é uma fruta comestível, botanicamente uma baga, produzida por vários tipos de plantas herbáceas grandes do genero Musa.</Portuguese>
<Japanese>甘蕉は食べられる果物でバショウ科バショウ属のうち、果実を食用とする品種群の総称。また、その果実のこと。いくつかの原種から育種された多年。種によっては熟すまでは毒を持つものもある。</Japanese>
<Japanese>バナナは、バショウ科バショウ属のうち、果実を食用とする品種群の総称である。また、その果実のこと。いくつかの原種から育種された多年性植物。熱帯~亜熱帯の地域で栽培されるトロピカルフルーツ。種によっては熟すまでは毒を持つものもある。</Japanese>
<Korean>바나나는 식용 과일로써 식물학적으로 열매류이며 여러 종류의 개화가능한 초본의 파초과로 부터 생산됩니다.</Korean>
<Chinese>香蕉(學名: Musa × paradisiaca),為芭蕉科芭蕉屬小果野蕉及野蕉的人工栽培雜交種,為多年生草本植物。果實長有棱; 果皮黃色,果肉白色,味道香甜。主要生長在熱帶、亞熱帶地區。原產於亞洲東南部熱帶、亞熱帶地區</Chinese>
<Chinesesimp>香蕉学名Musa paradisiaca为芭蕉科芭蕉属小果野蕉及野蕉的人工栽培杂交种为多年生草本植物。果实长有棱; 果皮黄色,果肉白色,味道香甜。主要生长在热带、亚热带地区。原产于亚洲东南部热带、亚热带地区。</Chinesesimp>
@ -791,7 +791,7 @@
<French>/!\ Module obsolète /!\ - Vérifie l'intégrité des addons avec le serveur, et effectue l'action sélectionnée si un addon est manquant.</French>
<Italian>Controlla l'integrità degli addon con il server ed esegui l'azione selezionata se un addon è mancante</Italian>
<Japanese>サーバがアドオンの整合性を検査し、もし不備があれば実行する動作を選択できます。</Japanese>
<Korean>서버 에드온의 무결성을 검사하고 사라진 에드온이 있을경우 행동을 선택합니다.</Korean>
<Korean>서버 애드온의 무결성을 검사하고 사라진 애드온이 있을 경우 행동을 선택합니다.</Korean>
<Chinese>檢查客戶端與伺服器端的模組清單是否一致且完整,並提供訊息表示遺失的模組</Chinese>
<Chinesesimp>检查客户端与服务器端的模组清单是否一致且完整,并提供信息表示遗失的模组。</Chinesesimp>
</Key>
@ -823,7 +823,7 @@
<Russian>Что делать с игроками с неправильными аддонами?</Russian>
<Italian>Cosa fare con giocatori che non hanno i PBO corretti?</Italian>
<Japanese>プレイヤーが正しい PBO を持っていない場合は?</Japanese>
<Korean>올바르지 않 PBO를 가진 사람을 어떻게 할까요?</Korean>
<Korean>올바르지 않 PBO를 가진 사람을 어떻게 할까요?</Korean>
<Chinese>若玩家沒有正確的PBO檔時將採取何種動作?</Chinese>
<Chinesesimp>若玩家没有正确的 PBO 档时,将采取何种动作?</Chinesesimp>
</Key>
@ -971,7 +971,7 @@
<Russian>Добавляет эффект LSD (мигание всеми цветами радуги) синхронизированным транспортным средствам</Russian>
<Italian>Aggiunge effetti LSD ai veicoli sincronizzati</Italian>
<Japanese>同期されたオブジェクトに LSD の効果を追加します</Japanese>
<Korean>동기화된 차량에 LSD효과를 추가합니다.</Korean>
<Korean>동기화된 차량에 LSD 효과를 추가합니다.</Korean>
<Chinese>使被同步的載具產生瘋狂的迷幻效果。(後果自負)</Chinese>
<Chinesesimp>使被同步的载具产生疯狂的迷幻效果。(后果自负)</Chinesesimp>
</Key>
@ -1031,7 +1031,7 @@
<Italian>Disattivato</Italian>
<Polish>Wyłączone</Polish>
<Portuguese>Desativado</Portuguese>
<Russian>Откл.</Russian>
<Russian>Отключено</Russian>
<Spanish>Desactivado</Spanish>
<Japanese>無効化</Japanese>
<Korean>비활성화</Korean>
@ -1047,7 +1047,7 @@
<Italian>Attivato</Italian>
<Polish>Włączone</Polish>
<Portuguese>Ativado</Portuguese>
<Russian>Вкл.</Russian>
<Russian>Включено</Russian>
<Spanish>Activado</Spanish>
<Japanese>有効化</Japanese>
<Korean>활성화</Korean>
@ -1320,6 +1320,9 @@
<Chinesesimp>ACE 未分类</Chinesesimp>
<Korean>ACE 무분류</Korean>
<German>ACE Unkategorisiert</German>
<Polish>ACE Nieskategoryzowane</Polish>
<Japanese>ACE 無区分</Japanese>
<Russian>ACE Без категории</Russian>
</Key>
<Key ID="STR_ACE_Common_NoRoomToUnload">
<English>No Room to unload</English>
@ -1427,6 +1430,7 @@
<French>Mode adapté à l'épilepsie</French>
<Chinesesimp>癫痫病友好模式</Chinesesimp>
<Korean>광과민 친화적 모드</Korean>
<Russian>Режим для эпилептиков</Russian>
</Key>
<Key ID="STR_ACE_Common_EpilepsyFriendlyModeTooltip">
<English>Disables some flashing light effects to reduce seizure risk.</English>
@ -1436,6 +1440,7 @@
<French>Désactive certains effets de lumière clignotante afin de réduire les risques de crise d'épilepsie.</French>
<Chinesesimp>禁用一些闪烁的灯光效果,以降低癫痫发作的风险。</Chinesesimp>
<Korean>반짝거리는 빛으로 인해 일어날 발작 상황을 줄여줍니다.</Korean>
<Russian>Отключает некоторые вспышки во избежание риска приступа.</Russian>
</Key>
<Key ID="STR_ACE_Common_FlagBlack">
<English>Flag (ACE - Black)</English>
@ -1492,6 +1497,8 @@
<Korean>인공지능만</Korean>
<German>Nur KI</German>
<Chinesesimp>仅 AI</Chinesesimp>
<Japanese>AIのみ</Japanese>
<Russian>Только ИИ</Russian>
</Key>
<Key ID="STR_ACE_Common_playersAndAI">
<English>Players and AI</English>
@ -1541,7 +1548,7 @@
<English>Additional progress bar information</English>
<Japanese>プログレス バー詳細情報</Japanese>
<French>Infos supplémentaires de la barre de progression</French>
<Russian>Дополнительная информация прогресс-бара</Russian>
<Russian>Доп. информация индикатора процесса</Russian>
<German>Zusätzliche Informationen beim Fortschrittsbalken</German>
<Polish>Dodatkowe informacje na pasku postępu </Polish>
<Chinesesimp>额外的进度条信息</Chinesesimp>
@ -1551,7 +1558,7 @@
<English>Controls extra information shown in progress bar.</English>
<Japanese>プログレス バーへ表示される情報量を決定します。</Japanese>
<French>Définit quelles informations supplémentaires sont affichées dans la barre de progression.</French>
<Russian>Устанавливает дополнительную информацию в прогресс-баре.</Russian>
<Russian>Устанавливает дополнительную информацию в индикаторе процесса.</Russian>
<German>Kontrolliert zusätzliche Informationen beim Fortschrittsbalkens</German>
<Polish>Kontroluje dodatkowe informacje na pasku postępu.</Polish>
<Chinesesimp>控制进度条中显示的额外信息。</Chinesesimp>
@ -1565,7 +1572,7 @@
<German>Prozent</German>
<Polish>Procent</Polish>
<Chinesesimp>百分比</Chinesesimp>
<Korean>퍼센트</Korean>
<Korean>백분율</Korean>
</Key>
<Key ID="STR_ACE_Common_progressBarInfoTime">
<English>Time remaining</English>
@ -1631,12 +1638,17 @@
<Russian>Места ускоренного обучения</Russian>
<Japanese>衛生能力の上昇位置</Japanese>
<Korean>교육 증가 지역</Korean>
<Chinesesimp>受所在位置影响提升医疗能力</Chinesesimp>
<Chinesesimp>位置提升能力</Chinesesimp>
<Chinese>受所在位置影響提升醫療能力</Chinese>
<Turkish>Konumlar Tedaviyi Hızlandırır</Turkish>
</Key>
<Key ID="STR_ACE_Common_unloadWeapon">
<English>Unload Weapon</English>
<Polish>Wyładuj Broń</Polish>
<Japanese>武器からマガジンを抜く</Japanese>
<Korean>탄창 빼기</Korean>
<Chinesesimp>卸掉武器弹匣</Chinesesimp>
<Russian>Разрядить оружие</Russian>
</Key>
</Package>
</Project>

View File

@ -75,6 +75,7 @@ class CfgVehicles {
class ACE_ConcertinaWire: ACE_ConcertinaWireNoGeo {
scope = 2;
displayName = CSTRING(DisplayName);
editorPreview = QPATHTOF(data\preview_concertina_wire.jpg);
model = QPATHTOF(data\ACE_ConcertinaWire.p3d);
EGVAR(logistics_wirecutter,isFence) = 1;
class ACE_Actions {
@ -104,7 +105,9 @@ class CfgVehicles {
scope = 2;
displayName = CSTRING(Coil_DisplayName);
editorPreview = QPATHTOF(data\preview_concertina_wire_coil.jpg);
model = QPATHTOF(data\ACE_ConcertinaWireCoil.p3d);
icon = "iconObject_circle";
mapsize = 0.5;
animated = 0;
nameSound = "fence";

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -35,13 +35,6 @@ class CfgVehicles {
explosionEffect = "FuelExplosionBig";
};
class APC_Wheeled_02_base_F: Wheeled_APC_F { // Otokar ARMA - RCWS Turret
GVAR(ignoreTurret) = 1;
};
class APC_Tracked_01_base_F: Tank_F { // Namera, Nemmera - RCWS Turret
GVAR(ignoreTurret) = 1;
};
class MRAP_01_base_F: Car_F {
GVAR(engineSmokeOffset)[] = {0,-2,0};

View File

@ -11,6 +11,22 @@
[QGVAR(smoke), FUNC(smoke)] call CBA_fnc_addEventHandler;
[QGVAR(cookOffBox), FUNC(cookOffBox)] call CBA_fnc_addEventHandler;
// handle cleaning up effects when vehicle is deleted mid-cookoff
[QGVAR(addCleanupHandlers), {
params ["_vehicle"];
// Don't add a new EH if cookoff is run multiple times
if ((_vehicle getVariable [QGVAR(deletedEH), -1]) == -1) then {
private _deletedEH = _vehicle addEventHandler ["Deleted", {
params ["_vehicle"];
[QGVAR(cleanupEffects), [_vehicle]] call CBA_fnc_localEvent;
}];
_vehicle setVariable [QGVAR(deletedEH), _deletedEH];
};
}] call CBA_fnc_addEventHandler;
[QGVAR(cleanupEffects), {
params ["_vehicle", ["_effects", []]];
@ -37,6 +53,8 @@
) then {
if (GVAR(ammoCookoffDuration) == 0) exitWith {};
([_vehicle] call FUNC(getVehicleAmmo)) params ["_mags", "_total"];
[_vehicle, _mags, _total] call FUNC(detonateAmmunition);
private _delay = (random MAX_AMMO_DETONATION_START_DELAY) max MIN_AMMO_DETONATION_START_DELAY;
[FUNC(detonateAmmunition), [_vehicle, _mags, _total], _delay] call CBA_fnc_waitAndExecute;
};
}, nil, ["Man","StaticWeapon"]] call CBA_fnc_addClassEventHandler;

View File

@ -30,6 +30,8 @@ TRACE_9("cooking off",_vehicle,_intensity,_instigator,_smokeDelayEnabled,_ammoDe
if (_vehicle getVariable [QGVAR(isCookingOff), false]) exitWith {};
_vehicle setVariable [QGVAR(isCookingOff), true, true];
[QGVAR(addCleanupHandlers), [_vehicle]] call CBA_fnc_globalEvent;
// limit maximum value of intensity to prevent very long cook-off times
_intensity = _intensity min _maxIntensity;
@ -49,6 +51,9 @@ if (_positions isEqualTo []) then {
};
};
// default fire jet to enabled when not set in configs
private _canJet = ([_config >> QGVAR(canHaveFireJet), "number", 1] call CBA_fnc_getConfigEntry) == 1;
private _delay = 0;
if (_smokeDelayEnabled) then {
_delay = SMOKE_TIME + random SMOKE_TIME;
@ -56,21 +61,21 @@ if (_smokeDelayEnabled) then {
[QGVAR(smoke), [_vehicle, _positions]] call CBA_fnc_globalEvent;
[{
params ["_vehicle", "_positions", "_intensity", "_ammoDetonationChance", "_detonateAfterCookoff", "_instigator", "_fireSource", "_canRing"];
params ["_vehicle", "_positions", "_intensity", "_ammoDetonationChance", "_detonateAfterCookoff", "_instigator", "_fireSource", "_canRing", "_canJet"];
_vehicle setVariable [QGVAR(intensity), _intensity];
private _smokeEffects = _vehicle getVariable [QGVAR(effects), []];
[{
params ["_args", "_pfh"];
_args params ["_vehicle", "_positions", "_ammoDetonationChance", "_detonateAfterCookoff", "_instigator", "_fireSource", "_canRing", "_smokeEffects"];
_args params ["_vehicle", "_positions", "_ammoDetonationChance", "_detonateAfterCookoff", "_instigator", "_fireSource", "_canRing", "_canJet", "_smokeEffects"];
private _intensity = _vehicle getVariable [QGVAR(intensity), 0];
if (isNull _vehicle || {_intensity <= 1}) exitWith {
[QGVAR(cleanupEffects), [_vehicle, _smokeEffects]] call CBA_fnc_globalEvent;
_vehicle setVariable [QGVAR(isCookingOff), false, true];
[_pfh] call CBA_fnc_removePerFrameHandler;
if (_detonateAfterCookoff) then {
_vehicle setDamage 1;
if (GVAR(destroyVehicleAfterCookoff) || _detonateAfterCookoff) then {
_vehicle setDamage [1, _detonateAfterCookoff];
};
};
@ -96,7 +101,7 @@ if (_smokeDelayEnabled) then {
_fireSource = selectRandom _positions;
};
[QGVAR(cookOffEffect), [_vehicle, true, _ring, _time, _fireSource, _intensity]] call CBA_fnc_globalEvent;
[QGVAR(cookOffEffect), [_vehicle, _canJet, _ring, _time, _fireSource, _intensity]] call CBA_fnc_globalEvent;
_intensity = _intensity - (0.5 max random 1);
_vehicle setVariable [QGVAR(intensity), _intensity];
@ -122,5 +127,5 @@ if (_smokeDelayEnabled) then {
_vehicle setVariable [QGVAR(nextExplosiveDetonation), random 60];
};
};
}, 0.25, [_vehicle, _positions, _ammoDetonationChance, _detonateAfterCookoff, _instigator, _fireSource, _canRing, _smokeEffects]] call CBA_fnc_addPerFrameHandler
}, [_vehicle, _positions, _intensity, _ammoDetonationChance, _detonateAfterCookoff, _instigator, _fireSource, _canRing], _delay] call CBA_fnc_waitAndExecute;
}, 0.25, [_vehicle, _positions, _ammoDetonationChance, _detonateAfterCookoff, _instigator, _fireSource, _canRing, _canJet, _smokeEffects]] call CBA_fnc_addPerFrameHandler
}, [_vehicle, _positions, _intensity, _ammoDetonationChance, _detonateAfterCookoff, _instigator, _fireSource, _canRing, _canJet], _delay] call CBA_fnc_waitAndExecute;

View File

@ -32,8 +32,10 @@ private _sound = objNull;
if (isServer) then {
// ironically biggest performance hit is this. Creating a new sound source takes up aprox 400 milliseconds.
// I dont think there is an alternative that takes into effect distance and whatever, but if you find one please fix!
private _soundName = selectRandomWeighted [QGVAR(Sound_low), 0.1, QGVAR(Sound_mid), 0.25, QGVAR(Sound_high), 0.65];
_sound = createSoundSource [_soundName, position _obj, [], 0];
if (_jet || _ring) then {
private _soundName = selectRandomWeighted [QGVAR(Sound_low), 0.1, QGVAR(Sound_mid), 0.25, QGVAR(Sound_high), 0.65];
_sound = createSoundSource [_soundName, position _obj, [], 0];
};
if (_ring) then {
private _intensity = 6;

View File

@ -24,21 +24,18 @@ TRACE_1("getVehicleAmmo",_vehicle);
private _ammoToDetonate = [];
private _totalAmmo = 0;
// from ace_common, tweaked becasue command is busted
private _ffvTurrets = fullCrew [_vehicle, "", true] select {_x select 4} apply {_x select 3};
// Get ammo from turrets
{
_x params ["_mag", "_turret", "_count"];
// if the turret is an FFV seat, it takes magazines from the soldier
if (!(_turret in _ffvTurrets) && {_count > 0}) then {
if (_count > 0) then {
private _ammo = getText (configFile >> "CfgMagazines" >> _mag >> "ammo");
private _model = getText (configFile >> "CfgAmmo" >> _ammo >> "model");
if (_model == "\A3\weapons_f\empty") exitWith {TRACE_3("skipping",_mag,_ammo,_model);};
_ammoToDetonate pushBack [_mag, _count];
_totalAmmo = _totalAmmo + _count;
};
} forEach (magazinesAllTurrets _vehicle);
} forEach (magazinesAllTurrets [_vehicle, true]);
// Get ammo from cargo space
{

View File

@ -18,6 +18,16 @@
false // Needs mission restart
] call CBA_fnc_addSetting;
[
QGVAR(destroyVehicleAfterCookoff), "CHECKBOX",
[LSTRING(destroyVehicleAfterCookoff_name), LSTRING(destroyVehicleAfterCookoff_tooltip)],
LSTRING(category_displayName),
false, // default value
true, // isGlobal
{[QGVAR(destroyVehicleAfterCookoff), _this] call EFUNC(common,cbaSettings_settingChanged)},
false // Needs mission restart
] call CBA_fnc_addSetting;
[
QGVAR(enableAmmoCookoff), "CHECKBOX",
[LSTRING(enableAmmoCookoff_name), LSTRING(enableAmmoCookoff_tooltip)],

View File

@ -29,6 +29,9 @@
#define MAX_TIME_BETWEEN_AMMO_DET 25
#define MAX_COOKOFF_INTENSITY 10
#define MIN_AMMO_DETONATION_START_DELAY 1 // Min time to wait before a vehicle's ammo starts to cookoff
#define MAX_AMMO_DETONATION_START_DELAY 6 // Max time to wait before a vehicle's ammo starts to cookoff
// Delay between flame effect for players in a cooking off vehicle
#define FLAME_EFFECT_DELAY 0.4

View File

@ -12,7 +12,7 @@
<German>ACE Durchzündung</German>
<French>ACE Auto-inflammation</French>
<Polish>ACE Samozapłon</Polish>
<Russian>ACE Возгорание</Russian>
<Russian>ACE Детонация</Russian>
<Portuguese>ACE Cook off</Portuguese>
<Czech>ACE Vznícení munice</Czech>
</Key>
@ -57,7 +57,7 @@
<Italian>Abilita esplosione cassa munizioni</Italian>
<Chinese>開啟彈藥箱殉爆效果</Chinese>
<Chinesesimp>开启弹药箱殉爆效果</Chinesesimp>
<Russian>Разрешить возгорание ящиков с боеприпасами</Russian>
<Russian>Разрешить детонацию ящиков с боеприпасами</Russian>
<Portuguese>Permitir cozinhar caixas de munição</Portuguese>
<Czech>Povolit vynícení munice v krabicích</Czech>
</Key>
@ -72,7 +72,7 @@
<Italian>Abilita l'esplosione della cassa di munizioni. </Italian>
<Chinese>開啟彈藥箱殉爆效果</Chinese>
<Chinesesimp>开启弹药箱殉爆效果</Chinesesimp>
<Russian>Активирует возгорание ящиков с боеприпасами</Russian>
<Russian>Активирует детонацию ящиков с боеприпасами</Russian>
<Portuguese>Permitir que caixas de munição cozinhem.</Portuguese>
<Czech>Zapíná vznícení munice v krabicích.</Czech>
</Key>
@ -102,7 +102,7 @@
<Chinese>開啟彈藥殉爆效果。當一台載有彈藥的載具起火時, 將會有殉爆的效果</Chinese>
<Chinesesimp>开启弹药殉爆效果。当一台载有弹药的载具起火时,将会有殉爆的效果。</Chinesesimp>
<Korean>쿡오프 현상을 활성화 합니다. 이것은 탄약에 불이 붙어 있는 동안 주변에 발사체를 발사합니다.</Korean>
<Russian>Активирует возгорание и детонацию боекомплекта в горящей технике</Russian>
<Russian>Активирует детонацию боекомплекта в горящей технике.</Russian>
<Portuguese>Permite que a munição cozinhe. Dispara projéteis de munição enquanto o veículo está em chamas e tem munição.</Portuguese>
<Czech>Zapíná vznícení munice. Vystřeluje projektily po dobu kdy vozidlo hoří a má munici.</Czech>
</Key>
@ -117,7 +117,7 @@
<Chinese>彈藥殉爆效果持續時間</Chinese>
<Chinesesimp>弹药殉爆效果持续时间</Chinesesimp>
<Korean>쿡오프 지속 시간</Korean>
<Russian>Длительность возгорания боеприпасов</Russian>
<Russian>Длительность детонации боеприпасов</Russian>
<Portuguese>Duração do cozinhamento de munição</Portuguese>
<Czech>Doba trvání vznícení munice</Czech>
</Key>
@ -132,7 +132,7 @@
<Chinese>設定彈藥殉爆效果會持續多久時間 [輸入0來關閉殉爆效果]</Chinese>
<Chinesesimp>设定弹药殉爆效果会持续多久时间 [输入0来关闭殉爆效果]</Chinesesimp>
<Korean>쿡오프 지속 시간의 배수 [0 이면 비활성]</Korean>
<Russian>Множитель длительности возгорания [0 - отключает возгорание боеприпасов]</Russian>
<Russian>Множитель длительности детонации [0 - отключает детонацию боеприпасов]</Russian>
<Portuguese>Multiplicação da duração do cozinhamento [0 faz com que o cozinhamento seja desativado]</Portuguese>
<Czech>Multiplikátor doby trvání vznícení munice [Nastavte 0 pro vypnutí vznícení munice]</Czech>
</Key>
@ -146,7 +146,7 @@
<Chinesesimp>殉爆发生机率系数</Chinesesimp>
<French>Coefficient de probabilité d'auto-inflammation</French>
<Polish>Współczynnik prawdopodobieństwa samozapłonu</Polish>
<Russian>Коэффициент вероятности возгорания</Russian>
<Russian>Коэф. вероятности детонации</Russian>
<Portuguese>Probabilidade de Cozinhar</Portuguese>
<Czech>Koeficient pravděpodobnosti vznícení munice</Czech>
<Korean>쿡오프 발생 확률 계수</Korean>
@ -161,16 +161,28 @@
<Chinesesimp>调整殉爆发生机率系数。值越高代表越容易发生殉爆。</Chinesesimp>
<French>Multiplicateur de probabilité de l'auto-inflammation. Plus la valeur est élevée, plus la probabilité de combustion est grande.</French>
<Polish>Mnożnik prawdopodobieństwa samozapłonu. Większa wartość oznacza większe prawdopodobieństwo samozapłonu</Polish>
<Russian>Множитель коэффициента вероятности возгорания. Чем выше значение, тем выше вероятность.</Russian>
<Russian>Множитель коэффициента вероятности детонации. Чем выше значение, тем выше вероятность</Russian>
<Portuguese>Multiplicador para a chance de cozinhamento. Valores mais altos aumentam as chances de ocorrer.</Portuguese>
<Czech>Multiplikátor pro pravděpodobnost vznícení munice. Vyšší hodnota znamená vyšší šanci vznícení munice.</Czech>
<Korean>쿡오프가 일어날 확률에 계수를 곱합니다. 더 큰 숫자는 더 높은 확률의 쿡오프를 일으킵니다.</Korean>
</Key>
<Key ID="STR_ACE_CookOff_destroyVehicleAfterCookoff_name">
<English>Destroy Vehicles After Cook-off</English>
<Korean>쿡오프 후 차량 파괴</Korean>
<Chinesesimp>殉爆发生后摧毁载具</Chinesesimp>
<Russian>Уничтожать технику после детонации</Russian>
</Key>
<Key ID="STR_ACE_CookOff_destroyVehicleAfterCookoff_tooltip">
<English>Controls whether vehicles will always be destroyed after cooking off. Depending on the cookoff, the vehicle may explode or may simply be killed without effects.</English>
<Korean>차량이 쿡오프된 후 파괴할 지에 대한 여부를 제어합니다. 쿡오프에 따라 차량이 폭발하거나 아무런 효과 없이 파괴될 수 있습니다.</Korean>
<Chinesesimp>控制载具是否总是会在殉爆结束后被摧毁。根据殉爆的剧烈程度,载具可能会爆炸,也可能只是被没有效果地摧毁。</Chinesesimp>
<Russian>Всегда ли техника будет уничтожена после детонации. В зависимости от детонации, она может быть взорвана или просто уничтожена без эффектов.</Russian>
</Key>
<Key ID="STR_ACE_CookOff_enableFire_name">
<English>Enable Cook-Off Vehicle Fire</English>
<Japanese>誘爆火災を有効化</Japanese>
<French>Véhicules - Feu durant l'auto-inflammation</French>
<Russian>Включить возгорание поеприпасов</Russian>
<Russian>Вкл. горение техники от детонации</Russian>
<German>Aktiviert das in Brand setzen des Fahrzeugs während des Durchzündens der Munition</German>
<Polish>Włącz pożar pojazdu podczas samozapłonu</Polish>
<Chinesesimp>启用殉爆载具火灾</Chinesesimp>
@ -180,7 +192,7 @@
<English>Whether or not vehicles will catch on fire during cook-off</English>
<Japanese>誘爆により車両が炎上するかどうかを設定します。</Japanese>
<French>Définit si les véhicules prennent feu durant l'auto-inflammation de leurs munitions.</French>
<Russian>Будет ли техника возгораться при подрыве боеприпасов</Russian>
<Russian>Будет ли техника гореть при детонации боеприпасов</Russian>
<German>Ob Fahrzeuge in Brand gesetzt werden, während deren Munition durchzündet.</German>
<Polish>Określa, czy pojazdy zapalą się podczas samozapłonu ich amunicji.</Polish>
<Chinesesimp>车辆在殉爆过程中是否会起火</Chinesesimp>

View File

@ -72,7 +72,7 @@ private _bestAmmoToSend = -1;
_bestAmmoToSend = _xAmmo;
};
};
} forEach (if (_reloadSource isKindOf "CaManBase") then {magazinesAmmo _reloadSource} else {magazinesAmmoCargo _reloadSource});
} forEach (if (_reloadSource isKindOf "CAManBase") then {magazinesAmmo _reloadSource} else {magazinesAmmoCargo _reloadSource});
TRACE_4("",_reloadSource,_reloadMag,_reloadNeededAmmo,_bestAmmoToSend);
if (_bestAmmoToSend == -1) exitWith {ERROR("No ammo");};

View File

@ -38,6 +38,7 @@ if (
// solve config lookups
private _cfgMagazines = configFile >> "CfgMagazines";
private _cfgMagazinesCarryMag = _cfgMagazines >> _carryMag;
private _cfgGroupsCarryMag = configFile >> QGVAR(groups) >> _carryMag;
private _desiredAmmo = getNumber (configOf _vehicle >> QUOTE(ADDON) >> "desiredAmmo");
if (_desiredAmmo == 0) then { _desiredAmmo = 100; };
@ -53,7 +54,7 @@ scopeName "main";
_loadedMag = _xMag;
if (_xAmmo > 0) then {
// There is a magazine with ammo loaded in the turret (are there any multi-muzzle static weapons??), see if we can add to this mag
if (getNumber (_cfgMagazinesCarryMag >> _xMag) != 1) exitWith {
if (getNumber (_cfgGroupsCarryMag >> _xMag) != 1) exitWith {
[false, _loadedMag, -4, false] breakOut "main"; // Carry mag cannot be added to existing vehicle mag (e.g. red to green tracers)
};
if (getNumber (_cfgMagazinesCarryMag >> "ACE_isBelt") == 0) exitWith {

View File

@ -45,7 +45,7 @@ private _onFinish = {
_bestAmmoToSend = _xAmmo;
};
};
} forEach (magazinesAmmo _magSource);
} forEach (if (_magSource isKindOf "CAManBase") then {magazinesAmmo _magSource} else {magazinesAmmoCargo _magSource});
if (_bestAmmoToSend == -1) exitWith {ERROR_2("No ammo [%1 - %2]?",_xMag,_bestAmmoToSend);};
[_magSource, _carryMag, _bestAmmoToSend] call EFUNC(common,removeSpecificMagazine);
@ -57,11 +57,11 @@ private _onFinish = {
[
TIME_PROGRESSBAR(_timeToLoad),
[_vehicle, _turret, _carryMag, _magSource],
_onFinish,
{TRACE_1("load progressBar fail",_this);},
_displayName,
{((_this select 0) call FUNC(reload_canLoadMagazine)) select 0},
["isNotInside"]
TIME_PROGRESSBAR(_timeToLoad),
[_vehicle, _turret, _carryMag, _magSource],
_onFinish,
{TRACE_1("load progressBar fail",_this);},
_displayName,
{((_this select 0) call FUNC(reload_canLoadMagazine)) select 0},
["isNotInside"]
] call EFUNC(common,progressBar);

View File

@ -176,18 +176,38 @@
<Key ID="STR_ACE_CSW_handleExtraMagazinesType_displayName">
<English>Ammo Storage</English>
<German>Munitionslager</German>
<Korean>탄약 보관</Korean>
<Polish>Magazyn amunicji</Polish>
<Japanese>弾薬の格納</Japanese>
<Chinesesimp>弹药存储</Chinesesimp>
<Russian>Хранилище боеприпасов</Russian>
</Key>
<Key ID="STR_ACE_CSW_handleExtraMagazinesType_description">
<English>Determines whether extra magazines are stored on the ground or inside an ammo box</English>
<German>Legt fest, ob zusätzliche Magazine auf dem Boden oder in einer Munitionskiste aufbewahrt werden</German>
<Korean>여분의 탄약을 지면 또는 탄약 상자에 넣을지 결정합니다.</Korean>
<Polish>Decyduje, czy dodatkowe magazynki przechowywane są na ziemi, czy w skrzynce z amunicją.</Polish>
<Japanese>追加のマガジンを地面に設置するか、弾薬箱の中に保管するかを決定します</Japanese>
<Chinesesimp>设置多余的弹夹是存放在地面上还是弹药箱内</Chinesesimp>
<Russian>Определяет будут ли дополнительные магазины лежать на земле или внутри хранилища</Russian>
</Key>
<Key ID="STR_ACE_CSW_handleExtraMagazinesType_weaponHolder">
<English>Ground</English>
<German>Boden</German>
<Korean>지면</Korean>
<Polish>Ziemia</Polish>
<Japanese>地面</Japanese>
<Chinesesimp>地面</Chinesesimp>
<Russian>Земля</Russian>
</Key>
<Key ID="STR_ACE_CSW_handleExtraMagazinesType_ammoBox">
<English>Ammo Box</English>
<German>Munitionskiste</German>
<Korean>탄약 상자</Korean>
<Polish>Skrzynka amunicyjna</Polish>
<Japanese>弾薬箱</Japanese>
<Chinesesimp>弹药箱</Chinesesimp>
<Russian>Коробка с боеприпасами</Russian>
</Key>
<Key ID="STR_ACE_CSW_ammoHandling_displayName">
<English>Ammo handling</English>
@ -231,7 +251,7 @@
<Czech>Koeficient času interakce</Czech>
<Polish>Współczynnik czasu interakcji</Polish>
<Spanish>Coeficiente de tiempo de interacción</Spanish>
<Russian>Коэффициент времени взаимодействия</Russian>
<Russian>Коэф. времени взаимодействия</Russian>
<Korean>상호작용 시간 계수</Korean>
</Key>
<Key ID="STR_ACE_CSW_progressBarTimeCoefficent_description">
@ -443,7 +463,7 @@
<Czech>[CSW] Statický raketomet Mini-Spike (protitankový)</Czech>
<Turkish>[CSW] Static Mini-Spike Launcher (AT)</Turkish>
<Polish>[CSW] Mini-Spike Przeciwpancerny pocisk rakietowy</Polish>
<Russian>[CSW] Станковый Mini-Spike ПТРК</Russian>
<Russian>[CSW] Станковый Mini-Spike (ПТРК)</Russian>
<Korean>[CSW] 거치형 Mini-Spike 발사기 (대전차)</Korean>
</Key>
<Key ID="STR_ACE_CSW_StaticAABag_displayName">
@ -459,7 +479,7 @@
<Czech>[CSW] Statický raketomet Mini-Spike (protiletadlový)</Czech>
<Turkish>[CSW] Static Mini-Spike Launcher (AA)</Turkish>
<Polish>[CSW] Mini-Spike Przeciwlotniczy pocisk rakietowy</Polish>
<Russian>[CSW] Станковый Mini-Spike ЗРК</Russian>
<Russian>[CSW] Станковый Mini-Spike (ЗРК)</Russian>
<Korean>[CSW] 거치형 Mini-Spike 발사기 (대공)</Korean>
</Key>
<Key ID="STR_ACE_CSW_StaticHMGBag_displayName">
@ -583,7 +603,7 @@
<Czech>[CSW] Pás 12.7×99mm pro těžký kulomet (červená stopovka)</Czech>
<Turkish>[CSW] 12.7x99mm Tracer HMG Belt (Red)</Turkish>
<Polish>[CSW] Taśma 12.7x99mm CKM Smugowa (Czerwona)</Polish>
<Russian>[CSW] 12.7x99 мм трасс. пулемётная лента (Красный)</Russian>
<Russian>[CSW] 12.7x99 мм трасс. пулемётная лента (красные)</Russian>
<Korean>[CSW] 12.7x99mm 예광탄 중기관총 탄띠 (빨강)</Korean>
</Key>
<Key ID="STR_ACE_CSW_127x99_green_displayName">
@ -599,7 +619,7 @@
<Czech>[CSW] Pás 12.7×99mm pro těžký kulomet (zelená stopovka)</Czech>
<Turkish>[CSW] 12.7x99mm Tracer HMG Belt (Green)</Turkish>
<Polish>[CSW] Taśma 12.7x99mm CKM Smugowa (Zielona)</Polish>
<Russian>[CSW] 12.7x99 мм трасс. пулемётная лента (Зелёный)</Russian>
<Russian>[CSW] 12.7x99 мм трасс. пулемётная лента (зелёные)</Russian>
<Korean>[CSW] 12.7x99mm 예광탄 중기관총 탄띠 (초록)</Korean>
</Key>
<Key ID="STR_ACE_CSW_127x99_yellow_displayName">
@ -615,7 +635,7 @@
<Czech>[CSW] Pás 12.7×99mm pro těžký kulomet (žlutá stopovka)</Czech>
<Turkish>[CSW] 12.7x99mm Tracer HMG Belt (Yellow)</Turkish>
<Polish>[CSW] Taśma 12.7x99mm CKM Smugowa (Żółta)</Polish>
<Russian>[CSW] 12.7x99 мм трасс. пулемётная лента (Жёлтый)</Russian>
<Russian>[CSW] 12.7x99 мм трасс. пулемётная лента (жёлтые)</Russian>
<Korean>[CSW] 12.7x99mm 예광탄 중기관총 탄띠 (노랑)</Korean>
</Key>
<Key ID="STR_ACE_CSW_GMGBelt_displayName">
@ -679,7 +699,7 @@
<Czech>[CSW] 6P57 trojnožka (nízká)</Czech>
<Turkish>[CSW] 6P57 Deployable Tripod (Low)</Turkish>
<Polish>[CSW] Trójnóg Rozkładany 6P57 (Niski)</Polish>
<Russian>[CSW] 6P67 Развертываемая тренога (Низкая)</Russian>
<Russian>[CSW] 6P67 Развертываемая тренога (низкая)</Russian>
<Korean>[CSW] 6P57 배치형 삼각대 (낮음)</Korean>
</Key>
<Key ID="STR_ACE_CSW_m220TripodFolded_displayName">
@ -791,7 +811,7 @@
<Czech>[CSW] M3 trojnožka (nízká)</Czech>
<Turkish>[CSW] M3 Deployable Tripod (Low)</Turkish>
<Polish>[CSW] Trójnóg Rozkładany M3 (Niski)</Polish>
<Russian>[CSW] M3 Развертываемая тренога (Низкая)</Russian>
<Russian>[CSW] M3 Развертываемая тренога (низкая)</Russian>
<Korean>[CSW] M3 배치형 삼각대 (낮음)</Korean>
</Key>
<Key ID="STR_ACE_CSW_mortarBaseplateBag_displayName">

View File

@ -38,7 +38,7 @@
<German>DAGR umschalten</German>
<Polish>Przełącz DAGR</Polish>
<Spanish>Mostrar DAGR</Spanish>
<Russian>Вкл./выкл. DAGR</Russian>
<Russian>Переключить DAGR</Russian>
<Portuguese>Mostrar DAGR</Portuguese>
<Czech>Přepnout DAGR</Czech>
<Italian>Apri DAGR</Italian>

View File

@ -37,7 +37,7 @@
</Key>
<Key ID="STR_ACE_Dragging_DragKeybind">
<English>Drag/Release Object</English>
<Russian>Тащить/Отпустить Объект</Russian>
<Russian>Тащить/отпустить объект</Russian>
<Spanish>Arrastrar/Soltar Objeto</Spanish>
<Polish>Ciągnij/Puść Obiekt</Polish>
<Czech>Táhnout/Položit Objekt</Czech>
@ -55,7 +55,7 @@
<Key ID="STR_ACE_Dragging_CarryKeybind">
<English>Carry/Release Object</English>
<French>Porter/Lâcher un objet</French>
<Russian>Нести/Отпустить Объект</Russian>
<Russian>Нести/отпустить объект</Russian>
<Polish>Nieś/Puść objekt</Polish>
<Japanese>オブジェクトを運ぶ/離す</Japanese>
<Turkish>Objeyi Taşı/Bırak</Turkish>
@ -104,7 +104,7 @@
<French>Lever/Baisser | (Ctrl + Scroll) Rotation</French>
<Japanese>上げる/下げる | (Ctrl + スクロール) 回転</Japanese>
<Czech>Zvednout/Snížit | (Ctrl + Kolečko myši) Otáčet</Czech>
<Russian>Поднять/Опустить | (Ctrl + Скролл) Крутить</Russian>
<Russian>Поднять/опустить | (Ctrl + Скролл) Крутить</Russian>
<Polish>Wyżej/niżej | (Ctrl + Kółko myszy) obracanie</Polish>
<Turkish>Yükselt/Alçalt | (Ctrl + Tekerlek) Döndür</Turkish>
<Spanish>Subir/Bajar | (Ctrl + Scroll) Rotar</Spanish>

View File

@ -90,7 +90,7 @@
<Italian>Una luce,un mirino usato per le operazioni diurne.Contiene il computer di guida per l'intero sistema </Italian>
<Czech>Lehký a levný puškohled pro použití za denního světla. Obsahuje navigační počítač pro celý systém.</Czech>
<Polish>Lekki, tani celownik używany do działania w trakcie dnia. Zawiera komputer naprowadząjący dla całego systemu</Polish>
<Russian>Легкий дешёвый прицел, используемый для дневных операций. Содержит компьютер для всей системы</Russian>
<Russian>Лёгкий дешёвый прицел, используемый для дневных операций. Содержит компьютер для всей системы</Russian>
<Spanish>Un visor ligero y barato utilizado en operaciones diurnas. Contiene el ordenador de guiado para todo el sistema.</Spanish>
<Korean>싸고 가벼운 주간조준기입니다. 사격을 하기 위한 통제컴퓨터가 포함되있습니다.</Korean>
</Key>

View File

@ -6,7 +6,7 @@ diffuse[] = {1,1,1,1};
forcedDiffuse[] = {0,0,0,0};
emmisive[] = {0,0,0,1};
specular[] = {0.3,0.3,0.3,1};
specularPower = 3b0;
specularPower = 3;
PixelShaderID = "Super";
VertexShaderID = "Super";
class Stage1 {

View File

@ -39,3 +39,4 @@ PREP(startTimer);
PREP(triggerType);
PREP(allowDefuse);
PREP(isAllowedDefuse);
PREP(checkDetonateHandlers);

View File

@ -0,0 +1,38 @@
#include "script_component.hpp"
/*
* Author: PabstMirror, Whigital
* Check if there is a handler blocking detonation
*
* Arguments:
* 0: Unit <OBJECT>
* 1: Max range (-1 to ignore) <NUMBER>
* 2: Explosive <OBJECT>
* 3: Fuse time <NUMBER>
* 4: Trigger Item Classname <STRING>
*
* Return Value:
* Detonation Allowed <BOOL>
*
* Example:
* [player, -1, Explosive, 1, "ACE_Cellphone"] call ACE_Explosives_fnc_checkDetonateHandlers;
*
* Public: No
*/
params ["_unit", "_range", "_explosive", "_fuseTime", ["_triggerClassname", "#unknown", [""]]];
TRACE_5("checkDetonateHandlers",_unit,_range,_explosive,_fuseTime,_triggerClassname);
private _detonationAllowed = true;
{
// Pass [Unit<OBJECT>, MaxRange <NUMBER>, Explosive <OBJECT>, FuzeTime <NUMBER>, TriggerItem <STRING>]
private _handlerResult = [_unit, _range, _explosive, _fuseTime, _triggerClassname] call _x;
if (_handlerResult isEqualTo false) then {
TRACE_1("Handler Blocking",_forEachIndex);
_detonationAllowed = false;
break;
};
} forEach GVAR(detonationHandlers);
_detonationAllowed

View File

@ -28,12 +28,8 @@ private _ignoreRange = (_range == -1);
if (!_ignoreRange && {(_unit distance (_item select 0)) > _range}) exitWith {TRACE_1("out of range",_range); false};
private _result = true;
{
// Pass [Unit<OBJECT>, MaxRange <NUMBER>, Explosive <OBJECT>, FuzeTime <NUMBER>, TriggerItem <STRING>]
private _handlerResult = [_unit, _range, _item select 0, _item select 1, _triggerClassname] call _x;
if (_handlerResult isEqualTo false) then {TRACE_1("Handler Failed",_forEachIndex); _result = false};
} forEach GVAR(detonationHandlers);
if (!_result) exitWith {false};
if !([_unit, _range, _item select 0, _item select 1, _triggerClassname] call FUNC(checkDetonateHandlers)) exitWith {false};
if (getNumber (ConfigFile >> "CfgAmmo" >> typeOf (_item select 0) >> "TriggerWhenDestroyed") == 0) then {
private _previousExp = _item select 0;

View File

@ -35,9 +35,15 @@ if (_unit == ace_player) then {
private _explosive = [_code] call FUNC(getSpeedDialExplosive);
if ((count _explosive) > 0) then {
[{
playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_this select 1),3.16228,1,75];
(_this select 0) setVariable [QGVAR(Dialing), false, true];
}, [_unit,_explosive select 0], 0.25 * (count _arr - 4)] call CBA_fnc_waitAndExecute;
params ["_unit", "_item"];
if ([_unit, -1, (_item # 0), (_item # 2), "ACE_Cellphone"] call FUNC(checkDetonateHandlers)) then {
playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)), objNull, false, (getPosASL (_item # 0)), 3.16228, 1, 75];
};
_unit setVariable [QGVAR(Dialing), false, true];
}, [_unit, _explosive], 0.25 * (count _arr - 4)] call CBA_fnc_waitAndExecute;
[_explosive select 0,(0.25 * (count _arr - 1)) + (_explosive select 2), "ACE_Cellphone", _unit] call FUNC(startTimer);
};
};

View File

@ -39,9 +39,14 @@ if (_i >= (count _arr + 2)) then {
ctrlSetText [1400,"Call Ended!"];
};
};
if (_i == (count _arr)) then {
if ((count _explosive) > 0) then {
playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_explosive select 0),3.16228,1,75];
if (
((count _explosive) > 0) &&
{[_unit, -1, (_explosive # 0), (_explosive # 2), "ACE_Cellphone"] call FUNC(checkDetonateHandlers)}
) then {
playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)), objNull, false, (getPosASL (_explosive # 0)), 3.16228, 1, 75];
};
};
_args set [1, _i + 1];

View File

@ -804,7 +804,7 @@
<Portuguese>Requer especialista em explosivos para desativar explosivos? Padrão: Não</Portuguese>
<French>Seul un spécialiste peut désamorcer des explosifs.</French>
<Hungarian>Szükséges-e egy specialista a robbanóanyagok hatástalanításához? Alapértelmezett: Nem</Hungarian>
<Russian>Требуется ли специалист по минному делу для обезвреживания взрывчатки? По-умолчанию: Нет</Russian>
<Russian>Требуется ли специалист по минному делу для обезвреживания взрывчатки? По умолчанию: Нет</Russian>
<Italian>Richiedi specialisti esplosivi per disabilitare esplosivi? Default: No</Italian>
<Japanese>爆発物を無効化するには特技兵である必要かどうかを設定できます。標準: 無効化</Japanese>
<Korean>폭발물을 해제하기 위해서는 전문가가 필요합니까? 기본설정: 아니요</Korean>
@ -837,7 +837,7 @@
<Portuguese>Aumentar o tempo necessário para completar ações por não especialistas? Padrão: Sim</Portuguese>
<French>Augmente le temps nécessaire au désamorçage pour les unités non spécialisées.</French>
<Hungarian>Nem-specialisták esetén több ideig tartson a cselekvés befejezése? Alapértelmezett: Igen</Hungarian>
<Russian>Увеличивать время завершения действий для не-специалистов? По-умолчанию: Нет</Russian>
<Russian>Увеличивать время завершения действий для не-специалистов? По умолчанию: Нет</Russian>
<Italian>Aumenta il tempo richiesto per completare azioni per non-specialisti? Default: Si</Italian>
<Japanese>非特技兵は動作完了までの時間を増加させますか? 標準: 有効化</Japanese>
<Korean>비전문가가 폭발물을 해제시 더욱 많은 시간을 소요합니까? 기본설정: 예</Korean>
@ -853,7 +853,7 @@
<Spanish>Explotar al desactivar?</Spanish>
<French>Explosion au désamorçage</French>
<Hungarian>Robbanás hatástalanításkor?</Hungarian>
<Russian>Взрыв при разминир.?</Russian>
<Russian>Взрыв при разминировании?</Russian>
<Italian>Fai esplodere quando disarmato?</Italian>
<Japanese>解除中に爆発</Japanese>
<Korean>해제 시 폭발합니까?</Korean>
@ -869,7 +869,7 @@
<Spanish>¿Habilitar ciertos explosivos para estallar al desactivar? Por defecto: Sí</Spanish>
<French>Certains explosifs exploseront durant le désamorçage. Valeur par défaut : activé.</French>
<Hungarian>Meghatározott robbanóanyagok felrobbanjanak-e hatástalanításkor? Alapértelmezett: Igen</Hungarian>
<Russian>Разрешить определенным взрывным устройствам взрываться при разминировании? По-умолчанию: Да</Russian>
<Russian>Разрешить определенным взрывным устройствам взрываться при разминировании? По умолчанию: Да</Russian>
<Italian>Abilita alcuni esplosivi per esplosione al disarmo? Default: Si</Italian>
<Japanese>特定の爆発物を解除中に爆発させるかどうかを設定できます。? 標準: 有効化</Japanese>
<Korean>특정 폭발물이 해제 시 폭발하게 합니까? 기본설정: 예</Korean>
@ -1091,7 +1091,7 @@
</Key>
<Key ID="STR_ACE_Explosives_TimerMin_DisplayName">
<English>Minimum Time</English>
<Russian>Минимальное время</Russian>
<Russian>Мин. время</Russian>
<French>Durée minimale</French>
<Japanese>最短時間</Japanese>
<Spanish>Tiempo mínimo</Spanish>
@ -1102,7 +1102,7 @@
</Key>
<Key ID="STR_ACE_Explosives_TimerMax_DisplayName">
<English>Maximum Time</English>
<Russian>Максимальное время</Russian>
<Russian>Макс. время</Russian>
<French>Durée maximale</French>
<Japanese>最長時間</Japanese>
<Spanish>Tiempo máximo</Spanish>

View File

@ -177,6 +177,7 @@ class CfgVehicles {
author = "KoffeinFlummi";
scope = 1;
model = QPATHTOF(data\helper.p3d);
destrType = "DestructNo";
class ACE_Actions {};
class Turrets {};
class TransportItems {};

View File

@ -43,7 +43,7 @@
<Hungarian>FCS tartomány állítása (Fel)</Hungarian>
<Portuguese>Ajustar distância do FCS (Acima)</Portuguese>
<Italian>Aumentare la distanza dell'FCS</Italian>
<Russian>Диапазон СУО (Выше)</Russian>
<Russian>Диапазон СУО (выше)</Russian>
<Japanese>FCS による距離を調節 (上げ)</Japanese>
<Korean>사통장치 거리 조정 (위로)</Korean>
<Chinesesimp>调整火控系统距离(上调)</Chinesesimp>
@ -59,7 +59,7 @@
<Hungarian>FCS tartomány állítása (Le)</Hungarian>
<Portuguese>Ajustar distância do FCS (Abaixo)</Portuguese>
<Italian>Ridurre la distanza dell'FCS</Italian>
<Russian>Диапазон СУО (Ниже)</Russian>
<Russian>Диапазон СУО (ниже)</Russian>
<Japanese>FCS による距離を調節 (下げ)</Japanese>
<Korean>사통장치 거리 조정 (아래로)</Korean>
<Chinesesimp>调整火控系统距离(下调)</Chinesesimp>

View File

@ -89,7 +89,8 @@ if !(hasInterface) exitWith {};
],
{
params ["_unit", "", "_item"];
[objNull, _unit, _item] call FUNC(consumeItem);
private _itemConfig = configFile >> "CfgWeapons" >> _item;
[objNull, _unit, [_item, _itemConfig, false]] call FUNC(consumeItem);
false
}
] call CBA_fnc_addItemContextMenuOption;

View File

@ -6,23 +6,30 @@
* Arguments:
* 0: Water source <OBJECT>
* 1: Player <OBJECT>
* 2: Item classname <STRING>
* 2: Item data <ARRAY>
* 0: Item classname <STRING>
* 1: Item config <CONFIG>
* 2: Is item magazine <BOOL>
*
* Return Value:
* Can refill item <BOOL>
*
* Example:
* [_source, _player, "ACE_WaterBottle_Empty"] call ace_field_rations_fnc_canRefillItem
* [_source, _player, ["ACE_WaterBottle_Empty", configFile >> "CfgWeapons" >> "ACE_WaterBottle_Empty", false]] call ace_field_rations_fnc_canRefillItem
*
* Public: No
*/
params ["_source", "_player", "_item"];
params ["_source", "_player", "_itemData"];
_itemData params ["_item", "_itemConfig", "_isMagazine"];
alive _source
&& {XGVAR(waterSourceActions) != 0}
&& {_item in (_player call EFUNC(common,uniqueItems))}
&& {
(_isMagazine && {_item in magazines _player})
|| {_item in (_player call EFUNC(common,uniqueItems))}
}
&& {
private _water = _source call FUNC(getRemainingWater);
_water == REFILL_WATER_INFINITE || {_water >= getNumber (configFile >> "CfgWeapons" >> _item >> QXGVAR(refillAmount))}
_water == REFILL_WATER_INFINITE || {_water >= getNumber (_itemConfig >> QXGVAR(refillAmount))}
}

View File

@ -6,21 +6,23 @@
* Arguments:
* 0: Target (not used) <OBJECT>
* 1: Player <OBJECT>
* 2: Item classname <STRING>
* 2: Item data <ARRAY>
* 0: Item classname <STRING>
* 1: Item config <CONFIG>
* 2: Is item magazine <BOOL>
*
* Return Value:
* None
*
* Example:
* [objNull, ACE_player, "ACE_WaterBottle"] call ace_field_rations_fnc_consumeItem
* [objNull, ACE_player, "["ACE_WaterBottle_Empty", configFile >> "CfgWeapons" >> "ACE_WaterBottle_Empty", false]] call ace_field_rations_fnc_consumeItem
*
* Public: No
*/
params ["", "_player", "_consumeItem"];
TRACE_2("Consume item started",_player,_consumeItem);
private _config = configFile >> "CfgWeapons" >> _consumeItem;
params ["", "_player", "_consumeData"];
_consumeData params ["_consumeItem", "_config", "_isMagazine"];
TRACE_3("Consume item started",_player,_consumeItem,_config);
// Get consume time for item
private _consumeTime = getNumber (_config >> QXGVAR(consumeTime));
@ -70,11 +72,15 @@ private _soundPlayed = if (_consumeAnim != "" && {vehicle _player == _player &&
private _fnc_onSuccess = {
params ["_args"];
_args params ["_player", "_consumeItem", "_replacementItem", "_thirstQuenched", "_hungerSatiated"];
_args params ["_player", "_consumeItem", "_replacementItem", "_thirstQuenched", "_hungerSatiated", "", "", "", "_isMagazine"];
TRACE_1("Consume item successful",_args);
// Remove consumed item
_player removeItem _consumeItem;
if (_isMagazine) then {
_player removeMagazineGlobal _consumeItem;
} else {
_player removeItem _consumeItem;
};
// Add replacement item if needed
if (_replacementItem != "") then {
@ -92,7 +98,7 @@ private _fnc_onSuccess = {
_player setVariable [QXGVAR(hunger), (_hunger - _hungerSatiated) max 0];
};
["acex_rationConsumed", [_player, _consumeItem, _replacementItem, _thirstQuenched, _hungerSatiated]] call CBA_fnc_localEvent;
["acex_rationConsumed", [_player, _consumeItem, _replacementItem, _thirstQuenched, _hungerSatiated, _isMagazine]] call CBA_fnc_localEvent;
_player setVariable [QGVAR(previousAnim), nil];
};
@ -115,7 +121,7 @@ private _fnc_onFailure = {
private _fnc_condition = {
params ["_args"];
_args params ["_player", "_consumeItem", "", "", "", "_consumeAnim", "_consumeSound", "_soundPlayed"];
_args params ["_player", "_consumeItem", "", "", "", "_consumeAnim", "_consumeSound", "_soundPlayed", "_isMagazine"];
// Attempt to sync sound with animation start
if (!_soundPlayed && {_consumeSound != "" && {_consumeAnim == "" || {animationState _player == _consumeAnim}}}) then {
@ -123,7 +129,10 @@ private _fnc_condition = {
_args set [7, true];
};
_consumeItem in (_player call EFUNC(common,uniqueItems))
if (_isMagazine) exitWith {
_consumeItem in magazines _player // return
};
_consumeItem in (_player call EFUNC(common,uniqueItems)) // return
};
[
@ -136,7 +145,8 @@ private _fnc_condition = {
_hungerSatiated,
_consumeAnim,
_consumeSound,
_soundPlayed
_soundPlayed,
_isMagazine
],
_fnc_onSuccess,
_fnc_onFailure,

View File

@ -22,18 +22,26 @@ private _fnc_getActions = {
private _actions = [];
private _cfgWeapons = configFile >> "CfgWeapons";
private _cfgMagazines = configFile >> "CfgMagazines";
{
private _config = _cfgWeapons >> _x;
if (getNumber (_config >> QXGVAR(thirstQuenched)) > 0 || {getNumber (_config >> QXGVAR(hungerSatiated)) > 0}) then {
private _displayName = getText (_config >> "displayName");
private _picture = getText (_config >> "picture");
_x params ["_config", "_items"];
private _isMagazine = _config == _cfgMagazines;
{
private _itemConfig = _config >> _x;
if (getNumber (_itemConfig >> QXGVAR(thirstQuenched)) > 0 || {getNumber (_itemConfig >> QXGVAR(hungerSatiated)) > 0}) then {
private _displayName = getText (_itemConfig >> "displayName");
private _picture = getText (_itemConfig >> "picture");
// Exec next frame so closing interaction menu doesn't block progressBar
private _action = [_x, _displayName, _picture, {[FUNC(consumeItem), _this] call CBA_fnc_execNextFrame}, {true}, {}, _x] call EFUNC(interact_menu,createAction);
_actions pushBack [_action, [], _player];
};
} forEach (_player call EFUNC(common,uniqueItems));
// Exec next frame so closing interaction menu doesn't block progressBar
private _action = [_x, _displayName, _picture, {[FUNC(consumeItem), _this] call CBA_fnc_execNextFrame}, {true}, {}, [_x, _itemConfig, _isMagazine]] call EFUNC(interact_menu,createAction);
_actions pushBack [_action, [], _player];
};
} forEach _items;
} forEach [
[_cfgWeapons, _player call EFUNC(common,uniqueItems)],
[_cfgMagazines, [magazines _player] call EFUNC(common,uniqueElements)]
];
_actions
};

View File

@ -24,15 +24,23 @@ if (_water == 0 || {_water == REFILL_WATER_DISABLED}) exitWith {[]};
private _actions = [];
private _cfgWeapons = configFile >> "CfgWeapons";
private _cfgMagazines = configFile >> "CfgMagazines";
{
private _config = _cfgWeapons >> _x;
if (getText (_config >> QXGVAR(refillItem)) != "" && {_water == REFILL_WATER_INFINITE || {getNumber (_config >> QXGVAR(refillAmount)) <= _water}}) then {
private _displayName = format ["%1: %2", LLSTRING(Refill), getText (_config >> "displayName")];
private _picture = getText (_config >> "picture");
private _action = [_x, _displayName, _picture, FUNC(refillItem), FUNC(canRefillItem), {}, _x] call EFUNC(interact_menu,createAction);
_actions pushBack [_action, [], _source];
};
} forEach (_player call EFUNC(common,uniqueItems));
_x params ["_config", "_items"];
private _isMagazine = _config == _cfgMagazines;
{
private _itemConfig = _config >> _x;
if (getText (_itemConfig >> QXGVAR(refillItem)) != "" && {_water == REFILL_WATER_INFINITE || {getNumber (_itemConfig >> QXGVAR(refillAmount)) <= _water}}) then {
private _displayName = format ["%1: %2", LLSTRING(Refill), getText (_itemConfig >> "displayName")];
private _picture = getText (_itemConfig >> "picture");
private _action = [_x, _displayName, _picture, FUNC(refillItem), FUNC(canRefillItem), {}, [_x, _itemConfig, _isMagazine]] call EFUNC(interact_menu,createAction);
_actions pushBack [_action, [], _source];
};
} forEach _items;
} forEach [
[_cfgWeapons, _player call EFUNC(common,uniqueItems)],
[_cfgMagazines, [magazines _player] call EFUNC(common,uniqueElements)]
];
_actions

View File

@ -6,22 +6,24 @@
* Arguments:
* 0: Water source <OBJECT>
* 1: Player <OBJECT>
* 2: Item classname <STRING>
* 2: Item data <ARRAY>
* 0: Item classname <STRING>
* 1: Item config <CONFIG>
* 2: Is item magazine <BOOL>
*
* Return Value:
* None
*
* Example:
* [_source, _player, "ACE_WaterBottle_Empty"] call ace_field_rations_fnc_refillItem
* [_source, _player, ["ACE_WaterBottle_Empty", configFile >> "CfgWeapons" >> "ACE_WaterBottle_Empty", false]] call ace_field_rations_fnc_refillItem
*
* Public: No
*/
params ["_source", "_player", "_item"];
params ["_source", "_player", "_itemData"];
_itemData params ["_item", "_config", "_isMagazine"];
TRACE_3("Item refill started",_source,_player,_item);
private _config = configFile >> "CfgWeapons" >> _item;
// Get config values for refill
private _refillItem = getText (_config >> QXGVAR(refillItem));
private _refillAmount = getNumber (_config >> QXGVAR(refillAmount));
@ -29,11 +31,16 @@ private _refillTime = getNumber (_config >> QXGVAR(refillTime));
private _fnc_onSuccess = {
params ["_args"];
_args params ["_source", "_player", "_item", "_refillItem", "_refillAmount"];
_args params ["_source", "_player", "_itemData", "_refillItem", "_refillAmount", "_itemData"];
_itemData params ["_item", "", "_isMagazine"];
TRACE_1("Refill item successful",_args);
// Replace item with refilled one
_player removeItem _item;
if (_isMagazine) then {
_player removeMagazineGlobal _item;
} else {
_player removeItem _item;
};
[_player, _refillItem] call EFUNC(common,addToInventory);
// Update remaining water in source
@ -43,7 +50,7 @@ private _fnc_onSuccess = {
[_source, _waterInSource] call FUNC(setRemainingWater);
};
["acex_rationRefilled", [_source, _player, _item, _refillItem, _refillAmount]] call CBA_fnc_localEvent;
["acex_rationRefilled", [_source, _player, _item, _refillItem, _refillAmount, _isMagazine]] call CBA_fnc_localEvent;
// Show refilled item hint
private _picture = getText (configFile >> "CfgWeapons" >> _refillItem >> "picture");
@ -64,7 +71,7 @@ private _fnc_condition = {
[
_source,
_player,
_item,
_itemData,
_refillItem,
_refillAmount
],

View File

@ -784,7 +784,7 @@
<German>Ein erfrischender Softdrink mit Zitronen- und Limettengeschmack.</German>
<Chinese>清新檸檬以及有著酸橙味的汽水</Chinese>
<Chinesesimp>清爽的柠檬和青柠味汽水</Chinesesimp>
<Japanese>新鮮なレモンとライムの風味を味わえるソフト ドリンク</Japanese>
<Japanese>新鮮なレモンとライムの風味を味わえるソフトドリンク</Japanese>
<Polish>Odświeżający napój cytronowo-limonkowy</Polish>
<Russian>Освежающий напиток со вкусом лимона и лайма</Russian>
<Turkish>Limon Ve Yeşil Limondan Yapılmış Gazlı Bir Içecek</Turkish>
@ -795,7 +795,7 @@
<German>Ein nach Orange schmeckender Softdrink mit einem prickelndem und fruchtigem Geschmack</German>
<Chinese>有著微微的橘子水果味的汽水</Chinese>
<Chinesesimp>橙子味汽水,有刺鼻的水果味</Chinesesimp>
<Japanese>口いっぱいに果物を感じるオレンジ風味のソフト ドリンク</Japanese>
<Japanese>口いっぱいに果物を感じるオレンジ風味のソフトドリンク</Japanese>
<Polish>Napój pomarańczowy</Polish>
<Russian>Напиток с апельсиновым вкусом</Russian>
<Turkish>Gazlı Portakallı Bir Içecek</Turkish>
@ -806,7 +806,7 @@
<German>Red Gull verleiht Flügel</German>
<Chinese>紅鷹讓你猛虎添翼</Chinese>
<Chinesesimp>红鹰让你猛虎添翼</Chinesesimp>
<Japanese>レッドガル翼をさずける</Japanese>
<Japanese>レッドガル 翼をさずける</Japanese>
<Polish>Red Gull doda ci skrzydeł</Polish>
<Russian>Рэд Гулл окрыляет!</Russian>
<Turkish>Red Gull kanatlandırrrrr</Turkish>
@ -821,7 +821,7 @@
<German>EPA Lamm Curry</German>
<Hungarian>MRE bárány Curry</Hungarian>
<Italian>MRE Curry di agnello</Italian>
<Japanese>MRE カレー</Japanese>
<Japanese>MRE ラムカレー</Japanese>
<Korean>MRE 양고기 카레</Korean>
<Polish>MRE jagnięcina Curry</Polish>
<Portuguese>MRE cordeiro ao Curry</Portuguese>
@ -838,7 +838,7 @@
<German>Eine EPA mit Lamm Curry. Für den besten Geschmack erhitzen.</German>
<Hungarian>Egy MRE, amely Lamb Curry-t tartalmaz. Hő a legjobb hatás érdekében</Hungarian>
<Italian>Un MRE contenente Lamb Curry. Calore per il miglior effetto</Italian>
<Japanese>羊カレーの MRE。温めるとなお美味しい</Japanese>
<Japanese>ラム(肉)カレーの MRE。温めるとなお美味しい</Japanese>
<Korean>양고기 카레가 들어있는 MRE입니다. 뜨겁게 먹을 때 가장 좋습니다</Korean>
<Polish>MRE zawierające jagnięcine Curry. Podgrzej dla najlepszego efektu</Polish>
<Portuguese>Um MRE contendo Lamb Curry. Calor para melhor efeito</Portuguese>
@ -851,7 +851,7 @@
<German>EPA Rindereintopf</German>
<Chinese>軍糧 牛肉燉湯</Chinese>
<Chinesesimp>军粮炖牛肉汤</Chinesesimp>
<Japanese>MRE ビーフ シチュー</Japanese>
<Japanese>MRE ビーフシチュー</Japanese>
<Polish>MRE Gulasz wołowy</Polish>
<Russian>ИРП Тушеная говядина</Russian>
<Turkish>MRE Dana Yahni</Turkish>
@ -877,7 +877,7 @@
<German>EPA Cremige Tomatensuppe</German>
<Hungarian>MRE krémes paradicsomleves</Hungarian>
<Italian>MRE Crema di pomodoro</Italian>
<Japanese>MRE クリーム トマト スープ</Japanese>
<Japanese>MRE クリームトマトスープ</Japanese>
<Korean>MRE 크림 토마토 수프</Korean>
<Polish>MRE Kremowa Zupa Pomidorowa</Polish>
<Portuguese>MRE Sopa de creme de tomate</Portuguese>
@ -894,7 +894,7 @@
<German>Eine EPA mit Creme Tomatensuppe. Für beste Wirkung mit Wasser und Hitze mischen.</German>
<Hungarian>Egy krémes paradicsomleveset tartalmazó MRE. Keverjük össze vízzel és hővel a legjobb hatás érdekében</Hungarian>
<Italian>Un MRE contenente zuppa di pomodoro crema. Mescolare con acqua e calore per ottenere il massimo effetto</Italian>
<Japanese>クリーム トマト スープの MRE。水と混ぜて温めるとなお美味しい</Japanese>
<Japanese>クリームトマトスープの MRE。水と混ぜて温めるとなお美味しい</Japanese>
<Korean>크림 토마토 수프가 들어 있는 MRE입니다. 물과 섞어 뜨겁게 먹을 때 가장 좋습니다</Korean>
<Polish>MRE zawierające śmietanową zupę pomidorową. Wymieszaj z wodą i podgrzej, aby uzyskać najlepszy efekt</Polish>
<Portuguese>Uma MRE contendo Cream Tomato Soup. Misture com água e calor para melhor efeito</Portuguese>
@ -911,7 +911,7 @@
<German>EPA Cream Hühnersuppe</German>
<Hungarian>MRE krémes csirke leves</Hungarian>
<Italian>MRE Zuppa di pollo crema</Italian>
<Japanese>MRE クリーム チキン スープ</Japanese>
<Japanese>MRE クリームチキンスープ</Japanese>
<Korean>MRE 크림 치킨 수프</Korean>
<Polish>MRE Kremowy Rosół</Polish>
<Portuguese>MRE Sopa de creme de galinha</Portuguese>
@ -928,7 +928,7 @@
<German>Eine EPA mit Hühnersuppe. Für beste Wirkung mit Wasser und Hitze mischen.</German>
<Hungarian>A csirke leves tartalmú MRE. Keverjük össze vízzel és hővel a legjobb hatás érdekében</Hungarian>
<Italian>Un MRE contenente zuppa di pollo. Mescolare con acqua e calore per ottenere il massimo effetto</Italian>
<Japanese>チキン スープの MRE。水と混ぜて温めるとなお美味しい</Japanese>
<Japanese>クリームチキンスープの MRE。水と混ぜて温めるとなお美味しい</Japanese>
<Korean>치킨 수프가 들어 있는 MRE입니다. 물과 섞어 뜨겁게 먹을 때 가장 좋습니다</Korean>
<Polish>MRE zawierające rosół. Wymieszaj z wodą i podgrzej, aby uzyskać najlepszy efekt</Polish>
<Portuguese>Um MRE contendo Sopa de Frango. Misture com água e calor para melhor efeito</Portuguese>
@ -1047,7 +1047,7 @@
<German>EPA Huhn mit Kraut Knödel</German>
<Hungarian>MRE csirke Herb galuskával</Hungarian>
<Italian>MRE pollo con gnocchi alle erbe</Italian>
<Japanese>MRE 鶏肉団子</Japanese>
<Japanese>MRE チキンとハーブ団子</Japanese>
<Korean>MRE 허브 치킨 만두</Korean>
<Polish>MRE kurczak z pierogami ziołowymi.</Polish>
<Portuguese>MRE Frango com Dumplings de ervas</Portuguese>
@ -1064,7 +1064,7 @@
<German>Eine EPA mit Hühnchen mit Kräuterknödeln. Für den besten Geschmack erhitzen.</German>
<Hungarian>Egy MRE, amely csirkét és fűszeres gombócokat tartalmaz. Hő a legjobb hatás érdekében</Hungarian>
<Italian>Un MRE contenente pollo con gnocchi alle erbe. Calore per il miglior effetto</Italian>
<Japanese>鶏肉を団子で包んだ MRE。温めるとなお美味しい</Japanese>
<Japanese>チキンとハーブ団子のMRE。温めるとなお美味しい</Japanese>
<Korean>허브 치킨 만두 MRE입니다. 뜨겁게 먹을 때 가장 좋습니다</Korean>
<Polish>MRE z kurczakiem i pierogamii ziołowymi. Podgrzej dla najlepszego efektu</Polish>
<Portuguese>Uma MRE que contém Bolinhos De Frango Com Erva. Calor para melhor efeito</Portuguese>
@ -1107,10 +1107,20 @@
<Key ID="STR_ACE_Field_Rations_SunflowerSeeds_DisplayName">
<English>Sunflower Seeds</English>
<German>Sonnenblumenkerne</German>
<Korean>해바라기씨</Korean>
<Polish>Nasiona Słonecznika</Polish>
<Japanese>ヒマワリの種</Japanese>
<Chinesesimp>葵花籽</Chinesesimp>
<Russian>Семечки подсолнуха</Russian>
</Key>
<Key ID="STR_ACE_Field_Rations_SunflowerSeeds_Description">
<English>Roasted And Salted</English>
<German>Geröstet und Gesalzen</German>
<Korean>굽고 간을 했습니다</Korean>
<Polish>Pieczone i Solone</Polish>
<Japanese>炒って塩で味付け済</Japanese>
<Chinesesimp>焙烤盐焗</Chinesesimp>
<Russian>Поджаренные и солёные</Russian>
</Key>
</Package>
</Project>

View File

@ -38,7 +38,7 @@
<English>Points, and shows a virtual marker of where you are looking to nearby units. Can be held down.</English>
<German>Zeigt in der Nähe befindlichen Spielern die eigene Blickrichtung mit Hilfe eines Kreissymbols an.</German>
<French>Permet d'effectuer un pointage du doigt, ce qui a pour effet d'afficher sur l'écran des joueurs alliés proches un marqueur virtuel, indiquant la direction dans laquelle vous regardez. Peut être maintenu.</French>
<Polish>Wskazuje a także wyświetla wirtualny marker-okrąg w miejscu, w które patrzysz, dla wszystkich pobliskich jednostek. Może być przytrzymywany.</Polish>
<Polish>Wskazuje a także wyświetla wirtualny znacznik - okrąg w miejscu, w które patrzysz, dla wszystkich pobliskich jednostek. Może być przytrzymywany.</Polish>
<Hungarian>Mutat, és elhelyez egy virtuális jelölőt a nézett területhez közeli egységekhez. Lenyomva tartható.</Hungarian>
<Portuguese>Aponta e mostra um marcador virtual para onde você está olhando para unidades próximas. Pode ser utilizado para baixo.</Portuguese>
<Russian>Показывает пальцем и рисует виртуальный маркер в направлении взгляда ближайшим игрокам. Можно удерживать.</Russian>
@ -75,7 +75,7 @@
<Polish>Określ dystans na jakim można wskazywać coś palcem innym graczom. [domyślnie: 4m] </Polish>
<Hungarian>A maximális távolság, amelyben a közeli játékosoknak megjelenik az indikátor. [alapértelmezett: 4 méter]</Hungarian>
<Portuguese>Distância máxima entre jogadores para mostrar o apontamento [padrão: 4 metros]</Portuguese>
<Russian>Максимальная дальность между игроками для отображения индикатора указания пальцем [по-умолчанию: 4 метра]</Russian>
<Russian>Максимальная дальность между игроками для отображения индикатора указания пальцем [по умолчанию: 4 метра]</Russian>
<Spanish>Distancia máxima entre los jugadores para mostrar el indicador que señala [por defecto: 4 metros]</Spanish>
<Czech>Maximální vzdálenost mezi hráči pro ukázání směru [výchozí: 4 metry]</Czech>
<Italian>Distanza massima tra giocatori per mostrare l'indicatore di puntamento [default: 4 metri]</Italian>
@ -89,21 +89,37 @@
<English>Visual Marker Size Coefficient</English>
<German>Visueller Markergrößenkoeffizient</German>
<Korean>보이는 마커 크기 계수</Korean>
<Polish>Współczynnik wielkości wirtualnego znacznika</Polish>
<Japanese>指さし表記大きさ係数</Japanese>
<Chinesesimp>屏幕标记大小系数</Chinesesimp>
<Russian>Коэф. размера маркера</Russian>
</Key>
<Key ID="STR_ACE_Finger_sizeCoef_description">
<English>Adjusts the size of the visual marker.</English>
<German>Passt die Größe der visuellen Markierung an.</German>
<Korean>눈에 보이는 마커의 크기를 조정합니다.</Korean>
<Polish>Dostosowuje rozmiar wirtualnego znacznika.</Polish>
<Japanese>指さし表記の大きさを調整します。</Japanese>
<Chinesesimp>调整屏幕上显示的标记大小</Chinesesimp>
<Russian>Настраивает размер визуального маркера</Russian>
</Key>
<Key ID="STR_ACE_Finger_proximityScaling_displayName">
<English>Proximity Scaling</English>
<German>Näherungsskalierung</German>
<Korean>근접 스케일링</Korean>
<Polish>Skalowanie odległościowe</Polish>
<Japanese>近接性スケーリング</Japanese>
<Chinesesimp>根据距离缩放</Chinesesimp>
<Russian>Масштабирование от дальности</Russian>
</Key>
<Key ID="STR_ACE_Finger_proximityScaling_description">
<English>Scales the size of the visual marker based on the distance between the player observing and the player pointing.</English>
<German>Skaliert die Größe der visuellen Markierung basierend auf der Entfernung zwischen dem beobachtenden Spieler und dem zeigenden Spieler.</German>
<Korean>관찰하는 플레이어와 가리키는 플레이어 사이의 거리에 따라 보이는 마커의 크기를 조정합니다.</Korean>
<Polish>Skaluje rozmiar wirtualnego znacznika, na podstawie odległości między graczem obserwującym a graczem wskazującym.</Polish>
<Japanese>見ているプレーヤーと指さししたプレーヤーの距離に基づいて、指さし表記の大きさを調整します。</Japanese>
<Chinesesimp>根据观察的玩家和在指出方向的的玩家之间的距离调整视觉标记的大小。</Chinesesimp>
<Russian>Масштабирует размер визуального маркера в зависимости от дальности от игрока до точки указания.</Russian>
</Key>
<Key ID="STR_ACE_Finger_indicatorForSelf_name">
<English>Show pointing indicator to self</English>

View File

@ -223,8 +223,8 @@ if (_isBurning) exitWith {};
};
} else {
if ((animationState _unit) in PRONE_ROLLING_ANIMS) then {
// decrease intensity of burn, but if its too high this wont do anything substantial
_intensity = _intensity - (1 / _intensity);
// decrease intensity of burn
_intensity = _intensity * INTENSITY_DECREASE_MULT_ROLLING;
};
};
@ -289,7 +289,7 @@ if (_isBurning) exitWith {};
if (isServer) then {
_fireSound = createSoundSource ["Sound_Fire", _unitPos, [], 0];
_fireSound attachTo [_unit, [0, 0, 0], "destructionEffect1"];
_fireSound attachTo [_unit, [0, 0, 0], "Head"];
};
_unit setVariable [QGVAR(burning), true];

View File

@ -19,5 +19,5 @@
params ["_medic", "_patient"];
private _intensity = _patient getVariable [QGVAR(intensity), 0];
_intensity = _intensity * (4/5);
_intensity = _intensity * INTENSITY_DECREASE_MULT_PAT_DOWN;
_patient setVariable [QGVAR(intensity), _intensity, true];

View File

@ -1,6 +1,6 @@
[
QGVAR(enabled), "CHECKBOX",
["STR_A3_OPTIONS_ENABLED", LSTRING(Setting_Description)],
[ELSTRING(common,Enabled), LSTRING(Setting_Description)],
LSTRING(Category_DisplayName),
true, // default value
true, // isGlobal

View File

@ -30,3 +30,6 @@
"amovppnemstpsoptwbindnon_amovppnemevasoptwbindl",\
"amovppnemstpsoptwbindnon_amovppnemevasoptwbindr"\
]
#define INTENSITY_DECREASE_MULT_PAT_DOWN 0.8
#define INTENSITY_DECREASE_MULT_ROLLING INTENSITY_DECREASE_MULT_PAT_DOWN

View File

@ -73,6 +73,9 @@
<Chinesesimp>启用着火单位发出惨叫声</Chinesesimp>
<Korean>불 붙은 유닛 비명</Korean>
<German>Schreie von brennenden Einheiten aktivieren</German>
<Polish>Włącz krzyki podpalonych jednostek</Polish>
<Japanese>炎上中の悲鳴を有効</Japanese>
<Russian>Вкл. крики от горения</Russian>
</Key>
<Key ID="STR_ACE_Fire_Setting_EnableScreams_Description">
<English>Enables if units on fire will play the screaming sound</English>
@ -80,6 +83,9 @@
<Chinesesimp>启用着火的单位是否会发出惨叫声。</Chinesesimp>
<Korean>불이 붙은 유닛이 소리를 지르게 합니다</Korean>
<German>Aktiviert, ob brennende Einheiten den Schrei-Ton abspielen</German>
<Polish>Włącza, czy płonące jednostki będą odtwarzać dźwięk krzyku</Polish>
<Japanese>有効化すると炎上しているユニットが悲鳴を上げます</Japanese>
<Russian>Включает воспроизведение криков когда юнит загорается</Russian>
</Key>
<Key ID="STR_ACE_Fire_Setting_DropWeapon">
<English>Drop Weapons When on Fire</English>
@ -88,6 +94,8 @@
<Chinesesimp>着火时扔掉武器</Chinesesimp>
<Korean>불 붙을 경우 무기 내려놓음</Korean>
<German>Waffen fallen lassen, wenn in Brand geraten.</German>
<Japanese>炎上時に武器を落とす</Japanese>
<Russian>Бросать оружие из-за горения</Russian>
</Key>
<Key ID="STR_ACE_Fire_Setting_DropWeapon_Description">
<English>Controls whether units drop their weapons when on fire.</English>
@ -96,6 +104,8 @@
<Chinesesimp>控制单位在着火时是否丢掉武器。</Chinesesimp>
<Korean>유닛이 불에 붙이면 무기를 떨굴지를 결정합니다.</Korean>
<German>Steuert, ob Einheiten ihre Waffen fallen lassen, wenn sie brennen.</German>
<Japanese>ユニットが炎上時に武器を落とすかどうかを定義します。</Japanese>
<Russian>Должны ли юниты выбрасывать оружие когда загораются.</Russian>
</Key>
</Package>
</Project>

View File

@ -76,7 +76,7 @@ GVAR(objectRotationZ) = 0;
// Place object event handler
[QGVAR(deployFinished), {
params ["_args", "_elapsedTime", "_totalTime", "_errorCode"];
_args params ["_unit", "_side", "_typeOf", "_posASL", "_vectorDir", "_vectorUp"];
_args params ["_unit", "_side", "_typeOf", "_posASL", "_vectorDir", "_vectorUp", "_cost"];
private _newObject = _typeOf createVehicle _posASL;
_newObject setPosASL _posASL;
@ -96,7 +96,10 @@ GVAR(objectRotationZ) = 0;
[QGVAR(deployCanceled), {
params ["_args", "_elapsedTime", "_totalTime", "_errorCode"];
_args params ["_unit", "_side", "_typeOf", "_posASL", "_vectorDir", "_vectorUp"];
_args params ["_unit", "_side", "_typeOf", "_posASL", "_vectorDir", "_vectorUp", "_cost"];
// Refund if deploy was canceled
[_side, _cost] call FUNC(updateBudget);
// Reset animation
[_unit, "", 1] call EFUNC(common,doAnimation);

View File

@ -20,10 +20,10 @@ params ["_unit", "_object"];
TRACE_2("deployConfirm",_unit,_object);
private _side = side group _unit;
private _cost = [_side, typeOf _object] call FUNC(getCost);
private _typeOf = typeOf _object;
private _cost = [_side, _typeOf] call FUNC(getCost);
[_side, -_cost] call FUNC(updateBudget);
private _typeOf = typeOf _object;
private _posASL = getPosASL _object;
private _vectorUp = vectorUp _object;
private _vectorDir = vectorDir _object;
@ -35,7 +35,7 @@ private _totalTime = _cost * GVAR(timeCostCoefficient) + GVAR(timeMin); // time
private _perframeCheck = {
params ["_args", "_elapsedTime", "_totalTime", "_errorCode"];
_args params ["_unit", "_side", "_typeOf", "_posASL", "_vectorDir", "_vectorUp"];
_args params ["_unit", "_side", "_typeOf", "_posASL", "_vectorDir", "_vectorUp", "_cost"];
// Animation loop (required for longer constructions)
if (animationState _unit isNotEqualTo "AinvPknlMstpSnonWnonDnon_medic4") then {
@ -49,7 +49,7 @@ private _perframeCheck = {
[
_totalTime,
[_unit, _side, _typeOf, _posASL, _vectorDir, _vectorUp],
[_unit, _side, _typeOf, _posASL, _vectorDir, _vectorUp, _cost],
QGVAR(deployFinished),
QGVAR(deployCanceled),
LLSTRING(progressBarTitle),

View File

@ -96,7 +96,7 @@
<Chinese>要塞: 限制建造區</Chinese>
<Chinesesimp>设防:限制建造区</Chinesesimp>
<Polish>Fortyfikowanie: Limituj strefe budowania</Polish>
<Russian>Фортификация: ограничить зону постройки</Russian>
<Russian>Фортификация: Ограничить зону постройки</Russian>
<Turkish>Inşa Etme : Bölgede Inşa Etmeyi Limitle</Turkish>
<Korean>요새화: 건설 영역 제한</Korean>
</Key>
@ -151,7 +151,7 @@
<Chinesesimp>有设防工具</Chinesesimp>
<Japanese>要塞ツール所持の時</Japanese>
<Polish>Posiada narzędzie do fortyfikowania</Polish>
<Russian>Если имеется Инструмент</Russian>
<Russian>Если имеется инструмент</Russian>
<Turkish>Insa Etme Aleti Olanlara Göster</Turkish>
<Korean>요새화 도구를 들고 있을 때</Korean>
</Key>
@ -171,42 +171,63 @@
<Chinesesimp>时间—成本系数</Chinesesimp>
<Korean>시간-가격 계수</Korean>
<German>Zeit-Kosten-Koeffizient</German>
<Japanese>時間コスト係数</Japanese>
<Polish>Współczynnik Czas-Koszt</Polish>
<Russian>Коэф. время-цена</Russian>
</Key>
<Key ID="STR_ACE_Fortify_settingHintDesc_timeCostCoefficient">
<English>Coefficient used to determine time to build structure.&lt;br/&gt;A in Ax + b where x is cost of object</English>
<Chinesesimp>用于确定建造建筑所需时间的系数。&lt;br/&gt;A是 Ax+b中的一个参数其中x是物体的成本</Chinesesimp>
<English>Coefficient used to determine time to build structure.\nA in Ax + b where x is cost of object</English>
<Chinesesimp>用于确定建造建筑所需时间的系数。\nA是 Ax+b中的一个参数其中x是物体的成本</Chinesesimp>
<Korean>건축물을 지을 때 걸리는 시간을 계수를 적용하여 계산합니다.</Korean>
<German>Koeffizient zur Bestimmung der Bauzeit &lt;br/&gt;A in Ax + b, wobei x die Kosten des Objekts sind.</German>
<German>Koeffizient zur Bestimmung der Bauzeit \nA in Ax + b, wobei x die Kosten des Objekts sind.</German>
<Japanese>建造する時間を決定するために使用される係数。\n計算式はAx + bです。この係数はAであり、xは建造物のコストです。</Japanese>
<Polish>Współczynnik używany do określenia czasu budowy konstrukcji.\nA w Ax + b gdzie x jest kosztem obiektu</Polish>
<Russian>Коэффициент используемый для указания времени необходимого для возведения постройки.\nA в формуле Ax + b, где x - это цена объекта</Russian>
</Key>
<Key ID="STR_ACE_Fortify_settingHint_timeMin">
<English>Minimum Build Time</English>
<Chinesesimp>最短建造时间</Chinesesimp>
<Korean>최소 건축 시간</Korean>
<German>Minimale Bauzeit</German>
<Japanese>建造に掛かる最小の時間</Japanese>
<Polish>Minimalny czas budowy</Polish>
<Russian>Мин. время возведения</Russian>
</Key>
<Key ID="STR_ACE_Fortify_settingHintDesc_timeMin">
<English>Minimum time to build any structure.&lt;br/&gt;b in Ax + b where x is cost of object</English>
<Chinesesimp>建造任何建筑的最短时间。&lt;br/&gt;b是 Ax+b中的一个参数其中x是物体的成本</Chinesesimp>
<English>Minimum time to build any structure.\nb in Ax + b where x is cost of object</English>
<Chinesesimp>建造任何建筑的最短时间。\nb是 Ax+b中的一个参数其中x是物体的成本</Chinesesimp>
<Korean>건축물을 지을 때 걸리는 최소 시간을 계수를 적용하여 계산합니다.</Korean>
<German>Mindestzeit für den Bau eines beliebigen Bauwerks.&lt;br/&gt;b in Ax + b, wobei x die Kosten des Objekts sind.</German>
<German>Mindestzeit für den Bau eines beliebigen Bauwerks.\nb in Ax + b, wobei x die Kosten des Objekts sind.</German>
<Japanese>建造に掛かる最小の時間。\n計算式はAx + bです。この時間はbであり、xは建造物のコストです。</Japanese>
<Polish>Minimalny czas do zbudowania dowolenj konstrukcji.\nb w Ax + b gdzie x jest kosztem obiektu</Polish>
<Russian>Минимальное время для возведения любой постройки.\nb в формуле Ax + b, где x - это цена объекта</Russian>
</Key>
<Key ID="STR_ACE_Fortify_progressBarTitle">
<English>Building</English>
<Chinesesimp>建造</Chinesesimp>
<Korean>건설 중</Korean>
<German>Bauwerk</German>
<Japanese>建造</Japanese>
<Polish>Budowanie</Polish>
<Russian>Возведение</Russian>
</Key>
<Key ID="STR_ACE_Fortify_markObjectsOnMap">
<English>Create map markers</English>
<Chinesesimp>创建地图标记</Chinesesimp>
<Korean>지도에 마커 생성</Korean>
<German>Kartenmarkierungen erstellen</German>
<Japanese>マップマーカーを生成する</Japanese>
<Polish>Twórz znaczniki na mapie</Polish>
<Russian>Создавать маркера на карте</Russian>
</Key>
<Key ID="STR_ACE_Fortify_markObjectsOnMapDesc">
<English>Create map markers that look like terrain buildings when static fortifications are placed</English>
<Chinesesimp>在放置静态防御工事时,创建看起来像地形建筑的地图标记</Chinesesimp>
<Korean>건축물을 건설하고 나서 지도에 마커를 생성합니다</Korean>
<German>Erstellen von Kartenmarkierungen, die wie Gebäude im Gelände aussehen, wenn statische Befestigungen platziert werden</German>
<Japanese>静的な建築物が配置されたときに地形の建物のように見えるマップマーカーを生成します</Japanese>
<Polish>Utwórz znaczniki mapy, które wyglądają jak obiekty terenu, gdy umieszczane są statyczne fortyfikacje</Polish>
<Russian>Создавать маркера от статических фортификаций как от зданий на карте</Russian>
</Key>
<Key ID="STR_ACE_Fortify_markObjectsOnMapNone">
<English>Never</English>
@ -229,6 +250,9 @@
<Chinesesimp>对放置者友军单位</Chinesesimp>
<Korean>아군 유닛이 지은 건물만</Korean>
<German>Für, zum Erbauer, verbündete Einheiten.</German>
<Japanese>設置者の友軍に</Japanese>
<Polish>Dla jednostek sojuszniczych wobec stawiającego</Polish>
<Russian>Для союзников</Russian>
</Key>
<Key ID="STR_ACE_Fortify_markObjectsOnMapEveryone">
<English>For everyone</English>
@ -258,7 +282,7 @@
</Key>
<Key ID="STR_ACE_Fortify_smallGreen">
<English>Small (Green)</English>
<Russian>Малый (Зеленый)</Russian>
<Russian>Малый (зелёный)</Russian>
<Polish>Małe (Zielone)</Polish>
<Turkish>Küçük (Yeşil)</Turkish>
<Japanese>小型 (グリーン)</Japanese>
@ -278,7 +302,7 @@
</Key>
<Key ID="STR_ACE_Fortify_mediumGreen">
<English>Medium (Green)</English>
<Russian>Средний (Зеленый)</Russian>
<Russian>Средний (зелёный)</Russian>
<Polish>Średnie (Zielone)</Polish>
<Turkish>Orta (Yeşil)</Turkish>
<Japanese>中型 (グリーン)</Japanese>
@ -299,7 +323,7 @@
<Key ID="STR_ACE_Fortify_bigGreen">
<English>Big (Green)</English>
<Polish>Duże (Zielone)</Polish>
<Russian>Большой (Зеленый)</Russian>
<Russian>Большой (зелёный)</Russian>
<Turkish>Büyük (Yeşil)</Turkish>
<Japanese>大型 (グリーン)</Japanese>
<German>Groß (Grün)</German>

View File

@ -36,7 +36,7 @@
<Czech>Pouze letadla</Czech>
<Portuguese>Somente Aeronave</Portuguese>
<French>Avions seulement</French>
<Russian>Только для летательных аппаратов</Russian>
<Russian>Только авиация</Russian>
<Japanese>航空機のみ</Japanese>
<Polish>Tylko samoloty</Polish>
<Korean>비행기에만 적용</Korean>
@ -65,7 +65,7 @@
<English>G-Force Coefficient</English>
<Polish>Współczynnk przeciążenia</Polish>
<French>Coefficient de force gravitationnelle</French>
<Russian>Коэффициент перегрузки</Russian>
<Russian>Коэф. перегрузки</Russian>
<Japanese>G 効果係数</Japanese>
<Turkish>G-Kuvvet Katsayısı</Turkish>
<Spanish>Coeficiente de Fuerza G</Spanish>

View File

@ -235,12 +235,15 @@ class CfgGlasses {
ACE_OverlayCracked = "";
ACE_Resistance = 2;
ACE_Protection = 1;
ACE_Overlay_Angle = 180;
};
class G_AirPurifyingRespirator_02_base_F: G_AirPurifyingRespirator_01_base_F {
ACE_Overlay = "a3\ui_f_enoch\data\objects\data\optics_APR_02_CA.paa";
};
class G_RegulatorMask_base_F: None {
ACE_Overlay = "a3\ui_f_enoch\data\objects\data\optics_regulator_ca.paa";
ACE_OverlayCracked = "";
ACE_Overlay_Angle = 180;
};
};

View File

@ -44,10 +44,16 @@ if (_postProcessTintAmount != 0 && {GVAR(UsePP)} && GVAR(effects) in [1, 2]) the
};
private _imagePath = getText (_config >> ["ACE_Overlay", "ACE_OverlayCracked"] select GETBROKEN);
private _angle = getNumber (_config >> "ACE_Overlay_Angle");
if (_imagePath != "") then {
GVAR(GogglesLayer) cutRsc ["RscACE_Goggles", "PLAIN", 1, false];
(GLASSDISPLAY displayCtrl 10650) ctrlSetText _imagePath;
private _overlay = (GLASSDISPLAY displayCtrl 10650);
_overlay ctrlSetText _imagePath;
if ((_angle != 0) && {((ctrlAngle _overlay) # 0) != _angle}) then {
_overlay ctrlSetAngle [_angle, 0.5, 0.5, true];
};
};
if (GVAR(effects) in [2, 3]) then {

View File

@ -39,7 +39,7 @@
<Spanish>Mostrar efectos de las gafas en tercera persona</Spanish>
<Czech>Zobrazit efekt brýlí v třetí osobě</Czech>
<French>Effets des lunettes à la 3ème personne</French>
<Russian>Отображать эффект очков от третьего лица</Russian>
<Russian>Вкл. эффект очков от 3-го лица</Russian>
<Hungarian>Szemüveg-effekt mutatása külső nézetből</Hungarian>
<Polish>Włącz efekty gogli w trzeciej osobie</Polish>
<Portuguese>Mostrar efeitos de óculos em Terceira Pessoa</Portuguese>
@ -144,7 +144,7 @@
<Portuguese>Mostra a auto-interação de limpar os óculos</Portuguese>
<Spanish>Mostrar limpiar gafas en menú de auto-interacción</Spanish>
<Turkish>Kendi etkileşim menüsün de gözlük camlarını silmeyi göster</Turkish>
<Russian>Показывать Протереть очки в меню взаимодействия с собой</Russian>
<Russian>Показывать действие Протереть очки</Russian>
<Korean>자기상호작용에 고글 닦기 선택 보이기</Korean>
</Key>
</Package>

View File

@ -195,7 +195,7 @@
<Italian>M127A1 Bengala (Bianco)</Italian>
<Polish>Flara ręczna sygnałowa M127A1 (biała)</Polish>
<Portuguese>M127A1 Sinalizador (Branco)</Portuguese>
<Russian>M127A1 Фальшфейер (Белый)</Russian>
<Russian>M127A1 Фальшфейер (белый)</Russian>
<Spanish>Bengala M127A1 (Blanca)</Spanish>
<French>M127A1 Feu à main (Blanc)</French>
<Japanese>M127A1 信号弾 (白)</Japanese>
@ -212,7 +212,7 @@
<Italian>M127A1 Bengala (Rosso)</Italian>
<Polish>Flara ręczna sygnałowa M127A1 (czerwona)</Polish>
<Portuguese>M127A1 Sinalizador (Vermelho)</Portuguese>
<Russian>M127A1 Фальшфейер (Красный)</Russian>
<Russian>M127A1 Фальшфейер (красный)</Russian>
<Spanish>Bengala M127A1 (Roja)</Spanish>
<French>M127A1 Feu à main (Rouge)</French>
<Japanese>M127A1 信号弾 (赤)</Japanese>
@ -229,7 +229,7 @@
<Italian>M127A1 Bengala (Verde)</Italian>
<Polish>Flara ręczna sygnałowa M127A1 (zielona)</Polish>
<Portuguese>M127A1 Sinalizador (Verde)</Portuguese>
<Russian>M127A1 Фальшфейер (Зелёный)</Russian>
<Russian>M127A1 Фальшфейер (зелёный)</Russian>
<Spanish>Bengala M127A1 (Verde)</Spanish>
<French>M127A1 Feu à main (Vert)</French>
<Japanese>M127A1 信号弾 (緑)</Japanese>
@ -246,7 +246,7 @@
<Italian>M127A1 Bengala (Giallo)</Italian>
<Polish>Flara ręczna sygnałowa M127A1 (żółta)</Polish>
<Portuguese>M127A1 Sinalizador (Amarelo)</Portuguese>
<Russian>M127A1 Фальшфейер (Жёлтый)</Russian>
<Russian>M127A1 Фальшфейер (жёлтый)</Russian>
<Spanish>Bengala M127A1 (Amarilla)</Spanish>
<French>M127A1 Feu à main (Jaune)</French>
<Japanese>M127A1 信号弾 (黄)</Japanese>
@ -263,7 +263,7 @@
<Italian>Bengala (Bianco)</Italian>
<Polish>Flara ręczna (biała)</Polish>
<Portuguese>Sinalizador de Mão (Branco)</Portuguese>
<Russian>Фальшфейер (Белый)</Russian>
<Russian>Фальшфейер (белый)</Russian>
<Spanish>Bengala (Blanca)</Spanish>
<French>Feu à main (Blanc)</French>
<Japanese>白の手持ち式信号弾</Japanese>
@ -280,7 +280,7 @@
<Italian>Bengala (Rosso)</Italian>
<Polish>Flara ręczna (czerwona)</Polish>
<Portuguese>Sinalizador de Mão (Vermelho)</Portuguese>
<Russian>Фальшфейер (Красный)</Russian>
<Russian>Фальшфейер (красный)</Russian>
<Spanish>Bengala (Roja)</Spanish>
<French>Feu à main (Rouge)</French>
<Japanese>赤の手持ち式信号弾</Japanese>
@ -297,7 +297,7 @@
<Italian>Bengala (Verde)</Italian>
<Polish>Flara ręczna (zielona)</Polish>
<Portuguese>Sinalizador de Mão (Verde)</Portuguese>
<Russian>Фальшфейер (Зелёный)</Russian>
<Russian>Фальшфейер (зелёный)</Russian>
<Spanish>Bengala (Verde)</Spanish>
<French>Feu à main (Vert)</French>
<Japanese>緑の手持ち式信号弾</Japanese>
@ -314,7 +314,7 @@
<Italian>Bengala (Giallo)</Italian>
<Polish>Flara ręczna (żółta)</Polish>
<Portuguese>Sinalizador de Mão (Amarelo)</Portuguese>
<Russian>Фальшфейер (Жёлтый)</Russian>
<Russian>Фальшфейер (жёлтый)</Russian>
<Spanish>Bengala (Amarilla)</Spanish>
<French>Feu à main (Jaune)</French>
<Japanese>黄の手持ち式信号弾</Japanese>
@ -332,7 +332,7 @@
<Italian>M127A1 (Bianco)</Italian>
<Polish>M127A1 (biała)</Polish>
<Portuguese>M127A1 (Branco)</Portuguese>
<Russian>M127A1 (Белый)</Russian>
<Russian>M127A1 (белый)</Russian>
<Spanish>M127A1 (Blanca)</Spanish>
<Japanese>M127A1 (白)</Japanese>
<Korean>M127A1 (하양)</Korean>
@ -349,7 +349,7 @@
<Italian>M127A1 (Rosso)</Italian>
<Polish>M127A1 (czerwona)</Polish>
<Portuguese>M127A1 (Vermelho)</Portuguese>
<Russian>M127A1 (Красный)</Russian>
<Russian>M127A1 (красный)</Russian>
<Spanish>M127A1 (Roja)</Spanish>
<Japanese>M127A1 (赤)</Japanese>
<Korean>M127A1 (빨강)</Korean>
@ -366,7 +366,7 @@
<Italian>M127A1 (Verde)</Italian>
<Polish>M127A1 (zielona)</Polish>
<Portuguese>M127A1 (Verde)</Portuguese>
<Russian>M127A1 (Зелёный)</Russian>
<Russian>M127A1 (зелёный)</Russian>
<Spanish>M127A1 (Verde)</Spanish>
<Japanese>M127A1 (緑)</Japanese>
<Korean>M127A1 (초록)</Korean>
@ -383,7 +383,7 @@
<Italian>M127A1 (Giallo)</Italian>
<Polish>M127A1 (żółta)</Polish>
<Portuguese>M127A1 (Amarelo)</Portuguese>
<Russian>M127A1 (Жёлтый)</Russian>
<Russian>M127A1 (жёлтый)</Russian>
<Spanish>M127A1 (Amarilla)</Spanish>
<Japanese>M127A1 (黄)</Japanese>
<Korean>M127A1 (노랑)</Korean>
@ -394,7 +394,7 @@
<Key ID="STR_ACE_Grenades_Incendiary_Name">
<English>AN-M14 Incendiary Grenade</English>
<German>AN-M14 Brandsatz</German>
<Russian>AN-M14 Зажигательная граната</Russian>
<Russian>AN-M14 зажигательная граната</Russian>
<Japanese>AN-M14 焼夷手榴弾</Japanese>
<Polish>Granat zapalający AN-M14</Polish>
<Korean>AN-M14 소이 수류탄</Korean>
@ -461,7 +461,7 @@
<Polish>M583 Flara oświetlająca (Biała)</Polish>
<Italian>M583 Granata con bengala (Bianca)</Italian>
<Japanese>M583 照明弾 (白)</Japanese>
<Russian>M583 Осветит. ракета (Белая)</Russian>
<Russian>M583 Осветит. ракета (белая)</Russian>
<Portuguese>M583 Sinalizador de Iluminação (Branco)</Portuguese>
<Chinese>M583 照明彈(白色)</Chinese>
<Chinesesimp>M583 照明弹(白色)</Chinesesimp>
@ -477,7 +477,7 @@
<Polish>M662 Flara oświetlająca (Czerwona)</Polish>
<Italian>M662 Granata con bengala (Rossa)</Italian>
<Japanese>M662 照明弾 (赤)</Japanese>
<Russian>M662 Осветит. ракета (Красная)</Russian>
<Russian>M662 Осветит. ракета (красная)</Russian>
<Portuguese>M662 Sinalizador de Iluminação (Vermelho)</Portuguese>
<Chinese>M662 照明彈(紅色)</Chinese>
<Chinesesimp>M662 照明弹(红色)</Chinesesimp>
@ -493,7 +493,7 @@
<Polish>M661 Flara oświetlająca (Zielona)</Polish>
<Italian>M661 Granata con bengala (Verde)</Italian>
<Japanese>M661 照明弾 (緑)</Japanese>
<Russian>M661 Осветит. ракета (Зеленая)</Russian>
<Russian>M661 Осветит. ракета (зелёная)</Russian>
<Portuguese>M661 Sinalizador de Iluminação (Verde)</Portuguese>
<Chinese>M661 照明彈(綠色)</Chinese>
<Chinesesimp>M661 照明弹(绿色)</Chinesesimp>
@ -520,24 +520,24 @@
<Korean>종류: 낙하식 적외선 조명탄</Korean>
</Key>
<Key ID="STR_ACE_Grenades_40mm_flare_ir">
<English>M992 Illumination IR Flare</English>
<German>M992 IR Leuchtfackel</German>
<Polish>M992 Oświetlająca flara IR</Polish>
<Italian>M992 Granata con infrarosso</Italian>
<Japanese>M992 赤外線照明弾</Japanese>
<Russian>M992 ИК-осветительная ракета</Russian>
<Portuguese>M992 Sinalizador de Iluminação Infravermelho</Portuguese>
<English>M992 Illumination Flare (IR)</English>
<German>M992 Leuchtfackel (IR)</German>
<Polish>M992 Flara oświetlająca (IR)</Polish>
<Italian>M992 Granata con bengala (Infrarosso)</Italian>
<Japanese>M992 照明弾 (赤外線)</Japanese>
<Russian>M992 Осветит. ракета (ИК)</Russian>
<Portuguese>M992 Sinalizador de Iluminação (Infravermelho)</Portuguese>
<Chinese>M992 紅外線照明彈</Chinese>
<Chinesesimp>M992 红外照明弹</Chinesesimp>
<French>M992 Fusée IR</French>
<Czech>M992 Infračervená světlice</Czech>
<Turkish>M992 Illumination IR Flare</Turkish>
<Spanish>M992 Bengala de iluminación infrarroja</Spanish>
<Korean>M992 적외선 조명탄</Korean>
<French>M992 Fusée éclairante (IR)</French>
<Czech>M992 Světlice (Infračervená)</Czech>
<Turkish>M992 Aydınlatma Fişeği (IR)</Turkish>
<Spanish>M992 Bengala de iluminación (Infrarroja)</Spanish>
<Korean>M992 조명탄 (적외선)</Korean>
</Key>
<Key ID="STR_ACE_Grenades_SatchelCharge_Remote_Mag_Throwable">
<English>Explosive Satchel (Throwable)</English>
<Russian>Ранец со взрывчаткой (Метательный)</Russian>
<Russian>Ранец со взрывчаткой (метательный)</Russian>
<French>Charge en sacoche (lançable)</French>
<Japanese>梱包爆薬 (投てき仕様)</Japanese>
<Spanish>Carga de mochila explosiva (Lanzable)</Spanish>
@ -570,7 +570,7 @@
</Key>
<Key ID="STR_ACE_Grenades_DemoCharge_Remote_Mag_Throwable">
<English>Explosive Charge (Throwable)</English>
<Russian>Заряд со взрывчаткой (Метательный)</Russian>
<Russian>Заряд со взрывчаткой (метательный)</Russian>
<French>Charge explosive (lançable)</French>
<Japanese>爆薬ブロック (投てき仕様)</Japanese>
<Spanish>Carga explosiva (Lanzable)</Spanish>

View File

@ -44,4 +44,20 @@ PREP_RECOMPILE_END;
GVAR(arsenalCache) = nil;
}] call CBA_fnc_addEventHandler;
["CBA_loadoutSet", {
params ["_unit", "_loadout", "_extendedInfo"];
private _gunbagWeapon = _extendedInfo getOrDefault [QGVAR(gunbagWeapon), []];
if (_gunbagWeapon isNotEqualTo []) then {
(backpackContainer _unit) setVariable [QGVAR(gunbagWeapon), _gunbagWeapon, true];
};
}] call CBA_fnc_addEventHandler;
["CBA_loadoutGet", {
params ["_unit", "_loadout", "_extendedInfo"];
private _gunbagWeapon = (backpackContainer _unit) getVariable [QGVAR(gunbagWeapon), []];
if (_gunbagWeapon isNotEqualTo []) then {
_extendedInfo set [QGVAR(gunbagWeapon), _gunbagWeapon];
};
}] call CBA_fnc_addEventHandler;
ADDON = true;

View File

@ -80,7 +80,7 @@
<Key ID="STR_ACE_Gunbag_SwapGunbagEnabled_DisplayName">
<English>Enable Weapon Swap</English>
<Polish>Aktywuj wymianę broni</Polish>
<Russian>Включить обмен оружием</Russian>
<Russian>Вкл. обмен оружием</Russian>
<French>Activer l'échange d'arme</French>
<Japanese>武器交換を有効化</Japanese>
<Turkish>Silah Değiştirmeyi Etkinleştir</Turkish>

View File

@ -22,14 +22,18 @@
// Check if naked unit bug happened
if (_local && {uniform _unit == ""}) then {
scopeName QGVAR(applyLoadout);
INFO_1("Unit [%1] became local with broken loadout - attempting to fix",_unit);
if (XGVAR(transferLoadout) == 1) then {
// Transferred loadout, if unavailable reset to config default (still better than naked)
_unit setUnitLoadout (_unit getVariable [QGVAR(loadout), typeOf _unit]);
} else {
// Config default loadout
_unit setUnitLoadout (typeOf _unit);
private _loadout = _unit getVariable [QGVAR(loadout), []];
if (_loadout isNotEqualTo []) then {
[_unit, _loadout] call CBA_fnc_setLoadout;
breakOut QGVAR(applyLoadout);
};
};
// Config default loadout
_unit setUnitLoadout (typeOf _unit);
};
}] call CBA_fnc_addClassEventHandler;
};

View File

@ -96,7 +96,7 @@ private _numTransferredHC3 = 0;
// Save gear if unit about to be transferred with current loadout (naked unit work-around)
if (XGVAR(transferLoadout) == 1) then {
_x setVariable [QGVAR(loadout), getUnitLoadout _x, true];
_x setVariable [QGVAR(loadout), [_x] call CBA_fnc_getLoadout, true];
};
} forEach (units _x);
};

View File

@ -8,4 +8,19 @@ PREP_RECOMPILE_END;
#include "initSettings.sqf"
["CBA_loadoutSet", {
params ["_unit", "_loadout", "_extendedInfo"];
if (_extendedInfo getOrDefault ["ace_earplugs", false]) then {
_unit setVariable ["ACE_hasEarPlugsIn", true, true];
[[true]] remoteExec [QFUNC(updateVolume), _unit];
};
}] call CBA_fnc_addEventHandler;
["CBA_loadoutGet", {
params ["_unit", "_loadout", "_extendedInfo"];
if (_unit getVariable ["ACE_hasEarPlugsin", false]) then {
_extendedInfo set ["ace_earplugs", true]
};
}] call CBA_fnc_addEventHandler;
ADDON = true;

View File

@ -123,7 +123,7 @@
<English>Disable ear ringing</English>
<French>Désactiver les bourdonnements</French>
<Spanish>Desactivar zumbido de oídos</Spanish>
<Russian>Отключить звон в ушах</Russian>
<Russian>Откл. звон в ушах</Russian>
<German>Knalltrauma deaktivieren</German>
<Czech>Vypnout pískání v uších</Czech>
<Polish>Wyłącz dzwonienie w uszach</Polish>

View File

@ -10,7 +10,7 @@
<Korean>넘어질 때 발생하는 최소 피해량</Korean>
<German>Mindestschaden, um Sturz auszulösen</German>
<Polish>Minimalne obrażenie, żeby aktywować spadanie</Polish>
<Russian>Минимальный урон для активации падения</Russian>
<Russian>Мин. урон для активации падения</Russian>
<Portuguese>Dano Mínimo para ativar queda</Portuguese>
<French>Dommages minimaux pour faire tomber le joueur</French>
<Czech>Minimum škody pro aktivaci spadnutí</Czech>

View File

@ -0,0 +1 @@
z\ace\addons\hunterkiller

View File

@ -0,0 +1,15 @@
class Extended_PreStart_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_SCRIPT(XEH_preStart));
};
};
class Extended_PreInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_SCRIPT(XEH_preInit));
};
};
class Extended_PostInit_EventHandlers {
class ADDON {
init = QUOTE(call COMPILE_SCRIPT(XEH_postInit));
};
};

View File

@ -0,0 +1,24 @@
class CfgVehicles {
class Tank_F;
class MBT_01_base_F: Tank_F {
ADDON = 1; // same as ADDON[] = {{{0}, 1}, {{0,0}, 3}};
};
class MBT_01_arty_base_F: MBT_01_base_F {
ADDON = 0;
};
class MBT_01_mlrs_base_F: MBT_01_base_F {
ADDON = 0;
};
class MBT_02_base_F: Tank_F {
ADDON = 1;
};
class MBT_02_arty_base_F: MBT_02_base_F {
ADDON = 0;
};
class MBT_03_base_F: Tank_F {
ADDON = 1;
};
class MBT_04_base_F: Tank_F {
ADDON = 1;
};
};

View File

@ -0,0 +1,4 @@
ace_hunterkiller
==========
Allows a tank commander to re-aim the main turret or to aim their turret at the what the main turret is looking at

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