mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'master' of https://github.com/acemod/ACE3 into tripd-updates
This commit is contained in:
commit
3b02e5e90e
2
.github/ISSUE_TEMPLATE.md
vendored
2
.github/ISSUE_TEMPLATE.md
vendored
@ -22,4 +22,4 @@
|
||||
|
||||
**RPT log file:**
|
||||
- Add a link ([gist](https://gist.github.com) or [pastebin](http://pastebin.com)) to the client and/or server RPT file. An instruction to find your RPT files can be found [here](https://community.bistudio.com/wiki/Crash_Files#Arma_3).
|
||||
- If possible at the time the bug is encountered, go to ACE Options and select "Debug To Clipboard", this will print extensive debug information to the RPT file.
|
||||
- If possible at the time the bug is encountered, go to Options and select "ACE Debug To Clipboard", this will print extensive debug information to the RPT file and copy it to clipboard.
|
||||
|
@ -89,6 +89,7 @@ havena <silveredenis@gmail.com>
|
||||
Hawkins
|
||||
Head <brobergsebastian@gmail.com>
|
||||
Hybrid V
|
||||
john681611 <john681611@hotmail.com>
|
||||
Karneck <dschultz26@hotmail.com>
|
||||
Kavinsky <nmunozfernandez@gmail.com>
|
||||
Keithen <Keithen.Neu@gmail.com>
|
||||
|
@ -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.11.0-blue.svg?style=flat-square" alt="ACE3 Version">
|
||||
<img src="https://img.shields.io/badge/Version-3.12.0-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">
|
||||
|
@ -40,6 +40,6 @@ class ACE_Settings {
|
||||
description = CSTRING(simulationInterval_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 0.05;
|
||||
sliderSettings[] = {0, 0.2, 0.05, 1};
|
||||
sliderSettings[] = {0, 0.2, 0.05, 2};
|
||||
};
|
||||
};
|
||||
|
@ -85,11 +85,13 @@
|
||||
<English>Enable Muzzle Velocity Variation</English>
|
||||
<German>Variation der Mündungsgeschwindigkeit aktivieren</German>
|
||||
<Japanese>銃口初速の変化</Japanese>
|
||||
<Italian>Abilita Variazione Velocità Volata</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_muzzleVelocityVariationEnabled_Description">
|
||||
<English>Simulates slight variations in muzzle velocity between each shot</English>
|
||||
<German>Simuliert leichte Variationen der Mündungsgeschwindigkeit zwischen jedem Schuss.</German>
|
||||
<Japanese>発射毎に僅かな銃口初速の変化をシミュレートします。</Japanese>
|
||||
<Italian>Simula lievi variazioni della velocità della volata tra un colpo e l'altro</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_DisplayName">
|
||||
<English>Enable Ammo Temperature Simulation</English>
|
||||
|
@ -20,6 +20,7 @@ class ACE_Settings {
|
||||
description = CSTRING(PerformanceFactor_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 1;
|
||||
sliderSettings[] = {0, 5, 1, 1};
|
||||
};
|
||||
class GVAR(recoveryFactor) {
|
||||
category = CSTRING(DisplayName);
|
||||
@ -27,6 +28,7 @@ class ACE_Settings {
|
||||
description = CSTRING(RecoveryFactor_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 1;
|
||||
sliderSettings[] = {0, 5, 1, 1};
|
||||
};
|
||||
class GVAR(loadFactor) {
|
||||
category = CSTRING(DisplayName);
|
||||
@ -34,6 +36,7 @@ class ACE_Settings {
|
||||
description = CSTRING(LoadFactor_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 1;
|
||||
sliderSettings[] = {0, 5, 1, 1};
|
||||
};
|
||||
class GVAR(terrainGradientFactor) {
|
||||
category = CSTRING(DisplayName);
|
||||
@ -41,5 +44,6 @@ class ACE_Settings {
|
||||
description = CSTRING(TerrainGradientFactor_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 1;
|
||||
sliderSettings[] = {0, 5, 1, 1};
|
||||
};
|
||||
};
|
||||
|
36
addons/arsenal/RscDisplayMain.hpp
Normal file
36
addons/arsenal/RscDisplayMain.hpp
Normal file
@ -0,0 +1,36 @@
|
||||
class RscStandardDisplay;
|
||||
class RscDisplayMain: RscStandardDisplay {
|
||||
class controls {
|
||||
class GroupSingleplayer: RscControlsGroupNoScrollbars {
|
||||
class Controls;
|
||||
};
|
||||
class GroupTutorials: GroupSingleplayer {
|
||||
h = "(6 * 1.5) * (pixelH * pixelGrid * 2)";
|
||||
|
||||
class Controls: Controls {
|
||||
class Bootcamp;
|
||||
class VRTraining;
|
||||
class Arsenal;
|
||||
class GVAR(mission): Arsenal {
|
||||
idc = -1;
|
||||
text = CSTRING(Mission);
|
||||
tooltip = CSTRING(Mission_tooltip);
|
||||
y = "(3 * 1.5) * (pixelH * pixelGrid * 2) + (pixelH)";
|
||||
onbuttonclick = QUOTE(playMission [ARR_2('','PATHTOF(missions\Arsenal.VR)')]);
|
||||
animTextureNormal = QPATHTOF(data\buttonMissionMainMenu_ca.paa);
|
||||
animTextureDisabled = QPATHTOF(data\buttonMissionMainMenu_ca.paa);
|
||||
animTextureOver = QPATHTOF(data\buttonMissionMainMenuHover_ca.paa);
|
||||
animTextureFocused = QPATHTOF(data\buttonMissionMainMenuHover_ca.paa);
|
||||
animTexturePressed = QPATHTOF(data\buttonMissionMainMenu_ca.paa);
|
||||
animTextureDefault = QPATHTOF(data\buttonMissionMainMenu_ca.paa);
|
||||
};
|
||||
class FieldManual: Bootcamp {
|
||||
y = "(4 * 1.5) * (pixelH * pixelGrid * 2) + (pixelH)";
|
||||
};
|
||||
class CommunityGuides: Bootcamp {
|
||||
y = "(5 * 1.5) * (pixelH * pixelGrid * 2) + (pixelH)";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
@ -14,6 +14,7 @@ PREP(clearSearchbar);
|
||||
PREP(fillLeftPanel);
|
||||
PREP(fillLoadoutsList);
|
||||
PREP(fillRightPanel);
|
||||
PREP(handleLoadoutsSearchbar);
|
||||
PREP(handleMouse);
|
||||
PREP(handleScrollWheel);
|
||||
PREP(handleSearchbar);
|
||||
@ -34,6 +35,7 @@ PREP(onSelChangedRight);
|
||||
PREP(onSelChangedRightListnBox);
|
||||
PREP(open3DEN);
|
||||
PREP(openBox);
|
||||
PREP(portVALoadouts);
|
||||
PREP(removeBox);
|
||||
PREP(removeVirtualItems);
|
||||
PREP(scanConfig);
|
||||
|
@ -4,9 +4,7 @@
|
||||
GVAR(EH_ID) = 0;
|
||||
GVAR(lastSearchTextLeft) = "";
|
||||
GVAR(lastSearchTextRight) = "";
|
||||
|
||||
[QGVAR(addVirtualItems), {_this call FUNC(addVirtualItems)}] call CBA_fnc_addEventHandler;
|
||||
[QGVAR(removeVirtualItems), {_this call FUNC(removeVirtualItems)}] call CBA_fnc_addEventHandler;
|
||||
GVAR(lastSearchTextLoadouts) = "";
|
||||
|
||||
[QGVAR(initBox), {_this call FUNC(initBox)}] call CBA_fnc_addEventHandler;
|
||||
[QGVAR(removeBox), {_this call FUNC(removeBox)}] call CBA_fnc_addEventHandler;
|
||||
|
@ -37,4 +37,5 @@ class Cfg3DEN {
|
||||
};
|
||||
|
||||
#include "ui\RscAttributes.hpp"
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "RscDisplayMain.hpp"
|
||||
|
BIN
addons/arsenal/data/buttonMissionMainMenuHover_ca.paa
Normal file
BIN
addons/arsenal/data/buttonMissionMainMenuHover_ca.paa
Normal file
Binary file not shown.
BIN
addons/arsenal/data/buttonMissionMainMenu_ca.paa
Normal file
BIN
addons/arsenal/data/buttonMissionMainMenu_ca.paa
Normal file
Binary file not shown.
@ -18,6 +18,7 @@
|
||||
#define IDC_totalWeightText 801
|
||||
#define IDC_message 9
|
||||
#define IDC_menuBar 10
|
||||
#define IDC_menuBarClose 1001
|
||||
#define IDC_infoBox 11
|
||||
#define IDC_infoBackground 1101
|
||||
#define IDC_infoName 1102
|
||||
@ -106,6 +107,7 @@
|
||||
#define IDC_buttonShare 306
|
||||
#define IDC_buttonDelete 307
|
||||
#define IDC_buttonRename 308
|
||||
#define IDC_loadoutsSearchbar 309
|
||||
#define IDC_buttonMyLoadoutsBackground 401
|
||||
#define IDC_buttonMyLoadouts 402
|
||||
#define IDC_buttonDefaultLoadoutsBackground 403
|
||||
@ -329,4 +331,4 @@ _buttonCurrentMag2Ctrl ctrlCommit FADE_DELAY;\
|
||||
_contentPanelCtrl lnbSetPicture [[_newRow, 6], getText (configFile >> "cfgWeapons" >> ((_loadout select 4) select 0) >> "picture")];\
|
||||
_contentPanelCtrl lnbSetPicture [[_newRow, 7], getText (configFile >> "cfgVehicles" >> ((_loadout select 5) select 0) >> "picture")];\
|
||||
_contentPanelCtrl lnbSetPicture [[_newRow, 8], getText (configFile >> "cfgWeapons" >> (_loadout select 6) >> "picture")];\
|
||||
_contentPanelCtrl lnbSetPicture [[_newRow, 9], getText (configFile >> "cfgGlasses" >> (_loadout select 7) >> "picture")];
|
||||
_contentPanelCtrl lnbSetPicture [[_newRow, 9], getText (configFile >> "cfgGlasses" >> (_loadout select 7) >> "picture")];
|
||||
|
@ -24,206 +24,200 @@ params [["_object", objNull, [objNull]], ["_items", [], [true, []]], ["_global",
|
||||
if (_object == objNull) exitWith {};
|
||||
if (_items isEqualType [] && {count _items == 0}) exitWith {};
|
||||
|
||||
if (_global && {isMultiplayer}) then {
|
||||
[QGVAR(addVirtualItems), [_object, _items, false]] call CBA_fnc_globalEvent;
|
||||
private _cargo = _object getVariable [QGVAR(virtualItems), [
|
||||
[[], [], []], // Weapons 0, primary, secondary, handgun
|
||||
[[], [], [], []], // WeaponAccessories 1, optic,side,muzzle,bipod
|
||||
[ ], // Magazines 2
|
||||
[ ], // Headgear 3
|
||||
[ ], // Uniform 4
|
||||
[ ], // Vest 5
|
||||
[ ], // Backpacks 6
|
||||
[ ], // Goggles 7
|
||||
[ ], // NVGs 8
|
||||
[ ], // Binoculars 9
|
||||
[ ], // Map 10
|
||||
[ ], // Compass 11
|
||||
[ ], // Radio slot 12
|
||||
[ ], // Watch slot 13
|
||||
[ ], // Comms slot 14
|
||||
[ ], // WeaponThrow 15
|
||||
[ ], // WeaponPut 16
|
||||
[ ] // InventoryItems 17
|
||||
]];
|
||||
|
||||
} else {
|
||||
private _cargo = _object getVariable [QGVAR(virtualItems), [
|
||||
[[], [], []], // Weapons 0, primary, secondary, handgun
|
||||
[[], [], [], []], // WeaponAccessories 1, optic,side,muzzle,bipod
|
||||
[ ], // Magazines 2
|
||||
[ ], // Headgear 3
|
||||
[ ], // Uniform 4
|
||||
[ ], // Vest 5
|
||||
[ ], // Backpacks 6
|
||||
[ ], // Goggles 7
|
||||
[ ], // NVGs 8
|
||||
[ ], // Binoculars 9
|
||||
[ ], // Map 10
|
||||
[ ], // Compass 11
|
||||
[ ], // Radio slot 12
|
||||
[ ], // Watch slot 13
|
||||
[ ], // Comms slot 14
|
||||
[ ], // WeaponThrow 15
|
||||
[ ], // WeaponPut 16
|
||||
[ ] // InventoryItems 17
|
||||
]];
|
||||
private _configCfgWeapons = configFile >> "CfgWeapons"; //Save this lookup in variable for perf improvement
|
||||
|
||||
private _configCfgWeapons = configFile >> "CfgWeapons"; //Save this lookup in variable for perf improvement
|
||||
if (_items isEqualType true && {_items}) then {
|
||||
private _configItems = uiNamespace getVariable QGVAR(configItems);
|
||||
|
||||
if (_items isEqualType true) then {
|
||||
if (_items) then {
|
||||
private _configItems = uiNamespace getVariable QGVAR(configItems);
|
||||
{
|
||||
(_x select 0) append (_x select 1);
|
||||
(_x select 2) set [(_x select 3), (_x select 0) arrayIntersect (_x select 0)];
|
||||
} forEach [
|
||||
[(_cargo select 0 select 0),(_configItems select 0 select 0), _cargo select 0, 0],
|
||||
[(_cargo select 0 select 1),(_configItems select 0 select 1), _cargo select 0, 1],
|
||||
[(_cargo select 0 select 2),(_configItems select 0 select 2), _cargo select 0, 2],
|
||||
[(_cargo select 1 select 0),(_configItems select 1 select 0), _cargo select 1, 0],
|
||||
[(_cargo select 1 select 1),(_configItems select 1 select 1), _cargo select 1, 1],
|
||||
[(_cargo select 1 select 2),(_configItems select 1 select 2), _cargo select 1, 2],
|
||||
[(_cargo select 1 select 3),(_configItems select 1 select 3), _cargo select 1, 3]
|
||||
];
|
||||
|
||||
{
|
||||
(_x select 0) append (_x select 1);
|
||||
(_x select 2) set [(_x select 3), (_x select 0) arrayIntersect (_x select 0)];
|
||||
} forEach [
|
||||
[(_cargo select 0 select 0),(_configItems select 0 select 0), _cargo select 0, 0],
|
||||
[(_cargo select 0 select 1),(_configItems select 0 select 1), _cargo select 0, 1],
|
||||
[(_cargo select 0 select 2),(_configItems select 0 select 2), _cargo select 0, 2],
|
||||
[(_cargo select 1 select 0),(_configItems select 1 select 0), _cargo select 1, 0],
|
||||
[(_cargo select 1 select 1),(_configItems select 1 select 1), _cargo select 1, 1],
|
||||
[(_cargo select 1 select 2),(_configItems select 1 select 2), _cargo select 1, 2],
|
||||
[(_cargo select 1 select 3),(_configItems select 1 select 3), _cargo select 1, 3]
|
||||
];
|
||||
|
||||
for "_index" from 2 to 17 do {
|
||||
(_cargo select _index) append (_configItems select _index);
|
||||
_cargo set [_index, (_cargo select _index) arrayIntersect (_cargo select _index)];
|
||||
};
|
||||
};
|
||||
} else {
|
||||
{
|
||||
if (_x isEqualType "") then {
|
||||
private _configItemInfo = _configCfgWeapons >> _x >> "ItemInfo";
|
||||
private _simulationType = getText (_configCfgWeapons >> _x >> "simulation");
|
||||
switch true do {
|
||||
case (isClass (_configCfgWeapons >> _x)): {
|
||||
switch true do {
|
||||
/* Weapon acc */
|
||||
case (
|
||||
isClass (_configItemInfo) &&
|
||||
{(getNumber (_configItemInfo >> "type")) in [101, 201, 301, 302]} &&
|
||||
{!(_x isKindOf ["CBA_MiscItem", (_configCfgWeapons)])}
|
||||
): {
|
||||
switch (getNumber (_configItemInfo >> "type")) do {
|
||||
case 201: {
|
||||
(_cargo select 1) select 0 pushBackUnique _x;
|
||||
};
|
||||
case 301: {
|
||||
(_cargo select 1) select 1 pushBackUnique _x;
|
||||
};
|
||||
case 101: {
|
||||
(_cargo select 1) select 2 pushBackUnique _x;
|
||||
};
|
||||
case 302: {
|
||||
(_cargo select 1) select 3 pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
};
|
||||
/* Headgear */
|
||||
case (isClass (_configItemInfo) &&
|
||||
{getNumber (_configItemInfo >> "type") == 605}): {
|
||||
(_cargo select 3) pushBackUnique _x;
|
||||
};
|
||||
/* Uniform */
|
||||
case (isClass (_configItemInfo) &&
|
||||
{getNumber (_configItemInfo >> "type") == 801}): {
|
||||
(_cargo select 4) pushBackUnique _x;
|
||||
};
|
||||
/* Vest */
|
||||
case (isClass (_configItemInfo) &&
|
||||
{getNumber (_configItemInfo >> "type") == 701}): {
|
||||
(_cargo select 5) pushBackUnique _x;
|
||||
};
|
||||
/* NVgs */
|
||||
case (_simulationType == "NVGoggles"): {
|
||||
(_cargo select 8) pushBackUnique _x;
|
||||
};
|
||||
/* Binos */
|
||||
case (_simulationType == "Binocular" ||
|
||||
{(_simulationType == 'Weapon') && {(getNumber (_configCfgWeapons >> _x >> 'type') == 4096)}}): {
|
||||
(_cargo select 9) pushBackUnique _x;
|
||||
};
|
||||
/* Map */
|
||||
case (_simulationType == "ItemMap"): {
|
||||
(_cargo select 10) pushBackUnique _x;
|
||||
};
|
||||
/* Compass */
|
||||
case (_simulationType == "ItemCompass"): {
|
||||
(_cargo select 11) pushBackUnique _x;
|
||||
};
|
||||
/* Radio */
|
||||
case (_simulationType == "ItemRadio"): {
|
||||
(_cargo select 12) pushBackUnique _x;
|
||||
};
|
||||
/* Watch */
|
||||
case (_simulationType == "ItemWatch"): {
|
||||
(_cargo select 13) pushBackUnique _x;
|
||||
};
|
||||
/* GPS */
|
||||
case (_simulationType == "ItemGPS"): {
|
||||
(_cargo select 14) pushBackUnique _x;
|
||||
};
|
||||
/* UAV terminals */
|
||||
case (isClass (_configItemInfo) &&
|
||||
{getNumber (_configItemInfo >> "type") == 621}): {
|
||||
(_cargo select 14) pushBackUnique _x;
|
||||
};
|
||||
/* Weapon, at the bottom to avoid adding binos */
|
||||
case (isClass (_configCfgWeapons >> _x >> "WeaponSlotsInfo") &&
|
||||
{getNumber (_configCfgWeapons >> _x >> 'type') != 4096}): {
|
||||
switch (getNumber (_configCfgWeapons >> _x >> "type")) do {
|
||||
case 1: {
|
||||
(_cargo select 0) select 0 pushBackUnique ([_x] call bis_fnc_baseWeapon);
|
||||
};
|
||||
case 2: {
|
||||
(_cargo select 0) select 2 pushBackUnique ([_x] call bis_fnc_baseWeapon);
|
||||
};
|
||||
case 4: {
|
||||
(_cargo select 0) select 1 pushBackUnique ([_x] call bis_fnc_baseWeapon);
|
||||
};
|
||||
};
|
||||
};
|
||||
/* Misc items */
|
||||
case (
|
||||
isClass (_configItemInfo) &&
|
||||
((getNumber (_configItemInfo >> "type")) in [101, 201, 301, 302] &&
|
||||
{(_x isKindOf ["CBA_MiscItem", (_configCfgWeapons)])}) ||
|
||||
{(getNumber (_configItemInfo >> "type")) in [401, 619, 620]} ||
|
||||
{(getText (_configCfgWeapons >> _x >> "simulation")) == "ItemMineDetector"}
|
||||
): {
|
||||
(_cargo select 17) pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
};
|
||||
case (isClass (configFile >> "CfgMagazines" >> _x)): {
|
||||
// Lists to check against
|
||||
private _grenadeList = [];
|
||||
{
|
||||
_grenadeList append getArray (_configCfgWeapons >> "Throw" >> _x >> "magazines");
|
||||
false
|
||||
} count getArray (_configCfgWeapons >> "Throw" >> "muzzles");
|
||||
|
||||
private _putList = [];
|
||||
{
|
||||
_putList append getArray (_configCfgWeapons >> "Put" >> _x >> "magazines");
|
||||
false
|
||||
} count getArray (_configCfgWeapons >> "Put" >> "muzzles");
|
||||
|
||||
// Check what the magazine actually is
|
||||
switch true do {
|
||||
// Rifle, handgun, secondary weapons mags
|
||||
case (
|
||||
(getNumber (configFile >> "CfgMagazines" >> _x >> "type") in [256,512,1536,16]) &&
|
||||
{!(_x in _grenadeList)} &&
|
||||
{!(_x in _putList)}
|
||||
): {
|
||||
(_cargo select 2) pushBackUnique _x;
|
||||
};
|
||||
// Grenades
|
||||
case (_x in _grenadeList): {
|
||||
(_cargo select 15) pushBackUnique _x;
|
||||
};
|
||||
// Put
|
||||
case (_x in _putList): {
|
||||
(_cargo select 16) pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
};
|
||||
case (isClass (configFile >> "CfgVehicles" >> _x)): {
|
||||
if (getText (configFile >> "CfgVehicles" >> _x >> "vehicleClass") == "Backpacks") then {
|
||||
(_cargo select 6) pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
case (isClass (configFile >> "CfgGlasses" >> _x)): {
|
||||
(_cargo select 7) pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
};
|
||||
} foreach _items;
|
||||
for "_index" from 2 to 17 do {
|
||||
(_cargo select _index) append (_configItems select _index);
|
||||
_cargo set [_index, (_cargo select _index) arrayIntersect (_cargo select _index)];
|
||||
};
|
||||
|
||||
_object setVariable [QGVAR(virtualItems), _cargo];
|
||||
} else {
|
||||
{
|
||||
if (_x isEqualType "") then {
|
||||
private _configItemInfo = _configCfgWeapons >> _x >> "ItemInfo";
|
||||
private _simulationType = getText (_configCfgWeapons >> _x >> "simulation");
|
||||
switch true do {
|
||||
case (isClass (_configCfgWeapons >> _x)): {
|
||||
switch true do {
|
||||
/* Weapon acc */
|
||||
case (
|
||||
isClass (_configItemInfo) &&
|
||||
{(getNumber (_configItemInfo >> "type")) in [101, 201, 301, 302]} &&
|
||||
{!(_x isKindOf ["CBA_MiscItem", (_configCfgWeapons)])}
|
||||
): {
|
||||
switch (getNumber (_configItemInfo >> "type")) do {
|
||||
case 201: {
|
||||
(_cargo select 1) select 0 pushBackUnique _x;
|
||||
};
|
||||
case 301: {
|
||||
(_cargo select 1) select 1 pushBackUnique _x;
|
||||
};
|
||||
case 101: {
|
||||
(_cargo select 1) select 2 pushBackUnique _x;
|
||||
};
|
||||
case 302: {
|
||||
(_cargo select 1) select 3 pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
};
|
||||
/* Headgear */
|
||||
case (isClass (_configItemInfo) &&
|
||||
{getNumber (_configItemInfo >> "type") == 605}): {
|
||||
(_cargo select 3) pushBackUnique _x;
|
||||
};
|
||||
/* Uniform */
|
||||
case (isClass (_configItemInfo) &&
|
||||
{getNumber (_configItemInfo >> "type") == 801}): {
|
||||
(_cargo select 4) pushBackUnique _x;
|
||||
};
|
||||
/* Vest */
|
||||
case (isClass (_configItemInfo) &&
|
||||
{getNumber (_configItemInfo >> "type") == 701}): {
|
||||
(_cargo select 5) pushBackUnique _x;
|
||||
};
|
||||
/* NVgs */
|
||||
case (_simulationType == "NVGoggles"): {
|
||||
(_cargo select 8) pushBackUnique _x;
|
||||
};
|
||||
/* Binos */
|
||||
case (_simulationType == "Binocular" ||
|
||||
{(_simulationType == 'Weapon') && {(getNumber (_configCfgWeapons >> _x >> 'type') == 4096)}}): {
|
||||
(_cargo select 9) pushBackUnique _x;
|
||||
};
|
||||
/* Map */
|
||||
case (_simulationType == "ItemMap"): {
|
||||
(_cargo select 10) pushBackUnique _x;
|
||||
};
|
||||
/* Compass */
|
||||
case (_simulationType == "ItemCompass"): {
|
||||
(_cargo select 11) pushBackUnique _x;
|
||||
};
|
||||
/* Radio */
|
||||
case (_simulationType == "ItemRadio"): {
|
||||
(_cargo select 12) pushBackUnique _x;
|
||||
};
|
||||
/* Watch */
|
||||
case (_simulationType == "ItemWatch"): {
|
||||
(_cargo select 13) pushBackUnique _x;
|
||||
};
|
||||
/* GPS */
|
||||
case (_simulationType == "ItemGPS"): {
|
||||
(_cargo select 14) pushBackUnique _x;
|
||||
};
|
||||
/* UAV terminals */
|
||||
case (isClass (_configItemInfo) &&
|
||||
{getNumber (_configItemInfo >> "type") == 621}): {
|
||||
(_cargo select 14) pushBackUnique _x;
|
||||
};
|
||||
/* Weapon, at the bottom to avoid adding binos */
|
||||
case (isClass (_configCfgWeapons >> _x >> "WeaponSlotsInfo") &&
|
||||
{getNumber (_configCfgWeapons >> _x >> 'type') != 4096}): {
|
||||
switch (getNumber (_configCfgWeapons >> _x >> "type")) do {
|
||||
case 1: {
|
||||
(_cargo select 0) select 0 pushBackUnique ([_x] call bis_fnc_baseWeapon);
|
||||
};
|
||||
case 2: {
|
||||
(_cargo select 0) select 2 pushBackUnique ([_x] call bis_fnc_baseWeapon);
|
||||
};
|
||||
case 4: {
|
||||
(_cargo select 0) select 1 pushBackUnique ([_x] call bis_fnc_baseWeapon);
|
||||
};
|
||||
};
|
||||
};
|
||||
/* Misc items */
|
||||
case (
|
||||
isClass (_configItemInfo) &&
|
||||
((getNumber (_configItemInfo >> "type")) in [101, 201, 301, 302] &&
|
||||
{(_x isKindOf ["CBA_MiscItem", (_configCfgWeapons)])}) ||
|
||||
{(getNumber (_configItemInfo >> "type")) in [401, 619, 620]} ||
|
||||
{(getText (_configCfgWeapons >> _x >> "simulation")) == "ItemMineDetector"}
|
||||
): {
|
||||
(_cargo select 17) pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
};
|
||||
case (isClass (configFile >> "CfgMagazines" >> _x)): {
|
||||
// Lists to check against
|
||||
private _grenadeList = [];
|
||||
{
|
||||
_grenadeList append getArray (_configCfgWeapons >> "Throw" >> _x >> "magazines");
|
||||
false
|
||||
} count getArray (_configCfgWeapons >> "Throw" >> "muzzles");
|
||||
|
||||
private _putList = [];
|
||||
{
|
||||
_putList append getArray (_configCfgWeapons >> "Put" >> _x >> "magazines");
|
||||
false
|
||||
} count getArray (_configCfgWeapons >> "Put" >> "muzzles");
|
||||
|
||||
// Check what the magazine actually is
|
||||
switch true do {
|
||||
// Rifle, handgun, secondary weapons mags
|
||||
case (
|
||||
(getNumber (configFile >> "CfgMagazines" >> _x >> "type") in [256,512,1536,16]) &&
|
||||
{!(_x in _grenadeList)} &&
|
||||
{!(_x in _putList)}
|
||||
): {
|
||||
(_cargo select 2) pushBackUnique _x;
|
||||
};
|
||||
// Grenades
|
||||
case (_x in _grenadeList): {
|
||||
(_cargo select 15) pushBackUnique _x;
|
||||
};
|
||||
// Put
|
||||
case (_x in _putList): {
|
||||
(_cargo select 16) pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
};
|
||||
case (isClass (configFile >> "CfgVehicles" >> _x)): {
|
||||
if (getText (configFile >> "CfgVehicles" >> _x >> "vehicleClass") == "Backpacks") then {
|
||||
(_cargo select 6) pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
case (isClass (configFile >> "CfgGlasses" >> _x)): {
|
||||
(_cargo select 7) pushBackUnique _x;
|
||||
};
|
||||
};
|
||||
};
|
||||
} foreach _items;
|
||||
};
|
||||
|
||||
_object setVariable [QGVAR(virtualItems), _cargo, _global];
|
||||
|
45
addons/arsenal/functions/fnc_handleLoadoutsSearchbar.sqf
Normal file
45
addons/arsenal/functions/fnc_handleLoadoutsSearchbar.sqf
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Handles keyboard inputs inside the searchbars text boxes.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Loadouts display <DISPLAY>
|
||||
* 1: Searchbar control <CONTROL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control"];
|
||||
|
||||
private _textString = ctrlText _control;
|
||||
|
||||
private _contentPanelCtrl = _display displayCtrl IDC_contentPanel;
|
||||
|
||||
if !(GVAR(lastSearchTextLoadouts) isEqualTo "" || {(_textString find GVAR(lastSearchTextLoadouts)) == 0}) then {//don't refill if there is no need
|
||||
[_display, _display displayCtrl GVAR(currentLoadoutsTab)] call FUNC(fillLoadoutsList);
|
||||
};
|
||||
|
||||
GVAR(lastSearchTextLoadouts) = _textString;
|
||||
if (count _textString == 0) exitWith {};
|
||||
|
||||
private _contentPanelCtrl = _display displayCtrl IDC_contentPanel;
|
||||
|
||||
private _itemsToGo = (lnbSize _contentPanelCtrl) select 0;
|
||||
private _lbIndex = 0;
|
||||
while {_itemsToGo > 0} do {
|
||||
private _currentData = _contentPanelCtrl lnbText [_lbIndex, 1];
|
||||
private _currentClassname = _contentPanelCtrl lnbData [_lbIndex, 0];
|
||||
|
||||
if ((_currentData isEqualTo "") || {(((toUpper _currentData) find (toUpper _textString)) == -1) && {((toUpper _currentClassname) find (toUpper _textString)) == -1}}) then {
|
||||
_contentPanelCtrl lnbDeleteRow _lbIndex;
|
||||
} else {
|
||||
_lbIndex = _lbIndex + 1;
|
||||
};
|
||||
_itemsToGo = _itemsToGo - 1;
|
||||
};
|
||||
_contentPanelCtrl lnbSetCurSelRow -1;
|
@ -21,101 +21,168 @@
|
||||
params ["", "_args"];
|
||||
_args params ["_display", "_keyPressed", "_shiftState", "_ctrlState", "_altState"];
|
||||
|
||||
if !((findDisplay IDD_loadouts_display) isEqualTo displayNull) exitWith {};
|
||||
|
||||
GVAR(shiftState) = _shiftState;
|
||||
|
||||
private _return = true;
|
||||
private _loadoutsDisplay = findDisplay IDD_loadouts_display;
|
||||
|
||||
if (!GVAR(leftSearchbarFocus) && {!GVAR(rightSearchbarFocus)}) then {
|
||||
if !(_loadoutsDisplay isEqualTo displayNull) then {
|
||||
if !(GVAR(loadoutsSearchbarFocus)) then {
|
||||
switch true do {
|
||||
// Close button
|
||||
case (_keyPressed == DIK_ESCAPE): {
|
||||
_display closeDisplay 2;
|
||||
};
|
||||
// Search field
|
||||
case (_keyPressed == DIK_F && {_ctrlState}): {
|
||||
ctrlSetFocus (_loadoutsDisplay displayCtrl IDC_loadoutsSearchbar);
|
||||
};
|
||||
};
|
||||
} else {
|
||||
switch true do {
|
||||
case (_keyPressed == DIK_ESCAPE): {
|
||||
_display closeDisplay 2;
|
||||
};
|
||||
case (_keyPressed == DIK_BACKSPACE): {
|
||||
_return = false;
|
||||
};
|
||||
case (_keyPressed == DIK_NUMPADENTER);
|
||||
case (_keyPressed == DIK_RETURN): {
|
||||
[_loadoutsDisplay, _loadoutsDisplay displayCtrl IDC_loadoutsSearchbar] call FUNC(handleLoadoutsSearchBar);
|
||||
};
|
||||
case (_keyPressed in [DIK_LEFT, DIK_RIGHT]): {
|
||||
_return = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
switch true do {
|
||||
// Close button
|
||||
case (_keyPressed == DIK_ESCAPE): {
|
||||
_display closeDisplay 2;
|
||||
};
|
||||
// Hide button
|
||||
case (_keyPressed == DIK_BACKSPACE): {
|
||||
[_display] call FUNC(buttonHide);
|
||||
};
|
||||
// Export button
|
||||
switch true do {
|
||||
case (_keyPressed == DIK_C && {_ctrlState}): {
|
||||
[_display] call FUNC(buttonExport);
|
||||
_return = false;
|
||||
};
|
||||
// Import button
|
||||
case (_keyPressed == DIK_V && {_ctrlState}): {
|
||||
[_display] call FUNC(buttonImport);
|
||||
_return = false;
|
||||
};
|
||||
// Switch vision mode
|
||||
case (_keyPressed in (actionkeys "nightvision")): {
|
||||
if (isNil QGVAR(visionMode)) then {
|
||||
GVAR(visionMode) = 0;
|
||||
};
|
||||
GVAR(visionMode) = (GVAR(visionMode) + 1) % 3;
|
||||
|
||||
switch GVAR(visionMode) do {
|
||||
//--- Normal
|
||||
case 0: {
|
||||
camusenvg false;
|
||||
false setCamUseTi 0;
|
||||
};
|
||||
//--- NVG
|
||||
case 1: {
|
||||
camusenvg true;
|
||||
false setCamUseTi 0;
|
||||
};
|
||||
//--- TI
|
||||
default {
|
||||
camusenvg false;
|
||||
true setCamUseTi 0;
|
||||
};
|
||||
};
|
||||
|
||||
playsound ["RscDisplayCurator_visionMode",true];
|
||||
case (_keyPressed == DIK_A && {_ctrlState}): {
|
||||
_return = false;
|
||||
};
|
||||
case (_keyPressed == DIK_X && {_ctrlState}): {
|
||||
_return = false;
|
||||
};
|
||||
case (GVAR(loadoutsPanelFocus) && {_keyPressed in [DIK_UP, DIK_DOWN]}): {
|
||||
_return = false;
|
||||
};
|
||||
};
|
||||
} else {
|
||||
switch true do {
|
||||
case (_keyPressed == DIK_ESCAPE): {
|
||||
_display closeDisplay 2;
|
||||
};
|
||||
case (_keyPressed == DIK_BACKSPACE): {
|
||||
_return = false;
|
||||
};
|
||||
case (_keyPressed == DIK_RETURN): {
|
||||
if (GVAR(leftSearchbarFocus)) then {
|
||||
[_display, _display displayCtrl IDC_leftSearchbar] call FUNC(handleSearchBar);
|
||||
};
|
||||
if (GVAR(rightSearchbarFocus)) then {
|
||||
[_display, _display displayCtrl IDC_rightSearchbar] call FUNC(handleSearchBar);
|
||||
|
||||
if (!GVAR(leftSearchbarFocus) && {!GVAR(rightSearchbarFocus)}) then {
|
||||
|
||||
switch true do {
|
||||
// Close button
|
||||
case (_keyPressed == DIK_ESCAPE): {
|
||||
_display closeDisplay 2;
|
||||
};
|
||||
// Hide button
|
||||
case (_keyPressed == DIK_BACKSPACE): {
|
||||
[_display] call FUNC(buttonHide);
|
||||
};
|
||||
// Export button
|
||||
case (_keyPressed == DIK_C && {_ctrlState}): {
|
||||
[_display] call FUNC(buttonExport);
|
||||
};
|
||||
// Import button
|
||||
case (_keyPressed == DIK_V && {_ctrlState}): {
|
||||
[_display] call FUNC(buttonImport);
|
||||
};
|
||||
// Search fields
|
||||
case (_keyPressed == DIK_F && {_ctrlState}): {
|
||||
ctrlSetFocus (_display displayCtrl IDC_leftSearchbar);
|
||||
};
|
||||
// Switch vision mode
|
||||
case (_keyPressed in (actionkeys "nightvision")): {
|
||||
if (isNil QGVAR(visionMode)) then {
|
||||
GVAR(visionMode) = 0;
|
||||
};
|
||||
GVAR(visionMode) = (GVAR(visionMode) + 1) % 3;
|
||||
|
||||
switch GVAR(visionMode) do {
|
||||
//--- Normal
|
||||
case 0: {
|
||||
camusenvg false;
|
||||
false setCamUseTi 0;
|
||||
};
|
||||
//--- NVG
|
||||
case 1: {
|
||||
camusenvg true;
|
||||
false setCamUseTi 0;
|
||||
};
|
||||
//--- TI
|
||||
default {
|
||||
camusenvg false;
|
||||
true setCamUseTi 0;
|
||||
};
|
||||
};
|
||||
|
||||
playsound ["RscDisplayCurator_visionMode",true];
|
||||
};
|
||||
};
|
||||
case (_keyPressed in [DIK_LEFT, DIK_RIGHT]): {
|
||||
_return = false;
|
||||
};
|
||||
case (_keyPressed == DIK_C && {_ctrlState}): {
|
||||
_return = false;
|
||||
};
|
||||
case (_keyPressed == DIK_V && {_ctrlState}): {
|
||||
_return = false;
|
||||
} else {
|
||||
switch true do {
|
||||
case (_keyPressed == DIK_ESCAPE): {
|
||||
_display closeDisplay 2;
|
||||
};
|
||||
case (_keyPressed == DIK_BACKSPACE): {
|
||||
_return = false;
|
||||
};
|
||||
case (_keyPressed == DIK_NUMPADENTER);
|
||||
case (_keyPressed == DIK_RETURN): {
|
||||
if (GVAR(leftSearchbarFocus)) then {
|
||||
[_display, _display displayCtrl IDC_leftSearchbar] call FUNC(handleSearchBar);
|
||||
};
|
||||
if (GVAR(rightSearchbarFocus)) then {
|
||||
[_display, _display displayCtrl IDC_rightSearchbar] call FUNC(handleSearchBar);
|
||||
};
|
||||
};
|
||||
case (_keyPressed in [DIK_LEFT, DIK_RIGHT]): {
|
||||
_return = false;
|
||||
};
|
||||
case (_keyPressed == DIK_C && {_ctrlState}): {
|
||||
_return = false;
|
||||
};
|
||||
case (_keyPressed == DIK_V && {_ctrlState}): {
|
||||
_return = false;
|
||||
};
|
||||
case (_keyPressed == DIK_A && {_ctrlState}): {
|
||||
_return = false;
|
||||
};
|
||||
case (_keyPressed == DIK_X && {_ctrlState}): {
|
||||
_return = false;
|
||||
};
|
||||
// Search fields
|
||||
case (_keyPressed == DIK_F && {_ctrlState}): {
|
||||
if (GVAR(rightSearchbarFocus)) then {
|
||||
ctrlSetFocus (_display displayCtrl IDC_leftSearchbar);
|
||||
} else {
|
||||
ctrlSetFocus (_display displayCtrl IDC_rightSearchbar);
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
if (GVAR(leftTabFocus) && {_keyPressed in [DIK_UP, DIK_DOWN]}) then {
|
||||
_return = false;
|
||||
};
|
||||
|
||||
if (GVAR(rightTabFocus) && {_keyPressed in [DIK_UP, DIK_DOWN]}) then {
|
||||
_return = false;
|
||||
};
|
||||
|
||||
if (GVAR(rightTabLnBFocus) && {_keyPressed in [DIK_UP, DIK_DOWN]}) then {
|
||||
_return = false;
|
||||
};
|
||||
|
||||
if (GVAR(rightTabLnBFocus) && {_keyPressed in [DIK_LEFT, DIK_RIGHT]}) then {
|
||||
[_display, [1, 0] select (_keyPressed == DIK_LEFT)] call FUNC(buttonCargo);
|
||||
};
|
||||
};
|
||||
|
||||
if (GVAR(leftTabFocus) && {_keyPressed in [DIK_UP, DIK_DOWN]}) then {
|
||||
_return = false;
|
||||
};
|
||||
|
||||
if (GVAR(rightTabFocus) && {_keyPressed in [DIK_UP, DIK_DOWN]}) then {
|
||||
_return = false;
|
||||
};
|
||||
|
||||
if (GVAR(rightTabLnBFocus) && {_keyPressed in [DIK_UP, DIK_DOWN]}) then {
|
||||
_return = false;
|
||||
};
|
||||
|
||||
if (GVAR(rightTabLnBFocus) && {_keyPressed in [DIK_LEFT, DIK_RIGHT]}) then {
|
||||
[_display, [1, 0] select (_keyPressed == DIK_LEFT)] call FUNC(buttonCargo);
|
||||
};
|
||||
|
||||
_return
|
||||
|
@ -20,6 +20,8 @@ private _mouseBlockCtrl = _arsenalDisplay displayCtrl IDC_mouseBlock;
|
||||
|
||||
GVAR(cameraPosition) = GVAR(previousCameraPos);
|
||||
GVAR(previousCameraPos) = nil;
|
||||
GVAR(loadoutsSearchbarFocus) = nil;
|
||||
GVAR(loadoutsPanelFocus) = nil;
|
||||
|
||||
_mouseBlockCtrl ctrlEnable false;
|
||||
_mouseBlockCtrl ctrlCommit 0;
|
||||
|
@ -27,6 +27,8 @@ _mouseBlockCtrl ctrlCommit 0;
|
||||
[_arsenalDisplay] call FUNC(buttonHide);
|
||||
|
||||
GVAR(currentLoadoutsTab) = -1;
|
||||
GVAR(loadoutsSearchbarFocus) = false;
|
||||
GVAR(loadoutsPanelFocus) = false;
|
||||
|
||||
GVAR(previousCameraPos) = GVAR(cameraPosition);
|
||||
GVAR(cameraPosition) = [5,0,20,[-0.85,0,0.85]];
|
||||
|
@ -410,4 +410,4 @@ switch (GVAR(currentLeftPanel)) do {
|
||||
};
|
||||
};
|
||||
|
||||
(_display displayCtrl IDC_totalWeightText) ctrlSetText ([[GVAR(center), 1] call EFUNC(common,getWeight), [GVAR(center), 2] call EFUNC(common,getWeight)] joinString " / ");
|
||||
(_display displayCtrl IDC_totalWeightText) ctrlSetText (format ["%1 (%2)", [GVAR(center), 2] call EFUNC(common,getWeight), [GVAR(center), 1] call EFUNC(common,getWeight)]);
|
||||
|
@ -74,4 +74,4 @@ private _fnc_selectItem = {
|
||||
[IDC_buttonMuzzle, IDC_buttonItemAcc, IDC_buttonOptic, IDC_buttonBipod, IDC_buttonCurrentMag, IDC_buttonCurrentMag2] find GVAR(currentRightPanel)
|
||||
] call _fnc_selectItem;
|
||||
|
||||
(_display displayCtrl IDC_totalWeightText) ctrlSetText ([[GVAR(center), 1] call EFUNC(common,getWeight), [GVAR(center), 2] call EFUNC(common,getWeight)] joinString " / ");
|
||||
(_display displayCtrl IDC_totalWeightText) ctrlSetText (format ["%1 (%2)", [GVAR(center), 2] call EFUNC(common,getWeight), [GVAR(center), 1] call EFUNC(common,getWeight)]);
|
||||
|
43
addons/arsenal/functions/fnc_portVALoadouts.sqf
Normal file
43
addons/arsenal/functions/fnc_portVALoadouts.sqf
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Author: alganthe
|
||||
* Port VA loadouts to ACE Arsenal.
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
private _VALoadouts = +(profilenamespace getvariable ["bis_fnc_saveInventory_data",[]]);
|
||||
private _aceLoadouts = +(profileNamespace getVariable [QGVAR(saved_loadouts),[]]);
|
||||
|
||||
if (isNull player) exitWith {
|
||||
[localize LSTRING(portLoadoutsPlayerError)] call BIS_fnc_error;
|
||||
};
|
||||
|
||||
if (_VALoadouts isEqualTo []) exitWith {
|
||||
[localize LSTRING(portLoadoutsLoadoutError)] call BIS_fnc_error;
|
||||
};
|
||||
|
||||
for "_i" from 0 to (count _VALoadouts - 1) step 2 do {
|
||||
_name = _VALoadouts select _i;
|
||||
_inventory = _VALoadouts select (_i + 1);
|
||||
|
||||
private _sameNameLoadoutsList = _aceLoadouts select {_x select 0 == _name};
|
||||
[player, [profilenamespace, _name]] call bis_fnc_loadinventory;
|
||||
|
||||
private _loadout = getUnitLoadout player;
|
||||
|
||||
if (count _sameNameLoadoutsList > 0) then {
|
||||
_aceLoadouts set [_aceLoadouts find (_sameNameLoadoutsList select 0), [_name, _loadout]];
|
||||
|
||||
} else {
|
||||
_aceLoadouts pushBack [_name, _loadout];
|
||||
};
|
||||
};
|
||||
|
||||
profileNamespace setVariable [QGVAR(saved_loadouts), _aceLoadouts];
|
@ -23,65 +23,58 @@ params [ ["_object", objNull, [objNull]], ["_items", [], [true, [""]]], ["_globa
|
||||
if (_object == objNull) exitWith {};
|
||||
if (_items isEqualType [] && {count _items == 0}) exitWith {};
|
||||
|
||||
if (_global && {isMultiplayer}) then {
|
||||
[QGVAR(removeVirtualItems), [_object, _items, false]] call CBA_fnc_globalEvent;
|
||||
private _cargo = _object getVariable [QGVAR(virtualItems), [
|
||||
[[], [], []], // Weapons 0, primary, handgun, secondary
|
||||
[[], [], [], []], // WeaponAccessories 1, optic,side,muzzle,bipod
|
||||
[ ], // Magazines 2
|
||||
[ ], // Headgear 3
|
||||
[ ], // Uniform 4
|
||||
[ ], // Vest 5
|
||||
[ ], // Backpacks 6
|
||||
[ ], // Goggles 7
|
||||
[ ], // NVGs 8
|
||||
[ ], // Binoculars 9
|
||||
[ ], // Map 10
|
||||
[ ], // Compass 11
|
||||
[ ], // Radio slot 12
|
||||
[ ], // Watch slot 13
|
||||
[ ], // Comms slot 14
|
||||
[ ], // WeaponThrow 15
|
||||
[ ], // WeaponPut 16
|
||||
[ ] // InventoryItems 17
|
||||
]];
|
||||
|
||||
if (_items isEqualType true && {_items}) then {
|
||||
[_object, _global] call FUNC(removeBox);
|
||||
_object setVariable [QGVAR(virtualItems), nil, _global];
|
||||
} else {
|
||||
private _cargo = _object getVariable [QGVAR(virtualItems), [
|
||||
[[], [], []], // Weapons 0, primary, handgun, secondary
|
||||
[[], [], [], []], // WeaponAccessories 1, optic,side,muzzle,bipod
|
||||
[ ], // Magazines 2
|
||||
[ ], // Headgear 3
|
||||
[ ], // Uniform 4
|
||||
[ ], // Vest 5
|
||||
[ ], // Backpacks 6
|
||||
[ ], // Goggles 7
|
||||
[ ], // NVGs 8
|
||||
[ ], // Binoculars 9
|
||||
[ ], // Map 10
|
||||
[ ], // Compass 11
|
||||
[ ], // Radio slot 12
|
||||
[ ], // Watch slot 13
|
||||
[ ], // Comms slot 14
|
||||
[ ], // WeaponThrow 15
|
||||
[ ], // WeaponPut 16
|
||||
[ ] // InventoryItems 17
|
||||
]];
|
||||
|
||||
if (_items isEqualType true) then {
|
||||
if (_items) then {
|
||||
[_object, _global] call FUNC(removeBox);
|
||||
_object setVariable [QGVAR(virtualItems), nil, _global];
|
||||
// Make sure all items are in string form
|
||||
_items = _items select {_x isEqualType "" && {_x != ""}};
|
||||
|
||||
{
|
||||
if (_forEachIndex isEqualTo 0) then {
|
||||
_cargo set [_forEachIndex, [(_x select 0) - _items, (_x select 1) - _items, (_x select 2) - _items]];
|
||||
} else {
|
||||
if (_forEachIndex isEqualTo 1) then {
|
||||
_cargo set [_forEachIndex, [(_x select 0) - _items, (_x select 1) - _items, (_x select 2) - _items, (_x select 3) - _items]];
|
||||
} else {
|
||||
_cargo set [_cargo find _x, _x - _items];
|
||||
};
|
||||
};
|
||||
} foreach _cargo;
|
||||
|
||||
private _itemCount = {
|
||||
if (_x isEqualTo (_cargo select 0) || {_x isEqualTo (_cargo select 1)}) then {
|
||||
!(_x isEqualTo [[],[],[]] || {_x isEqualTo [[],[],[],[]]})
|
||||
} else {
|
||||
!(_x isEqualTo [])
|
||||
};
|
||||
} count _cargo;
|
||||
|
||||
if (_itemCount == 0) then {
|
||||
[_object, _global] call FUNC(removeBox);
|
||||
} else {
|
||||
|
||||
// Make sure all items are in string form
|
||||
_items = _items select {_x isEqualType "" && {_x != ""}};
|
||||
|
||||
{
|
||||
if (_forEachIndex isEqualTo 0) then {
|
||||
_cargo set [_forEachIndex, [(_x select 0) - _items, (_x select 1) - _items, (_x select 2) - _items]];
|
||||
} else {
|
||||
if (_forEachIndex isEqualTo 1) then {
|
||||
_cargo set [_forEachIndex, [(_x select 0) - _items, (_x select 1) - _items, (_x select 2) - _items, (_x select 3) - _items]];
|
||||
} else {
|
||||
_cargo set [_cargo find _x, _x - _items];
|
||||
};
|
||||
};
|
||||
} foreach _cargo;
|
||||
|
||||
private _itemCount = {
|
||||
if (_x isEqualTo (_cargo select 0) || {_x isEqualTo (_cargo select 1)}) then {
|
||||
!(_x isEqualTo [[],[],[]] || {_x isEqualTo [[],[],[],[]]})
|
||||
} else {
|
||||
!(_x isEqualTo [])
|
||||
};
|
||||
} count _cargo;
|
||||
|
||||
_object setVariable [QGVAR(virtualItems), _cargo];
|
||||
|
||||
if (_itemCount == 0) then {
|
||||
[_object, false] call FUNC(removeBox);
|
||||
};
|
||||
_object setVariable [QGVAR(virtualItems), _cargo, _global];
|
||||
};
|
||||
};
|
||||
|
@ -125,7 +125,7 @@ private _magazineGroups = [[],[]] call CBA_fnc_hashCreate;
|
||||
(_cargo select 17) pushBackUnique _className;
|
||||
};
|
||||
};
|
||||
} foreach configProperties [_configCfgWeapons, "isClass _x && {getNumber (_x >> 'scope') == 2} && {getNumber (_x >> 'ace_arsenal_hide') != 1}", true];
|
||||
} foreach configProperties [_configCfgWeapons, "isClass _x && {(if (isNumber (_x >> 'scopeArsenal')) then {getNumber (_x >> 'scopeArsenal')} else {getNumber (_x >> 'scope')}) == 2} && {getNumber (_x >> 'ace_arsenal_hide') != 1}", true];
|
||||
|
||||
{
|
||||
private _className = configName _x;
|
||||
|
@ -47,7 +47,7 @@ if (progressPosition _loadIndicatorBarCtrl > 0) then {
|
||||
_removeAllCtrl ctrlCommit FADE_DELAY;
|
||||
};
|
||||
|
||||
(_display displayCtrl IDC_totalWeightText) ctrlSetText ([[GVAR(center), 1] call EFUNC(common,getWeight), [GVAR(center), 2] call EFUNC(common,getWeight)] joinString " / ");
|
||||
(_display displayCtrl IDC_totalWeightText) ctrlSetText (format ["%1 (%2)", [GVAR(center), 2] call EFUNC(common,getWeight), [GVAR(center), 1] call EFUNC(common,getWeight)]);
|
||||
|
||||
// change button color if unique or too big
|
||||
if (_curSel != -1) then {
|
||||
|
11
addons/arsenal/missions/Arsenal.VR/CfgEventHandlers.hpp
Normal file
11
addons/arsenal/missions/Arsenal.VR/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,11 @@
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call compile preprocessFileLineNumbers 'XEH_preInit.sqf');
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PostInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call compile preprocessFileLineNumbers 'XEH_postInit.sqf');
|
||||
};
|
||||
};
|
113
addons/arsenal/missions/Arsenal.VR/XEH_postInit.sqf
Normal file
113
addons/arsenal/missions/Arsenal.VR/XEH_postInit.sqf
Normal file
@ -0,0 +1,113 @@
|
||||
#include "script_component.hpp"
|
||||
#include "\z\ace\addons\arsenal\defines.hpp"
|
||||
#include "\a3\ui_f\hpp\defineDIKCodes.inc"
|
||||
|
||||
enableSaving [false, false];
|
||||
cba_diagnostic_projectileMaxLines = 10;
|
||||
|
||||
[QGVAR(displayOpened), {
|
||||
private _player = player;
|
||||
|
||||
// player pose
|
||||
[{
|
||||
switch (true) do {
|
||||
case (primaryWeapon _this != ""): {
|
||||
_this switchMove "amovpercmstpslowwrfldnon";
|
||||
};
|
||||
case (handgunWeapon _this != ""): {
|
||||
_this switchMove "amovpercmstpslowwpstdnon";
|
||||
};
|
||||
default {
|
||||
_this switchMove "amovpercmstpsnonwnondnon";
|
||||
};
|
||||
};
|
||||
}, _player] call CBA_fnc_execNextFrame;
|
||||
|
||||
// hide everything except the player
|
||||
{
|
||||
_x enableSimulation false;
|
||||
_x hideObject true;
|
||||
} forEach (allMissionObjects "" - [_player]);
|
||||
|
||||
_player call CBA_fnc_removeUnitTrackProjectiles;
|
||||
_player setFatigue 0;
|
||||
|
||||
// Esc to close mission
|
||||
{
|
||||
private _display = findDisplay IDD_ace_arsenal;
|
||||
|
||||
_display displayAddEventHandler ["KeyDown", {
|
||||
params ["_display", "_key", "_shift"];
|
||||
|
||||
if (_key isEqualTo DIK_ESCAPE && {!_shift}) then {
|
||||
[_display] spawn {
|
||||
disableSerialization;
|
||||
params ["_display"];
|
||||
|
||||
private _return = [
|
||||
localize "str_sure",
|
||||
localize "str_a3_rscdisplaymain_buttonexit",
|
||||
true, false,
|
||||
_display, false, true
|
||||
] call BIS_fnc_GUImessage;
|
||||
|
||||
if (_return) then {
|
||||
profileNamespace setVariable [QGVAR(missionLastLoadout), getUnitLoadout player];
|
||||
_display closeDisplay 2;
|
||||
findDisplay 46 closeDisplay 0;
|
||||
};
|
||||
};
|
||||
true
|
||||
};
|
||||
}];
|
||||
|
||||
private _buttonClose = _display displayCtrl IDC_menuBarClose;
|
||||
_buttonClose ctrlSetText localize "str_a3_rscdisplayarsenal_buttonok";
|
||||
} call CBA_fnc_execNextFrame;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(displayClosed), {
|
||||
private _player = player;
|
||||
|
||||
// unhide everthing
|
||||
{
|
||||
_x enableSimulation true;
|
||||
_x hideObject false;
|
||||
} forEach allMissionObjects "";
|
||||
|
||||
// update VR unit gear
|
||||
{
|
||||
private _unit = _x;
|
||||
|
||||
removeVest _unit;
|
||||
_unit addVest vest _player;
|
||||
|
||||
removeBackpack _unit;
|
||||
_unit addBackpack backpack _player;
|
||||
|
||||
removeHeadgear _unit;
|
||||
_unit addHeadgear headgear _player;
|
||||
|
||||
removeGoggles _unit;
|
||||
_unit addGoggles goggles _player;
|
||||
|
||||
removeAllWeapons _unit;
|
||||
_unit addWeapon primaryWeapon _player;
|
||||
{
|
||||
_unit addPrimaryWeaponItem _x;
|
||||
} forEach primaryWeaponItems _player;
|
||||
|
||||
_unit addWeapon secondaryWeapon _player;
|
||||
|
||||
{
|
||||
_unit addSecondaryWeaponItem _x;
|
||||
} forEach secondaryWeaponItems _player;
|
||||
|
||||
_unit addWeapon handgunWeapon _player;
|
||||
{
|
||||
_unit addHandgunItem _x;
|
||||
} forEach handgunItems _player;
|
||||
} forEach (entities [["B_Soldier_VR_F", "O_Soldier_VR_F", "I_Soldier_VR_F"], [], true]);
|
||||
|
||||
_player call CBA_fnc_addUnitTrackProjectiles;
|
||||
}] call CBA_fnc_addEventHandler;
|
4
addons/arsenal/missions/Arsenal.VR/XEH_preInit.sqf
Normal file
4
addons/arsenal/missions/Arsenal.VR/XEH_preInit.sqf
Normal file
@ -0,0 +1,4 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
PREP(onPause);
|
||||
PREP(createTarget);
|
17
addons/arsenal/missions/Arsenal.VR/description.ext
Normal file
17
addons/arsenal/missions/Arsenal.VR/description.ext
Normal file
@ -0,0 +1,17 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
dev = "commy2";
|
||||
author = ECSTRING(common,ACETeam);
|
||||
|
||||
onLoadName = CSTRING(Mission);
|
||||
overviewText = CSTRING(Mission_overview);
|
||||
overviewPicture = "logo_ca.paa";
|
||||
|
||||
briefing = 0;
|
||||
debriefing = 0;
|
||||
enableDebugConsoleSP = 1;
|
||||
|
||||
doneKeys[] = {"BIS_Arsenal.Map_VR_done"};
|
||||
onPauseScript[] = {QFUNC(onPause)};
|
||||
|
||||
#include "CfgEventHandlers.hpp"
|
66
addons/arsenal/missions/Arsenal.VR/fnc_createTarget.sqf
Normal file
66
addons/arsenal/missions/Arsenal.VR/fnc_createTarget.sqf
Normal file
@ -0,0 +1,66 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_type", "_position", ["_group", grpNull], "_varName"];
|
||||
private _player = player;
|
||||
|
||||
if (isNull _group) then {
|
||||
_group = creategroup east;
|
||||
};
|
||||
|
||||
private _target = _group createUnit [_type, [10,10,0], [], 0, "NONE"];
|
||||
|
||||
if (isNil "_varName") then {
|
||||
_varName = _target call BIS_fnc_netId;
|
||||
};
|
||||
|
||||
_target setPos _position;
|
||||
_target setDir (_position getDir _player);
|
||||
_target doWatch position _player;
|
||||
_target addRating -10e10;
|
||||
_target setUnitPos "UP";
|
||||
_target setBehaviour "CARELESS";
|
||||
_target setCombatMode "BLUE";
|
||||
_target setSpeedMode "LIMITED";
|
||||
_target disableAI "TARGET";
|
||||
_target disableAI "AUTOTARGET";
|
||||
_target allowFleeing 0;
|
||||
_target setSpeaker "BASE";
|
||||
|
||||
[{
|
||||
params ["_target", "_time"];
|
||||
|
||||
if (speaker _target == "BASE") exitWith {time > _time};
|
||||
_target setSpeaker "BASE";
|
||||
false
|
||||
}, {}, [_target, time + 1]] call CBA_fnc_waitUntilAndExecute;
|
||||
|
||||
_player reveal [_target, 4];
|
||||
|
||||
_target addVest vest _player;
|
||||
_target addBackpack backpack _player;
|
||||
_target addHeadgear headgear _player;
|
||||
_target addGoggles goggles _player;
|
||||
_target addWeapon primaryWeapon _player;
|
||||
_target addWeapon secondaryWeapon _player;
|
||||
_target addWeapon handgunWeapon _player;
|
||||
|
||||
_target setVehicleVarName _varName;
|
||||
missionNamespace setvariable [_varName, _target];
|
||||
|
||||
_target switchMove "amovpercmstpslowwrfldnon";
|
||||
_target setVariable ["origin", _position];
|
||||
|
||||
_target addEventHandler ["killed", {
|
||||
params ["_target"];
|
||||
private _position = _target getVariable ["origin", position _target];
|
||||
private _varName = vehicleVarName _target;
|
||||
|
||||
[_target, true] spawn BIS_fnc_VREffectKilled;
|
||||
|
||||
[{isNull (_this select 0)}, {
|
||||
(_this select 1) call FUNC(createTarget);
|
||||
}, [_target, [typeOf _target, _position, group _target, _varName]]] call CBA_fnc_waitUntilAndExecute;
|
||||
}];
|
||||
|
||||
_target call BIS_fnc_VRHitpart;
|
||||
_target
|
16
addons/arsenal/missions/Arsenal.VR/fnc_onPause.sqf
Normal file
16
addons/arsenal/missions/Arsenal.VR/fnc_onPause.sqf
Normal file
@ -0,0 +1,16 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_display"];
|
||||
|
||||
private _ctrlButtonAbort = _display displayCtrl 104;
|
||||
_ctrlButtonAbort ctrlSetText localize LSTRING(Mission);
|
||||
_ctrlButtonAbort ctrlSetTooltip localize LSTRING(ReturnToArsenal);
|
||||
|
||||
_ctrlButtonAbort ctrlSetEventHandler ["ButtonClick", {
|
||||
params ["_control"];
|
||||
ctrlParent _control closeDisplay 2;
|
||||
{[player, player, true] call FUNC(openBox)} call CBA_fnc_execNextFrame;
|
||||
true
|
||||
} call EFUNC(common,codeToString)];
|
||||
|
||||
true
|
175
addons/arsenal/missions/Arsenal.VR/initPlayerLocal.sqf
Normal file
175
addons/arsenal/missions/Arsenal.VR/initPlayerLocal.sqf
Normal file
@ -0,0 +1,175 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_unit"];
|
||||
|
||||
private _loadout = profileNamespace getVariable QGVAR(missionLastLoadout);
|
||||
|
||||
if (!isNil "_loadout") then {
|
||||
_unit setUnitLoadout _loadout;
|
||||
};
|
||||
|
||||
_unit allowDamage false;
|
||||
|
||||
//--- Static targets in various distance
|
||||
{
|
||||
private _position = _unit getRelPos [_x, _forEachIndex];
|
||||
["O_Soldier_VR_F", _position] call FUNC(createTarget);
|
||||
} forEach [10, 20, 30, 40, 50, 100, 500, 1000, 2000];
|
||||
|
||||
//--- Target line
|
||||
private _position = _unit getRelPos [20, -90];
|
||||
|
||||
for "_i" from 0 to 5 do {
|
||||
private _position = _position vectorAdd [0, -3 + _i, 0];
|
||||
["O_Soldier_VR_F", _position] call FUNC(createTarget);
|
||||
};
|
||||
|
||||
//--- Target cluster
|
||||
_position = _unit getRelPos [20, 90];
|
||||
|
||||
for "_i" from 0 to 8 do {
|
||||
private _index = floor (_i / 3);
|
||||
private _position = _position vectorAdd [_index * 1.5, 1.5 + (_i % 3), 0];
|
||||
|
||||
private _target = ["O_Soldier_VR_F", _position] call FUNC(createTarget);
|
||||
|
||||
_target switchMove (["aidlpercmstpslowwrfldnon", "aidlpknlmstpslowwrfldnon_ai", "aidlppnemstpsraswrfldnon_ai"] select _index);
|
||||
_target setUnitPos (["UP", "MIDDLE", "DOWN"] select _index);
|
||||
};
|
||||
|
||||
//--- Target patrol
|
||||
private _group = createGroup east;
|
||||
|
||||
{
|
||||
private _position = _unit getRelPos [10, _x];
|
||||
private _waypoint = _group addWaypoint [_position, 0];
|
||||
|
||||
if (_forEachIndex == 4) then {
|
||||
_waypoint setWaypointType "CYCLE";
|
||||
};
|
||||
} forEach [0, 90, 180, 270, 0];
|
||||
|
||||
_position = _unit getRelPos [10, 180];
|
||||
|
||||
for "_i" from 0 to 1 do {
|
||||
private _target = ["O_Soldier_VR_F", _position] call FUNC(createTarget);
|
||||
|
||||
[_target] join _group;
|
||||
_target stop false;
|
||||
_target enableAI "MOVE";
|
||||
_target setSpeedMode "LIMITED";
|
||||
};
|
||||
|
||||
//--- Armored vehicles
|
||||
private _vehicles = [];
|
||||
|
||||
private _step = 15;
|
||||
_position = [position _unit select 0,(position _unit select 1) + 30,0];
|
||||
|
||||
{
|
||||
private _row = _forEachIndex;
|
||||
private _rowCount = (count _x - 1) * 0.5;
|
||||
|
||||
{
|
||||
private _position = _position vectorAdd [(-_rowCount + _forEachIndex) * _step, _row * _step, 0];
|
||||
|
||||
private _vehicle = createVehicle [_x, _position, [], 0, "NONE"];
|
||||
_vehicle setPos _position;
|
||||
_vehicle setDir 180;
|
||||
_vehicle setVelocity [0,0,-1];
|
||||
_vehicle call BIS_fnc_VRHitpart;
|
||||
|
||||
private _marker = _vehicle call BIS_fnc_boundingBoxMarker;
|
||||
_marker setMarkerColor "ColorOrange";
|
||||
_vehicles pushBack _vehicle;
|
||||
} forEach _x;
|
||||
} forEach [[
|
||||
"Land_VR_Target_MRAP_01_F",
|
||||
"Land_VR_Target_APC_Wheeled_01_F",
|
||||
"Land_VR_Target_MBT_01_cannon_F"
|
||||
], [
|
||||
"Land_VR_Target_MRAP_01_F",
|
||||
"Land_VR_Target_APC_Wheeled_01_F",
|
||||
"Land_VR_Target_MBT_01_cannon_F"
|
||||
]];
|
||||
|
||||
_vehicles spawn {
|
||||
waituntil {
|
||||
private _allDisabled = true;
|
||||
|
||||
{
|
||||
_hitAlive = _x getVariable ["bis_fnc_VRHitParts_hitalive", []];
|
||||
_allDisabled = _allDisabled && ({!_x} count _hitAlive >= 2);
|
||||
sleep 0.1;
|
||||
} forEach _this;
|
||||
|
||||
_allDisabled
|
||||
};
|
||||
|
||||
setStatValue ["MarkMassVirtualDestruction", 1];
|
||||
};
|
||||
|
||||
//--- Cover objects
|
||||
private _coverObjects = [
|
||||
"Land_VR_CoverObject_01_kneel_F",
|
||||
"Land_VR_CoverObject_01_kneelHigh_F",
|
||||
"Land_VR_CoverObject_01_kneelLow_F",
|
||||
"Land_VR_CoverObject_01_stand_F",
|
||||
"Land_VR_CoverObject_01_standHigh_F"
|
||||
];
|
||||
|
||||
for "_i" from 5 to 11 do {
|
||||
private _direction = 180 + _i * 45;
|
||||
private _position = _unit getRelPos [(abs sin _direction + abs cos _direction) * 3, _direction];
|
||||
private _block = createVehicle [_coverObjects select (_i % count _coverObjects), _position, [], 0, "NONE"];
|
||||
_block setPos _position;
|
||||
};
|
||||
|
||||
//--- Starting point
|
||||
private _square = createVehicle ["VR_Area_01_square_1x1_grey_F", position _unit, [], 0, "NONE"];
|
||||
_square setPosASL getPosASL _unit;
|
||||
|
||||
private _marker = createMarker [QGVAR(start), getPosWorld _unit];
|
||||
_marker setMarkerType "mil_start";
|
||||
|
||||
//--- Open Arsenal
|
||||
[_unit, true, false] call FUNC(initBox);
|
||||
|
||||
[{!isNull findDisplay 46}, {
|
||||
[_this, _this, true] call FUNC(openBox);
|
||||
}, _unit] call CBA_fnc_waitUntilAndExecute;
|
||||
|
||||
//--- Salute
|
||||
_unit addEventHandler ["AnimChanged", {
|
||||
params ["_unit", "_anim"];
|
||||
_anim = _anim splitString "_";
|
||||
|
||||
if ("salute" in _anim) then {
|
||||
{
|
||||
_x playAction "salute";
|
||||
} forEach ((_unit nearObjects ["CAManBase", 10]) - [_unit]);
|
||||
};
|
||||
}];
|
||||
|
||||
["#(argb,8,8,3)color(0,0,0,1)", false, nil, 0.1, [0,0.5]] spawn BIS_fnc_textTiles;
|
||||
|
||||
//--- Target markers
|
||||
private _markers = [];
|
||||
|
||||
{
|
||||
private _marker = createMarker [vehicleVarName _x, position _x];
|
||||
_marker setMarkerType "mil_dot";
|
||||
_marker setMarkerColor "ColorOrange";
|
||||
|
||||
_markers pushBack _marker;
|
||||
} forEach (allMissionObjects "CAManBase" - [_unit]);
|
||||
|
||||
_markers spawn {
|
||||
while {true} do {
|
||||
{
|
||||
private _target = missionNamespace getVariable _x;
|
||||
_x setMarkerPos position _target;
|
||||
} forEach _this;
|
||||
sleep 0.1;
|
||||
};
|
||||
};
|
BIN
addons/arsenal/missions/Arsenal.VR/logo_ca.paa
Normal file
BIN
addons/arsenal/missions/Arsenal.VR/logo_ca.paa
Normal file
Binary file not shown.
163
addons/arsenal/missions/Arsenal.VR/mission.sqm
Normal file
163
addons/arsenal/missions/Arsenal.VR/mission.sqm
Normal file
@ -0,0 +1,163 @@
|
||||
version=12;
|
||||
class Mission
|
||||
{
|
||||
addOns[]=
|
||||
{
|
||||
"A3_Map_VR",
|
||||
"A3_Characters_F_BLUFOR",
|
||||
"a3_characters_f_beta",
|
||||
"a3_characters_f"
|
||||
};
|
||||
addOnsAuto[]=
|
||||
{
|
||||
"A3_Characters_F_BLUFOR",
|
||||
"a3_characters_f",
|
||||
"A3_Map_VR"
|
||||
};
|
||||
randomSeed=5486937;
|
||||
class Intel
|
||||
{
|
||||
briefingName="@STR_A3_Arsenal";
|
||||
startWeather=0;
|
||||
startWind=0.099999994;
|
||||
startWaves=0.099999994;
|
||||
forecastWeather=0;
|
||||
forecastWind=0.099999994;
|
||||
forecastWaves=0.099999994;
|
||||
forecastLightnings=0.099999994;
|
||||
year=2035;
|
||||
month=2;
|
||||
day=24;
|
||||
hour=12;
|
||||
minute=0;
|
||||
startFogDecay=0.0049999999;
|
||||
forecastFogDecay=0.0049999999;
|
||||
};
|
||||
class Groups
|
||||
{
|
||||
items=1;
|
||||
class Item0
|
||||
{
|
||||
side="CIV";
|
||||
class Vehicles
|
||||
{
|
||||
items=1;
|
||||
class Item0
|
||||
{
|
||||
position[]={4256,5,4192};
|
||||
azimut=180;
|
||||
id=0;
|
||||
side="CIV";
|
||||
vehicle="C_man_1";
|
||||
player="PLAYER COMMANDER";
|
||||
leader=1;
|
||||
skill=0.60000002;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
class Sensors
|
||||
{
|
||||
items=1;
|
||||
class Item0
|
||||
{
|
||||
position[]={4271.2827,5,4170.251};
|
||||
a=0;
|
||||
b=0;
|
||||
interruptable=1;
|
||||
age="UNKNOWN";
|
||||
expCond="cheat1";
|
||||
expActiv="endmission ""end1""";
|
||||
class Effects
|
||||
{
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
class Intro
|
||||
{
|
||||
addOns[]=
|
||||
{
|
||||
"A3_Map_VR"
|
||||
};
|
||||
addOnsAuto[]=
|
||||
{
|
||||
"A3_Map_VR"
|
||||
};
|
||||
randomSeed=12455686;
|
||||
class Intel
|
||||
{
|
||||
timeOfChanges=1800.0002;
|
||||
startWeather=0;
|
||||
startWind=0.1;
|
||||
startWaves=0.1;
|
||||
forecastWeather=0;
|
||||
forecastWind=0.1;
|
||||
forecastWaves=0.1;
|
||||
forecastLightnings=0.1;
|
||||
year=2035;
|
||||
day=28;
|
||||
hour=13;
|
||||
minute=37;
|
||||
startFogDecay=0.0049999999;
|
||||
forecastFogDecay=0.0049999999;
|
||||
};
|
||||
};
|
||||
class OutroWin
|
||||
{
|
||||
addOns[]=
|
||||
{
|
||||
"A3_Map_VR"
|
||||
};
|
||||
addOnsAuto[]=
|
||||
{
|
||||
"A3_Map_VR"
|
||||
};
|
||||
randomSeed=9312504;
|
||||
class Intel
|
||||
{
|
||||
timeOfChanges=1800.0002;
|
||||
startWeather=0;
|
||||
startWind=0.1;
|
||||
startWaves=0.1;
|
||||
forecastWeather=0;
|
||||
forecastWind=0.1;
|
||||
forecastWaves=0.1;
|
||||
forecastLightnings=0.1;
|
||||
year=2035;
|
||||
day=28;
|
||||
hour=13;
|
||||
minute=37;
|
||||
startFogDecay=0.0049999999;
|
||||
forecastFogDecay=0.0049999999;
|
||||
};
|
||||
};
|
||||
class OutroLoose
|
||||
{
|
||||
addOns[]=
|
||||
{
|
||||
"A3_Map_VR"
|
||||
};
|
||||
addOnsAuto[]=
|
||||
{
|
||||
"A3_Map_VR"
|
||||
};
|
||||
randomSeed=15192082;
|
||||
class Intel
|
||||
{
|
||||
timeOfChanges=1800.0002;
|
||||
startWeather=0;
|
||||
startWind=0.1;
|
||||
startWaves=0.1;
|
||||
forecastWeather=0;
|
||||
forecastWind=0.1;
|
||||
forecastWaves=0.1;
|
||||
forecastLightnings=0.1;
|
||||
year=2035;
|
||||
day=28;
|
||||
hour=13;
|
||||
minute=37;
|
||||
startFogDecay=0.0049999999;
|
||||
forecastFogDecay=0.0049999999;
|
||||
};
|
||||
};
|
3
addons/arsenal/missions/Arsenal.VR/script_component.hpp
Normal file
3
addons/arsenal/missions/Arsenal.VR/script_component.hpp
Normal file
@ -0,0 +1,3 @@
|
||||
#include "\z\ace\addons\arsenal\script_component.hpp"
|
||||
|
||||
#define PREP(var) FUNC(var) = compileFinal preprocessFileLineNumbers format ["fnc_%1.sqf", QUOTE(var)]
|
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="Arsenal">
|
||||
<Key ID="STR_ACE_Arsenal_buttonHideText">
|
||||
@ -7,6 +7,7 @@
|
||||
<German>Verstecken</German>
|
||||
<Polish>Ukryj</Polish>
|
||||
<Japanese>非表示</Japanese>
|
||||
<Italian>Nascondere</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonHideTooltip">
|
||||
<English>Hide interface</English>
|
||||
@ -14,6 +15,7 @@
|
||||
<German>Oberfläche verstecken</German>
|
||||
<Polish>Ukryj interfejs</Polish>
|
||||
<Japanese>インターフェイスを隠す</Japanese>
|
||||
<Italian>Nascondi interfaccia</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonLoadoutsText">
|
||||
<English>Loadouts</English>
|
||||
@ -21,6 +23,7 @@
|
||||
<German>Ausrüstungen</German>
|
||||
<Polish>Zestawy wyposażenia</Polish>
|
||||
<Japanese>装備</Japanese>
|
||||
<Italian>Equipaggiamenti</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonExportText">
|
||||
<English>Export</English>
|
||||
@ -28,6 +31,7 @@
|
||||
<German>Exportieren</German>
|
||||
<Polish>Eksportuj</Polish>
|
||||
<Japanese>出力</Japanese>
|
||||
<Italian>Esporta</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonImportText">
|
||||
<English>Import</English>
|
||||
@ -35,6 +39,7 @@
|
||||
<German>Importieren</German>
|
||||
<Polish>Importuj</Polish>
|
||||
<Japanese>取込</Japanese>
|
||||
<Italian>Importa</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonCloseText">
|
||||
<English>Close</English>
|
||||
@ -42,6 +47,7 @@
|
||||
<German>Schließen</German>
|
||||
<Polish>Zamknij</Polish>
|
||||
<Japanese>閉じる</Japanese>
|
||||
<Italian>Chiudi</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_noVirtualItems">
|
||||
<English>No virtual item available</English>
|
||||
@ -49,6 +55,7 @@
|
||||
<German>Kein virtuelles Objekt verfügbar</German>
|
||||
<Polish>Brak dostępnych przedmiotów wirtualnych</Polish>
|
||||
<Japanese>利用可能なバーチャル アイテムは無し</Japanese>
|
||||
<Italian>Nessun oggetto virtuale disponibile</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSaveText">
|
||||
<English>Save</English>
|
||||
@ -56,6 +63,7 @@
|
||||
<German>Speichern</German>
|
||||
<Polish>Zapisz</Polish>
|
||||
<Japanese>保存</Japanese>
|
||||
<Italian>Salva</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSaveTooltip">
|
||||
<English>Save the current loadout</English>
|
||||
@ -63,6 +71,7 @@
|
||||
<German>Ausgewählte Ausrüstung speichern</German>
|
||||
<Polish>Zapisz obecny zestaw</Polish>
|
||||
<Japanese>現在の装備を保存します</Japanese>
|
||||
<Italian>Salva l'equipaggiamento corrente</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonRenameText">
|
||||
<English>Rename</English>
|
||||
@ -70,6 +79,7 @@
|
||||
<German>Umbenennen</German>
|
||||
<Polish>Zmień nazwę</Polish>
|
||||
<Japanese>改名</Japanese>
|
||||
<Italian>Rinomina</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonRenameTooltip">
|
||||
<English>Rename the selected loadout</English>
|
||||
@ -77,6 +87,7 @@
|
||||
<German>Ausgewählte Ausrüstung umbenennen</German>
|
||||
<Polish>Zmień nazwę wybranego zestawu</Polish>
|
||||
<Japanese>現在選択中の装備を改名します</Japanese>
|
||||
<Italian>Rinomina l'equipaggiamento selezionato</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonLoadText">
|
||||
<English>Load</English>
|
||||
@ -84,6 +95,7 @@
|
||||
<German>Laden</German>
|
||||
<Polish>Wczytaj</Polish>
|
||||
<Japanese>読み込む</Japanese>
|
||||
<Italian>Carica</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonLoadTooltip">
|
||||
<English>Load the selected loadout</English>
|
||||
@ -91,6 +103,7 @@
|
||||
<German>Ausgewählte Ausrüstung laden</German>
|
||||
<Polish>Wczytaj wybrany zestaw</Polish>
|
||||
<Japanese>現在選択中の装備を読み込みます</Japanese>
|
||||
<Italian>Carica l'equipaggiamento selezionato</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonDeleteText">
|
||||
<English>Delete</English>
|
||||
@ -98,6 +111,7 @@
|
||||
<German>Entfernen</German>
|
||||
<Polish>Skasuj</Polish>
|
||||
<Japanese>削除</Japanese>
|
||||
<Italian>Elimina</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonDeleteTooltip">
|
||||
<English>Delete the selected loadout</English>
|
||||
@ -105,6 +119,7 @@
|
||||
<German>Ausgewählte Ausrüstung entfernen</German>
|
||||
<Polish>Skasuj wybrany zestaw</Polish>
|
||||
<Japanese>現在選択中の装備を削除します</Japanese>
|
||||
<Italian>Elimina l'equipaggiamento selezionato</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabMyLoadoutsText">
|
||||
<English>My loadouts</English>
|
||||
@ -112,6 +127,7 @@
|
||||
<German>Meine Ausrüstungen</German>
|
||||
<Polish>Moje zestawy</Polish>
|
||||
<Japanese>自分の装備</Japanese>
|
||||
<Italian>I miei equipaggiamenti</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabMyLoadoutsTooltip">
|
||||
<English>Loadouts saved in your profile</English>
|
||||
@ -119,6 +135,7 @@
|
||||
<German>Ausrüstungen, die in deinem Profil gespeichert sind</German>
|
||||
<Polish>Zestawy zapisane w Twoim profilu</Polish>
|
||||
<Japanese>自プロフィールに保存された装備です</Japanese>
|
||||
<Italian>Gli equipaggiamenti salvati nel tuo profilo</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabDefaultLoadoutsText">
|
||||
<English>Default loadouts</English>
|
||||
@ -126,6 +143,7 @@
|
||||
<German>Standard-Ausrüstungen</German>
|
||||
<Polish>Domyślne zestawy</Polish>
|
||||
<Japanese>標準の装備</Japanese>
|
||||
<Italian>Equipaggiamenti standard</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabDefaultLoadoutsTooltip">
|
||||
<English>Loadouts made available by the mission maker</English>
|
||||
@ -133,6 +151,7 @@
|
||||
<German>Ausrüstungen, die durch den Missionsersteller zur Verfügung gestellt worden sind</German>
|
||||
<Polish>Zestawy udostępnione przez twórcę misji</Polish>
|
||||
<Japanese>装備はミッション著者によって利用できます</Japanese>
|
||||
<Italian>Equipaggiamenti resi disponibili dal creatore della missione</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabSharedLoadoutsText">
|
||||
<English>Public loadouts</English>
|
||||
@ -140,6 +159,7 @@
|
||||
<German>Veröffentlichte Ausrüstungen</German>
|
||||
<Polish>Publiczne zestawy</Polish>
|
||||
<Japanese>公開装備</Japanese>
|
||||
<Italian>Equipaggiamenti pubblici</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabSharedLoadoutsTooltip">
|
||||
<English>Loadouts shared by you and other players</English>
|
||||
@ -147,6 +167,7 @@
|
||||
<German>Ausrüstungen, die von dir und anderen Spielern geteilt wurden</German>
|
||||
<Polish>Zestawy udostępnione przez Ciebie i innych graczy</Polish>
|
||||
<Japanese>自分か他人によって共有された装備です</Japanese>
|
||||
<Italian>Equipaggiamenti condivisi da te e da altri giocatori</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_sortByWeightText">
|
||||
<English>Sort by weight</English>
|
||||
@ -154,6 +175,7 @@
|
||||
<German>Nach Gewicht sortieren</German>
|
||||
<Polish>Sortuj wg wagi</Polish>
|
||||
<Japanese>重量で並び替え</Japanese>
|
||||
<Italian>Ordina per peso</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_sortByAmountText">
|
||||
<English>Sort by amount</English>
|
||||
@ -161,6 +183,7 @@
|
||||
<German>Nach Menge sortieren</German>
|
||||
<Polish>Sortuj wg ilości</Polish>
|
||||
<Japanese>量で並び替え</Japanese>
|
||||
<Italian>Ordina per quantitativo</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonShareTooltip">
|
||||
<English>Share or stop sharing the selected loadout</English>
|
||||
@ -168,6 +191,7 @@
|
||||
<German>Ausgewählte Ausrüstung teilen oder nicht mehr teilen</German>
|
||||
<Polish>Udostępnij lub przestań udostępniać wybrany zestaw</Polish>
|
||||
<Japanese>選択した装備の共有設定</Japanese>
|
||||
<Italian>Condividi o smetti di condividere l'equipaggiamento selezionato</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSharePrivateText">
|
||||
<English>Private</English>
|
||||
@ -175,6 +199,7 @@
|
||||
<German>Privat</German>
|
||||
<Polish>Prywatny</Polish>
|
||||
<Japanese>非公開</Japanese>
|
||||
<Italian>Privato</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSharePublicText">
|
||||
<English>Public</English>
|
||||
@ -182,6 +207,7 @@
|
||||
<German>Öffentlich</German>
|
||||
<Polish>Publiczny</Polish>
|
||||
<Japanese>公開</Japanese>
|
||||
<Italian>Pubblico</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_exportDefaultError">
|
||||
<English>The default loadouts list is empty!</English>
|
||||
@ -189,6 +215,7 @@
|
||||
<German>Die Standard-Ausrüstungen-Liste ist leer!</German>
|
||||
<Polish>Lista domyślnych zestawów jest pusta!</Polish>
|
||||
<Japanese>標準の装備一欄が空です!</Japanese>
|
||||
<Italian>La lista degli equipaggiamenti standard è vuota!</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_exportDefault">
|
||||
<English>Default loadouts list exported to clipboard</English>
|
||||
@ -196,6 +223,7 @@
|
||||
<German>Standard-Ausrüstungen-Liste in die Zwischenablage exportiert</German>
|
||||
<Polish>Lista domyślnych zestawów została eksportowana do schowka</Polish>
|
||||
<Japanese>標準の装備一欄はクリップボードへ出力されました</Japanese>
|
||||
<Italian>La lista degli equipaggiamenti standard è stata esportata negli appunti</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_exportCurrent">
|
||||
<English>Current loadout exported to clipboard</English>
|
||||
@ -203,6 +231,7 @@
|
||||
<German>Derzeitige Ausrüstung in die Zwischenablage exportiert</German>
|
||||
<Polish>Obecny zestaw został eksportowany do schowka</Polish>
|
||||
<Japanese>現在の装備はクリップボードへ出力されました</Japanese>
|
||||
<Italian>Equipaggiamento corrente esportato negli appunti</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_importFormatError">
|
||||
<English>Wrong format provided</English>
|
||||
@ -210,6 +239,7 @@
|
||||
<German>Falsches Format verwendet</German>
|
||||
<Polish>Podano zły format</Polish>
|
||||
<Japanese>間違ったフォーマットが入力されました</Japanese>
|
||||
<Italian>Formato fornito sbagliato</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_importedDefault">
|
||||
<English>Default loadouts list imported from clipboard</English>
|
||||
@ -217,6 +247,7 @@
|
||||
<German>Standard-Ausrüstungen-Liste aus der Zwischenablage importiert</German>
|
||||
<Polish>Lista domyślnych zestawów została importowana ze schowka</Polish>
|
||||
<Japanese>標準の装備一欄はクリップボードから取込されました</Japanese>
|
||||
<Italian>La lista degli equipaggiamenti standard è stata importata dagli appunti</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_importedCurrent">
|
||||
<English>Loadout imported from clipboard</English>
|
||||
@ -224,6 +255,7 @@
|
||||
<German>Ausrüstung aus der Zwischenablage importiert</German>
|
||||
<Polish>Zestaw został importowany ze schowka</Polish>
|
||||
<Japanese>装備はクリップボードから取込されました</Japanese>
|
||||
<Italian>Equipaggiamento importato dagli appunti</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutDeleted">
|
||||
<English>The following loadout was deleted:</English>
|
||||
@ -231,6 +263,7 @@
|
||||
<German>Folgende Ausrüstung wurde entfernt:</German>
|
||||
<Polish>Następujący zestaw został skasowany:</Polish>
|
||||
<Japanese>次の装備は削除されました:</Japanese>
|
||||
<Italian>Il seguente equipaggiamento è stato eliminato:</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutUnshared">
|
||||
<English>The following loadout is not public anymore:</English>
|
||||
@ -238,6 +271,7 @@
|
||||
<German>Folgende Ausrüstung ist nicht mehr öffentlich:</German>
|
||||
<Polish>Następujący zestaw nie jest już publiczny:</Polish>
|
||||
<Japanese>次の装備は非公開になりました:</Japanese>
|
||||
<Italian>Il seguente eequipaggiamento non è più pubblico:</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_saveEmptyNameBox">
|
||||
<English>The name field is empty!</English>
|
||||
@ -245,6 +279,7 @@
|
||||
<German>Das Feld "Name" ist leer!</German>
|
||||
<Polish>Pole nazwy jest puste!</Polish>
|
||||
<Japanese>名前欄が空白です!</Japanese>
|
||||
<Italian>Il campo del nome è vuoto!</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_saveAuthorError">
|
||||
<English>You are the author of this loadout</English>
|
||||
@ -252,6 +287,7 @@
|
||||
<German>Du bist der Ersteller dieser Ausrüstung</German>
|
||||
<Polish>Jesteś autorem tego zestawu</Polish>
|
||||
<Japanese>あなたはこの装備の作者です</Japanese>
|
||||
<Italian>Sei l'autore di questo equipaggiamento</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_saveSharedError">
|
||||
<English>A loadout of yours with the same name is public</English>
|
||||
@ -259,6 +295,7 @@
|
||||
<German>Eine deiner Ausrüstungen mit dem gleichen Namen ist öffentlich</German>
|
||||
<Polish>Jeden z Twoich zestawów nazwany tak samo jest już publiczny</Polish>
|
||||
<Japanese>あなたの装備は既に公開されているものと同名です</Japanese>
|
||||
<Italian>Un tuo equipaggiamento con lo stesso nome è pubblico</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutSaved">
|
||||
<English>The following loadout was saved:</English>
|
||||
@ -266,6 +303,7 @@
|
||||
<German>Folgende Ausrüstung wurde gespeichert:</German>
|
||||
<Polish>Następujący zestaw został zapisany:</Polish>
|
||||
<Japanese>次の装備は保存されました:</Japanese>
|
||||
<Italian>Il seguente equipaggiamento è stato salvato:</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutLoaded">
|
||||
<English>The following loadout was loaded:</English>
|
||||
@ -273,6 +311,7 @@
|
||||
<German>Folgene Ausrüstung wurde geladen:</German>
|
||||
<Polish>Następujący zestaw został wczytany:</Polish>
|
||||
<Japanese>次の装備が読み込みされました:</Japanese>
|
||||
<Italian>Il seguente equipaggiamento è stato caricato:</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_renameExistError">
|
||||
<English>A loadout with the same name already exist!</English>
|
||||
@ -280,6 +319,7 @@
|
||||
<German>Eine Ausrüstung mit dem gleichen Namen existiert bereits!</German>
|
||||
<Polish>Zestaw z tą nazwą już istnieje!</Polish>
|
||||
<Japanese>既にその名前は装備に使われています!</Japanese>
|
||||
<Italian>Un equipaggiamento con lo stesso nome è gia esistente!</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutRenamed">
|
||||
<English>was renamed to</English>
|
||||
@ -287,6 +327,7 @@
|
||||
<German>wurde umbenannt in</German>
|
||||
<Polish>zmienił nazwę na</Polish>
|
||||
<Japanese>次の名前に改名されました</Japanese>
|
||||
<Italian>E' stato rinominato in</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_invertCameraSetting">
|
||||
<English>Invert camera controls</English>
|
||||
@ -294,6 +335,7 @@
|
||||
<German>Kamerasteuerung invertieren</German>
|
||||
<Polish>Odwróć sterowanie kamerą</Polish>
|
||||
<Japanese>カメラ操作を反転</Japanese>
|
||||
<Italian>Inverti comandi camera</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_modIconsSetting">
|
||||
<English>Enable mod icons</English>
|
||||
@ -301,6 +343,7 @@
|
||||
<German>Aktiviert Mod-Icons</German>
|
||||
<Polish>Włącz ikony modów</Polish>
|
||||
<Japanese>MOD アイコンを表示</Japanese>
|
||||
<Italian>Abilita icone mod</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_fontHeightSetting">
|
||||
<English>Panel font height</English>
|
||||
@ -308,6 +351,7 @@
|
||||
<German>Schrifthöhe für die linke und rechte Liste</German>
|
||||
<Polish>Wysokość czcionki</Polish>
|
||||
<Japanese>パネルにあるフォントの高さ</Japanese>
|
||||
<Italian>Altezza carattere del pannello</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_allowDefaultLoadoutsSetting">
|
||||
<English>Allow default loadouts</English>
|
||||
@ -315,6 +359,7 @@
|
||||
<German>Erlaubt die Benutzung des Standard-Ausrüstungen-Reiters</German>
|
||||
<Polish>Zezwól na użycie domyślnych zestawów</Polish>
|
||||
<Japanese>標準の装備を許可</Japanese>
|
||||
<Italian>Consenti equipaggiamenti standard</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_allowSharingSetting">
|
||||
<English>Allow loadout sharing</English>
|
||||
@ -322,6 +367,7 @@
|
||||
<German>Erlaubt das Teilen von Ausrüstungen</German>
|
||||
<Polish>Zezwól na udostępnianie zestawów</Polish>
|
||||
<Japanese>装備の共有を許可</Japanese>
|
||||
<Italian>Consenti condivisione equipaggiamenti</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_printToRPTSetting">
|
||||
<English>Log missing / unavailable items</English>
|
||||
@ -329,53 +375,92 @@
|
||||
<German>Aktiviert die Aufzeichnung fehlender Gegenstände in der RPT</German>
|
||||
<Polish>Rejestruj brakujące / niedostępne przedmioty</Polish>
|
||||
<Japanese>欠落 / 利用不可アイテムを記録</Japanese>
|
||||
<Italian>Log mancante / oggetto non disponibile</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonCurrentMagTooltip">
|
||||
<English>Primary magazine</English>
|
||||
<French>Chargeur principal </French>
|
||||
<Polish>Główny magazynek</Polish>
|
||||
<Japanese>プライマリ弾倉</Japanese>
|
||||
<Italian>Caricatore primario</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonCurrentMag2Tooltip">
|
||||
<English>Secondary magazine</English>
|
||||
<French>Chargeur secondaire</French>
|
||||
<Polish>Dodatkowy magazynek</Polish>
|
||||
<Japanese>セカンダリ弾倉</Japanese>
|
||||
<Italian>Caricatore secondario</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_settingCategory">
|
||||
<English>ACE Arsenal</English>
|
||||
<French>ACE Arsenal</French>
|
||||
<German>ACE-Arsenal</German>
|
||||
<Polish>ACE Arsenał</Polish>
|
||||
<Japanese>ACE 武器庫</Japanese>
|
||||
<Italian>Arsenale ACE</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_defaultLoadoutsTooltip">
|
||||
<English>Allow the use of the default loadouts tab</English>
|
||||
<French>Autorise l'usage de l'onglet équipements de base</French>
|
||||
<Polish>Zezwól na użycie zakładki domyślnych zestawów</Polish>
|
||||
<Japanese>標準の装備タブの使用を許可します</Japanese>
|
||||
<Italian>Consenti l'uso della sezione per gli equipaggiamenti standard</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_modIconsTooltip">
|
||||
<English>Show / hide mod icons for the left panel</English>
|
||||
<French>Montrer / cacher les icones de mod pour le panneau de gauche</French>
|
||||
<Polish>Pokaż / ukryj ikony modów w lewym panelu</Polish>
|
||||
<Japanese>左パネルにある MOD アイコンの表示 / 非表示をします</Japanese>
|
||||
<Italian>Mostra / nascondi le icone delle mod dal pannello sinistro</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_fontHeightTooltip">
|
||||
<English>Change the font height for text in the left / right panels</English>
|
||||
<French>Change la taille de police du texte des panneaux gauche / droite</French>
|
||||
<Polish>Zmień wysokość czcionki dla tekstu lewego i prawego panelu</Polish>
|
||||
<Japanese>右か左パネルにあるフォントの高さを変更します。</Japanese>
|
||||
<Italian>Cambia l'altezza del font per il testo sul pannello sinistro / destro</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_printToRPTTooltip">
|
||||
<English>Log missing / unavailable items in the RPT</English>
|
||||
<French>Enregistre les objets manquants / indisponibles dans le RPT</French>
|
||||
<Polish>Rejestruj brakujące / niedostępne przedmioty do pliku RPT</Polish>
|
||||
<Japanese>PRT で欠落 / 利用不可アイテムを記録します</Japanese>
|
||||
<Italian>Log mancante / oggetto non disponibile nell' RPT</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_CantOpenDisplay">
|
||||
<English>Unable to open ACE arsenal</English>
|
||||
<French>Impossible d'ouvrir ACE arsenal</French>
|
||||
<German>Kann ACE Arsenal nicht anzeigen</German>
|
||||
<German>Kann ACE-Arsenal nicht anzeigen</German>
|
||||
<Italian>Impossibile aprire l'arsenale ACE</Italian>
|
||||
<Japanese>ACE 武器庫を開けません</Japanese>
|
||||
</Key>
|
||||
<Key ID= "STR_ACE_Arsenal_portLoadoutsText">
|
||||
<English>Import BI VA loadouts to ACE Arsenal</English>
|
||||
<French>Importe les loadouts de BI VA dans ACE Arsenal</French>
|
||||
</Key>
|
||||
<Key ID= "STR_ACE_Arsenal_portLoadoutsPlayerError">
|
||||
<English>No player unit available! Place a unit and mark it as "Player".</English>
|
||||
<French>Aucune unité joueur disponible ! Placez une unité et marquez la en tant que "joueur".</French>
|
||||
</Key>
|
||||
<Key ID= "STR_ACE_Arsenal_portLoadoutsLoadoutError">
|
||||
<English>No loadouts to import.</English>
|
||||
<French>Aucun loadout à importer.</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_Mission">
|
||||
<English>ACE Arsenal</English>
|
||||
<German>ACE-Arsenal</German>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_ReturnToArsenal">
|
||||
<English>Return to ACE Arsenal.</English>
|
||||
<German>Zurück zum ACE-Arsenal.</German>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_Mission_tooltip">
|
||||
<English>Use ACE Arsenal to try out different weapons and equipment.</English>
|
||||
<German>Verwende ACE-Arsenal und sieh dir verschiedene Waffen und Ausrüstung an und probiere sie aus.</German>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_Mission_overview">
|
||||
<English>Try weapons and equipment and create your own loadouts.</English>
|
||||
<German>Probiere verschiedene Waffen und Ausrüstung aus und stelle dir eigene Ausrüstungsprofile zusammen.</German>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -130,7 +130,7 @@ class GVAR(display) {
|
||||
text = ECSTRING(common,Weight);
|
||||
x = 0;
|
||||
y = 0;
|
||||
w = QUOTE(40 * GRID_W);
|
||||
w = QUOTE(30 * GRID_W);
|
||||
h = QUOTE(8 * GRID_H);
|
||||
sizeEx = QUOTE(7 * GRID_H);
|
||||
};
|
||||
@ -138,9 +138,9 @@ class GVAR(display) {
|
||||
idc = IDC_totalWeightText;
|
||||
style = ST_RIGHT;
|
||||
text = "";
|
||||
x = QUOTE(40 * GRID_W);
|
||||
x = QUOTE(30 * GRID_W);
|
||||
y = 0;
|
||||
w = QUOTE(40 * GRID_W);
|
||||
w = QUOTE(50 * GRID_W);
|
||||
h = QUOTE(8 * GRID_H);
|
||||
sizeEx = QUOTE(7 * GRID_H);
|
||||
};
|
||||
@ -159,51 +159,58 @@ class GVAR(display) {
|
||||
h = QUOTE(10 * GRID_H);
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
};
|
||||
|
||||
#define WIDTH_TOTAL (safezoneW - 2 * (93 * GRID_W))
|
||||
#define WIDTH_GAP (WIDTH_TOTAL / 100)
|
||||
#define WIDTH_SINGLE ((WIDTH_TOTAL - 6 * WIDTH_GAP) / 5)
|
||||
|
||||
class menuBar: RscControlsGroupNoScrollbars {
|
||||
idc = IDC_menuBar;
|
||||
x = QUOTE((safezoneX + safezoneW * 0.50) - (105 * GRID_W));
|
||||
x = QUOTE(0.5 - WIDTH_TOTAL / 2);
|
||||
y = QUOTE(safezoneH + safezoneY - 9 * GRID_H);
|
||||
w = QUOTE(210 * GRID_W);
|
||||
w = QUOTE(WIDTH_TOTAL);
|
||||
h = QUOTE(7 * GRID_H);
|
||||
class controls {
|
||||
class buttonHide: ctrlButton {
|
||||
idc = -1;
|
||||
colorBackground[] = {0,0,0,0.8};
|
||||
x = QUOTE(0 * GRID_W);
|
||||
x = QUOTE(1 * WIDTH_GAP + 0 * WIDTH_SINGLE);
|
||||
y = QUOTE(0);
|
||||
w = QUOTE(40 * GRID_W);
|
||||
w = QUOTE(WIDTH_SINGLE);
|
||||
h = QUOTE(7 * GRID_H);
|
||||
text = CSTRING(buttonHideText);
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
shortcuts[] = {"0x0E"};
|
||||
tooltip = CSTRING(buttonHideTooltip);
|
||||
onButtonClick = QUOTE([ctrlparent (_this select 0)] call FUNC(buttonHide));
|
||||
};
|
||||
class buttonLoadouts: buttonHide {
|
||||
idc = -1;
|
||||
x = QUOTE(42.5 * GRID_W);
|
||||
x = QUOTE(2 * WIDTH_GAP + 1 * WIDTH_SINGLE);
|
||||
text = CSTRING(buttonLoadoutsText);
|
||||
onButtonClick = QUOTE(createDialog QQGVAR(loadoutsDisplay));
|
||||
};
|
||||
class buttonExport: buttonHide {
|
||||
idc = -1;
|
||||
x = QUOTE(85 * GRID_W);
|
||||
x = QUOTE(3 * WIDTH_GAP + 2 * WIDTH_SINGLE);
|
||||
text = CSTRING(buttonExportText);
|
||||
onButtonClick = QUOTE([ctrlparent (_this select 0)] call FUNC(buttonExport));
|
||||
};
|
||||
class buttonImport: buttonHide {
|
||||
idc = -1;
|
||||
x = QUOTE(127.5 * GRID_W);
|
||||
x = QUOTE(4 * WIDTH_GAP + 3 * WIDTH_SINGLE);
|
||||
text = CSTRING(buttonImportText);
|
||||
onButtonClick = QUOTE([ctrlparent (_this select 0)] call FUNC(buttonImport));
|
||||
};
|
||||
class buttonClose: ctrlButtonClose {
|
||||
idc = -1;
|
||||
idc = IDC_menuBarClose;
|
||||
colorBackground[] = {0,0,0,0.8};
|
||||
x = QUOTE(170 * GRID_W);
|
||||
x = QUOTE(5 * WIDTH_GAP + 4 * WIDTH_SINGLE);
|
||||
y = QUOTE(0);
|
||||
w = QUOTE(40 * GRID_W);
|
||||
w = QUOTE(WIDTH_SINGLE);
|
||||
h = QUOTE(7 * GRID_H);
|
||||
text = CSTRING(buttonCloseText);
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
shortcuts[]= {"0x01"};
|
||||
onButtonClick = QUOTE(ctrlparent (_this select 0) closeDisplay 2);
|
||||
};
|
||||
@ -330,6 +337,7 @@ class GVAR(display) {
|
||||
w = QUOTE(80 * GRID_W);
|
||||
h = QUOTE(6 * GRID_H);
|
||||
onLBSelChanged = QUOTE(_this call FUNC(sortPanel));
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
class Items {
|
||||
class Alphabet {
|
||||
text="$STR_a3_rscdisplayarsenal_sort_alphabet";
|
||||
@ -760,12 +768,15 @@ class GVAR(loadoutsDisplay) {
|
||||
y = QUOTE(0);
|
||||
w = QUOTE(160 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
};
|
||||
class contentPanel: RscListnBox {
|
||||
idc = IDC_contentPanel;
|
||||
columns[]={0, 0.05, 0.40, 0.50, 0.60, 0.70, 0.75, 0.80, 0.85, 0.90};
|
||||
drawSideArrows=0;
|
||||
disableOverflow=1;
|
||||
onSetFocus = QUOTE(GVAR(loadoutsPanelFocus) = true);
|
||||
onKillFocus = QUOTE(GVAR(loadoutsPanelFocus) = false);
|
||||
onLBSelChanged = QUOTE([ARR_3(ctrlParent (_this select 0), _this select 0, _this select 1)] call FUNC(onSelChangedLoadouts));
|
||||
onLBDblClick = QUOTE([ARR_2(ctrlparent (_this select 0), (ctrlParent (_this select 0)) displayCtrl IDC_buttonLoad)] call FUNC(buttonLoadoutsLoad));
|
||||
x = QUOTE(0);
|
||||
@ -777,17 +788,38 @@ class GVAR(loadoutsDisplay) {
|
||||
class textTitle: RscText {
|
||||
idc= -1;
|
||||
text="$STR_DISP_GAME_NAME";
|
||||
x = QUOTE(1 * GRID_W);
|
||||
x = QUOTE(0 * GRID_W);
|
||||
y = QUOTE(safezoneH - (51 * GRID_H));
|
||||
w = QUOTE(15 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
colorBackground[]={0,0,0,0.2};
|
||||
};
|
||||
class textEditBox: ctrlEdit {
|
||||
idc= IDC_textEditBox;
|
||||
x = QUOTE(16 * GRID_W);
|
||||
x = QUOTE(15 * GRID_W);
|
||||
y = QUOTE(safezoneH - (51 * GRID_H));
|
||||
w = QUOTE(80 * GRID_W);
|
||||
w = QUOTE(65 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
};
|
||||
class loadoutsSearchbar: ctrlEdit {
|
||||
idc = IDC_loadoutsSearchbar;
|
||||
onSetFocus = QUOTE(GVAR(loadoutsSearchbarFocus) = true);
|
||||
onKillFocus = QUOTE(GVAR(loadoutsSearchbarFocus) = false);
|
||||
onMouseButtonClick = QUOTE([ARR_3(ctrlParent (_this select 0), _this select 0, _this select 1)] call FUNC(clearSearchbar));
|
||||
x = QUOTE(83 * GRID_W);
|
||||
y = QUOTE(safezoneH - (51 * GRID_H));
|
||||
w = QUOTE(72 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
};
|
||||
class loadoutsSearchbarButton: ctrlButtonPicture {
|
||||
idc = -1;
|
||||
text = "\a3\Ui_f\data\GUI\RscCommon\RscButtonSearch\search_start_ca.paa";
|
||||
colorBackground[]={0,0,0,0.5};
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), ctrlparent (_this select 0) displayCtrl IDC_loadoutsSearchbar)] call FUNC(handleLoadoutsSearchbar));
|
||||
x = QUOTE(155 * GRID_W);
|
||||
y = QUOTE(safezoneH - (51 * GRID_H));
|
||||
w = QUOTE(5 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
};
|
||||
class buttonSave: ctrlButton {
|
||||
@ -798,6 +830,7 @@ class GVAR(loadoutsDisplay) {
|
||||
h = QUOTE(10 * GRID_H);
|
||||
text= CSTRING(buttonSaveText);
|
||||
tooltip= CSTRING(buttonSaveTooltip);
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsSave));
|
||||
colorBackground[] = {0,0,0,0.8};
|
||||
};
|
||||
@ -839,7 +872,7 @@ class GVAR(loadoutsDisplay) {
|
||||
y = QUOTE(safezoneH + safezoneY - 9 * GRID_H);
|
||||
w = QUOTE(30 * GRID_W);
|
||||
h = QUOTE(7 * GRID_H);
|
||||
sizeEx = QUOTE(4 * GRID_H);
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
text= CSTRING(buttonCloseText);
|
||||
shortcuts[]= {"0x01"};
|
||||
tooltip= "";
|
||||
@ -867,7 +900,7 @@ class GVAR(loadoutsDisplay) {
|
||||
y = QUOTE(0 * GRID_H);
|
||||
w = QUOTE(52 * GRID_W);
|
||||
h = QUOTE(7 * GRID_H);
|
||||
sizeEx = QUOTE(4 * GRID_H);
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
text= CSTRING(tabMyLoadoutsText);
|
||||
tooltip= CSTRING(tabMyLoadoutsTooltip);
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(loadoutsChangeTab));
|
||||
|
@ -275,4 +275,18 @@ class Display3DEN {
|
||||
};
|
||||
};
|
||||
};
|
||||
class Controls {
|
||||
class MenuStrip: ctrlMenuStrip {
|
||||
class Items {
|
||||
class Tools {
|
||||
items[] += {"ACE_arsenal_portVALoadouts"};
|
||||
};
|
||||
class ACE_arsenal_portVALoadouts {
|
||||
text = CSTRING(portLoadoutsText);
|
||||
picture = "\z\ace\logo_ace3_ca.paa";
|
||||
action = "call ace_arsenal_fnc_portVALoadouts;";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -41,7 +41,7 @@ if (_unit == _attachToVehicle) then { //Self Attachment
|
||||
_attachedItem attachTo [_unit, [0.05, -0.09, 0.1], "leftshoulder"];
|
||||
if (!_silentScripted) then {
|
||||
_unit removeItem _itemClassname; // Remove item
|
||||
[_onAttachText] call EFUNC(common,displayTextStructured);
|
||||
[_onAttachText, 2] call EFUNC(common,displayTextStructured);
|
||||
};
|
||||
_unit setVariable [QGVAR(attached), [[_attachedItem, _itemClassname]], true];
|
||||
} else {
|
||||
|
@ -83,4 +83,4 @@ if (_itemDisplayName == "") then {
|
||||
_itemDisplayName = getText (configFile >> "CfgMagazines" >> _itemName >> "displayName");
|
||||
};
|
||||
|
||||
[format [localize LSTRING(Item_Detached), _itemDisplayName]] call EFUNC(common,displayTextStructured);
|
||||
[format [localize LSTRING(Item_Detached), _itemDisplayName], 2] call EFUNC(common,displayTextStructured);
|
||||
|
@ -101,4 +101,4 @@ private _attachList = _attachToVehicle getVariable [QGVAR(attached), []];
|
||||
_attachList pushBack [_attachedObject, _itemClassname];
|
||||
_attachToVehicle setVariable [QGVAR(attached), _attachList, true];
|
||||
|
||||
[_onAttachText] call EFUNC(common,displayTextStructured);
|
||||
[_onAttachText, 2] call EFUNC(common,displayTextStructured);
|
||||
|
@ -52,6 +52,6 @@ if (!hasInterface) exitWith {};
|
||||
{false},
|
||||
[DIK_F1, [true, false, false]], true] call CBA_fnc_addKeybind; // Shift + F1
|
||||
|
||||
["isNotEscorting", {!(GETVAR(_this select 0,GVAR(isEscorting),false))}] call EFUNC(common,addCanInteractWithCondition);
|
||||
["isNotHandcuffed", {!(GETVAR(_this select 0,GVAR(isHandcuffed),false))}] call EFUNC(common,addCanInteractWithCondition);
|
||||
["isNotSurrendering", {!(GETVAR(_this select 0,GVAR(isSurrendering),false))}] call EFUNC(common,addCanInteractWithCondition);
|
||||
["isNotEscorting", {!GETVAR(_this select 0,GVAR(isEscorting),false)}] call EFUNC(common,addCanInteractWithCondition);
|
||||
["isNotHandcuffed", {!GETVAR(_this select 0,GVAR(isHandcuffed),false)}] call EFUNC(common,addCanInteractWithCondition);
|
||||
["isNotSurrendering", {!GETVAR(_this select 0,GVAR(isSurrendering),false)}] call EFUNC(common,addCanInteractWithCondition);
|
||||
|
@ -32,7 +32,7 @@ if (_state) then {
|
||||
//Add Actionmenu to release captive
|
||||
private _actionID = _unit addAction [format ["<t color='#FF0000'>%1</t>", localize LSTRING(StopEscorting)],
|
||||
{[(_this select 0), ((_this select 0) getVariable [QGVAR(escortedUnit), objNull]), false] call FUNC(doEscortCaptive);},
|
||||
nil, 20, false, true, "", QUOTE(!isNull (GETVAR(_target,QGVAR(escortedUnit),objNull)))];
|
||||
nil, 20, false, true, "", QUOTE(!isNull GETVAR(_target,QGVAR(escortedUnit),objNull))];
|
||||
|
||||
[{
|
||||
params ["_args", "_pfID"];
|
||||
|
@ -12,5 +12,6 @@ class ACE_Settings {
|
||||
typeName = "SCALAR";
|
||||
value = 2.5;
|
||||
category = ECSTRING(OptionsMenu,CategoryLogistics);
|
||||
sliderSettings[] = {0, 10, 2.5, 1};
|
||||
};
|
||||
};
|
||||
|
@ -48,7 +48,6 @@
|
||||
[QGVAR(setHidden), {
|
||||
params ["_object", "_set"];
|
||||
TRACE_2("setHidden EH",_object,_set);
|
||||
INFO("Note: getUnitTrait / camouflageCoef enum error can be ignored [present since Arma 3 v1.78] - IGNORE THIS");
|
||||
private _vis = _object getUnitTrait "camouflageCoef";
|
||||
if (_set > 0) then {
|
||||
if (_vis != 0) then {
|
||||
|
@ -9,6 +9,7 @@ PREP_RECOMPILE_END;
|
||||
|
||||
GVAR(syncedEvents) = [] call CBA_fnc_hashCreate;
|
||||
GVAR(showHudHash) = [] call CBA_fnc_hashCreate;
|
||||
GVAR(vehicleIconCache) = call CBA_fnc_createNamespace; // for getVehicleIcon
|
||||
|
||||
GVAR(settingsInitFinished) = false;
|
||||
GVAR(runAtSettingsInitialized) = [];
|
||||
|
@ -24,8 +24,14 @@ if ((getPosATL _unit) select 2 > 0.05 || // Walking on objects, such as building
|
||||
) exitWith {false};
|
||||
|
||||
private _surfaceClass = (surfaceType _posASL) select [1];
|
||||
private _surfaceType = getText (configFile >> "CfgSurfaces" >> _surfaceClass >> "soundEnviron");
|
||||
private _surfaceDust = getNumber (configFile >> "CfgSurfaces" >> _surfaceClass >> "dust");
|
||||
private _config = configFile >> "CfgSurfaces" >> _surfaceClass;
|
||||
private _surfaceType = getText (_config >> "soundEnviron");
|
||||
private _surfaceDust = getNumber (_config >> "dust");
|
||||
|
||||
TRACE_2("Surface",_surfaceType,_surfaceDust);
|
||||
|
||||
!(_surfaceType in DIG_SURFACE_BLACKLIST) && {(_surfaceDust >= 0.1) || {_surfaceType in DIG_SURFACE_WHITELIST}}
|
||||
if (isNumber (_config >> "ACE_canDig")) then {
|
||||
getNumber (_config >> "ACE_canDig") // return
|
||||
} else {
|
||||
!(_surfaceType in DIG_SURFACE_BLACKLIST) && {(_surfaceDust >= 0.1) || {_surfaceType in DIG_SURFACE_WHITELIST}} // return
|
||||
};
|
||||
|
@ -61,6 +61,7 @@ case ("SCALAR"): { // ACE's Scalar can be a float or an index for a list
|
||||
_cbaValueInfo = if (isArray (_config >> "sliderSettings")) then {
|
||||
getArray (_config >> "sliderSettings");
|
||||
} else {
|
||||
INFO_1("Using auto min/max for [%1]",_varName);
|
||||
[-1, 5000, 0, 1]
|
||||
};
|
||||
_cbaValueInfo set [2, getNumber (_config >> "value")];
|
||||
|
@ -78,7 +78,17 @@ if (toLower (productVersion select 6) in ["linux", "osx"]) then {
|
||||
private _versionEx = _x callExtension "version";
|
||||
|
||||
if (_versionEx == "") then {
|
||||
private _errorMsg = format ["Extension %1.dll not installed.", _x];
|
||||
private _extension = ".dll";
|
||||
|
||||
if (productVersion select 7 == "x64") then {
|
||||
_extension = "_x64.dll";
|
||||
};
|
||||
|
||||
if (productVersion select 6 == "Linux") then {
|
||||
_extension = ".so";
|
||||
};
|
||||
|
||||
private _errorMsg = format ["Extension %1%2 not found.", _x, _extension];
|
||||
|
||||
ERROR(_errorMsg);
|
||||
|
||||
|
@ -38,7 +38,7 @@ if (_textMessage isEqualType "") then {
|
||||
_textMessage = parseText _textMessage;
|
||||
};
|
||||
|
||||
(ARR_SELECT(_this,4,call BIS_fnc_displayMission)) createDisplay "RscDisplayCommonMessagePause";
|
||||
ARR_SELECT(_this,4,call BIS_fnc_displayMission) createDisplay "RscDisplayCommonMessagePause";
|
||||
|
||||
private _display = uiNamespace getVariable "RscDisplayCommonMessage_display";
|
||||
private _ctrlRscMessageBox = _display displayCtrl 2351;
|
||||
|
@ -21,8 +21,6 @@ params [["_object", objNull, [objNull, ""]]];
|
||||
|
||||
if ((_object isEqualType objNull && {isNull _object}) || {_object isEqualType "" && {_object == ""}}) exitWith { DEFAULT_TEXTURE };
|
||||
|
||||
ISNILS(GVAR(vehicleIconCache),call CBA_fnc_createNamespace);
|
||||
|
||||
private _objectType = if (_object isEqualType objNull) then {
|
||||
typeOf _object
|
||||
} else {
|
||||
|
@ -4,7 +4,7 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: The Unit (usually the player) <OBJECT>
|
||||
* 0: Force a return type <SCALAR> (0: useImperial setting; 1: Metric; 2: Imperial)
|
||||
* 1: Force a return type <SCALAR, BOOLEAN>
|
||||
*
|
||||
* Return Value:
|
||||
* The return value <NUMBER>
|
||||
@ -16,10 +16,9 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_unit", ["_returnFormat", 0, [0]]];
|
||||
params ["_unit", ["_useImperial", false, [false, 0]]];
|
||||
|
||||
private _virtualLoad = 0;
|
||||
private _useImperial = (!isNil QEGVAR(movement,useImperial) && {EGVAR(movement,useImperial)});
|
||||
|
||||
{
|
||||
_virtualLoad = _virtualLoad + (_x getVariable [QEGVAR(movement,vLoad), 0]);
|
||||
@ -33,7 +32,7 @@ private _useImperial = (!isNil QEGVAR(movement,useImperial) && {EGVAR(movement,u
|
||||
private _weight = (loadAbs _unit + _virtualLoad) * 0.1;
|
||||
|
||||
//Return
|
||||
if ([_useImperial, (_returnFormat == 1)] select (_returnFormat != 0)) then {
|
||||
if (_useImperial in [true, 1]) then {
|
||||
format ["%1lb", (round (_weight * 100)) / 100]
|
||||
} else {
|
||||
format ["%1kg", (round (_weight * (1/2.2046) * 100)) / 100]
|
||||
|
@ -26,11 +26,11 @@
|
||||
|
||||
!(
|
||||
isNull curatorCamera && // Curator
|
||||
{!(GETMVAR(EGVAR(spectator,isSet),false))} && // ACE Spectator
|
||||
{isNull (GETMVAR(BIS_EGSpectatorCamera_camera, objNull))} && // BIS Nexus Spectator
|
||||
{isNull (GETUVAR(BIS_fnc_arsenal_cam, objNull))} && // Arsenal camera
|
||||
{isNull (GETMVAR(BIS_fnc_establishingShot_fakeUAV, objNull))} && // Establishing shot camera
|
||||
{isNull (GETMVAR(BIS_fnc_camera_cam, objNull))} && // Splendid camera
|
||||
{isNull (GETUVAR(BIS_fnc_animViewer_cam, objNull))} && // Animation viewer camera
|
||||
{isNull (GETMVAR(BIS_DEBUG_CAM, objNull))} // Classic camera
|
||||
{!GETMVAR(EGVAR(spectator,isSet),false)} && // ACE Spectator
|
||||
{isNull GETMVAR(BIS_EGSpectatorCamera_camera, objNull)} && // BIS Nexus Spectator
|
||||
{isNull GETUVAR(BIS_fnc_arsenal_cam, objNull)} && // Arsenal camera
|
||||
{isNull GETMVAR(BIS_fnc_establishingShot_fakeUAV, objNull)} && // Establishing shot camera
|
||||
{isNull GETMVAR(BIS_fnc_camera_cam, objNull)} && // Splendid camera
|
||||
{isNull GETUVAR(BIS_fnc_animViewer_cam, objNull)} && // Animation viewer camera
|
||||
{isNull GETMVAR(BIS_DEBUG_CAM, objNull)} // Classic camera
|
||||
) // return
|
||||
|
@ -627,11 +627,13 @@
|
||||
<English>Persistent weapon laserpointer/flashlight</English>
|
||||
<Russian>Автоматический ЛЦУ/тактический фонарь</Russian>
|
||||
<Japanese>武器のレーザー ポインタ/フラッシュライトの永続</Japanese>
|
||||
<Italian>Laser/torcia dell'arma costantemente accesi</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingPersistentLaserDesc">
|
||||
<English>Enable gunlight after weapon switch or vehicle enter/exit if it was previously enabled.</English>
|
||||
<Russian>Включать ЛЦУ/тактический фонарь после смены оружия или входа/выхода из машины, если он был до этого включен.</Russian>
|
||||
<Japanese>銃のライト等を点けていると武器を切り替えた後や車両を乗り降りしても、ライト等を点けたままにします。</Japanese>
|
||||
<Italian>Abilita la torcia/laser dopo il cambio dell'arma o l'entrata/uscita del veicolo se precedentemente attiva.</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_bananaDisplayName">
|
||||
<English>Banana</English>
|
||||
|
@ -27,11 +27,14 @@ class ACE_Settings {
|
||||
description = CSTRING(ammoCookoffDuration_tooltip);
|
||||
value = 1;
|
||||
typeName = "SCALAR";
|
||||
sliderSettings[] = {0, 5, 1, 1};
|
||||
};
|
||||
class GVAR(probabilityCoef) {
|
||||
category = CSTRING(displayName);
|
||||
displayName = CSTRING(probabilityCoef_name);
|
||||
description = CSTRING(probabilityCoef_tooltip);
|
||||
value = 1;
|
||||
typeName = "SCALAR";
|
||||
sliderSettings[] = {0, 5, 1, 1};
|
||||
};
|
||||
};
|
||||
|
@ -115,14 +115,16 @@
|
||||
<Chinese>設定彈藥殉爆效果會持續多久時間 [輸入0來關閉殉爆效果]</Chinese>
|
||||
<Chinesesimp>设定弹药殉爆效果会持续多久时间 [输入0来关闭殉爆效果]</Chinesesimp>
|
||||
<Korean>쿡오프 지속 시간의 배수 [0 이면 비활성]</Korean>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CookOff_probabilityCoef_name">
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CookOff_probabilityCoef_name">
|
||||
<English>Cook-off probability coefficient</English>
|
||||
<Japanese>誘爆の可能性係数</Japanese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CookOff_probabilityCoef_tooltip">
|
||||
<Italian>Coefficiente probabilità esplosione</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_CookOff_probabilityCoef_tooltip">
|
||||
<English>Multiplier for cook-off probability. Higher value results in higher cook-off probability</English>
|
||||
<Japanese>誘爆する可能性の乗数。高い値では誘爆する可能性が高まります。</Japanese>
|
||||
</Key>
|
||||
<Italian>Moltiplicatore per la probabilità dell'esplosione. Un valore più alto aumenta la probabilità dell'esplosione</Italian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -27,15 +27,18 @@ private _config = (_this select 3) select (count (_this select 3) - 1);
|
||||
private _requiredItems = getArray(_config >> "requires");
|
||||
private _hasRequired = true;
|
||||
private _detonators = [_unit] call FUNC(getDetonators);
|
||||
|
||||
{
|
||||
if !(_x in _detonators) exitWith{
|
||||
_hasRequired = false;
|
||||
};
|
||||
} count _requiredItems;
|
||||
|
||||
private _code = "";
|
||||
private _codeSet = false;
|
||||
|
||||
while {!_codeSet} do {
|
||||
private _code = str(round (random 9999));
|
||||
_code = str(round (random 9999));
|
||||
_count = 4 - count (toArray _code);
|
||||
while {_count > 0} do {
|
||||
_code = "0" + _code;
|
||||
@ -43,9 +46,11 @@ while {!_codeSet} do {
|
||||
};
|
||||
_codeSet = (count ([_code] call FUNC(getSpeedDialExplosive))) == 0;
|
||||
};
|
||||
|
||||
if (isNil QGVAR(CellphoneIEDs)) then {
|
||||
GVAR(CellphoneIEDs) = [];
|
||||
};
|
||||
|
||||
private _count = GVAR(CellphoneIEDs) pushBack [_explosive,_code,GetNumber(ConfigFile >> "CfgMagazines" >> _magazineClass >> "ACE_Triggers" >> "Cellphone" >> "FuseTime")];
|
||||
_count = _count + 1;
|
||||
publicVariable QGVAR(CellphoneIEDs);
|
||||
|
@ -19,6 +19,11 @@
|
||||
params ["_unit"];
|
||||
TRACE_1("params",_unit);
|
||||
|
||||
if (_unit == ace_player) then {
|
||||
// close cellphone if open
|
||||
closeDialog 0;
|
||||
};
|
||||
|
||||
// Exit if no item:
|
||||
if (({_x == "ACE_DeadManSwitch"} count (items _unit)) == 0) exitWith {};
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
control = "Checkbox"; \
|
||||
displayName = CSTRING(Eden_equipFRIES); \
|
||||
tooltip = CSTRING(Eden_equipFRIES_Tooltip); \
|
||||
expression = QUOTE([_this] call FUNC(equipFRIES)); \
|
||||
expression = QUOTE(if (_value) then {[_this] call FUNC(equipFRIES)}); \
|
||||
typeName = "BOOL"; \
|
||||
condition = "objectVehicle"; \
|
||||
defaultValue = false; \
|
||||
|
@ -11,6 +11,7 @@ class ACE_Settings {
|
||||
typeName = "SCALAR";
|
||||
displayName = CSTRING(maxRange_displayName);
|
||||
description = CSTRING(maxRange_description);
|
||||
sliderSettings[] = {0, 50, 4, 1};
|
||||
};
|
||||
class GVAR(indicatorForSelf) {
|
||||
category = CSTRING(DisplayName);
|
||||
|
@ -26,6 +26,7 @@ class ACE_Settings {
|
||||
description = CSTRING(MaxTrack_Desc);
|
||||
typeName = "SCALAR";
|
||||
value = 10;
|
||||
sliderSettings[] = {0, 50, 10, -1};
|
||||
};
|
||||
class GVAR(maxTrackPerFrame) {
|
||||
category = CSTRING(Module_DisplayName);
|
||||
@ -33,5 +34,6 @@ class ACE_Settings {
|
||||
description = CSTRING(MaxTrackPerFrame_Desc);
|
||||
typeName = "SCALAR";
|
||||
value = 10;
|
||||
sliderSettings[] = {0, 50, 10, -1};
|
||||
};
|
||||
};
|
||||
|
@ -13,10 +13,9 @@
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
|
||||
//fnc_doSpall.sqf
|
||||
#include "script_component.hpp"
|
||||
// ACE_player sideChat "WAAAAAAAAAAAAAAAAAAAAA";
|
||||
|
||||
#define WEIGHTED_SIZE [QGVAR(spall_small), 4, QGVAR(spall_medium), 3, QGVAR(spall_large), 2, QGVAR(spall_huge), 1]
|
||||
|
||||
params ["_hitData", "_hitPartDataIndex"];
|
||||
private _initialData = GVAR(spallHPData) select (_hitData select 0);
|
||||
@ -51,6 +50,7 @@ if (alive _round) then {
|
||||
};
|
||||
};
|
||||
if (_exit) exitWith {};
|
||||
|
||||
private _unitDir = vectorNormalized _velocity;
|
||||
private _pos = _hpData select 3;
|
||||
private _spallPos = [];
|
||||
@ -88,14 +88,6 @@ if (_explosive > 0) then {
|
||||
_spallPolar set [0, _fragPower * 0.66];
|
||||
};
|
||||
|
||||
private _fragTypes = [
|
||||
QGVAR(spall_small), QGVAR(spall_small), QGVAR(spall_small),
|
||||
QGVAR(spall_small),QGVAR(spall_medium),QGVAR(spall_medium),QGVAR(spall_medium),
|
||||
QGVAR(spall_medium), QGVAR(spall_large), QGVAR(spall_large), QGVAR(spall_huge),
|
||||
QGVAR(spall_huge)
|
||||
|
||||
];
|
||||
|
||||
// diag_log text format ["SPALL POWER: %1", _spallPolar select 0];
|
||||
private _spread = 15 + (random 25);
|
||||
private _spallCount = 5 + (random 10);
|
||||
@ -110,8 +102,7 @@ for "_i" from 1 to _spallCount do {
|
||||
_vel = (_vel - (_vel * 0.25)) + (random (_vel * 0.5));
|
||||
|
||||
private _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect;
|
||||
private _fragType = round (random ((count _fragTypes) - 1));
|
||||
private _fragment = (_fragTypes select _fragType) createVehicleLocal [0,0,10000];
|
||||
private _fragment = (selectRandomWeighted WEIGHTED_SIZE) createVehicleLocal [0,0,10000];
|
||||
_fragment setPosASL _spallPos;
|
||||
_fragment setVelocity _spallFragVect;
|
||||
|
||||
@ -133,8 +124,7 @@ for "_i" from 1 to _spallCount do {
|
||||
_vel = (_vel - (_vel * 0.25)) + (random (_vel * 0.5));
|
||||
|
||||
private _spallFragVect = [_vel, _dir, _elev] call CBA_fnc_polar2vect;
|
||||
private _fragType = round (random ((count _fragTypes) - 1));
|
||||
private _fragment = (_fragTypes select _fragType) createVehicleLocal [0, 0, 10000];
|
||||
private _fragment = (selectRandomWeighted WEIGHTED_SIZE) createVehicleLocal [0, 0, 10000];
|
||||
_fragment setPosASL _spallPos;
|
||||
_fragment setVelocity _spallFragVect;
|
||||
|
||||
|
@ -54,6 +54,7 @@ if (_shouldAdd) then {
|
||||
private _localShooter = if (isNil "_gunner") then {local _unit} else {local _gunner};
|
||||
TRACE_4("",_localShooter,_unit,_ammo,_projectile);
|
||||
if (!_localShooter) exitWith {};
|
||||
if (_weapon == "Put") exitWith {}; // Ignore explosives placed without ace_explosives
|
||||
|
||||
// Skip if less than 0.5 second from last shot
|
||||
if ((CBA_missionTime - (_unit getVariable [QGVAR(lastTrack), -1])) < 0.5) exitWith {};
|
||||
|
@ -4,7 +4,7 @@ if (!hasInterface) exitWith {};
|
||||
|
||||
["ACE3 Common", QGVAR(wipeGlasses), localize LSTRING(WipeGlasses), {
|
||||
if (GVAR(effects) != 2) exitWith {false}; //Can only wipe if full effects setting is set
|
||||
if (!(GETVAR(ace_player,ACE_isUnconscious,false))) exitWith {
|
||||
if (!GETVAR(ace_player,ACE_isUnconscious,false)) exitWith {
|
||||
call FUNC(clearGlasses);
|
||||
true
|
||||
};
|
||||
|
@ -37,6 +37,6 @@
|
||||
#define DBULLETS 2
|
||||
#define DAMOUNT 3
|
||||
|
||||
#define GLASSDISPLAY (GETUVAR(GVAR(Display),displayNull))
|
||||
#define GLASSDISPLAY GETUVAR(GVAR(Display),displayNull)
|
||||
|
||||
#define CLAMP(x,low,high) (if(x > high)then{high}else{if(x < low)then{low}else{x}})
|
||||
|
@ -34,6 +34,8 @@
|
||||
#define ORIENTATION 5.4
|
||||
#define EXPANSION 1
|
||||
|
||||
#define DESTRUCTION_RADIUS 1.8
|
||||
|
||||
params ["_projectile", "_timeToLive", "_center"];
|
||||
|
||||
if (isNull _projectile) exitWith {TRACE_1("null",_projectile);};
|
||||
@ -187,7 +189,7 @@ if (isServer) then {
|
||||
// --- inflame fireplace, barrels etc.
|
||||
_x inflame true;
|
||||
};
|
||||
} forEach (_position nearObjects EFFECT_SIZE);
|
||||
} forEach (_position nearObjects DESTRUCTION_RADIUS);
|
||||
|
||||
// --- damage local vehicle
|
||||
private _vehicle = _position nearestObject "Car";
|
||||
|
@ -10,11 +10,13 @@ class ACE_Settings {
|
||||
category = CSTRING(Module_DisplayName);
|
||||
value = 0.5;
|
||||
typeName = "SCALAR";
|
||||
sliderSettings[] = {0, 1, 0.5, 1};
|
||||
};
|
||||
class GVAR(unconsciousnessVolume) {
|
||||
category = CSTRING(Module_DisplayName);
|
||||
value = 0.4;
|
||||
typeName = "SCALAR";
|
||||
sliderSettings[] = {0, 1, 0.4, 1};
|
||||
};
|
||||
class GVAR(disableEarRinging) {
|
||||
category = CSTRING(Module_DisplayName);
|
||||
|
@ -269,7 +269,7 @@
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Hearing_autoAddEarplugsToUnits_Description">
|
||||
<English>Add the `ACE_EarPlugs` item to all units that have loud weapons. Can disable if using custom loadouts.</English>
|
||||
<German>Fügt die "ACE_EarPlugs" zu allen Einheiten mit lauten Waffen hinzu. Wird deaktiviert wenn eine eigene Inventarkonfiguration vorgenommen wurde.</German>
|
||||
<German>Fügt die "ACE_EarPlugs" zu allen Einheiten mit lauten Waffen hinzu. Wird deaktiviert wenn eigene Ausrüstungsprofile verwendet werden.</German>
|
||||
<Polish>Dodaje `ACE_EarPlugs` - stopery - do wszystkich jednostek, które posiadają głośną broń. Można wyłaczyć w przypadku korzystania z niestandardowych loadoutów.</Polish>
|
||||
<Russian>Добавляет предмет `ACE_EarPlugs` всем юнитам, которые имеют громкое оружие. Можно отключить при ручной настройке снаряжения.</Russian>
|
||||
<Portuguese>Adicionar o item `ACE_EarPlugs` a todas as unidades que tenham armas barulhentas. Pode ser desabilitado com carregamentos customizados.</Portuguese>
|
||||
|
@ -5,5 +5,6 @@ class ACE_Settings {
|
||||
typeName = "SCALAR";
|
||||
value = 0.1;
|
||||
displayName = CSTRING(minDamageToTrigger_displayName);
|
||||
sliderSettings[] = {-1, 1, 0.1, 1};
|
||||
};
|
||||
};
|
||||
|
@ -21,13 +21,13 @@
|
||||
params ["_vehicles", "_statement", "_target"];
|
||||
|
||||
_vehicles apply {
|
||||
private _config = configFile >> "CfgVehicles" >> typeOf _x;
|
||||
private _name = getText (_config >> "displayName");
|
||||
private _type = typeOf _x;
|
||||
private _name = getText (configFile >> "CfgVehicles" >> _type >> "displayName");
|
||||
private _ownerName = [_x, true] call EFUNC(common,getName);
|
||||
if ("" != _ownerName) then {
|
||||
_name = format ["%1 (%2)", _name, _ownerName];
|
||||
};
|
||||
private _icon = (getText (_config >> "icon")) call BIS_fnc_textureVehicleIcon;
|
||||
private _icon = [_type] call EFUNC(common,getVehicleIcon);
|
||||
private _action = [format ["%1", _x], _name, _icon, _statement, {true}, {}, _x] call EFUNC(interact_menu,createAction);
|
||||
[_action, [], _target]
|
||||
}
|
||||
|
@ -1078,6 +1078,7 @@
|
||||
<English>Pull out body</English>
|
||||
<Russian>Вытащить тело</Russian>
|
||||
<Japanese>身体を引き出す</Japanese>
|
||||
<Italian>Estrai il corpo</Italian>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -3,5 +3,6 @@ class ACE_Settings {
|
||||
value = 2;
|
||||
typeName = "SCALAR";
|
||||
displayName = CSTRING(dispersionCount_displayName);
|
||||
sliderSettings[] = {0, 5, 2, -1};
|
||||
};
|
||||
};
|
||||
|
@ -15,6 +15,8 @@ if (hasInterface) then {
|
||||
TRACE_4("ACE_controlledUAV EH",_UAV,_seatAI,_turret,_position);
|
||||
if (!isNull _seatAI) then {
|
||||
[_seatAI] call FUNC(showVehicleHud);
|
||||
} else {
|
||||
[ace_player] call FUNC(showVehicleHud);
|
||||
};
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
@ -20,11 +20,11 @@
|
||||
#define SETPVAR_SYS(var1,var2) setVariable [ARR_3(QUOTE(var1),var2,true)]
|
||||
|
||||
#undef GETVAR
|
||||
#define GETVAR(var1,var2,var3) var1 GETVAR_SYS(var2,var3)
|
||||
#define GETMVAR(var1,var2) missionNamespace GETVAR_SYS(var1,var2)
|
||||
#define GETUVAR(var1,var2) uiNamespace GETVAR_SYS(var1,var2)
|
||||
#define GETPRVAR(var1,var2) profileNamespace GETVAR_SYS(var1,var2)
|
||||
#define GETPAVAR(var1,var2) parsingNamespace GETVAR_SYS(var1,var2)
|
||||
#define GETVAR(var1,var2,var3) (var1 GETVAR_SYS(var2,var3))
|
||||
#define GETMVAR(var1,var2) (missionNamespace GETVAR_SYS(var1,var2))
|
||||
#define GETUVAR(var1,var2) (uiNamespace GETVAR_SYS(var1,var2))
|
||||
#define GETPRVAR(var1,var2) (profileNamespace GETVAR_SYS(var1,var2))
|
||||
#define GETPAVAR(var1,var2) (parsingNamespace GETVAR_SYS(var1,var2))
|
||||
|
||||
#undef SETVAR
|
||||
#define SETVAR(var1,var2,var3) var1 SETVAR_SYS(var2,var3)
|
||||
@ -37,7 +37,7 @@
|
||||
#define GETGVAR(var1,var2) GETMVAR(GVAR(var1),var2)
|
||||
#define GETEGVAR(var1,var2,var3) GETMVAR(EGVAR(var1,var2),var3)
|
||||
|
||||
#define ARR_SELECT(ARRAY,INDEX,DEFAULT) if (count ARRAY > INDEX) then {ARRAY select INDEX} else {DEFAULT}
|
||||
#define ARR_SELECT(ARRAY,INDEX,DEFAULT) (if (count ARRAY > INDEX) then {ARRAY select INDEX} else {DEFAULT})
|
||||
|
||||
|
||||
#define MACRO_ADDWEAPON(WEAPON,COUNT) class _xx_##WEAPON { \
|
||||
|
@ -1,4 +1,4 @@
|
||||
#define MAJOR 3
|
||||
#define MINOR 11
|
||||
#define MINOR 12
|
||||
#define PATCHLVL 0
|
||||
#define BUILD 26
|
||||
#define BUILD 29
|
||||
|
@ -5,6 +5,7 @@ class ACE_Settings {
|
||||
typeName = "SCALAR";
|
||||
displayName = CSTRING(BFT_Interval_DisplayName);
|
||||
description = CSTRING(BFT_Interval_Description);
|
||||
sliderSettings[] = {0, 30, 1, 1};
|
||||
};
|
||||
class GVAR(BFT_Enabled) {
|
||||
category = CSTRING(Module_DisplayName);
|
||||
@ -68,5 +69,6 @@ class ACE_Settings {
|
||||
typeName = "SCALAR";
|
||||
displayName = CSTRING(DefaultChannel_DisplayName);
|
||||
description = CSTRING(DefaultChannel_Description);
|
||||
sliderSettings[] = {-1, 5, -1, -1};
|
||||
};
|
||||
};
|
||||
|
@ -12,6 +12,7 @@ class ACE_Settings {
|
||||
category = CSTRING(mapGestures_category);
|
||||
typeName = "SCALAR";
|
||||
value = 7;
|
||||
sliderSettings[] = {0, 50, 7, 1};
|
||||
};
|
||||
class GVAR(interval) {
|
||||
displayName = CSTRING(interval_displayName);
|
||||
@ -19,6 +20,7 @@ class ACE_Settings {
|
||||
category = CSTRING(mapGestures_category);
|
||||
typeName = "SCALAR";
|
||||
value = 0.03;
|
||||
sliderSettings[] = {0, 1, 0.03, 2};
|
||||
};
|
||||
class GVAR(nameTextColor) {
|
||||
displayName = CSTRING(nameTextColor_displayName);
|
||||
|
@ -6,7 +6,7 @@ class CfgAmmo {
|
||||
class Missile_AGM_02_F : MissileBase {};
|
||||
|
||||
class GVAR(L) : Missile_AGM_02_F {
|
||||
author = "rufix";
|
||||
author = "xrufix";
|
||||
autoSeekTarget = 0;
|
||||
irLock = 0;
|
||||
laserLock = 0;
|
||||
@ -39,4 +39,37 @@ class CfgAmmo {
|
||||
attackProfiles[] = {"maverick"};
|
||||
};
|
||||
};
|
||||
|
||||
class Missile_AGM_01_F : MissileBase {};
|
||||
class ace_kh25ml : Missile_AGM_01_F {
|
||||
author = "xrufix";
|
||||
irLock = 0
|
||||
missileLockMaxDistance = 10000;
|
||||
weaponLockSystem = 4;
|
||||
class ace_missileguidance {
|
||||
enabled = 1;
|
||||
|
||||
minDeflection = 0.0005;
|
||||
maxDeflection = 0.01;
|
||||
incDeflection = 0.005;
|
||||
|
||||
canVanillaLock = 0;
|
||||
|
||||
defaultSeekerType = "SALH";
|
||||
seekerTypes[] = {"SALH"};
|
||||
|
||||
defaultSeekerLockMode = "LOAL";
|
||||
seekerLockModes[] = {"LOAL"};
|
||||
|
||||
seekLastTargetPos = 1;
|
||||
seekerAngle = 40;
|
||||
seekerAccuracy = 1;
|
||||
|
||||
seekerMinRange = 1;
|
||||
seekerMaxRange = 10000;
|
||||
|
||||
defaultAttackProfile = "maverick";
|
||||
attackProfiles[] = {"maverick"};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -71,4 +71,43 @@ class CfgMagazines {
|
||||
displayNameShort = CSTRING(L_MAG_short);
|
||||
pylonWeapon = QGVAR(L_Launcher);
|
||||
};
|
||||
|
||||
// KH-25
|
||||
class 4Rnd_Missile_AGM_01_F;
|
||||
class PylonRack_1Rnd_Missile_AGM_01_F : 4Rnd_Missile_AGM_01_F {};
|
||||
class magazine_Missile_AGM_KH25_x1 : VehicleMagazine {};
|
||||
class PylonMissile_Missile_AGM_KH25_x1 : magazine_Missile_AGM_KH25_x1 {};
|
||||
class PylonMissile_Missile_AGM_KH25_INT_x1 : PylonMissile_Missile_AGM_KH25_x1 {};
|
||||
|
||||
class ace_kh25ml_pylonrack_x1 : PylonRack_1Rnd_Missile_AGM_01_F {
|
||||
ammo = "ace_kh25ml";
|
||||
author = "xrufix";
|
||||
descriptionShort = CSTRING(KH25ML_MAG_DESCR);
|
||||
displayName = CSTRING(KH25ML_MAG_x1);
|
||||
displayNameShort = CSTRING(L_MAG_short);
|
||||
pylonWeapon = "ace_kh25ml_launcher";
|
||||
};
|
||||
class ace_kh25ml_magazine_x1 : magazine_Missile_AGM_KH25_x1 {
|
||||
ammo = "ace_kh25ml";
|
||||
author = "xrufix";
|
||||
descriptionShort = CSTRING(KH25ML_MAG_DESCR);
|
||||
displayName = CSTRING(KH25ML_MAG_x1);
|
||||
displayNameShort = CSTRING(L_MAG_short);
|
||||
};
|
||||
class ace_kh25ml_pylonmissile_x1 : PylonMissile_Missile_AGM_KH25_x1 {
|
||||
ammo = "ace_kh25ml";
|
||||
author = "xrufix";
|
||||
descriptionShort = CSTRING(KH25ML_MAG_DESCR);
|
||||
displayName = CSTRING(KH25ML_MAG_x1);
|
||||
displayNameShort = CSTRING(L_MAG_short);
|
||||
pylonWeapon = "ace_kh25ml_launcher";
|
||||
};
|
||||
class ace_kh25ml_pylonmissile_int_x1 : PylonMissile_Missile_AGM_KH25_INT_x1 {
|
||||
ammo = "ace_kh25ml";
|
||||
author = "xrufix";
|
||||
descriptionShort = CSTRING(KH25ML_MAG_DESCR);
|
||||
displayName = CSTRING(KH25ML_MAG_x1);
|
||||
displayNameShort = CSTRING(L_MAG_short);
|
||||
pylonWeapon = "ace_kh25ml_launcher";
|
||||
};
|
||||
};
|
||||
|
@ -45,4 +45,22 @@ class CfgWeapons {
|
||||
EGVAR(laser,showHud) = 1; // show attack profile / lock on hud
|
||||
GVAR(enabled) = 1;
|
||||
};
|
||||
|
||||
class weapon_AGM_KH25Launcher : MissileLauncher {};
|
||||
class ace_kh25ml_launcher : weapon_AGM_KH25Launcher {
|
||||
author = "xrufix";
|
||||
displayName = CSTRING(KH25ML);
|
||||
magazines[] = {
|
||||
"ace_kh25ml_pylonrack_x1",
|
||||
"ace_kh25ml_magazine_x1",
|
||||
"ace_kh25ml_pylonmissile_x1",
|
||||
"ace_kh25ml_pylonmissile_int_x1"
|
||||
};
|
||||
weaponLockDelay = 0.1;
|
||||
weaponLockSystem = 0;
|
||||
|
||||
EGVAR(laser,canSelect) = 1; // can ace_laser lock (allows switching laser code)
|
||||
EGVAR(laser,showHud) = 1; // show attack profile / lock on hud
|
||||
GVAR(enabled) = 1;
|
||||
};
|
||||
};
|
||||
|
@ -1,11 +1,12 @@
|
||||
ace_maverick
|
||||
==========
|
||||
|
||||
Adds pylon magazines with laser guided AGM-65 Maverick L.
|
||||
Adds pylon magazines with laser guided AGM-65 Maverick L and KH25ML.
|
||||
|
||||
* The magazines can be added to every plane the vanilla Macer II can be added to.
|
||||
* The Mavericks can be added to every plane the vanilla Macer II can be added to.
|
||||
* The KH25ML can be added to every plane the vanilla KH25 and Sharur missiles can be added to.
|
||||
* The missile uses laser guidance based on ACE's Advanced Missile Guidance framework.
|
||||
* The PylonWeapon from CfgWeapons is added to planes with pylons automatically.
|
||||
* The PylonWeapon is added to planes with pylons automatically.
|
||||
|
||||
![Laser guided Maverick](https://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/US_Navy_041128-N-5345W-016_Aviation_Ordnanceman_3rd_Class_William_Miller_arms_a_AGM-65_Maverick_laser-guided_missile.jpg/1280px-US_Navy_041128-N-5345W-016_Aviation_Ordnanceman_3rd_Class_William_Miller_arms_a_AGM-65_Maverick_laser-guided_missile.jpg)
|
||||
|
||||
|
@ -4,13 +4,14 @@ class CfgPatches {
|
||||
class ADDON {
|
||||
name = COMPONENT_NAME;
|
||||
requiredVersion = REQUIRED_VERSION;
|
||||
requiredAddons[] = {"ace_hellfire"};
|
||||
requiredAddons[] = {"ace_missileguidance"};
|
||||
author = ECSTRING(common,ACETeam);
|
||||
authors[] = {"xrufix"};
|
||||
url = ECSTRING(main,URL);
|
||||
VERSION_CONFIG;
|
||||
ammo[] = {
|
||||
GVAR(L)
|
||||
GVAR(L),
|
||||
"ace_kh25ml"
|
||||
};
|
||||
magazines[] = {
|
||||
QGVAR(L_magazine_x1),
|
||||
@ -19,11 +20,15 @@ class CfgPatches {
|
||||
QGVAR(L_pylonRack_1Rnd),
|
||||
QGVAR(L_PylonRack_3Rnd),
|
||||
QGVAR(L_PylonRack_x1),
|
||||
QGVAR(L_PylonRack_x2)
|
||||
QGVAR(L_PylonRack_x2),
|
||||
"ace_kh25ml_magazine_x1",
|
||||
"ace_kh25ml_pylonmissile_x1",
|
||||
"ace_kh25ml_pylonmissile_int_x1"
|
||||
};
|
||||
weapons[] = {
|
||||
GVAR(L_Launcher_Plane),
|
||||
GVAR(L_Launcher)
|
||||
GVAR(L_Launcher),
|
||||
"ace_kh25ml_launcher"
|
||||
};
|
||||
units[] = {};
|
||||
};
|
||||
|
@ -12,31 +12,31 @@
|
||||
<Korean>AGM-65 Maverick L, 레이저 유도 대지 미사일</Korean>
|
||||
</Key>
|
||||
<Key ID="str_ace_maverick_l_mag_x1">
|
||||
<English>AGM-65 Maverick L x1</English>
|
||||
<German>AGM-65 Maverick L x1</German>
|
||||
<Italian>AGM-65 Maverick L x1</Italian>
|
||||
<Japanese>AGM-65 マーベリック L x1</Japanese>
|
||||
<Chinese>AGM-65"小牛"飛彈L型 x1</Chinese>
|
||||
<Chinesesimp>AGM-65"小牛"飞弹L型 x1</Chinesesimp>
|
||||
<Korean>AGM-65 Maverick L x1</Korean>
|
||||
<English>AGM-65 Maverick L [ACE]</English>
|
||||
<German>AGM-65 Maverick L [ACE]</German>
|
||||
<Italian>AGM-65 Maverick L [ACE]</Italian>
|
||||
<Japanese>AGM-65 マーベリック L [ACE]</Japanese>
|
||||
<Chinese>AGM-65"小牛"飛彈L型 [ACE]</Chinese>
|
||||
<Chinesesimp>AGM-65"小牛"飞弹L型 [ACE]</Chinesesimp>
|
||||
<Korean>AGM-65 Maverick L [ACE]</Korean>
|
||||
</Key>
|
||||
<Key ID="str_ace_maverick_l_mag_x2">
|
||||
<English>AGM-65 Maverick L x2</English>
|
||||
<German>AGM-65 Maverick L x2</German>
|
||||
<Italian>AGM-65 Maverick L x2</Italian>
|
||||
<Japanese>AGM-65 マーベリック L x2</Japanese>
|
||||
<Chinese>AGM-65"小牛"飛彈L型 x2</Chinese>
|
||||
<Chinesesimp>AGM-65"小牛"飞弹L型 x2</Chinesesimp>
|
||||
<Korean>AGM-65 Maverick L x2</Korean>
|
||||
<English>2x AGM-65 Maverick L [ACE]</English>
|
||||
<German>2x AGM-65 Maverick L [ACE]</German>
|
||||
<Italian>2x AGM-65 Maverick L [ACE]</Italian>
|
||||
<Japanese>2x AGM-65 マーベリック L [ACE]</Japanese>
|
||||
<Chinese>2x AGM-65"小牛"飛彈L型 [ACE]</Chinese>
|
||||
<Chinesesimp>2x AGM-65"小牛"飞弹L型 [ACE]</Chinesesimp>
|
||||
<Korean>2x AGM-65 Maverick L [ACE]</Korean>
|
||||
</Key>
|
||||
<Key ID="str_ace_maverick_l_mag_x3">
|
||||
<English>AGM-65 Maverick L x3</English>
|
||||
<German>AGM-65 Maverick L x3</German>
|
||||
<Italian>AGM-65 Maverick L x3</Italian>
|
||||
<Japanese>AGM-65 マーベリック L x3</Japanese>
|
||||
<Chinese>AGM-65"小牛"飛彈L型 x3</Chinese>
|
||||
<Chinesesimp>AGM-65"小牛"飞弹L型 x3</Chinesesimp>
|
||||
<Korean>AGM-65 Maverick L x3</Korean>
|
||||
<English>3x AGM-65 Maverick L [ACE]</English>
|
||||
<German>3x AGM-65 Maverick L [ACE]</German>
|
||||
<Italian>3x AGM-65 Maverick L [ACE]</Italian>
|
||||
<Japanese>3x AGM-65 マーベリック L [ACE]</Japanese>
|
||||
<Chinese>3x AGM-65"小牛"飛彈L型 [ACE]</Chinese>
|
||||
<Chinesesimp>3x AGM-65"小牛"飞弹L型 [ACE]</Chinesesimp>
|
||||
<Korean>3x AGM-65 Maverick L [ACE]</Korean>
|
||||
</Key>
|
||||
<Key ID="str_ace_maverick_l_mag_short">
|
||||
<English>Laser Guided</English>
|
||||
@ -47,6 +47,15 @@
|
||||
<Chinesesimp>雷射导引</Chinesesimp>
|
||||
<Korean>레이저 유도</Korean>
|
||||
</Key>
|
||||
<Key ID="str_ace_maverick_kh25ml_mag_descr">
|
||||
<English>Kh-25ML, Laser Guided Air-to-Ground-Missile</English>
|
||||
<German>Ch-25ML, Lasergelenkte Luft-Boden-Rakete</German>
|
||||
</Key>
|
||||
<Key ID="str_ace_maverick_kh25ml_mag_x1">
|
||||
<English>1x Kh-25ML [ACE]</English>
|
||||
<German>1x Ch-25ML [ACE]</German>
|
||||
<Russian>1x Х-25МЛ [ACE]</Russian>
|
||||
</Key>
|
||||
</Container>
|
||||
<Container name="weapons">
|
||||
<Key ID="str_ace_maverick_l">
|
||||
@ -58,6 +67,11 @@
|
||||
<Chinesesimp>AGM-65"小牛"飞弹L型</Chinesesimp>
|
||||
<Korean>AGM-65 Maverick L</Korean>
|
||||
</Key>
|
||||
<Key ID="str_ace_maverick_kh25ml">
|
||||
<English>Kh-25ML</English>
|
||||
<German>Ch-25ML</English>
|
||||
<Russian>Х-25МЛ</English>
|
||||
</Key>
|
||||
</Container>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -41,6 +41,7 @@ class ACE_Settings {
|
||||
description = CSTRING(MedicalSettings_bleedingCoefficient_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 1;
|
||||
sliderSettings[] = {0, 25, 1, 1};
|
||||
};
|
||||
class GVAR(painCoefficient) {
|
||||
category = CSTRING(Category_Medical);
|
||||
@ -48,6 +49,7 @@ class ACE_Settings {
|
||||
description = CSTRING(MedicalSettings_painCoefficient_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 1;
|
||||
sliderSettings[] = {0, 25, 1, 1};
|
||||
};
|
||||
class GVAR(enableAdvancedWounds) {
|
||||
category = CSTRING(Category_Medical);
|
||||
@ -76,6 +78,7 @@ class ACE_Settings {
|
||||
description = CSTRING(MedicalSettings_playerDamageThreshold_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 1;
|
||||
sliderSettings[] = {0, 25, 1, 1};
|
||||
};
|
||||
class GVAR(AIDamageThreshold) {
|
||||
category = CSTRING(Category_Medical);
|
||||
@ -83,6 +86,7 @@ class ACE_Settings {
|
||||
description = CSTRING(MedicalSettings_AIDamageThreshold_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 1;
|
||||
sliderSettings[] = {0, 25, 1, 1};
|
||||
};
|
||||
class GVAR(enableUnconsciousnessAI) {
|
||||
category = CSTRING(Category_Medical);
|
||||
@ -120,6 +124,7 @@ class ACE_Settings {
|
||||
description = CSTRING(ReviveSettings_maxReviveTime_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 120;
|
||||
sliderSettings[] = {0, 1200, 120, 0};
|
||||
};
|
||||
class GVAR(amountOfReviveLives) {
|
||||
category = CSTRING(Category_Medical);
|
||||
@ -127,6 +132,7 @@ class ACE_Settings {
|
||||
description = CSTRING(ReviveSettings_amountOfReviveLives_Description);
|
||||
typeName = "SCALAR";
|
||||
value = -1;
|
||||
sliderSettings[] = {-1, 25, -1, -1};
|
||||
};
|
||||
class GVAR(allowDeadBodyMovement) {
|
||||
category = CSTRING(Category_Medical);
|
||||
@ -156,6 +162,7 @@ class ACE_Settings {
|
||||
description = CSTRING(MedicalSettings_litterCleanUpDelay_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 0;
|
||||
sliderSettings[] = {-1, 3600, 0, 0};
|
||||
};
|
||||
class GVAR(medicSetting_basicEpi) {
|
||||
category = CSTRING(Category_Medical);
|
||||
@ -291,5 +298,6 @@ class ACE_Settings {
|
||||
description = CSTRING(MedicalSettings_delayUnconCaptive_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 3;
|
||||
sliderSettings[] = {0, 30, 3, 0};
|
||||
};
|
||||
};
|
||||
|
@ -10,10 +10,8 @@ GVAR(injuredUnitCollection) = [];
|
||||
|
||||
private _versionEx = "ace_medical" callExtension "version";
|
||||
DFUNC(handleDamage_assignWounds) = if (_versionEx == "") then {
|
||||
INFO_1("Extension %1.dll not installed.","ace_medical");
|
||||
DFUNC(handleDamage_woundsOld)
|
||||
} else {
|
||||
INFO_2("Extension version: %1: %2","ace_medical",_versionEx);
|
||||
DFUNC(handleDamage_wounds)
|
||||
};
|
||||
|
||||
|
@ -54,3 +54,7 @@ class ACE_newEvents {
|
||||
actionCheckBloodPressureLocal = QGVAR(actionCheckBloodPressureLocal);
|
||||
addVitalLoop = QGVAR(addVitalLoop);
|
||||
};
|
||||
|
||||
class ACE_Extensions {
|
||||
extensions[] += {"ace_medical"};
|
||||
};
|
||||
|
@ -4,7 +4,7 @@
|
||||
<Key ID="STR_ACE_Medical_Injuries">
|
||||
<English>INJURIES</English>
|
||||
<German>VERLETZUNGEN</German>
|
||||
<Italian>LESIONI</Italian>
|
||||
<Italian>FERITE</Italian>
|
||||
<Russian>ТРАВМЫ</Russian>
|
||||
<French>BLESSURES</French>
|
||||
<Polish>OBRAŻENIA</Polish>
|
||||
@ -20,7 +20,7 @@
|
||||
<Key ID="STR_ACE_Medical_NoInjuriesBodypart">
|
||||
<English>No injuries on this bodypart...</English>
|
||||
<German>Körperteil nicht verletzt...</German>
|
||||
<Italian>Non ci sono lesioni in questa parte del corpo...</Italian>
|
||||
<Italian>Non ci sono ferite in questa parte del corpo...</Italian>
|
||||
<Russian>Данная часть тела не повреждена...</Russian>
|
||||
<French>Aucune blessure ici...</French>
|
||||
<Polish>Brak obrażeń na tej części ciała...</Polish>
|
||||
|
@ -29,5 +29,6 @@ class ACE_Settings {
|
||||
value = 3;
|
||||
typeName = "SCALAR";
|
||||
category = ECSTRING(medical,Category_Medical);
|
||||
sliderSettings[] = {0, 10, 3, 1};
|
||||
};
|
||||
};
|
||||
|
@ -1,8 +0,0 @@
|
||||
class ACE_Settings {
|
||||
class GVAR(useImperial) {
|
||||
value = 0;
|
||||
typeName = "BOOL";
|
||||
isClientSettable = 1;
|
||||
displayName = CSTRING(UseImperial);
|
||||
};
|
||||
};
|
@ -1,4 +1,3 @@
|
||||
|
||||
class Extended_PreStart_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preStart));
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
PREP(addLoadToUnitContainer);
|
||||
PREP(canClimb);
|
||||
PREP(climb);
|
||||
|
@ -18,4 +18,3 @@ class CfgPatches {
|
||||
#include "CfgFatigue.hpp"
|
||||
#include "CfgMoves.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "ACE_Settings.hpp"
|
||||
|
@ -40,7 +40,6 @@ private _absLoad = getNumber (configFile >> "CfgInventoryGlobalVariable" >> "max
|
||||
private _loadCoef = _unit getVariable QGVAR(loadCoef);
|
||||
|
||||
if (isNil "_loadCoef") then {
|
||||
INFO("Note: getUnitTrait / loadCoef enum error can be ignored [present since Arma 3 v1.78] - IGNORE THIS");
|
||||
_loadCoef = _unit getUnitTrait "loadCoef";
|
||||
_unit setVariable [QGVAR(loadCoef), _loadCoef, true];
|
||||
};
|
||||
|
@ -13,17 +13,23 @@
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "script_component.hpp"
|
||||
|
||||
disableSerialization;
|
||||
params ["_display"];
|
||||
|
||||
[{
|
||||
disableSerialization;
|
||||
params ["_dialog"];
|
||||
private _fnc_update = {
|
||||
params ["_display"];
|
||||
private _control = _display displayCtrl 111;
|
||||
|
||||
if (isNull _dialog) exitWith {
|
||||
[_this select 1] call CBA_fnc_removePerFrameHandler;
|
||||
};
|
||||
_control ctrlSetText format ["%1 - %2 %3 (%4)",
|
||||
[ACE_player, false, true] call EFUNC(common,getName),
|
||||
localize ELSTRING(common,Weight),
|
||||
[ACE_player] call EFUNC(common,getWeight),
|
||||
[ACE_player, true] call EFUNC(common,getWeight)
|
||||
];
|
||||
};
|
||||
|
||||
(_dialog displayCtrl 111) ctrlSetText format ["%1 - %2 %3", [ACE_player, false, true] call EFUNC(common,getName), localize ELSTRING(common,Weight), [ACE_player] call EFUNC(common,getWeight)];
|
||||
}, 0, _this select 0] call CBA_fnc_addPerFrameHandler;
|
||||
_display displayAddEventHandler ["MouseMoving", _fnc_update];
|
||||
_display displayAddEventHandler ["MouseHolding", _fnc_update];
|
||||
|
||||
_display call _fnc_update;
|
||||
|
@ -56,12 +56,14 @@ class ACE_Settings {
|
||||
typeName = "SCALAR";
|
||||
isClientSettable = 0;
|
||||
category = CSTRING(Module_DisplayName);
|
||||
sliderSettings[] = {0, 50, 5, 1};
|
||||
};
|
||||
class GVAR(playerNamesMaxAlpha) {
|
||||
value = 0.8;
|
||||
typeName = "SCALAR";
|
||||
isClientSettable = 0;
|
||||
category = CSTRING(Module_DisplayName);
|
||||
sliderSettings[] = {0, 1, 0.8, 2};
|
||||
};
|
||||
class GVAR(tagSize) {
|
||||
value = 2;
|
||||
|
@ -12,6 +12,7 @@ class ACE_Settings {
|
||||
description = CSTRING(fogScaling_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 1;
|
||||
sliderSettings[] = {0, 2, 1, 1};
|
||||
};
|
||||
class GVAR(effectScaling) {
|
||||
category = CSTRING(Category);
|
||||
@ -19,5 +20,13 @@ class ACE_Settings {
|
||||
description = CSTRING(effectScaling_Description);
|
||||
typeName = "SCALAR";
|
||||
value = 1;
|
||||
sliderSettings[] = {0, 2, 1, 1};
|
||||
};
|
||||
class GVAR(aimDownSightsBlur) {
|
||||
category = CSTRING(Category);
|
||||
displayName = CSTRING(aimDownSightsBlur_DisplayName);
|
||||
typeName = "SCALAR";
|
||||
value = 1;
|
||||
sliderSettings[] = {0, 2, 1, 1};
|
||||
};
|
||||
};
|
||||
|
@ -26,11 +26,17 @@ GVAR(ppEffectCCMuzzleFlash) = -1;
|
||||
["ace_settingsInitialized", {
|
||||
TRACE_3("settingsInitialized",GVAR(disableNVGsWithSights),GVAR(fogScaling),GVAR(effectScaling));
|
||||
|
||||
// Disable ALL effects if ace_nightvision_effectScaling is zero
|
||||
if (GVAR(effectScaling) == 0) exitWith {};
|
||||
["visionMode", LINKFUNC(onVisionModeChanged), false] call CBA_fnc_addPlayerEventHandler;
|
||||
|
||||
// handle only brightness if effects are disabled
|
||||
if (GVAR(effectScaling) == 0) exitWith {
|
||||
GVAR(ppEffectNVGBrightness) = ppEffectCreate ["ColorCorrections", 1236];
|
||||
GVAR(ppEffectNVGBrightness) ppEffectForceInNVG true;
|
||||
GVAR(ppEffectNVGBrightness) ppEffectAdjust [1, (-3+3)/5 + 1, 0, [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1]];
|
||||
GVAR(ppEffectNVGBrightness) ppEffectCommit 0;
|
||||
};
|
||||
|
||||
["loadout", LINKFUNC(onLoadoutChanged), true] call CBA_fnc_addPlayerEventHandler;
|
||||
["visionMode", LINKFUNC(onVisionModeChanged), false] call CBA_fnc_addPlayerEventHandler;
|
||||
["cameraView", LINKFUNC(onCameraViewChanged), true] call CBA_fnc_addPlayerEventHandler;
|
||||
["vehicle", LINKFUNC(refreshGoggleType), false] call CBA_fnc_addPlayerEventHandler;
|
||||
["turret", LINKFUNC(refreshGoggleType), true] call CBA_fnc_addPlayerEventHandler;
|
||||
@ -60,6 +66,7 @@ if (!isNil QGVAR(serverPriorFog)) then {[] call FUNC(nonDedicatedFix);}; // If v
|
||||
if !([ACE_player, objNull, ["isNotEscorting", "isNotInside", "isNotSitting", "isNotRefueling"]] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
// Conditions: specific
|
||||
if ((currentVisionMode ACE_player != 1)) exitWith {false};
|
||||
if (!(missionNamespace getVariable [QGVAR(allowBrightnessControl), true])) exitWith {false}; // just a mission setVar (not ace_setting)
|
||||
|
||||
// Statement
|
||||
[ACE_player, 1] call FUNC(changeNVGBrightness);
|
||||
@ -71,6 +78,7 @@ if (!isNil QGVAR(serverPriorFog)) then {[] call FUNC(nonDedicatedFix);}; // If v
|
||||
if !([ACE_player, objNull, ["isNotEscorting", "isNotInside", "isNotSitting", "isNotRefueling"]] call EFUNC(common,canInteractWith)) exitWith {false};
|
||||
// Conditions: specific
|
||||
if ((currentVisionMode ACE_player != 1)) exitWith {false};
|
||||
if (!(missionNamespace getVariable [QGVAR(allowBrightnessControl), true])) exitWith {false}; // just a mission setVar (not ace_setting)
|
||||
|
||||
// Statement
|
||||
[ACE_player, -1] call FUNC(changeNVGBrightness);
|
||||
|
@ -19,7 +19,8 @@
|
||||
params ["_player", "_changeInBrightness"];
|
||||
TRACE_2("changeNVGBrightness",_player,_changeInBrightness);
|
||||
|
||||
private _brightness = _player getVariable [QGVAR(NVGBrightness), 0];
|
||||
private _areEffectsDisabled = GVAR(effectScaling) == 0;
|
||||
private _brightness = _player getVariable [QGVAR(NVGBrightness), [0, -3] select _areEffectsDisabled];
|
||||
|
||||
_brightness = ((_brightness + _changeInBrightness) min 0) max -6;
|
||||
|
||||
@ -28,5 +29,12 @@ _player setVariable [QGVAR(NVGBrightness), _brightness, false];
|
||||
[format [(localize LSTRING(NVGBrightness)), _brightness]] call EFUNC(common,displayTextStructured);
|
||||
playSound "ACE_Sound_Click";
|
||||
|
||||
// handle only brightness if effects are disabled
|
||||
if (_areEffectsDisabled) exitWith {
|
||||
// here we take (-6; 0) _brightness range and alter it to (0.4; 1.6)
|
||||
GVAR(ppEffectNVGBrightness) ppEffectAdjust [1, (_brightness+3)/5 + 1, 0, [0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 1]];
|
||||
GVAR(ppEffectNVGBrightness) ppEffectCommit 0;
|
||||
};
|
||||
|
||||
// Trigger full ppEffects update next time run in the PFEH:
|
||||
GVAR(nextEffectsUpdate) = -1;
|
||||
|
@ -19,6 +19,11 @@
|
||||
params ["_unit", "_visionMode"];
|
||||
TRACE_2("onVisionModeChanged",_unit,_visionMode);
|
||||
|
||||
// handle only brightness if effects are disabled
|
||||
if (GVAR(effectScaling) == 0) exitWith {
|
||||
GVAR(ppEffectNVGBrightness) ppEffectEnable (_visionMode == 1);
|
||||
};
|
||||
|
||||
// Start PFEH when entering night vision mode:
|
||||
if (_visionMode == 1) then {
|
||||
if (GVAR(PFID) == -1) then {
|
||||
|
@ -88,8 +88,8 @@ if (CBA_missionTime < GVAR(nextEffectsUpdate)) then {
|
||||
// Modify blur if looking down scope
|
||||
if ((cameraView == "GUNNER") && {[ACE_player] call CBA_fnc_canUseWeapon}) then {
|
||||
if (currentWeapon ACE_player == "") exitWith {};
|
||||
if (currentWeapon ACE_player == primaryWeapon ACE_player) exitWith {_blurFinal = _blurFinal * ST_NVG_CAMERA_BLUR_SIGHTS_RIFLE}; // Rifles are bad
|
||||
if (currentWeapon ACE_player == handgunWeapon ACE_player) exitWith {_blurFinal = _blurFinal * ST_NVG_CAMERA_BLUR_SIGHTS_PISTOL}; // Pistols aren't so bad
|
||||
if (currentWeapon ACE_player == primaryWeapon ACE_player) exitWith {_blurFinal = _blurFinal * linearConversion [0, 1, GVAR(aimDownSightsBlur), 1, ST_NVG_CAMERA_BLUR_SIGHTS_RIFLE]}; // Rifles are bad
|
||||
if (currentWeapon ACE_player == handgunWeapon ACE_player) exitWith {_blurFinal = _blurFinal * linearConversion [0, 1, GVAR(aimDownSightsBlur), 1, ST_NVG_CAMERA_BLUR_SIGHTS_PISTOL]}; // Pistols aren't so bad
|
||||
};
|
||||
|
||||
// Scale effects based on ace_nightvision_effectScaling setting
|
||||
@ -98,7 +98,6 @@ if (CBA_missionTime < GVAR(nextEffectsUpdate)) then {
|
||||
private _radialBlurPower = 0.0025 * GVAR(effectScaling);
|
||||
_brightFinal = linearConversion [0, 1, GVAR(effectScaling), 1, _brightFinal];
|
||||
_contrastFinal = linearConversion [0, 1, GVAR(effectScaling), 1, _contrastFinal];
|
||||
_blurFinal = _blurFinal * GVAR(effectScaling);
|
||||
|
||||
|
||||
// Setup all effects
|
||||
|
@ -1,9 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="NightVision">
|
||||
<Key ID="STR_ACE_NightVision_Category">
|
||||
<English>ACE Nightvision</English>
|
||||
<Japanese>ACE 暗視装置</Japanese>
|
||||
<Italian>Visione notturna ACE</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NightVision_NVG_Gen1">
|
||||
<English>NV Goggles (Gen1)</English>
|
||||
@ -244,18 +245,26 @@
|
||||
<Key ID="STR_ACE_NightVision_fogScaling_DisplayName">
|
||||
<English>NVG Fog Scale</English>
|
||||
<Japanese>暗視装置の霧の規模</Japanese>
|
||||
<Italian>Livello Nebbia NVG</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NightVision_fogScaling_Description">
|
||||
<English>Fog is used to limit visibility.</English>
|
||||
<Japanese>霧は視界制限のために使われます。</Japanese>
|
||||
<Italian>La nebbia viene utilizzata per limitare la visibilità.</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NightVision_effectScaling_DisplayName">
|
||||
<English>NVG Effect Scale</English>
|
||||
<Japanese>暗視装置の効果規模</Japanese>
|
||||
<Italian>Effetto livello NVG</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NightVision_effectScaling_Description">
|
||||
<English>Blur, grain and brightness effects [Setting to 0 will disable ALL nightvision effects]</English>
|
||||
<Japanese>ぼかしと粒子、明度効果 [0 に設定で全効果を無効化します]</Japanese>
|
||||
<Italian>Effetti di sfocatura, sgranatura e luminosità [Importare a 0 disabiliterà TUTTI gli effetti della visione notturna]</Italian>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_NightVision_aimDownSightsBlur_DisplayName">
|
||||
<English>Aim Down Sights Blur</English>
|
||||
<Japanese>照準器を使用時にぼかし</Japanese>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user