Merge branch 'master' into armake

This commit is contained in:
Thomas Kooi 2018-08-02 21:49:35 +02:00 committed by GitHub
commit 21eb5e3df6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
253 changed files with 3108 additions and 1444 deletions

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,7 +84,7 @@
<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>
@ -94,7 +94,7 @@
<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>
@ -112,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>
@ -128,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>
@ -144,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>
@ -160,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>
@ -176,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>
@ -192,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>
@ -208,7 +208,7 @@
<Hungarian>Szimuláció intervalluma</Hungarian>
<Russian>Интервал симуляции</Russian>
<Italian>Intervallo Simulazione</Italian>
<Japanese>シミュレーション間隔</Japanese>
<Japanese>シミュレーション間隔</Japanese>
<Korean>구현 간격</Korean>
<Chinese>模擬間隔</Chinese>
<Chinesesimp>模拟间隔</Chinesesimp>
@ -224,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>
@ -240,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>
@ -256,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>
@ -272,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,8 +53,8 @@
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;
@ -62,7 +62,7 @@
QGVAR(swayFactor),
"SLIDER",
[LSTRING(SwayFactor), LSTRING(SwayFactor_Description)],
"ACE3 Advanced Fatigue",
[0, 2, 1, 1],
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>
@ -111,14 +111,20 @@
</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>
@ -129,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>
@ -140,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>
@ -151,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

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

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

@ -33,7 +33,7 @@ class GVAR(stats) {
displayName= "$STR_a3_rscdisplayarsenal_stat_rof";
showBar = 1;
showText = 1;
barStatement = QUOTE([ARR_3((_this select 0) select 0, _this select 1, [ARR_3([ARR_2(-1.4, 0.31)], [ARR_2(1, 0.01)], true)])] call FUNC(statBarStatement_default));
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}, {}};
};
@ -44,7 +44,7 @@ class GVAR(stats) {
displayName = "$STR_a3_rscdisplayarsenal_stat_dispersion";
showBar = 1;
showText = 1;
barStatement = QUOTE([ARR_3((_this select 0) select 0, _this select 1, [ARR_3([ARR_2(-4, -1.7)], [ARR_2(1, 0.01)], true)])] call FUNC(statBarStatement_default));
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}, {}};
};

188
addons/arsenal/Cfg3DEN.hpp Normal file
View File

@ -0,0 +1,188 @@
class Cfg3DEN {
class Mission {
class GVAR(DummyCategory) {
displayName = "Dummy attribute, should never show up";
class AttributeCategories {
class ACE3_Arsenal {
class Attributes {
class GVAR(DefaultLoadoutsListAttribute) {
property = QGVAR(DefaultLoadoutsListAttribute);
value = 0;
expression = "if !(is3DEN) then {ace_arsenal_defaultLoadoutsList = _value};";
defaultValue = "[]";
validate = "none";
wikiType = "[[Array]]";
};
};
};
};
};
};
class Attributes {
class GVAR(attribute): ctrlControlsGroupNoScrollbars {
idc = -1;
// onLoad fixes attributeLoad not happening on multiple selection with different attribute
onLoad = QUOTE(private _objects = get3DENSelected 'object'; if (count _objects > 1) then {[ARR_2(_this select 0,((_objects select 0) get3DENAttribute QQGVAR(attribute)) select 0)] call FUNC(attributeLoad)});
x = QUOTE(0);
y = QUOTE(0);
w = QUOTE(130 * ATTRIBUTE_W);
h = QUOTE(106.83 * ATTRIBUTE_H);
attributeLoad = QUOTE([ARR_2(_this,+_value)] call FUNC(attributeLoad));
attributeSave = QUOTE(uiNamespace getVariable [ARR_2(QQGVAR(attributeValue),[ARR_2([], 0)])]);
class controls {
class ModeTitle: ctrlStatic {
idc = -1;
text = CSTRING(Mode);
x = QUOTE(5 * ATTRIBUTE_W);
y = QUOTE(0);
w = QUOTE(125 * ATTRIBUTE_W);
h = QUOTE(5 * ATTRIBUTE_H);
};
class Mode: ctrlToolbox {
idc = IDC_ATTRIBUTE_MODE;
onToolBoxSelChanged = QUOTE([ARR_2(ctrlParentControlsGroup (_this select 0), _this select 1)] call FUNC(attributeMode));
x = QUOTE(5 * ATTRIBUTE_W);
y = QUOTE(5 * ATTRIBUTE_H);
w = QUOTE(125 * ATTRIBUTE_W);
h = QUOTE(5 * ATTRIBUTE_H);
rows = 1;
columns = 2;
strings[] = {CSTRING(Whitelist), CSTRING(Blacklist)};
};
class ItemsTitle: ModeTitle {
text = CSTRING(Items);
y = QUOTE(10 * ATTRIBUTE_H);
};
class Category: ctrlToolboxPictureKeepAspect {
idc = IDC_ATTRIBUTE_CATEGORY;
onToolBoxSelChanged = QUOTE([ctrlParentControlsGroup (_this select 0)] call FUNC(attributeAddItems));
x = QUOTE(5 * ATTRIBUTE_W);
y = QUOTE(15 * ATTRIBUTE_H);
w = QUOTE(125 * ATTRIBUTE_W);
h = QUOTE(20.83 * ATTRIBUTE_H);
rows = 2;
columns = 12;
strings[] = {
"\a3\Ui_F_Curator\Data\RscCommon\RscAttributeInventory\filter_0_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\PrimaryWeapon_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\SecondaryWeapon_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Handgun_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\ItemOptic_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\ItemAcc_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\ItemMuzzle_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\ItemBipod_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\CargoMagAll_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Headgear_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Uniform_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Vest_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Backpack_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Goggles_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\NVGs_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Binoculars_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Map_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Compass_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Radio_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\Watch_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\GPS_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\CargoThrow_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\CargoPut_ca.paa",
"\A3\Ui_f\data\GUI\Rsc\RscDisplayArsenal\CargoMisc_ca.paa"
};
};
class ListBackground: ctrlStatic {
idc = -1;
x = QUOTE(5 * ATTRIBUTE_W);
y = QUOTE(35.83 * ATTRIBUTE_H);
w = QUOTE(125 * ATTRIBUTE_W);
h = QUOTE(65 * ATTRIBUTE_H);
colorBackground[] = {1, 1, 1, 0.1};
};
class List: ctrlListNBox {
idc = IDC_ATTRIBUTE_LIST;
idcLeft = IDC_ATTRIBUTE_LIST_LEFT;
idcRight = IDC_ATTRIBUTE_LIST_RIGHT;
onLBDblClick = QUOTE(_this call FUNC(attributeDblClick));
x = QUOTE(5 * ATTRIBUTE_W);
y = QUOTE(35.83 * ATTRIBUTE_H);
w = QUOTE(125 * ATTRIBUTE_W);
h = QUOTE(65 * ATTRIBUTE_H);
drawSideArrows = 1;
disableOverflow = 1;
columns[] = {0.05, 0.15, 0.85};
};
class ArrowLeft: ctrlButton {
idc = IDC_ATTRIBUTE_LIST_LEFT;
onButtonClick = QUOTE([ARR_2(ctrlParentControlsGroup (_this select 0),false)] call FUNC(attributeSelect));
text = SYMBOL_ITEM_NONE;
font = "RobotoCondensedBold";
x = QUOTE(-1);
y = QUOTE(-1);
w = QUOTE(5 * ATTRIBUTE_W);
H = QUOTE(5 * ATTRIBUTE_H);
};
class ArrowRight: ArrowLeft {
idc = IDC_ATTRIBUTE_LIST_RIGHT;
onButtonClick = QUOTE([ARR_2(ctrlParentControlsGroup (_this select 0),true)] call FUNC(attributeSelect));
text = SYMBOL_ITEM_VIRTUAL;
};
class SearchButton: ctrlButtonPicture {
idc = IDC_ATTRIBUTE_SEARCH_BUTTON;
onButtonClick = QUOTE(((ctrlParentControlsGroup (_this select 0)) controlsGroupCtrl IDC_ATTRIBUTE_SEARCHBAR) ctrlSetText ''; [ctrlParentControlsGroup (_this select 0)] call FUNC(attributeAddItems));
text = "\a3\Ui_f\data\GUI\RscCommon\RscButtonSearch\search_start_ca.paa";
x = QUOTE(5 * ATTRIBUTE_W);
y = QUOTE(101.83 * ATTRIBUTE_H);
w = QUOTE(5 * ATTRIBUTE_W);
h = QUOTE(5 * ATTRIBUTE_H);
colorBackground[] = {0, 0, 0, 0.5};
};
class SearchBar: ctrlEdit {
idc = IDC_ATTRIBUTE_SEARCHBAR;
onKeyUp = QUOTE([ctrlParentControlsGroup (_this select 0)] call FUNC(attributeAddItems));
x = QUOTE(11 * ATTRIBUTE_W);
y = QUOTE(101.83 * ATTRIBUTE_H);
w = QUOTE(55 * ATTRIBUTE_W);
h = QUOTE(5 * ATTRIBUTE_H);
};
class ClearButton: ctrlButton {
idc = IDC_ATTRIBUTE_CLEAR_BUTTON;
onButtonClick = QUOTE([ctrlParentControlsGroup (_this select 0)] call FUNC(attributeClear));
text = "$STR_disp_arcmap_clear";
x = QUOTE(105 * ATTRIBUTE_W);
y = QUOTE(101.83 * ATTRIBUTE_H);
w = QUOTE(25 * ATTRIBUTE_W);
h = QUOTE(5 * ATTRIBUTE_H);
colorBackground[] = {0, 0, 0, 0.6};
};
class ExportButton: ClearButton {
idc = IDC_ATTRIBUTE_EXPORT_BUTTON;
onButtonClick = QUOTE(copyToClipboard str ((uiNamespace getVariable [ARR_2(QQGVAR(attributeValue),[ARR_2([],0)])]) select 0));
text = CSTRING(buttonExportText);
tooltip = CSTRING(AttributeExport_Tooltip);
x = QUOTE(79 * ATTRIBUTE_W);
};
};
};
};
class Object {
class AttributeCategories {
class ADDON {
displayName = CSTRING(Mission);
collapsed = 1;
class Attributes {
class ADDON {
property = QGVAR(attribute);
control = QGVAR(attribute);
displayName = CSTRING(Mission);
tooltip = "";
expression = QUOTE(if (!is3DEN) then {[ARR_2(_this,+_value)] call FUNC(attributeInit)});
defaultValue = "[[], 0]";
condition = "1 - objectControllable";
wikiType = "[[Array]]";
validate = "none";
value = 0;
};
};
};
};
};
};

View File

@ -1,6 +1,13 @@
PREP(addListBoxItem);
PREP(addStat);
PREP(addVirtualItems);
PREP(attributeAddItems);
PREP(attributeClear);
PREP(attributeDblClick);
PREP(attributeInit);
PREP(attributeLoad);
PREP(attributeMode);
PREP(attributeSelect);
PREP(buttonCargo);
PREP(buttonClearAll);
PREP(buttonExport);
@ -47,8 +54,10 @@ 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);

View File

@ -8,35 +8,14 @@ class CfgPatches {
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_common"};
author = ECSTRING(common,ACETeam);
authors[] = {"alganthe"};
authors[] = {"alganthe", "mharis001"};
url = ECSTRING(main,URL);
VERSION_CONFIG;
};
};
class Cfg3DEN {
class Mission {
class GVAR(DummyCategory) {
displayName="Dummy attribute, should never show up";
class AttributeCategories {
class ACE3_Arsenal {
class Attributes {
class GVAR(DefaultLoadoutsListAttribute) {
property = QGVAR(DefaultLoadoutsListAttribute);
value=0;
expression="if !(is3DEN) then {ace_arsenal_defaultLoadoutsList = _value};";
defaultValue="[]";
validate="none";
wikiType="[[Array]]";
};
};
};
};
};
};
};
#include "ui\RscAttributes.hpp"
#include "Cfg3DEN.hpp"
#include "CfgEventHandlers.hpp"
#include "RscDisplayMain.hpp"
#include "ACE_Arsenal_Stats.hpp"

View File

@ -149,6 +149,24 @@
#define IDC_buttonSharedLoadoutsBackground 405
#define IDC_buttonSharedLoadouts 406
// 3DEN Attribute
#define ATTRIBUTE_W (pixelW * pixelGrid * 0.5)
#define ATTRIBUTE_H (pixelH * pixelGrid * 0.5)
#define IDC_ATTRIBUTE_MODE 8100
#define IDC_ATTRIBUTE_CATEGORY 8101
#define IDC_ATTRIBUTE_LIST 8102
#define IDC_ATTRIBUTE_LIST_LEFT 8103
#define IDC_ATTRIBUTE_LIST_RIGHT 8104
#define IDC_ATTRIBUTE_SEARCH_BUTTON 8105
#define IDC_ATTRIBUTE_SEARCHBAR 8106
#define IDC_ATTRIBUTE_CLEAR_BUTTON 8107
#define IDC_ATTRIBUTE_EXPORT_BUTTON 8108
#define SYMBOL_ITEM_NONE ""
#define SYMBOL_ITEM_REMOVE "×"
#define SYMBOL_ITEM_VIRTUAL "∞"
#define FADE_DELAY 0.15
#define CAM_DIS_MAX 5
@ -237,8 +255,6 @@ _buttonCurrentMag2Ctrl ctrlCommit FADE_DELAY;\
];\
_x ctrlCommit 0;\
} foreach [\
IDC_rightTabContent,\
IDC_rightTabContentListnBox,\
IDC_blockRightFrame,\
IDC_blockRighttBackground\
];
@ -284,8 +300,6 @@ _buttonCurrentMag2Ctrl ctrlCommit FADE_DELAY;\
];\
_x ctrlCommit 0;\
} foreach [\
IDC_rightTabContent,\
IDC_rightTabContentListnBox,\
IDC_blockRightFrame,\
IDC_blockRighttBackground\
];

View File

@ -0,0 +1,122 @@
#include "script_component.hpp"
#include "..\defines.hpp"
/*
* Author: mharis001
* Populates 3DEN attribute listbox with items of given category.
*
* Arguments:
* 0: Attribute controls group <CONTROL>
*
* Return Value:
* None
*
* Example:
* [CONTROL, 0] call ace_arsenal_fnc_attributeAddItems
*
* Public: No
*/
params ["_controlsGroup"];
private _category = lbCurSel (_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_CATEGORY) - 1;
private _filter = toLower ctrlText (_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_SEARCHBAR);
private _configItems = +(uiNamespace getVariable [QGVAR(configItems), []]);
private _attributeValue = uiNamespace getVariable [QGVAR(attributeValue), [[], 0]];
TRACE_3("Populating list",_category,_filter,_attributeValue);
_attributeValue params ["_attributeItems", "_attributeMode"];
private _modeSymbol = [SYMBOL_ITEM_VIRTUAL, SYMBOL_ITEM_REMOVE] select _attributeMode;
// Clear listbox
private _listbox = _controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_LIST;
lnbClear _listbox;
// Exit with current items (no specific category)
if (_category == -1) exitWith {
{
// Get appropriate config for each item (different since items can be from any category)
private _config = switch (true) do {
case (_x in (_configItems select 2));
case (_x in (_configItems select 15));
case (_x in (_configItems select 16)): {
configFile >> "CfgMagazines" >> _x;
};
case (_x in (_configItems select 6)): {
configFile >> "CfgVehicles" >> _x;
};
case (_x in (_configItems select 7)): {
configFile >> "CfgGlasses" >> _x;
};
default {
configFile >> "CfgWeapons" >> _x;
};
};
// Add item if not filtered
private _displayName = getText (_config >> "displayName");
if (toLower _displayName find _filter > -1) then {
private _picture = getText (_config >> "picture");
private _index = _listbox lnbAddRow ["", _displayName, _modeSymbol];
_listbox lnbSetData [[_index, 1], _x];
_listbox lnbSetPicture [[_index, 0], _picture];
_listbox lbSetTooltip [_index * (count lnbGetColumnsPosition _listbox), _x];
};
} forEach _attributeItems;
_listbox lnbSort [1];
};
// Get list of category items
private _categoryItems = switch (true) do {
case (_category < 3): {
_configItems select 0 select _category;
};
case (_category < 7): {
_configItems select 1 select (_category - 3);
};
default {
_configItems select (_category - 5);
};
};
// Get config for current category
private _config = switch (true) do {
case (_category in [7, 20, 21]): {
configFile >> "CfgMagazines";
};
case (_category == 11): {
configFile >> "CfgVehicles";
};
case (_category == 12): {
configFile >> "CfgGlasses";
};
default {
configFile >> "CfgWeapons";
};
};
// Populate listbox with category items
{
// Add item if not filtered
private _displayName = getText (_config >> _x >> "displayName");
if (toLower _displayName find _filter > -1) then {
private _picture = getText (_config >> _x >> "picture");
private _symbol = SYMBOL_ITEM_NONE;
private _alpha = 0.5;
// Change symbol and alpha if item already selected
if (_x in _attributeItems) then {
_symbol = _modeSymbol;
_alpha = 1;
};
private _index = _listbox lnbAddRow ["", _displayName, _symbol];
_listbox lnbSetData [[_index, 1], _x];
_listbox lnbSetPicture [[_index, 0], _picture];
_listbox lbSetTooltip [_index * (count lnbGetColumnsPosition _listbox), _x];
_listbox lnbSetColor [[_index, 1], [1, 1, 1, _alpha]];
_listbox lnbSetColor [[_index, 2], [1, 1, 1, _alpha]];
};
} forEach _categoryItems;
_listbox lnbSort [1];

View File

@ -0,0 +1,46 @@
#include "script_component.hpp"
#include "..\defines.hpp"
/*
* Author: mharis001
* Clears all items from current category in 3DEN attribute.
*
* Arguments:
* 0: Attribute controls group <CONTROL>
*
* Return Value:
* None
*
* Example:
* [CONTROL] call ace_arsenal_fnc_attributeClear
*
* Public: No
*/
params ["_controlsGroup"];
private _category = lbCurSel (_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_CATEGORY) - 1;
private _attributeValue = uiNamespace getVariable [QGVAR(attributeValue), [[], 0]];
TRACE_1("Handling clear button",_category);
// Remove all if no specific category
if (_category == -1) then {
_attributeValue set [0, []];
} else {
// Find category items and remove from list
private _configItems = +(uiNamespace getVariable [QGVAR(configItems), []]);
private _categoryItems = switch (true) do {
case (_category < 3): {
_configItems select 0 select _category;
};
case (_category < 7): {
_configItems select 1 select (_category - 3);
};
default {
_configItems select (_category - 5);
};
};
_attributeValue set [0, (_attributeValue select 0) - _categoryItems];
};
// Refresh the list after clear
[_controlsGroup] call FUNC(attributeAddItems);

View File

@ -0,0 +1,26 @@
#include "script_component.hpp"
/*
* Author: mharis001
* Handles double clicking a row in 3DEN attribute listbox.
*
* Arguments:
* 0: Listbox <CONTROL>
* 1: Row index <NUMBER>
*
* Return Value:
* None
*
* Example:
* [CONTROL, 0] call ace_arsenal_fnc_attributeDblClick
*
* Public: No
*/
params ["_listbox", "_currentRow"];
TRACE_1("Double click toggle",_currentRow);
// Get toggle mode (add or remove item)
private _itemClassname = _listbox lnbData [_currentRow, 1];
private _addItem = !(_itemClassname in ((uiNamespace getVariable [QGVAR(attributeValue), [[], 0]]) select 0));
[ctrlParentControlsGroup _listbox, _addItem] call FUNC(attributeSelect);

View File

@ -0,0 +1,33 @@
#include "script_component.hpp"
/*
* Author: mharis001
* Initializes the objects 3DEN attribute at scenario start.
*
* Arguments:
* 0: Attribute target <OBJECT>
* 1: Attribute value <ARRAY>
*
* Return Value:
* None
*
* Example:
* [box, [[], 1]] call ace_arsenal_fnc_attributeInit
*
* Public: No
*/
params ["_object", "_value"];
_value params ["_items", "_mode"];
TRACE_2("Initializing object with attribute",_object,_value);
if (_mode > 0) then {
// Blacklist: all full arsenal and take items away
[_object, true, true] call FUNC(initBox);
[_object, _items, true] call FUNC(removeVirtualItems);
} else {
// Exit on whitelist mode with no items
if (_items isEqualTo []) exitWith {};
// Whitelist: add only selected items
[_object, _items, true] call FUNC(initBox);
};

View File

@ -0,0 +1,32 @@
#include "script_component.hpp"
#include "..\defines.hpp"
/*
* Author: mharis001
* Initializes the 3DEN attribute.
*
* Arguments:
* 0: Attribute controls group <CONTROL>
* 1: Attribute value <ARRAY>
*
* Return Value:
* None
*
* Example:
* [CONTROL, [[], 0]] call ace_arsenal_fnc_attributeLoad
*
* Public: No
*/
params ["_controlsGroup", "_value"];
TRACE_1("Initializing 3DEN attribute",_value);
// Store working attribute value
uiNamespace setVariable [QGVAR(attributeValue), _value];
// Handle selected mode
if (_value select 1 > 0) then {
(_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_MODE) lbSetCurSel 1;
(_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_LIST_RIGHT) ctrlSetText SYMBOL_ITEM_REMOVE;
};
[_controlsGroup] call FUNC(attributeAddItems);

View File

@ -0,0 +1,29 @@
#include "script_component.hpp"
#include "..\defines.hpp"
/*
* Author: mharis001
* Handles changing the mode in 3DEN attribute.
*
* Arguments:
* 0: Attribute controls group <CONTROL>
* 1: Mode <NUMBER>
*
* Return Value:
* None
*
* Example:
* [CONTROL, 0] call ace_arsenal_fnc_attributeMode
*
* Public: No
*/
params ["_controlsGroup", "_mode"];
TRACE_1("Changing attribute mode",_mode);
// Store mode change
private _attributeValue = uiNamespace getVariable [QGVAR(attributeValue), [[], 0]];
_attributeValue set [1, _mode];
// Change right list button and refresh list items with new mode
(_controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_LIST_RIGHT) ctrlSetText ([SYMBOL_ITEM_VIRTUAL, SYMBOL_ITEM_REMOVE] select _mode);
[_controlsGroup] call FUNC(attributeAddItems);

View File

@ -0,0 +1,49 @@
#include "script_component.hpp"
#include "..\defines.hpp"
/*
* Author: mharis001
* Handles adding/removing an item from 3DEN attribute list.
*
* Arguments:
* 0: Attribute controls group <CONTROL>
* 1: Add (true) or remove (false) item <BOOL>
*
* Return Value:
* None
*
* Example:
* [CONTROL, true] call ace_arsenal_fnc_attributeSelect
*
* Public: No
*/
params ["_controlsGroup", "_addItem"];
// Get item class from listbox
private _listbox = _controlsGroup controlsGroupCtrl IDC_ATTRIBUTE_LIST;
private _currentRow = lnbCurSelRow _listbox;
private _itemClassname = _listbox lnbData [_currentRow, 1];
TRACE_2("Handling item selection",_itemClassname,_addItem);
private _attributeValue = uiNamespace getVariable [QGVAR(attributeValue), [[], 0]];
_attributeValue params ["_attributeItems", "_attributeMode"];
private _findItem = _attributeItems find _itemClassname;
// Add item if not already in list
if (_addItem && {_findItem < 0}) exitWith {
_attributeItems pushBack _itemClassname;
// Change symbol and increase alpha
_listbox lnbSetText [[_currentRow, 2], [SYMBOL_ITEM_VIRTUAL, SYMBOL_ITEM_REMOVE] select _attributeMode];
_listbox lnbSetColor [[_currentRow, 1], [1, 1, 1, 1]];
_listbox lnbSetColor [[_currentRow, 2], [1, 1, 1, 1]];
};
// Remove item if in list
if (!_addItem && {_findItem > -1}) exitWith {
_attributeItems deleteAt _findItem;
// Change symbol and reduce alpha
_listbox lnbSetText [[_currentRow, 2], SYMBOL_ITEM_NONE];
_listbox lnbSetColor [[_currentRow, 1], [1, 1, 1, 0.5]];
_listbox lnbSetColor [[_currentRow, 2], [1, 1, 1, 0.5]];
};

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

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

@ -104,4 +104,4 @@ GVAR(statsInfo) = nil;
GVAR(center) = nil;
GVAR(centerNotPlayer) = nil;
showHUD true;
[QUOTE(ADDON), []] call EFUNC(common,showHud);

View File

@ -231,7 +231,7 @@ showCommandingMenu "";
GVAR(cameraView) = cameraView;
GVAR(center) switchCamera "internal";
showHUD false;
[QUOTE(ADDON), [false, true, true, true, true, true, true, false, true, true]] call EFUNC(common,showHud);
private _mouseAreaCtrl = _display displayCtrl IDC_mouseArea;
ctrlSetFocus _mouseAreaCtrl;

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,13 +28,7 @@ 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]});
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 {
private _fnc_clearPreviousWepMags = {
private _compatibleMags = getArray (configfile >> "cfgweapons" >> _baseWeapon >> "magazines");
{
GVAR(center) removeMagazines _x;
@ -43,16 +37,27 @@ switch (GVAR(currentLeftPanel)) do {
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 (_item == "") then {
call _fnc_clearPreviousWepMags;
GVAR(center) removeWeapon (primaryWeapon GVAR(center));
GVAR(currentItems) set [18, ["", "", "", "", "", ""]];
GVAR(currentItems) set [0, _item];
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;
GVAR(center) addWeaponGlobal _item;
GVAR(center) addWeaponItem [_item, [(getArray (configfile >> "cfgweapons" >> _item >> "magazines")) select 0]];
{
@ -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,26 +82,20 @@ 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 {
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 {
call _fnc_clearPreviousWepMags;
GVAR(center) removeWeapon (handgunWeapon GVAR(center));
GVAR(currentItems) set [18, ["", "", "", "", "", ""]];
GVAR(currentItems) set [2, _item];
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;
GVAR(center) addWeaponGlobal _item;
GVAR(center) addWeaponItem [_item, [(getArray (configfile >> "cfgweapons" >> _item >> "magazines")) select 0]];
{
@ -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,26 +120,19 @@ 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 {
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 {
call _fnc_clearPreviousWepMags;
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;
GVAR(center) addWeaponGlobal _item;
GVAR(center) addWeaponItem [_item, [(getArray (configfile >> "cfgweapons" >> _item >> "magazines")) select 0]];
{
@ -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 {
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,6 +180,7 @@ switch (GVAR(currentLeftPanel)) do {
TOGGLE_RIGHT_PANEL_HIDE
} else {
if ((GVAR(currentItems) select 4) != _item) then {
GVAR(center) forceAddUniform _item;
while {count uniformItems GVAR(center) > 0} do {
@ -207,6 +192,7 @@ switch (GVAR(currentLeftPanel)) do {
[GVAR(center), ""] call bis_fnc_setUnitInsignia;
[GVAR(center), GVAR(currentInsignia)] call bis_fnc_setUnitInsignia;
};
TOGGLE_RIGHT_PANEL_CONTAINER
[_display, _selectCorrectPanelContainer] call FUNC(fillRightPanel);
@ -225,6 +211,7 @@ switch (GVAR(currentLeftPanel)) do {
TOGGLE_RIGHT_PANEL_HIDE
} else {
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);
@ -232,6 +219,7 @@ switch (GVAR(currentLeftPanel)) do {
{GVAR(center) addItemToVest _x} foreach (GVAR(currentItems) select 16);
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 {
if ((GVAR(currentItems) select 6) != _item) then {
removeBackpack GVAR(center);
GVAR(center) addBackpack _item;
GVAR(center) addBackpackGlobal _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];
};
TOGGLE_RIGHT_PANEL_CONTAINER
[_display, _selectCorrectPanelContainer] call FUNC(fillRightPanel);
@ -272,9 +262,11 @@ switch (GVAR(currentLeftPanel)) do {
removeGoggles GVAR(center);
GVAR(currentItems) set [7, _item];
} else {
if ((GVAR(currentItems) select 7) != _item) then {
GVAR(center) addGoggles _item;
GVAR(currentItems) set [7, _item];
};
};
call FUNC(showItem);
TOGGLE_RIGHT_PANEL_HIDE
@ -286,9 +278,11 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(center) unlinkItem (GVAR(currentItems) select 8);
GVAR(currentItems) set [8, _item];
} else {
if ((GVAR(currentItems) select 8) != _item) then {
GVAR(center) linkItem _item;
GVAR(currentItems) set [8, _item];
};
};
call FUNC(showItem);
TOGGLE_RIGHT_PANEL_HIDE
@ -300,11 +294,13 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(center) removeWeapon (binocular GVAR(center));
GVAR(currentItems) set [9, _item];
} else {
GVAR(center) addWeapon _item;
if ((GVAR(currentItems) select 9) != _item) then {
GVAR(center) addWeaponGlobal _item;
GVAR(currentItems) set [9, _item];
call FUNC(showItem);
ADDBINOCULARSMAG
};
};
call FUNC(showItem);
TOGGLE_RIGHT_PANEL_HIDE
[_display, _control, _curSel, (configFile >> "CfgWeapons" >> _item)] call FUNC(itemInfo);
@ -315,9 +311,11 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(center) unlinkItem (GVAR(currentItems) select 10) select 0;
GVAR(currentItems) set [10, _item];
} else {
if ((GVAR(currentItems) select 10) != _item) then {
GVAR(center) linkItem _item;
GVAR(currentItems) set [10, _item];
};
};
call FUNC(showItem);
TOGGLE_RIGHT_PANEL_HIDE
@ -329,9 +327,11 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(center) unlinkItem (GVAR(currentItems) select 11) select 0;
GVAR(currentItems) set [11, _item];
} else {
if ((GVAR(currentItems) select 11) != _item) then {
GVAR(center) linkItem _item;
GVAR(currentItems) set [11, _item];
};
};
call FUNC(showItem);
TOGGLE_RIGHT_PANEL_HIDE
@ -343,9 +343,11 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(center) unlinkItem (GVAR(currentItems) select 12) select 0;
GVAR(currentItems) set [12, _item];
} else {
if ((GVAR(currentItems) select 12) != _item) then {
GVAR(center) linkItem _item;
GVAR(currentItems) set [12, _item];
};
};
call FUNC(showItem);
TOGGLE_RIGHT_PANEL_HIDE
@ -357,9 +359,11 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(center) unlinkItem (GVAR(currentItems) select 13);
GVAR(currentItems) set [13, _item];
} else {
if ((GVAR(currentItems) select 13) != _item) then {
GVAR(center) linkItem _item;
GVAR(currentItems) set [13, _item];
};
};
call FUNC(showItem);
TOGGLE_RIGHT_PANEL_HIDE
@ -371,9 +375,11 @@ switch (GVAR(currentLeftPanel)) do {
GVAR(center) unlinkItem (GVAR(currentItems) select 14) select 0;
GVAR(currentItems) set [14, _item];
} else {
if ((GVAR(currentItems) select 14) != _item) then {
GVAR(center) linkItem _item;
GVAR(currentItems) set [14, _item];
};
};
call FUNC(showItem);
TOGGLE_RIGHT_PANEL_HIDE

View File

@ -33,13 +33,7 @@ call FUNC(compileStats);
};
{
private _currentPage = _x;
{
if (_x select 0 == _currentID) then {
_currentPage deleteAt _forEachIndex;
};
} foreach _currentPage;
_x deleteAt (_x findIf {_x select 0 == _currentID});
} foreach _tabToChange;
} foreach _IDList;

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";
@ -55,15 +54,15 @@ private _magazineGroups = [[],[]] call CBA_fnc_hashCreate;
(_cargo select 1) select ([201,301,101,302] find _itemInfoType) pushBackUnique _className;
};
/* Headgear */
case (_hasItemInfo && {_itemInfoType == 605}): {
case (_itemInfoType == 605): {
(_cargo select 3) pushBackUnique _className;
};
/* Uniform */\
case (_hasItemInfo && {_itemInfoType == 801}): {
case (_itemInfoType == 801): {
(_cargo select 4) pushBackUnique _className;
};
/* Vest */
case (_hasItemInfo && {_itemInfoType == 701}): {
case (_itemInfoType == 701): {
(_cargo select 5) pushBackUnique _className;
};
/* NVgs */
@ -96,7 +95,7 @@ private _magazineGroups = [[],[]] call CBA_fnc_hashCreate;
(_cargo select 14) pushBackUnique _className;
};
/* UAV terminals */
case (_hasItemInfo && {_itemInfoType == 621}): {
case (_itemInfoType == 621): {
(_cargo select 14) pushBackUnique _className;
};
/* Weapon, at the bottom to avoid adding binos */
@ -158,14 +157,6 @@ private _putList = [];
(_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 && {(if (isNumber (_x >> 'scopeArsenal')) then {getNumber (_x >> 'scopeArsenal')} else {getNumber (_x >> 'scope')}) == 2} && {getNumber (_x >> 'ace_arsenal_hide') != 1}", true];
{
@ -178,5 +169,20 @@ private _putList = [];
(_cargo select 7) pushBackUnique (configName _x);
} 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

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

@ -19,13 +19,14 @@
params ["_stat", "_config", "_args"];
_args params ["_statMinMax", "_configExtremeBool"];
private _statValues = [
[_config],
[_stat],
[_configExtremeBool],
[_statMinMax select 0]
] call BIS_fnc_configExtremes;
private _fireModes = getArray (_config >> "modes");
private _dispersion = [];
private _dispersion = (_statValues select 1) select 0;
{
_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

@ -1,6 +1,6 @@
/*
* Author: Alganthe
* ROF text statement.
* Rate of fire text statement.
*
* Arguments:
* 0: stat (STRING)
@ -19,11 +19,14 @@
params ["_stat", "_config", "_args"];
_args params ["_statMinMax", "_configExtremeBool"];
private _statValues = [
[_config],
[_stat],
[_configExtremeBool],
[_statMinMax select 0]
] call BIS_fnc_configExtremes;
private _fireModes = getArray (_config >> "modes");
private _fireRate = [];
format ["%1 rpm", round (60 / ((_statValues select 1) select 0))]
{
_fireRate pushBackUnique (getNumber (_config >> _x >> "reloadTime"));
} foreach _fireModes;
_fireRate sort true;
_fireRate = _fireRate param [0, 0];
format ["%1 rpm", round (60 / _fireRate)]

View File

@ -370,7 +370,7 @@
<German>Folgende Ausrüstung ist nicht mehr öffentlich:</German>
<Polish>Następujący zestaw nie jest już publiczny:</Polish>
<Japanese>次の装備は非公開になりました:</Japanese>
<Italian>Il seguente eequipaggiamento non è più pubblico:</Italian>
<Italian>Il seguente equipaggiamento non è più pubblico:</Italian>
<Korean>다음 로드아웃이 더이상 공용이 아님:</Korean>
<Chinese>以下的裝備已不再被分享:</Chinese>
<Chinesesimp>以下的装备已不再被分享:</Chinesesimp>
@ -546,7 +546,7 @@
<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>
@ -613,6 +613,7 @@
<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">
<English>No player unit available! Place a unit and mark it as "Player".</English>
@ -620,8 +621,9 @@
<German>Keine Spielereinheit verfügbar. Setze eine Einheit und markiere sie als "Spieler".</German>
<Japanese>プレイヤー ユニットがありません!ユニットを設置し"Player"と名付けてください。</Japanese>
<Korean>플레이어 유닛을 사용할 수 없습니다! 유닛을 놓고 "플레이어"라고 표시하십시오.</Korean>
<Chinese>沒有可用的玩家單位!請擺放一個單位並設定成"玩家"</Chinese>
<Chinese>沒有可用的玩家單位!請擺放一個單位並設定成"玩家"</Chinese>
<Chinesesimp>没有可用的玩家单位!请摆放一个单位并设定成"玩家"。</Chinesesimp>
<Italian>Non ci sono giocatori! Poisziona una unità e impostala come "Giocatore".</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_portLoadoutsLoadoutError">
<English>No loadouts to import.</English>
@ -629,8 +631,9 @@
<German>Keine Ausrüstungen zum Importieren</German>
<Japanese>取り込みする装備がありません。</Japanese>
<Korean>가져올 로드 아웃이 없습니다.</Korean>
<Chinese>沒有裝備被匯入</Chinese>
<Chinese>沒有裝備被匯入</Chinese>
<Chinesesimp>没有装备被汇入。</Chinesesimp>
<Italian>Non ci sono equipaggiamenti da importare.</Italian>
</Key>
<Key ID="STR_ACE_Arsenal_Mission">
<English>ACE Arsenal</English>
@ -639,30 +642,34 @@
<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>
<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>
<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>
<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>
@ -670,6 +677,7 @@
<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>
@ -677,6 +685,7 @@
<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>
@ -684,11 +693,15 @@
<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>
@ -710,21 +723,87 @@
<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>
<Key ID="STR_ACE_Arsenal_Mode">
<English>Mode</English>
<Chinese>模式</Chinese>
<French>Mode</French>
<Spanish>Modo</Spanish>
<Italian>Modalità</Italian>
<Polish>Tryb</Polish>
<Russian>Режим</Russian>
<German>Modus</German>
<Czech>Režim</Czech>
<Portuguese>Modo</Portuguese>
<Korean>모드</Korean>
<Chinesesimp>模式</Chinesesimp>
<Japanese>モード</Japanese>
<Turkish>Mod</Turkish>
</Key>
<Key ID="STR_ACE_Arsenal_Whitelist">
<English>Whitelist</English>
<Polish>Biała lista</Polish>
<Spanish>Lista blanca</Spanish>
<German>Whitelist</German>
<Czech>Seznam povolených</Czech>
<Portuguese>Lista branca</Portuguese>
<French>Liste blanche</French>
<Hungarian>Fehérlista</Hungarian>
<Russian>Вайтлист</Russian>
<Italian>Lista Bianca</Italian>
<Japanese>許可制</Japanese>
<Korean>화이트리스트</Korean>
<Chinese>白名單</Chinese>
<Chinesesimp>白名单</Chinesesimp>
</Key>
<Key ID="STR_ACE_Arsenal_Blacklist">
<English>Blacklist</English>
</Key>
<Key ID="STR_ACE_Arsenal_Items">
<English>Items</English>
<Chinese>物品</Chinese>
<French>Objets</French>
<Spanish>Objetos</Spanish>
<Italian>Oggetti</Italian>
<Polish>Przedmioty</Polish>
<Russian>Предметы</Russian>
<German>Gegenstände</German>
<Czech>Předměty</Czech>
<Portuguese>Itens</Portuguese>
<Korean>물품</Korean>
<Chinesesimp>物品</Chinesesimp>
<Japanese>アイテム</Japanese>
<Turkish>Eşyalar</Turkish>
</Key>
<Key ID="STR_ACE_Arsenal_AttributeExport_Tooltip">
<English>Export current items list as an array for use in scripts</English>
</Key>
</Package>
</Project>

View File

@ -490,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;
@ -512,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 {

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

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

@ -106,7 +106,7 @@ if (_unit == _attachToVehicle) then { //Self Attachment
if (_screenPos isEqualTo []) exitWith {
((uiNamespace getVariable [QGVAR(virtualAmmoDisplay), displayNull]) displayCtrl 800851) ctrlShow false;
};
private _realDistance = (_virtualPos distance (positionCameraToWorld [0,0,0])) / ((call CBA_fnc_getFov) select 1);
private _realDistance = (_virtualPos distance (positionCameraToWorld [0,0,0])) / (([] call CBA_fnc_getFov) select 1);
_screenPos = [(_screenPos select 0), _realDistance, (_screenPos select 1)];
((uiNamespace getVariable [QGVAR(virtualAmmoDisplay), displayNull]) displayCtrl 800851) ctrlSetPosition _screenPos;
private _dir = (positionCameraToWorld [0,0,1]) vectorFromTo (positionCameraToWorld [0,0,0]);

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

@ -2284,26 +2284,36 @@
<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

@ -21,7 +21,7 @@ params ["_newUnit","_oldUnit"];
//set showHUD based on new unit status:
if ((_newUnit getVariable [QGVAR(isHandcuffed), false]) || {_newUnit getVariable [QGVAR(isSurrendering), false]}) then {
TRACE_1("Player Change (showHUD false)",_newUnit);
["captive", [false, false, false, false, false, false, false, false]] call EFUNC(common,showHud);
["captive", [false, false, false, false, false, false, false, false, false, true]] call EFUNC(common,showHud);
} else {
TRACE_1("Player Change (showHUD true)",_newUnit);
["captive", []] call EFUNC(common,showHud); //same as showHud true;

View File

@ -19,7 +19,7 @@
if ((ACE_player getVariable [QGVAR(isHandcuffed), false]) || {ACE_player getVariable [QGVAR(isSurrendering), false]}) then {
TRACE_1("Player Change (showHUD false)",ACE_player);
["captive", [false, false, false, false, false, false, false, false]] call EFUNC(common,showHud);
["captive", [false, false, false, false, false, false, false, false, false, true]] call EFUNC(common,showHud);
} else {
TRACE_1("Player Change (showHUD true)",ACE_player);
["captive", []] call EFUNC(common,showHud); //same as showHud true;

View File

@ -50,7 +50,7 @@ if (_state) then {
_unit setVariable [QGVAR(CargoIndex), ((vehicle _unit) getCargoIndex _unit), true];
if (_unit == ACE_player) then {
["captive", [false, false, false, false, false, false, false, false]] call EFUNC(common,showHud);
["captive", [false, false, false, false, false, false, false, false, false, true]] call EFUNC(common,showHud);
};
// fix anim on mission start (should work on dedicated servers)
@ -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

@ -47,7 +47,7 @@ if (_state) then {
[_unit, "setCaptive", QGVAR(Surrendered), true] call EFUNC(common,statusEffect_set);
if (_unit == ACE_player) then {
["captive", [false, false, false, false, false, false, false, false]] call EFUNC(common,showHud);
["captive", [false, false, false, false, false, false, false, false, false, true]] call EFUNC(common,showHud);
};
[_unit] call EFUNC(common,fixLoweredRifleAnimation);
@ -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

@ -441,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>
@ -459,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

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

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

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

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

View File

@ -147,4 +147,32 @@ class CfgVehicles {
scope = 1;
maximumLoad = 1E6;
};
class FlagCarrier_Asym;
class ACE_Flag_Black: FlagCarrier_Asym {
author = CSTRING(ACETeam);
displayName = CSTRING(FlagBlack);
scope = 2;
scopeCurator = 2;
editorPreview = QPATHTOF(data\ace_flag_black_preview.jpg);
class EventHandlers {
init = QUOTE((_this select 0) setFlagTexture QUOTE(QPATHTOF(data\ace_flag_black_ca.paa)));
};
class ACE_Actions {
class ACE_MainActions {
displayName = ECSTRING(interaction,MainAction);
condition = "true";
position = "[-0.1, -0.35, -2.6]";
distance = 2;
};
};
};
class ACE_Flag_White: ACE_Flag_Black {
author = CSTRING(ACETeam);
displayName = CSTRING(FlagWhite);
editorPreview = QPATHTOF(data\ace_flag_white_preview.jpg);
class EventHandlers {
init = QUOTE((_this select 0) setFlagTexture QUOTE(QPATHTOF(data\ace_flag_white_ca.paa)));
};
};
};

View File

@ -1,27 +1,24 @@
class RscInGameUI {
class RscUnitInfo {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); [ARR_2('ace_infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call CBA_fnc_localEvent;);
};
class RscUnitInfo;
class RscUnitInfoNoHUD {
onLoad = QUOTE([ARR_2('ace_infoDisplayChanged', [ARR_2(_this select 0, 'Any')])] call CBA_fnc_localEvent;);
};
class RscUnitInfoSoldier: RscUnitInfo {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgSoldier', _this select 0)]; [ARR_2('ace_infoDisplayChanged', [ARR_2(_this select 0, 'Soldier')])] call CBA_fnc_localEvent;);
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgSoldier', _this select 0)];);
};
class RscUnitInfoTank: RscUnitInfo {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgVehicle', _this select 0)]; [ARR_2('ace_infoDisplayChanged', [ARR_2(_this select 0, 'Vehicle')])] call CBA_fnc_localEvent;);
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgVehicle', _this select 0)];);
};
class RscUnitInfoAirNoWeapon: RscUnitInfo {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgAircraft', _this select 0)]; [ARR_2('ace_infoDisplayChanged', [ARR_2(_this select 0, 'Aircraft')])] call CBA_fnc_localEvent;);
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgAircraft', _this select 0)];);
};
class RscUnitInfoAir: RscUnitInfoAirNoWeapon {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgAircraft', _this select 0)]; [ARR_2('ace_infoDisplayChanged', [ARR_2(_this select 0, 'Aircraft')])] call CBA_fnc_localEvent;);
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgAircraft', _this select 0)];);
};
class RscUnitInfo_AH64D_gunner {
@ -33,11 +30,11 @@ class RscInGameUI {
};
class RscUnitInfoSubmarine: RscUnitInfo {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgSubmarine', _this select 0)]; [ARR_2('ace_infoDisplayChanged', [ARR_2(_this select 0, 'Submarine')])] call CBA_fnc_localEvent;);
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgSubmarine', _this select 0)];);
};
class RscUnitInfoShip: RscUnitInfo {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgShip', _this select 0)]; [ARR_2('ace_infoDisplayChanged', [ARR_2(_this select 0, 'Ship')])] call CBA_fnc_localEvent;);
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgShip', _this select 0)];);
};
class RscWeaponEmpty {
@ -97,7 +94,7 @@ class RscInGameUI {
};
class RscUnitInfoParachute: RscUnitInfo {
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgParachute', _this select 0)]; [ARR_2('ace_infoDisplayChanged', [ARR_2(_this select 0, 'Parachute')])] call CBA_fnc_localEvent;);
onLoad = QUOTE([ARR_4(""onLoad"",_this,""RscUnitInfo"",'IGUI')] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable [ARR_2('ACE_dlgParachute', _this select 0)];);
};
class RscUnitVehicle {

View File

@ -3,7 +3,7 @@
class CfgPatches {
class ADDON {
name = COMPONENT_NAME;
units[] = {"ACE_Box_Misc", "ACE_bananaItem"};
units[] = {"ACE_Box_Misc", "ACE_bananaItem", "ACE_Flag_Black", "ACE_Flag_White"};
weapons[] = {"ACE_ItemCore","ACE_FakePrimaryWeapon", "ACE_Banana"};
requiredVersion = REQUIRED_VERSION;
requiredAddons[] = {"ace_main","ace_modules"};

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@ -5,7 +5,7 @@
*
* Arguments:
* 0: Source Vehicle <OBJECT>
* 1: Cargo Classname <STRING>
* 1: Cargo <OBJECT> or <STRING>
* 2: Unloader (player) <OBJECT> (default: objNull)
* 3: Max Distance (meters) <NUMBER> (default: 10)
* 4: Check Vehicle is Stable <BOOL> (default: true)
@ -27,8 +27,8 @@
//Manual collision tests (count and radius):
#define COL_TEST_COUNT 12
params ["_vehicle", "_typeOfCargo", ["_theUnloader", objNull], ["_maxDistance", 10], ["_checkVehicleIsStable", true]];
TRACE_5("params",_vehicle,_typeOfCargo,_theUnloader,_maxDistance,_checkVehicleIsStable);
params ["_vehicle", "_cargo", ["_theUnloader", objNull], ["_maxDistance", 10], ["_checkVehicleIsStable", true]];
TRACE_5("params",_vehicle,_cargo,_theUnloader,_maxDistance,_checkVehicleIsStable);
scopeName "main";
@ -40,12 +40,22 @@ if (_checkVehicleIsStable) then {
};
private _radiusOfItem = 1;
if (_typeOfCargo isKindOf "CAManBase") then {
if (_cargo isKindOf "CAManBase") then {
_radiusOfItem = 1.1;
} else {
//`sizeOf` is unreliable, and does not work with object types that don't exist on map, so estimate size based on cargo size
if (isNumber (configFile >> "CfgVehicles" >> _typeOfCargo >> QEGVAR(cargo,size))) then {
_radiusOfItem = (((getNumber (configFile >> "CfgVehicles" >> _typeOfCargo >> QEGVAR(cargo,size))) ^ 0.35) max 0.75);
private _typeOfCargo = if (_cargo isEqualType "") then {_cargo} else {typeOf _cargo};
private _itemSize = if (isNumber (configFile >> "CfgVehicles" >> _typeOfCargo >> QEGVAR(cargo,size)) && {getNumber (configFile >> "CfgVehicles" >> _typeOfCargo >> QEGVAR(cargo,size)) != -1}) then {
getNumber (configFile >> "CfgVehicles" >> _typeOfCargo >> QEGVAR(cargo,size));
} else {
if (["ace_cargo"] call FUNC(isModLoaded)) then {
[_cargo] call EFUNC(cargo,getSizeItem);
} else {
_radiusOfItem;
};
};
if (_itemSize != -1) then {
_radiusOfItem = (_itemSize ^ 0.35) max 0.75;
};
};

View File

@ -15,12 +15,14 @@
* - menu: Boolean - show commanding menu (hides HC related menus)
* - group: Boolean - show group info bar (hides squad leader info bar)
* - cursors: Boolean - show HUD weapon cursors (connected with scripted HUD)
* - panels: Boolean - show vehicle panels / GPS
* - ???: Boolean - Possibly related to changelog entry `Added: A new showKillConfirmations parameter for the showHud command`
*
* Return Value:
* Resulting ShowHud Array <ARRAY>
*
* Example:
* ["hideHud", [false, true, true, true, true, true, true, false]] call ace_common_fnc_showHud; //This is equivalent to the old showHud false
* ["hideHud", [false, true, true, true, true, true, true, false, true, true]] call ace_common_fnc_showHud; //This is equivalent to the old showHud false
* [] call ace_common_fnc_showHud; //sets `showHud` and returns the result array used
*
* Public: Yes
@ -29,7 +31,7 @@
if (!hasInterface) exitWith {[-1]};
params [["_reason", "", [""]], ["_mask", [], [[]], [0,8]]];
params [["_reason", "", [""]], ["_mask", [], [[]]]];
if (isArray (missionConfigFile >> "showHUD")) then {
//(showHud = 0;) is fine - the array is the problem
@ -39,10 +41,11 @@ if (isArray (missionConfigFile >> "showHUD")) then {
if (_reason != "") then {
_reason = toLower _reason;
if (_mask isEqualTo []) then {
TRACE_2("Setting", _reason, _mask);
TRACE_2("Removing", _reason, _mask);
[GVAR(showHudHash), _reason] call CBA_fnc_hashRem;
} else {
TRACE_2("Removing", _reason, _mask);
while {(count _mask) < 10} do { _mask pushBack true; };
TRACE_2("Setting", _reason, _mask);
[GVAR(showHudHash), _reason, _mask] call CBA_fnc_hashSet;
};
};
@ -50,7 +53,7 @@ if (_reason != "") then {
GVAR(showHudHash) params ["", "_reasons", "_masks"];
private _resultMask = [];
for "_index" from 0 to 7 do {
for "_index" from 0 to 9 do {
private _set = true; //Default to true
{
if (!(_x select _index)) exitWith {

View File

@ -456,7 +456,7 @@
<Portuguese>Aceitar pedidos enviados por outros jogadores. Podem ser pedidos para usar/ compartilhar equipamento, realizar certas ações.</Portuguese>
<Japanese>他プレイヤからの要求を許可します。他プレイヤは装備を共有し、使うなど特定の動作を行えます。</Japanese>
<Korean>다른 플레이어가 보내온 요청을 수락합니다. 이것은 장비 사용 / 공유 요청, 특정 작업 수행 등이 될 수 있습니다.</Korean>
<Chinese>接受由其他玩家送出的請求。包含使用/共享裝備與執行特定動作</Chinese>
<Chinese>接受由其他玩家送出的請求。包含使用/共享裝備與執行特定動作</Chinese>
<Chinesesimp>接受由其他玩家送出的请求。包含使用/共享装备与执行特定动作。</Chinesesimp>
</Key>
<Key ID="STR_ACE_ACTION_DECLINE_REQUEST_KEY_TOOLTIP">
@ -472,7 +472,7 @@
<Portuguese>Rejeita pedidos enviados por outros jogadores. Podem ser pedidos para usar/ compartilhar equipamento, realizar certas ações.</Portuguese>
<Japanese>他プレイヤからの要求を拒否します。他プレイヤは装備を共有し、使うなど特定の動作をできません。</Japanese>
<Korean>다른 플레이어가 보내온 요청을 거부합니다. 이것은 장비 사용 / 공유 요청, 특정 작업 수행 등이 될 수 있습니다.</Korean>
<Chinese>拒絕由其他玩家送出的請求。包含使用/共享裝備與執行特定動作</Chinese>
<Chinese>拒絕由其他玩家送出的請求。包含使用/共享裝備與執行特定動作</Chinese>
<Chinesesimp>拒绝由其他玩家送出的请求。包含使用/共享装备与执行特定动作。</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_CheckPBOsAction">
@ -528,7 +528,7 @@
<Portuguese>Selecione a posição ou disabilite a posição dos ícones de feedback na sua tela. Esses ícones irão aparecer para mostrar feedback extra do status do seu personagem e ações realizadas.</Portuguese>
<Japanese>画面上に表示するフィードバック アイコンの位置や無効化を選択できます。このアイコンは自キャラクター状態や動作の状況をフィードバックするために表示されています。</Japanese>
<Korean>피드백 아이콘의 위치를 설정하거나 비활성화합니다. 피드백 아이콘은 캐릭터의 상세정보와 행동을 보여줍니다.</Korean>
<Chinese>選擇位置或取消回饋圖標顯示在螢幕上。這些圖標將顯示出你角色額外的狀態與行動等資訊</Chinese>
<Chinese>選擇位置或取消回饋圖標顯示在螢幕上。這些圖標將顯示出你角色額外的狀態與行動等資訊</Chinese>
<Chinesesimp>选择位置或取消回馈图标显示在荧幕上。这些图标将显示出你角色额外的状态与行动等资讯。</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_SettingProgressbarLocationName">
@ -624,7 +624,7 @@
<Portuguese>A cor do texto das hints do ACE. Essa cor é a cor default para todos os texos exibidos pelo sistema de hints do ACE , caso o texto da hint não tem outra cor especificada.</Portuguese>
<Japanese>ACE によるヒントの文章へ、色を設定できます。この色は ACE ヒント システムを介して表示される全文章の色と標準でなっており、特定の色を設定していても、標準色になります。</Japanese>
<Korean>ACE 힌트에 쓰이는 글씨 색입니다. 힌트 글씨의 색이 정해지지 않을경우 모든 힌트의 색은 기본으로 설정됩니다.</Korean>
<Chinese>設定ACE提示文字的顏色。若提示字體並無指定其他顏色將會自動選用ACE系統的預設顏色</Chinese>
<Chinese>設定ACE提示文字的顏色。若提示字體並無指定其他顏色將會自動選用ACE系統的預設顏色</Chinese>
<Chinesesimp>设定ACE提示文字的颜色。若提示字体并无指定其他颜色将会自动选用ACE系统的预设颜色。</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_SettingPersistentLaserName">
@ -644,7 +644,7 @@
<Italian>Abilita la torcia/laser dopo il cambio dell'arma o l'entrata/uscita del veicolo se precedentemente attiva.</Italian>
<Korean>무기를 바꾸거나 차량에 승하차 할 때 이전에 스위치 켜고 끔을 유지합니다.</Korean>
<German>Aktiviert Laserpointer/Taktisches Licht nach einem Waffenwechsel oder dem Auf-/Absitzen, falls es zuvor aktiv war.</German>
<Chinese>保存武器雷射/手電筒的開關狀態,使玩家切換武器或進出載具時能保持之前的的狀態</Chinese>
<Chinese>保存武器雷射/手電筒的開關狀態,使玩家切換武器或進出載具時能保持之前的的狀態</Chinese>
<Chinesesimp>保存武器雷射/手电筒的开关状态,使玩家切换武器或进出载具时能保持之前的的状态。</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_bananaDisplayName">
@ -676,7 +676,7 @@
<Portuguese>A banana é uma fruta comestível, botanicamente uma baga, produzida por vários tipos de plantas herbáceas grandes do genero Musa.</Portuguese>
<Japanese>甘蕉は食べられる果物でバショウ科バショウ属のうち、果実を食用とする品種群の総称。また、その果実のこと。いくつかの原種から育種された多年草。種によっては熟すまでは毒を持つものもある。</Japanese>
<Korean>바나나는 식용 과일로써 식물학적으로 열매류이며 여러 종류의 개화가능한 초본의 파초과로 부터 생산됩니다.</Korean>
<Chinese>香蕉(學名: Musa × paradisiaca),為芭蕉科芭蕉屬小果野蕉及野蕉的人工栽培雜交種,為多年生草本植物。果實長有棱; 果皮黃色,果肉白色,味道香甜。主要生長在熱帶、亞熱帶地區。原產於亞洲東南部熱帶、亞熱帶地區</Chinese>
<Chinese>香蕉(學名: Musa × paradisiaca),為芭蕉科芭蕉屬小果野蕉及野蕉的人工栽培雜交種,為多年生草本植物。果實長有棱; 果皮黃色,果肉白色,味道香甜。主要生長在熱帶、亞熱帶地區。原產於亞洲東南部熱帶、亞熱帶地區</Chinese>
<Chinesesimp>香蕉(学名: Musa × paradisiaca),为芭蕉科芭蕉属小果野蕉及野蕉的人工栽培杂交种,为多年生草本植物。果实长有棱; 果皮黄色,果肉白色,味道香甜。主要生长在热带、亚热带地区。原产于亚洲东南部热带、亚热带地区。</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_DisplayName">
@ -707,7 +707,7 @@
<Italian>Controlla l'integrità degli addon con il server ed esegui l'azione selezionata se un addon è mancante</Italian>
<Japanese>サーバがアドオンの整合性を検査し、もし不備があれば実行する動作を選択できます。</Japanese>
<Korean>서버 에드온의 무결성을 검사하고 사라진 에드온이 있을경우 행동을 선택합니다.</Korean>
<Chinese>檢查客戶端與伺服器端的模組清單是否一致且完整,並提供訊息表示遺失的模組</Chinese>
<Chinese>檢查客戶端與伺服器端的模組清單是否一致且完整,並提供訊息表示遺失的模組</Chinese>
<Chinesesimp>检查客户端与伺服器端的模组清单是否一致且完整,并提供讯息表示遗失的模组。</Chinesesimp>
</Key>
<Key ID="STR_ACE_Common_CheckPBO_Action_DisplayName">
@ -1170,14 +1170,28 @@
<Chinese>允許調低音樂音量</Chinese>
<Chinesesimp>允许调低音乐音量</Chinesesimp>
<Japanese>音楽の音量低下を許可</Japanese>
<Italian>Permesso di abbassare la musica</Italian>
</Key>
<Key ID="STR_ACE_Common_AllowFadeMusicTooltip">
<English>Allow ACE scripts to turn down the music.</English>
<German>Erlaube ACE-Skripten, die Musik leiser zu stellen.</German>
<Korean>ACE 스크립트가 음악을 끌 수 있습니다.</Korean>
<Chinese>允許ACE腳本去控制音樂的音量</Chinese>
<Chinese>允許ACE腳本去控制音樂的音量</Chinese>
<Chinesesimp>允许ACE脚本去控制音乐的音量。</Chinesesimp>
<Japanese>ACE スプリントへ音量低下を許可します。</Japanese>
<Italian>Permetti agli script di ACEdi abbassare la musica.</Italian>
</Key>
<Key ID="STR_ACE_Common_FlagBlack">
<English>Flag (ACE - Black)</English>
<Chinesesimp>旗帜(ACE-黑色):</Chinesesimp>
<Chinese>旗幟(ACE-黑色)</Chinese>
<Italian>Bandiera (ACE - Nera)</Italian>
</Key>
<Key ID="STR_ACE_Common_FlagWhite">
<English>Flag (ACE - White)</English>
<Chinesesimp>旗帜(ACE-白色):</Chinesesimp>
<Chinese>旗幟(ACE-白色)</Chinese>
<Italian>Bandiera (ACE - Bianca)</Italian>
</Key>
</Package>
</Project>

View File

@ -90,7 +90,6 @@ class CfgVehicles {
statement = QUOTE([ARR_2(_target,_player)] call FUNC(dismount));
showDisabled = 0;
exceptions[] = {};
priority = 5;
icon = QPATHTOF(UI\icon_sandbag_ca.paa);
};
};
@ -137,7 +136,6 @@ class CfgVehicles {
statement = QUOTE([ARR_2({_this call FUNC(deploy)}, [ARR_2(_target,_player)])] call CBA_fnc_execNextFrame);
showDisabled = 0;
exceptions[] = {};
priority = 5;
icon = QPATHTOF(UI\icon_sandbag_ca.paa);
};
};

View File

@ -33,7 +33,7 @@
<Polish>Aktywuje efekt samozapłonu amunicji na zniszczonych pojazdach.</Polish>
<French>Active le cook-off (autocombustion des munitions) et les effets de destruction liés.</French>
<Italian>Abilita l'esplosione e i relativi effetti di distruzione del veicolo.</Italian>
<Chinese>開啟此功能後,將使有關載具在損毀時有殉爆的效果</Chinese>
<Chinese>開啟此功能後,將使有關載具在損毀時有殉爆的效果</Chinese>
<Chinesesimp>开启此功能后,将使有关载具在损毁时有殉爆的效果。</Chinesesimp>
</Key>
<Key ID="STR_ACE_CookOff_generic_turret_wreck">
@ -92,7 +92,7 @@
<Polish>Aktywuje samozapłon amunicji. Wystrzeliwuje pociski podczas gdy pojazd płonie i posiada amunicję.</Polish>
<French>Mets à feu les munitions lorsqu'un véhicule est en feu et contient des munitions.</French>
<Italian>Abilita l'esplosione delle munizioni. Spara munizioni di proiettili quando il veicolo va a fuoco e contiene munizioni.</Italian>
<Chinese>開啟彈藥殉爆效果。當一台載有彈藥的載具起火時, 將會有殉爆的效果</Chinese>
<Chinese>開啟彈藥殉爆效果。當一台載有彈藥的載具起火時, 將會有殉爆的效果</Chinese>
<Chinesesimp>开启弹药殉爆效果。当一台载有弹药的载具起火时, 将会有殉爆的效果。</Chinesesimp>
<Korean>쿡오프 현상을 활성화 합니다. 이것은 탄약에 불이 붙어있는 동안 주변에 발사체를 발사합니다.</Korean>
</Key>
@ -131,7 +131,7 @@
<Japanese>誘爆する可能性の乗数。高い値では誘爆する可能性が高まります。</Japanese>
<Italian>Moltiplicatore per la probabilità dell'esplosione. Un valore più alto aumenta la probabilità dell'esplosione</Italian>
<German>Faktor für Wahrscheinlichkeit der Durchzündung. Ein höherer Wert führt zu höherer Durchzündungswahrscheinlichkeit.</German>
<Chinese>調整殉爆發生機率係數。值越高代表越容易發生殉爆</Chinese>
<Chinese>調整殉爆發生機率係數。值越高代表越容易發生殉爆</Chinese>
<Chinesesimp>调整殉爆发生机率系数。值越高代表越容易发生殉爆。</Chinesesimp>
</Key>
</Package>

View File

@ -8,7 +8,6 @@ class CfgVehicles {
condition = QUOTE([ARR_2(_player,'ACE_DAGR')] call EFUNC(common,hasItem));
statement = QUOTE(call FUNC(menuInit));
showDisabled = 0;
priority = 0.1;
icon = QPATHTOF(UI\DAGR_Icon.paa);
exceptions[] = {"isNotInside", "isNotSitting"};
class GVAR(toggle) {
@ -16,7 +15,6 @@ class CfgVehicles {
condition = QUOTE([ARR_2(_player,'ACE_DAGR')] call EFUNC(common,hasItem));
statement = QUOTE(call FUNC(toggleOverlay));
showDisabled = 0;
priority = 0.2;
icon = QPATHTOF(UI\DAGR_Icon.paa);
exceptions[] = {"notOnMap", "isNotInside", "isNotSitting"};
};

View File

@ -5,7 +5,7 @@ class CfgMagazines {
scope = 1;
scopeArsenal = 1;
displayName = CSTRING(PreloadedMissileDummy);
picture = "a3\ui_f\data\IGUI\Cfg\Targeting\Empty_ca.paa";
picture = "\a3\ui_f\data\IGUI\Cfg\Targeting\Empty_ca.paa";
weaponPoolAvailable = 0;
mass = 0;
};

View File

@ -0,0 +1,29 @@
class CfgUIGrids {
class IGUI {
class Presets {
class Arma3 {
class Variables {
GVAR(grid)[] = {
{
(safeZoneX + safeZoneW) - 12.9 * GUI_GRID_W,
safeZoneY + 0.175 * safeZoneH,
8 * GUI_GRID_W,
8 * GUI_GRID_H
},
GUI_GRID_W,
GUI_GRID_H
};
};
};
};
class Variables {
class GVAR(grid) {
displayName = COMPONENT_NAME;
description = CSTRING(IGUI_Description);
preview = QPATHTOF(ui\igui_preview.paa);
saveToProfile[] = {0, 1};
canResize = 0;
};
};
};
};

View File

@ -17,7 +17,6 @@ class CfgVehicles {
statement = QUOTE([ARR_2(_player,_target)] call FUNC(checkDogtag));
exceptions[] = {"isNotSwimming", "isNotInside"};
showDisabled = 0;
priority = 3;
icon = QPATHTOF(data\dogtag_icon_ca.paa);
};
class ACE_TakeDogtag {
@ -26,7 +25,6 @@ class CfgVehicles {
statement = QUOTE([ARR_2(_player,_target)] call FUNC(takeDogtag));
exceptions[] = {"isNotSwimming", "isNotInside"};
showDisabled = 0;
priority = 3;
icon = QPATHTOF(data\dogtag_icon_ca.paa);
};
};

View File

@ -6,34 +6,30 @@ class RscTitles {
idd = -1;
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QQGVAR(tag),_this select 0)]);
onUnload = QUOTE(uiNamespace setVariable [ARR_2(QQGVAR(tag),nil)]);
movingEnable = false;
duration = 5;
fadeIn = 0.2;
fadeOut = 0.2;
duration = 5;
movingEnable = 0;
class controls {
class background: RscPicture {
idc = 1000;
text = QUOTE(PATHTOF(data\dogtagSingle.paa));
sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
x = profileNamespace getVariable ['TRIPLES(IGUI,GVAR(grid),X)', (safeZoneX + safeZoneW) - 12.9 * GUI_GRID_W];
y = profileNamespace getVariable ['TRIPLES(IGUI,GVAR(grid),Y)', safeZoneY + 0.175 * safeZoneH];
w = 8 * GUI_GRID_W;
h = 8 * GUI_GRID_H;
text = QPATHTOF(data\dogtagSingle.paa);
colorText[] = {1, 1, 1, 1};
colorBackground[] = {0, 0, 0, 0};
x = ((safezoneX + safezoneW) - (10 * (((safezoneW / safezoneH) min 1.2) / 40)) - 2.9 * (((safezoneW / safezoneH) min 1.2) / 40));
y = safeZoneY + 0.175 * safezoneH;
w = (8 * (((safezoneW / safezoneH) min 1.2) / 40));
h = (8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25));
font = "EtelkaMonospacePro";
};
class nickname: RscStructuredText {
idc = 1001;
text = "";
sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)";
sizeEx = GUI_GRID_H;
colorText[] = {1, 1, 1, 1};
colorBackground[] = {0, 0, 0, 0};
x = ((safezoneX + safezoneW) - (8.4 * (((safezoneW / safezoneH) min 1.2) / 40)) - 2.9 * (((safezoneW / safezoneH) min 1.2) / 40));
y = safeZoneY + 0.24 * safezoneH;
w = (5.9 * (((safezoneW / safezoneH) min 1.2) / 40));
h = (3 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25));
x = 1.6 * GUI_GRID_W + (profileNamespace getVariable ['TRIPLES(IGUI,GVAR(grid),X)', (safeZoneX + safeZoneW) - 12.9 * GUI_GRID_W]);
y = 0.065 * safeZoneH + (profileNamespace getVariable ['TRIPLES(IGUI,GVAR(grid),Y)', safeZoneY + 0.175 * safeZoneH]);
w = 5.9 * GUI_GRID_W;
h = 3 * GUI_GRID_H;
font = "RobotoCondensed";
class Attributes {
font = "RobotoCondensed";
@ -48,13 +44,9 @@ class RscTitles {
};
};
class GVAR(doubleTag): GVAR(singleTag) {
idd = -1;
onLoad = QUOTE(uiNamespace setVariable [ARR_2(QQGVAR(tag),_this select 0)]);
onUnload = QUOTE(uiNamespace setVariable [ARR_2(QQGVAR(tag),nil)]);
class controls: controls {
class background: background {
text = QUOTE(PATHTOF(data\dogtagDouble.paa));
text = QPATHTOF(data\dogtagDouble.paa);
};
class nickname: nickname {
class Attributes: Attributes {

View File

@ -17,4 +17,5 @@ class CfgPatches {
#include "CfgEventHandlers.hpp"
#include "CfgWeapons.hpp"
#include "CfgVehicles.hpp"
#include "Dogtag.hpp"
#include "RscTitles.hpp"
#include "CfgUIGrids.hpp"

View File

@ -16,6 +16,8 @@
#include "\z\ace\addons\main\script_macros.hpp"
#include "\a3\ui_f\hpp\defineCommonGrids.inc"
#define DOGTAG_SHOW_DELAY 1
#define RUSTLING_SOUNDS [\

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="Dogtags">
<Key ID="STR_ACE_Dogtags_itemName">
@ -79,5 +79,9 @@
<Chinese>已經有人把他的兵籍牌拿走了...</Chinese>
<Chinesesimp>已经有人把他的兵籍牌拿走了...</Chinesesimp>
</Key>
<Key ID="STR_ACE_Dogtags_IGUI_Description">
<English>Onscreen display for checking dogtags</English>
<Chinese>在畫面中顯示檢查兵籍牌</Chinese>
</Key>
</Package>
</Project>

Binary file not shown.

View File

@ -30,7 +30,7 @@ class CfgVehicles {
GVAR(dragDirection) = 0;
};
// Big 1.70 Autonomous AA Turrets
// Big 1.70 and 1.84 Autonomous AA Turrets
class StaticMGWeapon;
class AAA_System_01_base_F: StaticMGWeapon { // Praetorian 1C (aka Phalanx CIWS)
GVAR(canCarry) = 0;
@ -44,6 +44,30 @@ class CfgVehicles {
GVAR(canCarry) = 0;
GVAR(canDrag) = 0;
};
class SAM_System_03_base_F: StaticMGWeapon { // MIM-145 Defender
GVAR(canCarry) = 0;
GVAR(canDrag) = 0;
};
class SAM_System_04_base_F: StaticMGWeapon { // S-750 Rhea
GVAR(canCarry) = 0;
GVAR(canDrag) = 0;
};
class B_Ship_Gun_01_base_F: StaticMGWeapon { // Mk45 Hammer
GVAR(canCarry) = 0;
GVAR(canDrag) = 0;
};
class B_Ship_MRLS_01_base_F: StaticMGWeapon { // Mk41 VLS
GVAR(canCarry) = 0;
GVAR(canDrag) = 0;
};
class Radar_System_01_base_F: StaticMGWeapon { // AN/MPQ-105 Radar
GVAR(canCarry) = 0;
GVAR(canDrag) = 0;
};
class Radar_System_02_base_F: StaticMGWeapon { // R-750 Cronus Radar
GVAR(canCarry) = 0;
GVAR(canDrag) = 0;
};
// ammo boxes
class ThingX;

View File

@ -15,10 +15,6 @@ class CfgAmmo {
class APERSMine_Range_Ammo: MineBase;
class ATMine_Range_Ammo: MineBase;
class UnderwaterMine_Range_Ammo: MineBase;
class UnderwaterMineAB_Range_Ammo: UnderwaterMine_Range_Ammo;
class UnderwaterMinePDM_Range_Ammo: UnderwaterMine_Range_Ammo;
class DirectionalBombCore: TimeBombCore;
class DirectionalBombBase: DirectionalBombCore;
@ -183,4 +179,8 @@ class CfgAmmo {
GVAR(size) = 0;
GVAR(defuseObjectPosition)[] = {0, 0, 0.15};
};
class MineBase;
class UnderwaterMine_Range_Ammo: MineBase {
GVAR(size) = 1;
};
};

View File

@ -11,10 +11,8 @@ class CfgVehicles {
statement = "";
exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"};
showDisabled = 1;
priority = 4;
icon = QPATHTOF(UI\Explosives_Menu_ca.paa);
insertChildren = QUOTE([_player] call FUNC(addTransmitterActions););
//Sub-menu items
class ACE_Place {
displayName = CSTRING(Place);
condition = QUOTE((vehicle _player == _player) and {[_player] call FUNC(hasExplosives)});
@ -23,7 +21,6 @@ class CfgVehicles {
exceptions[] = {"isNotSwimming"};
showDisabled = 1;
icon = QPATHTOF(UI\Place_Explosive_ca.paa);
priority = 1;
};
class ACE_Cellphone {
displayName = CSTRING(cellphone_displayName);
@ -32,7 +29,6 @@ class CfgVehicles {
exceptions[] = {"isNotSwimming", "isNotInside", "isNotSitting"};
showDisabled = 0;
icon = QPATHTOF(Data\UI\Cellphone_UI.paa);
priority = 0.8;
};
};
};
@ -95,7 +91,6 @@ class CfgVehicles {
insertChildren = QUOTE([ARR_3(_target getVariable QUOTE(QGVAR(class)),_target,_player)] call FUNC(addTriggerActions););
showDisabled = 0;
exceptions[] = {"isNotSwimming"};
priority = 5;
icon = QPATHTOF(UI\Explosives_Menu_ca.paa);
};
class ACE_PickUp {
@ -105,7 +100,6 @@ class CfgVehicles {
statement = QUOTE([ARR_2(_player,_target getVariable QUOTE(QGVAR(class)))] call EFUNC(common,addToInventory);deleteVehicle _target;);
showDisabled = 0;
exceptions[] = {"isNotSwimming"};
priority = 5;
icon = "\A3\ui_f\data\IGUI\Cfg\Actions\Obsolete\ui_action_takemine_ca.paa";
};
};

View File

@ -31,6 +31,9 @@ class CfgPatches {
class CfgActions {
class None;
class ActivateMine: None {
show = 0;
};
class Deactivate:None {
show = 0;
};

View File

@ -1,10 +1,10 @@
/*
* Author: PabstMirror
* When interact_menu starts rendering (from "interact_keyDown" event)
* Add defuse helpers to all nearby mines
* Author: PabstMirror, mharis001
* Dynamically adds "Defuse" actions to nearby mines when interact_menu is opened.
* Called by the "ace_interactMenuOpened" event.
*
* Arguments:
* Interact Menu Type (0 - world, 1 - self) <NUMBER>
* Interact Menu Type (0 - World, 1 - Self) <NUMBER>
*
* Return Value:
* None
@ -12,61 +12,62 @@
* Example:
* [0] call ace_explosives_fnc_interactEH
*
* Public: Yes
* Public: No
*/
#include "script_component.hpp"
params ["_interactionType"];
TRACE_1("params",_interactionType);
TRACE_1("Explosives interactEH",_interactionType);
//Ignore self-interaction menu
if (_interactionType != 0) exitWith {};
//Ignore while mounted:
if ((vehicle ACE_player) != ACE_player) exitWith {};
//Ignore if we don't have defuse kit
if (!("ACE_DefusalKit" in (items ACE_player))) exitWith {};
// Ignore self-interaction menu or mounted vehicle interaction
// For performance reasons only add PFH if player has a defusal kit
// If player somehow gets a defusal kit during keyDown, they will just have to reopen menu
if (
_interactionType != 0
|| {vehicle ACE_player != ACE_player}
|| {!("ACE_DefusalKit" in ([ACE_player, false, true, true, true, false] call CBA_fnc_uniqueUnitItems))}
) exitWith {};
[{
params ["_args", "_pfID"];
_args params ["_setPosition", "_addedDefuseHelpers", "_minesHelped"];
BEGIN_COUNTER(interactEH);
params ["_args", "_pfhID"];
_args params ["_setPosition", "_addedHelpers", "_minesHelped"];
if (!EGVAR(interact_menu,keyDown)) then {
TRACE_1("Cleaning Defuse Helpers",(count _addedDefuseHelpers));
{deleteVehicle _x;} forEach _addedDefuseHelpers;
[_pfID] call CBA_fnc_removePerFrameHandler;
TRACE_1("Cleaning defuse helpers",count _addedHelpers);
{deleteVehicle _x} forEach _addedHelpers;
[_pfhID] call CBA_fnc_removePerFrameHandler;
} else {
// Prevent Rare Error when ending mission with interact key down:
if (isNull ace_player) exitWith {};
private _player = ACE_player;
if (isNull _player) exitWith {};
private _playerPos = getPosASL _player;
//If player moved >5 meters from last pos, then rescan
if (((getPosASL ace_player) distance _setPosition) > 5) then {
// Rescan if player has moved more than 5 meters from last position
if (_playerPos distanceSqr _setPosition > 25) then {
private _cfgAmmo = configFile >> "CfgAmmo";
{
if (((_x distance ACE_player) < 15) && {!(_x in _minesHelped)} && {(getModelInfo _x) select 0 != "empty.p3d"}) then {
private _config = configFile >> "CfgAmmo" >> typeOf _x;
if (_x distanceSqr _player < 225 && {!(_x in _minesHelped)} && {!(getModelInfo _x select 0 isEqualTo "empty.p3d")}) then {
private _config = _cfgAmmo >> typeOf _x;
private _size = getNumber (_config >> QGVAR(size));
TRACE_3("Making Defuse Helper",(_x),(typeOf _x),(_size == 1));
private _defuseHelper = objNull;
if (_size == 1) then {
_defuseHelper = "ACE_DefuseObject_Large" createVehicleLocal (getPos _x);
} else {
_defuseHelper = "ACE_DefuseObject" createVehicleLocal (getPos _x);
private _defuseClass = ["ACE_DefuseObject", "ACE_DefuseObject_Large"] select (_size == 1);
private _defusePos = getArray (_config >> QGVAR(defuseObjectPosition));
if (_defusePos isEqualTo []) then {
_defusePos = [0, 0, 0];
};
private _defuseObjectPosition = getArray (_config >> QGVAR(defuseObjectPosition));
if (_defuseObjectPosition isEqualTo []) then {
_defuseObjectPosition = [0,0,0];
};
TRACE_4("Creating defuse helper",_x,typeOf _x,_defuseClass,_defusePos);
private _helper = _defuseClass createVehicleLocal [0, 0, 0];
TRACE_1("DefuseObjectPosition",(_defuseObjectPosition));
_defuseHelper attachTo [_x, _defuseObjectPosition];
_defuseHelper setVariable [QGVAR(Explosive),_x];
_addedDefuseHelpers pushBack _defuseHelper;
_helper attachTo [_x, _defusePos];
_helper setVariable [QGVAR(Explosive), _x];
_addedHelpers pushBack _helper;
_minesHelped pushBack _x;
};
} forEach allMines;
_args set [0, (getPosASL ace_player)];
_args set [0, _playerPos];
};
};
}, 0.5, [((getPosASL ace_player) vectorAdd [-100,0,0]), [], []]] call CBA_fnc_addPerFrameHandler;
END_COUNTER(interactEH);
}, 0.5, [getPosASL ACE_player vectorAdd [-100, 0, 0], [], []]] call CBA_fnc_addPerFrameHandler;

View File

@ -21,10 +21,10 @@ TRACE_1("params",_unit);
if (_unit == ace_player) then {
// close cellphone if open
closeDialog 0;
findDisplay 8855 closeDisplay 0;
};
// Exit if no item:
// Exit if no item
if (({_x == "ACE_DeadManSwitch"} count (items _unit)) == 0) exitWith {};
private _range = getNumber (configFile >> "CfgWeapons" >> "ACE_DeadManSwitch" >> QGVAR(range));

View File

@ -196,7 +196,7 @@ GVAR(TweakedAngle) = 0;
//Show the model on the hud in aprox the same size/location as it will be placed:
((uiNamespace getVariable [QGVAR(virtualAmmoDisplay), displayNull]) displayCtrl 800851) ctrlShow true;
private _realDistance = ((_virtualPosASL call EFUNC(common,ASLToPosition)) distance (positionCameraToWorld [0,0,0])) / ((call CBA_fnc_getFov) select 1);
private _realDistance = ((_virtualPosASL call EFUNC(common,ASLToPosition)) distance (positionCameraToWorld [0,0,0])) / (([] call CBA_fnc_getFov) select 1);
_screenPos = [(_screenPos select 0), _realDistance, (_screenPos select 1)];
((uiNamespace getVariable [QGVAR(virtualAmmoDisplay), displayNull]) displayCtrl 800851) ctrlSetPosition _screenPos;

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="Explosives">
<Key ID="STR_ACE_Explosives_Menu">
@ -1023,6 +1023,9 @@
<English>Explosive range</English>
<French>Portée du détonateur</French>
<Japanese>爆発範囲</Japanese>
<Chinesesimp>爆炸范围</Chinesesimp>
<Chinese>爆炸範圍</Chinese>
<Italian>Raggio di detonazione</Italian>
</Key>
</Package>
</Project>

View File

@ -43,35 +43,30 @@ class CfgVehicles {
condition = QUOTE([vehicle _player] call FUNC(canPrepareFRIES));
statement = QUOTE([vehicle _player] call FUNC(prepareFRIES));
showDisabled = 0;
priority = 1;
};
class ACE_stowFRIES {
displayName = CSTRING(Interaction_stowFRIES);
condition = QUOTE([vehicle _player] call FUNC(canStowFRIES));
statement = QUOTE([vehicle _player] call FUNC(stowFRIES));
showDisabled = 0;
priority = 1;
};
class ACE_deployRopes {
displayName = CSTRING(Interaction_deployRopes);
condition = QUOTE([ARR_2(_player, vehicle _player)] call FUNC(canDeployRopes));
statement = QUOTE([ARR_2(QUOTE(QGVAR(deployRopes)), [vehicle _player])] call CBA_fnc_serverEvent);
showDisabled = 0;
priority = 1;
};
class ACE_cutRopes {
displayName = CSTRING(Interaction_cutRopes);
condition = [vehicle _player] call FUNC(canCutRopes);
statement = [vehicle _player] call FUNC(cutRopes);
showDisabled = 0;
priority = 1;
};
class ACE_fastRope {
displayName = CSTRING(Interaction_fastRope);
condition = [_player, vehicle _player] call FUNC(canFastRope);
statement = [_player, vehicle _player] call FUNC(fastRope);
showDisabled = 0;
priority = 1;
};
};
};
@ -84,6 +79,10 @@ class CfgVehicles {
class ACE_SelfActions {};
EGVAR(cargo,hasCargo) = 0;
EGVAR(cargo,space) = 0;
// ACRE 2.6.0 Compatibility
acre_hasInfantryPhone = 0;
class AcreRacks {};
class AcreIntercoms {};
};
class ACE_friesAnchorBar: ACE_friesBase {
author = "jokoho48";
@ -165,6 +164,10 @@ class CfgVehicles {
class TransportItems {};
EGVAR(cargo,hasCargo) = 0;
EGVAR(cargo,space) = 0;
// ACRE 2.6.0 Compatibility
acre_hasInfantryPhone = 0;
class AcreRacks {};
class AcreIntercoms {};
};
class Helicopter_Base_H;

View File

@ -29,7 +29,6 @@ class CfgVehicles {
condition = QUOTE(_player call FUNC(canResetFCS));
statement = QUOTE([ARR_2(vehicle _player,[_player] call DEFUNC(common,getTurretIndex))] call DFUNC(reset););
showDisabled = 0;
priority = 1;
icon = "";
};
};
@ -42,7 +41,6 @@ class CfgVehicles {
condition = QUOTE(_player call FUNC(canResetFCS));
statement = QUOTE([ARR_2(vehicle _player,[_player] call DEFUNC(common,getTurretIndex))] call DFUNC(reset););
showDisabled = 0;
priority = 1;
icon = "";
};
};

View File

@ -48,7 +48,7 @@ private _nearbyMen = (ACE_player nearObjects ["CAManBase", (GVAR(maxRange) + 2)]
{alive _x} &&
{(_x == (vehicle _x)) || {(vehicle _x) isKindOf "StaticWeapon"}} &&
{GVAR(indicatorForSelf) || {_x != ACE_player}} &&
{!(lineIntersects [(eyePos _x), _playerEyePosASL, ACE_player, _x])} &&
{!(lineIntersects [(eyePos _x), _playerEyePosASL, vehicle ACE_player, vehicle _x])} &&
{[_x] call EFUNC(common,isPlayer)}) then {
_sendFingerToPlayers pushBack _x;

View File

@ -6,7 +6,7 @@
<German>Fingerzeig</German>
<Italian>Puntamento</Italian>
<Chinese>指向指示器</Chinese>
<Chinesesimp>指向指示</Chinesesimp>
<Chinesesimp>指向标记</Chinesesimp>
<Japanese>指差し</Japanese>
<Korean>가리키기</Korean>
</Key>
@ -23,7 +23,7 @@
<Italian>Mostra puntatore per te stesso</Italian>
<Japanese>自分に指差し表記を表示する</Japanese>
<Korean>자신이 가리키는곳을 보여줍니다</Korean>
<Chinesesimp>显示指向指示器给自己</Chinesesimp>
<Chinesesimp>在自己身边显示指向标记</Chinesesimp>
<Chinese>顯示指向指示器給自己</Chinese>
</Key>
<Key ID="STR_ACE_finger_indicatorForSelf_description">
@ -39,7 +39,7 @@
<Italian>Mostra puntatore per il giocatore indicato. Questa opzione non influisce la possibilità che gli altri giocatori vedano il puntatore</Italian>
<Japanese>プレイヤーへ指差し表記を描画します。これは他のプレイヤーの表記に影響しません。</Japanese>
<Korean>대상이 가리키는곳을 보이게 합니다.</Korean>
<Chinesesimp>显示指向指示器给玩家自己。此选项设定并不影响其他玩家能否看到指示器</Chinesesimp>
<Chinesesimp>显示指向标记给玩家自己。此选项设定并不影响其他玩家能否看到指示标记</Chinesesimp>
<Chinese>顯示指向指示器給玩家自己。此選項設定並不影響其他玩家能否看到指示器</Chinese>
</Key>
<Key ID="STR_ACE_finger_indicatorColor_name">
@ -55,7 +55,7 @@
<Italian>Indicatore di puntamento</Italian>
<Japanese>指差し表記</Japanese>
<Korean>가리키기 표시기</Korean>
<Chinesesimp>指向指示器</Chinesesimp>
<Chinesesimp>指向标记</Chinesesimp>
<Chinese>指向指示器</Chinese>
</Key>
<Key ID="STR_ACE_finger_indicatorColor_description">
@ -71,7 +71,7 @@
<Italian>Colore del cerchio dell'indicatore di puntamento</Italian>
<Japanese>指差し表記の円の色</Japanese>
<Korean>가리키기의 원형 색상</Korean>
<Chinesesimp>指向指示器颜色</Chinesesimp>
<Chinesesimp>指向标记颜色</Chinesesimp>
<Chinese>指向指示器顏色</Chinese>
</Key>
<Key ID="STR_ACE_finger_keyComb">
@ -151,7 +151,7 @@
<Italian>Raggio massimo puntamento</Italian>
<Japanese>指差しの最大範囲</Japanese>
<Korean>가리키기 최대 범위</Korean>
<Chinesesimp>指向指示器最大显示距离</Chinesesimp>
<Chinesesimp>指向标记最大显示距离</Chinesesimp>
<Chinese>指向指示器最大顯示距離</Chinese>
</Key>
<Key ID="STR_ACE_finger_maxRange_description">
@ -167,7 +167,7 @@
<Italian>Distanza massima tra giocatori per mostrare l'indicatore di puntamento [default: 4 metri]</Italian>
<Japanese>指差し表記が他のプレイヤーに表示される範囲を決定できます。(標準 4 メートル)</Japanese>
<Korean>플레이어 사이에서 가리키기 표시를 보이게 하는 최대거리를 설정합니다[기본설정: 4 미터]</Korean>
<Chinesesimp>设定指向指示器最大显示距离。[预设: 4公尺]</Chinesesimp>
<Chinesesimp>设定指向标记最大显示距离。[预设: 4公尺]</Chinesesimp>
<Chinese>設定指向指示器最大顯示距離。[預設: 4公尺]</Chinese>
</Key>
</Package>

View File

@ -13,7 +13,7 @@
<French>Fulton MX-991</French>
<Japanese>フルトン MX-991</Japanese>
<Korean>Fulton MX-991</Korean>
<Chinesesimp>Fulton MX-991</Chinesesimp>
<Chinesesimp>Fulton MX-991手电筒</Chinesesimp>
<Chinese>Fulton MX-991</Chinese>
</Key>
<Key ID="STR_ACE_Flashlights_MX991_Description">
@ -43,7 +43,7 @@
<French>Maglite XL50</French>
<Japanese>マグライト XL50</Japanese>
<Korean>Maglite XL50</Korean>
<Chinesesimp>Maglite XL50</Chinesesimp>
<Chinesesimp>Maglite XL50手电筒</Chinesesimp>
<Chinese>Maglite XL50</Chinese>
</Key>
<Key ID="STR_ACE_Flashlights_XL50_Description">
@ -73,7 +73,7 @@
<French>KSF-1</French>
<Japanese>KSF-1</Japanese>
<Korean>KSF-1</Korean>
<Chinesesimp>KSF-1</Chinesesimp>
<Chinesesimp>KSF-1手电筒</Chinesesimp>
<Chinese>KSF-1</Chinese>
</Key>
<Key ID="STR_ACE_Flashlights_KSF1_Description">
@ -95,6 +95,9 @@
<English>Map light color</English>
<French>Couleur de la lampe sur carte</French>
<Japanese>光の色</Japanese>
<Chinesesimp>地图上手电的颜色</Chinesesimp>
<Chinese>地圖上使用手電筒的顏色</Chinese>
<Italian>Colore della luce sulla mappa</Italian>
</Key>
</Package>
</Project>

View File

@ -134,16 +134,6 @@ class CfgAmmo {
GVAR(gurney_c) = 2700;
GVAR(gurney_k) = 1/2;
};
class ACE_Hellfire_AGM114K: M_PG_AT {
// Source: http://www.designation-systems.net/dusrm/m-114.html
GVAR(enabled) = 1;
GVAR(classes)[] = {QGVAR(medium), QGVAR(medium_HD)};
GVAR(metal) = 8000;
GVAR(charge) = 2400;
GVAR(gurney_c) = 2700;
GVAR(gurney_k) = 1/2;
};
class RocketBase;
class R_80mm_HE: RocketBase {
GVAR(skip) = 1;
@ -174,6 +164,16 @@ class CfgAmmo {
GVAR(gurney_c) = 2700;
GVAR(gurney_k) = 1/2;
};
class ACE_Hellfire_AGM114K: M_Scalpel_AT {
// Source: http://www.designation-systems.net/dusrm/m-114.html
GVAR(enabled) = 1;
GVAR(classes)[] = {QGVAR(medium), QGVAR(medium_HD)};
GVAR(metal) = 8000;
GVAR(charge) = 2400;
GVAR(gurney_c) = 2700;
GVAR(gurney_k) = 1/2;
};
class M_Air_AA: MissileBase {
GVAR(skip) = 1;
};

View File

@ -122,7 +122,7 @@
<Italian>Numero massimo di Proiettili Tracciati</Italian>
<Japanese>最大弾頭追跡数</Japanese>
<Korean>최대 발사체 추적수</Korean>
<Chinesesimp>最大碎片/剥落粒子追踪数量</Chinesesimp>
<Chinesesimp>最大碎片粒子追踪数量</Chinesesimp>
<Chinese>最大碎片/剝落粒子追蹤數量</Chinese>
</Key>
<Key ID="STR_ACE_Frag_MaxTrack_Desc">
@ -138,7 +138,7 @@
<Italian>Questo parametro controlla il numero massimo di proiettili che la frammentazione e il sistema di spalling tracciano in ogni momento. Se più proiettili sono sparati, non verranno tracciati. Abbassa questo parametro se non vuoi cali di FPS in scenari con molti proiettili (&gt;200 proiettili in aria contemporaneamente)</Italian>
<Japanese>時間が許すかぎり、破片と剥離システムの最大数を設定できます。設定数以上の弾丸が発射された場合、それは対象になりません。もし多い弾数による FPS の低下を望まない場合は、低い数へ設定にします。( &amp;gt;一度に空中内で200発)</Japanese>
<Korean>이 설정은 조각 및 파편 시스템으로 인해 생긴 발사체의 수를 결정합니다. 만약 더 많은 발사체가 나올경우 정해진 수 이외에는 추적하지 않습니다. 이 설정을 낮춤으로써 파편이 많은 시나리오를 실행할때 더욱 원활히 진행할 수 있습니다 (한 번에 200개 이하) </Korean>
<Chinesesimp>设定在指定时间内,系统最大可追踪的碎片/剥落粒子数量。如有更多的碎片在这之后产生,这些粒子将不会被追踪。如果你想要维持好的帧数,此设定勿调的过高。( &gt;一次200颗粒子)</Chinesesimp>
<Chinesesimp>设定在指定时间内,系统最大可追踪的碎片粒子数量。如有更多的碎片在这之后产生,这些粒子将不会被追踪。如果你想要维持好的帧数,此设定勿调的过高。( &gt;一次200颗粒子)</Chinesesimp>
<Chinese>設定在指定時間內,系統最大可追蹤的碎片/剝落粒子數量。如有更多的碎片在這之後產生,這些粒子將不會被追蹤。如果你想要維持好的幀數,此設定勿調的過高。( &gt;一次200顆粒子)</Chinese>
</Key>
<Key ID="STR_ACE_Frag_MaxTrackPerFrame">
@ -154,7 +154,7 @@
<Italian>Numero massimo di proiettili per Frame</Italian>
<Japanese>フレームごとの最大弾頭数</Japanese>
<Korean>프레임당 최대 발사체 수</Korean>
<Chinesesimp>每一帧数(FPS)最大碎片/剥落粒子数量</Chinesesimp>
<Chinesesimp>每一帧数(FPS)最大碎片粒子数量</Chinesesimp>
<Chinese>每一幀數(FPS)最大碎片/剝落粒子數量</Chinese>
</Key>
<Key ID="STR_ACE_Frag_MaxTrackPerFrame_Desc">
@ -170,8 +170,8 @@
<Italian>Il numero di calcoli per tracciamento di spalling ad ogni frame. Questo aiuta a distribuire l'impatto del tracciamento dello spalling su più frame, limitando ancora di più l'impatto.</Italian>
<Japanese>与えられたフレームごとに追跡する剥離の数を決定します。FPS に影響をあたえないよう、剥離を複数のフレームで追跡し、分散させています。</Japanese>
<Korean>가능한 프레임마다 파편을 추적 및 계산합니다. 여러 프레임에 걸쳐 파편난 발사체를 추적하여 FPS에 도움을 줍니다. 이를 제한함으로써 더욱 큰 효과를 볼 수 있습니다.</Korean>
<Chinesesimp>设定在每一帧数内,系统最大可追踪的碎片/剥落粒子数量。此设定可有效帮助系统减低计算压力。</Chinesesimp>
<Chinese>設定在每一幀數內,系統最大可追蹤的碎片/剝落粒子數量。此設定可有效幫助系統減低計算壓力</Chinese>
<Chinesesimp>设定在每一帧数内,系统最大可追踪的碎片粒子数量。此设定可有效帮助系统减低计算压力。</Chinesesimp>
<Chinese>設定在每一幀數內,系統最大可追蹤的碎片/剝落粒子數量。此設定可有效幫助系統減低計算壓力</Chinese>
</Key>
<Key ID="STR_ACE_Frag_EnableDebugTrace">
<English>(SP Only) Frag/Spall Debug Tracing</English>
@ -186,7 +186,7 @@
<Italian>(Solo SP) Debug Tracciamento Frag/Spall</Italian>
<Japanese>(SP のみ) 破片/剥離のデバッグ用表示</Japanese>
<Korean>(싱글플레이 전용) 조각/파편 디버그 추적화</Korean>
<Chinesesimp>(仅在单人模式) 碎片/剥落除错追踪</Chinesesimp>
<Chinesesimp>(仅在单人模式) 追踪显示碎片粒子</Chinesesimp>
<Chinese>(僅在單人模式) 碎片/剝落除錯追蹤</Chinese>
</Key>
<Key ID="STR_ACE_Frag_EnableDebugTrace_Desc">
@ -201,8 +201,8 @@
<Russian>(Только для одиночной игры) Требует перезапуска миссии/редактора. Включает визуальные следы от осколков и обломков в режиме одиночной игры.</Russian>
<Italian>(Solo SP) Richiede un restart editor/missione. Abilita il tracciamento visivo di schegge da frammentazione/spalling in modalità Giocatore Singolo.</Italian>
<Japanese>(SP のみ) ミッションとエディタの再起動が必要です。有効化すると、シングルプレイでのみ破片と剥離の弾頭が見えるようになります。</Japanese>
<Chinesesimp>(仅在单人模式) 让你在单人模式下可观察到碎片/剥落粒子的移动轨迹。</Chinesesimp>
<Chinese>(僅在單人模式) 讓你在單人模式下可觀察到碎片/剝落粒子的移動軌跡</Chinese>
<Chinesesimp>(仅在单人模式) 激活后,只有在单人模式下才可观察到碎片粒子的移动轨迹。</Chinesesimp>
<Chinese>(僅在單人模式) 讓你在單人模式下可觀察到碎片/剝落粒子的移動軌跡</Chinese>
<Korean>(SP 전용) 임무 / 편집자가 다시 시작해야합니다. SP 게임 모드에서만 조각화 및 스 폴링 라운드의 시각적 추적을 가능하게합니다.</Korean>
</Key>
</Package>

View File

@ -8,16 +8,13 @@ class CfgVehicles {
statement = "";
exceptions[] = {"isNotSwimming"};
showDisabled = 1;
priority = 3.5;
icon = QPATHTOF(UI\gestures_ca.paa);
class GVAR(Advance) {
displayName = CSTRING(Advance);
condition = QUOTE(true);
statement = QUOTE([ARR_2(_target,'gestureAdvance')] call EFUNC(common,doGesture));
//exceptions[] = {"isNotSwimming"}; // Does not work underwaterexceptions[] = {"isNotSwimming"};
showDisabled = 1;
priority = 1.9;
};
class GVAR(Go) {
displayName = CSTRING(Go);
@ -25,7 +22,6 @@ class CfgVehicles {
statement = QUOTE([ARR_2(_target,selectRandom [ARR_2('gestureGo','gestureGoB')])] call EFUNC(common,doGesture));
//exceptions[] = {"isNotSwimming"}; // Does not work underwater
showDisabled = 1;
priority = 1.8;
};
class GVAR(Follow) {
displayName = CSTRING(Follow);
@ -33,7 +29,6 @@ class CfgVehicles {
statement = QUOTE([ARR_2(_target,'gestureFollow')] call EFUNC(common,doGesture));
//exceptions[] = {"isNotSwimming"}; // Does not work underwater
showDisabled = 1;
priority = 1.7;
};
class GVAR(Up) {
displayName = CSTRING(Up);
@ -41,7 +36,6 @@ class CfgVehicles {
statement = QUOTE([ARR_2(_target,'gestureUp')] call EFUNC(common,doGesture));
//exceptions[] = {"isNotSwimming"}; // Does not work underwater
showDisabled = 1;
priority = 1.5;
};
class GVAR(CeaseFire) {
displayName = CSTRING(CeaseFire);
@ -49,7 +43,6 @@ class CfgVehicles {
statement = QUOTE([ARR_2(_target,'gestureCeaseFire')] call EFUNC(common,doGesture));
//exceptions[] = {"isNotSwimming"}; // Does not work underwater
showDisabled = 1;
priority = 1.3;
};
class GVAR(Stop) {
displayName = CSTRING(Stop);
@ -57,7 +50,6 @@ class CfgVehicles {
statement = QUOTE([ARR_2(_target,'gestureFreeze')] call EFUNC(common,doGesture)); // BI animation - is actually "stop" in all stances but prone
//exceptions[] = {"isNotSwimming"}; // Does not work underwater
showDisabled = 1;
priority = 1.2;
};
class GVAR(Forward) {
displayName = CSTRING(Forward);
@ -65,7 +57,6 @@ class CfgVehicles {
statement = QUOTE(QUOTE(QGVAR(forward)) call FUNC(playSignal));
exceptions[] = {"isNotSwimming"};
showDisabled = 1;
priority = 1.9;
};
class GVAR(Regroup) {
displayName = CSTRING(Regroup);
@ -73,7 +64,6 @@ class CfgVehicles {
statement = QUOTE(QUOTE(QGVAR(regroup)) call FUNC(playSignal));
exceptions[] = {"isNotSwimming"};
showDisabled = 1;
priority = 1.8;
};
class GVAR(Freeze) {
displayName = CSTRING(Freeze);
@ -81,7 +71,6 @@ class CfgVehicles {
statement = QUOTE(QUOTE(QGVAR(freeze)) call FUNC(playSignal));
exceptions[] = {"isNotSwimming"};
showDisabled = 1;
priority = 1.7;
};
class GVAR(Cover) {
displayName = CSTRING(Cover);
@ -89,7 +78,6 @@ class CfgVehicles {
statement = QUOTE(QUOTE(QGVAR(cover)) call FUNC(playSignal));
exceptions[] = {"isNotSwimming"};
showDisabled = 1;
priority = 1.6;
};
class GVAR(Point) {
displayName = CSTRING(Point);
@ -97,7 +85,6 @@ class CfgVehicles {
statement = QUOTE(QUOTE(QGVAR(point)) call FUNC(playSignal));
exceptions[] = {"isNotSwimming"};
showDisabled = 1;
priority = 1.5;
};
class GVAR(Engage) {
displayName = CSTRING(Engage);
@ -105,7 +92,6 @@ class CfgVehicles {
statement = QUOTE(QUOTE(QGVAR(engage)) call FUNC(playSignal));
exceptions[] = {"isNotSwimming"};
showDisabled = 1;
priority = 1.4;
};
class GVAR(Hold) {
displayName = CSTRING(Hold);
@ -113,7 +99,6 @@ class CfgVehicles {
statement = QUOTE(QUOTE(QGVAR(hold)) call FUNC(playSignal));
exceptions[] = {"isNotSwimming"};
showDisabled = 1;
priority = 1.3;
};
class GVAR(Warning) {
displayName = CSTRING(Warning);
@ -121,7 +106,6 @@ class CfgVehicles {
statement = QUOTE(QUOTE(QGVAR(warning)) call FUNC(playSignal));
exceptions[] = {"isNotSwimming"};
showDisabled = 1;
priority = 1.2;
};
};
};

View File

@ -7,9 +7,15 @@ class CfgWeapons {
class U_B_PilotCoveralls: Uniform_Base {
ACE_GForceCoef = 0.8;
};
class U_B_HeliPilotCoveralls: Uniform_Base {
ACE_GForceCoef = 0.8;
};
class U_I_pilotCoveralls: Uniform_Base {
ACE_GForceCoef = 0.8;
};
class U_I_HeliPilotCoveralls: Uniform_Base {
ACE_GForceCoef = 0.8;
};
class U_O_PilotCoveralls: Uniform_Base {
ACE_GForceCoef = 0.8;
};

View File

@ -35,6 +35,9 @@
<English>G-force reduction</English>
<French>Reduction des Gs</French>
<Japanese>耐 G 性</Japanese>
<Chinesesimp>减少G力</Chinesesimp>
<Chinese>減少G力</Chinese>
<Italian>Riduzione forza G</Italian>
</Key>
</Package>
</Project>

View File

@ -143,7 +143,7 @@
<Japanese>フラッシュバンとも知られています。即時に失明と難聴、耳鳴り、内耳障害を引き起こします。</Japanese>
<Korean>플래시뱅이라고도 알려져있습니다. 사용즉시 섬광으로 인한 시력장애, 청각장애, 이명, 내이기관방해를 유발합니다.</Korean>
<Chinesesimp>也被称为闪光弹,会造成暂时性失明,耳聋,耳鸣等效果。</Chinesesimp>
<Chinese>也被稱為閃光彈,會造成暫時性失明,耳聾,耳鳴等效果</Chinese>
<Chinese>也被稱為閃光彈,會造成暫時性失明,耳聾,耳鳴等效果</Chinese>
</Key>
<Key ID="STR_ACE_Grenades_M127A1_White_Name">
<English>M127A1 Hand Held Signal (White)</English>
@ -371,7 +371,7 @@
<French>Grenade incendiaire utilisé pour détruire des armes, munitions et autres équipements.</French>
<Italian>Granata incendiaria usata per distruggere armi, munizioni e altri equipaggiamenti.</Italian>
<Chinesesimp>燃烧手榴弹是用来摧毁武器,弹药以及其他装备的好帮手。</Chinesesimp>
<Chinese>燃燒手榴彈是用來摧毀武器,彈藥以及其他裝備的好幫手</Chinese>
<Chinese>燃燒手榴彈是用來摧毀武器,彈藥以及其他裝備的好幫手</Chinese>
</Key>
</Package>
</Project>

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