mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge branch 'master' into armake
This commit is contained in:
commit
58f4ca4581
@ -21,9 +21,6 @@ script:
|
||||
- make -j 3
|
||||
- python3 tools/sqf_validator.py
|
||||
- python3 tools/config_style_checker.py
|
||||
- if [ -n "${GH_TOKEN}" ] && [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ]; then
|
||||
python3 tools/deploy.py;
|
||||
fi
|
||||
env:
|
||||
global:
|
||||
- secure: cdxkn5cAx+s1C9Ne5m+odEhde1uuSg6XGMDgepN4DwSAJwtMnUv3ZmDebd5YJC1raZJdep+n09Cj0GoTNICQRkco50DxHKHYNad41wetY0tn0cs9gmPYzyFE5q4vuWiQ47dlGhQQ7IJDyX0nU++gG5E50/PhlZfebdedGSprN/4=
|
||||
|
@ -98,6 +98,7 @@ legman <juicemelon@msn.com>
|
||||
Legolasindar "Viper" <legolasindar@gmail.com>
|
||||
licht-im-Norden87 <lichtimnorden87@gmail.com>
|
||||
looter <looter222@gmail.com>
|
||||
Lugubrious Hatchling <thunderbra@gmail.com>
|
||||
Luigi "Luigium" Myrini <luigium@outlook.fr>
|
||||
Macusercom <macusercom@gmail.com>
|
||||
MarcBook
|
||||
@ -109,6 +110,7 @@ nic547 <nic547@outlook.com>
|
||||
nikolauska <nikolauska1@gmail.com>
|
||||
nomisum <nomisum@gmail.com>
|
||||
OnkelDisMaster <onkeldismaster@gmail.com>
|
||||
Orbis2358 <mgkid3310@naver.com>
|
||||
oscarmolinadev
|
||||
PaxJaromeMalues <seemax1991@gmail.com>
|
||||
Phyma <sethramstrom@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.12.1-blue.svg?style=flat-square" alt="ACE3 Version">
|
||||
<img src="https://img.shields.io/badge/Version-3.12.2-blue.svg?style=flat-square" alt="ACE3 Version">
|
||||
</a>
|
||||
<a href="https://github.com/acemod/ACE3/issues">
|
||||
<img src="https://img.shields.io/github/issues-raw/acemod/ACE3.svg?style=flat-square&label=Issues" alt="ACE3 Issues">
|
||||
|
@ -76,7 +76,7 @@
|
||||
<Hungarian>Engedélyezi a fejlett ballisztikát</Hungarian>
|
||||
<Russian>Включает продвинутую баллистику</Russian>
|
||||
<Italian>Abilita Balistica Avanzata</Italian>
|
||||
<Japanese>アドバンスド バリスティックス</Japanese>
|
||||
<Japanese>アドバンスド バリスティックスを有効化</Japanese>
|
||||
<Korean>고급 탄도학을 적용합니다</Korean>
|
||||
<Chinese>啟用先進彈道系統</Chinese>
|
||||
<Chinesesimp>启用先进弹道系统</Chinesesimp>
|
||||
@ -87,13 +87,19 @@
|
||||
<Japanese>銃口初速の変化</Japanese>
|
||||
<Italian>Abilita Variazione Velocità Volata</Italian>
|
||||
<Korean>총구속도 변화적용</Korean>
|
||||
<Chinese>啟用槍口初速變化</Chinese>
|
||||
<Chinesesimp>启用枪口初速变化</Chinesesimp>
|
||||
<French>Activer les variations de la vitesse initiale</French>
|
||||
</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>
|
||||
<Japanese>発射毎に銃口初速の僅かな変化をシミュレートします</Japanese>
|
||||
<Italian>Simula lievi variazioni della velocità della volata tra un colpo e l'altro</Italian>
|
||||
<Korean>각 사격 사이에 총구속도 변화를 시뮬레이션 합니다.</Korean>
|
||||
<Chinese>模擬每發子彈的槍口初速都略有不同</Chinese>
|
||||
<Chinesesimp>模拟每发子弹的枪口初速都略有不同</Chinesesimp>
|
||||
<French>Simule les légères variations</French>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Ballistics_ammoTemperatureEnabled_DisplayName">
|
||||
<English>Enable Ammo Temperature Simulation</English>
|
||||
@ -266,7 +272,7 @@
|
||||
<Russian>Этот модуль включает симуляцию продвинутой баллистики - при этом на траекторию полета снаряда влияют различные параметры, такие как температура воздуха, атмосферное давление, влажность, гравитация, тип боеприпаса и оружия, из которого произвели выстрел.</Russian>
|
||||
<Spanish>Este módulo permite la simulación balística avanzada - es decir, la trayectoria de los proyectiles está influenciada por variables como la temperatura del aire, la presión atmosférica, la humedad, la gravedad, el tipo de municiones y el arma desde el que fue disparada.</Spanish>
|
||||
<Italian>Questo modulo abilita la simulazione della Balistica Avanzata - cioè la traiettoria dei proiettili è influenzata da variabili come la temperatura dell'aria, pressione atmosferica, umidità, gravità, il tipo di munizione e l'arma da cui è sparata</Italian>
|
||||
<Japanese>このモジュールはアドバンスド バリスティックスを有効化します。弾道は気温や気圧、湿度、重力、弾薬の種類、発射する武器から影響を受けるようになります。</Japanese>
|
||||
<Japanese>アドバンスド バリスティックスを有効化します。弾道は気温や気圧、湿度、重力、弾薬の種類、発射する武器から影響を受けるようになります。</Japanese>
|
||||
<Korean>이 모듈은 고급 탄도학을 적용시킵니다 - 이는 발사체의 궤적이 기온, 대기압, 습도, 중력, 탄환의 종류와 어느 무기에서 발사되는지에 따라 영향을 받습니다.</Korean>
|
||||
<Chinese>該模塊實現先進的彈道仿真 - 這意味著子彈的軌跡是由空氣溫度、大氣壓力、濕度、重力、彈藥類型以及射擊的武器所影響</Chinese>
|
||||
<Chinesesimp>该模块实现先进的弹道仿真 - 这意味着子弹的轨迹是由空气温度、大气压力、湿度、重力、弹药类型以及射击的武器所影响</Chinesesimp>
|
||||
|
@ -90,12 +90,12 @@ if (_overexhausted) then {
|
||||
|
||||
switch (stance _unit) do {
|
||||
case ("CROUCH"): {
|
||||
_unit setCustomAimCoef (1.0 + _fatigue ^ 2 * 0.1);
|
||||
[_unit, QUOTE(ADDON), (1.0 + _fatigue ^ 2 * 0.1) * GVAR(swayFactor)] call EFUNC(common,setAimCoef);
|
||||
};
|
||||
case ("PRONE"): {
|
||||
_unit setCustomAimCoef (1.0 + _fatigue ^ 2 * 2.0);
|
||||
[_unit, QUOTE(ADDON), (1.0 + _fatigue ^ 2 * 2.0) * GVAR(swayFactor)] call EFUNC(common,setAimCoef);
|
||||
};
|
||||
default {
|
||||
_unit setCustomAimCoef (1.5 + _fatigue ^ 2 * 3.0);
|
||||
[_unit, QUOTE(ADDON), (1.5 + _fatigue ^ 2 * 3.0) * GVAR(swayFactor)] call EFUNC(common,setAimCoef);
|
||||
};
|
||||
};
|
||||
|
@ -57,3 +57,12 @@
|
||||
[0, 2, 1, 1],
|
||||
true
|
||||
] call CBA_Settings_fnc_init;
|
||||
|
||||
[
|
||||
QGVAR(swayFactor),
|
||||
"SLIDER",
|
||||
[LSTRING(SwayFactor), LSTRING(SwayFactor_Description)],
|
||||
"ACE3 Advanced Fatigue",
|
||||
[0, 2, 1, 1],
|
||||
true
|
||||
] call CBA_Settings_fnc_init;
|
||||
|
@ -35,7 +35,7 @@
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_PerformanceFactor_EdenDescription">
|
||||
<English>Influences the overall performance of this unit. Higher means better.</English>
|
||||
<German>Beinflusst die Leistungsfähigkeit dieser Einheit. Ein höherer Wert bedeutet bessere Leistung.</German>
|
||||
<Japanese>このユニットの全体的な動作に影響させます。高いほど良い効果があります。</Japanese>
|
||||
<Japanese>ユニットの全体的な動作に影響させます。高いほど良い効果があります。</Japanese>
|
||||
<Polish>Wpływa na ogólną wydolność tej jednostki. Więcej znaczy lepiej.</Polish>
|
||||
<Korean>모든 성능이 이 단위로 영향을 받습니다. 값이 클수록 더 나은 성능을 발휘합니다</Korean>
|
||||
<French>Influence les performances générales de cette unité. Une valeur plus élevée implique de meilleures performances.</French>
|
||||
@ -101,7 +101,7 @@
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_TerrainGradientFactor_Description">
|
||||
<English>Sets how much steep terrain increases stamina loss. Higher means higher stamina loss.</English>
|
||||
<German>Beeinflusst, wie stark Steigungen den Ausdauerverbrauch erhöhen. Ein höherer Wert erhöht den Ausdauerverbrauch.</German>
|
||||
<Japanese>地形によって影響する体力の消費量を決定します。高数値ではより体力を消費します。</Japanese>
|
||||
<Japanese>地形によって体力の消費量を決定します。高数値ではより体力を消費します。</Japanese>
|
||||
<Polish>Wpływa na to w jakim stopniu stromy teren wpływa na utratę wytrzymałości. Więcej oznacza szybszą utratę wytrzymałości.</Polish>
|
||||
<Korean>경사도에 따라 얼마나 피로해지는지를 정합니다. 값이 클수록 더 많은 피로를 유발합니다.</Korean>
|
||||
<French>Configure l'influence de l'inclinaison du terrain sur la perte d'endurance. Une valeur plus élevée implique une perte d'endurance plus importante.</French>
|
||||
@ -109,6 +109,12 @@
|
||||
<Chinese>設定陡峭的地形將會影響多少體力的流失,值越高代表體力流失越快</Chinese>
|
||||
<Chinesesimp>设定陡峭的地形将会影响多少体力的流,失值越高代表体力流失越快</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_SwayFactor">
|
||||
<English>Sway factor</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_SwayFactor_Description">
|
||||
<English>Influences the amount of weapon sway. Higher means more sway.</English>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Advanced_Fatigue_Enabled">
|
||||
<English>Enabled</English>
|
||||
<German>Aktiv</German>
|
||||
|
@ -7,50 +7,75 @@
|
||||
{
|
||||
if (_bool) then {
|
||||
_x enableAI _section;
|
||||
LOG_3("%1 enableAI %2 | ID: %3",_x,_section,clientOwner);
|
||||
} else {
|
||||
_x disableAI _section;
|
||||
LOG_3("%1 disableAI %2 | ID: %3",_x,_section,clientOwner);
|
||||
};
|
||||
LOG(format [ARR_4("XEH_postInit: %1 disableAI %2 | ID %3", _x, _section, clientOwner)]);
|
||||
} foreach (_units select {local _x});
|
||||
} foreach _sections
|
||||
} forEach (_units select {local _x});
|
||||
} forEach _sections;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(unGarrison), FUNC(unGarrison)] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(doMove), {
|
||||
params ["_unitsArray"];
|
||||
{
|
||||
_x params ["_unit", "_pos"];
|
||||
//_unit doFollow leader _unit;
|
||||
_unit setDestination [_pos, "LEADER PLANNED", true];
|
||||
_unit doMove _pos;
|
||||
LOG(format [ARR_4("XEH_postInit: %1 doMove %2 | ID %3", _unit, _pos, clientOwner)]);
|
||||
} foreach _unitsArray
|
||||
LOG_3("%1 doMove %2 | ID: %3",_unit,_pos,clientOwner);
|
||||
} forEach _unitsArray;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(setBehaviour), {
|
||||
params ["_groupsArray", "_behaviour"];
|
||||
{
|
||||
_x params ["_group"];
|
||||
_group setBehaviour _behaviour;
|
||||
LOG(format [ARR_4("XEH_postInit: %1 setBehaviour %2 | ID %3", _group, _behaviour, clientOwner)]);
|
||||
} foreach _groupsArray
|
||||
_x setBehaviour _behaviour;
|
||||
LOG_3("%1 setBehaviour %2 | ID: %3",_x,_behaviour,clientOwner);
|
||||
} forEach _groupsArray;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(enableAttack), {
|
||||
params ["_unitsArray", "_mode"];
|
||||
{
|
||||
_x params ["_unit"];
|
||||
_unit enableAttack _mode;
|
||||
LOG(format [ARR_4("XEH_postInit: %1 enableAttack %2 | ID %3", _unit, _mode, clientOwner)]);
|
||||
} foreach _unitsArray
|
||||
_x enableAttack _mode;
|
||||
LOG_3("%1 enableAttack %2 | ID: %3",_x,_mode,clientOwner);
|
||||
} forEach _unitsArray;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(setUnitPos), {
|
||||
params ["_unit", "_mode"];
|
||||
_unit setUnitPos _mode;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(setSpeedMode), {
|
||||
params ["_unit", "_mode"];
|
||||
_unit setSpeedMode _mode;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(setCombatMode), {
|
||||
params ["_unit", "_mode"];
|
||||
_unit setCombatMode _mode;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(allowFleeing), {
|
||||
params ["_unit", "_cowardice"];
|
||||
_unit allowFleeing _cowardice;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(enableGunLights), {
|
||||
params ["_unit", "_mode"];
|
||||
_unit enableGunLights _mode;
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
#ifdef DEBUG_MODE_FULL
|
||||
addMissionEventHandler ["Draw3D", {
|
||||
private _unitMoveList = missionNameSpace getVariable [QGVAR(garrison_unitMoveList), []];
|
||||
|
||||
{
|
||||
_x params ["_unit", "_pos"];
|
||||
|
||||
switch true do {
|
||||
switch (true) do {
|
||||
case (surfaceIsWater (getPos _unit) && {surfaceIsWater _pos}) : {
|
||||
for "_i" from 0 to 3 do {
|
||||
drawLine3D [_unit modelToWorldVisualWorld [0,0,1], (AGLtoASL _pos), [1,0,0,1]];
|
||||
@ -79,6 +104,6 @@
|
||||
drawIcon3D ["\a3\ui_f\data\map\groupicons\waypoint.paa", [1,0,0,1], _pos, 0.75, 0.75, 0.75];
|
||||
};
|
||||
};
|
||||
} foreach _unitMoveList;
|
||||
} forEach _unitMoveList;
|
||||
}];
|
||||
#endif
|
@ -2,8 +2,8 @@
|
||||
#define COMPONENT_BEAUTIFIED AI
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
//#define DEBUG_MODE_FULL
|
||||
//#define DISABLE_COMPILE_CACHE
|
||||
// #define DEBUG_MODE_FULL
|
||||
// #define DISABLE_COMPILE_CACHE
|
||||
// #define ENABLE_PERFORMANCE_COUNTERS
|
||||
|
||||
#ifdef DEBUG_ENABLED_AI
|
||||
|
104
addons/arsenal/ACE_Arsenal_Stats.hpp
Normal file
104
addons/arsenal/ACE_Arsenal_Stats.hpp
Normal file
@ -0,0 +1,104 @@
|
||||
class GVAR(stats) {
|
||||
class statBase {
|
||||
scope = 1;
|
||||
priority = 0;
|
||||
stats[] = {};
|
||||
displayName = "";
|
||||
showBar = 0;
|
||||
showText = 0;
|
||||
barStatement = "";
|
||||
textStatement = "";
|
||||
condition = "true";
|
||||
tabs[] = {{}, {}};
|
||||
};
|
||||
class ACE_bananaPotassium: statBase {
|
||||
scope = 2;
|
||||
displayName= CSTRING(statPotassium);
|
||||
showBar = 1;
|
||||
barStatement = "1";
|
||||
condition = QUOTE((configName (_this select 1)) == 'ACE_Banana');
|
||||
tabs[] = {{}, {7}};
|
||||
};
|
||||
class ACE_mass: statBase {
|
||||
scope = 2;
|
||||
displayName= "$STR_a3_rscdisplayarsenal_stat_weight";
|
||||
showText = 1;
|
||||
textStatement = QUOTE([ARR_2(_this select 0, _this select 1)] call FUNC(statTextStatement_mass));
|
||||
tabs[] = {{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14}, {0,1,2,3,4,5,6,7}};
|
||||
};
|
||||
class ACE_rateOfFire: statBase {
|
||||
scope = 2;
|
||||
priority = 5;
|
||||
stats[] = {"reloadTime"};
|
||||
displayName= "$STR_a3_rscdisplayarsenal_stat_rof";
|
||||
showBar = 1;
|
||||
showText = 1;
|
||||
barStatement = QUOTE([ARR_3((_this select 0) select 0, _this select 1, [ARR_3([ARR_2(-1.4, 0.31)], [ARR_2(1, 0.01)], true)])] call FUNC(statBarStatement_default));
|
||||
textStatement = QUOTE([ARR_3((_this select 0) select 0, _this select 1, [ARR_2([ARR_2(-1.4, 0.31)], false)])] call FUNC(statTextStatement_rateOfFire));
|
||||
tabs[] = {{0,1}, {}};
|
||||
};
|
||||
class ACE_accuracy: statBase {
|
||||
scope = 2;
|
||||
priority = 4;
|
||||
stats[] = {"dispersion"};
|
||||
displayName = "$STR_a3_rscdisplayarsenal_stat_dispersion";
|
||||
showBar = 1;
|
||||
showText = 1;
|
||||
barStatement = QUOTE([ARR_3((_this select 0) select 0, _this select 1, [ARR_3([ARR_2(-4, -1.7)], [ARR_2(1, 0.01)], true)])] call FUNC(statBarStatement_default));
|
||||
textStatement = QUOTE([ARR_3((_this select 0) select 0, _this select 1, [ARR_2([ARR_2(-4, -1.7)], false)])] call FUNC(statTextStatement_accuracy));
|
||||
tabs[] = {{0,1}, {}};
|
||||
};
|
||||
class ACE_maxZeroing: statBase {
|
||||
scope = 2;
|
||||
priority = 3;
|
||||
stats[] = {"maxZeroing"};
|
||||
displayName = "$STR_a3_rscdisplayarsenal_stat_range";
|
||||
showBar = 1;
|
||||
barStatement = QUOTE([ARR_3((_this select 0) select 0, _this select 1, [ARR_3([ARR_2(0, 2500)], [ARR_2(0.01, 1)], false)])] call FUNC(statBarStatement_default));
|
||||
tabs[] = {{0,1,2}, {}};
|
||||
};
|
||||
class ACE_impact: statBase {
|
||||
scope = 2;
|
||||
priority = 2;
|
||||
stats[] = {"hit", "initSpeed"};
|
||||
displayName = "$STR_a3_rscdisplayarsenal_stat_impact";
|
||||
showBar = 1;
|
||||
barStatement = QUOTE([ARR_3(_this select 0, _this select 1, [ARR_3([ARR_2(0, 3.2)], [ARR_2(-1, 1100)], 2006)])] call FUNC(statBarStatement_impact));
|
||||
tabs[] = {{0,1,2}, {}};
|
||||
};
|
||||
class ACE_scopeMagnification: statBase {
|
||||
scope = 2;
|
||||
priority = 2;
|
||||
displayName = CSTRING(statMagnification);
|
||||
showText = 1;
|
||||
textStatement = QUOTE(call FUNC(statTextStatement_scopeMag));
|
||||
tabs[] = {{}, {0}};
|
||||
};
|
||||
class ACE_ballisticProtection: statBase {
|
||||
scope = 2;
|
||||
priority = 5;
|
||||
stats[] = {"passthrough"};
|
||||
displayName = "$STR_a3_rscdisplayarsenal_stat_passthrough";
|
||||
showBar = 1;
|
||||
barStatement = QUOTE([ARR_3((_this select 0) select 0, _this select 1, [ARR_3([ARR_2(0, 0.63)], [ARR_2(0.01, 1)], false)])] call FUNC(statBarStatement_default));
|
||||
tabs[] = {{3,4,6}, {}};
|
||||
};
|
||||
class ACE_explosiveResistance: statBase {
|
||||
scope = 2;
|
||||
priority = 4;
|
||||
stats[] = {"armor"};
|
||||
displayName = "$STR_a3_rscdisplayarsenal_stat_armor";
|
||||
showBar = 1;
|
||||
barStatement = QUOTE([ARR_3((_this select 0) select 0, _this select 1, [ARR_3([ARR_2(0, 0.80)], [ARR_2(0.01, 1)], false)])] call FUNC(statBarStatement_default));
|
||||
tabs[] = {{3,4,6}, {}};
|
||||
};
|
||||
class ACE_load: statBase {
|
||||
scope = 2;
|
||||
priority = 3;
|
||||
stats[] = {"maximumLoad"};
|
||||
displayName = "$STR_a3_rscdisplayarsenal_stat_load";
|
||||
showBar = 1;
|
||||
barStatement = QUOTE([ARR_3((_this select 0) select 0, _this select 1, [ARR_3([ARR_2(0, 500)], [ARR_2(0.01, 1)], false)])] call FUNC(statBarStatement_default));
|
||||
tabs[] = {{3,4,5}, {}};
|
||||
};
|
||||
};
|
@ -1,4 +1,5 @@
|
||||
PREP(addListBoxItem);
|
||||
PREP(addStat);
|
||||
PREP(addVirtualItems);
|
||||
PREP(buttonCargo);
|
||||
PREP(buttonClearAll);
|
||||
@ -10,7 +11,10 @@ PREP(buttonLoadoutsLoad);
|
||||
PREP(buttonLoadoutsRename);
|
||||
PREP(buttonLoadoutsSave);
|
||||
PREP(buttonLoadoutsShare);
|
||||
PREP(buttonStats);
|
||||
PREP(buttonStatsPage);
|
||||
PREP(clearSearchbar);
|
||||
PREP(compileStats);
|
||||
PREP(fillLeftPanel);
|
||||
PREP(fillLoadoutsList);
|
||||
PREP(fillRightPanel);
|
||||
@ -18,6 +22,7 @@ PREP(handleLoadoutsSearchbar);
|
||||
PREP(handleMouse);
|
||||
PREP(handleScrollWheel);
|
||||
PREP(handleSearchbar);
|
||||
PREP(handleStats);
|
||||
PREP(initBox);
|
||||
PREP(itemInfo);
|
||||
PREP(loadoutsChangeTab);
|
||||
@ -37,10 +42,17 @@ PREP(open3DEN);
|
||||
PREP(openBox);
|
||||
PREP(portVALoadouts);
|
||||
PREP(removeBox);
|
||||
PREP(removeStat);
|
||||
PREP(removeVirtualItems);
|
||||
PREP(scanConfig);
|
||||
PREP(showItem);
|
||||
PREP(sortPanel);
|
||||
PREP(statBarStatement_default);
|
||||
PREP(statBarStatement_impact);
|
||||
PREP(statTextStatement_accuracy);
|
||||
PREP(statTextStatement_mass);
|
||||
PREP(statTextStatement_rateOfFire);
|
||||
PREP(statTextStatement_scopeMag);
|
||||
PREP(updateCamPos);
|
||||
PREP(updateRightPanel);
|
||||
PREP(updateUniqueItemsList);
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "script_component.hpp"
|
||||
#include "defines.hpp"
|
||||
|
||||
ADDON = false;
|
||||
|
||||
@ -12,10 +13,51 @@ GVAR(modList) = ["","curator","kart","heli","mark","expansion","expansionpremium
|
||||
[QGVAR(camInverted), "CHECKBOX", localize LSTRING(invertCameraSetting), localize LSTRING(settingCategory), false] call CBA_Settings_fnc_init;
|
||||
[QGVAR(enableModIcons), "CHECKBOX", [LSTRING(modIconsSetting), LSTRING(modIconsTooltip)], localize LSTRING(settingCategory), true] call CBA_Settings_fnc_init;
|
||||
[QGVAR(fontHeight), "SLIDER", [LSTRING(fontHeightSetting), LSTRING(fontHeightTooltip)], localize LSTRING(settingCategory), [1, 10, 4.5, 1]] call CBA_Settings_fnc_init;
|
||||
[QGVAR(enableIdentityTabs), "CHECKBOX", localize LSTRING(enableIdentityTabsSettings), localize LSTRING(settingCategory), true, true] call CBA_Settings_fnc_init;
|
||||
|
||||
|
||||
// Arsenal loadouts
|
||||
[QGVAR(allowDefaultLoadouts), "CHECKBOX", [LSTRING(allowDefaultLoadoutsSetting), LSTRING(defaultLoadoutsTooltip)], localize LSTRING(settingCategory), true, true] call CBA_Settings_fnc_init;
|
||||
[QGVAR(allowSharedLoadouts), "CHECKBOX", localize LSTRING(allowSharingSetting), localize LSTRING(settingCategory), true, true] call CBA_Settings_fnc_init;
|
||||
[QGVAR(EnableRPTLog), "CHECKBOX", [LSTRING(printToRPTSetting), LSTRING(printToRPTTooltip)], localize LSTRING(settingCategory), false, false] call CBA_Settings_fnc_init;
|
||||
|
||||
[QGVAR(statsToggle), {
|
||||
params ["_display", "_showStats"];
|
||||
|
||||
private _statsCtrlGroupCtrl = _display displayCtrl IDC_statsBox;
|
||||
private _statsPreviousPageCtrl = _display displayCtrl IDC_statsPreviousPage;
|
||||
private _statsNextPageCtrl = _display displayCtrl IDC_statsNextPage;
|
||||
private _statsCurrentPageCtrl = _display displayCtrl IDC_statsCurrentPage;
|
||||
|
||||
private _statsButtonCtrl = _display displayCtrl IDC_statsButton;
|
||||
private _statsButtonCloseCtrl = _display displayCtrl IDC_statsButtonClose;
|
||||
|
||||
{
|
||||
_x ctrlShow (GVAR(showStats) && {_showStats});
|
||||
} forEach [
|
||||
_statsCtrlGroupCtrl,
|
||||
_statsPreviousPageCtrl,
|
||||
_statsNextPageCtrl,
|
||||
_statsCurrentPageCtrl,
|
||||
_statsButtonCloseCtrl
|
||||
];
|
||||
|
||||
_statsButtonCtrl ctrlShow (!GVAR(showStats) && {_showStats})
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(statsButton), {
|
||||
_this call FUNC(buttonStats);
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
[QGVAR(statsChangePage), {
|
||||
_this call FUNC(buttonStatsPage);
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
|
||||
[QGVAR(displayStats), {
|
||||
_this call FUNC(handleStats);
|
||||
}] call CBA_fnc_addEventHandler;
|
||||
|
||||
call FUNC(compileStats);
|
||||
|
||||
ADDON = true;
|
||||
|
@ -39,3 +39,4 @@ class Cfg3DEN {
|
||||
#include "ui\RscAttributes.hpp"
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "RscDisplayMain.hpp"
|
||||
#include "ACE_Arsenal_Stats.hpp"
|
||||
|
@ -104,6 +104,32 @@
|
||||
#define IDC_buttonMisc 38
|
||||
#define IDC_buttonRemoveAllSelected 39
|
||||
#define IDC_buttonRemoveAll 40
|
||||
#define IDC_statsBox 51
|
||||
#define IDC_statsTitle1 5101
|
||||
#define IDC_statsBackground1 5102
|
||||
#define IDC_statsBar1 5103
|
||||
#define IDC_statsText1 5104
|
||||
#define IDC_statsTitle2 5105
|
||||
#define IDC_statsBackground2 5106
|
||||
#define IDC_statsBar2 5107
|
||||
#define IDC_statsText2 5108
|
||||
#define IDC_statsTitle3 5109
|
||||
#define IDC_statsBackground3 5110
|
||||
#define IDC_statsBar3 5111
|
||||
#define IDC_statsText3 5112
|
||||
#define IDC_statsTitle4 5113
|
||||
#define IDC_statsBackground4 5114
|
||||
#define IDC_statsBar4 5115
|
||||
#define IDC_statsText4 5116
|
||||
#define IDC_statsTitle5 5117
|
||||
#define IDC_statsBackground5 5118
|
||||
#define IDC_statsBar5 5119
|
||||
#define IDC_statsText5 5120
|
||||
#define IDC_statsPreviousPage 52
|
||||
#define IDC_statsNextPage 53
|
||||
#define IDC_statsCurrentPage 54
|
||||
#define IDC_statsButton 55
|
||||
#define IDC_statsButtonClose 56
|
||||
|
||||
#define IDD_loadouts_display 1127002
|
||||
#define IDC_centerBox 3
|
||||
@ -200,6 +226,21 @@ _buttonCurrentMag2Ctrl ctrlCommit FADE_DELAY;\
|
||||
IDC_rightTabContentListnBox,\
|
||||
RIGHT_PANEL_ITEMS_BACKGROUND_IDCS,\
|
||||
IDC_buttonRemoveAll\
|
||||
];\
|
||||
{\
|
||||
_x = _display displayCtrl _x;\
|
||||
_x ctrlSetPosition [\
|
||||
safezoneX + safezoneW - 93 * GRID_W,\
|
||||
safezoneY + 14 * GRID_H,\
|
||||
80 * GRID_W,\
|
||||
safezoneH - 28 * GRID_H\
|
||||
];\
|
||||
_x ctrlCommit 0;\
|
||||
} foreach [\
|
||||
IDC_rightTabContent,\
|
||||
IDC_rightTabContentListnBox,\
|
||||
IDC_blockRightFrame,\
|
||||
IDC_blockRighttBackground\
|
||||
];
|
||||
|
||||
#define TOGGLE_RIGHT_PANEL_CONTAINER\
|
||||
@ -232,6 +273,21 @@ _buttonCurrentMag2Ctrl ctrlCommit FADE_DELAY;\
|
||||
IDC_buttonCurrentMag2,\
|
||||
IDC_iconBackgroundCurrentMag,\
|
||||
IDC_iconBackgroundCurrentMag2\
|
||||
];\
|
||||
{\
|
||||
_x = _display displayCtrl _x;\
|
||||
_x ctrlSetPosition [\
|
||||
safezoneX + safezoneW - 93 * GRID_W,\
|
||||
safezoneY + 14 * GRID_H,\
|
||||
80 * GRID_W,\
|
||||
safezoneH - 34 * GRID_H\
|
||||
];\
|
||||
_x ctrlCommit 0;\
|
||||
} foreach [\
|
||||
IDC_rightTabContent,\
|
||||
IDC_rightTabContentListnBox,\
|
||||
IDC_blockRightFrame,\
|
||||
IDC_blockRighttBackground\
|
||||
];
|
||||
|
||||
#define TOGGLE_RIGHT_PANEL_HIDE\
|
||||
@ -283,27 +339,27 @@ _buttonCurrentMag2Ctrl ctrlCommit FADE_DELAY;\
|
||||
]
|
||||
|
||||
#define CHECK_WEAPON_OR_ACC\
|
||||
_item in (_weaponsArray select 0) ||\
|
||||
{_item in (_weaponsArray select 1)} ||\
|
||||
{_item in (_weaponsArray select 2)} ||\
|
||||
{_item in (GVAR(virtualItems) select 9)} ||\
|
||||
{_item in (_accsArray select 0)} ||\
|
||||
{_item in (_accsArray select 1)} ||\
|
||||
{_item in (_accsArray select 2)} ||\
|
||||
{_item in (_accsArray select 3)}
|
||||
(_weaponsArray select 0) findIf {_x == _item} > -1 ||\
|
||||
{(_weaponsArray select 1) findIf {_x == _item} > -1} ||\
|
||||
{(_weaponsArray select 2) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 9) findIf {_x == _item} > -1} ||\
|
||||
{(_accsArray select 0) findIf {_x == _item} > -1} ||\
|
||||
{(_accsArray select 1 findIf {_x == _item} > -1)} ||\
|
||||
{(_accsArray select 2) findIf {_x == _item} > -1} ||\
|
||||
{(_accsArray select 3) findIf {_x == _item} > -1}
|
||||
|
||||
#define CHECK_ASSIGNED_ITEMS\
|
||||
_item in (GVAR(virtualItems) select 10) ||\
|
||||
{_item in (GVAR(virtualItems) select 11)} ||\
|
||||
{_item in (GVAR(virtualItems) select 12)} ||\
|
||||
{_item in (GVAR(virtualItems) select 13)} ||\
|
||||
{_item in (GVAR(virtualItems) select 14)} ||\
|
||||
{_item in (GVAR(virtualItems) select 8)}
|
||||
(GVAR(virtualItems) select 10) findIf {_x == _item} > -1 ||\
|
||||
{(GVAR(virtualItems) select 11) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 12) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 13) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 14) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 8) findIf {_x == _item} > -1}
|
||||
|
||||
#define CHECK_CONTAINER\
|
||||
_item in (GVAR(virtualItems) select 4) ||\
|
||||
{_item in (GVAR(virtualItems) select 5)} ||\
|
||||
{_item in (GVAR(virtualItems) select 6)}
|
||||
(GVAR(virtualItems) select 4) findIf {_x == _item} > -1 ||\
|
||||
{(GVAR(virtualItems) select 5) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 6) findIf {_x == _item} > -1}
|
||||
|
||||
#define CLASS_CHECK_ITEM\
|
||||
isClass (_weaponCfg >> _item) ||\
|
||||
@ -312,24 +368,24 @@ _buttonCurrentMag2Ctrl ctrlCommit FADE_DELAY;\
|
||||
{isClass (_magCfg >> _item)}
|
||||
|
||||
#define CHECK_CONTAINER_ITEMS\
|
||||
_item in (GVAR(virtualItems) select 3) ||\
|
||||
{_item in (_accsArray select 0)} ||\
|
||||
{_item in (_accsArray select 1)} ||\
|
||||
{_item in (_accsArray select 2)} ||\
|
||||
{_item in (_accsArray select 3)} ||\
|
||||
{_item in (GVAR(virtualItems) select 4)} ||\
|
||||
{_item in (GVAR(virtualItems) select 5)} ||\
|
||||
{_item in (GVAR(virtualItems) select 6)} ||\
|
||||
{_item in (GVAR(virtualItems) select 7)} ||\
|
||||
{_item in (GVAR(virtualItems) select 8)} ||\
|
||||
{_item in (GVAR(virtualItems) select 10)} ||\
|
||||
{_item in (GVAR(virtualItems) select 11)} ||\
|
||||
{_item in (GVAR(virtualItems) select 12)} ||\
|
||||
{_item in (GVAR(virtualItems) select 13)} ||\
|
||||
{_item in (GVAR(virtualItems) select 14)} ||\
|
||||
{_item in (GVAR(virtualItems) select 15)} ||\
|
||||
{_item in (GVAR(virtualItems) select 16)} ||\
|
||||
{_item in (GVAR(virtualItems) select 17)}
|
||||
(GVAR(virtualItems) select 3) findIf {_x == _item} > -1 ||\
|
||||
{(_accsArray select 0) findIf {_x == _item} > -1} ||\
|
||||
{(_accsArray select 1) findIf {_x == _item} > -1} ||\
|
||||
{(_accsArray select 2) findIf {_x == _item} > -1} ||\
|
||||
{(_accsArray select 3) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 4) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 5) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 6) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 7) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 8) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 10) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 11) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 12) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 13) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 14) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 15) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 16) findIf {_x == _item} > -1} ||\
|
||||
{(GVAR(virtualItems) select 17) findIf {_x == _item} > -1}
|
||||
|
||||
#define ADD_LOADOUTS_LIST_PICTURES\
|
||||
_contentPanelCtrl lnbSetPicture [[_newRow, 2], getText (configFile >> "cfgWeapons" >> ((_loadout select 0) select 0) >> "picture")];\
|
||||
|
99
addons/arsenal/functions/fnc_addStat.sqf
Normal file
99
addons/arsenal/functions/fnc_addStat.sqf
Normal file
@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Add a stat to ACE Arsenal.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Tabs to add the stat to (ARRAY of ARRAYS)
|
||||
* 0.1: Left tab indexes (ARRAY of NUMBERS)
|
||||
* 0.2 Right tab indexes (ARRAY of NUMBERS)
|
||||
* 1: Stat class (STRING) (A unique string for each stat)
|
||||
* 2: Config entries to pass (ARRAY of STRINGS)
|
||||
* 3: Title (STRING)
|
||||
* 4: Show bar / show text bools (ARRAY of BOOLS)
|
||||
* 4.1 Show bar (BOOL)
|
||||
* 4.2 Show text (BOOL)
|
||||
* 5: Array of statements (ARRAY of ARRAYS)
|
||||
* 5.1: Bar code (CODE)
|
||||
* 5.2 Text code (CODE)
|
||||
* 5.3 Condition code (CODE)
|
||||
* 6: Priority (NUMBER) (Optional)
|
||||
*
|
||||
* Return Value:
|
||||
* 0: Array of IDs (ARRAY of STRINGS)
|
||||
*
|
||||
* Example:
|
||||
* [[[0,1,2], [7]], "scopeStat", ["scope"], "Scope", [false, true], [{}, {
|
||||
params ["_statsArray", "_itemCfg"];
|
||||
getNumber (_itemCfg >> _statsArray select 0)
|
||||
}, {true}]] call ACE_arsenal_fnc_addStat
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
params [
|
||||
["_tabs", [[], []], [[]], 2],
|
||||
["_class", "", [""]],
|
||||
["_stats", [], [[]]],
|
||||
["_title", "", [""]],
|
||||
["_bools", [false, false], [[]], 2],
|
||||
["_statements", [{}, {}, {true}], [[]], 3],
|
||||
["_priority", 0, [0]]
|
||||
];
|
||||
|
||||
_tabs params [
|
||||
["_leftTabs", [], [[]]],
|
||||
["_rightTabs", [], [[]]]
|
||||
];
|
||||
|
||||
_bools params [["_showBar", false, [false]], ["_showText", false, [false]]];
|
||||
|
||||
_statements params [
|
||||
["_barStatement", {}, [{}]],
|
||||
["_textStatement", {}, [{}]],
|
||||
["_condition", {true}, [{}]]
|
||||
];
|
||||
|
||||
call FUNC(compileStats);
|
||||
|
||||
private _returnArray = [];
|
||||
|
||||
private _fnc_addToTabs = {
|
||||
params ["_tabsList", "_tabsToAddTo", "_sideString", "_returnIndex"];
|
||||
{
|
||||
private _currentTab = _tabsList select _x;
|
||||
|
||||
private _finalID = [_class, _sideString, [str _x, format ["0%1", _x]] select (_x < 10)] joinString "";
|
||||
|
||||
if ({{_x select 0 == _finalID} count _x > 0} count _currentTab > 0) then {
|
||||
TRACE_1("A stat with this ID already exists", _finalID);
|
||||
} else {
|
||||
|
||||
private _arrayToSave = +_finalArray;
|
||||
_arrayToSave set [0, _finalID];
|
||||
_returnArray pushBack _finalID;
|
||||
|
||||
// Add to existing page if there's enough space, otherwise create a new page
|
||||
if ({count _x < 5} count _currentTab > 0) then {
|
||||
{
|
||||
if (count _x < 5) exitWith {
|
||||
(_currentTab select _forEachIndex) append [_arrayToSave];
|
||||
};
|
||||
} foreach _currentTab;
|
||||
} else {
|
||||
_currentTab pushBack [_arrayToSave];
|
||||
};
|
||||
};
|
||||
} foreach _tabsToAddTo;
|
||||
};
|
||||
|
||||
private _finalArray = ["", _stats, _title, [_showBar, _showText], [_barStatement, _textStatement, _condition], _priority];
|
||||
|
||||
if (count _leftTabs > 0) then {
|
||||
[GVAR(statsListLeftPanel), _leftTabs, "L", 0] call _fnc_addToTabs;
|
||||
};
|
||||
|
||||
if (count _rightTabs > 0) then {
|
||||
[GVAR(statsListRightPanel), _rightTabs, "R", 1] call _fnc_addToTabs;
|
||||
};
|
||||
|
||||
_returnArray
|
@ -49,3 +49,5 @@ if (GVAR(shiftState)) then {
|
||||
|
||||
[_display, localize LSTRING(exportCurrent)] call FUNC(message);
|
||||
};
|
||||
|
||||
[QGVAR(loadoutExported), [_display, GVAR(shiftState)]] call CBA_fnc_localEvent;
|
||||
|
@ -48,5 +48,12 @@ private _showToggle = !ctrlShown (_display displayCtrl IDC_menuBar);
|
||||
IDC_buttonCurrentMag,
|
||||
IDC_buttonCurrentMag2,
|
||||
IDC_iconBackgroundCurrentMag,
|
||||
IDC_iconBackgroundCurrentMag2
|
||||
IDC_iconBackgroundCurrentMag2,
|
||||
IDC_statsButton,
|
||||
IDC_statsPreviousPage,
|
||||
IDC_statsNextPage,
|
||||
IDC_statsCurrentPage,
|
||||
IDC_statsButtonClose
|
||||
];
|
||||
|
||||
[QGVAR(statsToggle), [_display, _showToggle]] call CBA_fnc_localEvent;
|
||||
|
@ -109,3 +109,5 @@ if (GVAR(shiftState) && {is3DEN}) then {
|
||||
[_display, localize LSTRING(importedCurrent)] call FUNC(message);
|
||||
};
|
||||
};
|
||||
|
||||
[QGVAR(loadoutImported), [_display, (GVAR(shiftState) && {is3DEN})]] call CBA_fnc_localEvent;
|
||||
|
@ -88,3 +88,5 @@ call FUNC(updateUniqueItemsList);
|
||||
[GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia;
|
||||
|
||||
[(findDisplay IDD_ace_arsenal), [localize LSTRING(loadoutLoaded), _loadoutName] joinString " "] call FUNC(message);
|
||||
|
||||
[QGVAR(onLoadoutLoad), [_loadout, _loadoutName]] call CBA_fnc_localEvent;
|
||||
|
31
addons/arsenal/functions/fnc_buttonStats.sqf
Normal file
31
addons/arsenal/functions/fnc_buttonStats.sqf
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Toggle the stats control group
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Button control <CONTROL>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display"];
|
||||
|
||||
(_display displayCtrl IDC_statsButton) ctrlShow GVAR(showStats);
|
||||
GVAR(showStats) = !GVAR(showStats);
|
||||
|
||||
{
|
||||
(_display displayCtrl _x) ctrlShow GVAR(showStats);
|
||||
} foreach [
|
||||
IDC_statsBox,
|
||||
IDC_statsPreviousPage,
|
||||
IDC_statsNextPage,
|
||||
IDC_statsCurrentPage,
|
||||
IDC_statsButtonClose
|
||||
];
|
||||
|
29
addons/arsenal/functions/fnc_buttonStatsPage.sqf
Normal file
29
addons/arsenal/functions/fnc_buttonStatsPage.sqf
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Handles the previous / next page buttons for stats
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Previous or next <BOOL> (false = previous, true = next)
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control", "_nextPage"];
|
||||
|
||||
TRACE_1("control enabled", ctrlEnabled _control);
|
||||
if !(ctrlEnabled _control) exitWith {};
|
||||
|
||||
GVAR(statsInfo) params ["_isLeftPanel", "_statsIndex", "_panelControl", "_curSel", "_itemCfg"];
|
||||
|
||||
private _pageList = [GVAR(statsPagesRight), GVAR(statsPagesLeft)] select (_isLeftPanel);
|
||||
private _newPageNumber = [(_pageList select _statsIndex) - 1, (_pageList select _statsIndex) + 1] select _nextPage;
|
||||
|
||||
_pageList set [_statsIndex, _newPageNumber];
|
||||
|
||||
[QGVAR(displayStats), [_display, _panelControl, _curSel, _itemCfg]] call CBA_fnc_localEvent;
|
135
addons/arsenal/functions/fnc_compileStats.sqf
Normal file
135
addons/arsenal/functions/fnc_compileStats.sqf
Normal file
@ -0,0 +1,135 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Create the internal stats arrays when needed for the first time
|
||||
*
|
||||
* Arguments:
|
||||
* None
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
if (!isNil QGVAR(statsListLeftPanel)) exitWith {};
|
||||
|
||||
private _fnc_addToTabs = {
|
||||
params ["_tabsList", "_tabsToAddTo", "_sideString"];
|
||||
{
|
||||
private _currentTab = _tabsList select _x;
|
||||
private _availablePagesCount = {count _x < 5} count _currentTab;
|
||||
|
||||
private _arrayToSave = +_finalArray;
|
||||
_arrayToSave set [0, ([_class, _sideString, [str _x, format ["0%1", _x]] select (_x < 10)] joinString "")];
|
||||
|
||||
if (_availablePagesCount > 0) then {
|
||||
|
||||
{
|
||||
if (count _x < 5) exitWith {
|
||||
(_currentTab select _forEachIndex) append [_arrayToSave];
|
||||
};
|
||||
} foreach _currentTab;
|
||||
} else {
|
||||
_currentTab pushBack [_arrayToSave];
|
||||
};
|
||||
} foreach _tabsToAddTo;
|
||||
};
|
||||
|
||||
private _fnc_sortLists = {
|
||||
params ["_tabsList"];
|
||||
|
||||
{
|
||||
private _page = _x;
|
||||
{
|
||||
{
|
||||
reverse _x;
|
||||
} foreach _x;
|
||||
|
||||
_x sort false;
|
||||
|
||||
{
|
||||
reverse _x;
|
||||
} foreach _x;
|
||||
} foreach _page;
|
||||
} foreach _tabsList;
|
||||
};
|
||||
|
||||
private _statsListLeftPanel = [
|
||||
[[]], // Primary 0
|
||||
[[]], // Handgun 1
|
||||
[[]], // Launcher 2
|
||||
[[]], // Uniform 3
|
||||
[[]], // Vests 4
|
||||
[[]], // Backpacks 5
|
||||
[[]], // Headgear 6
|
||||
[[]], // Goggles 7
|
||||
[[]], // NVGs 8
|
||||
[[]], // Binoculars 9
|
||||
[[]], // Map 10
|
||||
[[]], // GPS 11
|
||||
[[]], // Radio 12
|
||||
[[]], // Compass 13
|
||||
[[]] // Watch 14
|
||||
];
|
||||
|
||||
private _statsListRightPanel = [
|
||||
[[]], // Optics 0
|
||||
[[]], // Side accs 1
|
||||
[[]], // Muzzle 2
|
||||
[[]], // Bipod 3
|
||||
[[]], // Mag 4
|
||||
[[]], // Throw 5
|
||||
[[]], // Put 6
|
||||
[[]] // Misc 7
|
||||
];
|
||||
|
||||
//------------------------- Config handling
|
||||
private _configEntries = "(getNumber (_x >> 'scope')) == 2" configClasses (configFile >> QGVAR(stats));
|
||||
|
||||
{
|
||||
private _finalArray = [];
|
||||
|
||||
private _class = configName _x;
|
||||
private _stats = getArray (_x >> "stats");
|
||||
private _displayName = getText (_x >> "displayName");
|
||||
private _showBar = getNumber (_x >> "showBar") == 1;
|
||||
private _showText = getNumber (_x >> "showText") == 1;
|
||||
private _condition = getText (_x >> "condition");
|
||||
private _priority = getNumber (_x >> "priority");
|
||||
(getArray (_x >> "tabs")) params ["_leftTabsList", "_rightTabsList"];
|
||||
|
||||
if (_condition != "") then {
|
||||
_condition = compile _condition;
|
||||
};
|
||||
|
||||
_finalArray = ["", _stats, _displayName, [_showBar, _showText], [{}, {}, _condition], _priority];
|
||||
|
||||
if (_showBar) then {
|
||||
private _barStatement = compile (getText (_x >> "barStatement"));
|
||||
(_finalArray select 4) set [0, _barStatement];
|
||||
};
|
||||
|
||||
if (_showText) then {
|
||||
private _textStatement = compile (getText (_x >> "textStatement"));
|
||||
(_finalArray select 4) set [1, _textStatement];
|
||||
};
|
||||
|
||||
TRACE_3("stats array", _finalArray, _leftTabsList, _rightTabsList);
|
||||
|
||||
if (count _leftTabsList > 0) then {
|
||||
[_statsListLeftPanel, _leftTabsList, "L"] call _fnc_addToTabs;
|
||||
};
|
||||
|
||||
if (count _rightTabsList > 0) then {
|
||||
[_statsListRightPanel, _rightTabsList, "R"] call _fnc_addToTabs;
|
||||
};
|
||||
} foreach _configEntries;
|
||||
|
||||
[_statsListLeftPanel] call _fnc_sortLists;
|
||||
[_statsListRightPanel] call _fnc_sortLists;
|
||||
|
||||
//------------------------- Config Handling
|
||||
|
||||
missionNamespace setVariable [QGVAR(statsListLeftPanel), _statsListLeftPanel];
|
||||
missionNamespace setVariable [QGVAR(statsListRightPanel), _statsListRightPanel];
|
@ -44,11 +44,6 @@ if (count _LMB > 0) then {
|
||||
|
||||
_helperPos set [2,(_helperPos select 2) max ((boundingboxreal GVAR(center) select 0 select 2) + 0.2)];
|
||||
|
||||
//--- Do not let target go below ground
|
||||
private _posZmin = 0.1;
|
||||
private _targetWorldPosZ = (GVAR(center) modeltoworldvisual _helperPos) select 2;
|
||||
if (_targetWorldPosZ < _posZmin) then {_helperPos set [2,(_helperPos select 2) - _targetWorldPosZ + _posZmin];};
|
||||
|
||||
GVAR(cameraPosition) set [3,_helperPos];
|
||||
};
|
||||
|
||||
|
244
addons/arsenal/functions/fnc_handleStats.sqf
Normal file
244
addons/arsenal/functions/fnc_handleStats.sqf
Normal file
@ -0,0 +1,244 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Handles the stats control group
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Arsenal display <DISPLAY>
|
||||
* 1: Current panel control <CONTROL>
|
||||
* 2: Current panel selection <SCALAR>
|
||||
* 3: Item config entry <CONFIG>
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
params ["_display", "_control", "_curSel", "_itemCfg"];
|
||||
|
||||
private _statsBoxCtrl = _display displayCtrl IDC_statsBox;
|
||||
private _statsPreviousPageCtrl = _display displayCtrl IDC_statsPreviousPage;
|
||||
private _statsNextPageCtrl = _display displayCtrl IDC_statsNextPage;
|
||||
private _statsCurrentPageCtrl = _display displayCtrl IDC_statsCurrentPage;
|
||||
|
||||
private _hideUnusedFnc = {
|
||||
params ["_numbers"];
|
||||
|
||||
{
|
||||
private _statsTitleCtrl = _display displayCtrl (5101 + ((_x - 1) * 4));
|
||||
private _statsTitleIDC = ctrlIDC _statsTitleCtrl;
|
||||
|
||||
private _statsBackgroundCtrl = _display displayCtrl (_statsTitleIDC + 1);
|
||||
private _statsBarCtrl = _display displayCtrl (_statsTitleIDC + 2);
|
||||
private _statsTextCtrl = _display displayCtrl (_statsTitleIDC + 3);
|
||||
|
||||
{
|
||||
_x ctrlSetFade 1;
|
||||
_x ctrlCommit 0;
|
||||
} forEach [
|
||||
_statsTitleCtrl,
|
||||
_statsBackgroundCtrl,
|
||||
_statsBarCtrl,
|
||||
_statsTextCtrl
|
||||
];
|
||||
} forEach _numbers;
|
||||
};
|
||||
|
||||
if !(isNil "_itemCfg") then {
|
||||
|
||||
private _handleStatsFnc = {
|
||||
params ["_statsIndex", "_leftPanel"];
|
||||
|
||||
// Get the proper list and page
|
||||
if (_leftPanel) then {
|
||||
[true, (GVAR(statsListLeftPanel)) select _statsIndex, GVAR(statsPagesLeft) select _statsIndex]
|
||||
} else {
|
||||
[false, (GVAR(statsListRightPanel)) select _statsIndex, GVAR(statsPagesRight) select _statsIndex]
|
||||
} params ["_isLeftPanel", "_statsArray", "_currentPage"];
|
||||
|
||||
private _statsList = _statsArray select _currentPage;
|
||||
|
||||
private _statsCount = 0;
|
||||
|
||||
// Handle titles, bars and text
|
||||
_statsList = _statsList select [0, 5];
|
||||
if !(_statsList isEqualTo []) then {
|
||||
{
|
||||
_x params ["_ID", "_configEntry", "_title", "_bools", "_statements"];
|
||||
_bools params ["_showBar", "_showText"];
|
||||
_statements params [["_barStatement", {}, [{}]], ["_textStatement", {}, [{}]], ["_condition", {true}, [{}]]];
|
||||
|
||||
private _statsTitleCtrl = _display displayCtrl (5101 + _forEachIndex * 4);
|
||||
private _statsTitleIDC = ctrlIDC _statsTitleCtrl;
|
||||
private _statsBackgroundCtrl = _display displayCtrl (_statsTitleIDC + 1);
|
||||
private _statsBarCtrl = _display displayCtrl (_statsTitleIDC + 2);
|
||||
private _statsTextCtrl = _display displayCtrl (_statsTitleIDC + 3);
|
||||
|
||||
_statsCount = _statsCount + 1;
|
||||
_statsTitleCtrl ctrlSetText _title;
|
||||
_statsTitleCtrl ctrlSetFade 0;
|
||||
|
||||
// Handle bars
|
||||
if (_showBar) then {
|
||||
_statsBarCtrl progressSetPosition ([_configEntry, _itemCfg] call _barStatement);
|
||||
|
||||
_statsBackgroundCtrl ctrlSetFade 0;
|
||||
_statsBarCtrl ctrlSetFade 0;
|
||||
} else {
|
||||
_statsBackgroundCtrl ctrlSetFade 1;
|
||||
_statsBarCtrl ctrlSetFade 1;
|
||||
};
|
||||
|
||||
// Handle text entries
|
||||
if (_showText) then {
|
||||
private _textStatementResult = [_configEntry, _itemCfg] call _textStatement;
|
||||
|
||||
if (_textStatementResult isEqualtype "") then {
|
||||
_statsTextCtrl ctrlSetText _textStatementResult;
|
||||
} else {
|
||||
_statsTextCtrl ctrlSetText (str _textStatementResult);
|
||||
};
|
||||
_statsTextCtrl ctrlSetTextColor ([[1,1,1,1], [0,0,0,1]] select (_showBar));
|
||||
|
||||
_statsTextCtrl ctrlSetFade 0;
|
||||
} else {
|
||||
_statsTextCtrl ctrlSetFade 1;
|
||||
};
|
||||
|
||||
{
|
||||
_x ctrlCommit 0;
|
||||
} forEach [
|
||||
_statsTitleCtrl,
|
||||
_statsBackgroundCtrl,
|
||||
_statsBarCtrl,
|
||||
_statsTextCtrl
|
||||
];
|
||||
} forEach (_statsList select {
|
||||
_x params ["_ID","_configEntry", "_title", "_bools", "_statements"];
|
||||
_statements params [["_barStatement", {}, [{}]], ["_textStatement", {}, [{}]], ["_condition", {true}, [{}]]];
|
||||
|
||||
([_configEntry, _itemCfg] call _condition)
|
||||
});
|
||||
};
|
||||
|
||||
// Resize the window
|
||||
[[1, 2, 3, 4, 5] select [_statsCount, 5]] call _hideUnusedFnc;
|
||||
_statsBoxCtrl ctrlSetPosition [
|
||||
(0.5 - WIDTH_TOTAL / 2) + WIDTH_GAP,
|
||||
safezoneY + 1.8 * GRID_H,
|
||||
47 * GRID_W,
|
||||
([11, (10 * _statsCount) + 5] select (_statsCount > 0)) * GRID_H
|
||||
];
|
||||
_statsBoxCtrl ctrlCommit 0;
|
||||
|
||||
GVAR(statsInfo) = [_isLeftPanel, _statsIndex, _control, _curSel, _itemCfg];
|
||||
|
||||
// Toggle page buttons
|
||||
_statsPreviousPageCtrl ctrlEnable !(_currentPage == 0);
|
||||
_statsNextPageCtrl ctrlEnable !(_currentPage + 1 >= count _statsArray);
|
||||
_statsCurrentPageCtrl ctrlSetText ([localize LSTRING(page), str (_currentPage + 1)] joinString " ");
|
||||
|
||||
{
|
||||
_x ctrlSetFade 0;
|
||||
_x ctrlCommit 0;
|
||||
} forEach [
|
||||
_statsPreviousPageCtrl,
|
||||
_statsNextPageCtrl,
|
||||
_statsCurrentPageCtrl
|
||||
];
|
||||
};
|
||||
|
||||
if (ctrlIDC _control == IDC_leftTabContent) then {
|
||||
|
||||
if ([IDC_buttonFace, IDC_buttonVoice, IDC_buttonInsigna] find GVAR(currentLeftPanel) > -1) then {
|
||||
|
||||
[[1, 2, 3, 4, 5]] call _hideUnusedFnc;
|
||||
_statsBoxCtrl ctrlSetPosition [
|
||||
(0.5 - WIDTH_TOTAL / 2) + WIDTH_GAP,
|
||||
safezoneY + 1.8 * GRID_H,
|
||||
47 * GRID_W,
|
||||
11 * GRID_H
|
||||
];
|
||||
_statsBoxCtrl ctrlCommit 0;
|
||||
|
||||
{
|
||||
_x ctrlSetFade 1;
|
||||
_x ctrlCommit 0;
|
||||
} forEach [
|
||||
_statsPreviousPageCtrl,
|
||||
_statsNextPageCtrl,
|
||||
_statsCurrentPageCtrl
|
||||
];
|
||||
} else {
|
||||
[[
|
||||
IDC_buttonPrimaryWeapon,
|
||||
IDC_buttonHandgun,
|
||||
IDC_buttonSecondaryWeapon,
|
||||
IDC_buttonUniform,
|
||||
IDC_buttonVest,
|
||||
IDC_buttonBackpack,
|
||||
IDC_buttonHeadgear,
|
||||
IDC_buttonGoggles,
|
||||
IDC_buttonNVG,
|
||||
IDC_buttonBinoculars,
|
||||
IDC_buttonMap,
|
||||
IDC_buttonGPS,
|
||||
IDC_buttonRadio,
|
||||
IDC_buttonCompass,
|
||||
IDC_buttonWatch
|
||||
] find GVAR(currentLeftPanel), true] call _handleStatsFnc;
|
||||
};
|
||||
} else {
|
||||
|
||||
switch (GVAR(currentRightPanel)) do {
|
||||
case IDC_buttonOptic: {
|
||||
[0, false] call _handleStatsFnc;
|
||||
};
|
||||
case IDC_buttonItemAcc: {
|
||||
[1, false] call _handleStatsFnc;
|
||||
};
|
||||
case IDC_buttonMuzzle: {
|
||||
[2, false] call _handleStatsFnc;
|
||||
};
|
||||
case IDC_buttonBipod: {
|
||||
[3, false] call _handleStatsFnc;
|
||||
};
|
||||
case IDC_buttonCurrentMag;
|
||||
case IDC_buttonCurrentMag2;
|
||||
case IDC_buttonMag;
|
||||
case IDC_buttonMagALL: {
|
||||
[4, false] call _handleStatsFnc;
|
||||
};
|
||||
case IDC_buttonThrow: {
|
||||
[5, false] call _handleStatsFnc;
|
||||
};
|
||||
case IDC_buttonPut: {
|
||||
[6, false] call _handleStatsFnc;
|
||||
};
|
||||
case IDC_buttonMisc: {
|
||||
[7, false] call _handleStatsFnc;
|
||||
};
|
||||
};
|
||||
};
|
||||
} else {
|
||||
|
||||
[[1, 2, 3, 4, 5]] call _hideUnusedFnc;
|
||||
_statsBoxCtrl ctrlSetPosition [
|
||||
(0.5 - WIDTH_TOTAL / 2) + WIDTH_GAP,
|
||||
safezoneY + 1.8 * GRID_H,
|
||||
47 * GRID_W,
|
||||
11 * GRID_H
|
||||
];
|
||||
_statsBoxCtrl ctrlCommit 0;
|
||||
|
||||
{
|
||||
_x ctrlSetFade 1;
|
||||
_x ctrlCommit 0;
|
||||
} forEach [
|
||||
_statsPreviousPageCtrl,
|
||||
_statsNextPageCtrl,
|
||||
_statsCurrentPageCtrl
|
||||
];
|
||||
};
|
@ -49,7 +49,7 @@ if (_global && {isMultiplayer} && {{_object in _x} count GVAR(EHIDArray) == 0})
|
||||
{
|
||||
params ["_target", "_player"];
|
||||
|
||||
[_player, _target, ["isNotSwimming", "isNotCarrying", "isNotDragging", "notOnMap", "isNotEscorting", "isNotOnLadder"]] call EFUNC(common,canInteractWith)
|
||||
[_player, _target] call EFUNC(common,canInteractWith)
|
||||
},
|
||||
{},
|
||||
[]
|
||||
|
@ -25,6 +25,8 @@ if (isClass _itemCfg) then {
|
||||
_ctrlInfo ctrlSetFade 0;
|
||||
_ctrlInfo ctrlCommit FADE_DELAY;
|
||||
|
||||
[QGVAR(displayStats), [_display, _control, _curSel, _itemCfg]] call CBA_fnc_localEvent;
|
||||
|
||||
// Name + author
|
||||
private _ctrlInfoName = _display displayCtrl IDC_infoName;
|
||||
_ctrlInfoName ctrlSetText ([_control lbText _curSel, _control lnbText [_curSel, 1]] select (ctrlType _control == 102));
|
||||
@ -70,6 +72,8 @@ if (isClass _itemCfg) then {
|
||||
_ctrlDLCBackground ctrlcommit 0;
|
||||
|
||||
} else {
|
||||
[QGVAR(displayStats), [_display, _control, -1, nil]] call CBA_fnc_localEvent;
|
||||
|
||||
_ctrlInfo ctrlSetFade 1;
|
||||
_ctrlInfo ctrlCommit FADE_DELAY;
|
||||
};
|
||||
|
@ -14,19 +14,11 @@
|
||||
|
||||
(_this select 1) params ["", "_exitCode"];
|
||||
|
||||
GVAR(camera) cameraEffect ["terminate", "back"];
|
||||
private _cameraData = [getposAtl GVAR(camera), (getposAtl GVAR(camera)) vectorFromTo (getposAtl GVAR(cameraHelper))];
|
||||
|
||||
[QGVAR(displayClosed), []] call CBA_fnc_localEvent;
|
||||
|
||||
removeMissionEventHandler ["draw3D", GVAR(camPosUpdateHandle)];
|
||||
|
||||
GVAR(camera) cameraEffect ["terminate","back"];
|
||||
player switchCamera GVAR(cameraView);
|
||||
|
||||
deleteVehicle GVAR(cameraHelper);
|
||||
camDestroy GVAR(camera);
|
||||
|
||||
if (is3DEN) then {
|
||||
|
||||
private _centerOriginParent = objectParent GVAR(centerOrigin);
|
||||
@ -62,8 +54,18 @@ if (is3DEN) then {
|
||||
case 1: {GVAR(center) selectWeapon secondaryWeapon GVAR(center);};
|
||||
case 2: {GVAR(center) selectWeapon handgunWeapon GVAR(center);};
|
||||
};
|
||||
|
||||
if (!(isnull curatorCamera) && {ACE_player == player}) then {
|
||||
curatorcamera cameraEffect ["internal","back"];
|
||||
} else {
|
||||
GVAR(camera) cameraEffect ["terminate","back"];
|
||||
ACE_player switchCamera GVAR(cameraView);
|
||||
};
|
||||
};
|
||||
|
||||
deleteVehicle GVAR(cameraHelper);
|
||||
camDestroy GVAR(camera);
|
||||
|
||||
if (isMultiplayer) then {
|
||||
|
||||
[QGVAR(broadcastFace), [GVAR(center), GVAR(currentFace)], QGVAR(center) + "_face"] call CBA_fnc_globalEventJIP;
|
||||
@ -73,10 +75,6 @@ if (isMultiplayer) then {
|
||||
[QGVAR(center) + "_voice", GVAR(center)] call CBA_fnc_removeGlobalEventJIP;
|
||||
};
|
||||
|
||||
if !(isnull curatorCamera) then {
|
||||
curatorcamera cameraEffect ["internal","back"];
|
||||
};
|
||||
|
||||
GVAR(camera) = nil;
|
||||
GVAR(cameraHelper) = nil;
|
||||
|
||||
@ -98,6 +96,12 @@ GVAR(currentVoice) = nil;
|
||||
GVAR(currentInsignia) = nil;
|
||||
GVAR(currentAction) = nil;
|
||||
|
||||
GVAR(showStats) = nil;
|
||||
GVAR(statsPagesLeft) = nil;
|
||||
GVAR(statsPagesRight) = nil;
|
||||
GVAR(statsInfo) = nil;
|
||||
|
||||
GVAR(center) = nil;
|
||||
GVAR(centerNotPlayer) = nil;
|
||||
|
||||
showHUD true;
|
||||
|
@ -55,6 +55,11 @@ GVAR(currentInsignia) = GVAR(center) param [0, objNull, [objNull]] getVariable [
|
||||
GVAR(currentAction) = "Stand";
|
||||
GVAR(shiftState) = false;
|
||||
|
||||
GVAR(showStats) = true;
|
||||
GVAR(statsPagesLeft) = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||
GVAR(statsPagesRight) = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||
GVAR(statsInfo) = [true, 0, controlNull, nil, nil];
|
||||
|
||||
// Add the items the player has to virtualItems
|
||||
for "_index" from 0 to 10 do {
|
||||
switch (_index) do {
|
||||
@ -87,8 +92,8 @@ for "_index" from 0 to 10 do {
|
||||
if (_x != "") then {
|
||||
(GVAR(virtualItems) select _index) select ([2, 1, 0, 3] select _forEachIndex) pushBackUnique _x;
|
||||
};
|
||||
} foreach _x;
|
||||
} foreach _accsArray;
|
||||
} forEach _x;
|
||||
} forEach _accsArray;
|
||||
|
||||
{
|
||||
if !(_x isEqualTo []) then {
|
||||
@ -101,7 +106,7 @@ for "_index" from 0 to 10 do {
|
||||
(GVAR(virtualItems) select 2) pushBackUnique (_x select 1);
|
||||
};
|
||||
};
|
||||
} foreach _magsArray;
|
||||
} forEach _magsArray;
|
||||
};
|
||||
|
||||
// Inventory items
|
||||
@ -113,7 +118,7 @@ for "_index" from 0 to 10 do {
|
||||
default {
|
||||
private _array = (LIST_DEFAULTS select _index) select {!(_x isEqualTo "")};
|
||||
if !(_array isEqualTo []) then {
|
||||
{(GVAR(virtualItems) select _index) pushBackUnique _x} foreach _array;
|
||||
{(GVAR(virtualItems) select _index) pushBackUnique _x} forEach _array;
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -163,7 +168,7 @@ for "_index" from 0 to 15 do {
|
||||
private _index = 10 + (["itemmap", "itemcompass", "itemradio", "itemwatch", "itemgps"] find (tolower _simulationType));
|
||||
|
||||
GVAR(currentItems) set [_index, _x];
|
||||
} foreach (assignedItems GVAR(center));
|
||||
} forEach (assignedItems GVAR(center));
|
||||
|
||||
GVAR(currentWeaponType) = switch true do {
|
||||
case (currentWeapon GVAR(center) == GVAR(currentItems) select 0): {0};
|
||||
@ -172,7 +177,7 @@ GVAR(currentWeaponType) = switch true do {
|
||||
default {-1};
|
||||
};
|
||||
|
||||
[QGVAR(displayOpened), []] call CBA_fnc_localEvent;
|
||||
[QGVAR(displayOpened), [_display]] call CBA_fnc_localEvent;
|
||||
|
||||
//--------------- Fade out unused elements
|
||||
private _mouseBlockCtrl = _display displayCtrl IDC_mouseBlock;
|
||||
@ -184,7 +189,7 @@ _mouseBlockCtrl ctrlEnable false;
|
||||
_x ctrlSetFade 1;
|
||||
_x ctrlShow false;
|
||||
_x ctrlCommit 0;
|
||||
} foreach [
|
||||
} forEach [
|
||||
IDC_blockRightFrame,
|
||||
IDC_blockRighttBackground,
|
||||
IDC_loadIndicator,
|
||||
@ -199,6 +204,20 @@ _mouseBlockCtrl ctrlEnable false;
|
||||
IDC_rightSearchbar
|
||||
];
|
||||
|
||||
// Handle stats
|
||||
private _statsBoxCtrl = _display displayCtrl IDC_statsBox;
|
||||
_statsBoxCtrl ctrlSetPosition [
|
||||
(0.5 - WIDTH_TOTAL / 2) + WIDTH_GAP,
|
||||
safezoneY + 1.8 * GRID_H,
|
||||
47 * GRID_W,
|
||||
11 * GRID_H
|
||||
];
|
||||
_statsBoxCtrl ctrlEnable false;
|
||||
_statsBoxCtrl ctrlCommit 0;
|
||||
|
||||
(_display displayCtrl IDC_statsButton) ctrlShow false;
|
||||
|
||||
// Disable import in MP
|
||||
if (isMultiplayer) then {
|
||||
private _importButtonCtrl = _display displayCtrl IDC_buttonImport;
|
||||
_importButtonCtrl ctrlEnable false;
|
||||
@ -258,8 +277,8 @@ if (is3DEN) then {
|
||||
private _ctrl = _display displayctrl _x;
|
||||
_ctrl ctrlEnable false;
|
||||
_ctrl ctrlSetFade 0.6;
|
||||
_ctrl ctrlcommit 0;
|
||||
} foreach [
|
||||
_ctrl ctrlCommit 0;
|
||||
} forEach [
|
||||
IDC_buttonFace,
|
||||
IDC_buttonVoice,
|
||||
IDC_buttonInsigna
|
||||
@ -267,6 +286,19 @@ if (is3DEN) then {
|
||||
|
||||
_buttonCloseCtrl = _display displayCtrl IDC_menuBarClose;
|
||||
_buttonCloseCtrl ctrlSetText (localize "str_ui_debug_but_apply");
|
||||
} else {
|
||||
GVAR(centerNotPlayer) = (GVAR(center) != player);
|
||||
|
||||
{
|
||||
private _ctrl = _display displayCtrl _x;
|
||||
_ctrl ctrlEnable GVAR(enableIdentityTabs);
|
||||
_ctrl ctrlSetFade ([0.6, 0] select GVAR(enableIdentityTabs));
|
||||
_ctrl ctrlCommit 0;
|
||||
} forEach [
|
||||
IDC_buttonFace,
|
||||
IDC_buttonVoice,
|
||||
IDC_buttonInsigna
|
||||
];
|
||||
};
|
||||
|
||||
//--------------- Prepare the left panel
|
||||
@ -282,7 +314,7 @@ GVAR(rightTabLnBFocus) = false;
|
||||
private _panel = _display displayCtrl _x;
|
||||
_panel ctrlSetFontHeight (GVAR(fontHeight) * GRID_H);
|
||||
_panel ctrlCommit 0;
|
||||
} foreach [IDC_leftTabContent, IDC_rightTabContent, IDC_rightTabContentListnBox];
|
||||
} forEach [IDC_leftTabContent, IDC_rightTabContent, IDC_rightTabContentListnBox];
|
||||
|
||||
[_display, _display displayCtrl IDC_buttonPrimaryWeapon] call FUNC(fillLeftPanel);
|
||||
|
||||
|
@ -85,9 +85,31 @@ if !(_loadoutsDisplay isEqualTo displayNull) then {
|
||||
case (_keyPressed == DIK_BACKSPACE): {
|
||||
[_display] call FUNC(buttonHide);
|
||||
};
|
||||
// Export button
|
||||
// Export button / export classname
|
||||
case (_keyPressed == DIK_C && {_ctrlState}): {
|
||||
[_display] call FUNC(buttonExport);
|
||||
if (GVAR(leftTabFocus) || {GVAR(rightTabFocus)} || {GVAR(rightTabLnBFocus)}) then {
|
||||
switch true do {
|
||||
case (GVAR(leftTabFocus)): {
|
||||
private _control = (_display displayCtrl IDC_leftTabContent);
|
||||
_control lbData (lbCurSel _control)
|
||||
};
|
||||
case (GVAR(rightTabFocus)): {
|
||||
private _control = (_display displayCtrl IDC_rightTabContent);
|
||||
_control lbData (lbCurSel _control)
|
||||
};
|
||||
case (GVAR(rightTabLnBFocus)): {
|
||||
private _control = (_display displayCtrl IDC_rightTabContentListnBox);
|
||||
_control lnbData [(lnbCurSelRow _control), 0]
|
||||
};
|
||||
} params ["_className"];
|
||||
|
||||
"ace_clipboard" callExtension (_className + ";");
|
||||
"ace_clipboard" callExtension "--COMPLETE--";
|
||||
|
||||
[_display, localize LSTRING(exportedClassnameText)] call FUNC(message);
|
||||
} else {
|
||||
[_display] call FUNC(buttonExport);
|
||||
};
|
||||
};
|
||||
// Import button
|
||||
case (_keyPressed == DIK_V && {_ctrlState}): {
|
||||
@ -124,6 +146,18 @@ if !(_loadoutsDisplay isEqualTo displayNull) then {
|
||||
|
||||
playsound ["RscDisplayCurator_visionMode",true];
|
||||
};
|
||||
// Panel up down
|
||||
case (_keyPressed in [DIK_UP, DIK_DOWN]): {
|
||||
if (GVAR(leftTabFocus) || {GVAR(rightTabFocus)} || {GVAR(rightTabLnBFocus)}) then {
|
||||
_return = false;
|
||||
};
|
||||
};
|
||||
// Right panel lnb + and - buttons
|
||||
case (_keyPressed in [DIK_LEFT, DIK_RIGHT]): {
|
||||
if (GVAR(rightTabLnBFocus)) then {
|
||||
[_display, [1, 0] select (_keyPressed == DIK_LEFT)] call FUNC(buttonCargo);
|
||||
};
|
||||
};
|
||||
};
|
||||
} else {
|
||||
switch true do {
|
||||
@ -167,22 +201,6 @@ if !(_loadoutsDisplay isEqualTo displayNull) then {
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
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
|
||||
|
@ -22,7 +22,7 @@ params [["_object", objNull, [objNull]], ["_center", objNull, [objNull]], ["_mod
|
||||
if (
|
||||
isNull _object ||
|
||||
{isNull _center} ||
|
||||
{!(_center isKindOf "Man")} ||
|
||||
{!(_center isKindOf "CAManBase")} ||
|
||||
{!(isNull objectParent _center) && {!is3DEN}}
|
||||
) exitWith {};
|
||||
|
||||
|
66
addons/arsenal/functions/fnc_removeStat.sqf
Normal file
66
addons/arsenal/functions/fnc_removeStat.sqf
Normal file
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Remove a stat from ACE Arsenal.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Array of IDs (ARRAY)
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [["scopeStatL00","scopeStatL01","scopeStatL02","scopeStatR07"]] call ace_arsenal_fnc_removeStat;
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_IDList"];
|
||||
|
||||
call FUNC(compileStats);
|
||||
|
||||
{
|
||||
private _currentID = _x;
|
||||
private _stringCount = count _currentID;
|
||||
private _side = _currentID select [_stringCount - 3, 1];
|
||||
private _tab = _currentID select [_stringCount - 2, 2];
|
||||
_tab = parseNumber _tab;
|
||||
|
||||
private _tabToChange = if (_side == "R") then {
|
||||
GVAR(statsListRightPanel) select _tab
|
||||
} else {
|
||||
GVAR(statsListLeftPanel) select _tab
|
||||
};
|
||||
|
||||
{
|
||||
private _currentPage = _x;
|
||||
|
||||
{
|
||||
if (_x select 0 == _currentID) then {
|
||||
_currentPage deleteAt _forEachIndex;
|
||||
};
|
||||
} foreach _currentPage;
|
||||
} foreach _tabToChange;
|
||||
} foreach _IDList;
|
||||
|
||||
// Clear empty pages
|
||||
private _fnc_deleteEmptyPage = {
|
||||
params ["_list"];
|
||||
{
|
||||
private _evaluatedTab = _forEachIndex;
|
||||
{
|
||||
if (count _x == 0) then {
|
||||
_markedForDeletion pushBack [_evaluatedTab, _forEachIndex];
|
||||
};
|
||||
} foreach _x;
|
||||
|
||||
{
|
||||
(_list select (_x select 0)) deleteAt (_x select 1);
|
||||
} foreach _markedForDeletion;
|
||||
} foreach (_this select 0);
|
||||
};
|
||||
|
||||
private _markedForDeletion = [];
|
||||
|
||||
[GVAR(statsListLeftPanel)] call _fnc_deleteEmptyPage;
|
||||
[GVAR(statsListRightPanel)] call _fnc_deleteEmptyPage;
|
@ -13,7 +13,7 @@
|
||||
#include "script_component.hpp"
|
||||
#include "..\defines.hpp"
|
||||
|
||||
|
||||
if (GVAR(centerNotPlayer)) exitWith {};
|
||||
|
||||
private _nextAction = switch (GVAR(currentLeftPanel)) do {
|
||||
|
||||
|
30
addons/arsenal/functions/fnc_statBarStatement_default.sqf
Normal file
30
addons/arsenal/functions/fnc_statBarStatement_default.sqf
Normal file
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Generic bar statement for stats.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: stat (STRING)
|
||||
* 1: item config path (CONFIG)
|
||||
* 2: Args for configExtreme
|
||||
* 2.1: Stat limits (ARRAY of BOOL)
|
||||
* 2.2: Bar limits (ARRAY of SCALAR)
|
||||
* 2.3: Evaluate as a logarithmic number (BOOL)
|
||||
*
|
||||
* Return Value:
|
||||
* Number
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_stat", "_config", "_args"];
|
||||
_args params ["_statMinMax", "_barLimits", "_configExtremeBool"];
|
||||
|
||||
private _statValues = [
|
||||
[_config],
|
||||
[_stat],
|
||||
[_configExtremeBool],
|
||||
[_statMinMax select 0]
|
||||
] call BIS_fnc_configExtremes;
|
||||
|
||||
linearConversion [_statMinMax select 0, _statMinMax select 1, (_statValues select 1) select 0, _barLimits select 0, _barLimits select 1]
|
34
addons/arsenal/functions/fnc_statBarStatement_impact.sqf
Normal file
34
addons/arsenal/functions/fnc_statBarStatement_impact.sqf
Normal file
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Impact bar statement.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: stats array (ARRAY)
|
||||
* 1: item config path (CONFIG)
|
||||
* 2: Args for configExtreme
|
||||
* 2.1: Stat limits (ARRAY of BOOL)
|
||||
* 2.2: Bar limits (ARRAY of SCALAR)
|
||||
* 2.3: Evaluate as a logarithmic number (BOOL)
|
||||
*
|
||||
* Return Value:
|
||||
* Number
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_stats", "_config", "_args"];
|
||||
_args params ["_hitMinMax", "_initSpeedMinMax", "_launcherTabIDC"];
|
||||
|
||||
private _statValues = [
|
||||
[_config],
|
||||
_stats,
|
||||
[true, false],
|
||||
[_hitMinMax select 0, _initSpeedMinMax select 0]
|
||||
] call BIS_fnc_configExtremes;
|
||||
(_statValues select 1) params ["_hit", "_initSpeed"];
|
||||
|
||||
_hit = linearConversion [_hitMinMax select 0, _hitMinMax select 1, _hit, 0.01, 1];
|
||||
_initSpeed = linearConversion [_initSpeedMinMax select 0, _initSpeedMinMax select 1, _initSpeed, 0.01, 1];
|
||||
|
||||
[sqrt(_hit^2 * _initSpeed), _hit] select (GVAR(currentLeftPanel) == _launcherTabIDC)
|
31
addons/arsenal/functions/fnc_statTextStatement_accuracy.sqf
Normal file
31
addons/arsenal/functions/fnc_statTextStatement_accuracy.sqf
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Accuracy text statement.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: stat (STRING)
|
||||
* 1: item config path (CONFIG)
|
||||
* 2: Args for configExtreme
|
||||
* 2.1: Stat limits (ARRAY of BOOL)
|
||||
* 2.2: Evaluate as a logarithmic number (BOOL)
|
||||
*
|
||||
* Return Value:
|
||||
* Number
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_stat", "_config", "_args"];
|
||||
_args params ["_statMinMax", "_configExtremeBool"];
|
||||
|
||||
private _statValues = [
|
||||
[_config],
|
||||
[_stat],
|
||||
[_configExtremeBool],
|
||||
[_statMinMax select 0]
|
||||
] call BIS_fnc_configExtremes;
|
||||
|
||||
private _dispersion = (_statValues select 1) select 0;
|
||||
|
||||
format ["%1 MIL (%2 MOA)", (_dispersion * 1000) toFixed 2, (_dispersion / pi * 10800) ToFixed 1];
|
28
addons/arsenal/functions/fnc_statTextStatement_mass.sqf
Normal file
28
addons/arsenal/functions/fnc_statTextStatement_mass.sqf
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Text statement for the mass stat.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: not used
|
||||
* 1: item config path (CONFIG)
|
||||
*
|
||||
* Return Value:
|
||||
* String to display
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["", "_config"];
|
||||
|
||||
private _mass = getNumber (_config >> "mass");
|
||||
|
||||
if (_mass == 0 && {isClass (_config >> "itemInfo")}) then {
|
||||
_mass = getNumber (_config >> "itemInfo" >> "mass");
|
||||
};
|
||||
|
||||
if (_mass == 0 && {isClass (_config >> "WeaponSlotsInfo")}) then {
|
||||
_mass = getNumber (_config >> "WeaponSlotsInfo" >> "mass");
|
||||
};
|
||||
|
||||
format ["%1kg (%2lb)",((_mass * 0.1 * (1/2.2046) * 100) / 100) ToFixed 2, ((_mass * 0.1 * 100) / 100) ToFixed 2]
|
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* ROF text statement.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: stat (STRING)
|
||||
* 1: item config path (CONFIG)
|
||||
* 2: Args for configExtreme
|
||||
* 2.1: Stat limits (ARRAY of BOOL)
|
||||
* 2.2: Evaluate as a logarithmic number (BOOL)
|
||||
*
|
||||
* Return Value:
|
||||
* Number
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_stat", "_config", "_args"];
|
||||
_args params ["_statMinMax", "_configExtremeBool"];
|
||||
|
||||
private _statValues = [
|
||||
[_config],
|
||||
[_stat],
|
||||
[_configExtremeBool],
|
||||
[_statMinMax select 0]
|
||||
] call BIS_fnc_configExtremes;
|
||||
|
||||
format ["%1 rpm", round (60 / ((_statValues select 1) select 0))]
|
26
addons/arsenal/functions/fnc_statTextStatement_scopeMag.sqf
Normal file
26
addons/arsenal/functions/fnc_statTextStatement_scopeMag.sqf
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Author: PabstMirror
|
||||
* Text statement for the scope magnification stat.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: not used
|
||||
* 1: item config path (CONFIG)
|
||||
*
|
||||
* Return Value:
|
||||
* String to display
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["", "_config"];
|
||||
TRACE_1("statTextStatement_scopeMag",_config);
|
||||
|
||||
private _minZoom = 999; // FOV, so smaller is more zoomed in
|
||||
{
|
||||
_minZoom = _minZoom min (getNumber (_x >> "opticsZoomMin"));
|
||||
} forEach configProperties [_config >> "ItemInfo" >> "OpticsModes"];
|
||||
|
||||
if (_minZoom in [0, 999]) exitWith {"?"};
|
||||
|
||||
format ["%1x", (0.25/_minZoom) toFixed 1]
|
@ -19,9 +19,3 @@ GVAR(cameraHelper) attachTo [GVAR(center), GVAR(cameraPosition) select 3, ""]; /
|
||||
|
||||
GVAR(camera) setPos (GVAR(cameraHelper) modelToWorld [0, -_distance, 0]);
|
||||
GVAR(camera) setVectorDirAndUp [vectorDir GVAR(cameraHelper), vectorUp GVAR(cameraHelper)];
|
||||
|
||||
//--- Make sure the camera is not underground
|
||||
if ((getPosAsl GVAR(camera) select 2) < (getPosAsl GVAR(center) select 2)) then {
|
||||
private _disCoef = ((getPosAsl GVAR(cameraHelper) select 2) - (getPosAsl GVAR(center) select 2)) / ((getPosAsl GVAR(cameraHelper) select 2) - (getPosAsl GVAR(camera) select 2) + 0.001);
|
||||
GVAR(camera) setPos (GVAR(cameraHelper) modelToWorldVisual [0, -_distance * _disCoef, 0]);
|
||||
};
|
||||
|
@ -60,13 +60,13 @@ private _fnc_weaponCheck = {
|
||||
if (isClass (_magCfg >> _mag)) then {
|
||||
if !(_mag in (GVAR(virtualItems) select 2)) then {
|
||||
|
||||
_unavailableItemsList pushBackUnique _item;
|
||||
_unavailableItemsList pushBackUnique _mag;
|
||||
_dataPath set [_forEachIndex, []];
|
||||
_unavailableItemsAmount = _unavailableItemsAmount + 1;
|
||||
};
|
||||
} else {
|
||||
|
||||
_nullItemsList pushBackUnique _item;
|
||||
_nullItemsList pushBackUnique _mag;
|
||||
_dataPath set [_forEachIndex, []];
|
||||
_nullItemsAmount = _nullItemsAmount + 1;
|
||||
};
|
||||
|
@ -9,6 +9,8 @@
|
||||
<Japanese>非表示</Japanese>
|
||||
<Italian>Nascondere</Italian>
|
||||
<Korean>숨김</Korean>
|
||||
<Chinese>隱藏</Chinese>
|
||||
<Chinesesimp>隐藏</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonHideTooltip">
|
||||
<English>Hide interface</English>
|
||||
@ -18,6 +20,8 @@
|
||||
<Japanese>インターフェイスを隠す</Japanese>
|
||||
<Italian>Nascondi interfaccia</Italian>
|
||||
<Korean>인터페이스 숨기기</Korean>
|
||||
<Chinese>隱藏介面</Chinese>
|
||||
<Chinesesimp>隐藏介面</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonLoadoutsText">
|
||||
<English>Loadouts</English>
|
||||
@ -27,6 +31,8 @@
|
||||
<Japanese>装備</Japanese>
|
||||
<Italian>Equipaggiamenti</Italian>
|
||||
<Korean>로드아웃</Korean>
|
||||
<Chinese>裝備</Chinese>
|
||||
<Chinesesimp>装备</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonExportText">
|
||||
<English>Export</English>
|
||||
@ -36,6 +42,8 @@
|
||||
<Japanese>出力</Japanese>
|
||||
<Italian>Esporta</Italian>
|
||||
<Korean>내보내기</Korean>
|
||||
<Chinese>匯出</Chinese>
|
||||
<Chinesesimp>汇出</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonImportText">
|
||||
<English>Import</English>
|
||||
@ -45,6 +53,8 @@
|
||||
<Japanese>取込</Japanese>
|
||||
<Italian>Importa</Italian>
|
||||
<Korean>가져오기</Korean>
|
||||
<Chinese>匯入</Chinese>
|
||||
<Chinesesimp>汇入</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonCloseText">
|
||||
<English>Close</English>
|
||||
@ -54,6 +64,8 @@
|
||||
<Japanese>閉じる</Japanese>
|
||||
<Italian>Chiudi</Italian>
|
||||
<Korean>닫기</Korean>
|
||||
<Chinese>關閉</Chinese>
|
||||
<Chinesesimp>关闭</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_noVirtualItems">
|
||||
<English>No virtual item available</English>
|
||||
@ -63,6 +75,8 @@
|
||||
<Japanese>利用可能なバーチャル アイテムは無し</Japanese>
|
||||
<Italian>Nessun oggetto virtuale disponibile</Italian>
|
||||
<Korean>가상장비 사용 불가</Korean>
|
||||
<Chinese>沒有可用的虛擬物品</Chinese>
|
||||
<Chinesesimp>没有可用的虚拟物品</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSaveText">
|
||||
<English>Save</English>
|
||||
@ -72,6 +86,8 @@
|
||||
<Japanese>保存</Japanese>
|
||||
<Italian>Salva</Italian>
|
||||
<Korean>저장</Korean>
|
||||
<Chinese>保存</Chinese>
|
||||
<Chinesesimp>保存</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSaveTooltip">
|
||||
<English>Save the current loadout</English>
|
||||
@ -81,6 +97,8 @@
|
||||
<Japanese>現在の装備を保存します</Japanese>
|
||||
<Italian>Salva l'equipaggiamento corrente</Italian>
|
||||
<Korean>현재 로드아웃 저장</Korean>
|
||||
<Chinese>保存當前的裝備</Chinese>
|
||||
<Chinesesimp>保存当前的装备</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonRenameText">
|
||||
<English>Rename</English>
|
||||
@ -90,15 +108,19 @@
|
||||
<Japanese>改名</Japanese>
|
||||
<Italian>Rinomina</Italian>
|
||||
<Korean>이름바꾸기</Korean>
|
||||
<Chinese>重新命名</Chinese>
|
||||
<Chinesesimp>重新命名</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonRenameTooltip">
|
||||
<English>Rename the selected loadout</English>
|
||||
<French>Renomme l'équipement sélectionné</French>
|
||||
<German>Ausgewählte Ausrüstung umbenennen</German>
|
||||
<Polish>Zmień nazwę wybranego zestawu</Polish>
|
||||
<Japanese>現在選択中の装備を改名します</Japanese>
|
||||
<Japanese>選択中の装備を改名します</Japanese>
|
||||
<Italian>Rinomina l'equipaggiamento selezionato</Italian>
|
||||
<Korean>선택한 로드아웃의 이름 바꾸기</Korean>
|
||||
<Chinese>重新命名當前選擇的裝備</Chinese>
|
||||
<Chinesesimp>重新命名当前选择的装备</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonLoadText">
|
||||
<English>Load</English>
|
||||
@ -108,15 +130,19 @@
|
||||
<Japanese>読み込む</Japanese>
|
||||
<Italian>Carica</Italian>
|
||||
<Korean>불러오기</Korean>
|
||||
<Chinese>載入</Chinese>
|
||||
<Chinesesimp>载入</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonLoadTooltip">
|
||||
<English>Load the selected loadout</English>
|
||||
<French>Charger l'équipement sélectionné</French>
|
||||
<German>Ausgewählte Ausrüstung laden</German>
|
||||
<Polish>Wczytaj wybrany zestaw</Polish>
|
||||
<Japanese>現在選択中の装備を読み込みます</Japanese>
|
||||
<Japanese>選択中の装備を読み込みます</Japanese>
|
||||
<Italian>Carica l'equipaggiamento selezionato</Italian>
|
||||
<Korean>선택한 로드아웃 불러오기</Korean>
|
||||
<Chinese>載入當前選擇的裝備</Chinese>
|
||||
<Chinesesimp>载入当前选择的装备</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonDeleteText">
|
||||
<English>Delete</English>
|
||||
@ -126,15 +152,19 @@
|
||||
<Japanese>削除</Japanese>
|
||||
<Italian>Elimina</Italian>
|
||||
<Korean>삭제</Korean>
|
||||
<Chinese>刪除</Chinese>
|
||||
<Chinesesimp>删除</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonDeleteTooltip">
|
||||
<English>Delete the selected loadout</English>
|
||||
<French>Supprimer l'équipement sélectionné</French>
|
||||
<German>Ausgewählte Ausrüstung entfernen</German>
|
||||
<Polish>Skasuj wybrany zestaw</Polish>
|
||||
<Japanese>現在選択中の装備を削除します</Japanese>
|
||||
<Japanese>選択中の装備を削除します</Japanese>
|
||||
<Italian>Elimina l'equipaggiamento selezionato</Italian>
|
||||
<Korean>선택한 로드아웃 삭제하기</Korean>
|
||||
<Chinese>刪除當前選擇的裝備</Chinese>
|
||||
<Chinesesimp>删除当前选择的装备</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabMyLoadoutsText">
|
||||
<English>My loadouts</English>
|
||||
@ -144,15 +174,19 @@
|
||||
<Japanese>自分の装備</Japanese>
|
||||
<Italian>I miei equipaggiamenti</Italian>
|
||||
<Korean>내 로드아웃</Korean>
|
||||
<Chinese>我的裝備</Chinese>
|
||||
<Chinesesimp>我的装备</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabMyLoadoutsTooltip">
|
||||
<English>Loadouts saved in your profile</English>
|
||||
<French>Équipements enregistrés dans votre profil</French>
|
||||
<German>Ausrüstungen, die in deinem Profil gespeichert sind</German>
|
||||
<Polish>Zestawy zapisane w Twoim profilu</Polish>
|
||||
<Japanese>自プロフィールに保存された装備です</Japanese>
|
||||
<Japanese>プロフィールに保存された装備です</Japanese>
|
||||
<Italian>Gli equipaggiamenti salvati nel tuo profilo</Italian>
|
||||
<Korean>프로필에 저장된 로드아웃</Korean>
|
||||
<Chinese>裝備已保存到你的設定檔中</Chinese>
|
||||
<Chinesesimp>装备已保存到你的设定档中</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabDefaultLoadoutsText">
|
||||
<English>Default loadouts</English>
|
||||
@ -162,6 +196,8 @@
|
||||
<Japanese>標準の装備</Japanese>
|
||||
<Italian>Equipaggiamenti standard</Italian>
|
||||
<Korean>기본 로드아웃</Korean>
|
||||
<Chinese>預設裝備</Chinese>
|
||||
<Chinesesimp>预设装备</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabDefaultLoadoutsTooltip">
|
||||
<English>Loadouts made available by the mission maker</English>
|
||||
@ -171,6 +207,8 @@
|
||||
<Japanese>装備はミッション著者によって利用できます</Japanese>
|
||||
<Italian>Equipaggiamenti resi disponibili dal creatore della missione</Italian>
|
||||
<Korean>미션메이커가 허용한 로드아웃</Korean>
|
||||
<Chinese>任務作者提供的預設裝備</Chinese>
|
||||
<Chinesesimp>任务作者提供的预设装备</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabSharedLoadoutsText">
|
||||
<English>Public loadouts</English>
|
||||
@ -180,6 +218,8 @@
|
||||
<Japanese>公開装備</Japanese>
|
||||
<Italian>Equipaggiamenti pubblici</Italian>
|
||||
<Korean>공용 로드아웃</Korean>
|
||||
<Chinese>公用裝備</Chinese>
|
||||
<Chinesesimp>公用装备</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_tabSharedLoadoutsTooltip">
|
||||
<English>Loadouts shared by you and other players</English>
|
||||
@ -189,6 +229,8 @@
|
||||
<Japanese>自分か他人によって共有された装備です</Japanese>
|
||||
<Italian>Equipaggiamenti condivisi da te e da altri giocatori</Italian>
|
||||
<Korean>플레이어들이 공유하는 로드아웃</Korean>
|
||||
<Chinese>由你與其他玩家分享的裝備配置</Chinese>
|
||||
<Chinesesimp>由你与其他玩家分享的装备配置</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_sortByWeightText">
|
||||
<English>Sort by weight</English>
|
||||
@ -198,6 +240,8 @@
|
||||
<Japanese>重量で並び替え</Japanese>
|
||||
<Italian>Ordina per peso</Italian>
|
||||
<Korean>무게로 정렬</Korean>
|
||||
<Chinese>以重量排序</Chinese>
|
||||
<Chinesesimp>以重量排序</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_sortByAmountText">
|
||||
<English>Sort by amount</English>
|
||||
@ -207,6 +251,8 @@
|
||||
<Japanese>量で並び替え</Japanese>
|
||||
<Italian>Ordina per quantitativo</Italian>
|
||||
<Korean>갯수로 정렬</Korean>
|
||||
<Chinese>以數量排序</Chinese>
|
||||
<Chinesesimp>以数量排序</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonShareTooltip">
|
||||
<English>Share or stop sharing the selected loadout</English>
|
||||
@ -216,6 +262,8 @@
|
||||
<Japanese>選択した装備の共有設定</Japanese>
|
||||
<Italian>Condividi o smetti di condividere l'equipaggiamento selezionato</Italian>
|
||||
<Korean>선택한 로드아웃 공유 혹은 공유중지</Korean>
|
||||
<Chinese>開始/停止分享當前選擇的裝備</Chinese>
|
||||
<Chinesesimp>开始/停止分享当前选择的装备</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSharePrivateText">
|
||||
<English>Private</English>
|
||||
@ -225,6 +273,8 @@
|
||||
<Japanese>非公開</Japanese>
|
||||
<Italian>Privato</Italian>
|
||||
<Korean>개인</Korean>
|
||||
<Chinese>私用</Chinese>
|
||||
<Chinesesimp>私用</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonSharePublicText">
|
||||
<English>Public</English>
|
||||
@ -234,6 +284,8 @@
|
||||
<Japanese>公開</Japanese>
|
||||
<Italian>Pubblico</Italian>
|
||||
<Korean>공용</Korean>
|
||||
<Chinese>公用</Chinese>
|
||||
<Chinesesimp>公用</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_exportDefaultError">
|
||||
<English>The default loadouts list is empty!</English>
|
||||
@ -243,6 +295,8 @@
|
||||
<Japanese>標準の装備一欄が空です!</Japanese>
|
||||
<Italian>La lista degli equipaggiamenti standard è vuota!</Italian>
|
||||
<Korean>기본 로드아웃 목록이 비어있습니다!</Korean>
|
||||
<Chinese>沒有預設的裝備清單!</Chinese>
|
||||
<Chinesesimp>没有预设的装备清单!</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_exportDefault">
|
||||
<English>Default loadouts list exported to clipboard</English>
|
||||
@ -252,6 +306,8 @@
|
||||
<Japanese>標準の装備一欄はクリップボードへ出力されました</Japanese>
|
||||
<Italian>La lista degli equipaggiamenti standard è stata esportata negli appunti</Italian>
|
||||
<Korean>클립보드에 기본 로드아웃 목록 내보내기</Korean>
|
||||
<Chinese>預設的裝備清單已匯出到剪貼簿中</Chinese>
|
||||
<Chinesesimp>预设的装备清单已汇出到剪贴簿中</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_exportCurrent">
|
||||
<English>Current loadout exported to clipboard</English>
|
||||
@ -261,6 +317,8 @@
|
||||
<Japanese>現在の装備はクリップボードへ出力されました</Japanese>
|
||||
<Italian>Equipaggiamento corrente esportato negli appunti</Italian>
|
||||
<Korean>현재 로드아웃을 클립보드로 내보냈습니다.</Korean>
|
||||
<Chinese>當前的裝備已匯出到剪貼簿中</Chinese>
|
||||
<Chinesesimp>当前的装备已汇出到剪贴簿中</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_importFormatError">
|
||||
<English>Wrong format provided</English>
|
||||
@ -270,6 +328,8 @@
|
||||
<Japanese>間違ったフォーマットが入力されました</Japanese>
|
||||
<Italian>Formato fornito sbagliato</Italian>
|
||||
<Korean>잘못된 형식 입력됨</Korean>
|
||||
<Chinese>提供的格式錯誤</Chinese>
|
||||
<Chinesesimp>提供的格式错误</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_importedDefault">
|
||||
<English>Default loadouts list imported from clipboard</English>
|
||||
@ -279,6 +339,8 @@
|
||||
<Japanese>標準の装備一欄はクリップボードから取込されました</Japanese>
|
||||
<Italian>La lista degli equipaggiamenti standard è stata importata dagli appunti</Italian>
|
||||
<Korean>클립보드에서 기본 로드아웃 가져오기</Korean>
|
||||
<Chinese>預設的裝備清單已從剪貼簿中匯入</Chinese>
|
||||
<Chinesesimp>预设的装备清单已从剪贴簿中汇入</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_importedCurrent">
|
||||
<English>Loadout imported from clipboard</English>
|
||||
@ -288,6 +350,8 @@
|
||||
<Japanese>装備はクリップボードから取込されました</Japanese>
|
||||
<Italian>Equipaggiamento importato dagli appunti</Italian>
|
||||
<Korean>클립보드에서 로드아웃을 가져왔습니다.</Korean>
|
||||
<Chinese>裝備已從剪貼簿中匯入</Chinese>
|
||||
<Chinesesimp>装备已从剪贴簿中汇入</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutDeleted">
|
||||
<English>The following loadout was deleted:</English>
|
||||
@ -297,6 +361,8 @@
|
||||
<Japanese>次の装備は削除されました:</Japanese>
|
||||
<Italian>Il seguente equipaggiamento è stato eliminato:</Italian>
|
||||
<Korean>다음 로드아웃이 삭제됨 :</Korean>
|
||||
<Chinese>以下的裝備已被刪除:</Chinese>
|
||||
<Chinesesimp>以下的装备已被删除:</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutUnshared">
|
||||
<English>The following loadout is not public anymore:</English>
|
||||
@ -306,6 +372,8 @@
|
||||
<Japanese>次の装備は非公開になりました:</Japanese>
|
||||
<Italian>Il seguente eequipaggiamento non è più pubblico:</Italian>
|
||||
<Korean>다음 로드아웃이 더이상 공용이 아님:</Korean>
|
||||
<Chinese>以下的裝備已不再被分享:</Chinese>
|
||||
<Chinesesimp>以下的装备已不再被分享:</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_saveEmptyNameBox">
|
||||
<English>The name field is empty!</English>
|
||||
@ -315,6 +383,8 @@
|
||||
<Japanese>名前欄が空白です!</Japanese>
|
||||
<Italian>Il campo del nome è vuoto!</Italian>
|
||||
<Korean>이름칸이 비었습니다!</Korean>
|
||||
<Chinese>名稱欄位為空!</Chinese>
|
||||
<Chinesesimp>名称栏位为空!</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_saveAuthorError">
|
||||
<English>You are the author of this loadout</English>
|
||||
@ -324,6 +394,8 @@
|
||||
<Japanese>あなたはこの装備の作者です</Japanese>
|
||||
<Italian>Sei l'autore di questo equipaggiamento</Italian>
|
||||
<Korean>이 로드아웃의 제작자입니다.</Korean>
|
||||
<Chinese>你是這個裝備的作者</Chinese>
|
||||
<Chinesesimp>你是这个装备的作者</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_saveSharedError">
|
||||
<English>A loadout of yours with the same name is public</English>
|
||||
@ -333,6 +405,8 @@
|
||||
<Japanese>あなたの装備は既に公開されているものと同名です</Japanese>
|
||||
<Italian>Un tuo equipaggiamento con lo stesso nome è pubblico</Italian>
|
||||
<Korean>같은 이름의 로드아웃이 공용에 있습니다.</Korean>
|
||||
<Chinese>已有相同名稱的裝備在公用分享區</Chinese>
|
||||
<Chinesesimp>已有相同名称的装备在公用分享区</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutSaved">
|
||||
<English>The following loadout was saved:</English>
|
||||
@ -342,6 +416,8 @@
|
||||
<Japanese>次の装備は保存されました:</Japanese>
|
||||
<Italian>Il seguente equipaggiamento è stato salvato:</Italian>
|
||||
<Korean>다음 로드아웃이 저장됨:</Korean>
|
||||
<Chinese>以下的裝備已被保存:</Chinese>
|
||||
<Chinesesimp>以下的装备已被保存:</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutLoaded">
|
||||
<English>The following loadout was loaded:</English>
|
||||
@ -351,6 +427,8 @@
|
||||
<Japanese>次の装備が読み込みされました:</Japanese>
|
||||
<Italian>Il seguente equipaggiamento è stato caricato:</Italian>
|
||||
<Korean>다음 로드아웃을 불러옴:</Korean>
|
||||
<Chinese>以下的裝備已被載入:</Chinese>
|
||||
<Chinesesimp>以下的装备已被载入:</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_renameExistError">
|
||||
<English>A loadout with the same name already exist!</English>
|
||||
@ -360,6 +438,8 @@
|
||||
<Japanese>既にその名前は装備に使われています!</Japanese>
|
||||
<Italian>Un equipaggiamento con lo stesso nome è gia esistente!</Italian>
|
||||
<Korean>같은 이름의 로드아웃이 이미 존재합니다!</Korean>
|
||||
<Chinese>已有相同名稱的裝備!</Chinese>
|
||||
<Chinesesimp>已有相同名称的装备!</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_loadoutRenamed">
|
||||
<English>was renamed to</English>
|
||||
@ -369,6 +449,8 @@
|
||||
<Japanese>次の名前に改名されました</Japanese>
|
||||
<Italian>E' stato rinominato in</Italian>
|
||||
<Korean>이름이 다음과 같이 변경됨:</Korean>
|
||||
<Chinese>已被改名為</Chinese>
|
||||
<Chinesesimp>已被改名为</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_invertCameraSetting">
|
||||
<English>Invert camera controls</English>
|
||||
@ -378,6 +460,8 @@
|
||||
<Japanese>カメラ操作を反転</Japanese>
|
||||
<Italian>Inverti comandi camera</Italian>
|
||||
<Korean>카메라 조종 반전</Korean>
|
||||
<Chinese>反轉攝影機控制</Chinese>
|
||||
<Chinesesimp>反转摄影机控制</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_modIconsSetting">
|
||||
<English>Enable mod icons</English>
|
||||
@ -387,6 +471,8 @@
|
||||
<Japanese>MOD アイコンを表示</Japanese>
|
||||
<Italian>Abilita icone mod</Italian>
|
||||
<Korean>모드 아이콘 허가</Korean>
|
||||
<Chinese>啟用模組圖示</Chinese>
|
||||
<Chinesesimp>启用模组图示</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_fontHeightSetting">
|
||||
<English>Panel font height</English>
|
||||
@ -396,6 +482,8 @@
|
||||
<Japanese>パネルにあるフォントの高さ</Japanese>
|
||||
<Italian>Altezza carattere del pannello</Italian>
|
||||
<Korean>패널 폰트 높이</Korean>
|
||||
<Chinese>面板字體高度</Chinese>
|
||||
<Chinesesimp>面板字体高度</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_allowDefaultLoadoutsSetting">
|
||||
<English>Allow default loadouts</English>
|
||||
@ -405,6 +493,8 @@
|
||||
<Japanese>標準の装備を許可</Japanese>
|
||||
<Italian>Consenti equipaggiamenti standard</Italian>
|
||||
<Korean>기본 로드아웃 허용</Korean>
|
||||
<Chinese>允許預設裝備</Chinese>
|
||||
<Chinesesimp>允许预设装备</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_allowSharingSetting">
|
||||
<English>Allow loadout sharing</English>
|
||||
@ -414,6 +504,8 @@
|
||||
<Japanese>装備の共有を許可</Japanese>
|
||||
<Italian>Consenti condivisione equipaggiamenti</Italian>
|
||||
<Korean>로드아웃 공유 허용</Korean>
|
||||
<Chinese>允許分享裝備</Chinese>
|
||||
<Chinesesimp>允许分享装备</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_printToRPTSetting">
|
||||
<English>Log missing / unavailable items</English>
|
||||
@ -423,6 +515,8 @@
|
||||
<Japanese>欠落 / 利用不可アイテムを記録</Japanese>
|
||||
<Italian>Log mancante / oggetto non disponibile</Italian>
|
||||
<Korean>누락 된 항목 / 사용 할 수 없는 항목 기록</Korean>
|
||||
<Chinese>記錄遺失/無法使用的項目</Chinese>
|
||||
<Chinesesimp>记录遗失/无法使用的项目</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonCurrentMagTooltip">
|
||||
<English>Primary magazine</English>
|
||||
@ -432,6 +526,8 @@
|
||||
<Italian>Caricatore primario</Italian>
|
||||
<Korean>주무기 탄약</Korean>
|
||||
<German>Primärmagazin</German>
|
||||
<Chinese>主要武器彈匣</Chinese>
|
||||
<Chinesesimp>主要武器弹匣</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonCurrentMag2Tooltip">
|
||||
<English>Secondary magazine</English>
|
||||
@ -441,6 +537,8 @@
|
||||
<Italian>Caricatore secondario</Italian>
|
||||
<Korean>보조무기 탄약</Korean>
|
||||
<German>Sekundärmagazin</German>
|
||||
<Chinese>次要武器彈匣</Chinese>
|
||||
<Chinesesimp>次要武器弹匣</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_settingCategory">
|
||||
<English>ACE Arsenal</English>
|
||||
@ -450,6 +548,8 @@
|
||||
<Japanese>ACE 武器庫</Japanese>
|
||||
<Italian>Arsenale ACE</Italian>
|
||||
<Korean>ACE 아스날</Korean>
|
||||
<Chinese>ACE虛擬軍火庫</Chinese>
|
||||
<Chinesesimp>ACE虚拟军火库</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_defaultLoadoutsTooltip">
|
||||
<English>Allow the use of the default loadouts tab</English>
|
||||
@ -459,6 +559,8 @@
|
||||
<Italian>Consenti l'uso della sezione per gli equipaggiamenti standard</Italian>
|
||||
<Korean>기본 로드아웃 탭 사용 허가</Korean>
|
||||
<German>Erlaube die Nutzung des Standardausrüstungsreiters</German>
|
||||
<Chinese>允許使用預設的裝備</Chinese>
|
||||
<Chinesesimp>允许使用预设的装备</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_modIconsTooltip">
|
||||
<English>Show / hide mod icons for the left panel</English>
|
||||
@ -468,6 +570,8 @@
|
||||
<Italian>Mostra / nascondi le icone delle mod dal pannello sinistro</Italian>
|
||||
<Korean>왼쪽 패널의 모드 아이콘 표시 / 숨기기</Korean>
|
||||
<German>Zeigt/Versteckt Mod-Symbole in der linken Leiste</German>
|
||||
<Chinese>在左面板中顯示/隱藏模組圖示</Chinese>
|
||||
<Chinesesimp>在左面板中显示/隐藏模组图示</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_fontHeightTooltip">
|
||||
<English>Change the font height for text in the left / right panels</English>
|
||||
@ -477,6 +581,8 @@
|
||||
<Italian>Cambia l'altezza del font per il testo sul pannello sinistro / destro</Italian>
|
||||
<Korean>왼쪽 / 오른쪽 패널 텍스트의 글꼴 높이 변경</Korean>
|
||||
<German>Ändert die Schriftgröße für die linke/rechte Leiste</German>
|
||||
<Chinese>變更左/右面板中的字體高度</Chinese>
|
||||
<Chinesesimp>变更左/右面板中的字体高度</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_printToRPTTooltip">
|
||||
<English>Log missing / unavailable items in the RPT</English>
|
||||
@ -486,6 +592,8 @@
|
||||
<Italian>Log mancante / oggetto non disponibile nell' RPT</Italian>
|
||||
<Korean>RPT에 누락 된 항목 / 사용할 수없는 항목 기록</Korean>
|
||||
<German>Fehlende Gegenstände werden in der RPT aufgezeichnet</German>
|
||||
<Chinese>記錄遺失/無法使用的項目到RPT檔案中</Chinese>
|
||||
<Chinesesimp>记录遗失/无法使用的项目到RPT档案中</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_CantOpenDisplay">
|
||||
<English>Unable to open ACE arsenal</English>
|
||||
@ -494,6 +602,8 @@
|
||||
<Italian>Impossibile aprire l'arsenale ACE</Italian>
|
||||
<Japanese>ACE 武器庫を開けません</Japanese>
|
||||
<Korean>ACE 아스날을 열 수 없음</Korean>
|
||||
<Chinese>無法開啟ACE虛擬軍火庫</Chinese>
|
||||
<Chinesesimp>无法开启ACE虚拟军火库</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_portLoadoutsText">
|
||||
<English>Import BI VA loadouts to ACE Arsenal</English>
|
||||
@ -501,13 +611,17 @@
|
||||
<German>Importiert die BI-VA-Ausrüstungen in das ACE-Arsenal</German>
|
||||
<Japanese>標準の VA 装備から ACE 武器庫へ取り込み</Japanese>
|
||||
<Korean>바닐라 로드아웃을 ace 아스날로 가져오기</Korean>
|
||||
<Chinese>匯入BI原廠虛擬軍火庫的裝備到ACE虛擬軍火庫中</Chinese>
|
||||
<Chinesesimp>汇入BI原厂虚拟军火库的装备到ACE虚拟军火库中</Chinesesimp>
|
||||
</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>
|
||||
<German>Keine Spielereinheit verfügbar. Setze eine Einheit und markiere sie als "Spieler".</German>
|
||||
<Japanese>プレイヤー ユニットがありません!ユニットを設置しそれを"Player"と名付けてください。</Japanese>
|
||||
<Japanese>プレイヤー ユニットがありません!ユニットを設置し"Player"と名付けてください。</Japanese>
|
||||
<Korean>플레이어 유닛을 사용할 수 없습니다! 유닛을 놓고 "플레이어"라고 표시하십시오.</Korean>
|
||||
<Chinese>沒有可用的玩家單位!請擺放一個單位並設定成"玩家"。</Chinese>
|
||||
<Chinesesimp>没有可用的玩家单位!请摆放一个单位并设定成"玩家"。</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_portLoadoutsLoadoutError">
|
||||
<English>No loadouts to import.</English>
|
||||
@ -515,42 +629,102 @@
|
||||
<German>Keine Ausrüstungen zum Importieren</German>
|
||||
<Japanese>取り込みする装備がありません。</Japanese>
|
||||
<Korean>가져올 로드 아웃이 없습니다.</Korean>
|
||||
<Chinese>沒有裝備被匯入。</Chinese>
|
||||
<Chinesesimp>没有装备被汇入。</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_Mission">
|
||||
<English>ACE Arsenal</English>
|
||||
<German>ACE-Arsenal</German>
|
||||
<Japanese>ACE 武器庫</Japanese>
|
||||
<Korean>ACE 아스날</Korean>
|
||||
<Chinese>ACE虛擬軍火庫</Chinese>
|
||||
<Chinesesimp>ACE虚拟军火库</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_ReturnToArsenal">
|
||||
<English>Return to ACE Arsenal.</English>
|
||||
<German>Zurück zum ACE-Arsenal.</German>
|
||||
<Japanese>ACE 武器庫へ戻ります。</Japanese>
|
||||
<Korean>ACE 아스날로 돌아가기</Korean>
|
||||
<Chinese>返回到ACE虛擬軍火庫。</Chinese>
|
||||
<Chinesesimp>返回到ACE虚拟军火库。</Chinesesimp>
|
||||
</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>
|
||||
<Japanese>さまざまな武器と装備を試せるよう ACE 武器庫を使用します。</Japanese>
|
||||
<Korean>ACE Arsenal을 사용하여 다른 무기와 장비를 시험해보십시오.</Korean>
|
||||
<Chinese>使用ACE虛擬軍火庫來嘗試不同的武器與裝備。</Chinese>
|
||||
<Chinesesimp>使用ACE虚拟军火库来尝试不同的武器与装备。</Chinesesimp>
|
||||
</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>
|
||||
<Japanese>さまざまな武器と装備を試して、あなただけの装備を作成してください。</Japanese>
|
||||
<Korean>무기와 장비를 사용해보고 자신의 로드아웃을 만듭니다.</Korean>
|
||||
<Chinese>嘗試不同的武器與裝備來組合你個人的裝備配置。</Chinese>
|
||||
<Chinesesimp>尝试不同的武器与装备来组合你个人的装备配置。</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonLoadoutsTooltip">
|
||||
<English>Open the loadouts screen</English>
|
||||
<French>Affiche la page des équipements</French>
|
||||
<Chinese>開啟裝備選單</Chinese>
|
||||
<Chinesesimp>开启装备选单</Chinesesimp>
|
||||
<Japanese>装備画面を開く</Japanese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonExportTooltip">
|
||||
<English>Export current / default loadouts</English>
|
||||
<French>Exporte l'équipement actuel ou la liste d'équipements de base</French>
|
||||
<Chinese>匯出當前/預設的裝備</Chinese>
|
||||
<Chinesesimp>汇出当前/预设的装备</Chinesesimp>
|
||||
<Japanese>現在 / 標準装備を出力</Japanese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonImportTooltip">
|
||||
<English>Import current / default loadouts</English>
|
||||
<French>Importer l'équipement actuel ou la liste d'équipements de base</French>
|
||||
<Chinese>匯入當前/預設的裝備</Chinese>
|
||||
<Chinesesimp>汇入当前/预设的装备</Chinesesimp>
|
||||
<Japanese>現在 / 標準装備を取込</Japanese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_statPotassium">
|
||||
<English>Potassium levels</English>
|
||||
<French>Taux de potassium</French>
|
||||
<Japanese>カリウム レベル</Japanese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_statMagnification">
|
||||
<English>Magnification</English>
|
||||
<Chinese>放大倍率</Chinese>
|
||||
<French>Grossissement</French>
|
||||
<Spanish>Aumento</Spanish>
|
||||
<Italian>Ingrandimento</Italian>
|
||||
<Polish>Powiększenie</Polish>
|
||||
<Russian>Увеличение</Russian>
|
||||
<German>Vergrößerung</German>
|
||||
<Czech>Zvětšení</Czech>
|
||||
<Portuguese>Aumentox</Portuguese>
|
||||
<Korean>배율</Korean>
|
||||
<Chinesesimp>放大倍数</Chinesesimp>
|
||||
<Japanese>拡大倍率</Japanese>
|
||||
<Turkish>Büyütme</Turkish>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_page">
|
||||
<English>Page</English>
|
||||
<French>Page</French>
|
||||
<Japanese>ページ</Japanese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_enableIdentityTabsSettings">
|
||||
<English>Enable the faces / voices / insignias tabs</English>
|
||||
<French>Activer les onglets faces / voix / insignes</French>
|
||||
<Japanese>顔 / 声 / 記章タブを有効化</Japanese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_buttonClearContainerTooltip">
|
||||
<English>Empty the selected container</English>
|
||||
<French>Vider le conteneur selectionné</French>
|
||||
<Japanese>選択されたコンテナは空です</Japanese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Arsenal_exportedClassnameText">
|
||||
<English>Exported class name to clipboard</English>
|
||||
<French>Nom de classe exporté dans le presse papier</French>
|
||||
<Japanese>クリップボードへクラスネームを出力</Japanese>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -42,7 +42,7 @@ class GVAR(display) {
|
||||
idc = IDC_arrowMinus;
|
||||
text = "-";
|
||||
colorBackground[]={0,0,0,0.8};
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), -1)] call FUNC(buttonCargo));
|
||||
onButtonClick = QUOTE([ARR_2(ctrlParent (_this select 0), -1)] call FUNC(buttonCargo));
|
||||
fade = 1;
|
||||
enable = 0;
|
||||
x = 0.5;
|
||||
@ -53,7 +53,7 @@ class GVAR(display) {
|
||||
};
|
||||
class ArrowRight: ArrowLeft {
|
||||
idc = IDC_arrowPlus;
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), 1)] call FUNC(buttonCargo));
|
||||
onButtonClick = QUOTE([ARR_2(ctrlParent (_this select 0), 1)] call FUNC(buttonCargo));
|
||||
text="+";
|
||||
};
|
||||
class blockLeftFrame: RscFrame {
|
||||
@ -177,7 +177,7 @@ class GVAR(display) {
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
shortcuts[] = {"0x0E"};
|
||||
tooltip = CSTRING(buttonHideTooltip);
|
||||
onButtonClick = QUOTE([ctrlparent (_this select 0)] call FUNC(buttonHide));
|
||||
onButtonClick = QUOTE([ctrlParent (_this select 0)] call FUNC(buttonHide));
|
||||
};
|
||||
class buttonLoadouts: buttonHide {
|
||||
idc = IDC_buttonLoadouts;
|
||||
@ -191,14 +191,14 @@ class GVAR(display) {
|
||||
x = QUOTE(3 * WIDTH_GAP + 2 * WIDTH_SINGLE);
|
||||
text = CSTRING(buttonExportText);
|
||||
tooltip = CSTRING(buttonExportTooltip);
|
||||
onButtonClick = QUOTE([ctrlparent (_this select 0)] call FUNC(buttonExport));
|
||||
onButtonClick = QUOTE([ctrlParent (_this select 0)] call FUNC(buttonExport));
|
||||
};
|
||||
class buttonImport: buttonHide {
|
||||
idc = IDC_buttonImport;
|
||||
x = QUOTE(4 * WIDTH_GAP + 3 * WIDTH_SINGLE);
|
||||
text = CSTRING(buttonImportText);
|
||||
tooltip = CSTRING(buttonImportTooltip);
|
||||
onButtonClick = QUOTE([ctrlparent (_this select 0)] call FUNC(buttonImport));
|
||||
onButtonClick = QUOTE([ctrlParent (_this select 0)] call FUNC(buttonImport));
|
||||
};
|
||||
class buttonClose: ctrlButtonOK {
|
||||
idc = IDC_menuBarClose;
|
||||
@ -209,7 +209,7 @@ class GVAR(display) {
|
||||
h = QUOTE(7 * GRID_H);
|
||||
text = CSTRING(buttonCloseText);
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
onButtonClick = QUOTE(ctrlparent (_this select 0) closeDisplay 1);
|
||||
onButtonClick = QUOTE(ctrlParent (_this select 0) closeDisplay 1);
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -268,6 +268,194 @@ class GVAR(display) {
|
||||
};
|
||||
};
|
||||
};
|
||||
class statsBox: RscControlsGroupNoScrollbars {
|
||||
idc = IDC_statsBox;
|
||||
x = QUOTE((0.5 - WIDTH_TOTAL / 2) + WIDTH_GAP);
|
||||
y = QUOTE(safezoneY + 1.8 * GRID_H);
|
||||
w = QUOTE(47 * GRID_W);
|
||||
h = QUOTE(55 * GRID_H);
|
||||
class controls {
|
||||
class statsStaticBackground1: ctrlStaticBackground {
|
||||
idc = -1;
|
||||
x = QUOTE(0);
|
||||
y = QUOTE(0);
|
||||
w = QUOTE(47 * GRID_W);
|
||||
h = QUOTE(55 * GRID_H);
|
||||
colorBackground[]={0.1,0.1,0.1,0.5};
|
||||
};
|
||||
class statsStaticBackground2: ctrlStaticBackground {
|
||||
idc = -1;
|
||||
x = QUOTE(0);
|
||||
y = QUOTE(0);
|
||||
w = QUOTE(47 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
colorBackground[]={0.1,0.1,0.1,0.8};
|
||||
};
|
||||
class statsTitle1: RscText {
|
||||
idc = IDC_statsTitle1;
|
||||
fade = 1;
|
||||
x = QUOTE(0 * GRID_W);
|
||||
y = QUOTE(5 * GRID_H);
|
||||
w = QUOTE(45 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
colorBackground[]={0,0,0,0};
|
||||
colorText[]={0.7,0.7,0.7,1};
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
text = "";
|
||||
};
|
||||
class statsBackground1: ctrlStaticBackground {
|
||||
idc = IDC_statsBackground1;
|
||||
fade = 1;
|
||||
x = QUOTE(1 * GRID_W);
|
||||
y = QUOTE(10 * GRID_H);
|
||||
w = QUOTE(45 * GRID_W);
|
||||
h = QUOTE(4 * GRID_H);
|
||||
colorBackground[]={1,1,1,0.15};
|
||||
};
|
||||
class statsBar1: ctrlProgress {
|
||||
idc = IDC_statsBar1;
|
||||
fade = 1;
|
||||
style = 0;
|
||||
texture = "#(argb,8,8,3)color(1,1,1,1)";
|
||||
colorBar[] = {1,1,1,1};
|
||||
colorFrame[] = {0,0,0,0};
|
||||
x = QUOTE(1 * GRID_W);
|
||||
y = QUOTE(10 * GRID_H);
|
||||
w = QUOTE(45 * GRID_W);
|
||||
h = QUOTE(4 * GRID_H);
|
||||
};
|
||||
class statsText1: RscText {
|
||||
idc = IDC_statsText1;
|
||||
shadow=0;
|
||||
fade = 1;
|
||||
colorShadow[]={1,1,1,1};
|
||||
colorText[]={0,0,0,1};
|
||||
x = QUOTE(0 * GRID_W);
|
||||
y = QUOTE(10 * GRID_H);
|
||||
w = QUOTE(45 * GRID_W);
|
||||
h = QUOTE(4 * GRID_H);
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
text = "";
|
||||
};
|
||||
class statsTitle2: statsTitle1 {
|
||||
idc = IDC_statsTitle2;
|
||||
y = QUOTE(15 * GRID_H);
|
||||
};
|
||||
class statsBackground2: statsBackground1 {
|
||||
idc = IDC_statsBackground2;
|
||||
y = QUOTE(20 * GRID_H);
|
||||
};
|
||||
class statsBar2: statsBar1 {
|
||||
idc = IDC_statsBar2;
|
||||
y = QUOTE(20 * GRID_H);
|
||||
};
|
||||
class statsText2: statsText1 {
|
||||
idc = IDC_statsText2;
|
||||
y = QUOTE(20 * GRID_H);
|
||||
};
|
||||
class statsTitle3: statsTitle1 {
|
||||
idc = IDC_statsTitle3;
|
||||
y = QUOTE(25 * GRID_H);
|
||||
};
|
||||
class statsBackground3: statsBackground1 {
|
||||
idc = IDC_statsBackground3;
|
||||
y = QUOTE(30 * GRID_H);
|
||||
};
|
||||
class statsBar3: statsBar1 {
|
||||
idc = IDC_statsBar3;
|
||||
y = QUOTE(30 * GRID_H);
|
||||
};
|
||||
class statsText3: statsText1 {
|
||||
idc = IDC_statsText3;
|
||||
y = QUOTE(30 * GRID_H);
|
||||
};
|
||||
class statsTitle4: statsTitle1 {
|
||||
idc = IDC_statsTitle4;
|
||||
y = QUOTE(35 * GRID_H);
|
||||
};
|
||||
class statsBackground4: statsBackground1 {
|
||||
idc = IDC_statsBackground4;
|
||||
y = QUOTE(40 * GRID_H);
|
||||
};
|
||||
class statsBar4: statsBar1 {
|
||||
idc = IDC_statsBar4;
|
||||
y = QUOTE(40 * GRID_H);
|
||||
};
|
||||
class statsText4: statsText1 {
|
||||
idc = IDC_statsText4;
|
||||
y = QUOTE(40 * GRID_H);
|
||||
};
|
||||
class statsTitle5: statsTitle1 {
|
||||
idc = IDC_statsTitle5;
|
||||
y = QUOTE(45 * GRID_H);
|
||||
};
|
||||
class statsBackground5: statsBackground1 {
|
||||
idc = IDC_statsBackground5;
|
||||
y = QUOTE(50 * GRID_H);
|
||||
};
|
||||
class statsBar5: statsBar1 {
|
||||
idc = IDC_statsBar5;
|
||||
y = QUOTE(50 * GRID_H);
|
||||
colorBackground[]={1,1,1,0.15};
|
||||
};
|
||||
class statsText5: statsText1 {
|
||||
idc = IDC_statsText5;
|
||||
y = QUOTE(50 * GRID_H);
|
||||
};
|
||||
};
|
||||
};
|
||||
class statsButton: ctrlButton {
|
||||
idc = IDC_statsButton;
|
||||
style= 2;
|
||||
text=">";
|
||||
onButtonClick = QUOTE(ARR_2([QQGVAR(statsButton), [ctrlParent (_this select 0)]]) call CBA_fnc_localEvent);
|
||||
x = QUOTE((0.5 - WIDTH_TOTAL / 2) + WIDTH_GAP);
|
||||
y = QUOTE(safezoneY + 1.8 * GRID_H);
|
||||
w = QUOTE(6 * GRID_W);
|
||||
h = QUOTE(6 * GRID_H);
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
};
|
||||
class statsPreviousPage: ctrlButton {
|
||||
idc = IDC_statsPreviousPage;
|
||||
style= 2;
|
||||
text="<";
|
||||
colorBackground[]={0,0,0,0};
|
||||
colorBackgroundDisabled[]= {0,0,0,0};
|
||||
onButtonClick = QUOTE(ARR_2([QQGVAR(statsChangePage),[ARR_3(ctrlParent (_this select 0), _this select 0, false)]]) call CBA_fnc_localEvent);
|
||||
x = QUOTE((0.5 - WIDTH_TOTAL / 2) + WIDTH_GAP);
|
||||
y = QUOTE(safezoneY + 1.8 * GRID_H);
|
||||
w = QUOTE(5 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
sizeEx = QUOTE(5.5 * GRID_H);
|
||||
};
|
||||
class statsNextPage: statsPreviousPage {
|
||||
idc = IDC_statsNextPage;
|
||||
text = ">";
|
||||
onButtonClick = QUOTE(ARR_2([QQGVAR(statsChangePage),[ARR_3(ctrlParent (_this select 0), _this select 0, true)]]) call CBA_fnc_localEvent);
|
||||
x = QUOTE((0.5 - WIDTH_TOTAL / 2) + WIDTH_GAP + 30 * GRID_W);
|
||||
};
|
||||
class statsCurrentPage: RscText {
|
||||
idc = IDC_statsCurrentPage;
|
||||
style = ST_CENTER;
|
||||
x = QUOTE((0.5 - WIDTH_TOTAL / 2) + WIDTH_GAP + 5 * GRID_W);
|
||||
y = QUOTE(safezoneY + 1.8 * GRID_H);
|
||||
w = QUOTE(25 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
colorBackground[]={0,0,0,0};
|
||||
shadow=2;
|
||||
sizeEx = QUOTE(5 * GRID_H);
|
||||
text = "";
|
||||
};
|
||||
class statsButtonClose: ctrlButtonPicture {
|
||||
idc = IDC_statsButtonClose;
|
||||
colorBackground[]={0,0,0,0};
|
||||
text="\a3\3DEN\Data\Displays\Display3DEN\search_end_ca.paa";
|
||||
onButtonClick = QUOTE(ARR_2([QQGVAR(statsButton), [ctrlParent (_this select 0)]]) call CBA_fnc_localEvent);
|
||||
x = QUOTE((0.5 - WIDTH_TOTAL / 2) + WIDTH_GAP + 42 * GRID_W);
|
||||
y = QUOTE(safezoneY + 1.8 * GRID_H);
|
||||
w = QUOTE(5 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
};
|
||||
class mouseBlock: RscText {
|
||||
idc = IDC_mouseBlock;
|
||||
style = 16;
|
||||
@ -371,12 +559,13 @@ class GVAR(display) {
|
||||
y = QUOTE(safezoneY + 1.8 * GRID_H);
|
||||
w = QUOTE(74 * GRID_W);
|
||||
h = QUOTE(6 * GRID_H);
|
||||
sizeEx = QUOTE(6 * GRID_H);
|
||||
};
|
||||
class leftSearchbarButton: ctrlButtonPicture {
|
||||
idc = IDC_leftSearchbarButton;
|
||||
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_leftSearchbar)] call FUNC(handleSearchbar));
|
||||
onButtonClick = QUOTE([ARR_2(ctrlParent (_this select 0), ctrlParent (_this select 0) displayCtrl IDC_leftSearchbar)] call FUNC(handleSearchbar));
|
||||
x = QUOTE(safezoneX + 87 * GRID_W);
|
||||
y = QUOTE(safezoneY + 1.8 * GRID_H);
|
||||
w = QUOTE(6 * GRID_W);
|
||||
@ -390,7 +579,7 @@ class GVAR(display) {
|
||||
};
|
||||
class rightSearchbarButton: leftSearchbarButton {
|
||||
idc = IDC_rightSearchbarButton;
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), ctrlparent (_this select 0) displayCtrl IDC_rightSearchbar)] call FUNC(handleSearchbar));
|
||||
onButtonClick = QUOTE([ARR_2(ctrlParent (_this select 0), ctrlParent (_this select 0) displayCtrl IDC_rightSearchbar)] call FUNC(handleSearchbar));
|
||||
x = QUOTE(safezoneX + safezoneW - 93 * GRID_W);
|
||||
};
|
||||
class tabLeft: RscControlsGroupNoScrollbars {
|
||||
@ -414,7 +603,7 @@ class GVAR(display) {
|
||||
idc = IDC_buttonPrimaryWeapon;
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\PrimaryWeapon_ca.paa";
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_PrimaryWeapon";
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(fillLeftPanel));
|
||||
onButtonClick = QUOTE([ARR_2(ctrlParent (_this select 0), _this select 0)] call FUNC(fillLeftPanel));
|
||||
colorBackground[]={0,0,0,0.5};
|
||||
x = QUOTE(0 * GRID_W);
|
||||
y = QUOTE(0 * GRID_H);
|
||||
@ -607,7 +796,7 @@ class GVAR(display) {
|
||||
idc = IDC_buttonOptic;
|
||||
tooltip="$STR_A3_RscDisplayArsenal_tab_ItemOptic";
|
||||
text="\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\ItemOptic_ca.paa";
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(fillRightPanel));
|
||||
onButtonClick = QUOTE([ARR_2(ctrlParent (_this select 0), _this select 0)] call FUNC(fillRightPanel));
|
||||
colorBackground[]={0,0,0,0.5};
|
||||
x = QUOTE(safezoneW + safezoneX - 10 * GRID_W);
|
||||
y = QUOTE(safezoneY + 8 * GRID_H);
|
||||
@ -717,6 +906,7 @@ class GVAR(display) {
|
||||
class buttonRemoveAll: ctrlButtonPicture {
|
||||
idc = IDC_buttonRemoveAll;
|
||||
text = QPATHTOF(data\iconClearContainer.paa);
|
||||
tooltip = CSTRING(buttonClearContainerTooltip);
|
||||
colorBackground[]={0,0,0,0.5};
|
||||
onButtonClick = QUOTE(ctrlParent (_this select 0) call FUNC(buttonClearAll));
|
||||
fade=1;
|
||||
@ -775,7 +965,7 @@ class GVAR(loadoutsDisplay) {
|
||||
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));
|
||||
onLBDblClick = QUOTE([ARR_2(ctrlParent (_this select 0), (ctrlParent (_this select 0)) displayCtrl IDC_buttonLoad)] call FUNC(buttonLoadoutsLoad));
|
||||
x = QUOTE(0);
|
||||
y = QUOTE(5 * GRID_H);
|
||||
w = QUOTE(160 * GRID_W);
|
||||
@ -798,6 +988,7 @@ class GVAR(loadoutsDisplay) {
|
||||
y = QUOTE(safezoneH - (51 * GRID_H));
|
||||
w = QUOTE(65 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
sizeEx = QUOTE(6 * GRID_H);
|
||||
};
|
||||
class loadoutsSearchbar: ctrlEdit {
|
||||
idc = IDC_loadoutsSearchbar;
|
||||
@ -808,12 +999,13 @@ class GVAR(loadoutsDisplay) {
|
||||
y = QUOTE(safezoneH - (51 * GRID_H));
|
||||
w = QUOTE(72 * GRID_W);
|
||||
h = QUOTE(5 * GRID_H);
|
||||
sizeEx = QUOTE(6 * 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));
|
||||
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);
|
||||
@ -828,7 +1020,7 @@ class GVAR(loadoutsDisplay) {
|
||||
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));
|
||||
onButtonClick = QUOTE([ARR_2(ctrlParent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsSave));
|
||||
colorBackground[] = {0,0,0,0.8};
|
||||
};
|
||||
class buttonRename: buttonSave {
|
||||
@ -836,21 +1028,21 @@ class GVAR(loadoutsDisplay) {
|
||||
x = QUOTE(32.5 * GRID_W);
|
||||
text= CSTRING(buttonRenameText);
|
||||
tooltip= CSTRING(buttonRenameTooltip);
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsRename));
|
||||
onButtonClick = QUOTE([ARR_2(ctrlParent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsRename));
|
||||
};
|
||||
class buttonLoad: buttonSave {
|
||||
idc = IDC_buttonLoad;
|
||||
x = QUOTE(65 * GRID_W);
|
||||
text= CSTRING(buttonLoadText);
|
||||
tooltip= CSTRING(buttonLoadTooltip);
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsLoad));
|
||||
onButtonClick = QUOTE([ARR_2(ctrlParent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsLoad));
|
||||
};
|
||||
class buttonShare: buttonSave {
|
||||
idc = IDC_buttonShare;
|
||||
x = QUOTE(97.5 * GRID_W);
|
||||
text= CSTRING(buttonSharePrivateText);
|
||||
tooltip= CSTRING(buttonShareTooltip);
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsShare));
|
||||
onButtonClick = QUOTE([ARR_2(ctrlParent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsShare));
|
||||
};
|
||||
class buttonDelete: buttonSave {
|
||||
idc = IDC_buttonDelete;
|
||||
@ -858,11 +1050,10 @@ class GVAR(loadoutsDisplay) {
|
||||
text= CSTRING(buttonDeleteText);
|
||||
tooltip= CSTRING(buttonDeleteTooltip);
|
||||
colorBackgroundActive[] = {0.5,0,0,1};
|
||||
onButtonClick = QUOTE([ARR_2(ctrlparent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsDelete));
|
||||
onButtonClick = QUOTE([ARR_2(ctrlParent (_this select 0), _this select 0)] call FUNC(buttonLoadoutsDelete));
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class buttonClose: ctrlButton {
|
||||
idc = -1;
|
||||
x = QUOTE(safezoneW + safezoneX - 32 * GRID_W);
|
||||
@ -873,7 +1064,7 @@ class GVAR(loadoutsDisplay) {
|
||||
text= CSTRING(buttonCloseText);
|
||||
shortcuts[]= {"0x01"};
|
||||
tooltip= "";
|
||||
onButtonClick = QUOTE(ctrlparent (_this select 0) closeDisplay 2);
|
||||
onButtonClick = QUOTE(ctrlParent (_this select 0) closeDisplay 2);
|
||||
};
|
||||
class buttonBar: ctrlControlsGroupNoScrollbars {
|
||||
idc = -1;
|
||||
@ -900,7 +1091,7 @@ class GVAR(loadoutsDisplay) {
|
||||
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));
|
||||
onButtonClick = QUOTE([ARR_2(ctrlParent (_this select 0), _this select 0)] call FUNC(loadoutsChangeTab));
|
||||
};
|
||||
class buttonDefaultLoadoutsBackground: buttonMyLoadoutsBackground {
|
||||
idc = IDC_buttonDefaultLoadoutsBackground;
|
||||
|
@ -271,6 +271,17 @@ class Display3DEN {
|
||||
class ContextMenu :ctrlMenu {
|
||||
class Items {
|
||||
class Arsenal {
|
||||
items[]= {"aceArsenal", "virtualArsenal"};
|
||||
};
|
||||
class virtualArsenal {
|
||||
text = "BI Virtual Arsenal";
|
||||
action= QUOTE(['arsenal'] call bis_fnc_3DENEntityMenu);
|
||||
value=0;
|
||||
data="Arsenal";
|
||||
opensNewWindow=1;
|
||||
};
|
||||
class aceArsenal: virtualArsenal {
|
||||
text = "ACE Arsenal";
|
||||
action= QUOTE(call FUNC(open3DEN));
|
||||
};
|
||||
};
|
||||
|
@ -60,7 +60,7 @@
|
||||
<Italian>Strobo IR attaccata</Italian>
|
||||
<Hungarian>Infravörös jeladó hozzácsatolva</Hungarian>
|
||||
<Russian>ИК-маяк прикреплён</Russian>
|
||||
<Japanese>赤外線ストロボを取り付ける</Japanese>
|
||||
<Japanese>赤外線ストロボを取り付けました</Japanese>
|
||||
<Korean>적외선 스트로브 부착됨</Korean>
|
||||
<Chinese>已附掛紅外線頻閃器</Chinese>
|
||||
<Chinesesimp>已附挂红外线频闪器</Chinesesimp>
|
||||
@ -76,7 +76,7 @@
|
||||
<Italian>Strobo IR staccata</Italian>
|
||||
<Hungarian>Infravörös jeladó lecsatolva</Hungarian>
|
||||
<Russian>ИК-маяк отсоединён</Russian>
|
||||
<Japanese>赤外線ストロボを外す</Japanese>
|
||||
<Japanese>赤外線ストロボを外しました</Japanese>
|
||||
<Korean>적외선 스트로브 분리됨</Korean>
|
||||
<Chinese>已取下紅外線頻閃器</Chinese>
|
||||
<Chinesesimp>已取下红外线频闪器</Chinesesimp>
|
||||
@ -92,7 +92,7 @@
|
||||
<Italian>Granata IR attaccata</Italian>
|
||||
<Hungarian>Infravörös gránát hozzácsatolva</Hungarian>
|
||||
<Russian>ИК-граната прикреплена</Russian>
|
||||
<Japanese>赤外線グレネードを取り付ける</Japanese>
|
||||
<Japanese>赤外線グレネードを取り付けました</Japanese>
|
||||
<Korean>적외선 수류탄 부착됨</Korean>
|
||||
<Chinese>已附掛紅外線手榴彈</Chinese>
|
||||
<Chinesesimp>已附挂红外线手榴弹</Chinesesimp>
|
||||
@ -108,7 +108,7 @@
|
||||
<Italian>Granata IR staccata</Italian>
|
||||
<Hungarian>Infravörös gránát lecsatolva</Hungarian>
|
||||
<Russian>ИК-граната отсоединена</Russian>
|
||||
<Japanese>赤外線グレネードを外す</Japanese>
|
||||
<Japanese>赤外線グレネードを外しました</Japanese>
|
||||
<Korean>적외선 수류탄 분리됨</Korean>
|
||||
<Chinese>已取下紅外線手榴彈</Chinese>
|
||||
<Chinesesimp>已取下红外线手榴弹</Chinesesimp>
|
||||
@ -124,7 +124,7 @@
|
||||
<Italian>Chemlight attaccata</Italian>
|
||||
<Hungarian>Chemlight hozzácsatolva</Hungarian>
|
||||
<Russian>Химсвет прикреплён</Russian>
|
||||
<Japanese>ケミライトを取り付け</Japanese>
|
||||
<Japanese>ケミライトを取り付けました</Japanese>
|
||||
<Korean>켐라이트 부착됨</Korean>
|
||||
<Chinese>已附掛螢光棒</Chinese>
|
||||
<Chinesesimp>已附挂萤光棒</Chinesesimp>
|
||||
@ -140,7 +140,7 @@
|
||||
<Italian>Chemlight staccata</Italian>
|
||||
<Hungarian>Chemlight hozzácsatolva</Hungarian>
|
||||
<Russian>Химсвет отсоединён</Russian>
|
||||
<Japanese>ケミライトを外す</Japanese>
|
||||
<Japanese>ケミライトを外しました</Japanese>
|
||||
<Korean>켐라이트 분리됨</Korean>
|
||||
<Chinese>已取下螢光棒</Chinese>
|
||||
<Chinesesimp>已取下萤光棒</Chinesesimp>
|
||||
@ -236,7 +236,7 @@
|
||||
<Polish>Przyczepianie nie powiodło się</Polish>
|
||||
<Hungarian>Hozzácsatolás sikertelen</Hungarian>
|
||||
<Italian>Non si attacca</Italian>
|
||||
<Japanese>取り付けに失敗した</Japanese>
|
||||
<Japanese>取り付けに失敗しました</Japanese>
|
||||
<Korean>부착 실패</Korean>
|
||||
<Chinese>附掛失敗</Chinese>
|
||||
<Chinesesimp>附挂失败</Chinesesimp>
|
||||
@ -252,7 +252,7 @@
|
||||
<Italian>%1<br/>attaccata</Italian>
|
||||
<Hungarian>%1<br/>hozzácsatolva</Hungarian>
|
||||
<Russian>%1<br/>присоединен(-а)</Russian>
|
||||
<Japanese>%1<br/>を取り付けた</Japanese>
|
||||
<Japanese>%1<br/>を取り付けました</Japanese>
|
||||
<Korean>%1<br/>부착됨</Korean>
|
||||
<Chinese>%1<br/>已附掛</Chinese>
|
||||
<Chinesesimp>%1<br/>已附挂</Chinesesimp>
|
||||
@ -268,7 +268,7 @@
|
||||
<Italian>%1<br/>staccata</Italian>
|
||||
<Hungarian>%1<br/>lecsatolva</Hungarian>
|
||||
<Russian>%1<br/>отсоединен(-а)</Russian>
|
||||
<Japanese>%1<br/>を外した</Japanese>
|
||||
<Japanese>%1<br/>を外しました</Japanese>
|
||||
<Korean>%1<br/>분리됨</Korean>
|
||||
<Chinese>%1<br/>已取下</Chinese>
|
||||
<Chinesesimp>%1<br/>已取下</Chinesesimp>
|
||||
|
69
addons/ballistics/ACE_Arsenal_Stats.hpp
Normal file
69
addons/ballistics/ACE_Arsenal_Stats.hpp
Normal file
@ -0,0 +1,69 @@
|
||||
class EGVAR(arsenal,stats) {
|
||||
class statBase;
|
||||
class ACE_barrelTwist: statBase {
|
||||
scope = 2;
|
||||
priority = 1;
|
||||
stats[] = {"ACE_barrelTwist"};
|
||||
displayName= CSTRING(statBarrelTwist);
|
||||
showText = 1;
|
||||
textStatement = QUOTE(params [ARR_2('_stat', '_config')]; private _barrelTwist = getNumber (_config >> _stat select 0); format [ARR_3('%1mm (%2in)',_barrelTwist toFixed 0, (_barrelTwist / 25.4) toFixed 1)]);
|
||||
tabs[] = {{0,1}, {}};
|
||||
};
|
||||
class ACE_barrelLength: statBase {
|
||||
scope = 2;
|
||||
priority = 0;
|
||||
stats[] = {"ACE_barrelLength"};
|
||||
displayName = CSTRING(statBarrelLength);
|
||||
showText = 1;
|
||||
textStatement = QUOTE(params [ARR_2('_stat', '_config')]; private _barrelLength = getNumber (_config >> _stat select 0); format [ARR_3('%1mm (%2in)',_barrelLength toFixed 0, (_barrelLength / 25.4) toFixed 1)]);
|
||||
tabs[] = {{0,1}, {}};
|
||||
};
|
||||
class ACE_ammo: statBase {
|
||||
scope = 2;
|
||||
priority = 5;
|
||||
stats[] = {"ammo", "displayName"};
|
||||
displayName = "$STR_dn_ammo";
|
||||
showText = 1;
|
||||
textStatement = QUOTE(params [ARR_2('_stat', '_config')]; private _ammoDisplayName = getText (configFile >> 'CfgAmmo' >> (getText (_config >> 'ammo')) >> _stat select 1); [ARR_2(_ammoDisplayName, getText (_config >> _stat select 0))] select (_ammoDisplayName == ''));
|
||||
tabs[] = {{}, {4}};
|
||||
};
|
||||
class ACE_ballisticCoef: statBase {
|
||||
scope = 2;
|
||||
priority = 4;
|
||||
stats[] = {"ACE_dragModel","ACE_ballisticCoefficients", "ACE_standardAtmosphere"};
|
||||
displayName= CSTRING(statBallisticCoef);
|
||||
showText= 1;
|
||||
textStatement = QUOTE(params[ARR_2('_stat', '_config')]; private _ammoCfg = (configFile >> 'CfgAmmo' >> (getText (_config >> 'ammo'))); private _ballisticCoef = getArray (_ammoCfg >> _stat select 1); _ballisticCoef sort false; format [ARR_4('%1 G%2 (%3)', _ballisticCoef select 0 ,getNumber (_ammoCfg >> _stat select 0), getText (_ammoCfg >> _stat select 2))]);
|
||||
condition = QUOTE(params[ARR_2('_stat', '_config')]; private _ammoCfg = (configFile >> 'CfgAmmo' >> (getText (_config >> 'ammo'))); !(getArray (_ammoCfg >> _stat select 1) isEqualTo []));
|
||||
tabs[] ={{}, {4}};
|
||||
};
|
||||
class ACE_bulletMass: statBase {
|
||||
scope = 2;
|
||||
priority = 3;
|
||||
stats[] = {"ACE_bulletMass"};
|
||||
displayName = CSTRING(statBulletMass);
|
||||
showText = 1;
|
||||
textStatement = QUOTE(params[ARR_2('_stat', '_config')]; private _ammoWeight = getNumber (configFile >> 'CfgAmmo' >> (getText (_config >> 'ammo')) >> _stat select 0); format [ARR_3('%1g (%2gr)', _ammoWeight toFixed 1, (_ammoWeight * 15.43) toFixed 1)]);
|
||||
condition = QUOTE(params[ARR_2('_stat', '_config')]; getNumber (configFile >> 'CfgAmmo' >> (getText (_config >> 'ammo')) >> _stat select 0) > 0);
|
||||
tabs[] = {{}, {4}};
|
||||
};
|
||||
class ACE_magMuzzleVelocity: statBase {
|
||||
scope = 2;
|
||||
priority = 3;
|
||||
stats[] = {"initSpeed"};
|
||||
displayName= CSTRING(statMuzzleVelocity);
|
||||
showText= 1;
|
||||
textStatement = QUOTE(params[ARR_2('_stat', '_config')]; private _initSpeed = getNumber (_config >> _stat select 0); format [ARR_3('%1 m/s (%2 ft/s)', _initSpeed, (_initSpeed * 3.28084) toFixed 0)]);
|
||||
condition = QUOTE(getNumber (_this select 1 >> (_this select 0) select 0) > 0);
|
||||
tabs[] = {{}, {4}};
|
||||
};
|
||||
class ACE_weaponMuzzleVelocity: statBase {
|
||||
scope = 2;
|
||||
priority = 3;
|
||||
stats[] = {"initSpeed"};
|
||||
displayName= CSTRING(statMuzzleVelocity);
|
||||
showText = 1;
|
||||
textStatement = QUOTE([ARR_2(_this select 0, _this select 1)] call FUNC(statTextStatement_weaponMuzzleVelocity));
|
||||
tabs[] = {{0,1}, {}};
|
||||
};
|
||||
};
|
11
addons/ballistics/CfgEventHandlers.hpp
Normal file
11
addons/ballistics/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,11 @@
|
||||
class Extended_PreStart_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preStart));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
1
addons/ballistics/XEH_PREP.hpp
Normal file
1
addons/ballistics/XEH_PREP.hpp
Normal file
@ -0,0 +1 @@
|
||||
PREP(statTextStatement_weaponMuzzleVelocity);
|
7
addons/ballistics/XEH_preInit.sqf
Normal file
7
addons/ballistics/XEH_preInit.sqf
Normal file
@ -0,0 +1,7 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
ADDON = false;
|
||||
|
||||
PREP_RECOMPILE_START;
|
||||
#include "XEH_PREP.hpp"
|
||||
PREP_RECOMPILE_END;
|
3
addons/ballistics/XEH_preStart.sqf
Normal file
3
addons/ballistics/XEH_preStart.sqf
Normal file
@ -0,0 +1,3 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
#include "XEH_PREP.hpp"
|
@ -14,7 +14,9 @@ class CfgPatches {
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "CfgAmmo.hpp"
|
||||
#include "CfgMagazines.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "ACE_Arsenal_Stats.hpp"
|
||||
|
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Author: Alganthe
|
||||
* Text statement for the weapon muzzle velocity stat
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Not used
|
||||
* 1: item config path (CONFIG)
|
||||
*
|
||||
* Return Value:
|
||||
* String to display
|
||||
*
|
||||
* Public: No
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["", "_config"];
|
||||
|
||||
if (EGVAR(arsenal,currentLeftPanel) == 2002) then {
|
||||
private _primaryMag = primaryWeaponMagazine EGVAR(arsenal,center);
|
||||
|
||||
[primaryWeapon EGVAR(arsenal,center), _primaryMag param [0, ""]]
|
||||
} else {
|
||||
private _primaryMag = handgunMagazine EGVAR(arsenal,center);
|
||||
|
||||
[handgunWeapon EGVAR(arsenal,center), _primaryMag param [0, ""]]
|
||||
} params ["_weapon", "_magazine"];
|
||||
|
||||
private _initSpeed = getNumber (_config >> "initSpeed");
|
||||
|
||||
if (_magazine isEqualTo "") then {
|
||||
_initSpeed
|
||||
} else {
|
||||
private _ammoCfg = (configFile >> "CfgAmmo" >> (getText (configFile >> "CfgMagazines" >> _magazine >> "ammo")));
|
||||
private _barrelLength = getNumber (_config >> "ACE_barrelLength");
|
||||
private _muzzleVelocityTable = getArray (_ammoCfg >> "ACE_muzzleVelocities");
|
||||
private _barrelLengthTable = getArray (_ammoCfg >> "ACE_barrelLengths");
|
||||
|
||||
if (_barrelLength != 0 && {count _muzzleVelocityTable > 0} && {count _barrelLengthTable > 0}) then {
|
||||
private _muzzleVelocity = [_barrelLength, _muzzleVelocityTable, _barrelLengthTable, 0] call EFUNC(advanced_ballistics,calculateBarrelLengthVelocityShift);
|
||||
|
||||
format ["%1 m/s (%2 ft/s)", _muzzleVelocity toFixed 0, (_muzzleVelocity * 3.28084) toFixed 0]
|
||||
} else {
|
||||
_initSpeed
|
||||
};
|
||||
};
|
1
addons/ballistics/functions/script_component.hpp
Normal file
1
addons/ballistics/functions/script_component.hpp
Normal file
@ -0,0 +1 @@
|
||||
#include "\z\ace\addons\ballistics\script_component.hpp"
|
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="Ballistics">
|
||||
<!-- QBU -->
|
||||
@ -2006,6 +2006,8 @@
|
||||
<Hungarian>.338 Scenar</Hungarian>
|
||||
<Japanese>338 Scenar</Japanese>
|
||||
<Korean>.338 Scenar</Korean>
|
||||
<Chinese>.338 Scenar</Chinese>
|
||||
<Chinesesimp>.338 Scenar</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Ballistics_10Rnd_338_300gr_HPBT_Mag_Description">
|
||||
<English>Caliber: 8.6x70mm (300gr Lapua Scenar)<br />Rounds: 10</English>
|
||||
@ -2279,5 +2281,29 @@
|
||||
<Chinese>[ACE] 彈藥補給箱</Chinese>
|
||||
<Chinesesimp>[ACE] 弹药补给箱</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Ballistics_statBarrelTwist">
|
||||
<English>Barrel twist</English>
|
||||
<Japanese>銃身の転度</Japanese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Ballistics_statBarrelLength">
|
||||
<English>Barrel length</English>
|
||||
<French>Longueur du canon</French>
|
||||
<Japanese>銃身長</Japanese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Ballistics_statBallisticCoef">
|
||||
<English>Ballistic coefficient</English>
|
||||
<French>Coefficient ballistique</French>
|
||||
<Japanese>弾道係数</Japanese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Ballistics_statBulletMass">
|
||||
<English>Bullet mass</English>
|
||||
<French>Masse d'une balle</French>
|
||||
<Japanese>弾丸重量</Japanese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Ballistics_statMuzzleVelocity">
|
||||
<English>Muzzle velocity</English>
|
||||
<French>Vitesse à la bouche</French>
|
||||
<Japanese>銃口初速</Japanese>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -85,7 +85,7 @@
|
||||
<Portuguese>Você deve tomá-lo como prisioneiro primeiro!</Portuguese>
|
||||
<Hungarian>Először foglyul kell ejtened őt!</Hungarian>
|
||||
<Russian>Вы должны сначала взять его в плен!</Russian>
|
||||
<Japanese>あなたは先に捕虜を取る必要があります。</Japanese>
|
||||
<Japanese>捕虜を取っている必要があります!</Japanese>
|
||||
<Korean>먼저 포로로 만들어야합니다!</Korean>
|
||||
<Chinese>你必須先逮捕他!</Chinese>
|
||||
<Chinesesimp>你必须先逮捕他!</Chinesesimp>
|
||||
|
@ -330,6 +330,9 @@ class CfgVehicles {
|
||||
GVAR(size) = 2; // 1 = small, 2 = large
|
||||
GVAR(canLoad) = 1;
|
||||
};
|
||||
class Land_RepairDepot_01_base_F: ReammoBox_F { // TanksDLC - Repair Depo Thing (probably too big to safely unload)
|
||||
GVAR(canLoad) = 0;
|
||||
};
|
||||
//"Supply Box" - Small Pallets
|
||||
class B_supplyCrate_F: ReammoBox_F {
|
||||
GVAR(size) = 6;
|
||||
@ -421,7 +424,6 @@ class CfgVehicles {
|
||||
};
|
||||
|
||||
// objects
|
||||
class Lamps_base_F;
|
||||
class RoadCone_F: ThingX {
|
||||
GVAR(size) = 1;
|
||||
GVAR(canLoad) = 1;
|
||||
@ -429,10 +431,22 @@ class CfgVehicles {
|
||||
class RoadBarrier_F: RoadCone_F {
|
||||
GVAR(size) = 2;
|
||||
};
|
||||
|
||||
class Lamps_base_F;
|
||||
class Land_PortableLight_single_F: Lamps_base_F {
|
||||
GVAR(size) = 1;
|
||||
GVAR(size) = 2;
|
||||
GVAR(canLoad) = 1;
|
||||
};
|
||||
class FloatingStructure_F;
|
||||
class Land_Camping_Light_F: FloatingStructure_F {
|
||||
GVAR(size) = 0.2;
|
||||
GVAR(canLoad) = 1;
|
||||
};
|
||||
class Land_Camping_Light_off_F: ThingX {
|
||||
GVAR(size) = 0.2;
|
||||
GVAR(canLoad) = 1;
|
||||
};
|
||||
|
||||
|
||||
class Scrapyard_base_F;
|
||||
class Land_PaperBox_closed_F: Scrapyard_base_F {
|
||||
@ -569,16 +583,6 @@ class CfgVehicles {
|
||||
GVAR(size) = 50;
|
||||
};
|
||||
|
||||
class Ruins_F;
|
||||
class Land_Cargo20_military_ruins_F: Ruins_F {
|
||||
class EventHandlers {
|
||||
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
|
||||
};
|
||||
|
||||
GVAR(space) = 49;
|
||||
GVAR(size) = 50;
|
||||
};
|
||||
|
||||
class Land_Cargo20_orange_F: Cargo_base_F {
|
||||
class EventHandlers {
|
||||
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
|
||||
@ -685,15 +689,6 @@ class CfgVehicles {
|
||||
GVAR(size) = 100;
|
||||
};
|
||||
|
||||
class Land_Cargo40_military_ruins_F: Ruins_F {
|
||||
class EventHandlers {
|
||||
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
|
||||
};
|
||||
|
||||
GVAR(space) = 99;
|
||||
GVAR(size) = 100;
|
||||
};
|
||||
|
||||
class Land_Cargo40_orange_F: Cargo_base_F {
|
||||
class EventHandlers {
|
||||
class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {};
|
||||
|
@ -61,23 +61,91 @@
|
||||
[QGVAR(initObject), DFUNC(initObject)] call CBA_fnc_addEventHandler;
|
||||
[QGVAR(initVehicle), DFUNC(initVehicle)] call CBA_fnc_addEventHandler;
|
||||
|
||||
// Add all the vehicle init EHs (require initPost for set/get variables)
|
||||
["LandVehicle", "initPost", DFUNC(initVehicle), nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||
["Air", "initPost", DFUNC(initVehicle), nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||
["Ship_F", "initPost", DFUNC(initVehicle), nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||
|
||||
// Add all the object init EHs
|
||||
["StaticWeapon", "initPost", DFUNC(initObject), nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||
["Land_PortableLight_single_F", "initPost", DFUNC(initObject), nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||
["ACE_ConcertinaWireCoil", "initPost", DFUNC(initObject), nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||
GVAR(vehicleAction) = [
|
||||
QGVAR(openMenu), localize LSTRING(openMenu), "",
|
||||
{
|
||||
//IGNORE_PRIVATE_WARNING ["_target", "_player"];
|
||||
GVAR(interactionVehicle) = _target;
|
||||
GVAR(interactionParadrop) = false;
|
||||
createDialog QGVAR(menu);
|
||||
},
|
||||
{
|
||||
//IGNORE_PRIVATE_WARNING ["_target", "_player"];
|
||||
GVAR(enable) &&
|
||||
{(_target getVariable [QGVAR(hasCargo), getNumber (configFile >> "CfgVehicles" >> (typeOf _target) >> QGVAR(hasCargo)) == 1])} &&
|
||||
{locked _target < 2} &&
|
||||
{([_player, _target] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE} &&
|
||||
{alive _target} &&
|
||||
{[_player, _target, ["isNotSwimming"]] call EFUNC(common,canInteractWith)}
|
||||
}
|
||||
] call EFUNC(interact_menu,createAction);
|
||||
|
||||
// Add all the vehicle/object init EHs
|
||||
["ThingX", "initPost", {
|
||||
_this call DFUNC(initObject); _this call DFUNC(initVehicle);
|
||||
}, nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||
["Land_PaperBox_closed_F", "initPost", {
|
||||
_this call DFUNC(initObject); _this call DFUNC(initVehicle);
|
||||
}, nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||
["PlasticCase_01_base_F", "initPost", {
|
||||
_this call DFUNC(initObject); _this call DFUNC(initVehicle);
|
||||
}, nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||
GVAR(objectAction) = [
|
||||
QGVAR(load), localize LSTRING(loadObject), "a3\ui_f\data\IGUI\Cfg\Actions\loadVehicle_ca.paa",
|
||||
{
|
||||
params ["_target", "_player"];
|
||||
[_player, _target] call FUNC(startLoadIn);
|
||||
},
|
||||
{
|
||||
//IGNORE_PRIVATE_WARNING ["_target", "_player"];
|
||||
GVAR(enable) &&
|
||||
{(_target getVariable [QGVAR(canLoad), getNumber (configFile >> "CfgVehicles" >> (typeOf _target) >> QGVAR(canLoad))]) in [true, 1]} &&
|
||||
{locked _target < 2} &&
|
||||
{alive _target} &&
|
||||
{[_player, _target, ["isNotSwimming"]] call EFUNC(common,canInteractWith)} &&
|
||||
{0 < {
|
||||
private _type = typeOf _x;
|
||||
private _hasCargoPublic = _x getVariable [QGVAR(hasCargo), false];
|
||||
private _hasCargoConfig = getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(hasCargo)) == 1;
|
||||
(_hasCargoPublic || _hasCargoConfig) && {_x != _target} &&
|
||||
{([_target, _x] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE}
|
||||
} count (nearestObjects [_player, GVAR(cargoHolderTypes), (MAX_LOAD_DISTANCE + 10)])}
|
||||
},
|
||||
LINKFUNC(addCargoVehiclesActions)
|
||||
] call EFUNC(interact_menu,createAction);
|
||||
|
||||
|
||||
private _initVehicleClasses = ["ThingX", "LandVehicle", "Air", "Ship_F"];
|
||||
private _initObjectClasses = ["ThingX", "StaticWeapon"];
|
||||
{
|
||||
[_x, "initPost", DFUNC(initVehicle), nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||
} forEach _initVehicleClasses;
|
||||
{
|
||||
[_x, "initPost", DFUNC(initObject), nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||
} forEach _initObjectClasses;
|
||||
|
||||
// find all remaining configured classes and init them
|
||||
{
|
||||
private _class = configName _x;
|
||||
// init vehicle
|
||||
if (
|
||||
1 == getNumber (_x >> QGVAR(hasCargo))
|
||||
&& {{if (_class isKindOf _x) exitWith {false}; true} forEach _initVehicleClasses}
|
||||
) then {
|
||||
if (_class isKindOf "Static") then {
|
||||
if (2 == getNumber (_x >> "scope")) then {
|
||||
[_class, 0, ["ACE_MainActions"], GVAR(vehicleAction)] call EFUNC(interact_menu,addActionToClass);
|
||||
GVAR(initializedVehicleClasses) pushBack _class;
|
||||
};
|
||||
} else {
|
||||
[_class, "initPost", DFUNC(initVehicle), nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||
_initVehicleClasses pushBack _class;
|
||||
};
|
||||
};
|
||||
// init object
|
||||
if (
|
||||
1 == getNumber (_x >> QGVAR(canLoad))
|
||||
&& {{if (_class isKindOf _x) exitWith {false}; true} forEach _initObjectClasses}
|
||||
) then {
|
||||
if (_class isKindOf "Static") then {
|
||||
if (2 == getNumber (_x >> "scope")) then {
|
||||
[_class, 0, ["ACE_MainActions"], GVAR(objectAction)] call EFUNC(interact_menu,addActionToClass);
|
||||
GVAR(initializedItemClasses) pushBack _class;
|
||||
};
|
||||
} else {
|
||||
[_class, "initPost", DFUNC(initObject), nil, nil, true] call CBA_fnc_addClassEventHandler;
|
||||
_initObjectClasses pushBack _class;
|
||||
};
|
||||
};
|
||||
} forEach ("true" configClasses (configFile >> "CfgVehicles"));
|
||||
|
@ -41,38 +41,9 @@ if (_object getVariable [QGVAR(initObject),false]) exitWith {};
|
||||
if (_canLoadConfig) then {
|
||||
GVAR(initializedItemClasses) pushBack _type;
|
||||
TRACE_1("Adding load cargo action to class", _type);
|
||||
[_type, 0, ["ACE_MainActions"], GVAR(objectAction)] call EFUNC(interact_menu,addActionToClass);
|
||||
} else {
|
||||
_object setVariable [QGVAR(initObject),true];
|
||||
TRACE_1("Adding load cargo action to object", _object);
|
||||
[_object, 0, ["ACE_MainActions"], GVAR(objectAction)] call EFUNC(interact_menu,addActionToObject);
|
||||
};
|
||||
|
||||
// Vehicles with passengers inside are prevented from being loaded in `fnc_canLoadItemIn`
|
||||
private _condition = {
|
||||
//IGNORE_PRIVATE_WARNING ["_target", "_player"];
|
||||
GVAR(enable) &&
|
||||
{(_target getVariable [QGVAR(canLoad), getNumber (configFile >> "CfgVehicles" >> (typeOf _target) >> QGVAR(canLoad))]) in [true, 1]} &&
|
||||
{locked _target < 2} &&
|
||||
{alive _target} &&
|
||||
{[_player, _target, ["isNotSwimming"]] call EFUNC(common,canInteractWith)} &&
|
||||
{0 < {
|
||||
private _type = typeOf _x;
|
||||
private _hasCargoPublic = _x getVariable [QGVAR(hasCargo), false];
|
||||
private _hasCargoConfig = getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(hasCargo)) == 1;
|
||||
(_hasCargoPublic || _hasCargoConfig) && {_x != _target} &&
|
||||
{([_target, _x] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE}
|
||||
} count (nearestObjects [_player, GVAR(cargoHolderTypes), (MAX_LOAD_DISTANCE + 10)])}
|
||||
};
|
||||
private _statement = {
|
||||
params ["_target", "_player"];
|
||||
[_player, _target] call FUNC(startLoadIn);
|
||||
};
|
||||
private _text = localize LSTRING(loadObject);
|
||||
private _icon = "a3\ui_f\data\IGUI\Cfg\Actions\loadVehicle_ca.paa";
|
||||
|
||||
private _action = [QGVAR(load), _text, _icon, _statement, _condition, {call FUNC(addCargoVehiclesActions)}] call EFUNC(interact_menu,createAction);
|
||||
if (_canLoadConfig) then {
|
||||
[_type, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToClass);
|
||||
} else {
|
||||
[_object, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToObject);
|
||||
};
|
||||
|
||||
|
@ -61,34 +61,11 @@ if (_vehicle getVariable [QGVAR(initVehicle),false]) exitWith {};
|
||||
if (_hasCargoConfig) then {
|
||||
GVAR(initializedVehicleClasses) pushBack _type;
|
||||
TRACE_1("Adding unload cargo action to class", _type);
|
||||
[_type, 0, ["ACE_MainActions"], GVAR(vehicleAction)] call EFUNC(interact_menu,addActionToClass);
|
||||
} else {
|
||||
_vehicle setVariable [QGVAR(initVehicle),true];
|
||||
TRACE_1("Adding unload cargo action to object", _vehicle);
|
||||
};
|
||||
|
||||
private _condition = {
|
||||
//IGNORE_PRIVATE_WARNING ["_target", "_player"];
|
||||
GVAR(enable) &&
|
||||
{(_target getVariable [QGVAR(hasCargo), getNumber (configFile >> "CfgVehicles" >> (typeOf _target) >> QGVAR(hasCargo)) == 1])} &&
|
||||
{locked _target < 2} &&
|
||||
{([_player, _target] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE} &&
|
||||
{alive _target} &&
|
||||
{[_player, _target, ["isNotSwimming"]] call EFUNC(common,canInteractWith)}
|
||||
};
|
||||
private _statement = {
|
||||
//IGNORE_PRIVATE_WARNING ["_target", "_player"];
|
||||
GVAR(interactionVehicle) = _target;
|
||||
GVAR(interactionParadrop) = false;
|
||||
createDialog QGVAR(menu);
|
||||
};
|
||||
private _text = localize LSTRING(openMenu);
|
||||
private _icon = "";
|
||||
|
||||
private _action = [QGVAR(openMenu), _text, _icon, _statement, _condition] call EFUNC(interact_menu,createAction);
|
||||
if (_hasCargoConfig) then {
|
||||
[_type, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToClass);
|
||||
} else {
|
||||
[_vehicle, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToObject);
|
||||
[_vehicle, 0, ["ACE_MainActions"], GVAR(vehicleAction)] call EFUNC(interact_menu,addActionToObject);
|
||||
};
|
||||
|
||||
// Add the paradrop self interaction for planes and helicopters
|
||||
|
@ -65,7 +65,7 @@ _itemObject setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vecto
|
||||
|
||||
private _velocity = velocity _item;
|
||||
|
||||
_item attachTo [_parachute, [0,0,-1]];
|
||||
_item attachTo [_parachute, [0,0,1]];
|
||||
_parachute setVelocity _velocity;
|
||||
|
||||
private _light = "Chemlight_yellow" createVehicle [0,0,0];
|
||||
|
@ -147,7 +147,7 @@
|
||||
<Italian>%1<br/>caricato su<br/>%2</Italian>
|
||||
<Hungarian>%1<br/>berakodva ide:<br/>%2</Hungarian>
|
||||
<Russian>%1<br/>загружен в<br/>%2</Russian>
|
||||
<Japanese>%1<br/>は<br/>%2へ積み込まれた</Japanese>
|
||||
<Japanese>%1<br/>は<br/>%2へ積み込まれました</Japanese>
|
||||
<Korean>%1<br/>는<br/>%2 에 실림</Korean>
|
||||
<Chinese>%1<br/>裝載至<br/>%2</Chinese>
|
||||
<Chinesesimp>%1<br/>装载至<br/>%2</Chinesesimp>
|
||||
@ -163,7 +163,7 @@
|
||||
<Italian>Hai scaricato<br/>%1 da<br/>%2</Italian>
|
||||
<Hungarian>1%<br/>kirakodva ebből:<br/>%2</Hungarian>
|
||||
<Russian>%1<br/>разгружен из<br/>%2</Russian>
|
||||
<Japanese><br/>%1が<br/>%2から降ろされた</Japanese>
|
||||
<Japanese><br/>%1が<br/>%2から降ろされました</Japanese>
|
||||
<Korean>%1<br/>는<br/>%2 에서 내려짐</Korean>
|
||||
<Chinese>從<br/>%2卸載<br/>%1</Chinese>
|
||||
<Chinesesimp>从<br/>%2卸载<br/>%1</Chinesesimp>
|
||||
@ -178,7 +178,7 @@
|
||||
<Italian>Caricando</Italian>
|
||||
<Spanish>Cargando</Spanish>
|
||||
<French>Chargement de la cargaison</French>
|
||||
<Japanese>カーゴへ積み込んでいる</Japanese>
|
||||
<Japanese>カーゴへ積み込んでいます</Japanese>
|
||||
<Korean>화물 싣기</Korean>
|
||||
<Chinese>裝載貨物中</Chinese>
|
||||
<Chinesesimp>装载货物中</Chinesesimp>
|
||||
@ -193,7 +193,7 @@
|
||||
<Italian>Scaricando</Italian>
|
||||
<Spanish>Descargando</Spanish>
|
||||
<French>Déchargement de la cargaison</French>
|
||||
<Japanese>カーゴから降ろしている</Japanese>
|
||||
<Japanese>カーゴから降ろしています</Japanese>
|
||||
<Korean>화물 내리기</Korean>
|
||||
<Chinese>卸載貨物中</Chinese>
|
||||
<Chinesesimp>卸载货物中</Chinesesimp>
|
||||
@ -208,7 +208,7 @@
|
||||
<Italian>%1<br/>non può essere caricato</Italian>
|
||||
<Spanish>%1<br/>no pudo ser cargado</Spanish>
|
||||
<French>%1<br /> n'a pas pu être chargé</French>
|
||||
<Japanese>%1<br/>は積み込めなかった</Japanese>
|
||||
<Japanese>%1<br/>は積み込めませんでした</Japanese>
|
||||
<Korean>%1<br/>이 실릴 수가 없습니다</Korean>
|
||||
<Chinese>%1<br/>無法被裝載</Chinese>
|
||||
<Chinesesimp>%1<br/>无法被装载</Chinesesimp>
|
||||
@ -223,7 +223,7 @@
|
||||
<Italian>%1<br/>non può essere scaricato</Italian>
|
||||
<Spanish>%1<br/>no pudo ser descargado</Spanish>
|
||||
<French>%1<br /> n'a pas pu être déchargé</French>
|
||||
<Japanese>%1<br/>は降ろせなかった</Japanese>
|
||||
<Japanese>%1<br/>は降ろせませんでした</Japanese>
|
||||
<Korean>%1<br/>이 내려질 수가 없습니다</Korean>
|
||||
<Chinese>%1<br/>無法被卸載</Chinese>
|
||||
<Chinesesimp>%1<br/>无法被卸载</Chinesesimp>
|
||||
|
20
addons/common/CfgUIGrids.hpp
Normal file
20
addons/common/CfgUIGrids.hpp
Normal file
@ -0,0 +1,20 @@
|
||||
class CfgUIGrids {
|
||||
class IGUI {
|
||||
class Presets {
|
||||
class Arma3 {
|
||||
class Variables {
|
||||
grid_ACE_displayText[] = {{((safezoneX + safezoneW) - (10 *(((safezoneW / safezoneH) min 1.2) / 40)) - 2.9 *(((safezoneW / safezoneH) min 1.2) / 40)),safeZoneY + 0.175 * safezoneH, (10 *(((safezoneW / safezoneH) min 1.2) / 40)), (3 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))}, "(((safezoneW / safezoneH) min 1.2) / 40)","((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class Variables {
|
||||
class grid_ACE_displayText {
|
||||
displayName = "ACE Hint";
|
||||
description = "Textual in game feedback to the player.";
|
||||
preview = QPATHTOF(UI\ACE_Hint_Preview_ca.paa);
|
||||
saveToProfile[] = {0,1};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
BIN
addons/common/UI/ACE_Hint_Preview_ca.paa
Normal file
BIN
addons/common/UI/ACE_Hint_Preview_ca.paa
Normal file
Binary file not shown.
@ -113,7 +113,6 @@ PREP(isMedic);
|
||||
PREP(isModLoaded);
|
||||
PREP(isPlayer);
|
||||
PREP(isSwimming);
|
||||
PREP(isUnderwater);
|
||||
PREP(lightIntensityFromObject);
|
||||
PREP(loadPerson);
|
||||
PREP(loadPersonLocal);
|
||||
@ -146,6 +145,7 @@ PREP(runTests);
|
||||
PREP(sanitizeString);
|
||||
PREP(sendRequest);
|
||||
PREP(serverLog);
|
||||
PREP(setAimCoef);
|
||||
PREP(setApproximateVariablePublic);
|
||||
PREP(setDefinedVariable);
|
||||
PREP(setDisableUserInputStatus);
|
||||
|
@ -48,7 +48,8 @@
|
||||
[QGVAR(setHidden), {
|
||||
params ["_object", "_set"];
|
||||
TRACE_2("setHidden EH",_object,_set);
|
||||
private _vis = _object getUnitTrait "camouflageCoef";
|
||||
// May report nil. Default to factor 1.
|
||||
private _vis = [_object getUnitTrait "camouflageCoef"] param [0, 1];
|
||||
if (_set > 0) then {
|
||||
if (_vis != 0) then {
|
||||
_object setVariable [QGVAR(oldVisibility), _vis];
|
||||
|
@ -65,27 +65,7 @@ class ACE_Rsc_Control_Base {
|
||||
#include <HintConfig.hpp>
|
||||
#include <RscInfoType.hpp>
|
||||
#include "CompassControl.hpp"
|
||||
|
||||
class CfgUIGrids {
|
||||
class IGUI {
|
||||
class Presets {
|
||||
class Arma3 {
|
||||
class Variables {
|
||||
grid_ACE_displayText[] = {{((safezoneX + safezoneW) - (10 *(((safezoneW / safezoneH) min 1.2) / 40)) - 2.9 *(((safezoneW / safezoneH) min 1.2) / 40)),safeZoneY + 0.175 * safezoneH, (10 *(((safezoneW / safezoneH) min 1.2) / 40)), (2 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))}, "(((safezoneW / safezoneH) min 1.2) / 40)","((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class Variables {
|
||||
class grid_ACE_displayText {
|
||||
displayName = "ACE Hint";
|
||||
description = "Textual in game feedback to the player.";
|
||||
preview = "\a3\Ui_f\data\GUI\Cfg\UIGrids\grid_hint_ca.paa";
|
||||
saveToProfile[] = {0,1};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
#include "CfgUIGrids.hpp"
|
||||
|
||||
class ACE_Extensions {
|
||||
extensions[] = {};
|
||||
|
@ -15,11 +15,11 @@
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
ACE_isMapEnabled = call {private _config = missionConfigFile >> "showMap"; !isNumber _config || {getNumber _config == 1}}; // default value is 1, so do isNumber check first
|
||||
ACE_isCompassEnabled = call {private _config = missionConfigFile >> "showCompass"; !isNumber _config || {getNumber _config == 1}};
|
||||
ACE_isWatchEnabled = call {private _config = missionConfigFile >> "showWatch"; !isNumber _config || {getNumber _config == 1}};
|
||||
ACE_isRadioEnabled = call {private _config = missionConfigFile >> "showRadio"; !isNumber _config || {getNumber _config == 1}};
|
||||
ACE_isGPSEnabled = call {private _config = missionConfigFile >> "showGPS"; !isNumber _config || {getNumber _config == 1}};
|
||||
ACE_isMapEnabled = getMissionConfigValue ["showMap", 1] in [true, 1];
|
||||
ACE_isCompassEnabled = getMissionConfigValue ["showCompass", 1] in [true, 1];
|
||||
ACE_isWatchEnabled = getMissionConfigValue ["showWatch", 1] in [true, 1];
|
||||
ACE_isRadioEnabled = getMissionConfigValue ["showRadio", 1] in [true, 1];
|
||||
ACE_isGPSEnabled = getMissionConfigValue ["showGPS", 1] in [true, 1];
|
||||
|
||||
GVAR(AssignedItems) = [];
|
||||
GVAR(AssignedItemsInfo) = [];
|
||||
|
@ -25,7 +25,7 @@ params ["_params", "_function", "_namespace", "_uid", "_duration", "_event"];
|
||||
if ((_namespace getVariable [_uid, [-99999]]) select 0 < diag_tickTime) then {
|
||||
_namespace setVariable [_uid, [diag_tickTime + _duration, _params call _function]];
|
||||
|
||||
// Does the cache needs to be cleared on an event?
|
||||
// Does the cache need to be cleared on an event?
|
||||
if (!isNil "_event") then {
|
||||
private _varName = format [QGVAR(clearCache_%1), _event];
|
||||
private _cacheList = missionNamespace getVariable _varName;
|
||||
|
@ -85,17 +85,18 @@ for "_index" from 0 to (_countOptions - 1) do {
|
||||
};
|
||||
};
|
||||
|
||||
_settingsConfig = missionConfigFile >> "ACE_Settings";
|
||||
_countOptions = count _settingsConfig;
|
||||
private _missionSettingsConfig = missionConfigFile >> "ACE_Settings";
|
||||
_countOptions = count _missionSettingsConfig;
|
||||
TRACE_1("Reading settings from missionConfigFile",_countOptions);
|
||||
for "_index" from 0 to (_countOptions - 1) do {
|
||||
private _optionEntry = _settingsConfig select _index;
|
||||
private _optionEntry = _missionSettingsConfig select _index;
|
||||
private _settingName = configName _optionEntry;
|
||||
if ((toLower _settingName) in GVAR(cbaSettings_forcedSettings)) then {
|
||||
WARNING_1("Setting [%1] - Already Forced - ignoring missionConfig",_varName);
|
||||
} else {
|
||||
if ((isNil _settingName) && {(getNumber (_settingsConfig >> _settingName >> "movedToSQF")) == 0}) then {
|
||||
// New setting, that was first defined in missionConfigFile
|
||||
INFO_1("Creating new CBA setting for ace_setting from mission config [%1]",_settingName);
|
||||
[_optionEntry] call FUNC(cbaSettings_loadFromConfig);
|
||||
} else {
|
||||
private _value = (_optionEntry >> "value") call BIS_fnc_getCfgData;
|
||||
|
@ -67,6 +67,7 @@ private _settings = configProperties [configFile >> "ACE_Settings", "(isClass _x
|
||||
_valueTitles pushBack (if ((_x select [0, 1]) == "$") then {localize (_x select [1]);} else {_x});
|
||||
} forEach (getArray (_config >> "values"));
|
||||
_cbaValueInfo = [_values, _valueTitles, getNumber (_config >> "value")];
|
||||
_cbaValueInfoHint = "[values, titles, defaultIndex]";
|
||||
} else {
|
||||
_cbaSettingType = "SLIDER"; // [_min, _max, _default, _trailingDecimals]
|
||||
_cbaValueInfo = if (isArray (_config >> "sliderSettings")) then {
|
||||
@ -116,7 +117,7 @@ private _settings = configProperties [configFile >> "ACE_Settings", "(isClass _x
|
||||
_output pushBack format [" %1, // %2", _cbaValueInfo, _cbaValueInfoHint];
|
||||
_output pushBack format [" %1, // isGlobal", _cbaIsGlobal];
|
||||
if ((_varName select [0, 4]) == "ACE_") then {
|
||||
_output pushBack format [" {[QGVAR(%1), _this] call EFUNC(common,cbaSettings_settingChanged)}] call CBA_settings_fnc_init;", _gvarName];
|
||||
_output pushBack format [" {[QGVAR(%1), _this] call EFUNC(common,cbaSettings_settingChanged)}", _gvarName];
|
||||
} else {
|
||||
_output pushBack format [" {[""%1"", _this] call ace_common_fnc_cbaSettings_settingChanged}", _varName];
|
||||
};
|
||||
|
@ -49,25 +49,23 @@ private _ctrlHint = uiNamespace getVariable "ACE_ctrlHint";
|
||||
|
||||
_ctrlHint ctrlSetBackgroundColor GVAR(displayTextColor);
|
||||
_ctrlHint ctrlSetTextColor GVAR(displayTextFontColor);
|
||||
/*
|
||||
// This does not function at the moment. Has been disabled until it fixed.
|
||||
|
||||
// Use profile settings from CfgUIGrids.hpp
|
||||
private _xPos = profilenamespace getVariable ["IGUI_GRID_ACE_displayText_X", ((safezoneX + safezoneW) - (10 *(((safezoneW / safezoneH) min 1.2) / 40)) - 2.9 *(((safezoneW / safezoneH) min 1.2) / 40))];
|
||||
private _yPos = profilenamespace getVariable ["IGUI_GRID_ACE_displayText_Y", safeZoneY + 0.175 * safezoneH];
|
||||
private _wPos = profilenamespace getVariable ["IGUI_GRID_ACE_displayText_W", (10 *(((safezoneW / safezoneH) min 1.2) / 40))];
|
||||
private _hPos = profilenamespace getVariable ["IGUI_GRID_ACE_displayText_H", (2 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))];
|
||||
*/
|
||||
|
||||
private _xPos = ((safezoneX + safezoneW) - (_width *(((safezoneW / safezoneH) min 1.2) / 40)) - 2.9 *(((safezoneW / safezoneH) min 1.2) / 40));
|
||||
private _yPos = safeZoneY + 0.175 * safezoneH;
|
||||
private _wPos = (_width *(((safezoneW / safezoneH) min 1.2) / 40));
|
||||
private _hPos = (2 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25));
|
||||
private _hPos = _size * (2 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25));
|
||||
|
||||
// Ensure still in bounds for large width/height
|
||||
_xPos = safezoneX max (_xPos min (safezoneX + safezoneW - _wPos));
|
||||
_yPos = safeZoneY max (_yPos min (safeZoneY + safezoneH - _hPos));
|
||||
|
||||
// Zeus Interface Open and Display would be under the "CREATE" list
|
||||
if (!isNull curatorCamera) then {
|
||||
_xPos = _xPos min ((safezoneX + safezoneW - 12.5 * (((safezoneW / safezoneH) min 1.2) / 40)) - _wPos);
|
||||
};
|
||||
|
||||
private _position = [_xPos, _yPos, _wPos, _size * _hPos];
|
||||
private _position = [_xPos, _yPos, _wPos, _hPos];
|
||||
|
||||
_ctrlHint ctrlSetPosition _position;
|
||||
_ctrlHint ctrlCommit 0;
|
||||
|
@ -27,6 +27,7 @@
|
||||
!(
|
||||
isNull curatorCamera && // Curator
|
||||
{!GETMVAR(EGVAR(spectator,isSet),false)} && // ACE Spectator
|
||||
{GETMVAR(EGVAR(huntir,stop),true)} && // ACE Hunt IR
|
||||
{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
|
||||
|
@ -1,32 +0,0 @@
|
||||
/*
|
||||
* Author: Glowbal
|
||||
* Check if unit's head is underwater
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
*
|
||||
* Return Value:
|
||||
* If unit's head is underwater <BOOL>
|
||||
*
|
||||
* Example:
|
||||
* [bob] call ace_common_fnc_isUnderwater
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
ACE_DEPRECATED(QFUNC(isUnderwater),"3.13.0","underwater OBJECT");
|
||||
|
||||
params [["_unit", objNull, [objNull]]];
|
||||
|
||||
private _return = false;
|
||||
|
||||
if (surfaceIsWater getPosASL _unit) then {
|
||||
private _pos = _unit modelToWorldVisual (_unit selectionPosition "head");
|
||||
|
||||
if (_pos select 2 < 0) then {
|
||||
_return = true;
|
||||
};
|
||||
};
|
||||
|
||||
_return
|
@ -79,6 +79,21 @@ if (_lightSource isKindOf "CAManBase") then {
|
||||
|
||||
} forEach _lights;
|
||||
|
||||
if (isCollisionLightOn _lightSource) then {
|
||||
private _markerLights = [
|
||||
_lightSource,
|
||||
{configProperties [configFile >> "CfgVehicles" >> typeOf _this >> "MarkerLights", "isClass _x", true]},
|
||||
uiNamespace,
|
||||
format [QEGVAR(cache,MarkerLights_%1), typeOf _lightSource],
|
||||
1E11
|
||||
] call FUNC(cachedCall);
|
||||
{
|
||||
private _position = _lightSource modelToWorld (_lightSource selectionPosition getText (_x >> "name"));
|
||||
private _distance = _unitPos distance _position;
|
||||
_lightLevel = _lightLevel max (linearConversion [0, 10, _distance, 1, 0, true] * linearConversion [0, 1300, getNumber (_x >> "intensity"), 0, 1, true]);
|
||||
} forEach _markerLights;
|
||||
};
|
||||
|
||||
// handle campfires
|
||||
if (inflamed _lightSource) then {
|
||||
private _distance = _unitPos distance position _lightSource;
|
||||
|
51
addons/common/functions/fnc_setAimCoef.sqf
Normal file
51
addons/common/functions/fnc_setAimCoef.sqf
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Author: xrufix, Glowbal
|
||||
* Handle set AimCoef calls. Will use the highest available setting.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Unit <OBJECT>
|
||||
* 1: Unique ID <STRING>
|
||||
* 2: Aim coefficient (a higher value causes more shaking) <NUMBER>
|
||||
* 3: Add (true) or remove (false) <BOOL> (default: true)
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*
|
||||
* Example:
|
||||
* [player, "ace_advanced_fatigue", 1, true] call ace_common_fnc_setAimCoef
|
||||
*
|
||||
* Public: Yes
|
||||
*/
|
||||
#include "script_component.hpp"
|
||||
|
||||
params ["_unit", "_id", "_setting", ["_add", true]];
|
||||
|
||||
private _exists = false;
|
||||
private _highestCoef = 1;
|
||||
private _map = _unit getVariable [QGVAR(setAimCoefMap), []];
|
||||
|
||||
_map = _map select {
|
||||
_x params ["_xID", "_xSetting"];
|
||||
if (_id == _xID) then {
|
||||
_exists = true;
|
||||
if (_add) then {
|
||||
_x set [1, _setting];
|
||||
_highestCoef = _highestCoef max _setting;
|
||||
true
|
||||
} else {
|
||||
false
|
||||
};
|
||||
} else {
|
||||
_highestCoef = _highestCoef max _xSetting;
|
||||
true
|
||||
};
|
||||
};
|
||||
|
||||
if (!_exists && _add) then {
|
||||
_highestCoef = _highestCoef max _setting;
|
||||
_map pushBack [_id, _setting];
|
||||
};
|
||||
|
||||
// Update the value
|
||||
_unit setVariable [QGVAR(setAimCoefMap), _map];
|
||||
_unit setCustomAimCoef _highestCoef;
|
@ -3,9 +3,9 @@
|
||||
* Handle set volume calls. Will use the lowest available volume setting.
|
||||
*
|
||||
* Arguments:
|
||||
* 0: id <STRING>
|
||||
* 1: settings <NUMBER>
|
||||
* 2: add [true] OR remove [false] (default: true) <BOOL>
|
||||
* 0: ID <STRING>
|
||||
* 1: Settings <NUMBER>
|
||||
* 2: Add (true) or remove (false) <BOOL> (default: true)
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
|
@ -4,7 +4,7 @@
|
||||
*
|
||||
* Arguments:
|
||||
* 0: Text <ANY>
|
||||
* 1: Color <ARRAY>
|
||||
* 1: Color <ARRAY, STRING>
|
||||
*
|
||||
* Return Value:
|
||||
* Text <STRING>
|
||||
@ -20,12 +20,14 @@ params ["_string", "_color"];
|
||||
|
||||
_string = format ["%1", _string];
|
||||
|
||||
_color = (
|
||||
[255 * (_color select 0), 2] call FUNC(toHex)
|
||||
) + (
|
||||
[255 * (_color select 1), 2] call FUNC(toHex)
|
||||
) + (
|
||||
[255 * (_color select 2), 2] call FUNC(toHex)
|
||||
);
|
||||
if (_color isEqualType []) then {
|
||||
_color = "#" + (
|
||||
[255 * (_color select 0), 2] call FUNC(toHex)
|
||||
) + (
|
||||
[255 * (_color select 1), 2] call FUNC(toHex)
|
||||
) + (
|
||||
[255 * (_color select 2), 2] call FUNC(toHex)
|
||||
);
|
||||
};
|
||||
|
||||
parseText format ["<t align='center' color='#%2' >%1</t>", _string, _color]
|
||||
parseText format ["<t align='center' color='%1' >%2</t>", _color, _string]
|
||||
|
@ -20,9 +20,10 @@ params ["_enabled"];
|
||||
if (!_enabled) exitWith {
|
||||
if (isNil QGVAR(laserKeyDownEH)) exitWith {};
|
||||
["KeyDown", GVAR(laserKeyDownEH)] call CBA_fnc_removeDisplayHandler;
|
||||
["weapon", GVAR(laserWeaponEH)] call CBA_fnc_removePlayerEventHandler;
|
||||
["loadout", GVAR(laserLoadoutEH)] call CBA_fnc_removePlayerEventHandler;
|
||||
["turret", GVAR(laserTurretEH)] call CBA_fnc_removePlayerEventHandler;
|
||||
["vehicle", GVAR(laserVehicleEH)] call CBA_fnc_removePlayerEventHandler;
|
||||
["weapon", GVAR(laserWeaponEH)] call CBA_fnc_removePlayerEventHandler;
|
||||
};
|
||||
|
||||
GVAR(laserKeyDownEH) = ["KeyDown", {
|
||||
@ -42,7 +43,7 @@ GVAR(laserKeyDownEH) = ["KeyDown", {
|
||||
}] call CBA_fnc_addDisplayHandler;
|
||||
|
||||
private _laserEH = {
|
||||
if (sunOrMoon > 0.5) exitWith {};
|
||||
if (sunOrMoon == 1) exitWith {};
|
||||
params ["_player"];
|
||||
private _weaponIndex = [_player, currentWeapon _player] call FUNC(getWeaponIndex);
|
||||
if (
|
||||
@ -60,6 +61,7 @@ private _laserEH = {
|
||||
] call CBA_fnc_waitUntilAndExecute;
|
||||
};
|
||||
|
||||
GVAR(laserWeaponEH) = ["weapon", _laserEH] call CBA_fnc_addPlayerEventHandler;
|
||||
GVAR(laserLoadoutEH) = ["loadout", _laserEH] call CBA_fnc_addPlayerEventHandler;
|
||||
GVAR(laserTurretEH) = ["turret", _laserEH] call CBA_fnc_addPlayerEventHandler;
|
||||
GVAR(laserVehicleEH) = ["vehicle", _laserEH] call CBA_fnc_addPlayerEventHandler;
|
||||
GVAR(laserWeaponEH) = ["weapon", _laserEH] call CBA_fnc_addPlayerEventHandler;
|
||||
|
@ -634,6 +634,8 @@
|
||||
<Italian>Laser/torcia dell'arma costantemente accesi</Italian>
|
||||
<Korean>무기 레이저 포인터 / 손전등 지속</Korean>
|
||||
<German>Kontinuität des Laserpointers/Taktischen Lichts</German>
|
||||
<Chinese>保持武器雷射/手電筒的狀態</Chinese>
|
||||
<Chinesesimp>保持武器雷射/手电筒的状态</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_SettingPersistentLaserDesc">
|
||||
<English>Enable gunlight after weapon switch or vehicle enter/exit if it was previously enabled.</English>
|
||||
@ -642,6 +644,8 @@
|
||||
<Italian>Abilita la torcia/laser dopo il cambio dell'arma o l'entrata/uscita del veicolo se precedentemente attiva.</Italian>
|
||||
<Korean>무기를 바꾸거나 차량에 승하차 할 때 이전에 스위치 켜고 끔을 유지합니다.</Korean>
|
||||
<German>Aktiviert Laserpointer/Taktisches Licht nach einem Waffenwechsel oder dem Auf-/Absitzen, falls es zuvor aktiv war.</German>
|
||||
<Chinese>保存武器雷射/手電筒的開關狀態,使玩家切換武器或進出載具時能保持之前的的狀態。</Chinese>
|
||||
<Chinesesimp>保存武器雷射/手电筒的开关状态,使玩家切换武器或进出载具时能保持之前的的状态。</Chinesesimp>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_bananaDisplayName">
|
||||
<English>Banana</English>
|
||||
@ -1163,11 +1167,17 @@
|
||||
<English>Allow turning down music</English>
|
||||
<German>Erlaube Musik leiser stellen</German>
|
||||
<Korean>음악 끄기 허용</Korean>
|
||||
<Chinese>允許調低音樂音量</Chinese>
|
||||
<Chinesesimp>允许调低音乐音量</Chinesesimp>
|
||||
<Japanese>音楽の音量低下を許可</Japanese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Common_AllowFadeMusicTooltip">
|
||||
<English>Allow ACE scripts to turn down the music.</English>
|
||||
<German>Erlaube ACE-Skripten, die Musik leiser zu stellen.</German>
|
||||
<Korean>ACE 스크립트가 음악을 끌 수 있습니다.</Korean>
|
||||
<Chinese>允許ACE腳本去控制音樂的音量。</Chinese>
|
||||
<Chinesesimp>允许ACE脚本去控制音乐的音量。</Chinesesimp>
|
||||
<Japanese>ACE スプリントへ音量低下を許可します。</Japanese>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -4,7 +4,7 @@ class ACE_Settings {
|
||||
category = CSTRING(displayName);
|
||||
displayName = CSTRING(enable_name);
|
||||
description = CSTRING(enable_tooltip);
|
||||
value = 1;
|
||||
value = 0;
|
||||
typeName = "BOOL";
|
||||
};
|
||||
class GVAR(enableAmmobox) {
|
||||
|
@ -112,7 +112,7 @@
|
||||
<German>Faktor für die Munitionsdurchzündungsdauer [0 zum Deaktivieren]</German>
|
||||
<French>Multiplicateur de la durée du cook-off des munitions [Une valeur de 0 désactive l'effet]</French>
|
||||
<Polish>Mnożnik decydujący jak długo ma trwać samozapłon amunicji [Ustawienie na 0 spowoduje wyłącznie samozapłonu]</Polish>
|
||||
<Japanese>誘爆の持続時間を乗数で設定。[0 に設定で誘爆を無効化]</Japanese>
|
||||
<Japanese>誘爆の持続時間を乗数で設定します。[0 に設定で誘爆を無効化]</Japanese>
|
||||
<Italian>Moltiplicatore della durata dell'esplosione [Impostare 0 disabiliterà l'esplosione delle munizioni]</Italian>
|
||||
<Chinese>設定彈藥殉爆效果會持續多久時間 [輸入0來關閉殉爆效果]</Chinese>
|
||||
<Chinesesimp>设定弹药殉爆效果会持续多久时间 [输入0来关闭殉爆效果]</Chinesesimp>
|
||||
@ -123,12 +123,16 @@
|
||||
<Japanese>誘爆の可能性係数</Japanese>
|
||||
<Italian>Coefficiente probabilità esplosione</Italian>
|
||||
<German>Faktor für Wahrscheinlichkeit der Durchzündung</German>
|
||||
<Chinese>殉爆發生機率係數</Chinese>
|
||||
<Chinesesimp>殉爆发生机率系数</Chinesesimp>
|
||||
</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>
|
||||
<Italian>Moltiplicatore per la probabilità dell'esplosione. Un valore più alto aumenta la probabilità dell'esplosione</Italian>
|
||||
<German>Faktor für Wahrscheinlichkeit der Durchzündung. Ein höherer Wert führt zu höherer Durchzündungswahrscheinlichkeit.</German>
|
||||
<Chinese>調整殉爆發生機率係數。值越高代表越容易發生殉爆。</Chinese>
|
||||
<Chinesesimp>调整殉爆发生机率系数。值越高代表越容易发生殉爆。</Chinesesimp>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -71,7 +71,7 @@
|
||||
<Polish>Ktoś już zabrał ten nieśmiertelnik...</Polish>
|
||||
<Russian>Кто-то уже забрал жетон...</Russian>
|
||||
<Czech>Někdo jiný už vzal identifikační známku...</Czech>
|
||||
<Japanese>すでに誰かがドッグ タグを取っていったようだ・・・</Japanese>
|
||||
<Japanese>すでにドッグ タグは取られています・・・</Japanese>
|
||||
<German>Jemand anderes hat bereits die Hundemarke genommen ...</German>
|
||||
<Korean>누군가 이미 군번줄을 회수해갔습니다...</Korean>
|
||||
<French>Quelqu'un d'autre a déjâ pris les plaques d'identification...</French>
|
||||
|
@ -38,6 +38,11 @@ class Extended_Init_EventHandlers {
|
||||
init = QUOTE(_this call DFUNC(initObject));
|
||||
};
|
||||
};
|
||||
class Land_Camping_Light_F {
|
||||
class ADDON {
|
||||
init = QUOTE(_this call DFUNC(initObject));
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_Killed_EventHandlers {
|
||||
|
@ -249,4 +249,24 @@ class CfgVehicles {
|
||||
GVAR(dragPosition)[] = {0,1.2,0};
|
||||
GVAR(dragDirection) = 180;
|
||||
};
|
||||
class FloatingStructure_F;
|
||||
class Land_Camping_Light_F: FloatingStructure_F {
|
||||
GVAR(canCarry) = 1;
|
||||
// if y < 0.9 player gets damage
|
||||
GVAR(carryPosition)[] = {0,0.9,1};
|
||||
GVAR(carryDirection) = 0;
|
||||
|
||||
GVAR(canDrag) = 1;
|
||||
GVAR(dragPosition)[] = {0,0.7,0};
|
||||
GVAR(dragDirection) = 0;
|
||||
};
|
||||
class Land_Camping_Light_off_F: ThingX {
|
||||
GVAR(canCarry) = 1;
|
||||
GVAR(carryPosition)[] = {0,0.9,1};
|
||||
GVAR(carryDirection) = 0;
|
||||
|
||||
GVAR(canDrag) = 1;
|
||||
GVAR(dragPosition)[] = {0,0.7,0};
|
||||
GVAR(dragDirection) = 0;
|
||||
};
|
||||
};
|
||||
|
@ -60,7 +60,7 @@
|
||||
<Russian>Предмет слишком тяжёлый</Russian>
|
||||
<Czech>Předmět je moc těžký</Czech>
|
||||
<Hungarian>Az objektum túl nehéz</Hungarian>
|
||||
<Japanese>アイテムが重すぎる</Japanese>
|
||||
<Japanese>アイテムが重すぎます</Japanese>
|
||||
<Korean>물체가 너무 무겁습니다</Korean>
|
||||
<Chinese>此物品過重</Chinese>
|
||||
<Chinesesimp>此物品过重</Chinesesimp>
|
||||
|
13
addons/explosives/ACE_Arsenal_Stats.hpp
Normal file
13
addons/explosives/ACE_Arsenal_Stats.hpp
Normal file
@ -0,0 +1,13 @@
|
||||
class EGVAR(arsenal,stats) {
|
||||
class statBase;
|
||||
class ACE_explosiveRange: statBase {
|
||||
scope = 2;
|
||||
priority = 1;
|
||||
stats[] = {QGVAR(Range)};
|
||||
displayName= CSTRING(statExploRange);
|
||||
showText = 1;
|
||||
textStatement = QUOTE(params [ARR_2('_stat', '_config')]; private _exploRangeStat = getNumber (_config >> _stat select 0); format [ARR_3('%1m (%2ft)', _exploRangeStat, (_exploRangeStat / 0.3048) toFixed 1)]);
|
||||
condition = QUOTE(params [ARR_2('', '_config')]; (getNumber (_config >> QQGVAR(Detonator))) > 0);
|
||||
tabs[] = {{}, {7}};
|
||||
};
|
||||
};
|
@ -24,7 +24,7 @@ class Extended_Killed_EventHandlers {
|
||||
|
||||
class Extended_Take_EventHandlers {
|
||||
class CAManBase {
|
||||
GVAR(takeHandler) = QUOTE([ARR_3(_this select 0, _this select 1, _this select 2)] call FUNC(onInventoryChanged));
|
||||
GVAR(takeHandler) = QUOTE(call FUNC(onInventoryChanged));
|
||||
};
|
||||
};
|
||||
class Extended_Put_EventHandlers {
|
||||
|
@ -27,6 +27,7 @@ class CfgPatches {
|
||||
#include "ACE_Triggers.hpp"
|
||||
#include "ExplosivesUI.hpp"
|
||||
#include "GUI_VirtualAmmo.hpp"
|
||||
#include "ACE_Arsenal_Stats.hpp"
|
||||
|
||||
class CfgActions {
|
||||
class None;
|
||||
|
@ -122,7 +122,7 @@
|
||||
<Italian>Bloccato</Italian>
|
||||
<German>Blockiert</German>
|
||||
<French>Bloqué</French>
|
||||
<Japanese>取り付けできない</Japanese>
|
||||
<Japanese>取り付け不可</Japanese>
|
||||
<Korean>막힘</Korean>
|
||||
<Chinesesimp>断开</Chinesesimp>
|
||||
<Chinese>斷開</Chinese>
|
||||
@ -698,7 +698,7 @@
|
||||
<Portuguese>Usado para detonar remotamente o explosivo quando solto.</Portuguese>
|
||||
<Russian>Используется для дистанционного подрыва, после смерти оператора.</Russian>
|
||||
<Italian>Usato per attivare a distanza esplosivi al momento del rilascio</Italian>
|
||||
<Japanese>点火装置を離すと遠隔で起爆したいときに使います。</Japanese>
|
||||
<Japanese>点火装置を遠隔から離すと起爆したいときに使います。</Japanese>
|
||||
<Korean>압력이 해제될때 원격으로 폭발시킵니다.</Korean>
|
||||
<Chinesesimp>当放开按钮时, 将会引爆炸弹.</Chinesesimp>
|
||||
<Chinese>當放開按鈕時, 將會引爆炸彈.</Chinese>
|
||||
@ -842,7 +842,7 @@
|
||||
<Russian>Этот модуль управляет настройками, связанными со взрывными устройствами</Russian>
|
||||
<Spanish>Este módulo ajusta las configuraciones relacionadas con explosivos.</Spanish>
|
||||
<Italian>Questo modulo cambia le impostazioni relative agli esplosivi</Italian>
|
||||
<Japanese>このモジュールを調節し爆発物に設定を反映させます。</Japanese>
|
||||
<Japanese>モジュールを調節し爆発物に設定を反映させます。</Japanese>
|
||||
<Korean>이 모듈은 폭발물에 관한 설정을 수정할 수 있게합니다.</Korean>
|
||||
<Chinesesimp>此模块用来调整炸药的相关设定</Chinesesimp>
|
||||
<Chinese>此模塊用來調整炸藥的相關設定</Chinese>
|
||||
@ -1019,5 +1019,10 @@
|
||||
<Chinesesimp>类型: 绊线闪光地雷 - 触发后产生非致命性的强光.<br />发数: 1<br />使用于: 地面</Chinesesimp>
|
||||
<Chinese>類型: 絆線閃光地雷 - 觸發後產生非致命性的強光.<br />發數: 1<br />使用於: 地面</Chinese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Explosives_statExploRange">
|
||||
<English>Explosive range</English>
|
||||
<French>Portée du détonateur</French>
|
||||
<Japanese>爆発範囲</Japanese>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -22,5 +22,5 @@ private _deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []];
|
||||
|
||||
((driver _vehicle != _unit) &&
|
||||
{!(_deployedRopes isEqualTo [])} &&
|
||||
{{!(_x select 5)} count (_deployedRopes) > 0} &&
|
||||
{{!(_x select 5) && !(_x select 6)} count (_deployedRopes) > 0} &&
|
||||
{getPos _vehicle select 2 > 2})
|
||||
|
@ -45,8 +45,8 @@ private _hookAttachment = _vehicle getVariable [QGVAR(FRIES), _vehicle];
|
||||
_ropeTop addEventHandler ["RopeBreak", {[_this, "top"] call FUNC(onRopeBreak)}];
|
||||
_ropeBottom addEventHandler ["RopeBreak", {[_this, "bottom"] call FUNC(onRopeBreak)}];
|
||||
|
||||
//deployedRopes format: attachment point, top part of the rope, bottom part of the rope, attachTo helper object, occupied
|
||||
_deployedRopes pushBack [_ropeOrigin, _ropeTop, _ropeBottom, _dummy, _hook, false];
|
||||
//deployedRopes format: attachment point, top part of the rope, bottom part of the rope, attachTo helper object, occupied, broken
|
||||
_deployedRopes pushBack [_ropeOrigin, _ropeTop, _ropeBottom, _dummy, _hook, false, false];
|
||||
|
||||
false
|
||||
} count _ropeOrigins;
|
||||
|
@ -23,7 +23,7 @@ private _deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []];
|
||||
private _usableRope = _deployedRopes select 0;
|
||||
private _usableRopeIndex = 0;
|
||||
{
|
||||
if !(_x select 5) exitWith {
|
||||
if (!(_x select 5) && !(_x select 6)) exitWith {
|
||||
_usableRope = _x;
|
||||
_usableRopeIndex = _forEachIndex;
|
||||
};
|
||||
|
@ -85,7 +85,7 @@ if (
|
||||
|
||||
//Update deployedRopes array
|
||||
private _deployedRopes = _vehicle getVariable [QGVAR(deployedRopes), []];
|
||||
_deployedRopes set [_ropeIndex, [_attachmentPoint, _ropeTop, _ropeBottom, _dummy, _hook, false]];
|
||||
_deployedRopes set [_ropeIndex, [_attachmentPoint, _ropeTop, _ropeBottom, _dummy, _hook, false, false]];
|
||||
_vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true];
|
||||
|
||||
[_pfhHandle] call CBA_fnc_removePerFrameHandler;
|
||||
|
@ -36,7 +36,7 @@ private _brokenRope = [];
|
||||
_brokenRope = _x;
|
||||
};
|
||||
} forEach _deployedRopes;
|
||||
_brokenRope set [5, true];
|
||||
_brokenRope set [6, true];
|
||||
_vehicle setVariable [QGVAR(deployedRopes), _deployedRopes, true];
|
||||
|
||||
private _unit = {
|
||||
|
@ -97,35 +97,4 @@ class CfgVehicles {
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
// AIR VEHICLES
|
||||
class Air: AllVehicles {};
|
||||
|
||||
class Helicopter: Air {
|
||||
class Turrets {
|
||||
class MainTurret;
|
||||
};
|
||||
};
|
||||
|
||||
class Helicopter_Base_F: Helicopter {};
|
||||
|
||||
class Heli_Attack_01_base_F: Helicopter_Base_F {
|
||||
class Turrets: Turrets {
|
||||
class MainTurret: MainTurret {
|
||||
GVAR(Enabled) = 1;
|
||||
discreteDistance[] = {};
|
||||
discreteDistanceInitIndex = 0;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class Heli_Attack_02_base_F: Helicopter_Base_F {
|
||||
class Turrets: Turrets {
|
||||
class MainTurret: MainTurret {
|
||||
GVAR(Enabled) = 1;
|
||||
discreteDistance[] = {};
|
||||
discreteDistanceInitIndex = 0;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -92,7 +92,7 @@
|
||||
<Portuguese>FCS reiniciado.</Portuguese>
|
||||
<Italian>L'FCS è stato azzerato</Italian>
|
||||
<Russian>СУО обнулен.</Russian>
|
||||
<Japanese>FCS は初期化された</Japanese>
|
||||
<Japanese>FCS は初期化されました</Japanese>
|
||||
<Korean>사통장치 초기화됨</Korean>
|
||||
<Chinesesimp>火控系统已被重置</Chinesesimp>
|
||||
<Chinese>火控系統已被重置</Chinese>
|
||||
|
@ -37,7 +37,7 @@
|
||||
<Spanish>Muestra el indicador para el jugador que apunta. Esta opción no afecta si los otros jugadores verían el indicador</Spanish>
|
||||
<Czech>Zobrazit infikátor, když ukážete prstem. Tato volba nemá vliv, zda ostatní hráči uvidí indikátor nebo ne.</Czech>
|
||||
<Italian>Mostra puntatore per il giocatore indicato. Questa opzione non influisce la possibilità che gli altri giocatori vedano il puntatore</Italian>
|
||||
<Japanese>プレイヤーへの指差し表記を描画します。このオプションは他のプレイヤーの表記に影響しません。</Japanese>
|
||||
<Japanese>プレイヤーへ指差し表記を描画します。これは他のプレイヤーの表記に影響しません。</Japanese>
|
||||
<Korean>대상이 가리키는곳을 보이게 합니다.</Korean>
|
||||
<Chinesesimp>显示指向指示器给玩家自己。此选项设定并不影响其他玩家能否看到指示器</Chinesesimp>
|
||||
<Chinese>顯示指向指示器給玩家自己。此選項設定並不影響其他玩家能否看到指示器</Chinese>
|
||||
@ -101,7 +101,7 @@
|
||||
<Spanish>Señala y muestra un marcador virtual donde ustás apuntando para las unidades cercanas. Puede ser mantenido.</Spanish>
|
||||
<Czech>Ukazuje virtuální značku kruhu ve směru, kterým se díváte pro všechny blízké jednotky.</Czech>
|
||||
<Italian>Punta e mostra un marker virtuale di dove stai guardando alle unità vicine. Può essere tenuto premuto.</Italian>
|
||||
<Japanese>指差しが出すマーカー表記は自ユニットの近くにいると表記されます。これは押しっぱなしにできます。</Japanese>
|
||||
<Japanese>指差し表記は自ユニットの近くにいる人のみに表記されます。また押しっぱなしにできます。</Japanese>
|
||||
<Korean>당신이 보는것을 가상의 마커로 표시함으로서 다른 인원이 볼 수 있게 합니다. 누른채로 유지할 수 있습니다.</Korean>
|
||||
<Chinesesimp>当按下此按键后,你附近的单位即可看见一个虚拟图示,标明你正在指向的位置。此按键可以被按住来持续显示。</Chinesesimp>
|
||||
<Chinese>當按下此按鍵後,你附近的單位即可看見一個虛擬圖示,標明你正在指向的位置。此按鍵可以被按住來持續顯示。</Chinese>
|
||||
|
13
addons/flashlights/ACE_Arsenal_Stats.hpp
Normal file
13
addons/flashlights/ACE_Arsenal_Stats.hpp
Normal file
@ -0,0 +1,13 @@
|
||||
class EGVAR(arsenal,stats) {
|
||||
class statBase;
|
||||
class ACE_flashlightColor: statBase {
|
||||
scope = 2;
|
||||
priority = 1;
|
||||
stats[] = {"ACE_Flashlight_Colour"};
|
||||
displayName = CSTRING(statMapLightColor);
|
||||
showText = 1;
|
||||
textStatement = QUOTE(getText (_this select 1 >> 'itemInfo' >> 'FlashLight' >> (_this select 0) select 0));
|
||||
condition = QUOTE(getText (_this select 1 >> 'itemInfo' >> 'FlashLight' >> (_this select 0) select 0) != '');
|
||||
tabs[] = {{}, {1,7}};
|
||||
};
|
||||
};
|
@ -17,3 +17,4 @@ class CfgPatches {
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
#include "CfgWeapons.hpp"
|
||||
#include "ACE_Arsenal_Stats.hpp"
|
||||
|
@ -91,5 +91,10 @@
|
||||
<Chinesesimp>拥有红色滤光片的手电筒。用来照亮地图。</Chinesesimp>
|
||||
<Chinese>擁有紅色濾光片的手電筒。用來照亮地圖。</Chinese>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Flashlights_statMapLightColor">
|
||||
<English>Map light color</English>
|
||||
<French>Couleur de la lampe sur carte</French>
|
||||
<Japanese>光の色</Japanese>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
||||
|
@ -5,8 +5,8 @@
|
||||
class CfgAmmo {
|
||||
|
||||
// ~~~~ Bombs:
|
||||
class LaserBombCore;
|
||||
class Bo_GBU12_LGB: LaserBombCore {
|
||||
class ammo_Bomb_LaserGuidedBase;
|
||||
class Bo_GBU12_LGB: ammo_Bomb_LaserGuidedBase {
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {QGVAR(large), QGVAR(large), QGVAR(large_HD), QGVAR(large), QGVAR(huge), QGVAR(huge_HD), QGVAR(huge)};
|
||||
@ -15,7 +15,7 @@ class CfgAmmo {
|
||||
GVAR(gurney_c) = 2320;
|
||||
GVAR(gurney_k) = 1/2;
|
||||
};
|
||||
class Bomb_04_F: LaserBombCore {
|
||||
class Bomb_04_F: ammo_Bomb_LaserGuidedBase {
|
||||
GVAR(enabled) = 1;
|
||||
|
||||
GVAR(classes)[] = {QGVAR(large), QGVAR(large), QGVAR(large_HD), QGVAR(large), QGVAR(huge), QGVAR(huge_HD), QGVAR(huge)};
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user