Merge branch 'master' into artilleryTables

This commit is contained in:
PabstMirror 2019-03-14 13:50:08 -05:00
commit 429c11ed19
46 changed files with 1173 additions and 94 deletions

View File

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

View File

@ -1 +1 @@
3.12.5.40 3.12.6.43

View File

@ -55,7 +55,7 @@ class Cfg3DEN {
}; };
class Category: ctrlToolboxPictureKeepAspect { class Category: ctrlToolboxPictureKeepAspect {
idc = IDC_ATTRIBUTE_CATEGORY; idc = IDC_ATTRIBUTE_CATEGORY;
onToolBoxSelChanged = QUOTE([ctrlParentControlsGroup (_this select 0)] call FUNC(attributeAddItems)); onToolBoxSelChanged = QUOTE([ARR_2(ctrlParentControlsGroup (_this select 0), _this select 1)] call FUNC(attributeCategory));
x = QUOTE(5 * ATTRIBUTE_W); x = QUOTE(5 * ATTRIBUTE_W);
y = QUOTE(15 * ATTRIBUTE_H); y = QUOTE(15 * ATTRIBUTE_H);
w = QUOTE(125 * ATTRIBUTE_W); w = QUOTE(125 * ATTRIBUTE_W);
@ -129,7 +129,14 @@ class Cfg3DEN {
}; };
class SearchButton: ctrlButtonPicture { class SearchButton: ctrlButtonPicture {
idc = IDC_ATTRIBUTE_SEARCH_BUTTON; idc = IDC_ATTRIBUTE_SEARCH_BUTTON;
onButtonClick = QUOTE(((ctrlParentControlsGroup (_this select 0)) controlsGroupCtrl IDC_ATTRIBUTE_SEARCHBAR) ctrlSetText ''; [ctrlParentControlsGroup (_this select 0)] call FUNC(attributeAddItems)); onButtonClick = QUOTE( \
params ['_searchButton']; \
private _controlsGroup = ctrlParentControlsGroup _searchButton; \
private _searchBar = _controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_SEARCHBAR; \
_searchBar ctrlSetText ''; \
ctrlSetFocus _searchBar; \
[_controlsGroup] call FUNC(attributeAddItems); \
);
text = "\a3\Ui_f\data\GUI\RscCommon\RscButtonSearch\search_start_ca.paa"; text = "\a3\Ui_f\data\GUI\RscCommon\RscButtonSearch\search_start_ca.paa";
x = QUOTE(5 * ATTRIBUTE_W); x = QUOTE(5 * ATTRIBUTE_W);
y = QUOTE(101.83 * ATTRIBUTE_H); y = QUOTE(101.83 * ATTRIBUTE_H);
@ -140,9 +147,16 @@ class Cfg3DEN {
class SearchBar: ctrlEdit { class SearchBar: ctrlEdit {
idc = IDC_ATTRIBUTE_SEARCHBAR; idc = IDC_ATTRIBUTE_SEARCHBAR;
onKeyUp = QUOTE([ctrlParentControlsGroup (_this select 0)] call FUNC(attributeAddItems)); onKeyUp = QUOTE([ctrlParentControlsGroup (_this select 0)] call FUNC(attributeAddItems));
onMouseButtonClick = QUOTE( \
params [ARR_2('_searchBar','_button')]; \
if (_button != 1) exitWith {}; \
_searchBar ctrlSetText ''; \
ctrlSetFocus _searchBar; \
[ctrlParentControlsGroup _searchBar] call FUNC(attributeAddItems); \
);
x = QUOTE(11 * ATTRIBUTE_W); x = QUOTE(11 * ATTRIBUTE_W);
y = QUOTE(101.83 * ATTRIBUTE_H); y = QUOTE(101.83 * ATTRIBUTE_H);
w = QUOTE(55 * ATTRIBUTE_W); w = QUOTE(40 * ATTRIBUTE_W);
h = QUOTE(5 * ATTRIBUTE_H); h = QUOTE(5 * ATTRIBUTE_H);
}; };
class ClearButton: ctrlButton { class ClearButton: ctrlButton {
@ -162,6 +176,27 @@ class Cfg3DEN {
tooltip = CSTRING(AttributeExport_Tooltip); tooltip = CSTRING(AttributeExport_Tooltip);
x = QUOTE(79 * ATTRIBUTE_W); x = QUOTE(79 * ATTRIBUTE_W);
}; };
class ImportButton: ClearButton {
idc = IDC_ATTRIBUTE_IMPORT_BUTTON;
onButtonClick = QUOTE([ctrlParentControlsGroup (_this select 0)] call FUNC(attributeImport));
text = CSTRING(buttonImportText);
tooltip = CSTRING(AttributeImport_Tooltip);
x = QUOTE(53 * ATTRIBUTE_W);
};
class AddCompatible: ctrlButton {
idc = IDC_ATTRIBUTE_ADD_COMPATIBLE;
style = ST_CENTER;
onButtonClick = QUOTE([ctrlParentControlsGroup (_this select 0)] call FUNC(attributeAddCompatible));
text = CSTRING(AttributeAddCompatible_DisplayName);
tooltip = CSTRING(AttributeAddCompatible_Tooltip);
font = "RobotoCondensedLight";
x = QUOTE(98.75 * ATTRIBUTE_W);
y = QUOTE(10.5 * ATTRIBUTE_H);
w = QUOTE(31.25 * ATTRIBUTE_W);
h = QUOTE(4 * ATTRIBUTE_H);
sizeEx = QUOTE(4 * ATTRIBUTE_H);
colorBackground[] = {0, 0, 0, 0.5};
};
}; };
}; };
}; };

View File

@ -2,9 +2,12 @@ PREP(addDefaultLoadout);
PREP(addListBoxItem); PREP(addListBoxItem);
PREP(addStat); PREP(addStat);
PREP(addVirtualItems); PREP(addVirtualItems);
PREP(attributeAddCompatible);
PREP(attributeAddItems); PREP(attributeAddItems);
PREP(attributeCategory);
PREP(attributeClear); PREP(attributeClear);
PREP(attributeDblClick); PREP(attributeDblClick);
PREP(attributeImport);
PREP(attributeInit); PREP(attributeInit);
PREP(attributeKeyDown); PREP(attributeKeyDown);
PREP(attributeLoad); PREP(attributeLoad);

View File

@ -162,6 +162,8 @@
#define IDC_ATTRIBUTE_SEARCHBAR 8106 #define IDC_ATTRIBUTE_SEARCHBAR 8106
#define IDC_ATTRIBUTE_CLEAR_BUTTON 8107 #define IDC_ATTRIBUTE_CLEAR_BUTTON 8107
#define IDC_ATTRIBUTE_EXPORT_BUTTON 8108 #define IDC_ATTRIBUTE_EXPORT_BUTTON 8108
#define IDC_ATTRIBUTE_IMPORT_BUTTON 8109
#define IDC_ATTRIBUTE_ADD_COMPATIBLE 8110
#define SYMBOL_ITEM_NONE "" #define SYMBOL_ITEM_NONE ""
#define SYMBOL_ITEM_REMOVE "×" #define SYMBOL_ITEM_REMOVE "×"

View File

@ -0,0 +1,75 @@
#include "script_component.hpp"
#include "..\defines.hpp"
/*
* Author: mharis001
* Adds compatible attachments or magazines for all weapons in 3DEN attribute.
*
* Arguments:
* 0: Attribute controls group <CONTROL>
*
* Return Value:
* None
*
* Example:
* [CONTROL] call ace_arsenal_fnc_attributeAddCompatible
*
* Public: No
*/
params ["_controlsGroup"];
private _category = lbCurSel (_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_CATEGORY);
// Exit if selected category is not attachments or magazines
if !(_category in [4, 5, 6, 7, 8]) exitWith {};
private _configItems = +(uiNamespace getVariable [QGVAR(configItems), []]);
private _attributeValue = uiNamespace getVariable [QGVAR(attributeValue), [[], 0]];
_attributeValue params ["_attributeItems"];
// Get list of all weapons in attribute items
(_configItems select 0) params ["_primaryWeapons", "_secondaryWeapons", "_handgunWeapons"];
private _attributeWeapons = _attributeItems select {_x in _primaryWeapons || {_x in _secondaryWeapons} || {_x in _handgunWeapons}};
// Add compatible attachments or magazines to attribute
private _cfgWeapons = configFile >> "CfgWeapons";
private _itemsToAdd = [];
if (_category == 8) then {
private _magazineGroups = uiNamespace getVariable QGVAR(magazineGroups);
private _cfgMagazines = configFile >> "CfgMagazines";
{
private _weaponConfig = _cfgWeapons >> _x;
{
private _muzzleConfig = if (_x == "this") then {_weaponConfig} else {_weaponConfig >> _x};
// Only add existent magazines and ensure correct classname case
private _magazines = getArray (_muzzleConfig >> "magazines") select {isClass (_cfgMagazines >> _x)};
_magazines = _magazines apply {configName (_cfgMagazines >> _x)};
_itemsToAdd append _magazines;
{
_itemsToAdd append ([_magazineGroups, toLower _x] call CBA_fnc_hashGet);
} forEach getArray (_muzzleConfig >> "magazineWell");
} forEach getArray (_weaponConfig >> "muzzles");
} forEach _attributeWeapons;
} else {
private _attachmentCategory = _category - 4;
private _filter = ["optic", "pointer", "muzzle", "bipod"] select _attachmentCategory;
{
_itemsToAdd append ([_x, _filter] call CBA_fnc_compatibleItems);
} forEach _attributeWeapons;
// Only add items with scope of 2 and ensure correct classname case
_itemsToAdd = _itemsToAdd select {getNumber (_cfgWeapons >> _x >> "scope") == 2};
_itemsToAdd = _itemsToAdd apply {configName (_cfgWeapons >> _x)};
};
_attributeItems append _itemsToAdd;
_attributeValue set [0, _attributeItems arrayIntersect _attributeItems];
// Refresh the list for new items
[_controlsGroup] call FUNC(attributeAddItems);

View File

@ -0,0 +1,32 @@
#include "script_component.hpp"
#include "..\defines.hpp"
/*
* Author: mharis001
* Handles changing the category in 3DEN attribute.
*
* Arguments:
* 0: Attribute controls group <CONTROL>
* 1: Category <NUMBER>
*
* Return Value:
* None
*
* Example:
* [CONTROL, 0] call ace_arsenal_fnc_attributeCategory
*
* Public: No
*/
params ["_controlsGroup", "_category"];
// Store selected category
uiNamespace setVariable [QGVAR(attributeCategory), _category];
// Show add compatible items button when category is attachments or magazines
private _compatibleButton = _controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_ADD_COMPATIBLE;
private _enable = _category in [4, 5, 6, 7, 8];
_compatibleButton ctrlEnable _enable;
_compatibleButton ctrlShow _enable;
// Refresh the list for selected category
[_controlsGroup] call FUNC(attributeAddItems);

View File

@ -0,0 +1,49 @@
#include "script_component.hpp"
/*
* Author: mharis001
* Handles importing items list from clipboard into 3DEN attribute.
*
* Arguments:
* 0: Attribute controls group <CONTROL>
*
* Return Value:
* None
*
* Example:
* [CONTROL] call ace_arsenal_fnc_attributeImport
*
* Public: No
*/
params ["_controlsGroup"];
private _importList = call compile copyFromClipboard;
// Verify import list is in correct format
if (isNil "_importList" || {!(_importList isEqualType [])} || {!(_importList isEqualTypeAll "")}) exitWith {
playSound ["3DEN_notificationWarning", true];
};
// Ensure imported items are in scanned config array and classname case is correct
private _configItems = +(uiNamespace getVariable [QGVAR(configItems), []]);
private _configItemsFlat = _configItems select [2, 16];
_configItemsFlat append (_configItems select 0);
_configItemsFlat append (_configItems select 1);
private _filteredList = [];
{
private _item = _x;
{
private _index = _x findIf {_x == _item};
if (_index > -1) then {
_filteredList pushBackUnique (_x select _index);
};
} forEach _configItemsFlat;
} forEach _importList;
private _attributeValue = uiNamespace getVariable [QGVAR(attributeValue), [[], 0]];
_attributeValue set [0, _filteredList];
// Refresh the list for new items
[_controlsGroup] call FUNC(attributeAddItems);

View File

@ -34,4 +34,8 @@ if (_value select 1 > 0) then {
(_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_LIST_RIGHT) ctrlSetText SYMBOL_ITEM_REMOVE; (_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_LIST_RIGHT) ctrlSetText SYMBOL_ITEM_REMOVE;
}; };
[_controlsGroup] call FUNC(attributeAddItems); // Trigger category selection for last selected category to populate list
private _category = uiNamespace getVariable [QGVAR(attributeCategory), 0];
(_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_CATEGORY) lbSetCurSel _category;
[_controlsGroup, _category] call FUNC(attributeCategory);

View File

@ -57,7 +57,7 @@ private _configCfgWeapons = configFile >> "CfgWeapons"; //Save this lookup in va
case (_itemInfoType == TYPE_HEADGEAR): { case (_itemInfoType == TYPE_HEADGEAR): {
(_cargo select 3) pushBackUnique _className; (_cargo select 3) pushBackUnique _className;
}; };
/* Uniform */\ /* Uniform */
case (_itemInfoType == TYPE_UNIFORM): { case (_itemInfoType == TYPE_UNIFORM): {
(_cargo select 4) pushBackUnique _className; (_cargo select 4) pushBackUnique _className;
}; };

View File

@ -103,6 +103,7 @@
<Key ID="STR_ACE_Arsenal_buttonSaveTooltip_shiftClick"> <Key ID="STR_ACE_Arsenal_buttonSaveTooltip_shiftClick">
<English>[Shift+Click to save to mission defaults]</English> <English>[Shift+Click to save to mission defaults]</English>
<Japanese>[Shift + クリック] でミッション標準として保存します</Japanese> <Japanese>[Shift + クリック] でミッション標準として保存します</Japanese>
<Polish>Shift + Klik aby zapisac jako domyślne dla misji </Polish>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_buttonRenameText"> <Key ID="STR_ACE_Arsenal_buttonRenameText">
<English>Rename</English> <English>Rename</English>
@ -824,7 +825,7 @@
</Key> </Key>
<Key ID="STR_ACE_Arsenal_Whitelist"> <Key ID="STR_ACE_Arsenal_Whitelist">
<English>Whitelist</English> <English>Whitelist</English>
<Polish>Biała lista</Polish> <Polish>Biała lista (lista wybranych)</Polish>
<Spanish>Lista blanca</Spanish> <Spanish>Lista blanca</Spanish>
<German>Whitelist</German> <German>Whitelist</German>
<Czech>Seznam povolených</Czech> <Czech>Seznam povolených</Czech>
@ -842,7 +843,7 @@
<English>Blacklist</English> <English>Blacklist</English>
<Japanese>禁止リスト</Japanese> <Japanese>禁止リスト</Japanese>
<Italian>Lista Nera</Italian> <Italian>Lista Nera</Italian>
<Polish>Czarna lista</Polish> <Polish>Czarna lista (lista wykluczeń)</Polish>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_Items"> <Key ID="STR_ACE_Arsenal_Items">
<English>Items</English> <English>Items</English>
@ -866,6 +867,18 @@
<Italian>Esporta l'attuale lista di elementi come un array, per essere usati negli script</Italian> <Italian>Esporta l'attuale lista di elementi come un array, per essere usati negli script</Italian>
<Polish>Eksportuj obecną listę przedmiotów jako tablicę do wykorzystania w skryptach</Polish> <Polish>Eksportuj obecną listę przedmiotów jako tablicę do wykorzystania w skryptach</Polish>
</Key> </Key>
<Key ID="STR_ACE_Arsenal_AttributeImport_Tooltip">
<English>Import items list array from clipboard (should be the same format as export)</English>
<Polish>Zaimportuj listę przedmiotów ze schowka (lista musi być w tym samym formacie jak przy exporcie)</Polish>
</Key>
<Key ID="STR_ACE_Arsenal_AttributeAddCompatible_DisplayName">
<English>Add Compatible Items</English>
<Polish>Dodaj kompatybilne przedmioty</Polish>
</Key>
<Key ID="STR_ACE_Arsenal_AttributeAddCompatible_Tooltip">
<English>Will automatically add compatible attachments or magazines (based on selected category) for all weapons in current items list</English>
<Polish>Automatycznie doda kompatybilne dodatki oraz magazynki (odpowiednio do każdej kategorii) dla wszystkich broni na liście</Polish>
</Key>
<Key ID="STR_ACE_Arsenal_statTTL"> <Key ID="STR_ACE_Arsenal_statTTL">
<English>Time to live</English> <English>Time to live</English>
<French>Durée de vie</French> <French>Durée de vie</French>

View File

@ -148,66 +148,79 @@
<English>Deploy 12m ropes</English> <English>Deploy 12m ropes</English>
<French>Déployer les cordes 12m</French> <French>Déployer les cordes 12m</French>
<Japanese>12m ロープを展開</Japanese> <Japanese>12m ロープを展開</Japanese>
<Polish>Wysuń linę o długości 12 m.</Polish>
</Key> </Key>
<Key ID="STR_ACE_Fastroping_Interaction_deployRopes15"> <Key ID="STR_ACE_Fastroping_Interaction_deployRopes15">
<English>Deploy 15m ropes</English> <English>Deploy 15m ropes</English>
<French>Déployer les cordes 15m</French> <French>Déployer les cordes 15m</French>
<Japanese>15m ロープを展開</Japanese> <Japanese>15m ロープを展開</Japanese>
<Polish>Wysuń linę o długości 15 m.</Polish>
</Key> </Key>
<Key ID="STR_ACE_Fastroping_Interaction_deployRopes18"> <Key ID="STR_ACE_Fastroping_Interaction_deployRopes18">
<English>Deploy 18m ropes</English> <English>Deploy 18m ropes</English>
<French>Déployer les cordes 18m</French> <French>Déployer les cordes 18m</French>
<Japanese>18m ロープを展開</Japanese> <Japanese>18m ロープを展開</Japanese>
<Polish>Wysuń linę o długości 18 m.</Polish>
</Key> </Key>
<Key ID="STR_ACE_Fastroping_Interaction_deployRopes27"> <Key ID="STR_ACE_Fastroping_Interaction_deployRopes27">
<English>Deploy 27m ropes</English> <English>Deploy 27m ropes</English>
<French>Déployer les cordes 27m</French> <French>Déployer les cordes 27m</French>
<Japanese>27m ロープを展開</Japanese> <Japanese>27m ロープを展開</Japanese>
<Polish>Wysuń linę o długości 27 m.</Polish>
</Key> </Key>
<Key ID="STR_ACE_Fastroping_Interaction_deployRopes36"> <Key ID="STR_ACE_Fastroping_Interaction_deployRopes36">
<English>Deploy 36m ropes</English> <English>Deploy 36m ropes</English>
<French>Déployer les cordes 36m</French> <French>Déployer les cordes 36m</French>
<Japanese>36m ロープを展開</Japanese> <Japanese>36m ロープを展開</Japanese>
<Polish>Wysuń linę o długości 36 m.</Polish>
</Key> </Key>
<Key ID="STR_ACE_Fastroping_Ropesupply"> <Key ID="STR_ACE_Fastroping_Ropesupply">
<English>[ACE] Ropes Supply crate</English> <English>[ACE] Ropes Supply crate</English>
<French>[ACE] Caisse de Cordes</French> <French>[ACE] Caisse de Cordes</French>
<Japanese>[ACE] ロープ収納箱</Japanese> <Japanese>[ACE] ロープ収納箱</Japanese>
<Polish>Skrzynia z linami ACE</Polish>
</Key> </Key>
<Key ID="STR_ACE_Fastroping_descriptionShort"> <Key ID="STR_ACE_Fastroping_descriptionShort">
<English>Used to do deploy ropes from a compatibile helicopter</English> <English>Used to do deploy ropes from a compatibile helicopter</English>
<French>Utilisé pour déployer des cordes depuis un hélicoptère compatible</French> <French>Utilisé pour déployer des cordes depuis un hélicoptère compatible</French>
<Japanese>対応するヘリコプターからロープを展開する為に使用されます</Japanese> <Japanese>対応するヘリコプターからロープを展開する為に使用されます</Japanese>
<Polish>Używane do opuszczania lin z kompatybilnych smigłowców</Polish>
</Key> </Key>
<Key ID="STR_ACE_Fastroping_Rope_12_Display"> <Key ID="STR_ACE_Fastroping_Rope_12_Display">
<English>Rope 12.2 meters</English> <English>Rope 12.2 meters</English>
<French>Corde 12.2 mètres</French> <French>Corde 12.2 mètres</French>
<Japanese>ロープ (12.2 メートル)</Japanese> <Japanese>ロープ (12.2 メートル)</Japanese>
<Polish>Lina, długość 12,2 m.</Polish>
</Key> </Key>
<Key ID="STR_ACE_Fastroping_Rope_15_Display"> <Key ID="STR_ACE_Fastroping_Rope_15_Display">
<English>Rope 15.2 meters</English> <English>Rope 15.2 meters</English>
<French>Corde 15.2 mètres</French> <French>Corde 15.2 mètres</French>
<Japanese>ロープ (15.2 メートル)</Japanese> <Japanese>ロープ (15.2 メートル)</Japanese>
<Polish>Lina, długość 15,2 m.</Polish>
</Key> </Key>
<Key ID="STR_ACE_Fastroping_Rope_18_Display"> <Key ID="STR_ACE_Fastroping_Rope_18_Display">
<English>Rope 18.3 meters</English> <English>Rope 18.3 meters</English>
<French>Corde 18.3 mètres</French> <French>Corde 18.3 mètres</French>
<Japanese>ロープ (18.3 メートル)</Japanese> <Japanese>ロープ (18.3 メートル)</Japanese>
<Polish>Lina, długość 18,3 m.</Polish>
</Key> </Key>
<Key ID="STR_ACE_Fastroping_Rope_27_Display"> <Key ID="STR_ACE_Fastroping_Rope_27_Display">
<English>Rope 27.4 meters</English> <English>Rope 27.4 meters</English>
<French>Corde 27.4 mètres</French> <French>Corde 27.4 mètres</French>
<Japanese>ロープ (27.4 メートル)</Japanese> <Japanese>ロープ (27.4 メートル)</Japanese>
<Polish>Lina, długość 27,4 m.</Polish>
</Key> </Key>
<Key ID="STR_ACE_Fastroping_Rope_36_Display"> <Key ID="STR_ACE_Fastroping_Rope_36_Display">
<English>Rope 36.6 meters</English> <English>Rope 36.6 meters</English>
<French>Corde 36.6 mètres</French> <French>Corde 36.6 mètres</French>
<Japanese>ロープ (36.6 メートル)</Japanese> <Japanese>ロープ (36.6 メートル)</Japanese>
<Polish>Lina, długość 36,6 m.</Polish>
</Key> </Key>
<Key ID="STR_ACE_Fastroping_setting_requireRopeItems_displayName"> <Key ID="STR_ACE_Fastroping_setting_requireRopeItems_displayName">
<English>Require rope item to deploy</English> <English>Require rope item to deploy</English>
<French>Exiger une corde pour déployer</French> <French>Exiger une corde pour déployer</French>
<Japanese>展開にはロープ アイテムを必須に</Japanese> <Japanese>展開にはロープ アイテムを必須に</Japanese>
<Polish>Wymaga przedmiotu typu lina </Polish>
</Key> </Key>
</Package> </Package>
</Project> </Project>

Binary file not shown.

View File

@ -29,7 +29,7 @@ _player setVariable ["ACE_hasEarPlugsIn", true, true];
//Force an immediate fast volume update: //Force an immediate fast volume update:
[[true]] call FUNC(updateVolume); [[true]] call FUNC(updateVolume);
/*// No Earplugs in inventory, telling user // No Earplugs in inventory, telling user
[localize LSTRING(NoPlugs)] call EFUNC(common,displayTextStructured);*/ //[localize LSTRING(NoPlugs)] call EFUNC(common,displayTextStructured);
[] call FUNC(updateHearingProtection); [] call FUNC(updateHearingProtection);

View File

@ -54,7 +54,7 @@ class ACE_ZeusActions {
displayName = "$STR_repair"; displayName = "$STR_repair";
icon = "\A3\ui_f\data\igui\cfg\actions\repair_ca.paa"; icon = "\A3\ui_f\data\igui\cfg\actions\repair_ca.paa";
condition = QUOTE(ZEUS_ACTION_CONDITION && {-1 < (curatorSelected select 0) findIf {_x isKindOf 'AllVehicles' && {!(_x isKindOf 'Man')}}}); condition = QUOTE(ZEUS_ACTION_CONDITION && {-1 < (curatorSelected select 0) findIf {_x isKindOf 'AllVehicles' && {!(_x isKindOf 'Man')}}});
statement = QUOTE({if (_x isKindOf 'AllVehicles' && {!(_x isKindOf 'Man')}) then {_x setDamage 0}} forEach (curatorSelected select 0)); statement = QUOTE(call FUNC(repair_Statement));
}; };
}; };

View File

@ -6,4 +6,11 @@ PREP_RECOMPILE_START;
#include "XEH_PREP.hpp" #include "XEH_PREP.hpp"
PREP_RECOMPILE_END; PREP_RECOMPILE_END;
DFUNC(repair_Statement) = { // moved from config because of build problems
TRACE_1("repair_Statement",_this);
{
if (_x isKindOf 'AllVehicles' && {!(_x isKindOf 'Man')}) then { _x setDamage 0; };
} forEach (curatorSelected select 0)
};
ADDON = true; ADDON = true;

View File

@ -1,4 +1,4 @@
#define MAJOR 3 #define MAJOR 3
#define MINOR 12 #define MINOR 12
#define PATCHLVL 5 #define PATCHLVL 6
#define BUILD 40 #define BUILD 43

View File

@ -101,6 +101,7 @@
<English>Creator</English> <English>Creator</English>
<German>Ersteller</German> <German>Ersteller</German>
<Japanese>設置者</Japanese> <Japanese>設置者</Japanese>
<Polish>Twórca</Polish>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -1653,7 +1653,7 @@
<German>Kochsalzlösung (500ml)</German> <German>Kochsalzlösung (500ml)</German>
<Hungarian>0,9%-os sósvíz-infúzió (500ml)</Hungarian> <Hungarian>0,9%-os sósvíz-infúzió (500ml)</Hungarian>
<Italian>Soluzione salina EV (500ml)</Italian> <Italian>Soluzione salina EV (500ml)</Italian>
<Portuguese>Soro IV (1000ml)</Portuguese> <Portuguese>Soro IV (500ml)</Portuguese>
<Czech>Fyziologický roztok (500ml)</Czech> <Czech>Fyziologický roztok (500ml)</Czech>
<Japanese>生理食塩水 IV (500ml)</Japanese> <Japanese>生理食塩水 IV (500ml)</Japanese>
<Korean>생리식염수 IV (500ml)</Korean> <Korean>생리식염수 IV (500ml)</Korean>
@ -1669,7 +1669,7 @@
<German>Kochsalzlösung (250ml)</German> <German>Kochsalzlösung (250ml)</German>
<Hungarian>0,9%-os sósvíz-infúzió (250ml)</Hungarian> <Hungarian>0,9%-os sósvíz-infúzió (250ml)</Hungarian>
<Italian>Soluzione salina EV (250ml)</Italian> <Italian>Soluzione salina EV (250ml)</Italian>
<Portuguese>Soro IV (1000ml)</Portuguese> <Portuguese>Soro IV (250ml)</Portuguese>
<Czech>Fyziologický roztok (250ml)</Czech> <Czech>Fyziologický roztok (250ml)</Czech>
<Japanese>生理食塩水 IV (250ml)</Japanese> <Japanese>生理食塩水 IV (250ml)</Japanese>
<Korean>생리식염수 IV (250ml)</Korean> <Korean>생리식염수 IV (250ml)</Korean>
@ -3180,10 +3180,12 @@
<Key ID="STR_ACE_Medical_menuTypeStyleSelf_displayName"> <Key ID="STR_ACE_Medical_menuTypeStyleSelf_displayName">
<English>Show medical interaction for self</English> <English>Show medical interaction for self</English>
<Japanese>自分に治療インタラクションを表示</Japanese> <Japanese>自分に治療インタラクションを表示</Japanese>
<Polish>Pokaż menu interakcji medycznej dla postaci</Polish>
</Key> </Key>
<Key ID="STR_ACE_Medical_menuTypeStyleSelf_description"> <Key ID="STR_ACE_Medical_menuTypeStyleSelf_description">
<English>Show the self interaction medical actions</English> <English>Show the self interaction medical actions</English>
<Japanese>セルフ インタラクションに治療動作を表示します。</Japanese> <Japanese>セルフ インタラクションに治療動作を表示します。</Japanese>
<Polish>Pokaż elementy menu interakcji medycznej dla postaci</Polish>
</Key> </Key>
<Key ID="STR_ACE_Medical_useSelection"> <Key ID="STR_ACE_Medical_useSelection">
<English>Selections (3d)</English> <English>Selections (3d)</English>
@ -5700,14 +5702,17 @@
<Key ID="STR_ACE_Medical_MedicalSettings_convertItems_DisplayName"> <Key ID="STR_ACE_Medical_MedicalSettings_convertItems_DisplayName">
<English>Convert vanilla items</English> <English>Convert vanilla items</English>
<Japanese>標準アイテムを変換</Japanese> <Japanese>標準アイテムを変換</Japanese>
<Polish>Skonwertuj przedmioty z Army3 (vanilia) na przedmioty medyczne ACE3</Polish>
</Key> </Key>
<Key ID="STR_ACE_Medical_MedicalSettings_convertItems_Description"> <Key ID="STR_ACE_Medical_MedicalSettings_convertItems_Description">
<English>Enables or disables whether vanilla medical items are converted to ACE medical items or just removed</English> <English>Enables or disables whether vanilla medical items are converted to ACE medical items or just removed</English>
<Japanese>有効化すると標準の治療アイテムを ACE 治療アイテムへ変換し、無効化すると削除します。</Japanese> <Japanese>有効化すると標準の治療アイテムを ACE 治療アイテムへ変換し、無効化すると削除します。</Japanese>
<Polish>Decyduje czy oryginalne przedmioty medyczne z Army 3 mają być skonwertowane na przedmioty medyczne ACE3 czy usunięte</Polish>
</Key> </Key>
<Key ID="STR_ACE_Medical_MedicalSettings_convertItems_remove"> <Key ID="STR_ACE_Medical_MedicalSettings_convertItems_remove">
<English>Just remove vanilla medical</English> <English>Just remove vanilla medical</English>
<Japanese>標準の治療アイテムを削除</Japanese> <Japanese>標準の治療アイテムを削除</Japanese>
<Polish>Usuń przedmioty z Army 3 (vanilia)</Polish>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -4,13 +4,7 @@ class ACE_ZeusActions {
displayName = CSTRING(Rearm); displayName = CSTRING(Rearm);
icon = QPATHTOF(ui\icon_rearm_interact.paa); icon = QPATHTOF(ui\icon_rearm_interact.paa);
condition = QUOTE(ZEUS_ACTION_CONDITION && {-1 < (curatorSelected select 0) findIf {_x isKindOf 'AllVehicles' && {!(_x isKindOf 'Man')}}}); condition = QUOTE(ZEUS_ACTION_CONDITION && {-1 < (curatorSelected select 0) findIf {_x isKindOf 'AllVehicles' && {!(_x isKindOf 'Man')}}});
statement = QUOTE( \ statement = QUOTE(call FUNC(rearm_statement));
{ \
if (_x isKindOf 'AllVehicles' && {!(_x isKindOf 'Man')}) then { \
[ARR_2(objNull,_x)] call ace_rearm_fnc_rearmEntireVehicleSuccess; \
}; \
} forEach (curatorSelected select 0); \
);
}; };
}; };
}; };

View File

@ -8,4 +8,13 @@ PREP_RECOMPILE_END;
#include "initSettings.sqf" #include "initSettings.sqf"
DFUNC(rearm_statement) = { // moved from config because of build problems
TRACE_1("rearm_statement",_this);
{
if (_x isKindOf 'AllVehicles' && {!(_x isKindOf 'Man')}) then {
[objNull, _x] call FUNC(rearmEntireVehicleSuccess);
};
} forEach (curatorSelected select 0);
};
ADDON = true; ADDON = true;

View File

@ -456,8 +456,7 @@ class CfgVehicles {
GVAR(hitpointPositions)[] = {{"HitTurret", {0,-2,0}}}; GVAR(hitpointPositions)[] = {{"HitTurret", {0,-2,0}}};
}; };
class Car_F; class Offroad_01_base_F;
class Offroad_01_base_F: Car_F {};
class Offroad_01_repair_base_F: Offroad_01_base_F { class Offroad_01_repair_base_F: Offroad_01_base_F {
GVAR(canRepair) = 1; GVAR(canRepair) = 1;
transportRepair = 0; transportRepair = 0;
@ -483,7 +482,25 @@ class CfgVehicles {
GVAR(canRepair) = 0; GVAR(canRepair) = 0;
}; };
class Truck_03_base_F; class Car_F: Car {
class HitPoints;
};
class Truck_F: Car_F {
class HitPoints: HitPoints {
class HitLBWheel;
class HitRBWheel;
};
};
class Truck_03_base_F: Truck_F {
class HitPoints: HitPoints {
class HitLBWheel: HitLBWheel {
name = "wheel_1_4_steering"; // return original values back to fix double wheel hitpoint
};
class HitRBWheel: HitRBWheel {
name = "wheel_2_4_steering";
};
};
};
class O_Truck_03_repair_F: Truck_03_base_F { class O_Truck_03_repair_F: Truck_03_base_F {
GVAR(canRepair) = 1; GVAR(canRepair) = 1;
transportRepair = 0; transportRepair = 0;

View File

@ -34,7 +34,7 @@ if (_type in _initializedClasses) exitWith {};
private _hitPointsAddedNames = []; private _hitPointsAddedNames = [];
private _hitPointsAddedStrings = []; private _hitPointsAddedStrings = [];
private _hitPointsAddedAmount = []; private _hitPointsAddedAmount = [];
private _processedHitpoints = []; private _processedSelections = [];
private _icon = ["a3\ui_f\data\igui\cfg\actions\repair_ca.paa", "#FFFFFF"]; private _icon = ["a3\ui_f\data\igui\cfg\actions\repair_ca.paa", "#FFFFFF"];
// Custom position can be defined via config for associated hitpoint // Custom position can be defined via config for associated hitpoint
@ -47,7 +47,7 @@ private _hitpointGroups = getArray(configFile >> "CfgVehicles" >> _type >> QGVAR
private _hitpoint = toLower (_hitPoints select _forEachIndex); private _hitpoint = toLower (_hitPoints select _forEachIndex);
if (_selection in _wheelHitSelections) then { if (_selection in _wheelHitSelections) then {
// Wheels should always be unique // Wheels should always be unique
if (_hitpoint in _processedHitpoints) exitWith {TRACE_3("Duplicate Wheel",_hitpoint,_forEachIndex,_selection);}; if (_selection in _processedSelections) exitWith {TRACE_3("Duplicate Wheel",_hitpoint,_forEachIndex,_selection);};
private _position = compile format ["_target selectionPosition ['%1', 'HitPoints'];", _selection]; private _position = compile format ["_target selectionPosition ['%1', 'HitPoints'];", _selection];
@ -68,13 +68,15 @@ private _hitpointGroups = getArray(configFile >> "CfgVehicles" >> _type >> QGVAR
_statement = {[_this select 1, _this select 0, _this select 2 select 0, "ReplaceWheel"] call DFUNC(repair)}; _statement = {[_this select 1, _this select 0, _this select 2 select 0, "ReplaceWheel"] call DFUNC(repair)};
_action = [_name, _text, _icon, _statement, _condition, {}, [_hitpoint], _position, 2] call EFUNC(interact_menu,createAction); _action = [_name, _text, _icon, _statement, _condition, {}, [_hitpoint], _position, 2] call EFUNC(interact_menu,createAction);
[_type, 0, [], _action] call EFUNC(interact_menu,addActionToClass); [_type, 0, [], _action] call EFUNC(interact_menu,addActionToClass);
_processedSelections pushBack _selection;
} else { } else {
// Empty selections don't exist // Empty selections don't exist
if (_selection isEqualTo "") exitWith { TRACE_3("Skipping Empty Sel",_hitpoint,_forEachIndex,_selection); }; if (_selection isEqualTo "") exitWith { TRACE_3("Skipping Empty Sel",_hitpoint,_forEachIndex,_selection); };
// Empty hitpoints don't contain enough information // Empty hitpoints don't contain enough information
if (_hitpoint isEqualTo "") exitWith { TRACE_3("Skipping Empty Hit",_hitpoint,_forEachIndex,_selection); }; if (_hitpoint isEqualTo "") exitWith { TRACE_3("Skipping Empty Hit",_hitpoint,_forEachIndex,_selection); };
// Ignore glass hitpoints // Ignore glass hitpoints
if ((_hitPoint find "glass") != -1) exitWith { TRACE_3("Skipping Glass",_hitpoint,_forEachIndex,_selection); }; if ((_hitpoint find "glass") != -1) exitWith { TRACE_3("Skipping Glass",_hitpoint,_forEachIndex,_selection); };
// Ignore hitpoints starting with # (seems to be lights) // Ignore hitpoints starting with # (seems to be lights)
if ((_hitpoint select [0,1]) == "#") exitWith { TRACE_3("Skipping # hit",_hitpoint,_forEachIndex,_selection); }; if ((_hitpoint select [0,1]) == "#") exitWith { TRACE_3("Skipping # hit",_hitpoint,_forEachIndex,_selection); };
// Ignore ERA/Slat armor (vanilla uses hitera_/hitslat_, pre-1.82 RHS uses era_) // Ignore ERA/Slat armor (vanilla uses hitera_/hitslat_, pre-1.82 RHS uses era_)
@ -125,7 +127,7 @@ private _hitpointGroups = getArray(configFile >> "CfgVehicles" >> _type >> QGVAR
if (_hitpoint in TRACK_HITPOINTS) then { if (_hitpoint in TRACK_HITPOINTS) then {
// Tracks should always be unique // Tracks should always be unique
if (_hitpoint in _processedHitpoints) exitWith {TRACE_3("Duplicate Track",_hitpoint,_forEachIndex,_selection);}; if (_selection in _processedSelections) exitWith {TRACE_3("Duplicate Track",_hitpoint,_forEachIndex,_selection);};
_position = compile format ["private _return = _target selectionPosition ['%1', 'HitPoints']; _return set [1, 0]; _return", _selection]; _position = compile format ["private _return = _target selectionPosition ['%1', 'HitPoints']; _return set [1, 0]; _return", _selection];
TRACE_4("Adding RepairTrack",_hitpoint,_forEachIndex,_selection,_text); TRACE_4("Adding RepairTrack",_hitpoint,_forEachIndex,_selection,_text);
private _condition = {[_this select 1, _this select 0, _this select 2 select 0, "RepairTrack"] call DFUNC(canRepair)}; private _condition = {[_this select 1, _this select 0, _this select 2 select 0, "RepairTrack"] call DFUNC(canRepair)};
@ -145,7 +147,7 @@ private _hitpointGroups = getArray(configFile >> "CfgVehicles" >> _type >> QGVAR
}; };
}; };
_processedHitPoints pushBack _hitpoint; _processedSelections pushBack _selection;
}; };
} forEach _hitSelections; } forEach _hitSelections;

View File

@ -60,7 +60,19 @@ if (_unit getVariable [QGVAR(actionID), -1] == -1) then {
}; };
if (_muzzle isEqualType "") then { if (_muzzle isEqualType "") then {
private _laserEnabled = _unit isIRLaserOn _weapon || {_unit isFlashlightOn _weapon};
_unit selectWeapon _muzzle; _unit selectWeapon _muzzle;
if (
_laserEnabled
&& {
_muzzle == primaryWeapon _unit // prevent UGL switch
|| {"" == primaryWeapon _unit} // Arma switches to primary weapon if exists
}
) then {
{_unit action [_x, _unit]} forEach ["GunLightOn", "IRLaserOn"];
};
}; };
// play fire mode selector sound // play fire mode selector sound

View File

@ -30,8 +30,20 @@ if (_safedWeapons isEqualTo []) then {
_unit setVariable [QGVAR(actionID), -1]; _unit setVariable [QGVAR(actionID), -1];
}; };
private _laserEnabled = _unit isIRLaserOn _weapon || {_unit isFlashlightOn _weapon};
_unit selectWeapon _muzzle; _unit selectWeapon _muzzle;
if (
_laserEnabled
&& {
_muzzle == primaryWeapon _unit // prevent UGL switch
|| {"" == primaryWeapon _unit} // Arma switches to primary weapon if exists
}
) then {
{_unit action [_x, _unit]} forEach ["GunLightOn", "IRLaserOn"];
};
if (inputAction "nextWeapon" > 0) then { if (inputAction "nextWeapon" > 0) then {
// switch to the last mode to roll over to first after the default nextWeapon action // switch to the last mode to roll over to first after the default nextWeapon action
// get weapon modes // get weapon modes

View File

@ -6,7 +6,7 @@
* Arguments: * Arguments:
* 0: Element Name <STRING> * 0: Element Name <STRING>
* 1: Show/Hide Element <BOOL> * 1: Show/Hide Element <BOOL>
* 2: Show Hint <BOOL> * 2: Show Hint <BOOL> (default: false)
* 3: Force change even when disallowed <BOOL> (default: false) * 3: Force change even when disallowed <BOOL> (default: false)
* *
* Return Value: * Return Value:
@ -21,9 +21,10 @@
params ["_element", "_show", ["_showHint", false, [true]], ["_force", false, [true]]]; params ["_element", "_show", ["_showHint", false, [true]], ["_force", false, [true]]];
private _cachedElement = GVAR(configCache) getVariable _element; private _cachedElement = GVAR(configCache) getVariable _element;
if (isNil "_cachedElement") exitWith {}; if (isNil "_cachedElement") exitWith {TRACE_1("nil element",_this)};
if (!_force && {!GVAR(allowSelectiveUI)}) exitWith { if (!_force && {!GVAR(allowSelectiveUI)}) exitWith {
TRACE_1("not allowed",_this);
[LSTRING(Disallowed), 2] call EFUNC(common,displayTextStructured); [LSTRING(Disallowed), 2] call EFUNC(common,displayTextStructured);
false false
}; };
@ -31,8 +32,14 @@ if (!_force && {!GVAR(allowSelectiveUI)}) exitWith {
_cachedElement params ["_idd", "_elements", "_location", "_conditions"]; _cachedElement params ["_idd", "_elements", "_location", "_conditions"];
// Exit if main vehicle type condition not fitting // Exit if main vehicle type condition not fitting
private _canUseWeapon = ACE_player call CBA_fnc_canUseWeapon; private _canUseWeaponOrInCargo = ACE_player call CBA_fnc_canUseWeapon || {-1 < vehicle ACE_player getCargoIndex ACE_player};
if ((_canUseWeapon && {_location == 2}) || {!_canUseWeapon && {_location == 1}}) exitWith {false}; if (
(_canUseWeaponOrInCargo && {_location == VEHICLE_ONLY})
|| {!_canUseWeaponOrInCargo && {_location == GROUND_ONLY}}
) exitWith {
TRACE_3("skip location",_this,_canUseWeaponOrInCargo,_location);
false
};
// Get setting from config API // Get setting from config API
{ {
@ -59,7 +66,7 @@ if (!_force) then {
}; };
}; };
_show = [1, 0] select _show; private _fade = [1, 0] select _show;
// Disable/Enable elements // Disable/Enable elements
private _success = false; private _success = false;
@ -69,9 +76,9 @@ private _success = false;
// Loop through IGUI displays as they can be present several times for some reason // Loop through IGUI displays as they can be present several times for some reason
{ {
if (_idd == ctrlIDD _x) then { if (_idd == ctrlIDD _x) then {
//TRACE_3("Setting Element Visibility",_show,_idd,_idc); TRACE_4("Setting Element Visibility",_element,_fade,_idd,_idc);
(_x displayCtrl _idc) ctrlSetFade _show; (_x displayCtrl _idc) ctrlSetFade _fade;
(_x displayCtrl _idc) ctrlCommit 0; (_x displayCtrl _idc) ctrlCommit 0;
_success = true; _success = true;

View File

@ -1522,10 +1522,12 @@
<Key ID="STR_ACE_Zeus_moduleCargoParadrop_DisplayName"> <Key ID="STR_ACE_Zeus_moduleCargoParadrop_DisplayName">
<English>Paradrop Cargo</English> <English>Paradrop Cargo</English>
<Japanese>カーゴを空中投下</Japanese> <Japanese>カーゴを空中投下</Japanese>
<Polish>Zrzut ładunku (cargo)</Polish>
</Key> </Key>
<Key ID="STR_ACE_Zeus_paradrop_noCargoLoaded"> <Key ID="STR_ACE_Zeus_paradrop_noCargoLoaded">
<English>No cargo loaded</English> <English>No cargo loaded</English>
<Japanese>カーゴは未積載</Japanese> <Japanese>カーゴは未積載</Japanese>
<Polish>Niczego nie załadowano do cargo</Polish>
</Key> </Key>
</Package> </Package>
</Project> </Project>

View File

@ -9,16 +9,16 @@ ace:
version: version:
major: 3 major: 3
minor: 12 minor: 12
patch: 5 patch: 6
build: 40 build: 43
acex: acex:
githubUrl: https://github.com/acemod/ACEX githubUrl: https://github.com/acemod/ACEX
version: version:
major: 3 major: 3
minor: 4 minor: 4
patch: 1 patch: 2
build: 11 build: 13
markdown: kramdown markdown: kramdown

View File

@ -9,16 +9,16 @@ ace:
version: version:
major: 3 major: 3
minor: 12 minor: 12
patch: 4 patch: 6
build: 39 build: 43
acex: acex:
githubUrl: https://github.com/acemod/ACEX githubUrl: https://github.com/acemod/ACEX
version: version:
major: 3 major: 3
minor: 4 minor: 4
patch: 0 patch: 2
build: 10 build: 13
markdown: kramdown markdown: kramdown

View File

@ -483,7 +483,7 @@
{% endif %} {% endif %}
{% if include.component == "compat_rksl_pm_ii" %} {% if include.component == "compat_rksl_pm_ii" %}
`RKSL_PMII` `RKSL_PMII`, `RKSL_PMII_525`
{% endif %} {% endif %}
{% if include.component == "compat_sma3_iansky" %} {% if include.component == "compat_sma3_iansky" %}

View File

@ -58,6 +58,7 @@ This lists all the maintainers responsible for project management and the overal
- [Kieran](https://github.com/kieran-s){:target="_blank"} - [Kieran](https://github.com/kieran-s){:target="_blank"}
- [Giallustio](https://github.com/Giallustio){:target="_blank"} - [Giallustio](https://github.com/Giallustio){:target="_blank"}
- [654wak654](https://github.com/654wak654){:target="_blank"} - [654wak654](https://github.com/654wak654){:target="_blank"}
- [mharis001](https://github.com/mharis001){:target="_blank"}
## Contributors ## Contributors

View File

@ -46,6 +46,7 @@ MenuType: 0 = Interaction, 1 = Self Interaction
|----------|---------|---------|---------|---------|---------| |----------|---------|---------|---------|---------|---------|
|`ace_interactMenuOpened` | [_menuType] | Local | Listen | Interaction Menu Opened |`ace_interactMenuOpened` | [_menuType] | Local | Listen | Interaction Menu Opened
|`ace_interactMenuClosed` | [_menuType] | Local | Listen | Interaction Menu Closed |`ace_interactMenuClosed` | [_menuType] | Local | Listen | Interaction Menu Closed
|`ace_interact_menu_newControllableObject` | [_typeOf] | Local | Listen | New controlable object, only fires once per type (add self interactions)
### 2.4 Cargo (`ace_cargo`) ### 2.4 Cargo (`ace_cargo`)

View File

@ -70,7 +70,7 @@ class CAManBase: Man {
Two steps, creating an action (array) and then adding it to either a class or object. Two steps, creating an action (array) and then adding it to either a class or object.
Important: `ace_common_fnc_canInteractWith` is not automatically checked and needs to be explicitly called. Important: `ace_common_fnc_canInteractWith` is not automatically checked and needs to be explicitly called.
### 2.1 fnc_createAction ### 3.1 fnc_createAction
`ace_interact_menu_fnc_createAction` `ace_interact_menu_fnc_createAction`
@ -91,7 +91,7 @@ Important: `ace_common_fnc_canInteractWith` is not automatically checked and nee
*/ */
``` ```
### 2.2 fnc_addActionToClass ### 3.2 fnc_addActionToClass
`ace_interact_menu_fnc_addActionToClass` `ace_interact_menu_fnc_addActionToClass`
@ -107,7 +107,7 @@ Important: `ace_common_fnc_canInteractWith` is not automatically checked and nee
``` ```
By default this function will not use inheritance, so actions will only be added to the specific class. By default this function will not use inheritance, so actions will only be added to the specific class.
### 2.3 fnc_addActionToObject ### 3.3 fnc_addActionToObject
`ace_interact_menu_fnc_addActionToObject` `ace_interact_menu_fnc_addActionToObject`
@ -121,7 +121,7 @@ By default this function will not use inheritance, so actions will only be added
*/ */
``` ```
### 2.4 fnc_addActionToZeus ### 3.4 fnc_addActionToZeus
`ace_interact_menu_fnc_addActionToZeus` `ace_interact_menu_fnc_addActionToZeus`
@ -133,7 +133,7 @@ By default this function will not use inheritance, so actions will only be added
*/ */
``` ```
### 2.5 Examples ### 3.5 Examples
External: External:
@ -177,7 +177,7 @@ _action = ["myMissionEvent1","Mission Event: Play Base Alarm","",_statement,{tru
[["ACE_ZeusActions"], _action] call ace_interact_menu_fnc_addActionToZeus; [["ACE_ZeusActions"], _action] call ace_interact_menu_fnc_addActionToZeus;
``` ```
### 2.6 Advanced Example ### 3.6 Advanced Example
This adds an interaction to a unit that allows passing items that the player is carrying. This adds an interaction to a unit that allows passing items that the player is carrying.
@ -221,3 +221,20 @@ _modifierFunc = {
_action = ["GiveItems", "?","",_statement,_condition,_insertChildren,[123],"",4,[false, false, false, true, false], _modifierFunc] call ace_interact_menu_fnc_createAction; _action = ["GiveItems", "?","",_statement,_condition,_insertChildren,[123],"",4,[false, false, false, true, false], _modifierFunc] call ace_interact_menu_fnc_createAction;
[q3, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject; [q3, 0, ["ACE_MainActions"], _action] call ace_interact_menu_fnc_addActionToObject;
``` ```
### 3.7 Using `ace_interact_menu_newControllableObject` event
CBA event `ace_interact_menu_newControllableObject` fires only once the first time the player controls a new object (new man, vehicle or controlled UAV)
This is the ideal way to add self interaction actions, as adding them via `addActionToClass` will force self interaction actions to be compiled for classes that may never be used.
```cpp
// Example: Add radio self-action to all civilian cars
["ace_interact_menu_newControllableObject", {
params ["_type"]; // string of the object's classname
if (!(_type isKindOf "Car")) exitWith {};
if ((getNumber (configFile >> "CfgVehicles" >> _type >> "side")) != 3) exitWith {};
private _action = ["playRadio","Play Radio","",{playMusic "NeverGonnaGiveYouUp"},{true}] call ace_interact_menu_fnc_createAction;
[_type, 1, ["ACE_SelfActions"], _action, true] call ace_interact_menu_fnc_addActionToClass;
}] call CBA_fnc_addEventHandler;
```

View File

@ -0,0 +1,104 @@
---
layout: wiki
title: Field Rations Framework
description: Explains how to set-up ACEX Field Rations.
group: framework
parent: wiki
mod: acex
version:
major: 3
minor: 4
patch: 0
---
## 1. Config Values
### 1.1 Consumable Items
Config Name | Type | Description
----------- | ---- | -----------
`acex_field_rations_thirstQuenched` | Number | Amount of thirst quenched when item is consumed*
`acex_field_rations_hungerSatiated` | Number | Amount of hunger satiated when item is consumed*
`acex_field_rations_consumeTime` | Number | Time required to consume the item (in seconds)
`acex_field_rations_consumeText` | String | Progress bar text (OPTIONAL)
`acex_field_rations_consumeAnims` | Array | Animations to play when consuming item** (OPTIONAL)
`acex_field_rations_consumeSounds` | Array | Sounds to play when consuming item** (OPTIONAL)
`acex_field_rations_replacementItem` | String | Class name of replacement item to add on consumption (OPTIONAL)
`acex_field_rations_refillItem` | String | Makes an item refillable, class name of item added when refilled (OPTIONAL)
`acex_field_rations_refillAmount` | Number | Amount of water required to refill item (OPTIONAL)
`acex_field_rations_refillTime` | Number | Time required to refill item (in seconds) (OPTIONAL)
_* Value range is 0 to 100 and can be modified by the corresponding coefficient setting._
_** Array is in format: STAND, CROUCH, PRONE. If player is in vehicle, the first element is used._
### 1.2 Water Sources
Config Name | Type | Description
----------- | ---- | -----------
`acex_field_rations_waterSupply` | Number | Amount of water inside the object (-1 - disabled, -10 - infinite) (OPTIONAL)
`acex_field_rations_offset` | Array | Refill action offset relative to model (OPTIONAL)
## 2. Events
Event Name | Passed Parameter(s) | Locality | Description
---------- | ------------------- | -------- | -----------
`acex_rationConsumed` | [_player, _consumeItem, _replacementItem, _thirstQuenched, _hungerSatiated] | Local | Item consumed
`acex_rationRefilled` | [_source, _player, _item, _refillItem, _refillAmount] | Local | Item refilled
## 3. Scripting
### 3.1 Getting water supply
`acex_field_rations_fnc_getRemainingWater`
```cpp
* Returns the remaining water in a source.
*
* Arguments:
* 0: Water source <OBJECT>
*
* Return Value:
* Remaining water <NUMBER>
*
* Example:
* [_source] call acex_field_rations_fnc_getRemainingWater
```
### 3.2 Setting water supply
`acex_field_rations_fnc_setRemainingWater`
```cpp
* Sets the remaining water supply for given water source.
*
* Arguments:
* 0: Water source <OBJECT>
* 1: Amount (-10 - Infinite, -1 - Disabled) <NUMBER>
*
* Return Value:
* None
*
* Example:
* [_source, 1000] call acex_field_rations_fnc_setRemainingWater
```
### 3.3 Adding a status modifier
`acex_field_rations_fnc_addStatusModifier`
```cpp
* Adds a status modifier. Should be called on all machines.
* Code must return a NUMBER which will be applied additively with other status changes.
*
* Arguments:
* 0: Status to modify (0 - Thirst, 1 - Hunger, 2 - Both) <NUMBER>
* 1: Code (is passed the unit <OBJECT>) <CODE>
*
* Return Value:
* None
*
* Example:
* [0, {random 1}] call acex_field_rations_fnc_addStatusModifier
```

View File

@ -0,0 +1 @@
x\cba\addons\main

View File

@ -0,0 +1 @@
x\cba\addons\xeh

View File

@ -5,7 +5,7 @@ class CfgWeapons {
class RKSL_optic_PMII_312: ItemCore { class RKSL_optic_PMII_312: ItemCore {
ACE_ScopeHeightAboveRail = 4.2235; ACE_ScopeHeightAboveRail = 4.2235;
ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Vertical[] = { -1, 12 };
ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 };
ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_VerticalIncrement = 0.1;
ACE_ScopeAdjust_HorizontalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1;
@ -21,7 +21,23 @@ class CfgWeapons {
class RKSL_optic_PMII_312_sunshade: ItemCore { class RKSL_optic_PMII_312_sunshade: ItemCore {
ACE_ScopeHeightAboveRail = 4.2235; ACE_ScopeHeightAboveRail = 4.2235;
ACE_ScopeAdjust_Vertical[] = { -4, 30 }; ACE_ScopeAdjust_Vertical[] = { -1, 12 };
ACE_ScopeAdjust_Horizontal[] = { -6, 6 };
ACE_ScopeAdjust_VerticalIncrement = 0.1;
ACE_ScopeAdjust_HorizontalIncrement = 0.1;
class ItemInfo: InventoryOpticsItem_Base_F {
class OpticsModes {
class Snip {
discreteDistance[] = { 100 };
discreteDistanceInitIndex = 0;
};
};
};
};
class RKSL_optic_PMII_525: ItemCore {
ACE_ScopeHeightAboveRail = 4.2235;
ACE_ScopeAdjust_Vertical[] = { 0, 26 };
ACE_ScopeAdjust_Horizontal[] = { -6, 6 }; ACE_ScopeAdjust_Horizontal[] = { -6, 6 };
ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_VerticalIncrement = 0.1;
ACE_ScopeAdjust_HorizontalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1;

View File

@ -6,9 +6,9 @@ class CfgPatches {
units[] = {}; units[] = {};
weapons[] = {}; weapons[] = {};
requiredVersion = REQUIRED_VERSION; requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"RKSL_PMII"}; requiredAddons[] = {"RKSL_PMII", "RKSL_PMII_525"};
author = ECSTRING(common,ACETeam); author = ECSTRING(common,ACETeam);
authors[] = {"Ruthberg"}; authors[] = {"Ruthberg", "Dedmen"};
url = ECSTRING(main,URL); url = ECSTRING(main,URL);
VERSION_CONFIG; VERSION_CONFIG;
}; };

View File

@ -33,6 +33,8 @@ class CfgAmmo {
// class B_556x45_Ball_Tracer_White: B_556x45_Ball {model = PATHTOF(ace_TracerWhite2.p3d);}; //New class for testing // class B_556x45_Ball_Tracer_White: B_556x45_Ball {model = PATHTOF(ace_TracerWhite2.p3d);}; //New class for testing
class B_580x42_Ball_F: BulletBase {model = PATHTOF(ace_TracerGreen2.p3d);}; class B_580x42_Ball_F: BulletBase {model = PATHTOF(ace_TracerGreen2.p3d);};
class ACE_580x42_Ball_Tracer_Red: B_580x42_Ball_F {model = PATHTOF(ace_TracerRed2.p3d);};
class ACE_580x42_Ball_Tracer_Yellow: B_580x42_Ball_F {model = PATHTOF(ace_TracerYellow2.p3d);};
class B_65x39_Caseless: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red class B_65x39_Caseless: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red
class B_65x39_Caseless_green: B_65x39_Caseless {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green class B_65x39_Caseless_green: B_65x39_Caseless {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green
@ -86,10 +88,14 @@ class CfgAmmo {
class B_338_Ball: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red class B_338_Ball: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red
class B_338_NM_Ball: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red class B_338_NM_Ball: BulletBase {model = PATHTOF(ace_TracerRed2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_red
class ACE_338_NM_Ball_red : B_338_NM_Ball {model = PATHTOF(ace_TracerRed2.p3d);};
class ACE_338_NM_Ball_yellow : B_338_NM_Ball {model = PATHTOF(ace_TracerYellow2.p3d);};
class B_127x54_Ball: BulletBase {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green class B_127x54_Ball: BulletBase {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green
class B_93x64_Ball: BulletBase {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green class B_93x64_Ball: BulletBase {model = PATHTOF(ace_TracerGreen2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_green
class ACE_93x64_Ball_tracer_red : B_93x64_Ball {model = PATHTOF(ace_TracerRed2.p3d);};
class ACE_93x64_Ball_tracer_yellow : B_93x64_Ball {model = PATHTOF(ace_TracerYellow2.p3d);};
//Autocannon //Autocannon
class B_19mm_HE: BulletBase {model = PATHTOF(ace_TracerWhite2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white class B_19mm_HE: BulletBase {model = PATHTOF(ace_TracerWhite2.p3d);}; //Replaces \A3\Weapons_f\Data\bullettracer\tracer_white

View File

@ -0,0 +1,156 @@
class CfgMagazineWells {
class STANAG_556x45_Large {
ADDON[] = {
"ACE_150Rnd_556x45_Drum_green",
"ACE_150Rnd_556x45_Drum_yellow",
"ACE_150Rnd_556x45_Drum_tracer_green",
"ACE_150Rnd_556x45_Drum_tracer_yellow"
};
};
class CBA_556x45_STANAG_2D_XL {
ADDON[] = {
"ACE_150Rnd_556x45_Drum_green",
"ACE_150Rnd_556x45_Drum_yellow",
"ACE_150Rnd_556x45_Drum_tracer_green",
"ACE_150Rnd_556x45_Drum_tracer_yellow"
};
};
class M249_556x45 {
ADDON[] = {
"ACE_200Rnd_556x45_Box_green",
"ACE_200Rnd_556x45_Box_tracer_green"
};
};
class CBA_556x45_MINIMI {
ADDON[] = {
"ACE_200Rnd_556x45_Box_green",
"ACE_200Rnd_556x45_Box_tracer_green"
};
};
class CTAR_580x42 {
ADDON[] = {
"ACE_30Rnd_580x42_Mag_red",
"ACE_30Rnd_580x42_Mag_yellow",
"ACE_30Rnd_580x42_Mag_tracer_red",
"ACE_30Rnd_580x42_Mag_tracer_yellow"
};
};
class CBA_580x42_TYPE95 {
ADDON[] = {
"ACE_30Rnd_580x42_Mag_red",
"ACE_30Rnd_580x42_Mag_yellow",
"ACE_30Rnd_580x42_Mag_tracer_red",
"ACE_30Rnd_580x42_Mag_tracer_yellow"
};
};
class CTAR_580x42_Large {
ADDON[] = {
"ACE_100Rnd_580x42_Drum_red",
"ACE_100Rnd_580x42_Drum_yellow",
"ACE_100Rnd_580x42_Drum_tracer_red",
"ACE_100Rnd_580x42_Drum_tracer_yellow"
};
};
class CBA_580x42_TYPE95_XL {
ADDON[] = {
"ACE_100Rnd_580x42_Drum_red",
"ACE_100Rnd_580x42_Drum_yellow",
"ACE_100Rnd_580x42_Drum_tracer_red",
"ACE_100Rnd_580x42_Drum_tracer_yellow"
};
};
class MX_65x39 {
ADDON[] = {
"ACE_30Rnd_65x39_mx_green",
"ACE_30Rnd_65x39_mx_yellow",
"ACE_30Rnd_65x39_mx_tracer_green",
"ACE_30Rnd_65x39_mx_tracer_yellow"
};
};
class CBA_65x39_MX {
ADDON[] = {
"ACE_30Rnd_65x39_mx_green",
"ACE_30Rnd_65x39_mx_yellow",
"ACE_30Rnd_65x39_mx_tracer_green",
"ACE_30Rnd_65x39_mx_tracer_yellow"
};
};
class CBA_65x39_MX_XL {
ADDON[] = {
"ACE_100Rnd_65x39_mx_green",
"ACE_100Rnd_65x39_mx_yellow",
"ACE_100Rnd_65x39_mx_tracer_green",
"ACE_100Rnd_65x39_mx_tracer_yellow"
};
};
class Katiba_65x39 {
ADDON[] = {
"ACE_30Rnd_65x39_katiba_red",
"ACE_30Rnd_65x39_katiba_yellow",
"ACE_30Rnd_65x39_katiba_tracer_red",
"ACE_30Rnd_65x39_katiba_tracer_yellow"
};
};
class CBA_65x39_Katiba {
ADDON[] = {
"ACE_30Rnd_65x39_katiba_red",
"ACE_30Rnd_65x39_katiba_yellow",
"ACE_30Rnd_65x39_katiba_tracer_red",
"ACE_30Rnd_65x39_katiba_tracer_yellow"
};
};
class Mk200_65x39 {
ADDON[] = {
"ACE_200Rnd_65x39_cased_Box_green",
"ACE_200Rnd_65x39_cased_Box_red",
"ACE_200Rnd_65x39_cased_Box_tracer_green",
"ACE_200Rnd_65x39_cased_Box_tracer_red"
};
};
class CBA_65x39_Mk200 {
ADDON[] = {
"ACE_200Rnd_65x39_cased_Box_green",
"ACE_200Rnd_65x39_cased_Box_red",
"ACE_200Rnd_65x39_cased_Box_tracer_green",
"ACE_200Rnd_65x39_cased_Box_tracer_red"
};
};
class CBA_762x51_HK417 {
ADDON[] = {
"ACE_20Rnd_762x51_Mag_tracer_green",
"ACE_20Rnd_762x51_Mag_tracer_yellow"
};
};
class CBA_762x51_M14 {
ADDON[] = {
"ACE_20Rnd_762x51_Mag_Tracer_green",
"ACE_20Rnd_762x51_Mag_Tracer_yellow"
};
};
class CBA_762x51_G3 {
ADDON[] = {
"ACE_20Rnd_762x51_Mag_Tracer_green",
"ACE_20Rnd_762x51_Mag_Tracer_yellow"
};
};
class CBA_762x54R_LINKS {
ADDON[] = {
"ACE_150Rnd_762x54_Box_red",
"ACE_150Rnd_762x54_Box_yellow",
"ACE_150Rnd_762x54_Box_tracer_red",
"ACE_150Rnd_762x54_Box_tracer_yellow"
};
};
class CBA_93x64_LINKS {
ADDON[] = {
"ACE_150Rnd_93x64_Mag_red",
"ACE_150Rnd_93x64_Mag_yellow"
};
};
class CBA_338NM_LINKS {
ADDON[] = {
"ACE_130Rnd_338_Mag_green",
"ACE_130Rnd_338_Mag_yellow"
};
};
};

View File

@ -0,0 +1,245 @@
#define STRINGS(magazine) author = ECSTRING(common,ACETeam); displayName = CSTRING(magazine)
class CfgMagazines {
// 5.56mm
class 150Rnd_556x45_Drum_Mag_F;
class ACE_150Rnd_556x45_Drum_green : 150Rnd_556x45_Drum_Mag_F {
ammo = "B_556x45_Ball_tracer_green";
STRINGS(150Rnd_556x45_Drum_green);
};
class ACE_150Rnd_556x45_Drum_yellow : 150Rnd_556x45_Drum_Mag_F {
ammo = "B_556x45_Ball_tracer_yellow";
STRINGS(150Rnd_556x45_Drum_yellow);
};
class 150Rnd_556x45_Drum_Mag_tracer_F;
class ACE_150Rnd_556x45_Drum_tracer_green : 150Rnd_556x45_Drum_Mag_tracer_F {
ammo = "B_556x45_Ball_tracer_green";
STRINGS(150Rnd_556x45_Drum_tracer_green);
descriptionShort = CSTRING(150Rnd_556x45_Drum_tracer_green_description);
};
class ACE_150Rnd_556x45_Drum_tracer_yellow : 150Rnd_556x45_Drum_Mag_tracer_F {
ammo = "B_556x45_Ball_tracer_yellow";
STRINGS(150Rnd_556x45_Drum_tracer_yellow);
descriptionShort = CSTRING(150Rnd_556x45_Drum_tracer_green_description);
};
class 200Rnd_556x45_Box_F;
class ACE_200Rnd_556x45_Box_green : 200Rnd_556x45_Box_F {
ammo = "B_556x45_Ball_tracer_green";
STRINGS(200Rnd_556x45_Box_green);
};
class 200Rnd_556x45_Box_tracer_F;
class ACE_200Rnd_556x45_Box_tracer_green : 200Rnd_556x45_Box_tracer_F {
ammo = "B_556x45_Ball_tracer_green";
STRINGS(200Rnd_556x45_Box_tracer_green);
descriptionShort = CSTRING(200Rnd_556x45_Box_tracer_green_description);
};
// 5.8mm
class 30Rnd_580x42_Mag_F;
class ACE_30Rnd_580x42_Mag_red : 30Rnd_580x42_Mag_F {
ammo = "ACE_580x42_Ball_tracer_red";
STRINGS(30Rnd_580x42_Mag_red);
};
class ACE_30Rnd_580x42_Mag_yellow : 30Rnd_580x42_Mag_F {
ammo = "ACE_580x42_Ball_tracer_yellow";
STRINGS(30Rnd_580x42_Mag_yellow);
};
class 30Rnd_580x42_Mag_tracer_F;
class ACE_30Rnd_580x42_Mag_tracer_red : 30Rnd_580x42_Mag_tracer_F {
ammo = "ACE_580x42_Ball_tracer_red";
STRINGS(30Rnd_580x42_Mag_tracer_red);
descriptionShort = CSTRING(30Rnd_580x42_Mag_tracer_red_description);
};
class ACE_30Rnd_580x42_Mag_tracer_yellow : 30Rnd_580x42_Mag_tracer_F {
ammo = "ACE_580x42_Ball_tracer_yellow";
STRINGS(30Rnd_580x42_Mag_tracer_yellow);
descriptionShort = CSTRING(30Rnd_580x42_Mag_tracer_yellow_description);
};
class 100Rnd_580x42_Mag_F;
class ACE_100Rnd_580x42_Drum_red : 100Rnd_580x42_Mag_F {
ammo = "ACE_580x42_Ball_tracer_red";
STRINGS(100Rnd_580x42_Drum_red);
};
class ACE_100Rnd_580x42_Drum_yellow : 100Rnd_580x42_Mag_F {
ammo = "ACE_580x42_Ball_tracer_yellow";
STRINGS(100Rnd_580x42_Drum_yellow);
};
class 100Rnd_580x42_Mag_tracer_F;
class ACE_100Rnd_580x42_Drum_tracer_red : 100Rnd_580x42_Mag_tracer_F {
ammo = "ACE_580x42_Ball_tracer_red";
STRINGS(100Rnd_580x42_Drum_tracer_red);
descriptionShort = CSTRING(100Rnd_580x42_Drum_tracer_red_description);
};
class ACE_100Rnd_580x42_Drum_tracer_yellow : 100Rnd_580x42_Mag_tracer_F {
ammo = "ACE_580x42_Ball_tracer_yellow";
STRINGS(100Rnd_580x42_Drum_tracer_yellow);
descriptionShort = CSTRING(100Rnd_580x42_Drum_tracer_yellow_description);
};
// 6.5mm Caseless MX
class 30Rnd_65x39_caseless_mag;
class ACE_30Rnd_65x39_mx_green : 30Rnd_65x39_caseless_mag {
ammo = "B_65x39_Caseless_green";
STRINGS(30Rnd_65x39_mx_green);
descriptionShort = CSTRING(30Rnd_65x39_mx_green_description);
};
class ACE_30Rnd_65x39_mx_yellow : 30Rnd_65x39_caseless_mag {
ammo = "B_65x39_Caseless_yellow";
STRINGS(30Rnd_65x39_mx_yellow);
descriptionShort = CSTRING(30Rnd_65x39_mx_yellow_description);
};
class 30Rnd_65x39_caseless_mag_tracer;
class ACE_30Rnd_65x39_mx_tracer_green : 30Rnd_65x39_caseless_mag_tracer {
ammo = "B_65x39_Caseless_green";
picture = "a3\weapons_f\Data\UI\m_30stanag_caseless_green_CA.paa";
STRINGS(30Rnd_65x39_mx_tracer_green);
descriptionShort = CSTRING(30Rnd_65x39_mx_tracer_green_description);
};
class ACE_30Rnd_65x39_mx_tracer_yellow : 30Rnd_65x39_caseless_mag_tracer {
ammo = "B_65x39_Caseless_yellow";
picture = "a3\weapons_f\Data\UI\m_30stanag_caseless_yellow_CA.paa";
STRINGS(30Rnd_65x39_mx_tracer_yellow);
descriptionShort = CSTRING(30Rnd_65x39_mx_tracer_yellow_description);
};
class 100Rnd_65x39_caseless_mag;
class ACE_100Rnd_65x39_mx_green : 100Rnd_65x39_caseless_mag {
ammo = "B_65x39_Caseless_green";
STRINGS(100Rnd_65x39_mx_green);
};
class ACE_100Rnd_65x39_mx_yellow : 100Rnd_65x39_caseless_mag {
ammo = "B_65x39_Caseless_yellow";
STRINGS(100Rnd_65x39_mx_yellow);
};
class 100Rnd_65x39_caseless_mag_tracer;
class ACE_100Rnd_65x39_mx_tracer_green : 100Rnd_65x39_caseless_mag_tracer {
ammo = "B_65x39_Caseless_green";
picture = "a3\weapons_f\Data\UI\M_100Rnd_65x39_green_CA.paa";
STRINGS(100Rnd_65x39_mx_tracer_green);
descriptionShort = CSTRING(100Rnd_65x39_mx_tracer_green_description);
};
class ACE_100Rnd_65x39_mx_tracer_yellow : 100Rnd_65x39_caseless_mag_tracer {
ammo = "B_65x39_Caseless_yellow";
picture = "a3\weapons_f\Data\UI\M_100Rnd_65x39_yellow_CA.paa";
STRINGS(100Rnd_65x39_mx_tracer_yellow);
descriptionShort = CSTRING(100Rnd_65x39_mx_tracer_yellow_description);
};
// 6.5mm Caseless Katiba
class 30Rnd_65x39_caseless_green;
class ACE_30Rnd_65x39_katiba_red : 30Rnd_65x39_caseless_green {
ammo = "B_65x39_Caseless";
STRINGS(30Rnd_65x39_katiba_red);
};
class ACE_30Rnd_65x39_katiba_yellow : 30Rnd_65x39_caseless_green {
ammo = "B_65x39_Caseless_yellow";
STRINGS(30Rnd_65x39_katiba_yellow);
};
class 30Rnd_65x39_caseless_green_mag_Tracer;
class ACE_30Rnd_65x39_katiba_tracer_red : 30Rnd_65x39_caseless_green_mag_Tracer {
ammo = "B_65x39_Caseless";
picture = "a3\weapons_f\Data\UI\m_20stanag_red_CA.paa";
STRINGS(30Rnd_65x39_katiba_tracer_red);
descriptionShort = CSTRING(30Rnd_65x39_katiba_tracer_red_description);
};
class ACE_30Rnd_65x39_katiba_tracer_yellow : 30Rnd_65x39_caseless_green_mag_Tracer {
ammo = "B_65x39_Caseless_yellow";
picture = "a3\weapons_f\Data\UI\m_20stanag_yellow_CA.paa";
STRINGS(30Rnd_65x39_katiba_tracer_yellow);
descriptionShort = CSTRING(30Rnd_65x39_katiba_tracer_yellow_description);
};
// 6.5mm Cased
class 200Rnd_65x39_cased_Box;
class ACE_200Rnd_65x39_cased_Box_green : 200Rnd_65x39_cased_Box {
ammo = "B_65x39_Case_green";
STRINGS(200Rnd_65x39_cased_Box_green);
descriptionShort = CSTRING(200Rnd_65x39_cased_Box_green_description);
};
class ACE_200Rnd_65x39_cased_Box_red : 200Rnd_65x39_cased_Box {
ammo = "B_65x39_Case";
STRINGS(200Rnd_65x39_cased_Box_red);
descriptionShort = CSTRING(200Rnd_65x39_cased_Box_red_description);
};
class 200Rnd_65x39_cased_Box_tracer;
class ACE_200Rnd_65x39_cased_Box_tracer_green : 200Rnd_65x39_cased_Box_tracer {
ammo = "B_65x39_Case_green";
picture = "a3\weapons_f\Data\UI\M_200Rnd_65x39_green_CA.paa";
STRINGS(200Rnd_65x39_cased_Box_tracer_green);
descriptionShort = CSTRING(200Rnd_65x39_cased_Box_tracer_green_description);
};
class ACE_200Rnd_65x39_cased_Box_tracer_red : 200Rnd_65x39_cased_Box_tracer {
ammo = "B_65x39_Case";
picture = "a3\weapons_f\Data\UI\M_200Rnd_65x39_red_CA.paa";
STRINGS(200Rnd_65x39_cased_Box_tracer_red);
descriptionShort = CSTRING(200Rnd_65x39_cased_Box_tracer_red_description);
};
// 7.62x51 (NATO)
class ACE_20Rnd_762x51_Mag_tracer;
class ACE_20Rnd_762x51_Mag_tracer_green : ACE_20Rnd_762x51_Mag_tracer {
ammo = "B_762x51_tracer_green";
STRINGS(20Rnd_762x51_Mag_tracer_green);
descriptionShort = CSTRING(20Rnd_762x51_Mag_tracer_green_description);
};
class ACE_20Rnd_762x51_Mag_tracer_yellow : ACE_20Rnd_762x51_Mag_tracer {
ammo = "B_762x51_tracer_yellow";
STRINGS(20Rnd_762x51_Mag_tracer_yellow);
descriptionShort = CSTRING(20Rnd_762x51_Mag_tracer_green_description);
};
// 7.62x54 (Russian)
class 150Rnd_762x54_Box;
class ACE_150Rnd_762x54_Box_red : 150Rnd_762x54_Box {
ammo = "B_762x54_tracer_red";
STRINGS(150Rnd_762x54_Box_red);
};
class ACE_150Rnd_762x54_Box_yellow : 150Rnd_762x54_Box {
ammo = "B_762x54_tracer_yellow";
STRINGS(150Rnd_762x54_Box_yellow);
};
class 150Rnd_762x54_Box_tracer;
class ACE_150Rnd_762x54_Box_tracer_red : 150Rnd_762x54_Box_tracer {
ammo = "B_762x54_tracer_red";
STRINGS(150Rnd_762x54_Box_tracer_red);
descriptionShort = CSTRING(150Rnd_762x54_Box_tracer_red_description);
};
class ACE_150Rnd_762x54_Box_tracer_yellow : 150Rnd_762x54_Box_tracer {
ammo = "B_762x54_tracer_yellow";
STRINGS(150Rnd_762x54_Box_tracer_yellow);
descriptionShort = CSTRING(150Rnd_762x54_Box_tracer_yellow_description);
};
// 9.3x64
class 150Rnd_93x64_Mag;
class ACE_150Rnd_93x64_Mag_red : 150Rnd_93x64_Mag {
ammo = "ACE_93x64_tracer_red";
STRINGS(150Rnd_93x64_Mag_red);
};
class ACE_150Rnd_93x64_Mag_yellow : 150Rnd_93x64_Mag {
ammo = "ACE_93x64_tracer_yellow";
STRINGS(150Rnd_93x64_Mag_yellow);
};
// .338 NM
class 130Rnd_338_Mag;
class ACE_130Rnd_338_Mag_green : 130Rnd_338_Mag {
ammo = "ACE_338_NM_tracer_green";
STRINGS(130Rnd_338_Mag_green);
};
class ACE_130Rnd_338_Mag_yellow : 130Rnd_338_Mag {
ammo = "ACE_338_NM_tracer_yellow";
STRINGS(130Rnd_338_Mag_yellow);
};
};

View File

@ -15,27 +15,5 @@ class CfgPatches {
}; };
#include "CfgAmmo.hpp" #include "CfgAmmo.hpp"
#include "CfgMagazines.hpp"
// CfgMagazines and CfgWeapons are included for testing only and may be removed for release version. #include "CfgMagazineWells.hpp"
// There is also an ammo class B_556x45_Ball_Tracer_White commented out in CfgAmmo
// this should also be uncommented when testing white tracers.
/*
class CfgMagazines {
class 200Rnd_556x45_Box_Tracer_F;
class 200Rnd_556x45_Box_Green_F : 200Rnd_556x45_Box_Tracer_F {
ammo = "B_556x45_Ball_Tracer_Green";
displayName = "5.56 mm 200Rnd Tracer (Green) Box";
};
class 200Rnd_556x45_Box_White_F : 200Rnd_556x45_Box_Tracer_F {
ammo = "B_556x45_Ball_Tracer_White";
displayName = "5.56 mm 200Rnd Tracer (White) Box";
};
};
class CfgWeapons {
class LMG_03_base_F;
class LMG_03_F : LMG_03_base_F {
magazines[] = {"200Rnd_556x45_Box_F","200Rnd_556x45_Box_Red_F","200Rnd_556x45_Box_Tracer_F","200Rnd_556x45_Box_Tracer_Red_F","200Rnd_556x45_Box_Green_F","200Rnd_556x45_Box_White_F"};
};
};
*/

View File

@ -0,0 +1,259 @@
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE_tracer">
<Package name="main">
<Container name="magazines">
<Key ID="STR_ACE_Tracers_150Rnd_556x45_Drum_green">
<English>5.56 mm 150Rnd Reload Tracer (Green) Mag</English>
<German>150 Schuss 5,56 mm Nachlade-Leuchtspur (Grün) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_150Rnd_556x45_Drum_yellow">
<English>5.56 mm 150Rnd Reload Tracer (Yellow) Mag</English>
<German>150 Schuss 5,56 mm Nachlade-Leuchtspur (Gelb) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_150Rnd_556x45_Drum_tracer_green">
<English>5.56 mm 150Rnd Tracer (Green) Mag</English>
<German>150 Schuss 5,56 mm Leuchtspur (Grün) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_150Rnd_556x45_Drum_tracer_green_description">
<English>Caliber: 5.56x45 mm Tracer - Green&lt;br /&gt;Rounds: 150&lt;br /&gt;Used in: SPAR-16S</English>
<German>Kaliber: 5,56x45 mm Leuchtspur - grün&lt;br /&gt;Schuss: 150&lt;br /&gt;Verwendet in: SPAR-16S</German>
</Key>
<Key ID="STR_ACE_Tracers_150Rnd_556x45_Drum_tracer_yellow">
<English>5.56 mm 150Rnd Tracer (Yellow) Mag</English>
<German>150 Schuss 5,56 mm Leuchtspur (Gelb) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_150Rnd_556x45_Drum_tracer_yellow_description">
<English>Caliber: 5.56x45 mm Tracer - Yellow&lt;br /&gt;Rounds: 150&lt;br /&gt;Used in: SPAR-16S</English>
<German>Kaliber: 5,56x45 mm Leuchtspur - gelb&lt;br /&gt;Schuss: 150&lt;br /&gt;Verwendet in: SPAR-16S</German>
</Key>
<Key ID="STR_ACE_Tracers_200Rnd_556x45_Box_green">
<English>5.56 mm 200Rnd Reload Tracer (Green) Box</English>
<German>200 Schuss 5,56 mm Nachlade-Leuchtspur (Grün) Kasten</German>
</Key>
<Key ID="STR_ACE_Tracers_200Rnd_556x45_Box_tracer_green">
<English>5.56 mm 200Rnd Tracer (Green) Box</English>
<German>200 Schuss 5,56 mm Nachlade-Leuchtspur (Grün) Kasten</German>
</Key>
<Key ID="STR_ACE_Tracers_200Rnd_556x45_Box_tracer_green_description">
<English>Caliber: 5.56x45 mm Tracer - Green&lt;br /&gt;Rounds: 200&lt;br /&gt;Used in: LIM-85</English>
<German>Kaliber: 5,56x45 mm Leuchtspur - grün&lt;br /&gt;Schuss: 200&lt;br /&gt;Verwendet in: LIM-85</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_580x42_Mag_red">
<English>5.8 mm 30Rnd Reload Tracer (Red) Mag</English>
<German>30 Schuss 5,8 mm Nachlade-Leuchtspur (Rot) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_580x42_Mag_yellow">
<English>5.8 mm 30Rnd Reload Tracer (Yellow) Mag</English>
<German>30 Schuss 5,8 mm Nachlade-Leuchtspur (Gelb) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_580x42_Mag_tracer_red">
<English>5.8 mm 30Rnd Tracer (Red) Mag</English>
<German>30 Schuss 5,8 mm Leuchtspur (Rot) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_580x42_Mag_tracer_red_description">
<English>Caliber: 5.8x42 mm Tracer - Red&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: CAR-95, CAR-95 GL</English>
<German>Kaliber: 5,8x42 mm Leuchtspur - rot&lt;br /&gt;Schuss: 30&lt;br /&gt;Verwendet in: CAR-95, CAR-95 GL</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_580x42_Mag_tracer_yellow">
<English>5.8 mm 30Rnd Tracer (Yellow) Mag</English>
<German>30 Schuss 5,8 mm Leuchtspur (Gelb) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_580x42_Mag_tracer_yellow_description">
<English>Caliber: 5.8x42 mm Tracer - Yellow&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: CAR-95, CAR-95 GL</English>
<German>Kaliber: 5,8x42 mm Leuchtspur - gelb&lt;br /&gt;Schuss: 30&lt;br /&gt;Verwendet in: CAR-95, CAR-95 GL</German>
</Key>
<Key ID="STR_ACE_Tracers_100Rnd_580x42_Drum_red">
<English>5.8 mm 100Rnd Reload Tracer (Red) Mag</English>
<German>100 Schuss 5,8 mm Nachlade-Leuchtspur (Rot) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_100Rnd_580x42_Drum_yellow">
<English>5.8 mm 100Rnd Reload Tracer (Yellow) Mag</English>
<German>100 Schuss 5,8 mm Nachlade-Leuchtspur (Gelb) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_100Rnd_580x42_Drum_tracer_red">
<English>5.8 mm 100Rnd Tracer (Red) Mag</English>
<German>100 Schuss 5,8 mm Leuchtspur (Rot) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_100Rnd_580x42_Drum_tracer_red_description">
<English>Caliber: 5.8x42 mm Tracer - Red&lt;br /&gt;Rounds: 100&lt;br /&gt;Used in: CAR-95-1</English>
<German>Kaliber: 5,8x42 mm Leuchtspur - rot&lt;br /&gt;Schuss: 100&lt;br /&gt;Verwendet in: CAR-95-1</German>
</Key>
<Key ID="STR_ACE_Tracers_100Rnd_580x42_Drum_tracer_yellow">
<English>5.8 mm 100Rnd Tracer (Yellow) Mag</English>
<German>100 Schuss 5,8 mm Leuchtspur (Gelb) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_100Rnd_580x42_Drum_tracer_yellow_description">
<English>Caliber: 5.8x42 mm Tracer - Yellow&lt;br /&gt;Rounds: 100&lt;br /&gt;Used in: CAR-95-1</English>
<German>Kaliber: 5,8x42 mm Leuchtspur - gelb&lt;br /&gt;Schuss: 100&lt;br /&gt;Verwendet in: CAR-95-1</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_65x39_mx_green">
<English>6.5mm 30Rnd Reload Tracer (Green) Mag</English>
<German>30 Schuss 6.5mm Nachlade-Leuchtspur (Grün) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_65x39_mx_green_description">
<English>Caliber: 6.5x39 mm Tracer - Green&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: MX/C/M/SW/3GL</English>
<German>Kaliber: 6.5x39 mm Nachlade-Leuchtspur - Grün&lt;br /&gt;Patronen: 30&lt;br /&gt;Verwendet in: MX/C/M/SW/3GL</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_65x39_mx_yellow">
<English>6.5mm 30Rnd Reload Tracer (Yellow) Mag</English>
<German>30 Schuss 6.5mm Nachlade-Leuchtspur (Gelb) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_65x39_mx_yellow_description">
<English>Caliber: 6.5x39 mm Tracer - Yellow&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: MX/C/M/SW/3GL</English>
<German>Kaliber: 6.5x39 mm Nachlade-Leuchtspur - Gelb&lt;br /&gt;Patronen: 30&lt;br /&gt;Verwendet in: MX/C/M/SW/3GL</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_65x39_mx_tracer_green">
<English>6.5mm 30Rnd Tracer (Green) Mag</English>
<German>30 Schuss 6.5mm Leuchtspur (Grün) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_65x39_mx_tracer_green_description">
<English>Caliber: 6.5x39 mm Tracer - Green&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: MX/C/M/SW/3GL</English>
<German>Kaliber: 6.5x39 mm Leuchtspur - Grün&lt;br /&gt;Patronen: 30&lt;br /&gt;Verwendet in: MX/C/M/SW/3GL</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_65x39_mx_tracer_yellow">
<English>6.5mm 30Rnd Tracer (Yellow) Mag</English>
<German>30 Schuss 6.5mm Leuchtspur (Gelb) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_65x39_mx_tracer_yellow_description">
<English>Caliber: 6.5x39 mm Tracer - Yellow&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: MX/C/M/SW/3GL</English>
<German>Kaliber: 6.5x39 mm Leuchtspur - Gelb&lt;br /&gt;Patronen: 30&lt;br /&gt;Verwendet in: MX/C/M/SW/3GL</German>
</Key>
<Key ID="STR_ACE_Tracers_100Rnd_65x39_mx_green">
<English>6.5mm 100Rnd Mixed Mag (Green)</English>
<German>100 Schuss 6.5mm Magazin gemischt (grün)</German>
</Key>
<Key ID="STR_ACE_Tracers_100Rnd_65x39_mx_yellow">
<English>6.5mm 100Rnd Mixed Mag (Yellow)</English>
<German>100 Schuss 6.5mm Magazin gemischt (gelb)</German>
</Key>
<Key ID="STR_ACE_Tracers_100Rnd_65x39_mx_tracer_green">
<English>6.5mm 100Rnd Mag Tracer (Green)</English>
<German>100 Schuss 6.5mm Magazin Leuchtspur (Grün)</German>
</Key>
<Key ID="STR_ACE_Tracers_100Rnd_65x39_mx_tracer_green_description">
<English>Caliber: 6.5x39 mm Tracer - Green&lt;br /&gt;Rounds: 100&lt;br /&gt;Used in: MX SW</English>
<German>Kaliber: 6.5x39 mm Leuchtspur - Grün&lt;br /&gt;Patronen: 100&lt;br /&gt;Verwendet in: MX SW</German>
</Key>
<Key ID="STR_ACE_Tracers_100Rnd_65x39_mx_tracer_yellow">
<English>6.5mm 100Rnd Mag Tracer (Yellow)</English>
<German>100 Schuss 6.5mm Magazin Leuchtspur (Gelb)</German>
</Key>
<Key ID="STR_ACE_Tracers_100Rnd_65x39_mx_tracer_yellow_description">
<English>Caliber: 6.5x39 mm Tracer - Yellow&lt;br /&gt;Rounds: 100&lt;br /&gt;Used in: MX SW</English>
<German>Kaliber: 6.5x39 mm Leuchtspur - Gelb&lt;br /&gt;Patronen: 100&lt;br /&gt;Verwendet in: MX SW</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_65x39_katiba_red">
<English>6.5mm 30Rnd Reload Tracer (Red) Mag</English>
<German>30 Schuss 6.5mm Nachlade-Leuchtspur (Rot) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_65x39_katiba_yellow">
<English>6.5mm 30Rnd Reload Tracer (Yellow) Mag</English>
<German>30 Schuss 6.5mm Nachlade-Leuchtspur (Gelb) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_65x39_katiba_tracer_red">
<English>6.5mm 30Rnd Tracer (Red) Mag</English>
<German>30 Schuss 6.5mm Leuchtspur (Rot) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_65x39_katiba_tracer_red_description">
<English>Caliber: 6.5x39 mm Tracer (Red) - Caseless&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: Katiba, Type 115</English>
<German>Kaliber: 6,5x39mm Leuchtspur (Rot) hülsenlos&lt;br /&gt;Patronen: 30&lt;br /&gt;Eingesetzt von: Katiba, Typ 115</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_65x39_katiba_tracer_yellow">
<English>6.5mm 30Rnd Tracer (Yellow) Mag</English>
<German>30 Schuss 6.5mm Leuchtspur (Gelb) Magazin</German>
</Key>
<Key ID="STR_ACE_Tracers_30Rnd_65x39_katiba_tracer_yellow_description">
<English>Caliber: 6.5x39 mm Tracer (Yellow) - Caseless&lt;br /&gt;Rounds: 30&lt;br /&gt;Used in: Katiba, Type 115</English>
<German>Kaliber: 6,5x39mm Leuchtspur (Rot) hülsenlos&lt;br /&gt;Patronen: 30&lt;br /&gt;Eingesetzt von: Katiba, Typ 115</German>
</Key>
<Key ID="STR_ACE_Tracers_200Rnd_65x39_cased_Box_green">
<English>6.5 mm 200Rnd Belt Case Mixed (Green)</English>
<German>6,5 mm 200-Schuss-Gurtkiste Gemischt (grün)</German>
</Key>
<Key ID="STR_ACE_Tracers_200Rnd_65x39_cased_Box_green_description">
<English>Caliber: 6.5x39 mm Mixed - Green&lt;br /&gt;Rounds: 200&lt;br /&gt;Used in: Mk200</English>
<German>Kaliber: 6.5x39 mm Gemischt - Grün&lt;br /&gt;Patronen: 200&lt;br /&gt;Verwendet in: Mk200</German>
</Key>
<Key ID="STR_ACE_Tracers_200Rnd_65x39_cased_Box_red">
<English>6.5 mm 200Rnd Belt Case Mixed (Red)</English>
<German>6,5 mm 200-Schuss-Gurtkiste Gemischt (grün)</German>
</Key>
<Key ID="STR_ACE_Tracers_200Rnd_65x39_cased_Box_red_description">
<English>Caliber: 6.5x39 mm Mixed - Red&lt;br /&gt;Rounds: 200&lt;br /&gt;Used in: Mk200</English>
<German>Kaliber: 6.5x39 mm Mixed - Rot&lt;br /&gt;Patronen: 200&lt;br /&gt;Verwendet in: Mk200</German>
</Key>
<Key ID="STR_ACE_Tracers_200Rnd_65x39_cased_Box_tracer_green">
<English>6.5 mm 200Rnd Belt Case Tracer (Green)</English>
<German>6,5 mm 200-Schuss-Gurtkiste Leuchtspur (grün)</German>
</Key>
<Key ID="STR_ACE_Tracers_200Rnd_65x39_cased_Box_tracer_green_description">
<English>Caliber: 6.5x39 mm Tracer - Green&lt;br /&gt;Rounds: 200&lt;br /&gt;Used in: Mk200</English>
<German>Kaliber: 6.5x39 mm Leuchtspur - Grün&lt;br /&gt;Patronen: 200&lt;br /&gt;Verwendet in: Mk200</German>
</Key>
<Key ID="STR_ACE_Tracers_200Rnd_65x39_cased_Box_tracer_red">
<English>6.5 mm 200Rnd Belt Case Tracer (Red)</English>
<German>6,5 mm 200-Schuss-Gurtkiste Leuchtspur (rot)</German>
</Key>
<Key ID="STR_ACE_Tracers_200Rnd_65x39_cased_Box_tracer_red_description">
<English>Caliber: 6.5x39 mm Tracer - Red&lt;br /&gt;Rounds: 200&lt;br /&gt;Used in: Mk200</English>
<German>Kaliber: 6.5x39 mm Leuchtspur - Rot&lt;br /&gt;Patronen: 200&lt;br /&gt;Verwendet in: Mk200</German>
</Key>
<Key ID="STR_ACE_Tracers_20Rnd_762x51_Mag_Tracer_green">
<English>7.62 mm 20Rnd Tracer (Green) Mag</English>
<German>7,62 mm 20-Schuss-Magazin Leuchtspur (Grün)</German>
</Key>
<Key ID="STR_ACE_Tracers_20Rnd_762x51_Mag_Tracer_green_description">
<English>Caliber: 7.62x51 mm NATO Tracer - Green&lt;br /&gt;Rounds: 20&lt;br /&gt;Used in: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17</English>
<German>Kaliber: 7,62x51 mm NATO Leuchtspur - grün&lt;br /&gt;Patronen: 20&lt;br /&gt;Eingesetzt von: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17</German>
</Key>
<Key ID="STR_ACE_Tracers_20Rnd_762x51_Mag_Tracer_yellow">
<English>7.62 mm 20Rnd Tracer (Yellow) Mag</English>
<German>7,62 mm 20-Schuss-Magazin Leuchtspur (Gelb)</German>
</Key>
<Key ID="STR_ACE_Tracers_20Rnd_762x51_Mag_Tracer_yellow_description">
<English>Caliber: 7.62x51 mm NATO Tracer - Yellow&lt;br /&gt;Rounds: 20&lt;br /&gt;Used in: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17</English>
<German>Kaliber: 7,62x51 mm NATO Leuchtspur - gelb&lt;br /&gt;Patronen: 20&lt;br /&gt;Eingesetzt von: Mk18 ABR, Mk-I EMR, Mk14, SPAR-17</German>
</Key>
<Key ID="STR_ACE_Tracers_150Rnd_762x54_Box_red">
<English>7.62mm 150Rnd Box Mixed (Red)</English>
<German>7.62mm 150 Schuss Kiste Gemischt (rot)</German>
</Key>
<Key ID="STR_ACE_Tracers_150Rnd_762x54_Box_yellow">
<English>7.62mm 150Rnd Box Mixed (Yellow)</English>
<German>7.62mm 150 Schuss Kiste Gemischt (gelb)</German>
</Key>
<Key ID="STR_ACE_Tracers_150Rnd_762x54_Box_Tracer_red">
<English>7.62mm 150Rnd Box Tracer (Red)</English>
<German>7.62mm 150 Schuss Kiste Leuchtspur (rot)</German>
</Key>
<Key ID="STR_ACE_Tracers_150Rnd_762x54_Box_Tracer_red_description">
<English>Caliber: 7.62x54 mm Tracer - Red&lt;br /&gt;Rounds: 150&lt;br /&gt;Used in: Zafir</English>
<German>Kaliber: 7.62x54 mm Leuchtspur - Rot&lt;br /&gt;Patronen: 150&lt;br /&gt;Verwendet in: Zafir</German>
</Key>
<Key ID="STR_ACE_Tracers_150Rnd_762x54_Box_Tracer_yellow">
<English>7.62mm 150Rnd Box Tracer (Yellow)</English>
<German>7.62mm 150 Schuss Kiste Leuchtspur (Rot)</German>
</Key>
<Key ID="STR_ACE_Tracers_150Rnd_762x54_Box_Tracer_yellow_description">
<English>Caliber: 7.62x54 mm Tracer - Yellow&lt;br /&gt;Rounds: 150&lt;br /&gt;Used in: Zafir</English>
<German>Kaliber: 7.62x54 mm Leuchtspur - Gelb&lt;br /&gt;Patronen: 150&lt;br /&gt;Verwendet in: Zafir</German>
</Key>
<Key ID="STR_ACE_Tracers_150Rnd_93x64_Mag_yellow">
<English>9.3mm 150Rnd Belt Mixed (Yellow)</English>
<German>9.3mm 150 Schuss Gurt gemischt (Gelb)</German>
</Key>
<Key ID="STR_ACE_Tracers_150Rnd_93x64_Mag_red">
<English>9.3mm 150Rnd Belt Mixed (Red)</English>
<German>9.3mm 150 Schuss Gurt gemischt (Rot)</German>
</Key>
<Key ID="STR_ACE_Tracers_130Rnd_338_Mag_yellow">
<English>.338 NM 130Rnd Belt Mixed (Yellow)</English>
<German>.338 NM 130 Schuss Gurt gemischt (gelb)</German>
</Key>
<Key ID="STR_ACE_Tracers_130Rnd_338_Mag_green">
<English>.338 NM 130Rnd Belt Mixed (Green)</English>
<German>.338 NM 130 Schuss Gurt gemischt (grün)</German>
</Key>
</Container>
</Package>
</Project>