Merge remote-tracking branch 'origin/master' into medical-rewrite

This commit is contained in:
Glowbal 2018-07-18 20:42:41 +02:00
commit e8f00fbe7c
No known key found for this signature in database
GPG Key ID: 837ABD08D9D93CB0
535 changed files with 8686 additions and 5114 deletions

View File

@ -1,30 +0,0 @@
branches:
only:
- master
- release
language: python
python:
- '3.5'
before_script:
- if [ -n "${GH_TOKEN}" ] && [ "${TRAVIS_BRANCH}" == "master" ] && [ "${TRAVIS_PULL_REQUEST}" == "false" ]; then
pip install pygithub;
pip install pygithub3;
fi
script:
- 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=
notifications:
slack:
rooms:
- secure: byZMNBl8PMlgjT9NA1WmhgCdGfX4b3g1kA0vEiwfm+IFNlx7BiM4J/5rp6zV/jV470xl/epAejx2tsa5SdTyFbO87NH63ILJSt5QnjUZjRuGKSutFs9WE671DtZkPRSJXHS4N6x802PRkyBz/84/lsc34FWvHvjwOuYAtOcJRFk=
- secure: V22TNaLWV+yUNWqR7c6HVvIxkRDz7Dyz9xqa43FY8iFgvNL4Q/X69h5DYHU/ILNFM00tx8OBjtPRbcjWQ+F6eY8Sje/A2axJAU+qNurAvoyiTahXUprdUUpPdkgXWuSRTZ9kALxOq5e11RC8XUietghoMcl8zPcqdrZCOOKgoEM=
on_success: change
email:
on_success: never
on_failure: change

View File

@ -100,16 +100,19 @@ 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
meat <p.humberdroz@gmail.com>
mharis001 <mhariszakar@gmail.com>
Michail Nikolaev
MikeMatrix <m.braun92@gmail.com>
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>

View File

@ -4,7 +4,7 @@
<p align="center">
<a href="https://github.com/acemod/ACE3/releases/latest">
<img src="https://img.shields.io/badge/Version-3.12.0-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">

View File

@ -12,7 +12,7 @@
<Hungarian>Széladatok mutatása</Hungarian>
<Czech>Zobrazit údaje o větru</Czech>
<Portuguese>Mostrar Informação do Vento</Portuguese>
<Japanese>風の情報を表示</Japanese>
<Japanese>風の情報を表示する</Japanese>
<Korean>바람의 정보를 표시</Korean>
<Chinese>顯示風況</Chinese>
<Chinesesimp>显示风况</Chinesesimp>
@ -28,7 +28,7 @@
<Hungarian>Szögmérő mutatása</Hungarian>
<Czech>Zobrazit úhloměr</Czech>
<Portuguese>Mostrar Transferidor</Portuguese>
<Japanese>分度器を表示</Japanese>
<Japanese>分度器を表示する</Japanese>
<Korean>각도기 표시</Korean>
<Chinese>顯示量角器</Chinese>
<Chinesesimp>显示量角器</Chinesesimp>
@ -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>
@ -84,14 +84,22 @@
<Key ID="STR_ACE_Advanced_Ballistics_muzzleVelocityVariationEnabled_DisplayName">
<English>Enable Muzzle Velocity Variation</English>
<German>Variation der Mündungsgeschwindigkeit aktivieren</German>
<Japanese>銃口初速の変化</Japanese>
<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>
@ -104,7 +112,7 @@
<Hungarian>Lőszer-hő szimuláció engedélyezése</Hungarian>
<Russian>Симуляция температуры для боеприпасов</Russian>
<Italian>Abilita simulazione della temperatura delle munizioni</Italian>
<Japanese>弾薬温度シミュレーション</Japanese>
<Japanese>弾薬温度シミュレーションを有効化する</Japanese>
<Korean>탄약 온도 구현 적용</Korean>
<Chinese>啟用彈藥溫度模擬系統</Chinese>
<Chinesesimp>启用弹药温度模拟系统</Chinesesimp>
@ -120,7 +128,7 @@
<Hungarian>A kezdősebesség a lőszer hőmérsékletétől függően változó</Hungarian>
<Russian>Начальная скорость пули зависит от температуры</Russian>
<Italian>La velocità dello sparo varia a seconda della temperatura delle munizioni</Italian>
<Japanese>弾薬の温度により銃口初速を変化させます</Japanese>
<Japanese>弾薬の温度により銃口初速を変動させます。</Japanese>
<Korean>탄약 온도에 비례해 총구 속도가 달라집니다</Korean>
<Chinese>子彈初速將隨彈藥溫度而有所變化</Chinese>
<Chinesesimp>子弹初速将随弹药温度而有所变化</Chinesesimp>
@ -136,7 +144,7 @@
<Hungarian>Csőhossz-szimuláció engedélyezése</Hungarian>
<Russian>Симуляция длины ствола</Russian>
<Italian>Abilita simulazione della lunghezza della canna</Italian>
<Japanese>銃身長シミュレーション</Japanese>
<Japanese>銃身長シミュレーションを有効化する</Japanese>
<Korean>총열 길이 구현 적용</Korean>
<Chinese>啟用槍管長度模擬系統</Chinese>
<Chinesesimp>启用枪管长度模拟系统</Chinesesimp>
@ -152,7 +160,7 @@
<Hungarian>A kezdősebesség a cső hosszától függően változó</Hungarian>
<Russian>Начальная скорость пули зависит от длины ствола</Russian>
<Italian>La velocità di sparo varia a seconda della lunghezza della canna</Italian>
<Japanese>銃身長により銃口初速を変化させます</Japanese>
<Japanese>銃身長により銃口初速を変動させます。</Japanese>
<Korean>총구 속도가 총열에 비례해 달라집니다</Korean>
<Chinese>子彈初速將隨槍管長度而有所變化</Chinese>
<Chinesesimp>子弹初速将随枪管长度而有所变化</Chinesesimp>
@ -168,7 +176,7 @@
<Hungarian>Nyomkövető-effekt engedélyezése</Hungarian>
<Russian>Следы пуль</Russian>
<Italian>Abilita effetto dei Proiettili Traccianti</Italian>
<Japanese>弾丸の痕跡表示</Japanese>
<Japanese>弾丸の軌跡エフェクトを有効化する</Japanese>
<Korean>예광탄 효과 적용</Korean>
<Chinese>啟用曳光彈效果</Chinese>
<Chinesesimp>启用曳光弹效果</Chinesesimp>
@ -184,7 +192,7 @@
<Hungarian>Engedélyezi a nagy kaliberű lövedékek nyomának vizuális követését (csak nagy teljesítményű optikán keresztül látható)</Hungarian>
<Russian>Включает эффект следов пуль для больших калибров (видны только через мощную оптику)</Russian>
<Italian>Abilita effetto dei proiettili traccianti di alto calibro (visibile solo attraverso ottiche ad alto potenziale)</Italian>
<Japanese>大口径の銃弾による弾丸の痕跡表示を有効化します (高倍率スコープを介してでしか見れません)</Japanese>
<Japanese>大口径弾の軌跡エフェクトを有効化します。 (高性能光学機器を介してのみ見ることができます)</Japanese>
<Korean>대구경 탄환에 예광탄 효과를 적용합니다(오직 고성능 조준경 사용시에만 보입니다)</Korean>
<Chinese>啟用曳光彈效果給大口徑子彈 (只有透過高倍率光學瞄鏡才能看到)</Chinese>
<Chinesesimp>启用曳光弹效果给大口径子弹 (只有透过高倍率光学瞄镜才能看到)</Chinesesimp>
@ -200,7 +208,7 @@
<Hungarian>Szimuláció intervalluma</Hungarian>
<Russian>Интервал симуляции</Russian>
<Italian>Intervallo Simulazione</Italian>
<Japanese>シミュレーション間隔</Japanese>
<Japanese>シミュレーション間隔</Japanese>
<Korean>구현 간격</Korean>
<Chinese>模擬間隔</Chinese>
<Chinesesimp>模拟间隔</Chinesesimp>
@ -216,7 +224,7 @@
<Hungarian>Meghatározza a számítási lépések közötti időintervallumot</Hungarian>
<Russian>Определяет временной интервал между вычислениями</Russian>
<Italian>Definisce l'intervallo tra ogni step di calcolo</Italian>
<Japanese>各計算ごとの間隔を定義します</Japanese>
<Japanese>各計算毎の間隔を定義します。</Japanese>
<Korean>각 계산 단위의 간격을 정의합니다</Korean>
<Chinese>定義每個模擬計算之間的時間間隔</Chinese>
<Chinesesimp>定义每个模拟计算之间的时间间隔</Chinesesimp>
@ -232,7 +240,7 @@
<Hungarian>Szimuláció hatóköre</Hungarian>
<Russian>Радиус симуляции</Russian>
<Italian>Raggio Simulazione</Italian>
<Japanese>シミュレーション適用範囲</Japanese>
<Japanese>シミュレーション範囲</Japanese>
<Korean>구현 범위</Korean>
<Chinese>模擬半徑</Chinese>
<Chinesesimp>模拟半径</Chinesesimp>
@ -248,7 +256,7 @@
<Hungarian>Meghatározza a játékos körüli hatókört (méterben), ahol a lövedékek fejlett ballisztikát használnak</Hungarian>
<Russian>Определяет радиус вокруг игрока (в метрах), в котором продвинутая баллистика применяется к снарядам</Russian>
<Italian>Definisce il raggio attorno al giocatore (in metri) per cui la Balistica Avanzata è applicata ai proiettili</Italian>
<Japanese>プレイヤーの周囲にアドバンスド バリスティックスによる弾道を適用させる範囲を半径で定義します (メートル)</Japanese>
<Japanese>アドバンスド バリスティックスの適用半径範囲 (プレイヤー中心、メートル単位) を定義します。</Japanese>
<Korean>플레이어 주위의 발사체를 고급 탄도학으로 정의하는 범위를 정합니다(미터)</Korean>
<Chinese>以玩家的半徑距離(公尺)定義先進彈道系統啟用範圍</Chinese>
<Chinesesimp>以玩家的半径距离(公尺)定义先进弹道系统启用范围</Chinesesimp>
@ -264,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>

View File

@ -1,49 +1,20 @@
class ACE_Settings {
class GVAR(enabled) {
category = CSTRING(DisplayName);
displayName = CSTRING(Enabled);
description = CSTRING(Enabled_Description);
typeName = "BOOL";
value = 1;
movedToSQF = 1;
};
class GVAR(enableStaminaBar) {
category = CSTRING(DisplayName);
displayName = CSTRING(EnableStaminaBar);
description = CSTRING(EnableStaminaBar_Description);
typeName = "BOOL";
value = 1;
isClientSettable = 1;
movedToSQF = 1;
};
class GVAR(performanceFactor) {
category = CSTRING(DisplayName);
displayName = CSTRING(PerformanceFactor);
description = CSTRING(PerformanceFactor_Description);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {0, 5, 1, 1};
movedToSQF = 1;
};
class GVAR(recoveryFactor) {
category = CSTRING(DisplayName);
displayName = CSTRING(RecoveryFactor);
description = CSTRING(RecoveryFactor_Description);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {0, 5, 1, 1};
movedToSQF = 1;
};
class GVAR(loadFactor) {
category = CSTRING(DisplayName);
displayName = CSTRING(LoadFactor);
description = CSTRING(LoadFactor_Description);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {0, 5, 1, 1};
movedToSQF = 1;
};
class GVAR(terrainGradientFactor) {
category = CSTRING(DisplayName);
displayName = CSTRING(TerrainGradientFactor);
description = CSTRING(TerrainGradientFactor_Description);
typeName = "SCALAR";
value = 1;
sliderSettings[] = {0, 5, 1, 1};
movedToSQF = 1;
};
};

View File

@ -5,7 +5,8 @@ ADDON = false;
PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;
//#include "initSettings.sqf"
#include "initSettings.sqf"
GVAR(staminaBarWidth) = 10 * (((safezoneW / safezoneH) min 1.2) / 40);
GVAR(dutyList) = [[], []];

View File

@ -2,7 +2,7 @@
QGVAR(enabled),
"CHECKBOX",
[LSTRING(Enabled), LSTRING(Enabled_Description)],
"ACE3 Advanced Fatigue",
LSTRING(DisplayName),
true,
true
] call CBA_Settings_fnc_init;
@ -11,7 +11,7 @@
QGVAR(enableStaminaBar),
"CHECKBOX",
[LSTRING(EnableStaminaBar), LSTRING(EnableStaminaBar_Description)],
"ACE3 Advanced Fatigue",
LSTRING(DisplayName),
true,
true, {
if (!_this) then {
@ -26,8 +26,8 @@
QGVAR(performanceFactor),
"SLIDER",
[LSTRING(PerformanceFactor), LSTRING(PerformanceFactor_Description)],
"ACE3 Advanced Fatigue",
[0, 2, 1, 1],
LSTRING(DisplayName),
[0, 5, 1, 1],
true
] call CBA_Settings_fnc_init;
@ -35,8 +35,8 @@
QGVAR(recoveryFactor),
"SLIDER",
[LSTRING(RecoveryFactor), LSTRING(RecoveryFactor_Description)],
"ACE3 Advanced Fatigue",
[0, 2, 1, 1],
LSTRING(DisplayName),
[0, 5, 1, 1],
true
] call CBA_Settings_fnc_init;
@ -44,8 +44,8 @@
QGVAR(loadFactor),
"SLIDER",
[LSTRING(LoadFactor), LSTRING(LoadFactor_Description)],
"ACE3 Advanced Fatigue",
[0, 2, 1, 1],
LSTRING(DisplayName),
[0, 5, 1, 1],
true
] call CBA_Settings_fnc_init;
@ -53,7 +53,16 @@
QGVAR(terrainGradientFactor),
"SLIDER",
[LSTRING(TerrainGradientFactor), LSTRING(TerrainGradientFactor_Description)],
"ACE3 Advanced Fatigue",
[0, 2, 1, 1],
LSTRING(DisplayName),
[0, 5, 1, 1],
true
] call CBA_Settings_fnc_init;
[
QGVAR(swayFactor),
"SLIDER",
[LSTRING(SwayFactor), LSTRING(SwayFactor_Description)],
LSTRING(DisplayName),
[0, 5, 1, 1],
true
] call CBA_Settings_fnc_init;

View File

@ -2,18 +2,18 @@
<Project name="ACE">
<Package name="Advanced_Fatigue">
<Key ID="STR_ACE_Advanced_Fatigue_DisplayName">
<English>Advanced Fatigue</English>
<German>Erweiterte Ausdauer</German>
<Chinese>進階疲勞</Chinese>
<Chinesesimp>进阶疲劳</Chinesesimp>
<Japanese>アドバンスド疲労</Japanese>
<Italian>Fatica Avanzata</Italian>
<Korean>고급 피로도</Korean>
<English>ACE Advanced Fatigue</English>
<German>ACE Erweiterte Ausdauer</German>
<Chinese>ACE 進階疲勞</Chinese>
<Chinesesimp>ACE 进阶疲劳</Chinesesimp>
<Japanese>ACE アドバンスド ファティーグ</Japanese>
<Italian>ACE Fatica Avanzata</Italian>
<Korean>ACE 고급 피로도</Korean>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_PerformanceFactor">
<English>Performance Factor</English>
<German>Leistungsfaktor</German>
<Japanese>パフォーマンス</Japanese>
<Japanese>パフォーマンス因</Japanese>
<Polish>Współczynnik wydolności</Polish>
<Korean>성능 요인</Korean>
<French>Facteur de performance</French>
@ -24,7 +24,7 @@
<Key ID="STR_ACE_Advanced_Fatigue_PerformanceFactor_Description">
<English>Influences the overall performance of all players with no custom factor. Higher means better.</English>
<German>Beinflusst die Leistungsfähigkeit aller Spieler ohne eigenen Leistungsfaktor. Ein höherer Wert bedeutet bessere Leistung.</German>
<Japanese>非カスタム要因をもつ全プレイヤーへ全体的に動作を影響させます。高いほど良い効果があります。</Japanese>
<Japanese>個別の因数を設定されていない、全てのプレイヤーのあらゆるパフォーマンスに影響を与えます。 値が高ければ高いほど、良い効果が得られます。</Japanese>
<Polish>Wpływa na ogólną wydolność organizmu u wszystkich graczy bez ustawionego niestandardowego współczynnika. Więcej znaczy lepiej.</Polish>
<Korean>모든 성능이 임의로 설정된 값 없이 영향받습니다. 값이 클수록 더 나은 성능을 발휘합니다</Korean>
<French>Influence les performances générales de tous les joueurs sans facteurs personalisés. Une valeur plus élevée implique de meilleures performances.</French>
@ -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>
@ -46,7 +46,7 @@
<Key ID="STR_ACE_Advanced_Fatigue_RecoveryFactor">
<English>Recovery Factor</English>
<German>Erholungsfaktor</German>
<Japanese>回復</Japanese>
<Japanese>回復因</Japanese>
<Polish>Współczynnik regeneracji</Polish>
<Korean>회복 요인</Korean>
<French>Facteur de récupération</French>
@ -57,7 +57,7 @@
<Key ID="STR_ACE_Advanced_Fatigue_RecoveryFactor_Description">
<English>Changes how fast the player recovers when resting. Higher is faster.</English>
<German>Ändert, wie schnell ein Spieler Ausdauer regeneriert. Ein höherer Wert bedeutet eine schnellere Regeneration.</German>
<Japanese>休憩時はプレイヤーが早く回復します。高いほど早くなります。</Japanese>
<Japanese>プレイヤーが休憩をとる際に、どのくらいの速度でスタミナ回復するかを設定します。 値が高ければ高いほど、早くなります。</Japanese>
<Polish>Wpływa na czas regeneracji podczas postoju. Więcej znaczy szybciej.</Polish>
<Korean>얼마나 빨리 회복하는지를 바꿉니다. 값이 클수록 더 나은 성능을 발휘합니다</Korean>
<French>Change la vitesse à laquelle les joueurs récupèrent leur endurance lorsqu'ils se reposent. Une valeur plus élevée implique une récupération plus rapide.</French>
@ -68,7 +68,7 @@
<Key ID="STR_ACE_Advanced_Fatigue_LoadFactor">
<English>Load Factor</English>
<German>Gewichtsfaktor</German>
<Japanese>負荷要因</Japanese>
<Japanese>重量因数</Japanese>
<Polish>Współczynnik masy ekwipunku</Polish>
<Korean>부담 요인</Korean>
<French>Facteur d'encombrement</French>
@ -79,7 +79,7 @@
<Key ID="STR_ACE_Advanced_Fatigue_LoadFactor_Description">
<English>Increases or decreases how much weight influences the players performance. Zero means equipment weight has no performance influence.</English>
<German>Erhöht oder verringert, wie viel Einfluss das Ausrüstungsgewicht auf die Leistung hat. Null heißt, dass es keinen Einfluss hat.</German>
<Japanese>重量の増減によりプレイヤーの動作へ影響を与えます。装備を持っていない場合、影響はしません。</Japanese>
<Japanese>装備重量がプレイヤーのパフォーマンスにもたらす影響を増減させます。 値をゼロに設定した場合、装備重量はパフォーマンスに影響を与えません。</Japanese>
<Polish>Zmniejsza lub zwiększa wpływ ciężaru ekwipunku na wydolność gracza. Zero oznacza kompletny brak wpływu na wydolność.</Polish>
<Korean>플레이어가 무게에 따라 얼마나 영향받는지를 증가시키거나 감소시킵니다. 0의 경우 플레이어가 장비 무게에 영향받지 않습니다.</Korean>
<French>Augmente ou réduit l'influence que le poids à sur les performances des joueurs. Zéro implique que le poids de l'équipement n'a pas d'influence sur les performances.</French>
@ -90,7 +90,7 @@
<Key ID="STR_ACE_Advanced_Fatigue_TerrainGradientFactor">
<English>Terrain Gradient Factor</English>
<German>Terrainsteigungsfaktor</German>
<Japanese>地形勾配による要</Japanese>
<Japanese>地形勾配因</Japanese>
<Polish>Współczynnik terenu</Polish>
<Korean>지형 경사도 요인</Korean>
<French>Facteur d'inclinaison du terrain</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,10 +109,22 @@
<Chinese>設定陡峭的地形將會影響多少體力的流失,值越高代表體力流失越快</Chinese>
<Chinesesimp>设定陡峭的地形将会影响多少体力的流,失值越高代表体力流失越快</Chinesesimp>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_SwayFactor">
<English>Sway factor</English>
<Japanese>手ぶれ因数</Japanese>
<Chinesesimp>抖动因数</Chinesesimp>
<Chinese>抖動因素</Chinese>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_SwayFactor_Description">
<English>Influences the amount of weapon sway. Higher means more sway.</English>
<Japanese>武器を持つ手のぶれ度合いを設定します。 値が高ければ高いほど、手ぶれが強くなります。</Japanese>
<Chinesesimp>影响手持武器的晃动程度,数值越高,抖动的越厉害.</Chinesesimp>
<Chinese>影響手持武器晃動程度,數值越高抖動越厲害</Chinese>
</Key>
<Key ID="STR_ACE_Advanced_Fatigue_Enabled">
<English>Enabled</English>
<German>Aktiv</German>
<Japanese>有効化</Japanese>
<Japanese>アドバンスド ファティーグを有効化する</Japanese>
<Polish>Włączone</Polish>
<Korean>활성화</Korean>
<French>Activé</French>
@ -123,7 +135,7 @@
<Key ID="STR_ACE_Advanced_Fatigue_Enabled_Description">
<English>Enables/disables Advanced Fatigue.</English>
<German>Aktiviert/deaktiviert Advanced Fatigue.</German>
<Japanese>アドバンスド疲労の有効化と無効化</Japanese>
<Japanese>アドバンスド ファティーグを有効化します。</Japanese>
<Polish>Włącza/wyłącza zaawansowaną wytrzymałość</Polish>
<Korean>고급 피로도 활성화/비활성화</Korean>
<French>Active/désactive la fatigue avancée.</French>
@ -134,7 +146,7 @@
<Key ID="STR_ACE_Advanced_Fatigue_EnableStaminaBar">
<English>Show stamina bar</English>
<German>Zeige Ausdauerleiste</German>
<Japanese>体力バーを表示</Japanese>
<Japanese>スタミナバーを表示する</Japanese>
<Polish>Pokaż pasek wytrzymałości</Polish>
<Korean>피로도 막대</Korean>
<French>Afficher la barre d'endurance</French>
@ -145,7 +157,7 @@
<Key ID="STR_ACE_Advanced_Fatigue_EnableStaminaBar_Description">
<English>Shows the stamina bar.</English>
<German>Zeigt die Ausdauerleiste an.</German>
<Japanese>体力バーを表示します。</Japanese>
<Japanese>スタミナバーを表示します。</Japanese>
<Polish>Pokazuje pasek wytrzymałości.</Polish>
<Korean>피로도 막대를 보여줍니다.</Korean>
<French>Affiche la barre d'endurance.</French>

View File

@ -35,4 +35,5 @@ GVAR(enabled) &&
{[_unit, objNull, ["isNotInside", "isNotSwimming", "isNotSitting"/*, "isNotOnLadder"*/]] call EFUNC(common,canInteractWith)} && // Ladder needs positioning fixes on throw
{_unit call CBA_fnc_canUseWeapon} && // Disable in non-FFV seats due to surface detection issues
{"" == currentWeapon _unit || {currentWeapon _unit != secondaryWeapon _unit}} &&
{0 >= _unit getVariable [QEGVAR(common,effect_blockThrow), 0]}
{0 >= _unit getVariable [QEGVAR(common,effect_blockThrow), 0]} &&
{isNull (ACE_controlledUAV select 0)}

View File

@ -4,7 +4,7 @@
<Key ID="STR_ACE_Advanced_Throwing_Category">
<English>Advanced Throwing</English>
<Russian>Улучшенный бросок гранат</Russian>
<Japanese>アドバンスド投てき</Japanese>
<Japanese>アドバンスド スローイング</Japanese>
<Polish>Zaawansowane rzucanie</Polish>
<German>Erweitertes Wurfsystem</German>
<Korean>고급 투척</Korean>
@ -16,7 +16,7 @@
<Key ID="STR_ACE_Advanced_Throwing_Module_Description">
<English>Allows changing advanced throwing behaviour.</English>
<Russian>Позволяет настраивать поведение улучшенного броска гранат.</Russian>
<Japanese>アドバンスド投てきの挙動変更を許可します。</Japanese>
<Japanese>アドバンスド スローイングの動作挙動を変更します。</Japanese>
<Polish>Zezwala na zmianę zachowania zaawansowanego trybu rzucania.</Polish>
<German>Erlaubt es, das Verhalten des erweiterten Wurfsystems zu ändern.</German>
<Korean>고급 투척 행위를 허가합니다</Korean>
@ -28,7 +28,7 @@
<Key ID="STR_ACE_Advanced_Throwing_Enable_DisplayName">
<English>Enable Advanced Throwing</English>
<Russian>Включить улучшенный бросок</Russian>
<Japanese>アドバンスド投てき</Japanese>
<Japanese>アドバンスド スローイングを有効化する</Japanese>
<Polish>Aktywuj zaawansowane rzucanie</Polish>
<German>Aktiviere erweitertes Wurfsystem</German>
<Korean>고급 투척 활성화 </Korean>
@ -40,7 +40,7 @@
<Key ID="STR_ACE_Advanced_Throwing_Enable_Description">
<English>Enables advanced throwing system.</English>
<Russian>Включает систему улучшенного броска.</Russian>
<Japanese>アドバンスド投てきシステムを有効化</Japanese>
<Japanese>アドバンスド スローイングを有効化します。</Japanese>
<Polish>Aktywuje system zaawansowanego rzucania.</Polish>
<German>Aktiviert das erweiterte Wurfsystem.</German>
<Korean>고급 투척을 활성화 합니다</Korean>
@ -52,7 +52,7 @@
<Key ID="STR_ACE_Advanced_Throwing_ShowThrowArc_DisplayName">
<English>Show Throw Arc</English>
<Russian>Показать траекторию броска</Russian>
<Japanese>軌道を表示</Japanese>
<Japanese>投てき軌道を表示する</Japanese>
<Polish>Pokaż trasę lotu</Polish>
<German>Zeige Wurfbogen</German>
<Korean>투척 궤적 표시</Korean>
@ -64,7 +64,7 @@
<Key ID="STR_ACE_Advanced_Throwing_ShowThrowArc_Description">
<English>Enables visualization of the throw arc (where throwable will fly).</English>
<Russian>Включает визуализацию траектории броска (как полетит граната).</Russian>
<Japanese>投てき物の予測軌道の表示を有効化します。</Japanese>
<Japanese>投てき軌道 (投てき物がどこに飛ぶか) の表示を有効化します。</Japanese>
<Polish>Wyświetla wizualizację trasy przelotu granatu.</Polish>
<German>Aktiviert die Visualisierung des Wurfbogens (wohin das Objekt geworfen werden wird).</German>
<Korean>투척 궤도를 시각화 합니다(투척물이 어디로 갈지)</Korean>
@ -76,7 +76,7 @@
<Key ID="STR_ACE_Advanced_Throwing_ShowMouseControls_DisplayName">
<English>Show Throwing Mouse Controls</English>
<Russian>Показывать управление мышью</Russian>
<Japanese>投てきのマウス操作を表示</Japanese>
<Japanese>投てきのマウス操作を表示する</Japanese>
<Polish>Pokaż podpowiedzi sterowania myszą</Polish>
<German>Zeige Maussteuerung beim Werfen</German>
<Korean>마우스 조작 표시</Korean>
@ -88,7 +88,7 @@
<Key ID="STR_ACE_Advanced_Throwing_ShowMouseControls_Description">
<English>Enables visual cues for mouse controls when throwable is prepared.</English>
<Russian>Включает отображение подсказок по управлению мышью, когда граната подготовлена.</Russian>
<Japanese>投てき物を投げるとき、マウス操作の説明表示を有効化します。</Japanese>
<Japanese>投てき物を構える時、マウス操作の説明表示を有効化します。</Japanese>
<Polish>Wyświetla podpowiedzi sterowania myszą kiedy obiekt miotany jest w ręku.</Polish>
<German>Aktiviert visuelle Hinweise zur Maussteuerung, wenn ein Objekt zum Werfen vorbereitet wird.</German>
<Korean>투척물을 준비시 마우스 조작을 시각화해서 보여줍니다</Korean>
@ -100,7 +100,7 @@
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUp_DisplayName">
<English>Enable Throwables Pick Up</English>
<Russian>Включить подбор гранат</Russian>
<Japanese>投てき物の拾い上げ</Japanese>
<Japanese>投てき物の拾い上げを有効化する</Japanese>
<Polish>Zezwól na podnoszenie obiektów miotanych</Polish>
<German>Aktiviere Aufheben von Wurfobjekten</German>
<Korean>투척물 줍기 활성화</Korean>
@ -112,7 +112,7 @@
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUp_Description">
<English>Enables ability to pick up throwables from the ground.</English>
<Russian>Включает возможность подбирать гранаты с земли.</Russian>
<Japanese>地面に落ちている投てき物の拾い上げ動作を有効化します。</Japanese>
<Japanese>地面に落ちている投てき物を拾い上げる機能を有効化します。</Japanese>
<Polish>Umożliwia podnoszenie obiektów miotanych z ziemi.</Polish>
<German>Aktiviert die Möglichkeit, geworfene Objekte wieder vom Boden aufzuheben.</German>
<Korean>땅에 떨어진 투척물을 주울 수 있게 해줍니다.</Korean>
@ -124,7 +124,7 @@
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUpAttached_DisplayName">
<English>Enable Attached Throwables Pick Up</English>
<Russian>Включить подбор прикрепленных гранат</Russian>
<Japanese>拾った投てき物の取り付け</Japanese>
<Japanese>取り付けられた投てき物の拾い上げを有効化する</Japanese>
<Polish>Zezwól na podnoszenie przyczepionych obiektów miotanych</Polish>
<German>Aktiviere erneute Aufnahme befestigter Wurfobjekte</German>
<Korean>부착 투척물 줍기 활성화</Korean>
@ -136,7 +136,7 @@
<Key ID="STR_ACE_Advanced_Throwing_EnablePickUpAttached_Description">
<English>Enables ability to pick up throwables from attached objects.</English>
<Russian>Включает возможность подбирать гранаты, прикрепленные к объектам.</Russian>
<Japanese>オブジェクトに取り付けられていた投てき物を拾い上げられるようにします。</Japanese>
<Japanese>取り付けられた投てき物を、取り付け先から拾い上げる機能を有効化します。</Japanese>
<Polish>Umożliwia podnoszenie obiektów miotanych przyczepionych do innych obiektów.</Polish>
<German>Aktiviert die Möglichkeit, befestigte Wurfobjekte erneut aufzunehmen.</German>
<Korean>부착된 투척물을 주울 수 있게 해줍니다.</Korean>
@ -160,7 +160,7 @@
<Key ID="STR_ACE_Advanced_Throwing_dropModeHold">
<English>Throwable Drop Mode (Hold)</English>
<Russian>Режим броска гранаты (удерживать)</Russian>
<Japanese>投てきモード (押しっぱ)</Japanese>
<Japanese>投てきモード (押している間)</Japanese>
<Polish>Tryb upuszczania ob. miotanego (przytrzymaj)</Polish>
<German>Wurfobjekt Fallmodus (halten)</German>
<Korean>투척물 떨어뜨리기 모드(꾹눌러서)</Korean>
@ -172,7 +172,7 @@
<Key ID="STR_ACE_Advanced_Throwing_DropModeToggle">
<English>Throwable Drop Mode (Toggle)</English>
<Russian>Режим броска гранаты (переключить)</Russian>
<Japanese>投てきモード (切替)</Japanese>
<Japanese>投てきモード (切)</Japanese>
<Polish>Tryb upuszczania ob. miotanego (przełącz)</Polish>
<German>Wurfobjekt Fallmodus (umschalten)</German>
<Korean>투척물 떨어뜨리기 모드(토글)</Korean>
@ -184,7 +184,7 @@
<Key ID="STR_ACE_Advanced_Throwing_Primed">
<English>Primed</English>
<Russian>Подготовлена</Russian>
<Japanese>作動させた</Japanese>
<Japanese>点火</Japanese>
<Polish>Odbezpieczony</Polish>
<German>Scharf gemacht</German>
<Korean>뇌관 작동</Korean>
@ -220,7 +220,7 @@
<Key ID="STR_ACE_Advanced_Throwing_Extend">
<English>(Scroll) Extend</English>
<Russian>(Скролл) Увеличить</Russian>
<Japanese>(スクロール) 遠くに</Japanese>
<Japanese>(スクロール) 腕を伸ばす</Japanese>
<Polish>(Kółko m.) przedłuż</Polish>
<German>(Scrollen) Erweitern</German>
<Korean>(마우스 휠) 연장</Korean>
@ -232,7 +232,7 @@
<Key ID="STR_ACE_Advanced_Throwing_Cook">
<English>(Click) Cook</English>
<Russian>(Клик) Подготовить</Russian>
<Japanese>(クリック) 起爆</Japanese>
<Japanese>(クリック) 点火する</Japanese>
<Polish>(Kliknięcie) Odbezpiecz</Polish>
<German>(Klicken) Abkochen</German>
<Korean>(클릭) 예열</Korean>

View File

@ -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
#endif

View File

@ -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

View File

@ -6,7 +6,7 @@
<French>Position invalide fourni</French>
<Japanese>位置が無効です。</Japanese>
<Italian>Posizione invalida fornita.</Italian>
<Chinese>提供的位置無效</Chinese>
<Chinese>提供的位置無效</Chinese>
<Chinesesimp>提供的位置无效。</Chinesesimp>
<Korean>위치가 잘못되었습니다.</Korean>
</Key>
@ -15,7 +15,7 @@
<French>Aucune unité fourni</French>
<Japanese>ユニットがありません。</Japanese>
<Italian>Nessuna unità fornita.</Italian>
<Chinese>找不到可用的單位</Chinese>
<Chinese>找不到可用的單位</Chinese>
<Chinesesimp>找不到可用的单位。</Chinesesimp>
<Korean>병력이 없습니다.</Korean>
</Key>
@ -24,7 +24,7 @@
<French>Il n'y a pas assez de positions pour placer toutes les unités</French>
<Japanese>全ユニットを置くために十分な位置がありません。</Japanese>
<Italian>Non ci sono abbastanza posizioni per piazzare tutte le unità.</Italian>
<Chinese>沒有足夠的位置能擺放所有單位</Chinese>
<Chinese>沒有足夠的位置能擺放所有單位</Chinese>
<Chinesesimp>没有足够的位置能摆放所有单位。</Chinesesimp>
<Korean>모든 병력을 배치 할 공간이 없습니다.</Korean>
</Key>
@ -33,7 +33,7 @@
<French>Aucun bâtiment trouvé</French>
<Japanese>建物がありません。</Japanese>
<Italian>Nessun edificio trovato.</Italian>
<Chinese>沒找到建築物</Chinese>
<Chinese>沒找到建築物</Chinese>
<Chinesesimp>没找到建筑物。</Chinesesimp>
<Korean>건물이 없습니다.</Korean>
</Key>

View File

@ -23,6 +23,7 @@
params ["_unit", "_vehicle"];
_vehicle == vehicle _unit
&& {2 > locked _vehicle}
&& {
private _ejectVarName = "";
{

View 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_2([ARR_2(-1.4, 0.31)], [ARR_2(1, 0.01)])])] call FUNC(statBarStatement_rateOfFIre));
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_accuracy));
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}, {}};
};
};

View File

@ -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,19 @@ PREP(open3DEN);
PREP(openBox);
PREP(portVALoadouts);
PREP(removeBox);
PREP(removeStat);
PREP(removeVirtualItems);
PREP(scanConfig);
PREP(showItem);
PREP(sortPanel);
PREP(statBarStatement_accuracy);
PREP(statBarStatement_default);
PREP(statBarStatement_impact);
PREP(statBarStatement_rateOfFIre);
PREP(statTextStatement_accuracy);
PREP(statTextStatement_mass);
PREP(statTextStatement_rateOfFire);
PREP(statTextStatement_scopeMag);
PREP(updateCamPos);
PREP(updateRightPanel);
PREP(updateUniqueItemsList);

View File

@ -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;

View File

@ -39,3 +39,4 @@ class Cfg3DEN {
#include "ui\RscAttributes.hpp"
#include "CfgEventHandlers.hpp"
#include "RscDisplayMain.hpp"
#include "ACE_Arsenal_Stats.hpp"

View File

@ -3,6 +3,10 @@
#define GRID_W (pixelW * pixelGridNoUIScale * pixelScale)
#define GRID_H (pixelH * pixelGridNoUIScale * pixelScale)
#define WIDTH_TOTAL (safezoneW - 2 * (93 * GRID_W))
#define WIDTH_GAP (WIDTH_TOTAL / 100)
#define WIDTH_SINGLE ((WIDTH_TOTAL - 6 * WIDTH_GAP) / 5)
// IDCs
#define IDD_ace_arsenal 1127001
#define IDC_mouseArea 0
@ -19,6 +23,10 @@
#define IDC_message 9
#define IDC_menuBar 10
#define IDC_menuBarClose 1001
#define IDC_buttonHide 1002
#define IDC_buttonLoadouts 1003
#define IDC_buttonExport 1004
#define IDC_buttonImport 1005
#define IDC_infoBox 11
#define IDC_infoBackground 1101
#define IDC_infoName 1102
@ -96,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
@ -192,6 +226,19 @@ _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_blockRightFrame,\
IDC_blockRighttBackground\
];
#define TOGGLE_RIGHT_PANEL_CONTAINER\
@ -224,6 +271,19 @@ _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_blockRightFrame,\
IDC_blockRighttBackground\
];
#define TOGGLE_RIGHT_PANEL_HIDE\
@ -275,27 +335,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) ||\
@ -304,24 +364,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")];\

View 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

View File

@ -47,25 +47,27 @@ private _cargo = _object getVariable [QGVAR(virtualItems), [
private _configCfgWeapons = configFile >> "CfgWeapons"; //Save this lookup in variable for perf improvement
if (_items isEqualType true && {_items}) then {
private _configItems = uiNamespace getVariable QGVAR(configItems);
if (_items isEqualType true) then {
if (_items) then {
private _configItems = uiNamespace getVariable QGVAR(configItems);
{
(_x select 0) append (_x select 1);
(_x select 2) set [(_x select 3), (_x select 0) arrayIntersect (_x select 0)];
} forEach [
[(_cargo select 0 select 0),(_configItems select 0 select 0), _cargo select 0, 0],
[(_cargo select 0 select 1),(_configItems select 0 select 1), _cargo select 0, 1],
[(_cargo select 0 select 2),(_configItems select 0 select 2), _cargo select 0, 2],
[(_cargo select 1 select 0),(_configItems select 1 select 0), _cargo select 1, 0],
[(_cargo select 1 select 1),(_configItems select 1 select 1), _cargo select 1, 1],
[(_cargo select 1 select 2),(_configItems select 1 select 2), _cargo select 1, 2],
[(_cargo select 1 select 3),(_configItems select 1 select 3), _cargo select 1, 3]
];
{
(_x select 0) append (_x select 1);
(_x select 2) set [(_x select 3), (_x select 0) arrayIntersect (_x select 0)];
} forEach [
[(_cargo select 0 select 0),(_configItems select 0 select 0), _cargo select 0, 0],
[(_cargo select 0 select 1),(_configItems select 0 select 1), _cargo select 0, 1],
[(_cargo select 0 select 2),(_configItems select 0 select 2), _cargo select 0, 2],
[(_cargo select 1 select 0),(_configItems select 1 select 0), _cargo select 1, 0],
[(_cargo select 1 select 1),(_configItems select 1 select 1), _cargo select 1, 1],
[(_cargo select 1 select 2),(_configItems select 1 select 2), _cargo select 1, 2],
[(_cargo select 1 select 3),(_configItems select 1 select 3), _cargo select 1, 3]
];
for "_index" from 2 to 17 do {
(_cargo select _index) append (_configItems select _index);
_cargo set [_index, (_cargo select _index) arrayIntersect (_cargo select _index)];
for "_index" from 2 to 17 do {
(_cargo select _index) append (_configItems select _index);
_cargo set [_index, (_cargo select _index) arrayIntersect (_cargo select _index)];
};
};
} else {
@ -208,7 +210,7 @@ if (_items isEqualType true && {_items}) then {
};
};
case (isClass (configFile >> "CfgVehicles" >> _x)): {
if (getText (configFile >> "CfgVehicles" >> _x >> "vehicleClass") == "Backpacks") then {
if (getNumber (configFile >> "CfgVehicles" >> _x >> "isBackpack") == 1) then {
(_cargo select 6) pushBackUnique _x;
};
};

View File

@ -49,3 +49,5 @@ if (GVAR(shiftState)) then {
[_display, localize LSTRING(exportCurrent)] call FUNC(message);
};
[QGVAR(loadoutExported), [_display, GVAR(shiftState)]] call CBA_fnc_localEvent;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View 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
];

View 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;

View 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];

View File

@ -29,6 +29,12 @@ private _ctrlPanel = _display displayCtrl IDC_leftTabContent;
_ctrlBackground ctrlSetFade 0;
_ctrlBackground ctrlCommit FADE_DELAY;
// Force a "refresh" animation of the panel
_ctrlPanel ctrlSetFade 1;
_ctrlPanel ctrlCommit 0;
_ctrlPanel ctrlSetFade 0;
_ctrlPanel ctrlCommit FADE_DELAY;
_ctrlPanel lbSetCurSel -1;
// Handle icons and filling

View File

@ -22,6 +22,12 @@ _textEditBoxCtrl ctrlSetText "";
private _sharingEnabled = (GVAR(allowSharedLoadouts) && {isMultiplayer});
private _sharedLoadoutsVars = GVAR(sharedLoadoutsNamespace) getVariable QGVAR(sharedLoadoutsVars);
// Force a "refresh" animation of the panel
_contentPanelCtrl ctrlSetFade 1;
_contentPanelCtrl ctrlCommit 0;
_contentPanelCtrl ctrlSetFade 0;
_contentPanelCtrl ctrlCommit FADE_DELAY;
_contentPanelCtrl lnbSetCurSelRow -1;
lnbClear _contentPanelCtrl;
@ -115,4 +121,6 @@ if (GVAR(currentLoadoutsTab) != IDC_buttonSharedLoadouts) then {
} foreach (_sharedLoadoutsVars apply {GVAR(sharedLoadoutsNamespace) getVariable _x});
};
[QGVAR(loadoutsListFilled), [_display, _control]] call CBA_fnc_localEvent;
_contentPanelCtrl lnbSort [1, false];

View File

@ -80,15 +80,17 @@ private _compatibleMagazines = [[[], []], [[], []], [[], []]];
{
private _subIndex = _forEachIndex;
{
// Magazine group
if !(isClass (configFile >> "CfgMagazines" >> _x)) then {
private _magazineGroups = uiNamespace getVariable [QGVAR(magazineGroups),["#CBA_HASH#",[],[],[]]];
private _magArray = [_magazineGroups, _x] call CBA_fnc_hashGet;
{((_compatibleMagazines select _index) select _subIndex) pushBackUnique _x} forEach _magArray;
} else {
((_compatibleMagazines select _index) select _subIndex) pushBackUnique _x
}
((_compatibleMagazines select _index) select _subIndex) pushBackUnique (configName (configFile >> "CfgMagazines" >> _x))
} foreach ([getArray (_weaponConfig >> _x >> "magazines"), getArray (_weaponConfig >> "magazines")] select (_x == "this"));
// Magazine groups
{
private _magazineGroups = uiNamespace getVariable [QGVAR(magazineGroups),["#CBA_HASH#",[],[],[]]];
private _magArray = [_magazineGroups, toLower _x] call CBA_fnc_hashGet;
{((_compatibleMagazines select _index) select _subIndex) pushBackUnique _x} forEach _magArray;
} foreach ([getArray (_weaponConfig >> _x >> "magazineWell"), getArray (_weaponConfig >> "magazineWell")] select (_x == "this"));
} foreach getArray (_weaponConfig >> "muzzles");
};
} foreach [primaryWeapon GVAR(center), handgunWeapon GVAR(center), secondaryWeapon GVAR(center)];
@ -134,6 +136,12 @@ switch (GVAR(currentLeftPanel)) do {
};
};
// Force a "refresh" animation of the panel
_ctrlPanel ctrlSetFade 1;
_ctrlPanel ctrlCommit 0;
_ctrlPanel ctrlSetFade 0;
_ctrlPanel ctrlCommit FADE_DELAY;
_itemsToCheck = _itemsToCheck apply {toLower _x};
_compatibleItems = _compatibleItems apply {toLower _x};
@ -280,9 +288,7 @@ switch (_ctrlIDC) do {
};
};
if (GVAR(currentRightPanel) != _ctrlIDC) then {
(_display displayCtrl IDC_rightSearchbar) ctrlSetText "";
};
(_display displayCtrl IDC_rightSearchbar) ctrlSetText "";
GVAR(currentRightPanel) = _ctrlIDC;

View File

@ -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];
};

View 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
];
};

View File

@ -44,12 +44,12 @@ if (_global && {isMultiplayer} && {{_object in _x} count GVAR(EHIDArray) == 0})
{
params ["_target", "_player"];
[{[_this select 0, _this select 1] call FUNC(openBox)}, [_target, _player]] call CBA_fnc_execNextFrame;
[_target, _player] call FUNC(openBox);
},
{
params ["_target", "_player"];
[_player, _target, ["isNotSwimming", "isNotCarrying", "isNotDragging", "notOnMap", "isNotEscorting", "isNotOnLadder"]] call EFUNC(common,canInteractWith)
[_player, _target] call EFUNC(common,canInteractWith)
},
{},
[]

View File

@ -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;
};

View File

@ -74,4 +74,6 @@ switch (ctrlIDC _control) do {
GVAR(currentLoadoutsTab) = ctrlIDC _control;
[QGVAR(loadoutsTabChanged), [_display, _control]] call CBA_fnc_localEvent;
[_display, _control] call FUNC(fillLoadoutsList);

View File

@ -12,17 +12,13 @@
*/
#include "script_component.hpp"
GVAR(camera) cameraEffect ["terminate", "back"];
(_this select 1) params ["", "_exitCode"];
private _cameraData = [getposAtl GVAR(camera), (getposAtl GVAR(camera)) vectorFromTo (getposAtl GVAR(cameraHelper))];
[QGVAR(displayClosed), []] call CBA_fnc_localEvent;
removeMissionEventHandler ["draw3D", GVAR(camPosUpdateHandle)];
camDestroy GVAR(camera);
GVAR(center) switchCamera GVAR(cameraView);
deleteVehicle GVAR(cameraHelper);
if (is3DEN) then {
private _centerOriginParent = objectParent GVAR(centerOrigin);
@ -34,13 +30,13 @@ if (is3DEN) then {
GVAR(centerOrigin) hideObject false;
// Apply the loadout from the dummy to all selected units
{
_x setUnitLoadout (getUnitLoadout GVAR(center));
_x setFace GVAR(currentFace);
_x setSpeaker GVAR(currentVoice);
} foreach (get3DENSelected "object");
if (_exitCode == 1) then {
{
_x setUnitLoadout (getUnitLoadout GVAR(center));
} foreach (get3DENSelected "object");
save3DENInventory (get3DENSelected "object");
save3DENInventory (get3DENSelected "object");
};
deleteVehicle GVAR(light);
deleteVehicle GVAR(center);
@ -58,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;
@ -69,12 +75,6 @@ if (isMultiplayer) then {
[QGVAR(center) + "_voice", GVAR(center)] call CBA_fnc_removeGlobalEventJIP;
};
if !(isnull curatorCamera) then {
curatorcamera setPosAtl (_cameraData select 0);
curatorcamera setVectorDir (_cameraData select 1);
curatorcamera cameraEffect ["internal","back"];
};
GVAR(camera) = nil;
GVAR(cameraHelper) = nil;
@ -96,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;

View File

@ -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,27 @@ _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;
_importButtonCtrl ctrlSetFade 0.6;
_importButtonCtrl ctrlCommit 0;
};
//--------------- Camera prep
cutText ["","plain"];
showCommandingMenu "";
@ -246,6 +272,33 @@ if (is3DEN) then {
GVAR(visionMode)= -2 call bis_fnc_3DENVisionMode;
["ShowInterface",false] spawn bis_fnc_3DENInterface;
if (get3denactionstate "togglemap" > 0) then {do3DENAction "togglemap";};
{
private _ctrl = _display displayctrl _x;
_ctrl ctrlEnable false;
_ctrl ctrlSetFade 0.6;
_ctrl ctrlCommit 0;
} forEach [
IDC_buttonFace,
IDC_buttonVoice,
IDC_buttonInsigna
];
_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
@ -261,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);

View File

@ -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

View File

@ -28,4 +28,6 @@ _mouseBlockCtrl ctrlCommit 0;
[_arsenalDisplay] call FUNC(buttonHide);
[QGVAR(loadoutsDisplayClosed), []] call CBA_fnc_localEvent;
[_arsenalDisplay , _arsenalDisplay displayCtrl GVAR(currentLeftPanel)] call FUNC(fillLeftPanel);

View File

@ -57,4 +57,6 @@ if !(GVAR(allowSharedLoadouts) && {isMultiplayer}) then {
_buttonShareLoadoutsBackgroundCtrl ctrlCommit 0;
};
[QGVAR(loadoutsDisplayOpened), [_display]] call CBA_fnc_localEvent;
[_display, _display displayCtrl IDC_buttonMyLoadouts] call FUNC(loadoutsChangeTab);

View File

@ -28,28 +28,33 @@ private _selectCorrectPanelWeapon = [_weaponDefaultRightPanel, _display displayC
private _containerDefaultRightPanel = _display displayCtrl IDC_buttonMisc;
private _selectCorrectPanelContainer = [_containerDefaultRightPanel, _display displayCtrl GVAR(currentRightPanel)] select (!(isNil QGVAR(currentRightPanel)) && {GVAR(currentRightPanel) in [RIGHT_PANEL_ITEMS_IDCS]});
private _fnc_clearPreviousWepMags = {
private _compatibleMags = getArray (configfile >> "cfgweapons" >> _baseWeapon >> "magazines");
{
GVAR(center) removeMagazines _x;
} foreach _compatibleMags;
GVAR(currentItems) set [15, uniformItems GVAR(center)];
GVAR(currentItems) set [16, vestItems GVAR(center)];
GVAR(currentItems) set [17, backpackItems GVAR(center)];
};
switch (GVAR(currentLeftPanel)) do {
case IDC_buttonPrimaryWeapon : {
private _baseWeapon = ((GVAR(currentItems) select 0) call bis_fnc_baseWeapon);
if ((GVAR(currentItems) select 0) != _item && {_baseWeapon != _item}) then {
if (_item == "") then {
call _fnc_clearPreviousWepMags;
private _compatibleMags = getArray (configfile >> "cfgweapons" >> _baseWeapon >> "magazines");
{
GVAR(center) removeMagazines _x;
} foreach _compatibleMags;
GVAR(center) removeWeapon (primaryWeapon GVAR(center));
GVAR(currentItems) set [18, ["", "", "", "", "", ""]];
GVAR(currentItems) set [0, _item];
GVAR(currentItems) set [15, uniformItems GVAR(center)];
GVAR(currentItems) set [16, vestItems GVAR(center)];
GVAR(currentItems) set [17, backpackItems GVAR(center)];
if (_item == "") then {
GVAR(center) removeWeapon (primaryWeapon GVAR(center));
GVAR(currentItems) set [18, ["", "", "", "", "", ""]];
GVAR(currentItems) set [0, _item];
} else {
TOGGLE_RIGHT_PANEL_HIDE
} else {
if ((GVAR(currentItems) select 0) != _item && {_baseWeapon != _item}) then {
call _fnc_clearPreviousWepMags;
private _compatibleItems = (_item call bis_fnc_compatibleItems) apply {tolower _x};
GVAR(center) addWeapon _item;
@ -65,11 +70,7 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(currentItems) set [18, (primaryWeaponItems GVAR(center)) + ([_primaryMags + [""], _primaryMags] select (count _primaryMags > 1))];
GVAR(currentItems) set [0, _item];
};
};
if (_item == "") then {
TOGGLE_RIGHT_PANEL_HIDE
} else {
TOGGLE_RIGHT_PANEL_WEAPON
[_display, _selectCorrectPanelWeapon] call FUNC(fillRightPanel);
};
@ -81,23 +82,17 @@ switch (GVAR(currentLeftPanel)) do {
case IDC_buttonHandgun : {
private _baseWeapon = ((GVAR(currentItems) select 2) call bis_fnc_baseWeapon);
if ((GVAR(currentItems) select 2) != _item && {_baseWeapon != _item}) then {
if (_item == "") then {
call _fnc_clearPreviousWepMags;
private _compatibleMags = getArray (configfile >> "cfgweapons" >> _baseWeapon >> "magazines");
{
GVAR(center) removeMagazines _x;
} foreach _compatibleMags;
GVAR(center) removeWeapon (handgunWeapon GVAR(center));
GVAR(currentItems) set [18, ["", "", "", "", "", ""]];
GVAR(currentItems) set [2, _item];
GVAR(currentItems) set [15, uniformItems GVAR(center)];
GVAR(currentItems) set [16, vestItems GVAR(center)];
GVAR(currentItems) set [17, backpackItems GVAR(center)];
if (_item == "") then {
GVAR(center) removeWeapon (handgunWeapon GVAR(center));
GVAR(currentItems) set [18, ["", "", "", "", "", ""]];
GVAR(currentItems) set [2, _item];
} else {
TOGGLE_RIGHT_PANEL_HIDE
} else {
if ((GVAR(currentItems) select 2) != _item && {_baseWeapon != _item}) then {
call _fnc_clearPreviousWepMags;
private _compatibleItems = (_item call bis_fnc_compatibleItems) apply {tolower _x};
GVAR(center) addWeapon _item;
@ -113,11 +108,7 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(currentItems) set [20, (handgunItems GVAR(center)) + ([_handgunMags + [""], _handgunMags] select (count _handgunMags > 1))];
GVAR(currentItems) set [2, _item];
};
};
if (_item == "") then {
TOGGLE_RIGHT_PANEL_HIDE
} else {
TOGGLE_RIGHT_PANEL_WEAPON
[_display, [_selectCorrectPanelWeapon, _weaponDefaultRightPanel] select (GVAR(currentRightPanel) == IDC_buttonCurrentMag2)] call FUNC(fillRightPanel);
};
@ -129,23 +120,16 @@ switch (GVAR(currentLeftPanel)) do {
case IDC_buttonSecondaryWeapon : {
private _baseWeapon = ((GVAR(currentItems) select 1) call bis_fnc_baseWeapon);
if ((GVAR(currentItems) select 1) != _item && {_baseWeapon != _item}) then {
if (_item == "") then {
call _fnc_clearPreviousWepMags;
private _compatibleMags = getArray (configfile >> "cfgweapons" >> _baseWeapon >> "magazines");
{
GVAR(center) removeMagazines _x;
} foreach _compatibleMags;
GVAR(currentItems) set [15, uniformItems GVAR(center)];
GVAR(currentItems) set [16, vestItems GVAR(center)];
GVAR(currentItems) set [17, backpackItems GVAR(center)];
if (_item == "") then {
GVAR(center) removeWeapon (secondaryWeapon GVAR(center));
GVAR(currentItems) set [18, ["", "", "", "", "", ""]];
GVAR(currentItems) set [1, _item];
} else {
GVAR(center) removeWeapon (secondaryWeapon GVAR(center));
GVAR(currentItems) set [18, ["", "", "", "", "", ""]];
GVAR(currentItems) set [1, _item];
TOGGLE_RIGHT_PANEL_HIDE
} else {
if ((GVAR(currentItems) select 1) != _item && {_baseWeapon != _item}) then {
call _fnc_clearPreviousWepMags;
private _compatibleItems = (_item call bis_fnc_compatibleItems) apply {tolower _x};
GVAR(center) addWeapon _item;
@ -161,11 +145,7 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(currentItems) set [19, (secondaryWeaponItems GVAR(center)) + ([_secondaryMags + [""], _secondaryMags] select (count _secondaryMags > 1))];
GVAR(currentItems) set [1, _item];
};
};
if (_item == "") then {
TOGGLE_RIGHT_PANEL_HIDE
} else {
TOGGLE_RIGHT_PANEL_WEAPON
[_display, [_selectCorrectPanelWeapon, _weaponDefaultRightPanel] select (GVAR(currentRightPanel) == IDC_buttonCurrentMag2)] call FUNC(fillRightPanel);
};
@ -175,14 +155,18 @@ switch (GVAR(currentLeftPanel)) do {
};
case IDC_buttonHeadgear : {
if (_item == "") then {
removeHeadgear GVAR(center);
GVAR(currentItems) set [3, _item];
} else {
GVAR(center) addHeadgear _item;
GVAR(currentItems) set [3, _item];
if ((GVAR(currentItems) select 3) != _item) then {
GVAR(center) addHeadgear _item;
GVAR(currentItems) set [3, _item];
};
};
call FUNC(showItem);
TOGGLE_RIGHT_PANEL_HIDE
[_display, _control, _curSel, (configFile >> "CfgWeapons" >> _item)] call FUNC(itemInfo);
};
@ -196,17 +180,19 @@ switch (GVAR(currentLeftPanel)) do {
TOGGLE_RIGHT_PANEL_HIDE
} else {
GVAR(center) forceAddUniform _item;
if ((GVAR(currentItems) select 4) != _item) then {
GVAR(center) forceAddUniform _item;
while {count uniformItems GVAR(center) > 0} do {
GVAR(center) removeItemFromUniform (uniformItems GVAR(center) select 0);
}; //--- Remove default config contents
while {count uniformItems GVAR(center) > 0} do {
GVAR(center) removeItemFromUniform (uniformItems GVAR(center) select 0);
}; //--- Remove default config contents
{GVAR(center) addItemtoUniform _x} foreach (GVAR(currentItems) select 15);
GVAR(currentItems) set [4, _item];
{GVAR(center) addItemtoUniform _x} foreach (GVAR(currentItems) select 15);
GVAR(currentItems) set [4, _item];
[GVAR(center), ""] call bis_fnc_setUnitInsignia;
[GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia;
[GVAR(center), ""] call bis_fnc_setUnitInsignia;
[GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia;
};
TOGGLE_RIGHT_PANEL_CONTAINER
[_display, _selectCorrectPanelContainer] call FUNC(fillRightPanel);
@ -225,13 +211,15 @@ switch (GVAR(currentLeftPanel)) do {
TOGGLE_RIGHT_PANEL_HIDE
} else {
GVAR(center) addVest _item;
while {count vestItems GVAR(center) > 0} do {
GVAR(center) removeItemFromVest (VestItems GVAR(center) select 0);
}; //--- Remove default config contents
{GVAR(center) addItemToVest _x} foreach (GVAR(currentItems) select 16);
if ((GVAR(currentItems) select 5) != _item) then {
GVAR(center) addVest _item;
while {count vestItems GVAR(center) > 0} do {
GVAR(center) removeItemFromVest (VestItems GVAR(center) select 0);
}; //--- Remove default config contents
{GVAR(center) addItemToVest _x} foreach (GVAR(currentItems) select 16);
GVAR(currentItems) set [5, _item];
GVAR(currentItems) set [5, _item];
};
TOGGLE_RIGHT_PANEL_CONTAINER
[_display, _selectCorrectPanelContainer] call FUNC(fillRightPanel);
@ -250,14 +238,16 @@ switch (GVAR(currentLeftPanel)) do {
TOGGLE_RIGHT_PANEL_HIDE
} else {
removeBackpack GVAR(center);
GVAR(center) addBackpack _item;
while {count backpackItems GVAR(center) > 0} do {
GVAR(center) removeItemFromBackpack (backpackItems GVAR(center) select 0);
}; //--- Remove default config contents
{GVAR(center) addItemToBackpack _x} foreach (GVAR(currentItems) select 17);
if ((GVAR(currentItems) select 6) != _item) then {
removeBackpack GVAR(center);
GVAR(center) addBackpack _item;
while {count backpackItems GVAR(center) > 0} do {
GVAR(center) removeItemFromBackpack (backpackItems GVAR(center) select 0);
}; //--- Remove default config contents
{GVAR(center) addItemToBackpack _x} foreach (GVAR(currentItems) select 17);
GVAR(currentItems) set [6, _item];
GVAR(currentItems) set [6, _item];
};
TOGGLE_RIGHT_PANEL_CONTAINER
[_display, _selectCorrectPanelContainer] call FUNC(fillRightPanel);
@ -272,8 +262,10 @@ switch (GVAR(currentLeftPanel)) do {
removeGoggles GVAR(center);
GVAR(currentItems) set [7, _item];
} else {
GVAR(center) addGoggles _item;
GVAR(currentItems) set [7, _item];
if ((GVAR(currentItems) select 7) != _item) then {
GVAR(center) addGoggles _item;
GVAR(currentItems) set [7, _item];
};
};
call FUNC(showItem);
@ -286,8 +278,10 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(center) unlinkItem (GVAR(currentItems) select 8);
GVAR(currentItems) set [8, _item];
} else {
GVAR(center) linkItem _item;
GVAR(currentItems) set [8, _item];
if ((GVAR(currentItems) select 8) != _item) then {
GVAR(center) linkItem _item;
GVAR(currentItems) set [8, _item];
};
};
call FUNC(showItem);
@ -300,10 +294,12 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(center) removeWeapon (binocular GVAR(center));
GVAR(currentItems) set [9, _item];
} else {
GVAR(center) addWeapon _item;
GVAR(currentItems) set [9, _item];
call FUNC(showItem);
ADDBINOCULARSMAG
if ((GVAR(currentItems) select 9) != _item) then {
GVAR(center) addWeapon _item;
GVAR(currentItems) set [9, _item];
call FUNC(showItem);
ADDBINOCULARSMAG
};
};
call FUNC(showItem);
TOGGLE_RIGHT_PANEL_HIDE
@ -315,8 +311,10 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(center) unlinkItem (GVAR(currentItems) select 10) select 0;
GVAR(currentItems) set [10, _item];
} else {
GVAR(center) linkItem _item;
GVAR(currentItems) set [10, _item];
if ((GVAR(currentItems) select 10) != _item) then {
GVAR(center) linkItem _item;
GVAR(currentItems) set [10, _item];
};
};
call FUNC(showItem);
@ -329,8 +327,10 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(center) unlinkItem (GVAR(currentItems) select 11) select 0;
GVAR(currentItems) set [11, _item];
} else {
GVAR(center) linkItem _item;
GVAR(currentItems) set [11, _item];
if ((GVAR(currentItems) select 11) != _item) then {
GVAR(center) linkItem _item;
GVAR(currentItems) set [11, _item];
};
};
call FUNC(showItem);
@ -343,8 +343,10 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(center) unlinkItem (GVAR(currentItems) select 12) select 0;
GVAR(currentItems) set [12, _item];
} else {
GVAR(center) linkItem _item;
GVAR(currentItems) set [12, _item];
if ((GVAR(currentItems) select 12) != _item) then {
GVAR(center) linkItem _item;
GVAR(currentItems) set [12, _item];
};
};
call FUNC(showItem);
@ -357,8 +359,10 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(center) unlinkItem (GVAR(currentItems) select 13);
GVAR(currentItems) set [13, _item];
} else {
GVAR(center) linkItem _item;
GVAR(currentItems) set [13, _item];
if ((GVAR(currentItems) select 13) != _item) then {
GVAR(center) linkItem _item;
GVAR(currentItems) set [13, _item];
};
};
call FUNC(showItem);
@ -371,8 +375,10 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(center) unlinkItem (GVAR(currentItems) select 14) select 0;
GVAR(currentItems) set [14, _item];
} else {
GVAR(center) linkItem _item;
GVAR(currentItems) set [14, _item];
if ((GVAR(currentItems) select 14) != _item) then {
GVAR(center) linkItem _item;
GVAR(currentItems) set [14, _item];
};
};
call FUNC(showItem);

View File

@ -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 {};
@ -42,7 +42,7 @@ if (isNil "_displayToUse" || {!isnil QGVAR(camera)}) exitWith {
};
if (_mode) then {
GVAR(virtualItems) = uiNamespace getVariable QGVAR(configItems);
GVAR(virtualItems) = +(uiNamespace getVariable QGVAR(configItems));
} else {
GVAR(virtualItems) = +(_object getVariable [QGVAR(virtualItems), [
[[], [], []], [[], [], [], []], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []
@ -50,4 +50,9 @@ if (_mode) then {
};
GVAR(center) = _center;
_displayToUse createDisplay QGVAR(display);
if (is3DEN) then {
_displayToUse createDisplay QGVAR(display);
} else {
[{(_this select 0) createDisplay (_this select 1)}, [_displayToUse, QGVAR(display)]] call CBA_fnc_execNextFrame;
};

View File

@ -0,0 +1,60 @@
/*
* 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
};
{
_x deleteAt (_x findIf {_x select 0 == _currentID});
} 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;

View File

@ -44,9 +44,11 @@ private _cargo = _object getVariable [QGVAR(virtualItems), [
[ ] // InventoryItems 17
]];
if (_items isEqualType true && {_items}) then {
[_object, _global] call FUNC(removeBox);
_object setVariable [QGVAR(virtualItems), nil, _global];
if (_items isEqualType true) then {
if (_items) then {
[_object, _global] call FUNC(removeBox);
_object setVariable [QGVAR(virtualItems), nil, _global];
};
} else {
// Make sure all items are in string form

View File

@ -34,7 +34,6 @@ private _cargo = [
];
private _configCfgWeapons = configFile >> "CfgWeapons"; //Save this lookup in variable for perf improvement
private _magazineGroups = [[],[]] call CBA_fnc_hashCreate;
{
private _configItemInfo = _x >> "ItemInfo";
@ -127,20 +126,18 @@ private _magazineGroups = [[],[]] call CBA_fnc_hashCreate;
};
} foreach configProperties [_configCfgWeapons, "isClass _x && {(if (isNumber (_x >> 'scopeArsenal')) then {getNumber (_x >> 'scopeArsenal')} else {getNumber (_x >> 'scope')}) == 2} && {getNumber (_x >> 'ace_arsenal_hide') != 1}", true];
private _grenadeList = [];
{
_grenadeList append getArray (_configCfgWeapons >> "Throw" >> _x >> "magazines");
} foreach getArray (_configCfgWeapons >> "Throw" >> "muzzles");
private _putList = [];
{
_putList append getArray (_configCfgWeapons >> "Put" >> _x >> "magazines");
} foreach getArray (_configCfgWeapons >> "Put" >> "muzzles");
{
private _className = configName _x;
private _grenadeList = [];
{
_grenadeList append getArray (_configCfgWeapons >> "Throw" >> _x >> "magazines");
false
} count getArray (_configCfgWeapons >> "Throw" >> "muzzles");
private _putList = [];
{
_putList append getArray (_configCfgWeapons >> "Put" >> _x >> "magazines");
false
} count getArray (_configCfgWeapons >> "Put" >> "muzzles");
switch true do {
// Rifle, handgun, secondary weapons mags
@ -160,25 +157,32 @@ private _magazineGroups = [[],[]] call CBA_fnc_hashCreate;
(_cargo select 16) pushBackUnique _className;
};
};
if (isArray (_x >> "magazineGroup")) then {
{
private _entry = [_magazineGroups, _x] call CBA_fnc_hashGet;
_entry pushBackUnique _className;
[_magazineGroups, _x, _entry] call CBA_fnc_hashSet;
} forEach getArray (_x >> "magazineGroup")
};
} foreach configProperties [(configFile >> "CfgMagazines"), "isClass _x && {getNumber (_x >> 'scope') == 2} && {getNumber (_x >> 'ace_arsenal_hide') != 1}", true];
} foreach configProperties [(configFile >> "CfgMagazines"), "isClass _x && {(if (isNumber (_x >> 'scopeArsenal')) then {getNumber (_x >> 'scopeArsenal')} else {getNumber (_x >> 'scope')}) == 2} && {getNumber (_x >> 'ace_arsenal_hide') != 1}", true];
{
if (getText (_x >> "vehicleClass") == "Backpacks") then {
if (getNumber (_x >> "isBackpack") == 1) then {
(_cargo select 6) pushBackUnique (configName _x);
};
} foreach configProperties [(configFile >> "CfgVehicles"), "isClass _x && {getNumber (_x >> 'scope') == 2} && {getNumber (_x >> 'ace_arsenal_hide') != 1}", true];
} foreach configProperties [(configFile >> "CfgVehicles"), "isClass _x && {(if (isNumber (_x >> 'scopeArsenal')) then {getNumber (_x >> 'scopeArsenal')} else {getNumber (_x >> 'scope')}) == 2} && {getNumber (_x >> 'ace_arsenal_hide') != 1}", true];
{
(_cargo select 7) pushBackUnique (configName _x);
} foreach configProperties [(configFile >> "CfgGlasses"), "isClass _x && {getNumber (_x >> 'scope') == 2} && {getNumber (_x >> 'ace_arsenal_hide') != 1}", true];
} foreach configProperties [(configFile >> "CfgGlasses"), "isClass _x && {(if (isNumber (_x >> 'scopeArsenal')) then {getNumber (_x >> 'scopeArsenal')} else {getNumber (_x >> 'scope')}) == 2} && {getNumber (_x >> 'ace_arsenal_hide') != 1}", true];
private _magazineGroups = [[],[]] call CBA_fnc_hashCreate;
private _cfgMagazines = configFile >> "CfgMagazines";
{
private _magList = [];
{
private _magazines = (getArray _x) select {isClass (_cfgMagazines >> _x)}; //filter out non-existent magazines
_magazines = _magazines apply {configName (_cfgMagazines >> _x)}; //Make sure classname case is correct
_magList append _magazines;
} foreach configProperties [_x, "isArray _x", true];
[_magazineGroups, toLower configName _x, _magList arrayIntersect _magList] call CBA_fnc_hashSet;
} foreach configProperties [(configFile >> "CfgMagazineWells"), "isClass _x", true];
uiNamespace setVariable [QGVAR(configItems), _cargo];
uiNamespace setVariable [QGVAR(magazineGroups), _magazineGroups];

View File

@ -13,7 +13,7 @@
#include "script_component.hpp"
#include "..\defines.hpp"
if (GVAR(centerNotPlayer)) exitWith {};
private _nextAction = switch (GVAR(currentLeftPanel)) do {

View File

@ -0,0 +1,31 @@
/*
* Author: Alganthe
* Accuracy bar statement.
*
* Arguments:
* 0: stats array (ARRAY)
* 1: item config path (CONFIG)
* 2: Args
* 2.1: Stat limits (ARRAY of BOOL)
* 2.2: Bar limits (ARRAY of SCALAR)
*
* Return Value:
* Number
*
* Public: No
*/
#include "script_component.hpp"
params ["_stat", "_config", "_args"];
_args params ["_statMinMax", "_barLimits"];
private _fireModes = getArray (_config >> "modes");
private _dispersion = [];
{
_dispersion pushBackUnique log (getNumber (_config >> _x >> "dispersion"));
} foreach _fireModes;
_dispersion sort true;
linearConversion [_statMinMax select 0, _statMinMax select 1, _dispersion param [0, 0], _barLimits select 0, _barLimits select 1]

View 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]

View 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)

View File

@ -0,0 +1,31 @@
/*
* Author: Alganthe
* Rate of fire bar statement.
*
* Arguments:
* 0: stats array (ARRAY)
* 1: item config path (CONFIG)
* 2: Args
* 2.1: Stat limits (ARRAY of BOOL)
* 2.2: Bar limits (ARRAY of SCALAR)
*
* Return Value:
* Number
*
* Public: No
*/
#include "script_component.hpp"
params ["_stat", "_config", "_args"];
_args params ["_statMinMax", "_barLimits"];
private _fireModes = getArray (_config >> "modes");
private _fireRate = [];
{
_fireRate pushBackUnique log (getNumber (_config >> _x >> "reloadTime"));
} foreach _fireModes;
_fireRate sort true;
linearConversion [_statMinMax select 0, _statMinMax select 1, _fireRate param [0, 0], _barLimits select 0, _barLimits select 1]

View File

@ -0,0 +1,32 @@
/*
* 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 _fireModes = getArray (_config >> "modes");
private _dispersion = [];
{
_dispersion pushBackUnique (getNumber (_config >> _x >> "dispersion"));
} foreach _fireModes;
_dispersion sort true;
_dispersion = _dispersion param [0, 0];
format ["%1 MIL (%2 MOA)", (_dispersion * 1000) toFixed 2, (_dispersion / pi * 10800) ToFixed 1];

View 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]

View File

@ -0,0 +1,32 @@
/*
* Author: Alganthe
* Rate of fire 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 _fireModes = getArray (_config >> "modes");
private _fireRate = [];
{
_fireRate pushBackUnique (getNumber (_config >> _x >> "reloadTime"));
} foreach _fireModes;
_fireRate sort true;
_fireRate = _fireRate param [0, 0];
format ["%1 rpm", round (60 / _fireRate)]

View 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]

View File

@ -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]);
};

View File

@ -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;
};

View File

@ -47,7 +47,7 @@ cba_diagnostic_projectileMaxLines = 10;
private _return = [
localize "str_sure",
localize "str_a3_rscdisplaymain_buttonexit",
true, false,
true, true,
_display, false, true
] call BIS_fnc_GUImessage;

View File

@ -1,3 +1,4 @@
#include "\z\ace\addons\arsenal\script_component.hpp"
#undef PREP // make.py can't redefine already defined macros
#define PREP(var) FUNC(var) = compileFinal preprocessFileLineNumbers format ["fnc_%1.sqf", QUOTE(var)]

View File

@ -8,6 +8,9 @@
<Polish>Ukryj</Polish>
<Japanese>非表示</Japanese>
<Italian>Nascondere</Italian>
<Korean>숨김</Korean>
<Chinese>隱藏</Chinese>
<Chinesesimp>隐藏</Chinesesimp>
</Key>
<Key ID="STR_ACE_Arsenal_buttonHideTooltip">
<English>Hide interface</English>
@ -16,6 +19,9 @@
<Polish>Ukryj interfejs</Polish>
<Japanese>インターフェイスを隠す</Japanese>
<Italian>Nascondi interfaccia</Italian>
<Korean>인터페이스 숨기기</Korean>
<Chinese>隱藏介面</Chinese>
<Chinesesimp>隐藏介面</Chinesesimp>
</Key>
<Key ID="STR_ACE_Arsenal_buttonLoadoutsText">
<English>Loadouts</English>
@ -24,6 +30,9 @@
<Polish>Zestawy wyposażenia</Polish>
<Japanese>装備</Japanese>
<Italian>Equipaggiamenti</Italian>
<Korean>로드아웃</Korean>
<Chinese>裝備</Chinese>
<Chinesesimp>装备</Chinesesimp>
</Key>
<Key ID="STR_ACE_Arsenal_buttonExportText">
<English>Export</English>
@ -32,6 +41,9 @@
<Polish>Eksportuj</Polish>
<Japanese>出力</Japanese>
<Italian>Esporta</Italian>
<Korean>내보내기</Korean>
<Chinese>匯出</Chinese>
<Chinesesimp>汇出</Chinesesimp>
</Key>
<Key ID="STR_ACE_Arsenal_buttonImportText">
<English>Import</English>
@ -40,6 +52,9 @@
<Polish>Importuj</Polish>
<Japanese>取込</Japanese>
<Italian>Importa</Italian>
<Korean>가져오기</Korean>
<Chinese>匯入</Chinese>
<Chinesesimp>汇入</Chinesesimp>
</Key>
<Key ID="STR_ACE_Arsenal_buttonCloseText">
<English>Close</English>
@ -48,6 +63,9 @@
<Polish>Zamknij</Polish>
<Japanese>閉じる</Japanese>
<Italian>Chiudi</Italian>
<Korean>닫기</Korean>
<Chinese>關閉</Chinese>
<Chinesesimp>关闭</Chinesesimp>
</Key>
<Key ID="STR_ACE_Arsenal_noVirtualItems">
<English>No virtual item available</English>
@ -56,6 +74,9 @@
<Polish>Brak dostępnych przedmiotów wirtualnych</Polish>
<Japanese>利用可能なバーチャル アイテムは無し</Japanese>
<Italian>Nessun oggetto virtuale disponibile</Italian>
<Korean>가상장비 사용 불가</Korean>
<Chinese>沒有可用的虛擬物品</Chinese>
<Chinesesimp>没有可用的虚拟物品</Chinesesimp>
</Key>
<Key ID="STR_ACE_Arsenal_buttonSaveText">
<English>Save</English>
@ -64,6 +85,9 @@
<Polish>Zapisz</Polish>
<Japanese>保存</Japanese>
<Italian>Salva</Italian>
<Korean>저장</Korean>
<Chinese>保存</Chinese>
<Chinesesimp>保存</Chinesesimp>
</Key>
<Key ID="STR_ACE_Arsenal_buttonSaveTooltip">
<English>Save the current loadout</English>
@ -72,6 +96,9 @@
<Polish>Zapisz obecny zestaw</Polish>
<Japanese>現在の装備を保存します</Japanese>
<Italian>Salva l'equipaggiamento corrente</Italian>
<Korean>현재 로드아웃 저장</Korean>
<Chinese>保存當前的裝備</Chinese>
<Chinesesimp>保存当前的装备</Chinesesimp>
</Key>
<Key ID="STR_ACE_Arsenal_buttonRenameText">
<English>Rename</English>
@ -80,14 +107,20 @@
<Polish>Zmień nazwę</Polish>
<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>
@ -96,14 +129,20 @@
<Polish>Wczytaj</Polish>
<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>
@ -112,14 +151,20 @@
<Polish>Skasuj</Polish>
<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>
@ -128,14 +173,20 @@
<Polish>Moje zestawy</Polish>
<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>
@ -144,6 +195,9 @@
<Polish>Domyślne zestawy</Polish>
<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>
@ -152,6 +206,9 @@
<Polish>Zestawy udostępnione przez twórcę misji</Polish>
<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>
@ -160,6 +217,9 @@
<Polish>Publiczne zestawy</Polish>
<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>
@ -168,6 +228,9 @@
<Polish>Zestawy udostępnione przez Ciebie i innych graczy</Polish>
<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>
@ -176,6 +239,9 @@
<Polish>Sortuj wg wagi</Polish>
<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>
@ -184,6 +250,9 @@
<Polish>Sortuj wg ilości</Polish>
<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>
@ -192,6 +261,9 @@
<Polish>Udostępnij lub przestań udostępniać wybrany zestaw</Polish>
<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>
@ -200,6 +272,9 @@
<Polish>Prywatny</Polish>
<Japanese>非公開</Japanese>
<Italian>Privato</Italian>
<Korean>개인</Korean>
<Chinese>私用</Chinese>
<Chinesesimp>私用</Chinesesimp>
</Key>
<Key ID="STR_ACE_Arsenal_buttonSharePublicText">
<English>Public</English>
@ -208,6 +283,9 @@
<Polish>Publiczny</Polish>
<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>
@ -216,6 +294,9 @@
<Polish>Lista domyślnych zestawów jest pusta!</Polish>
<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>
@ -224,6 +305,9 @@
<Polish>Lista domyślnych zestawów została eksportowana do schowka</Polish>
<Japanese>標準の装備一欄はクリップボードへ出力されました</Japanese>
<Italian>La lista degli equipaggiamenti standard è stata esportata negli appunti</Italian>
<Korean>클립보드에 기본 로드아웃 목록 내보내기</Korean>
<Chinese>預設的裝備清單已匯出到剪貼簿中</Chinese>
<Chinesesimp>预设的装备清单已汇出到剪贴簿中</Chinesesimp>
</Key>
<Key ID="STR_ACE_Arsenal_exportCurrent">
<English>Current loadout exported to clipboard</English>
@ -232,6 +316,9 @@
<Polish>Obecny zestaw został eksportowany do schowka</Polish>
<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>
@ -240,6 +327,9 @@
<Polish>Podano zły format</Polish>
<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>
@ -248,6 +338,9 @@
<Polish>Lista domyślnych zestawów została importowana ze schowka</Polish>
<Japanese>標準の装備一欄はクリップボードから取込されました</Japanese>
<Italian>La lista degli equipaggiamenti standard è stata importata dagli appunti</Italian>
<Korean>클립보드에서 기본 로드아웃 가져오기</Korean>
<Chinese>預設的裝備清單已從剪貼簿中匯入</Chinese>
<Chinesesimp>预设的装备清单已从剪贴簿中汇入</Chinesesimp>
</Key>
<Key ID="STR_ACE_Arsenal_importedCurrent">
<English>Loadout imported from clipboard</English>
@ -256,6 +349,9 @@
<Polish>Zestaw został importowany ze schowka</Polish>
<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>
@ -264,6 +360,9 @@
<Polish>Następujący zestaw został skasowany:</Polish>
<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>
@ -271,7 +370,10 @@
<German>Folgende Ausrüstung ist nicht mehr öffentlich:</German>
<Polish>Następujący zestaw nie jest już publiczny:</Polish>
<Japanese>次の装備は非公開になりました:</Japanese>
<Italian>Il seguente eequipaggiamento non è più pubblico:</Italian>
<Italian>Il seguente equipaggiamento non è più pubblico:</Italian>
<Korean>다음 로드아웃이 더이상 공용이 아님:</Korean>
<Chinese>以下的裝備已不再被分享:</Chinese>
<Chinesesimp>以下的装备已不再被分享:</Chinesesimp>
</Key>
<Key ID="STR_ACE_Arsenal_saveEmptyNameBox">
<English>The name field is empty!</English>
@ -280,6 +382,9 @@
<Polish>Pole nazwy jest puste!</Polish>
<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>
@ -288,6 +393,9 @@
<Polish>Jesteś autorem tego zestawu</Polish>
<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>
@ -296,6 +404,9 @@
<Polish>Jeden z Twoich zestawów nazwany tak samo jest już publiczny</Polish>
<Japanese>あなたの装備は既に公開されているものと同名です</Japanese>
<Italian>Un tuo equipaggiamento con lo stesso nome è pubblico</Italian>
<Korean>같은 이름의 로드아웃이 공용에 있습니다.</Korean>
<Chinese>已有相同名稱的裝備在公用分享區</Chinese>
<Chinesesimp>已有相同名称的装备在公用分享区</Chinesesimp>
</Key>
<Key ID="STR_ACE_Arsenal_loadoutSaved">
<English>The following loadout was saved:</English>
@ -304,6 +415,9 @@
<Polish>Następujący zestaw został zapisany:</Polish>
<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>
@ -312,6 +426,9 @@
<Polish>Następujący zestaw został wczytany:</Polish>
<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>
@ -320,6 +437,9 @@
<Polish>Zestaw z tą nazwą już istnieje!</Polish>
<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>
@ -328,6 +448,9 @@
<Polish>zmienił nazwę na</Polish>
<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>
@ -336,6 +459,9 @@
<Polish>Odwróć sterowanie kamerą</Polish>
<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>
@ -344,6 +470,9 @@
<Polish>Włącz ikony modów</Polish>
<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>
@ -352,14 +481,20 @@
<Polish>Wysokość czcionki</Polish>
<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>
<French>Activer l'onglet équipement de base</French>
<German>Erlaubt die Benutzung des Standard-Ausrüstungen-Reiters</German>
<German>Erlaubt die Benutzung der Standardausrüstungen</German>
<Polish>Zezwól na użycie domyślnych zestawów</Polish>
<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>
@ -368,6 +503,9 @@
<Polish>Zezwól na udostępnianie zestawów</Polish>
<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>
@ -376,6 +514,9 @@
<Polish>Rejestruj brakujące / niedostępne przedmioty</Polish>
<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>
@ -383,6 +524,10 @@
<Polish>Główny magazynek</Polish>
<Japanese>プライマリ弾倉</Japanese>
<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>
@ -390,6 +535,10 @@
<Polish>Dodatkowy magazynek</Polish>
<Japanese>セカンダリ弾倉</Japanese>
<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>
@ -397,7 +546,10 @@
<German>ACE-Arsenal</German>
<Polish>ACE Arsenał</Polish>
<Japanese>ACE 武器庫</Japanese>
<Italian>Arsenale ACE</Italian>
<Italian>ACE Arsenale</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>
@ -405,6 +557,10 @@
<Polish>Zezwól na użycie zakładki domyślnych zestawów</Polish>
<Japanese>標準の装備タブの使用を許可します</Japanese>
<Italian>Consenti l'uso della sezione per gli equipaggiamenti standard</Italian>
<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>
@ -412,6 +568,10 @@
<Polish>Pokaż / ukryj ikony modów w lewym panelu</Polish>
<Japanese>左パネルにある MOD アイコンの表示 / 非表示をします</Japanese>
<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>
@ -419,6 +579,10 @@
<Polish>Zmień wysokość czcionki dla tekstu lewego i prawego panelu</Polish>
<Japanese>右か左パネルにあるフォントの高さを変更します。</Japanese>
<Italian>Cambia l'altezza del font per il testo sul pannello sinistro / destro</Italian>
<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>
@ -426,6 +590,10 @@
<Polish>Rejestruj brakujące / niedostępne przedmioty do pliku RPT</Polish>
<Japanese>PRT で欠落 / 利用不可アイテムを記録します</Japanese>
<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>
@ -433,34 +601,155 @@
<German>Kann ACE-Arsenal nicht anzeigen</German>
<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">
<Key ID="STR_ACE_Arsenal_portLoadoutsText">
<English>Import BI VA loadouts to ACE Arsenal</English>
<French>Importe les loadouts de BI VA dans ACE Arsenal</French>
<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>
<Italian>Importa l'arsenale virtuale BI nell'arsenale ACE</Italian>
</Key>
<Key ID= "STR_ACE_Arsenal_portLoadoutsPlayerError">
<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>
<Korean>플레이어 유닛을 사용할 수 없습니다! 유닛을 놓고 "플레이어"라고 표시하십시오.</Korean>
<Chinese>沒有可用的玩家單位!請擺放一個單位並設定成"玩家"</Chinese>
<Chinesesimp>没有可用的玩家单位!请摆放一个单位并设定成"玩家"。</Chinesesimp>
<Italian>Non ci sono giocatori! Poisziona una unità e impostala come "Giocatore".</Italian>
</Key>
<Key ID= "STR_ACE_Arsenal_portLoadoutsLoadoutError">
<Key ID="STR_ACE_Arsenal_portLoadoutsLoadoutError">
<English>No loadouts to import.</English>
<French>Aucun loadout à importer.</French>
<German>Keine Ausrüstungen zum Importieren</German>
<Japanese>取り込みする装備がありません。</Japanese>
<Korean>가져올 로드 아웃이 없습니다.</Korean>
<Chinese>沒有裝備被匯入</Chinese>
<Chinesesimp>没有装备被汇入。</Chinesesimp>
<Italian>Non ci sono equipaggiamenti da importare.</Italian>
</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>
<Italian>Arsenale ACE</Italian>
</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>
<Italian>Torna all'arsenale ACE</Italian>
</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>
<Italian>Usa l'arsenale ACE per provare armi ed equipaggiamenti vari.</Italian>
</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>
<Italian>Prova armi ed equipaggiamenti e creai i tuoi equipaggiamenti personalizzati.</Italian>
</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>
<Italian>Apri la pagina degli equipaggiamenti</Italian>
</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>
<Italian>Esporta l'equipaggiamento attuale oppure la lista degli equipaggiamenti di base</Italian>
</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>
<Italian>Importa l'equipaggiamento attuale oppure la lista degli equipaggiamenti di base</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_statPotassium">
<English>Potassium levels</English>
<French>Taux de potassium</French>
<Japanese>カリウム レベル</Japanese>
<Chinesesimp>钾水平</Chinesesimp>
<Chinese>鉀水平</Chinese>
<Italian>Ilvello di potassio</Italian>
</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>
<Chinesesimp>页面</Chinesesimp>
<Chinese>頁面</Chinese>
<Italian>Pagina</Italian>
</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>
<Chinesesimp>启用脸谱/声音/徽章/选项 </Chinesesimp>
<Chinese>啟用臉譜/聲音/徽章選項</Chinese>
<Italian>Abilita volti, voci e insegne</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_buttonClearContainerTooltip">
<English>Empty the selected container</English>
<French>Vider le conteneur selectionné</French>
<Japanese>選択されたコンテナは空です</Japanese>
<Chinesesimp>选择的箱子是空的</Chinesesimp>
<Chinese>清空選擇的箱子</Chinese>
<Italian>Svuota il contenitore selezionato</Italian>
</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>
<Chinesesimp>将种类复制到剪贴板</Chinesesimp>
<Chinese>輸出 class name 到剪貼簿上</Chinese>
<Italian>Copiato il nome della classe negli appunti</Italian>
</Key>
</Package>
</Project>

View File

@ -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 {
@ -153,17 +153,12 @@ class GVAR(display) {
shadow=0;
colorBackground[]={0,0,0,0.69999999};
text="";
x = QUOTE(safezoneX + safezoneW * 0.50 - 80 * GRID_W);
x = QUOTE(0.5 - WIDTH_TOTAL / 2);
y = QUOTE(safeZoneH + safezoneY - 25 * GRID_H);
w = QUOTE(160 * GRID_W);
w = QUOTE(WIDTH_TOTAL);
h = QUOTE(10 * GRID_H);
sizeEx = QUOTE(5 * GRID_H);
};
#define WIDTH_TOTAL (safezoneW - 2 * (93 * GRID_W))
#define WIDTH_GAP (WIDTH_TOTAL / 100)
#define WIDTH_SINGLE ((WIDTH_TOTAL - 6 * WIDTH_GAP) / 5)
class menuBar: RscControlsGroupNoScrollbars {
idc = IDC_menuBar;
x = QUOTE(0.5 - WIDTH_TOTAL / 2);
@ -172,7 +167,7 @@ class GVAR(display) {
h = QUOTE(7 * GRID_H);
class controls {
class buttonHide: ctrlButton {
idc = -1;
idc = IDC_buttonHide;
colorBackground[] = {0,0,0,0.8};
x = QUOTE(1 * WIDTH_GAP + 0 * WIDTH_SINGLE);
y = QUOTE(0);
@ -182,27 +177,30 @@ 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 = -1;
idc = IDC_buttonLoadouts;
x = QUOTE(2 * WIDTH_GAP + 1 * WIDTH_SINGLE);
text = CSTRING(buttonLoadoutsText);
tooltip = CSTRING(buttonLoadoutsTooltip);
onButtonClick = QUOTE(createDialog QQGVAR(loadoutsDisplay));
};
class buttonExport: buttonHide {
idc = -1;
idc = IDC_buttonExport;
x = QUOTE(3 * WIDTH_GAP + 2 * WIDTH_SINGLE);
text = CSTRING(buttonExportText);
onButtonClick = QUOTE([ctrlparent (_this select 0)] call FUNC(buttonExport));
tooltip = CSTRING(buttonExportTooltip);
onButtonClick = QUOTE([ctrlParent (_this select 0)] call FUNC(buttonExport));
};
class buttonImport: buttonHide {
idc = -1;
idc = IDC_buttonImport;
x = QUOTE(4 * WIDTH_GAP + 3 * WIDTH_SINGLE);
text = CSTRING(buttonImportText);
onButtonClick = QUOTE([ctrlparent (_this select 0)] call FUNC(buttonImport));
tooltip = CSTRING(buttonImportTooltip);
onButtonClick = QUOTE([ctrlParent (_this select 0)] call FUNC(buttonImport));
};
class buttonClose: ctrlButtonClose {
class buttonClose: ctrlButtonOK {
idc = IDC_menuBarClose;
colorBackground[] = {0,0,0,0.8};
x = QUOTE(5 * WIDTH_GAP + 4 * WIDTH_SINGLE);
@ -211,8 +209,7 @@ class GVAR(display) {
h = QUOTE(7 * GRID_H);
text = CSTRING(buttonCloseText);
sizeEx = QUOTE(5 * GRID_H);
shortcuts[]= {"0x01"};
onButtonClick = QUOTE(ctrlparent (_this select 0) closeDisplay 2);
onButtonClick = QUOTE(ctrlParent (_this select 0) closeDisplay 1);
};
};
};
@ -271,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;
@ -305,7 +490,7 @@ class GVAR(display) {
onSetFocus = QUOTE(GVAR(rightTabFocus) = true);
onKillFocus = QUOTE(GVAR(rightTabFocus) = false);
x = QUOTE(safezoneX + safezoneW - 93 * GRID_W);
h = QUOTE(safezoneH - 34.5 * GRID_H);
h = QUOTE(safezoneH - 28 * GRID_H);
};
class rightTabContentListnBox : RscListNBox {
idc = IDC_rightTabContentListnBox;
@ -327,7 +512,7 @@ class GVAR(display) {
x = QUOTE(safezoneX + safezoneW - 93 * GRID_W);
y = QUOTE(safezoneY + 14 * GRID_H);
w = QUOTE(80 * GRID_W);
h = QUOTE(safezoneH - 34.5 * GRID_H);
h = QUOTE(safezoneH - 34 * GRID_H);
sizeEx = QUOTE(7 * GRID_H);
};
class sortLeftTab: RscCombo {
@ -374,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);
@ -393,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 {
@ -417,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);
@ -610,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);
@ -720,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;
@ -778,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);
@ -801,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;
@ -811,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);
@ -831,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 {
@ -839,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;
@ -861,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);
@ -876,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;
@ -903,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;

View File

@ -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));
};
};
@ -283,7 +294,7 @@ class Display3DEN {
};
class ACE_arsenal_portVALoadouts {
text = CSTRING(portLoadoutsText);
picture = "\z\ace\logo_ace3_ca.paa";
picture = QPATHTOEF(common,data\logo_ace3_ca.paa);
action = "call ace_arsenal_fnc_portVALoadouts;";
};
};

View File

@ -8,7 +8,6 @@ class CfgVehicles {
condition = QUOTE(call FUNC(can_show));
statement = QUOTE(call FUNC(create_dialog));
showDisabled = 0;
priority = 2;
icon = QPATHTOF(UI\ATRAG_Icon.paa);
exceptions[] = {"notOnMap", "isNotInside", "isNotSitting"};
};

View File

@ -24,7 +24,7 @@ if (GVAR(currentUnit) != 2) then {
if (GVAR(currentUnit) != 2) then {
ctrlSetText [110, Str(Round((GVAR(workingMemory) select 12) * 15.4323584))];
} else {
ctrlSetText [110, Str(Round(GVAR(workingMemory) select 12))];
ctrlSetText [110, Str(Round((GVAR(workingMemory) select 12) * 10) / 10)];
};
if (missionNamespace getVariable [QEGVAR(advanced_ballistics,enabled), false]) then {
ctrlSetText [120, Str(Round((GVAR(workingMemory) select 15) * 1000) / 1000)];

View File

@ -25,7 +25,7 @@ if (GVAR(currentUnit) != 2) then {
if (GVAR(currentUnit) != 2) then {
ctrlSetText [120010, Str(Round((GVAR(workingMemory) select 12) * 15.4323584))];
} else {
ctrlSetText [120010, Str(Round(GVAR(workingMemory) select 12))];
ctrlSetText [120010, Str(Round((GVAR(workingMemory) select 12) * 10) / 10)];
};
if (GVAR(currentUnit) != 2) then {
ctrlSetText [120020, Str(Round((GVAR(workingMemory) select 13) / 10 / 2.54 * 1000) / 1000)];

View File

@ -5,10 +5,9 @@
class GVAR(AttachVehicle) { \
displayName = CSTRING(AttachDetach); \
condition = QUOTE(_this call FUNC(canAttach)); \
insertChildren = QUOTE(_this call FUNC(getChildrenAttachActions)); \
insertChildren = QUOTE(_this call FUNC(getChildrenActions)); \
exceptions[] = {"isNotSwimming"}; \
showDisabled = 0; \
priority = 0; \
icon = QPATHTOF(UI\attach_ca.paa); \
}; \
class GVAR(DetachVehicle) { \
@ -17,7 +16,6 @@
statement = QUOTE(_this call FUNC(detach) ); \
exceptions[] = {"isNotSwimming"}; \
showDisabled = 0; \
priority = 0.1; \
icon = QPATHTOF(UI\detach_ca.paa); \
}; \
}; \
@ -54,10 +52,9 @@ class CfgVehicles {
class GVAR(Attach) {
displayName = CSTRING(AttachDetach);
condition = QUOTE(_this call FUNC(canAttach));
insertChildren = QUOTE(_this call FUNC(getChildrenAttachActions));
insertChildren = QUOTE(_this call FUNC(getChildrenActions));
exceptions[] = {"isNotDragging", "isNotSwimming"};
showDisabled = 0;
priority = 5;
icon = QPATHTOF(UI\attach_ca.paa);
};
class GVAR(Detach) {
@ -66,7 +63,6 @@ class CfgVehicles {
statement = QUOTE(_this call FUNC(detach));
exceptions[] = {"isNotDragging", "isNotSwimming"};
showDisabled = 0;
priority = 5;
icon = QPATHTOF(UI\detach_ca.paa);
};
};

View File

@ -1,9 +1,8 @@
PREP(attach);
PREP(canAttach);
PREP(canDetach);
PREP(detach);
PREP(getChildrenAttachActions);
PREP(getChildrenActions);
PREP(handleGetIn);
PREP(handleGetOut);
PREP(handleKilled);

View File

@ -0,0 +1,48 @@
/*
* Author: Garth de Wet (LH), PabstMirror, mharis001
* Returns children actions for attachable items.
*
* Arguments:
* 0: Target <OBJECT>
* 1: Player <OBJECT>
*
* Return Value:
* Actions <ARRAY>
*
* Example:
* [_target, _player] call ace_attach_fnc_getChildrenActions
*
* Public: No
*/
#include "script_component.hpp"
params ["_target", "_player"];
TRACE_2("params",_target,_player);
private _cfgMagazines = configFile >> "CfgMagazines";
private _cfgWeapons = configFile >> "CfgWeapons";
private _actions = [];
private _magazines = magazines _player;
{
private _config = _cfgMagazines >> _x;
if (getText (_config >> "ACE_Attachable") != "") then {
private _displayName = getText (_config >> "displayName");
private _picture = getText (_config >> "picture");
private _action = [_x, _displayName, _picture, {[{_this call FUNC(attach)}, _this] call CBA_fnc_execNextFrame}, {true}, {}, _x] call EFUNC(interact_menu,createAction);
_actions pushBack [_action, [], _target];
};
} forEach (_magazines arrayIntersect _magazines);
{
private _config = _cfgWeapons >> _x;
if (getText (_config >> "ACE_Attachable") != "") then {
private _displayName = getText (_config >> "displayName");
private _picture = getText (_config >> "picture");
private _action = [_x, _displayName, _picture, {[{_this call FUNC(attach)}, _this] call CBA_fnc_execNextFrame}, {true}, {}, _x] call EFUNC(interact_menu,createAction);
_actions pushBack [_action, [], _target];
};
} forEach ([_player, false] call CBA_fnc_uniqueUnitItems);
_actions

View File

@ -1,52 +0,0 @@
/*
* Author: Garth de Wet (LH), PabstMirror
* Show the ammo counts for a static weapon.
* Called from "insertChildren" on interact_menu
*
* Arguments:
* 0: Target <OBJECT>
* 1: Player <OBJECT>
*
* Return Value:
* ChildActiosn<ARRAY>
*
* Example:
* [player, player] call ace_attach_fnc_getChildrenAttachActions
*
* Public: No
*/
#include "script_component.hpp"
params ["_target","_player"];
TRACE_2("params",_target,_player);
private _listed = [];
private _actions = [];
{
if !(_x in _listed) then {
_listed pushBack _x;
private _item = ConfigFile >> "CfgMagazines" >> _x;
if (getText (_item >> "ACE_Attachable") != "") then {
private _displayName = getText(_item >> "displayName");
private _picture = getText(_item >> "picture");
private _action = [_x, _displayName, _picture, {[{_this call FUNC(attach)}, _this] call CBA_fnc_execNextFrame}, {true}, {}, [_x]] call EFUNC(interact_menu,createAction);
_actions pushBack [_action, [], _target];
};
};
} forEach (magazines _player);
{
if !(_x in _listed) then {
_listed pushBack _x;
private _item = ConfigFile >> "CfgWeapons" >> _x;
if (getText (_item >> "ACE_Attachable") != "") then {
private _displayName = getText(_item >> "displayName");
private _picture = getText(_item >> "picture");
private _action = [_x, _displayName, _picture, {[{_this call FUNC(attach)}, _this] call CBA_fnc_execNextFrame}, {true}, {}, [_x]] call EFUNC(interact_menu,createAction);
_actions pushBack [_action, [], _target];
};
};
} forEach (items _player);
_actions

View File

@ -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&lt;br/&gt;attaccata</Italian>
<Hungarian>%1&lt;br/&gt;hozzácsatolva</Hungarian>
<Russian>%1&lt;br/&gt;присоединен(-а)</Russian>
<Japanese>%1&lt;br/&gt;を取り付けた</Japanese>
<Japanese>%1&lt;br/&gt;を取り付けまし</Japanese>
<Korean>%1&lt;br/&gt;부착됨</Korean>
<Chinese>%1&lt;br/&gt;已附掛</Chinese>
<Chinesesimp>%1&lt;br/&gt;已附挂</Chinesesimp>
@ -268,7 +268,7 @@
<Italian>%1&lt;br/&gt;staccata</Italian>
<Hungarian>%1&lt;br/&gt;lecsatolva</Hungarian>
<Russian>%1&lt;br/&gt;отсоединен(-а)</Russian>
<Japanese>%1&lt;br/&gt;を外した</Japanese>
<Japanese>%1&lt;br/&gt;を外しまし</Japanese>
<Korean>%1&lt;br/&gt;분리됨</Korean>
<Chinese>%1&lt;br/&gt;已取下</Chinese>
<Chinesesimp>%1&lt;br/&gt;已取下</Chinesesimp>

View 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}, {}};
};
};

View 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));
};
};

View File

@ -0,0 +1 @@
PREP(statTextStatement_weaponMuzzleVelocity);

View File

@ -0,0 +1,7 @@
#include "script_component.hpp"
ADDON = false;
PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;

View File

@ -0,0 +1,3 @@
#include "script_component.hpp"
#include "XEH_PREP.hpp"

View File

@ -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"

View File

@ -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
};
};

View File

@ -0,0 +1 @@
#include "\z\ace\addons\ballistics\script_component.hpp"

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="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)&lt;br /&gt;Rounds: 10</English>
@ -2279,5 +2281,39 @@
<Chinese>[ACE] 彈藥補給箱</Chinese>
<Chinesesimp>[ACE] 弹药补给箱</Chinesesimp>
</Key>
<Key ID="STR_ACE_Ballistics_statBarrelTwist">
<English>Barrel twist</English>
<Japanese>銃身の転度</Japanese>
<Chinesesimp>膛线缠距</Chinesesimp>
<Chinese>膛線扭度</Chinese>
</Key>
<Key ID="STR_ACE_Ballistics_statBarrelLength">
<English>Barrel length</English>
<French>Longueur du canon</French>
<Japanese>銃身長</Japanese>
<Chinesesimp>身管长度</Chinesesimp>
<Chinese>槍管長度</Chinese>
</Key>
<Key ID="STR_ACE_Ballistics_statBallisticCoef">
<English>Ballistic coefficient</English>
<French>Coefficient ballistique</French>
<Japanese>弾道係数</Japanese>
<Chinesesimp>弹道系数</Chinesesimp>
<Chinese>彈道係數</Chinese>
</Key>
<Key ID="STR_ACE_Ballistics_statBulletMass">
<English>Bullet mass</English>
<French>Masse d'une balle</French>
<Japanese>弾丸重量</Japanese>
<Chinesesimp>弹头重量</Chinesesimp>
<Chinese>彈頭重量</Chinese>
</Key>
<Key ID="STR_ACE_Ballistics_statMuzzleVelocity">
<English>Muzzle velocity</English>
<French>Vitesse à la bouche</French>
<Japanese>銃口初速</Japanese>
<Chinesesimp>枪口初速</Chinesesimp>
<Chinese>槍口初速</Chinese>
</Key>
</Package>
</Project>

View File

@ -30,7 +30,6 @@ class CfgVehicles {
exceptions[] = {"isNotSwimming"};
showDisabled = 0;
icon = QPATHTOF(UI\captive_ca.paa);
priority = 2.3;
};
class ACE_StopEscorting {
displayName = CSTRING(StopEscorting);
@ -40,7 +39,6 @@ class CfgVehicles {
exceptions[] = {"isNotEscorting", "isNotSwimming"};
showDisabled = 0;
icon = QPATHTOF(UI\captive_ca.paa);
priority = 2.3;
};
class ACE_LoadCaptive {
displayName = CSTRING(LoadCaptive);
@ -50,7 +48,6 @@ class CfgVehicles {
exceptions[] = {"isNotEscorting", "isNotSwimming"};
showDisabled = 0;
icon = QPATHTOF(UI\captive_ca.paa);
priority = 2.2;
insertChildren = QUOTE(call DFUNC(addLoadCaptiveActions));
};
class GVAR(UnloadCaptive) {
@ -59,7 +56,6 @@ class CfgVehicles {
condition = QUOTE([ARR_2(_player, _target)] call FUNC(canUnloadCaptive));
statement = QUOTE([ARR_2(_player, _target)] call FUNC(doUnloadCaptive));
exceptions[] = {"isNotSwimming"};
priority = 1.2;
};
};
};
@ -71,7 +67,6 @@ class CfgVehicles {
statement = QUOTE([ARR_3(_player,objNull, false)] call FUNC(doEscortCaptive));
exceptions[] = {"isNotEscorting", "isNotSwimming"};
showDisabled = 0;
priority = 2.3;
};
class ACE_StartSurrenderingSelf {
displayName = CSTRING(StartSurrendering);
@ -79,7 +74,6 @@ class CfgVehicles {
statement = QUOTE([ARR_2(_player, true)] call FUNC(setSurrendered));
exceptions[] = {"isNotSwimming"};
showDisabled = 0;
priority = 0;
icon = QPATHTOF(UI\Surrender_ca.paa);
};
class ACE_StopSurrenderingSelf {
@ -88,7 +82,6 @@ class CfgVehicles {
statement = QUOTE([ARR_2(_player, false)] call FUNC(setSurrendered));
exceptions[] = {"isNotSurrendering", "isNotSwimming"};
showDisabled = 0;
priority = 0;
icon = QPATHTOF(UI\Surrender_ca.paa);
};
};
@ -103,7 +96,6 @@ class CfgVehicles {
condition = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(canLoadCaptive)); \
statement = QUOTE([ARR_3(_player, objNull, _target)] call FUNC(doLoadCaptive)); \
exceptions[] = {"isNotEscorting", "isNotSwimming"}; \
priority = 1.2; \
}; \
}; \
};

View File

@ -29,7 +29,7 @@ if (_local) then {
if (_unit getVariable [QGVAR(handcuffAnimEHID), -1] != -1) exitWith {};
// Otherwise, restart the AnimChanged EH in the new machine
private _animChangedEHID = _unit addEventHandler ["AnimChanged", DFUNC(handleAnimChangedHandcuffed)];
private _animChangedEHID = _unit addEventHandler ["AnimChanged", {call FUNC(handleAnimChangedHandcuffed)}];
TRACE_2("Adding animChangedEH",_unit,_animChangedEHID);
_unit setVariable [QGVAR(handcuffAnimEHID), _animChangedEHID];
};
@ -40,7 +40,7 @@ if (_local) then {
if (_unit getVariable [QGVAR(surrenderAnimEHID), -1] != -1) exitWith {};
// Otherwise, restart the AnimChanged EH in the new machine
private _animChangedEHID = _unit addEventHandler ["AnimChanged", DFUNC(handleAnimChangedSurrendered)];
private _animChangedEHID = _unit addEventHandler ["AnimChanged", {call FUNC(handleAnimChangedSurrendered)}];
TRACE_2("Adding animChangedEH",_unit,_animChangedEHID);
_unit setVariable [QGVAR(surrenderAnimEHID), _animChangedEHID];
};

View File

@ -73,7 +73,7 @@ if (_state) then {
TRACE_1("removing animChanged EH",_animChangedEHID);
_unit removeEventHandler ["AnimChanged", _animChangedEHID];
};
_animChangedEHID = _unit addEventHandler ["AnimChanged", DFUNC(handleAnimChangedHandcuffed)];
_animChangedEHID = _unit addEventHandler ["AnimChanged", {call FUNC(handleAnimChangedHandcuffed)}];
TRACE_2("Adding animChangedEH",_unit,_animChangedEHID);
_unit setVariable [QGVAR(handcuffAnimEHID), _animChangedEHID];

View File

@ -64,7 +64,7 @@ if (_state) then {
TRACE_1("removing animChanged EH",_animChangedEHID);
_unit removeEventHandler ["AnimChanged", _animChangedEHID];
};
_animChangedEHID = _unit addEventHandler ["AnimChanged", DFUNC(handleAnimChangedSurrendered)];
_animChangedEHID = _unit addEventHandler ["AnimChanged", {call FUNC(handleAnimChangedSurrendered)}];
_unit setVariable [QGVAR(surrenderAnimEHID), _animChangedEHID];
};
}, [_unit], 0.01] call CBA_fnc_waitAndExecute;

View File

@ -8,6 +8,7 @@
<Chinese>俘虜</Chinese>
<Chinesesimp>俘虏</Chinesesimp>
<Japanese>捕虜</Japanese>
<Korean>포로설정</Korean>
</Key>
<Key ID="STR_ACE_Captives_SetCaptive">
<English>Take Prisoner</English>
@ -84,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>
@ -440,7 +441,7 @@
<German>Nimmt die Einheit unter dem Cursor fest.</German>
<Japanese>カーソル先のユニットを拘束</Japanese>
<Italian>Imposta l'unità nello stato di prigioniero.</Italian>
<Chinese>設置在游標下的單位成俘虜狀態</Chinese>
<Chinese>設置在游標下的單位成俘虜狀態</Chinese>
<Chinesesimp>设置在游标下的单位成俘虏状态。</Chinesesimp>
<Korean>커서의 병력을 포박합니다.</Korean>
</Key>
@ -458,7 +459,7 @@
<German>KI muss sich erst ergeben, bevor sie gefangen genommen werden kann</German>
<Italian>Necessita che le AI si arrendano prima di essere arrestate</Italian>
<Japanese>AI の拘束は AI が投降している場合に限り可能にします。</Japanese>
<Chinese>在逮捕AI之前該AI必須先進入投降狀態</Chinese>
<Chinese>在逮捕AI之前該AI必須先進入投降狀態</Chinese>
<Chinesesimp>在逮捕AI之前该AI必须先进入投降状态。</Chinesesimp>
<Korean>포박하기 전에 먼저 AI가 투항해야만 합니다.</Korean>
</Key>

View File

@ -1,17 +1,8 @@
class ACE_Settings {
class GVAR(enable) {
displayName = CSTRING(ModuleSettings_enable);
description = CSTRING(ModuleSettings_enable_Description);
typeName = "BOOL";
value = 1;
category = ECSTRING(OptionsMenu,CategoryLogistics);
movedToSQF = 1;
};
class GVAR(paradropTimeCoefficent) {
displayName = CSTRING(paradropTimeCoefficent);
description = CSTRING(paradropTimeCoefficent_description);
typeName = "SCALAR";
value = 2.5;
category = ECSTRING(OptionsMenu,CategoryLogistics);
sliderSettings[] = {0, 10, 2.5, 1};
movedToSQF = 1;
};
};

View File

@ -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 {};

View File

@ -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"));

View File

@ -6,6 +6,8 @@ PREP_RECOMPILE_START;
#include "XEH_PREP.hpp"
PREP_RECOMPILE_END;
#include "initSettings.sqf"
GVAR(initializedItemClasses) = [];
GVAR(initializedVehicleClasses) = [];
GVAR(cargoHolderTypes) = ["Car", "Air", "Tank", "Ship", "Cargo_base_F", "Land_PaperBox_closed_F"];

View File

@ -5,6 +5,7 @@
* Arguments:
* 0: Item <OBJECT or STRING>
* 1: Holder Object (Vehicle) <OBJECT>
* 2: Ignore interaction distance <BOOL>
*
* Return Value:
* Can load in <BOOL>
@ -16,7 +17,7 @@
*/
#include "script_component.hpp"
params [["_item", "", [objNull,""]], "_vehicle"];
params [["_item", "", [objNull,""]], "_vehicle", ["_ignoreInteraction", false]];
if (speed _vehicle > 1 || {((getPos _vehicle) select 2) > 3}) exitWith {TRACE_1("vehicle not stable",_vehicle); false};
@ -34,7 +35,7 @@ if (_item isEqualType "") then {
} else {
_validItem =
(alive _item) &&
{([_item, _vehicle] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE};
{_ignoreInteraction || {([_item, _vehicle] call EFUNC(interaction,getInteractionDistance)) < MAX_LOAD_DISTANCE}};
};
_validItem &&

View File

@ -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);
};

View File

@ -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

View File

@ -6,6 +6,7 @@
* Arguments:
* 0: Item <OBJECT or STRING>
* 1: Vehicle <OBJECT>
* 2: Ignore interaction distance <BOOL>
*
* Return Value:
* Object loaded <BOOL>
@ -17,10 +18,10 @@
*/
#include "script_component.hpp"
params [["_item","",[objNull,""]], ["_vehicle",objNull,[objNull]]];
params [["_item","",[objNull,""]], ["_vehicle",objNull,[objNull]], ["_ignoreInteraction", false]];
TRACE_2("params",_item,_vehicle);
if !([_item, _vehicle] call FUNC(canLoadItemIn)) exitWith {TRACE_2("cannot load",_item,_vehicle); false};
if !([_item, _vehicle, _ignoreInteraction] call FUNC(canLoadItemIn)) exitWith {TRACE_2("cannot load",_item,_vehicle); false};
private _loaded = _vehicle getVariable [QGVAR(loaded), []];
_loaded pushBack _item;

View File

@ -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];

View File

@ -20,10 +20,8 @@
params ["_item", "_vehicle", ["_unloader", objNull]];
TRACE_3("params",_item,_vehicle,_unloader);
private _itemClass = if (_item isEqualType "") then {_item} else {typeOf _item};
//This covers testing vehicle stability and finding a safe position
private _emptyPosAGL = [_vehicle, _itemClass, _unloader] call EFUNC(common,findUnloadPosition);
private _emptyPosAGL = [_vehicle, _item, _unloader] call EFUNC(common,findUnloadPosition);
TRACE_1("findUnloadPosition",_emptyPosAGL);
if ((count _emptyPosAGL) != 3) exitWith {

View File

@ -0,0 +1,19 @@
// CBA Settings [ADDON: ace_cargo]:
[
QGVAR(enable), "CHECKBOX",
[LSTRING(ModuleSettings_enable), LSTRING(ModuleSettings_enable_Description)],
[localize ELSTRING(OptionsMenu,CategoryLogistics), localize LSTRING(openMenu)],
true, // default value
true, // isGlobal
{[QGVAR(enable), _this] call EFUNC(common,cbaSettings_settingChanged)}
] call CBA_settings_fnc_init;
[
QGVAR(paradropTimeCoefficent), "SLIDER",
[LSTRING(paradropTimeCoefficent), LSTRING(paradropTimeCoefficent_description)],
[localize ELSTRING(OptionsMenu,CategoryLogistics), localize LSTRING(openMenu)],
[0,10,2.5,1], // [min, max, default value, trailing decimals (-1 for whole numbers only)]
true, // isGlobal
{[QGVAR(paradropTimeCoefficent), _this] call EFUNC(common,cbaSettings_settingChanged)}
] call CBA_settings_fnc_init;

View File

@ -17,7 +17,7 @@ class GVAR(menu) {
};
class CenterBackground: HeaderBackground {
y = "2.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (safezoneY + (safezoneH - (((safezoneW / safezoneH) min 1.2) / 1.2))/2)";
h = "14 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
h = "13.1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)";
text = "#(argb,8,8,3)color(0,0,0,0.8)";
colorText[] = {0, 0, 0, "(profilenamespace getVariable ['GUI_BCG_RGB_A',0.9])"};
colorBackground[] = {0,0,0,"(profilenamespace getVariable ['GUI_BCG_RGB_A',0.9])"};

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project name="ACE">
<Package name="Cargo">
<Key ID="STR_ACE_Cargo_loadObject">
@ -147,7 +147,7 @@
<Italian>%1&lt;br/&gt;caricato su&lt;br/&gt;%2</Italian>
<Hungarian>%1&lt;br/&gt;berakodva ide:&lt;br/&gt;%2</Hungarian>
<Russian>%1&lt;br/&gt;загружен в&lt;br/&gt;%2</Russian>
<Japanese>%1&lt;br/&gt;&lt;br/&gt;%2へ積み込まれた</Japanese>
<Japanese>%1&lt;br/&gt;&lt;br/&gt;%2へ積み込まれまし</Japanese>
<Korean>%1&lt;br/&gt;&lt;br/&gt;%2 에 실림</Korean>
<Chinese>%1&lt;br/&gt;裝載至&lt;br/&gt;%2</Chinese>
<Chinesesimp>%1&lt;br/&gt;装载至&lt;br/&gt;%2</Chinesesimp>
@ -163,7 +163,7 @@
<Italian>Hai scaricato&lt;br/&gt;%1 da&lt;br/&gt;%2</Italian>
<Hungarian>1%&lt;br/&gt;kirakodva ebből:&lt;br/&gt;%2</Hungarian>
<Russian>%1&lt;br/&gt;разгружен из&lt;br/&gt;%2</Russian>
<Japanese>&lt;br/&gt;%1が&lt;br/&gt;%2から降ろされた</Japanese>
<Japanese>&lt;br/&gt;%1が&lt;br/&gt;%2から降ろされまし</Japanese>
<Korean>%1&lt;br/&gt;&lt;br/&gt;%2 에서 내려짐</Korean>
<Chinese>&lt;br/&gt;%2卸載&lt;br/&gt;%1</Chinese>
<Chinesesimp>&lt;br/&gt;%2卸载&lt;br/&gt;%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&lt;br/&gt;non può essere caricato</Italian>
<Spanish>%1&lt;br/&gt;no pudo ser cargado</Spanish>
<French>%1&lt;br /&gt; n'a pas pu être chargé</French>
<Japanese>%1&lt;br/&gt;は積み込めなかっ</Japanese>
<Japanese>%1&lt;br/&gt;は積み込めませんでし</Japanese>
<Korean>%1&lt;br/&gt;이 실릴 수가 없습니다</Korean>
<Chinese>%1&lt;br/&gt;無法被裝載</Chinese>
<Chinesesimp>%1&lt;br/&gt;无法被装载</Chinesesimp>
@ -223,7 +223,7 @@
<Italian>%1&lt;br/&gt;non può essere scaricato</Italian>
<Spanish>%1&lt;br/&gt;no pudo ser descargado</Spanish>
<French>%1&lt;br /&gt; n'a pas pu être déchargé</French>
<Japanese>%1&lt;br/&gt;は降ろせなかっ</Japanese>
<Japanese>%1&lt;br/&gt;は降ろせませんでし</Japanese>
<Korean>%1&lt;br/&gt;이 내려질 수가 없습니다</Korean>
<Chinese>%1&lt;br/&gt;無法被卸載</Chinese>
<Chinesesimp>%1&lt;br/&gt;无法被卸载</Chinesesimp>
@ -307,7 +307,7 @@
<Japanese>カーゴ アイテムを空中投下するまでの時間を変更します。</Japanese>
<Italian>Modificato per quanto tempo ci impiega a paracadutare un oggetto cargo.</Italian>
<French>Modifier le temps qu'il faut pour larguer la cargaison.</French>
<Chinese>設定空投所需消耗的時間.</Chinese>
<Chinese>設定空投所需消耗的時間</Chinese>
<Chinesesimp>设定空投所需消耗的时间.</Chinesesimp>
<Polish>Modyfikator wskazujący jak dużo czasu potrzeba by zrzucić przedmiot na spadochronie.</Polish>
<Korean>화물을 공중 투하 하는데 얼마나 걸리는 시간 설정</Korean>

View File

@ -2,7 +2,6 @@
class CBA_Extended_EventHandlers;
class CfgVehicles {
class Man;
class CAManBase: Man {
class ACE_SelfActions {
@ -15,7 +14,6 @@ class CfgVehicles {
exceptions[] = {"isNotDragging", "isNotSwimming", "notOnMap", "isNotInside", "isNotSitting"};
insertChildren = QUOTE(_this call DFUNC(compileChemlightMenu));
showDisabled = 0;
priority = 99;
};
};
};

View File

@ -311,7 +311,7 @@
<Korean>켐라이트를 위한 가림막입니다. 켐라이트와 같이 사용하여 읽을 때 씁니다.</Korean>
<French>Étui pour cyalume. Combiné avec un cyalume pour obtennir un lampe de lecture.</French>
<Italian>Scudo per luci chimiche. Combina con una luce chimica per una luce da lettura.</Italian>
<Chinese>螢光棒的保護殼. 與螢光棒結合後可充當閱讀燈.</Chinese>
<Chinese>螢光棒的保護殼. 與螢光棒結合後可充當閱讀燈</Chinese>
<Chinesesimp>萤光棒的保护壳. 与萤光棒结合后可充当阅读灯.</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Green_DisplayName">
@ -333,7 +333,7 @@
<Korean>초록빛 조명</Korean>
<French>Lampe d'orientation verte.</French>
<Italian>Luce da lettura Verde.</Italian>
<Chinese>綠色閱讀燈</Chinese>
<Chinese>綠色閱讀燈</Chinese>
<Chinesesimp>绿色阅读灯。</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Red_DisplayName">
@ -355,7 +355,7 @@
<Korean>빨간색 조명</Korean>
<French>Lampe d'orientation rouge.</French>
<Italian>Luce da lettura Rossa.</Italian>
<Chinese>紅色閱讀燈</Chinese>
<Chinese>紅色閱讀燈</Chinese>
<Chinesesimp>红色阅读灯。</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Blue_DisplayName">
@ -377,7 +377,7 @@
<Korean>파란색 조명</Korean>
<French>Lampe d'orientation bleue.</French>
<Italian>Luce da lettura Blu.</Italian>
<Chinese>藍色閱讀燈</Chinese>
<Chinese>藍色閱讀燈</Chinese>
<Chinesesimp>蓝色阅读灯。</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Yellow_DisplayName">
@ -399,7 +399,7 @@
<Korean>노란색 조명</Korean>
<French>Lampe d'orientation jaune.</French>
<Italian>Luce da lettura Gialla.</Italian>
<Chinese>黃色閱讀燈</Chinese>
<Chinese>黃色閱讀燈</Chinese>
<Chinesesimp>黄色阅读灯。</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_Orange_DisplayName">
@ -421,7 +421,7 @@
<Korean>주황색 조명</Korean>
<French>Lampe d'orientation orange.</French>
<Italian>Luce da lettura Arancione.</Italian>
<Chinese>橘色閱讀燈</Chinese>
<Chinese>橘色閱讀燈</Chinese>
<Chinesesimp>橘色阅读灯。</Chinesesimp>
</Key>
<Key ID="STR_ACE_Chemlights_Shield_White_DisplayName">
@ -443,7 +443,7 @@
<Korean>주황색 조명</Korean>
<French>Lampe d'orientation blanche.</French>
<Italian>Luce da lettura Bianca.</Italian>
<Chinese>白色閱讀燈</Chinese>
<Chinese>白色閱讀燈</Chinese>
<Chinesesimp>白色阅读灯。</Chinesesimp>
</Key>
</Package>

View File

@ -23,6 +23,9 @@ class Extended_DisplayLoad_EventHandlers {
class RscDisplayMission {
ADDON = QUOTE(_this call COMPILE_FILE(XEH_missionDisplayLoad));
};
class RscUnitInfo {
ADDON = QUOTE([ARR_2('ace_infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call CBA_fnc_localEvent;);
};
};
class Extended_InitPost_EventHandlers {

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