diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 28549dd503..a333dc08fe 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -3,8 +3,10 @@ **ACE3 Version:** `3.x.x` (stable / dev + commit hash) **Mods:** -- `@CBA_A3` -- `@ace` +``` +- CBA_A3 +- ace +``` **Description:** - Add a detailed description of the error. This makes it easier for us to fix the issue. diff --git a/AUTHORS.txt b/AUTHORS.txt index dcf94277cc..43e1eeb21e 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -1,4 +1,4 @@ -# ACE3 CONTRIBUTOR LIST +# ACE3 CONTRIBUTOR LIST # If you contributed, but are not listed here, contact me: # koffeinflummi@gmail.com # @@ -38,6 +38,7 @@ Aggr094 alef Aleksey EpMAK Yermakov Alganthe +Andrea "AtixNeon" Verano Anthariel Arkhir Asgar Serran @@ -83,6 +84,7 @@ Harakhti havena Hawkins Head +Hybrid V Karneck Kavinsky Kllrt @@ -102,6 +104,7 @@ nomisum OnkelDisMaster oscarmolinadev PaxJaromeMalues +Phyma pokertour Professor rakowozz diff --git a/README.md b/README.md index 4e78a5aaf3..747d01bb42 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

- ACE3 Version + ACE3 Version ACE3 Issues diff --git a/ace_advanced_ballistics.dll b/ace_advanced_ballistics.dll index 09b93a543f..7b1d952b12 100644 Binary files a/ace_advanced_ballistics.dll and b/ace_advanced_ballistics.dll differ diff --git a/ace_advanced_ballistics_x64.dll b/ace_advanced_ballistics_x64.dll index e2dae5caab..d50c374fc7 100644 Binary files a/ace_advanced_ballistics_x64.dll and b/ace_advanced_ballistics_x64.dll differ diff --git a/addons/advanced_ballistics/functions/fnc_calculateAmmoTemperatureVelocityShift.sqf b/addons/advanced_ballistics/functions/fnc_calculateAmmoTemperatureVelocityShift.sqf index 19cd55c98e..fd086d65d1 100644 --- a/addons/advanced_ballistics/functions/fnc_calculateAmmoTemperatureVelocityShift.sqf +++ b/addons/advanced_ballistics/functions/fnc_calculateAmmoTemperatureVelocityShift.sqf @@ -10,6 +10,9 @@ * Return Value: * muzzle velocity shift - m/s * + * Example: + * [[], 5] call ace_advanced_ballistics_fnc_calcilateAmmoTemperatureVelocityShift + * * Public: No */ #include "script_component.hpp" diff --git a/addons/advanced_ballistics/functions/fnc_calculateAtmosphericCorrection.sqf b/addons/advanced_ballistics/functions/fnc_calculateAtmosphericCorrection.sqf index 2b90767a4f..326de5478e 100644 --- a/addons/advanced_ballistics/functions/fnc_calculateAtmosphericCorrection.sqf +++ b/addons/advanced_ballistics/functions/fnc_calculateAtmosphericCorrection.sqf @@ -13,6 +13,9 @@ * Return Value: * corrected ballistic coefficient * + * Example: + * [2, 5, 5, 0.5, "ASM"] call ace_advanced_ballistics_fnc_calculateAtmosphericCorrection + * * Public: No */ #include "script_component.hpp" diff --git a/addons/advanced_ballistics/functions/fnc_calculateBarrelLengthVelocityShift.sqf b/addons/advanced_ballistics/functions/fnc_calculateBarrelLengthVelocityShift.sqf index 1f8a7e6eb9..98912b96e7 100644 --- a/addons/advanced_ballistics/functions/fnc_calculateBarrelLengthVelocityShift.sqf +++ b/addons/advanced_ballistics/functions/fnc_calculateBarrelLengthVelocityShift.sqf @@ -4,7 +4,7 @@ * Calculates the muzzle velocity shift caused by different barrel lengths * * Arguments: - * 0: barrel length - mm + * 0: barrel length - mm * 1: muzzle velocity lookup table - m/s * 2: barrel length lookup table - mm * 3: muzzle velocity - m/s @@ -12,6 +12,9 @@ * Return Value: * muzzle velocity shift - m/s * + * Example: + * [5, [0,5], [0,5], 5] call ace_advanced_ballistics_fnc_calculateBarrelLengthVelocityShift + * * Public: No */ #include "script_component.hpp" diff --git a/addons/advanced_ballistics/functions/fnc_calculateRetardation.sqf b/addons/advanced_ballistics/functions/fnc_calculateRetardation.sqf index 0bd801c6b9..1c7cadd3f0 100644 --- a/addons/advanced_ballistics/functions/fnc_calculateRetardation.sqf +++ b/addons/advanced_ballistics/functions/fnc_calculateRetardation.sqf @@ -11,6 +11,9 @@ * Return Value: * retardation - m/(s^2) * + * Example: + * [5, 20, 10] call ace_advanced_ballistics_fnc_calculateRetardation + * * Public: No */ #include "script_component.hpp" diff --git a/addons/advanced_ballistics/functions/fnc_calculateStabilityFactor.sqf b/addons/advanced_ballistics/functions/fnc_calculateStabilityFactor.sqf index 07fc7c67c9..8af9f77930 100644 --- a/addons/advanced_ballistics/functions/fnc_calculateStabilityFactor.sqf +++ b/addons/advanced_ballistics/functions/fnc_calculateStabilityFactor.sqf @@ -15,6 +15,9 @@ * Return Value: * stability factor * + * Example: + * [1, 2, 3, 4, 5, 6, 7] call ace_advanced_ballistics_fnc_calculateStabilityFactor + * * Public: No */ #include "script_component.hpp" diff --git a/addons/advanced_ballistics/functions/fnc_diagnoseWeapons.sqf b/addons/advanced_ballistics/functions/fnc_diagnoseWeapons.sqf index 4d344e8bfe..40d065198c 100644 --- a/addons/advanced_ballistics/functions/fnc_diagnoseWeapons.sqf +++ b/addons/advanced_ballistics/functions/fnc_diagnoseWeapons.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [] call ace_advanced_ballistics_fnc_diagnoseWeapons + * * Public: No */ #define DEBUG_MODE_FULL diff --git a/addons/advanced_ballistics/functions/fnc_displayProtractor.sqf b/addons/advanced_ballistics/functions/fnc_displayProtractor.sqf index 528b3e2e97..f50dcc6887 100644 --- a/addons/advanced_ballistics/functions/fnc_displayProtractor.sqf +++ b/addons/advanced_ballistics/functions/fnc_displayProtractor.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [] call ace_advanced_ballistics_fnc_displayProtractor + * * Public: No */ #include "script_component.hpp" diff --git a/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf b/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf index 6a9c7ce243..db85efe137 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFirePFH.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [] call ace_advanced_ballistics_fnc_handleFirePFH + * * Public: No */ #include "script_component.hpp" diff --git a/addons/advanced_ballistics/functions/fnc_handleFired.sqf b/addons/advanced_ballistics/functions/fnc_handleFired.sqf index 28fe9c5680..a4f55adc3d 100644 --- a/addons/advanced_ballistics/functions/fnc_handleFired.sqf +++ b/addons/advanced_ballistics/functions/fnc_handleFired.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [] call ace_advanced_ballistics_fnc_handleFired + * * Public: No */ #include "script_component.hpp" diff --git a/addons/advanced_ballistics/functions/fnc_initModuleSettings.sqf b/addons/advanced_ballistics/functions/fnc_initModuleSettings.sqf index 4898c51c10..ced2ffbf4e 100644 --- a/addons/advanced_ballistics/functions/fnc_initModuleSettings.sqf +++ b/addons/advanced_ballistics/functions/fnc_initModuleSettings.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_advanced_ballistics_fnc_initModuleSettings + * * Public: No */ #include "script_component.hpp" diff --git a/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf b/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf index 9c226d4a44..04be6a77db 100644 --- a/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf +++ b/addons/advanced_ballistics/functions/fnc_initializeTerrainExtension.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [] call ace_advanced_ballistics_fnc_initializeTerrainExtension + * * Public: No */ #include "script_component.hpp" diff --git a/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf b/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf index 160b6ddd06..9971c99d85 100644 --- a/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf +++ b/addons/advanced_ballistics/functions/fnc_readAmmoDataFromConfig.sqf @@ -7,18 +7,21 @@ * ammo - classname * * Return Value: - * 0: _airFriction - * 1: _caliber - * 2: _bulletLength - * 3: _bulletMass - * 4: _transonicStabilityCoef - * 5: _dragModel - * 6: _ballisticCoefficients - * 7: _velocityBoundaries - * 8: _atmosphereModel - * 9: _ammoTempMuzzleVelocityShifts - * 10: _muzzleVelocityTable - * 11: _barrelLengthTable + * 0: _airFriction + * 1: _caliber + * 2: _bulletLength + * 3: _bulletMass + * 4: _transonicStabilityCoef + * 5: _dragModel + * 6: _ballisticCoefficients + * 7: _velocityBoundaries + * 8: _atmosphereModel + * 9: _ammoTempMuzzleVelocityShifts + * 10: _muzzleVelocityTable + * 11: _barrelLengthTable + * + * Example: + * ["ammo"] call ace_advanced_ballistics_fnc_readAmmoDataFromConfig * * Public: No */ @@ -26,7 +29,7 @@ TRACE_1("Reading Ammo Config",_this); private ["_ammo", "_airFriction", "_caliber", "_bulletLength", "_bulletMass", "_transonicStabilityCoef", "_dragModel", "_ballisticCoefficients", "_velocityBoundaries", "_atmosphereModel", "_ammoTempMuzzleVelocityShifts", "_muzzleVelocityTable", "_barrelLengthTable", "_result"]; -_ammoConfig = configFile >> "CfgAmmo" >> _this; +private _ammoConfig = configFile >> "CfgAmmo" >> _this; _airFriction = getNumber(_ammoConfig >> "airFriction"); _caliber = getNumber(_ammoConfig >> "ACE_caliber"); diff --git a/addons/advanced_ballistics/functions/fnc_readWeaponDataFromConfig.sqf b/addons/advanced_ballistics/functions/fnc_readWeaponDataFromConfig.sqf index 7c97e10bda..af31a67fca 100644 --- a/addons/advanced_ballistics/functions/fnc_readWeaponDataFromConfig.sqf +++ b/addons/advanced_ballistics/functions/fnc_readWeaponDataFromConfig.sqf @@ -7,9 +7,12 @@ * weapon - classname * * Return Value: - * 0: _barrelTwist - * 1: _twistDirection - * 2: _barrelLength + * 0: _barrelTwist + * 1: _twistDirection + * 2: _barrelLength + * + * Example: + * ["weapon"] call ace_advanced_ballistics_fnc_readWeaponDataFromConfig * * Public: No */ @@ -30,6 +33,6 @@ private _barrelLength = getNumber(_weaponConfig >> "ACE_barrelLength"); private _result = [_barrelTwist, _twistDirection, _barrelLength]; -uiNamespace setVariable [format[QGVAR(%1), _weapon], _result]; +uiNamespace setVariable [format[QGVAR(%1), _this], _result]; _result diff --git a/addons/advanced_ballistics/stringtable.xml b/addons/advanced_ballistics/stringtable.xml index 606009a2c8..631acc92c7 100644 --- a/addons/advanced_ballistics/stringtable.xml +++ b/addons/advanced_ballistics/stringtable.xml @@ -14,6 +14,8 @@ Mostrar Informação do Vento 風の情報を表示 바람의 정보를 표시 + 顯示風況 + 显示风况 Show Protractor @@ -28,6 +30,8 @@ Mostrar Transferidor 分度器を表示 각도기 표시 + 顯示量角器 + 显示量角器 Advanced Ballistics @@ -42,6 +46,8 @@ Balistica Avanzata アドバンスド バリスティックス 고급 탄도학 + 先進彈道系統 + 先进弹道系统 Advanced Ballistics @@ -56,6 +62,8 @@ Balistica Avanzata アドバンスド バリスティックス 고급 탄도학 + 先進彈道系統 + 先进弹道系统 Enables advanced ballistics @@ -70,6 +78,8 @@ Abilita Balistica Avanzata アドバンスド バリスティックスを有効化 고급 탄도학을 적용합니다 + 啟用先進彈道系統 + 启用先进弹道系统 Enabled For Snipers @@ -84,6 +94,8 @@ Abilita per Tiratori Scelti 狙撃手へ有効化 저격수만 적용 + 啟用給狙擊手 + 启用给狙击手 Enables advanced ballistics for non local snipers (when using high power optics) @@ -98,6 +110,8 @@ Abilita Balistica Avanzata per Tiratori Scelti non locali (con ottiche ad alto potenziale) 非ローカルの狙撃手 (高倍率スコープを使っている場合)へアドバンスド バリスティックスを有効化します 고급 탄도학을 비-저격수 인원에게도 적용합니다(고성능 조준경을 사용시) + 啟用先進彈道系統給非本地狙擊手(當使用高倍率光學瞄鏡時) + 启用先进弹道系统给非本地狙击手(当使用高倍率光学瞄镜时) Enabled For Group Members @@ -112,6 +126,8 @@ Abilita per Membri del Gruppo グループ メンバーへ有効化 그룹 멤버도 적용 + 啟用給小隊成員 + 启用给小队成员 Enables advanced ballistics for non local group members @@ -126,6 +142,8 @@ Abilita Balistica Avanzata per Membri non locali del Gruppo 非ローカルのグループ メンバーへアドバンスド バリスティックスを有効化します 고급 탄도학을 비-그룹멤버에게도 적용합니다 + 啟用先進彈道系統給非本地小隊成員 + 启用先进弹道系统给非本地小队成员 Enabled For Everyone @@ -140,6 +158,8 @@ Abilita per tutti 全員に有効化 모두에게 적용 + 啟用給所有人 + 启用给所有人 Enables advanced ballistics for all non local players (enabling this may degrade performance during heavy firefights in multiplayer) @@ -151,9 +171,11 @@ Active la balistique avancée pour tous les joueurs non locaux (activer cette option peut avoir un impact sur les performance en multi durant les grands échanges de tirs) Engedélyezi a fejlett ballisztikát az összes nem-helyi játékosnak (ez a funkció leronthatja a teljesítményt intenzív többjátékos tűzharcok alatt) Включает продвинутую баллистику для всех нелокальных игроков (включение этой опции может снизить производительность при массовых перестрелках в мультиплеере) - Abilita Balistica Avanzata per tutti i giocatori non locali (abilitare questo parametro potrebbe degradare le prestazioni durante scontri intensi in multiplayer) + Abilita Balistica Avanzata per tutti i giocatori non locali (abilitare questo parametro potrebbe ridurre le prestazioni durante scontri intensi in multiplayer) 非ローカルの全プレイヤーへアドバンスド バリスティックスを有効化します (マルチプレイで大規模な銃撃戦がおこなわれると、動作の低下を招きます) 고급 탄도학을 모든 비-로컬그룹에게도 적용합니다(적용 후 대규모 전투시 성능하락을 유발할 수 있습니다) + 啟用先進彈道系統給所有非本地玩家 (啟用此功能後,在多人連線大量交火時可能會降低效能) + 启用先进弹道系统给所有非本地玩家 (启用此功能后,在多人连线大量交火时可能会降低效能) Always Enabled For Group Members @@ -168,6 +190,8 @@ Sempre abilitato per Membri del Gruppo 常にグループ メンバーへ有効化 그룹 멤버에게 항상 적용 + 永遠啟用給小隊成員 + 永远启用给小队成员 Always enables advanced ballistics when a group member fires @@ -179,9 +203,11 @@ Active tout le temps la balistique avancée quand un membre du groupe ouvre le feu Mindig engedélyezi a fejlett ballisztikát, ha egy csoporttag tüzel Всегда включает продвинутую баллистику когда стреляет член группы - Abilita sempre Balistica Avanzata quando un Membro del Gruppo spara + Abilita sempre Balistica Avanzata quando un membro del gruppo spara グループ メンバーが射撃した時、常にアドバンスド バリスティックスを有効化します 그룹 멤버가 발사시 항상 고급 탄도학을 적용합니다 + 當小隊成員開火時,永遠啟用先進彈道系統 + 当小队成员开火时,永远启用先进弹道系统 Disabled In FullAuto Mode @@ -196,6 +222,8 @@ Disabilita in modalità di fuoco automatico フルオートでは無効化 조정간 자동시 비활성화 + 在全自動模式時關閉 + 在全自动模式时关闭 Disables the advanced ballistics during full auto fire @@ -210,6 +238,8 @@ Disabilita Balistica Avanzata durante fuoco automatico フルオートで射撃中ではアドバンスド バリスティックスを無効化します 조정간 자동시 고급 탄도학을 비활성화 합니다 + 在全自動模式開火時,關閉先進彈道系統 + 在全自动模式开火时,关闭先进弹道系统 Enable Ammo Temperature Simulation @@ -224,6 +254,8 @@ Abilita simulazione della temperatura delle munizioni 弾薬の温度シミュレーションを有効化 탄약 온도 구현 적용 + 啟用彈藥溫度模擬系統 + 启用弹药温度模拟系统 Muzzle velocity varies with ammo temperature @@ -235,9 +267,11 @@ La température de la munition influe sur la vélocité intiale A kezdősebesség a lőszer hőmérsékletétől függően változó Начальная скорость пули зависит от температуры - Velocità alla volata varia con la temperatura delle munizioni + La velocità dello sparo varia a seconda della temperatura delle munizioni 弾薬の温度により初速値を変化させます 탄약 온도에 비례해 총구 속도가 달라집니다 + 子彈初速將隨彈藥溫度而有所變化 + 子弹初速将随弹药温度而有所变化 Enable Barrel Length Simulation @@ -252,6 +286,8 @@ Abilita simulazione della lunghezza della canna 銃身長のシミュレーションを有効化 총열 길이 구현 적용 + 啟用槍管長度模擬系統 + 启用枪管长度模拟系统 Muzzle velocity varies with barrel length @@ -263,9 +299,11 @@ La longueur du canon influe sur la vélocité initale A kezdősebesség a cső hosszától függően változó Начальная скорость пули зависит от длины ствола - Velocità alla volata varia con la lunghezza della canna + La velocità di sparo varia a seconda della lunghezza della canna 銃身長により初速値を変化させます 총구 속도가 총열에 비례해 달라집니다 + 子彈初速將隨槍管長度而有所變化 + 子弹初速将随枪管长度而有所变化 Enable Bullet Trace Effect @@ -277,9 +315,11 @@ Activer l'effet balle traçante Nyomkövető-effekt engedélyezése Следы пуль - Abilita effetto di tracciatura dei proiettili + Abilita effetto dei Proiettili Traccianti 弾丸の痕跡表示を有効化 예광탄 효과 적용 + 啟用曳光彈效果 + 启用曳光弹效果 Enables a bullet trace effect to high caliber bullets (only visible when looking through high power optics) @@ -291,9 +331,11 @@ Active une tracante pour les munitions de gros calibre (seulement visible en utilisant des optiques avancées) 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ó) Включает эффект следов пуль для больших калибров (видны только через мощную оптику) - Abilita effetto di tracciatura per proiettili di alto calibro (visibile solo attraverso ottiche ad alto potenziale) + Abilita effetto dei proiettili traccianti di alto calibro (visibile solo attraverso ottiche ad alto potenziale) 大口径の銃弾による弾丸の痕跡表示を有効化します (高倍率スコープを介してでしか見れません) 대구경 탄환에 예광탄 효과를 적용합니다(오직 고성능 조준경 사용시에만 보입니다) + 啟用曳光彈效果給大口徑子彈 (只有透過高倍率光學瞄鏡才能看到) + 启用曳光弹效果给大口径子弹 (只有透过高倍率光学瞄镜才能看到) Simulation Interval @@ -308,6 +350,8 @@ Intervallo Simulazione シミュレーション間隔 구현 간격 + 模擬間隔 + 模拟间隔 Defines the interval between every calculation step @@ -322,6 +366,8 @@ Definisce l'intervallo tra ogni step di calcolo 各計算ごとの間隔を定義します 각 계산 단위의 간격을 정의합니다 + 定義每個模擬計算之間的時間間隔 + 定义每个模拟计算之间的时间间隔 Simulation Radius @@ -336,6 +382,8 @@ Raggio Simulazione シミュレーションの適用範囲 구현 범위 + 模擬半徑 + 模拟半径 Defines the radius around the player (in meters) at which advanced ballistics are applied to projectiles @@ -350,6 +398,8 @@ Definisce il raggio attorno al giocatore (in metri) per cui la Balistica Avanzata è applicata ai proiettili プレイヤーの周囲にアドバンスド バリスティックスによる弾道を適用させる範囲を半径で定義します (メートル) 플레이어 주위의 발사체를 고급 탄도학으로 정의하는 범위를 정합니다(미터) + 以玩家的半徑距離(公尺)定義先進彈道系統啟用範圍 + 以玩家的半径距离(公尺)定义先进弹道系统启用范围 This module enables advanced ballistics simulation - meaning the trajectory of projectiles is influenced by variables like air temperature, atmospheric pressure, humidity, gravity, the type of ammunition and the weapon from which it was fired. @@ -364,6 +414,8 @@ 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 このモジュールはアドバンスド バリスティックスを有効化します。弾道は気温や気圧、湿度、重力、弾薬の種類、発射する武器から影響を受けるようになります。 이 모듈은 고급 탄도학을 적용시킵니다 - 이는 발사체의 궤적이 기온, 대기압, 습도, 중력, 탄환의 종류와 어느 무기에서 발사되는지에 따라 영향을 받습니다. + 該模塊實現先進的彈道仿真 - 這意味著子彈的軌跡是由空氣溫度、大氣壓力、濕度、重力、彈藥類型以及射擊的武器所影響. + 该模块实现先进的弹道仿真 - 这意味着子弹的轨迹是由空气温度、大气压力、湿度、重力、弹药类型以及射击的武器所影响. diff --git a/addons/advanced_fatigue/XEH_postInit.sqf b/addons/advanced_fatigue/XEH_postInit.sqf index 57be761607..542360c0c3 100644 --- a/addons/advanced_fatigue/XEH_postInit.sqf +++ b/addons/advanced_fatigue/XEH_postInit.sqf @@ -14,12 +14,15 @@ if (!hasInterface) exitWith {}; // - GVAR updating and initialization ----------------------------------------- ["unit", FUNC(handlePlayerChanged), true] call CBA_fnc_addPlayerEventHandler; - private _fnc_showStaminaBar = { + ["visibleMap", { + params ["", "_visibleMap"]; // command visibleMap is updated one frame later + private _staminaBarContainer = uiNamespace getVariable [QGVAR(staminaBarContainer), controlNull]; + _staminaBarContainer ctrlShow ((!_visibleMap) && {(vehicle ACE_player) == ACE_player}); + }, true] call CBA_fnc_addPlayerEventHandler; + ["vehicle", { private _staminaBarContainer = uiNamespace getVariable [QGVAR(staminaBarContainer), controlNull]; _staminaBarContainer ctrlShow ((!visibleMap) && {(vehicle ACE_player) == ACE_player}); - }; - ["visibleMap", _fnc_showStaminaBar, true] call CBA_fnc_addPlayerEventHandler; - ["vehicle", _fnc_showStaminaBar, true] call CBA_fnc_addPlayerEventHandler; + }, true] call CBA_fnc_addPlayerEventHandler; // - Duty factors ------------------------------------------------------------- if (["ACE_Medical"] call EFUNC(common,isModLoaded)) then { diff --git a/addons/advanced_fatigue/functions/fnc_addDutyFactor.sqf b/addons/advanced_fatigue/functions/fnc_addDutyFactor.sqf index 74a42d55cf..89801e902e 100644 --- a/addons/advanced_fatigue/functions/fnc_addDutyFactor.sqf +++ b/addons/advanced_fatigue/functions/fnc_addDutyFactor.sqf @@ -8,6 +8,11 @@ * * Return Value: * None + * + * Example: + * ["ID", 5] call ace_advanced_fatigue_fnc_addDutyFactor + * + * Public: No */ #include "script_component.hpp" params [["_id", "", [""]], ["_factor", 1, [0, {}]]]; diff --git a/addons/advanced_fatigue/functions/fnc_createStaminaBar.sqf b/addons/advanced_fatigue/functions/fnc_createStaminaBar.sqf index 773e240494..ce88c2b42e 100644 --- a/addons/advanced_fatigue/functions/fnc_createStaminaBar.sqf +++ b/addons/advanced_fatigue/functions/fnc_createStaminaBar.sqf @@ -7,6 +7,11 @@ * * Return Value: * None + * + * Example: + * [DISPLAY] call ace_advanced_fatigue_fnc_createStaminaBar + * + * Public: No */ #include "script_component.hpp" params ["_display"]; diff --git a/addons/advanced_fatigue/functions/fnc_getAnimDuty.sqf b/addons/advanced_fatigue/functions/fnc_getAnimDuty.sqf index 3698ff9113..629152b6a1 100644 --- a/addons/advanced_fatigue/functions/fnc_getAnimDuty.sqf +++ b/addons/advanced_fatigue/functions/fnc_getAnimDuty.sqf @@ -21,6 +21,7 @@ private _duty = 1; private _animType = _animName select [1, 3]; GVAR(isSwimming) = false; +GVAR(isProne) = (stance _unit) == "PRONE"; if (_animType in ["idl", "mov", "adj"]) then { switch (_animName select [5, 3]) do { @@ -29,6 +30,7 @@ if (_animType in ["idl", "mov", "adj"]) then { }; case ("pne"): { _duty = 10; + GVAR(isProne) = true; // #4880 - Unarmed sprint->prone has wrong `stance` }; default { _duty = 1; diff --git a/addons/advanced_fatigue/functions/fnc_getMetabolicCosts.sqf b/addons/advanced_fatigue/functions/fnc_getMetabolicCosts.sqf index fd2234d1f2..c2c673fd95 100644 --- a/addons/advanced_fatigue/functions/fnc_getMetabolicCosts.sqf +++ b/addons/advanced_fatigue/functions/fnc_getMetabolicCosts.sqf @@ -18,18 +18,8 @@ #include "script_component.hpp" params ["_unit", "_velocity"]; -private _virtualLoad = 0; -{ - _virtualLoad = _virtualLoad + (_x getVariable [QEGVAR(movement,vLoad), 0]); -} forEach [ - _unit, - uniformContainer _unit, - vestContainer _unit, - backpackContainer _unit -]; +private _gearMass = ((_unit getVariable [QEGVAR(movement,totalLoad), loadAbs _unit]) / 22.046) * GVAR(loadFactor); -private _gearMass = ((loadAbs _unit + _virtualLoad) * 0.1 / 2.2046) * GVAR(loadFactor); -private _terrainFactor = 1; private _terrainAngle = asin (1 - ((surfaceNormal getPosASL _unit) select 2)); private _terrainGradient = (_terrainAngle / 45 min 1) * 5 * GVAR(terrainGradientFactor); private _duty = GVAR(animDuty); @@ -50,12 +40,12 @@ if (_velocity > 2) then { ( 2.10 * SIM_BODYMASS + 4 * (SIM_BODYMASS + _gearMass) * ((_gearMass / SIM_BODYMASS) ^ 2) - + _terrainFactor * (SIM_BODYMASS + _gearMass) * (0.90 * (_velocity ^ 2) + 0.66 * _velocity * _terrainGradient) + + (SIM_BODYMASS + _gearMass) * (0.90 * (_velocity ^ 2) + 0.66 * _velocity * _terrainGradient) ) * 0.23 * _duty } else { ( 1.05 * SIM_BODYMASS + 4 * (SIM_BODYMASS + _gearMass) * ((_gearMass / SIM_BODYMASS) ^ 2) - + _terrainFactor * (SIM_BODYMASS + _gearMass) * (1.15 * (_velocity ^ 2) + 0.66 * _velocity * _terrainGradient) + + (SIM_BODYMASS + _gearMass) * (1.15 * (_velocity ^ 2) + 0.66 * _velocity * _terrainGradient) ) * 0.23 * _duty }; diff --git a/addons/advanced_fatigue/functions/fnc_handlePlayerChanged.sqf b/addons/advanced_fatigue/functions/fnc_handlePlayerChanged.sqf index 9d33df10be..0e31e89645 100644 --- a/addons/advanced_fatigue/functions/fnc_handlePlayerChanged.sqf +++ b/addons/advanced_fatigue/functions/fnc_handlePlayerChanged.sqf @@ -8,6 +8,11 @@ * * Return Value: * None + * + * Example: + * [newbob, oldbob] call ace_advanced_fatigue_fnc_handlePlayerChanged + * + * Public: No */ #include "script_component.hpp" params ["_newUnit", "_oldUnit"]; @@ -54,7 +59,6 @@ GVAR(peakPower) = VO2MAX_STRENGTH * GVAR(VO2MaxPower); GVAR(ae1PathwayPower) = GVAR(peakPower) / (13.3 + 16.7 + 113.3) * 13.3 * ANTPERCENT ^ 1.28 * 1.362; GVAR(ae2PathwayPower) = GVAR(peakPower) / (13.3 + 16.7 + 113.3) * 16.7 * ANTPERCENT ^ 1.28 * 1.362; -GVAR(anPathwayPower) = GVAR(peakPower) - _ae1PathwayPower - _ae2PathwayPower; GVAR(ppeBlackoutLast) = 100; GVAR(lastBreath) = 0; diff --git a/addons/advanced_fatigue/functions/fnc_handleStaminaBar.sqf b/addons/advanced_fatigue/functions/fnc_handleStaminaBar.sqf index 2f865ac821..72772d16b1 100644 --- a/addons/advanced_fatigue/functions/fnc_handleStaminaBar.sqf +++ b/addons/advanced_fatigue/functions/fnc_handleStaminaBar.sqf @@ -7,6 +7,11 @@ * * Return Value: * None + * + * Example: + * [0.5] call ace_advanced_fatigue_fnc_handleStaminaBar + * + * Public: No */ #include "script_component.hpp" params ["_stamina"]; diff --git a/addons/advanced_fatigue/functions/fnc_mainLoop.sqf b/addons/advanced_fatigue/functions/fnc_mainLoop.sqf index ee8f33f5c7..4b23153dff 100644 --- a/addons/advanced_fatigue/functions/fnc_mainLoop.sqf +++ b/addons/advanced_fatigue/functions/fnc_mainLoop.sqf @@ -7,6 +7,11 @@ * * Return Value: * None + * + * Example: + * [] call ace_advanced_fatigue_fnc_mainLoop + * + * Public: No */ #include "script_component.hpp" if (!alive ACE_player) exitWith { // Dead people don't breath, Will also handle null (Map intros) @@ -20,7 +25,7 @@ private _currentWork = REE; private _currentSpeed = (vectorMagnitude (velocity ACE_player)) min 6; // fix #4481. Diving to the ground is recorded as PRONE stance with running speed velocity. Cap maximum speed to fix. -if (stance ACE_player == "PRONE") then { +if (GVAR(isProne)) then { _currentSpeed = _currentSpeed min 1.5; }; @@ -32,11 +37,11 @@ if ((vehicle ACE_player == ACE_player) && {_currentSpeed > 0.1} && {isTouchingGr // Calculate muscle damage increase // Note: Muscle damage recovery is ignored as it takes multiple days GVAR(muscleDamage) = GVAR(muscleDamage) + (_currentWork / GVAR(peakPower)) ^ 3.2 * 0.00004; -private _muscleIntegrity = 1 - GVAR(muscleDamage); +private _muscleIntegritySqrt = sqrt (1 - GVAR(muscleDamage)); // Calculate available power -private _ae1PathwayPowerFatigued = GVAR(ae1PathwayPower) * sqrt (GVAR(ae1Reserve) / AE1_MAXRESERVE) * OXYGEN * sqrt _muscleIntegrity; -private _ae2PathwayPowerFatigued = GVAR(ae2PathwayPower) * sqrt (GVAR(ae2Reserve) / AE2_MAXRESERVE) * OXYGEN * sqrt _muscleIntegrity; +private _ae1PathwayPowerFatigued = GVAR(ae1PathwayPower) * sqrt (GVAR(ae1Reserve) / AE1_MAXRESERVE) * OXYGEN * _muscleIntegritySqrt; +private _ae2PathwayPowerFatigued = GVAR(ae2PathwayPower) * sqrt (GVAR(ae2Reserve) / AE2_MAXRESERVE) * OXYGEN * _muscleIntegritySqrt; // Calculate how much power is consumed from each reserve private _ae1Power = _currentWork min _ae1PathwayPowerFatigued; diff --git a/addons/advanced_fatigue/functions/fnc_moduleSettings.sqf b/addons/advanced_fatigue/functions/fnc_moduleSettings.sqf index 275e4b7907..9d1a0a6ab6 100644 --- a/addons/advanced_fatigue/functions/fnc_moduleSettings.sqf +++ b/addons/advanced_fatigue/functions/fnc_moduleSettings.sqf @@ -7,6 +7,11 @@ * * Return Value: * None + * + * Example: + * [MODULE] call ace_advanced_fatigue_fnc_moduleSettings + * + * Public: No */ #include "script_component.hpp" params ["_logic"]; diff --git a/addons/advanced_fatigue/functions/fnc_removeDutyFactor.sqf b/addons/advanced_fatigue/functions/fnc_removeDutyFactor.sqf index 0a67f318ac..4ae07704a5 100644 --- a/addons/advanced_fatigue/functions/fnc_removeDutyFactor.sqf +++ b/addons/advanced_fatigue/functions/fnc_removeDutyFactor.sqf @@ -7,6 +7,11 @@ * * Return Value: * None + * + * Example: + * ["ID"] call ace_advanced_fatigue_fnc_removeDutyFactor + * + * Public: No */ #include "script_component.hpp" params [["_id", "", [""]]]; diff --git a/addons/advanced_fatigue/stringtable.xml b/addons/advanced_fatigue/stringtable.xml index 5e37d381b8..9aba5d1a04 100644 --- a/addons/advanced_fatigue/stringtable.xml +++ b/addons/advanced_fatigue/stringtable.xml @@ -7,6 +7,10 @@ パフォーマンス要因 Współczynnik wydolności 성능 요인 + Facteur de performance + Fattore Prestazione + 體力值 + 体力值 Influences the overall performance of all players with no custom factor. Higher means better. @@ -14,6 +18,10 @@ 非カスタム要因をもつ全プレイヤーへ全体的に動作を影響させます。高いほど影響がでます。 Wpływa na ogólną wydolność organizmu u wszystkich graczy bez ustawionego niestandardowego współczynnika. Więcej znaczy lepiej. 모든 성능이 임의로 설정된 값 없이 영향받습니다. 값이 클수록 더 나은 성능을 발휘합니다 + Influence les performances générales de tous les joueurs sans facteurs personalisés. Une valeur plus élevée implique de meilleures performances. + Influenza qualsiasi prestazione di tutti i giocatori smuniti di un fattore personalizzato. Maggiore significa migliore. + 影響所有玩家的體力表現. 值越高代表體力越好. + 影响所有玩家的体力表现. 值越高代表体力越好. Influences the overall performance of this unit. Higher means better. @@ -21,6 +29,10 @@ 非カスタム要因をもつ全プレイヤーへ全体的に動作を影響させます。高いほど影響がでます。 Wpływa na ogólną wydolność tej jednostki. Więcej znaczy lepiej. 모든 성능이 이 단위로 영향을 받습니다. 값이 클수록 더 나은 성능을 발휘합니다 + Influence les performances générales de cette unité. Une valeur plus élevée implique de meilleures performances. + Influenza qualsiasi prestazione di questa unità. Maggiore significa migliore. + 影響這個單位的體力表現. 值越高代表體力越好. + 影响这个单位的体力表现. 值越高代表体力越好. Recovery Factor @@ -28,6 +40,10 @@ 回復要因 Współczynnik regeneracji 회복 요인 + Facteur de récupération + Fattore Recupero + 回復值 + 回复值 Changes how fast the player recovers when resting. Higher is faster. @@ -35,6 +51,10 @@ 休憩時は、プレイヤーが早く回復します。高いほど早くなります。 Wpływa na czas regeneracji podczas postoju. Więcej znaczy szybciej. 얼마나 빨리 회복하는지를 바꿉니다. 값이 클수록 더 나은 성능을 발휘합니다 + 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. + Determina in quanto tempo il giocatore recupera quando rilassato. Maggiore significa migliore. + 決定玩家休息多久就能回復體力. 值越高恢復越快. + 决定玩家休息多久就能回复体力. 值越高恢复越快. Load Factor @@ -42,6 +62,10 @@ 負荷要因 Współczynnik masy ekwipunku 부담 요인 + Facteur d'encombrement + Fattore Caricamento + 負重量 + 负重量 Increases or decreases how much weight influences the players performance. Zero means equipment weight has no performance influence. @@ -49,6 +73,10 @@ 重量によりプレイヤーの動作への影響下増加したり、低下します。装備を持っていない場合、影響はしません。 Zmniejsza lub zwiększa wpływ ciężaru ekwipunku na wydolność gracza. Zero oznacza kompletny brak wpływu na wydolność. 플레이어가 무게에 따라 얼마나 영향받는지를 증가시키거나 감소시킵니다. 0의 경우 플레이어가 장비 무게에 영향받지 않습니다. + 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. + Incrementa o decrementa quanto il peso influenza le prestazioni dei giocatori. Zero significa che il peso dell'equipaggiamento non ha alcuna influenza nelle prestazioni. + 增加或降低玩家所能承受的負重量. 如設定值為0, 代表裝備的重量將不會影響到玩家的體力表現. + 增加或降低玩家所能承受的负重量. 如设定值为0, 代表装备的重量将不会影响到玩家的体力表现. Terrain Gradient Factor @@ -56,6 +84,10 @@ 地形の勾配による要因 Współczynnik terenu 지형 경사도 요인 + Facteur d'inclinaison du terrain + Fattore Pendenza Terreno + 地形陡峭影響值 + 地形陡峭影响值 Sets how much steep terrain increases stamina loss. Higher means higher stamina loss. @@ -63,6 +95,10 @@ 地形によって影響する体力の消費量を決定します。高数値ではより体力を消費します。 Wpływa na to w jakim stopniu stromy teren wpływa na utratę wytrzymałości. Więcej oznacza szybszą utratę wytrzymałości. 경사도에 따라 얼마나 피로해지는지를 정합니다. 값이 클수록 더 많은 피로를 유발합니다. + 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. + Stabilisce quanto la pendenza del terreno incrementa la perdita della stamina. Maggiore significa più stamina persa. + 設定陡峭的地形將會影響多少體力的流失. 值越高代表體力流失越快. + 设定陡峭的地形将会影响多少体力的流失. 值越高代表体力流失越快. Enabled @@ -70,6 +106,10 @@ 有効化 Włączone 활성화 + Activé + Abilitato + 啟用 + 启用 Enables/disables Advanced Fatigue. @@ -77,6 +117,10 @@ アドバンスド疲労の有効化と無効化 Włącza/wyłącza zaawansowaną wytrzymałość 고급 피로도 활성화/비활성화 + Active/désactive la fatigue avancée. + Abilita/disabilita la Fatica Avanzata. + 啟用/關閉進階體力. + 启用/关闭进阶体力. Show stamina bar @@ -84,6 +128,10 @@ 体力バーを表示 Pokaż pasek wytrzymałości 피로도 막대 + Afficher la barre d'endurance + Mostra barra stamina + 顯示體力條 + 显示体力条 Shows the stamina bar. @@ -91,6 +139,10 @@ 体力バーを表示します。 Pokazuje pasek wytrzymałości. 피로도 막대를 보여줍니다. + Affiche la barre d'endurance. + Mostra la barra della stamina. + 顯示體力條. + 显示体力条. diff --git a/addons/advanced_throwing/XEH_postInit.sqf b/addons/advanced_throwing/XEH_postInit.sqf index f3c0d4b9f6..96cb92801e 100644 --- a/addons/advanced_throwing/XEH_postInit.sqf +++ b/addons/advanced_throwing/XEH_postInit.sqf @@ -21,6 +21,7 @@ GVAR(ammoMagLookup) = call CBA_fnc_createNamespace; ["ACE3 Weapons", QGVAR(prepare), localize LSTRING(Prepare), { // Condition if (!([ACE_player] call FUNC(canPrepare))) exitWith {false}; + if (EGVAR(common,isReloading)) exitWith {true}; // Statement [ACE_player] call FUNC(prepare); @@ -67,7 +68,8 @@ GVAR(ammoMagLookup) = call CBA_fnc_createNamespace; }] call CBA_fnc_addPlayerEventhandler; ["visibleMap", { - if (visibleMap && {ACE_player getVariable [QGVAR(inHand), false]}) then { + params ["", "_visibleMap"]; // command visibleMap is updated one frame later + if (_visibleMap && {ACE_player getVariable [QGVAR(inHand), false]}) then { [ACE_player, "Opened Map"] call FUNC(exitThrowMode); }; }] call CBA_fnc_addPlayerEventhandler; @@ -92,6 +94,7 @@ GVAR(ammoMagLookup) = call CBA_fnc_createNamespace; // Set last thrown time on Vanilla Throwing and Advanced Throwing ["ace_firedPlayer", { + //IGNORE_PRIVATE_WARNING ["_unit", "_weapon"]; if (_weapon == "Throw") then { _unit setVariable [QGVAR(lastThrownTime), CBA_missionTime]; }; @@ -114,8 +117,7 @@ addMissionEventHandler ["Draw3D", { // Blue is predicted before throw, red is re drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\icon_text\group_1_ca.paa", [0,0,1,1], _newTrajAGL, 1, 1, 0, "", 2]; } forEach GVAR(predictedPath); { - _newTrajAGL = _x; - drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\icon_text\group_1_ca.paa", [1,0,0,1], _newTrajAGL, 1, 1, 0, "", 2]; + drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\icon_text\group_1_ca.paa", [1,0,0,1], _x, 1, 1, 0, "", 2]; } forEach GVAR(flightPath) }]; #endif diff --git a/addons/advanced_throwing/functions/fnc_canPrepare.sqf b/addons/advanced_throwing/functions/fnc_canPrepare.sqf index 2e9547fd35..9256993788 100644 --- a/addons/advanced_throwing/functions/fnc_canPrepare.sqf +++ b/addons/advanced_throwing/functions/fnc_canPrepare.sqf @@ -32,6 +32,5 @@ GVAR(enabled) && #endif {!(call EFUNC(common,isFeatureCameraActive))} && -{!EGVAR(common,isReloading)} && {[_unit, objNull, ["isNotInside", "isNotSitting"/*, "isNotOnLadder"*/]] call EFUNC(common,canInteractWith)} && // Ladder needs positioning fixes on throw {_unit call CBA_fnc_canUseWeapon} // Disable in non-FFV seats due to surface detection issues diff --git a/addons/advanced_throwing/functions/fnc_drawThrowable.sqf b/addons/advanced_throwing/functions/fnc_drawThrowable.sqf index 226519b931..4f7a27ec65 100644 --- a/addons/advanced_throwing/functions/fnc_drawThrowable.sqf +++ b/addons/advanced_throwing/functions/fnc_drawThrowable.sqf @@ -36,6 +36,11 @@ if (_throwable isEqualTo [] && {!_primed}) exitWith { private _throwableMag = _throwable param [0, "#none"]; +// If not primed, double check we actually have the magazine in inventory +if ((!_primed) && {!((_throwableMag in (uniformItems ACE_player)) || {_throwableMag in (vestItems ACE_player)} || {_throwableMag in (backpackItems ACE_player)})}) exitWith { + [ACE_player, "No valid throwable (glitched currentThrowable)"] call FUNC(exitThrowMode); +}; + // Get correct throw power for primed grenade if (_primed) then { private _ammoType = typeOf _activeThrowable; diff --git a/addons/advanced_throwing/functions/fnc_exitThrowMode.sqf b/addons/advanced_throwing/functions/fnc_exitThrowMode.sqf index c508d0a803..33ff556f6a 100644 --- a/addons/advanced_throwing/functions/fnc_exitThrowMode.sqf +++ b/addons/advanced_throwing/functions/fnc_exitThrowMode.sqf @@ -32,6 +32,10 @@ if !(_unit getVariable [QGVAR(primed), false]) then { _unit setVariable [QGVAR(lastThrownTime), CBA_missionTime]; // Fix floating for throwables without proper physics (eg. IR Grenade) _activeThrowable setVelocity [0, 0, -0.1]; + + // Set thrower + private _instigator = (getShotParents _activeThrowable) param [1, _unit]; // getShotParents could be [] on replaced grenades (like IR chemlight) + [QEGVAR(common,setShotParents), [_activeThrowable, _unit, _instigator]] call CBA_fnc_serverEvent; }; // Restore muzzle ammo (setAmmo 1 has no impact if no appliccable throwable in inventory) diff --git a/addons/advanced_throwing/functions/fnc_moduleInit.sqf b/addons/advanced_throwing/functions/fnc_moduleInit.sqf index 043f15b491..fe380d2bb5 100644 --- a/addons/advanced_throwing/functions/fnc_moduleInit.sqf +++ b/addons/advanced_throwing/functions/fnc_moduleInit.sqf @@ -13,8 +13,7 @@ * Example: * [logic, [unit1, unit2], true] call ace_advanced_throwing_fnc_moduleInit * - * Public: - * No + * Public: No */ #include "script_component.hpp" diff --git a/addons/advanced_throwing/functions/fnc_prime.sqf b/addons/advanced_throwing/functions/fnc_prime.sqf index 727ace4e23..d52bee67f2 100644 --- a/addons/advanced_throwing/functions/fnc_prime.sqf +++ b/addons/advanced_throwing/functions/fnc_prime.sqf @@ -54,6 +54,9 @@ deleteVehicle _activeThrowableOld; _activeThrowable // projectile ]] call CBA_fnc_globalEvent; +// Set prime instigator +[QEGVAR(common,setShotParents), [_activeThrowable, _unit, _unit]] call CBA_fnc_serverEvent; + if (_showHint) then { // Show primed hint private _displayNameShort = getText (configFile >> "CfgMagazines" >> _throwableMag >> "displayNameShort"); diff --git a/addons/advanced_throwing/functions/fnc_renderPickUpInteraction.sqf b/addons/advanced_throwing/functions/fnc_renderPickUpInteraction.sqf index 960bf8fec5..9f2743c600 100644 --- a/addons/advanced_throwing/functions/fnc_renderPickUpInteraction.sqf +++ b/addons/advanced_throwing/functions/fnc_renderPickUpInteraction.sqf @@ -7,7 +7,7 @@ * None * * Return Value: - * Nothing + * None * * Example: * call ace_advanced_throwing_fnc_renderPickUpInteraction diff --git a/addons/advanced_throwing/stringtable.xml b/addons/advanced_throwing/stringtable.xml index a8fc6c32a7..66dbd8e500 100644 --- a/addons/advanced_throwing/stringtable.xml +++ b/addons/advanced_throwing/stringtable.xml @@ -8,6 +8,10 @@ Zaawansowane rzucanie Erweitertes Wurfsystem 고급 투척 + Lancé amélioré + Lancio Avanzato + 進階投擲 + 进阶投掷 Allows changing advanced throwing behaviour. @@ -16,6 +20,10 @@ Zezwala na zmianę zachowania zaawansowanego trybu rzucania. Erlaubt es, das Verhalten des erweiterten Wurfsystems zu ändern. 고급 투척 행위를 허가합니다 + Permet de changer la configuration du lancé amélioré. + Permette il cambiamento della modalità di tiro. + 允許使用更多不同的投擲方式. + 允许使用更多不同的投掷方式. Enable Advanced Throwing @@ -24,6 +32,10 @@ Aktywuj zaawansowane rzucanie Aktiviere erweitertes Wurfsystem 고급 투척 활성화 + Active le lancé amélioré + Abilita Lancio Avanzato + 啟用進階投擲 + 启用进阶投掷 Enables advanced throwing system. @@ -32,6 +44,10 @@ Aktywuje system zaawansowanego rzucania. Aktiviert das erweiterte Wurfsystem. 고급 투척을 활성화 합니다 + Active le système de lancé amélioré. + Abilita il sistema di lancio avanzato. + 啟用進階投擲系統. + 启用进阶投掷系统. Show Throw Arc @@ -40,6 +56,10 @@ Pokaż trasę lotu Zeige Wurfbogen 투척 궤적 표시 + Afficher l'arc de lancé + Mostra Arco di Tiro + 顯示投擲軌道 + 显示投掷轨道 Enables visualization of the throw arc (where throwable will fly). @@ -48,6 +68,10 @@ Wyświetla wizualizację trasy przelotu granatu. Aktiviert die Visualisierung des Wurfbogens (wohin das Objekt geworfen werden wird). 투척 궤도를 시각화 합니다(투척물이 어디로 갈지) + Active la visualisation de l'arc de lancé (où l'objet lancé va atterrir). + Abilita la visualizzazione dell'arco del tiro (dove l'oggetto lanciabile volerà). + 顯示投擲軌道幫助投擲. + 显示投掷轨道帮助投掷. Show Throwing Mouse Controls @@ -56,6 +80,10 @@ Pokaż podpowiedzi sterowania myszą Zeige Maussteuerung beim Werfen 마우스 조작 표시 + Afficher les contrôles à la souris du lancé + Mostra Comandi Mouse Lancio + 顯示滑鼠投擲控制提示 + 显示滑鼠投掷控制提示 Enables visual cues for mouse controls when throwable is prepared. @@ -64,6 +92,10 @@ Wyświetla podpowiedzi sterowania myszą kiedy obiekt miotany jest w ręku. Aktiviert visuelle Hinweise zur Maussteuerung, wenn ein Objekt zum Werfen vorbereitet wird. 투척물을 준비시 마우스 조작을 시각화해서 보여줍니다 + Active les aides visuels pour les controles à la souris lorsqu'un lancé est préparé. + Abilita la visualizzazione dei controlli del mouse quando l'oggetto lanciabile è pronto. + 開啟後會在準備投擲時, 顯示滑鼠相關操作. + 开启后会在准备投掷时, 显示滑鼠相关操作. Enable Throwables Pick Up @@ -72,6 +104,10 @@ Zezwól na podnoszenie obiektów miotanych Aktiviere Aufheben von Wurfobjekten 투척물 줍기 활성화 + Active la récupération des objets lancés + Abilita Raccogli Oggetti + 啟用可撿取地面投擲物 + 启用可捡取地面投掷物 Enables ability to pick up throwables from the ground. @@ -80,6 +116,10 @@ Umożliwia podnoszenie obiektów miotanych z ziemi. Aktiviert die Möglichkeit, geworfene Objekte wieder vom Boden aufzuheben. 땅에 떨어진 투척물을 주울 수 있게 해줍니다. + Active la capacité de récupérer les objets lancés sur le sol. + Abilita la possibilità di raccogliere un oggetto lanciabile da terra. + 啟用後, 可撿取地面上的投擲物. + 启用后, 可捡取地面上的投掷物. Enable Attached Throwables Pick Up @@ -88,6 +128,10 @@ Zezwól na podnoszenie przyczepionych obiektów miotanych Aktiviere erneute Aufnahme befestigter Wurfobjekte 부착 투척물 줍기 활성화 + Active le ramassage d'objets lançables attachés + Abilita Raccogli Oggetti Lanciabili da altri Oggetti + 啟用可撿取附著投擲物 + 启用可捡取附着投掷物 Enables ability to pick up throwables from attached objects. @@ -96,6 +140,10 @@ Umożliwia podnoszenie obiektów miotanych przyczepionych do innych obiektów. Aktiviert die Möglichkeit, befestigte Wurfobjekte erneut aufzunehmen. 부착된 투척물을 주울 수 있게 해줍니다. + Active la capacité à ramasser les objets lançables attaché à d'autres objets. + Abilita la possibilità di raccogliere gli oggetti lanciabili dagli altri oggetti. + 啟用後, 可撿取附著在物件上的投擲物. + 启用后, 可捡取附着在物件上的投掷物. Prepare/Change Throwable @@ -104,6 +152,10 @@ Przygotuj/zmień ob. miotany Wurfobjekt vorbereiten/wechseln 투척물 준비/변경 + Préparer/changer d'objet + Prepara/Cambia Oggetto lanciabile + 準備/變更投擲物 + 准备/变更投掷物 Throwable Drop Mode (Hold) @@ -112,6 +164,10 @@ Tryb upuszczania ob. miotanego (przytrzymaj) Wurfobjekt Fallmodus (halten) 투척물 떨어뜨리기 모드(꾹눌러서) + Mode de lancé de l'objet (Tenir) + Modalità Oggetto Gettabile (Mantenere) + 投擲模式 (按住) + 投掷模式 (按住) Throwable Drop Mode (Toggle) @@ -120,6 +176,10 @@ Tryb upuszczania ob. miotanego (przełącz) Wurfobjekt Fallmodus (umschalten) 투척물 떨어뜨리기 모드(토글) + Mode de lancé de l'objet (Basculer) + Modalità Oggetto lanciabile Gettabile (Interruttore) + 投擲模式 (切換) + 投掷模式 (切换) Primed @@ -128,6 +188,10 @@ Odbezpieczony Scharf gemacht 뇌관 작동 + Amorcer + Armato + 引信開始燃燒 + 引信开始燃烧 Throw @@ -136,6 +200,10 @@ Rzuć Werfen 던지기 + Lancer + Lanciare + 投擲 + 投掷 (Scroll) Change Mode @@ -144,6 +212,10 @@ (Kółko m.) zmień tryb (Scrollen) Modus wechseln (마우스 휠) 모드 변경 + (Molette souris) Changer de mode + (Scorrere) Cambio Modalità + (滾輪) 變更模式 + (滚轮) 变更模式 (Scroll) Extend @@ -152,6 +224,10 @@ (Kółko m.) przedłuż (Scrollen) Erweitern (마우스 휠) 연장 + (Molette souris) Etendre + (Scorrere) Estendere + (滾輪) 延長 + (滚轮) 延长 (Click) Cook @@ -160,6 +236,10 @@ (Kliknięcie) Odbezpiecz (Klicken) Abkochen (클릭) 예열 + (Clique) Dégoupiller + (Click) Arma + (點擊) 提早拉開引信 + (点击) 提早拉开引信 Pick Up @@ -168,6 +248,10 @@ Podnieś Aufheben 줍기 + Ramasser + Raccogli + 撿取 + 捡取 diff --git a/addons/ai/CfgAISkill.hpp b/addons/ai/CfgAISkill.hpp deleted file mode 100644 index c01b5eb96e..0000000000 --- a/addons/ai/CfgAISkill.hpp +++ /dev/null @@ -1,28 +0,0 @@ - -/* - * Documentation: - * https://community.bistudio.com/wiki/AI_Sub-skills - * - * The idea here is to reduce the AI's godlike aiming - * capabilties while retaining it's high intelligence. - * The AI should be smart enough to move through a town, - * but also be 'human' in their reaction time and aim. - * - * Note: All these values can still be adjusted via - * scripts, these arrays just change what 0 & 1 - * are for setSkill. - */ - -class CfgAISkill { - aimingAccuracy[] = {0,0, 1,0.8}; // {0,0,1,1}; v1.26 defaults - aimingShake[] = {0,0, 1,0.6}; // {0,0,1,1}; - aimingSpeed[] = {0,0, 1,0.7}; // {0,0.5,1,1}; - commanding[] = {0,0, 1,0.8}; // {0,0,1,1}; - courage[] = {0,0, 1,0.7}; // {0,0,1,1}; - endurance[] = {0,0, 1,0.7}; // {0,0,1,1}; - general[] = {0,0, 1,0.9}; // {0,0,1,1}; - // apparently breaks rapid firing in single fire mode for players - //reloadSpeed[] = {0,0, 1,0.8}; // {0,0,1,1}; - spotDistance[] = {0,0, 1,0.9}; // {0,0.2,1,0.4}; - spotTime[] = {0,0, 1,0.7}; // {0,0,1,0.7}; -}; diff --git a/addons/ai/README.md b/addons/ai/README.md index 40b4e776a4..e3175b1006 100644 --- a/addons/ai/README.md +++ b/addons/ai/README.md @@ -1,7 +1,7 @@ ace_ai ====== -Minor changes of AI skill and overhaul of AI firing modes of vanilla weapons, encouraging the AI to use full-auto and bursts more often. +Overhaul of AI firing modes of vanilla weapons, encouraging the AI to use full-auto and bursts more often. ## Maintainers diff --git a/addons/ai/config.cpp b/addons/ai/config.cpp index 60bf7184a4..a269bdcdbc 100644 --- a/addons/ai/config.cpp +++ b/addons/ai/config.cpp @@ -14,5 +14,4 @@ class CfgPatches { }; }; -#include "CfgAISkill.hpp" #include "CfgWeapons.hpp" diff --git a/addons/aircraft/CfgAmmo.hpp b/addons/aircraft/CfgAmmo.hpp index ec7cfd6a54..0da9c7760f 100644 --- a/addons/aircraft/CfgAmmo.hpp +++ b/addons/aircraft/CfgAmmo.hpp @@ -39,29 +39,20 @@ class CfgAmmo { // also adjust tracer, "muh lightshow"; also adjust splash damage radius class Gatling_30mm_HE_Plane_CAS_01_F: BulletBase { - hit = 80; - indirectHit = 12; - indirectHitRange = 3; //2; - caliber = 1.4; - deflecting = 3; - fuseDistance = 3; - tracerStartTime = 0.02; - timeToLive = 40; + hit = 80; // default: 180 + indirectHit = 12; // default: 4 + indirectHitRange = 3; // default: 3 + caliber = 1.4; // default: 5 + deflecting = 3; // default: 5 + fuseDistance = 3; // default: 10 + tracerStartTime = 0.02; // default: 0.1 + timeToLive = 40; // default: 6 }; - // helper projectiles to simulate a rof > fps - class ACE_Gatling_30mm_HE_Plane_CAS_01_Deploy: Gatling_30mm_HE_Plane_CAS_01_F { - simulation = "shotSubmunitions"; - triggerTime = 0; - submunitionAmmo = "ACE_Gatling_30mm_HE_Plane_CAS_01_Sub"; - submunitionConeType[] = {"custom", {{0,0}, {0,0}, {0,0}} }; - }; - class ACE_Gatling_30mm_HE_Plane_CAS_01_Sub: Gatling_30mm_HE_Plane_CAS_01_F {}; - // adjust damage and splash damage, closer to bluefor gatling with same caliber class Cannon_30mm_HE_Plane_CAS_02_F: Gatling_30mm_HE_Plane_CAS_01_F { - hit = 70; //40; - indirectHit = 11; //14; - indirectHitRange = 3; + hit = 70; // default: 150 + indirectHit = 11; // default: 4 + indirectHitRange = 3; // default: 3 }; }; diff --git a/addons/aircraft/CfgMagazines.hpp b/addons/aircraft/CfgMagazines.hpp index 6d35e90255..19797b53d8 100644 --- a/addons/aircraft/CfgMagazines.hpp +++ b/addons/aircraft/CfgMagazines.hpp @@ -2,7 +2,6 @@ class CfgMagazines { // shoot helper object to tripple rof class VehicleMagazine; class 1000Rnd_Gatling_30mm_Plane_CAS_01_F: VehicleMagazine { - ammo = "ACE_Gatling_30mm_HE_Plane_CAS_01_Deploy"; count = 1170; }; diff --git a/addons/aircraft/CfgVehicles.hpp b/addons/aircraft/CfgVehicles.hpp index f5f496505e..3279d35f71 100644 --- a/addons/aircraft/CfgVehicles.hpp +++ b/addons/aircraft/CfgVehicles.hpp @@ -33,12 +33,10 @@ class CfgVehicles { class Turrets: Turrets { class CopilotTurret; }; - //class UserActions; }; class Heli_Light_01_base_F: Helicopter_Base_H { - lockDetectionSystem = 0; - incomingMissileDetectionSystem = 16; + incomingMissileDetectionSystem = 16; // Vanilla: 0 driverCanEject = 1; class Turrets: Turrets { @@ -49,16 +47,8 @@ class CfgVehicles { }; }; - class Heli_Light_01_unarmed_base_F: Heli_Light_01_base_F {}; - class B_Heli_Light_01_F: Heli_Light_01_unarmed_base_F { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - class Heli_Light_01_armed_base_F: Heli_Light_01_base_F { - lockDetectionSystem = 0; - incomingMissileDetectionSystem = 16; + incomingMissileDetectionSystem = 16; // Vanilla: 0 driverCanEject = 1; class Turrets: Turrets { @@ -67,13 +57,10 @@ class CfgVehicles { }; }; }; - - class B_Heli_Light_01_armed_F: Heli_Light_01_armed_base_F {}; class Heli_Light_02_base_F: Helicopter_Base_H { driverCanEject = 1; - lockDetectionSystem = 12; - incomingMissileDetectionSystem = 16; - magazines[] = {"2000Rnd_762x51_Belt_T_Green", "12Rnd_PG_missiles", "168Rnd_CMFlare_Chaff_Magazine"}; + incomingMissileDetectionSystem = 16; // Vanilla: 24 + magazines[] = {"2000Rnd_762x51_Belt_T_Green", "12Rnd_PG_missiles", "168Rnd_CMFlare_Chaff_Magazine"}; // Switch gun magazine to 7.62mm from 6.5mm class Turrets: Turrets { class CopilotTurret: CopilotTurret { @@ -91,10 +78,8 @@ class CfgVehicles { #include "Heli_Attack_01_base_F.hpp" - class B_Heli_Attack_01_F: Heli_Attack_01_base_F {}; class Heli_Attack_02_base_F: Helicopter_Base_F { - lockDetectionSystem = 12; - incomingMissileDetectionSystem = 16; + incomingMissileDetectionSystem = 16; // Vanilla: 24 driverCanEject = 1; class Turrets: Turrets { @@ -105,8 +90,7 @@ class CfgVehicles { }; class Heli_Transport_01_base_F: Helicopter_Base_H { - lockDetectionSystem = 12; - incomingMissileDetectionSystem = 16; + incomingMissileDetectionSystem = 16; // Vanilla: 24 driverCanEject = 1; class Turrets: Turrets { @@ -116,35 +100,19 @@ class CfgVehicles { }; class MainTurret: MainTurret { - magazines[] = {"2000Rnd_762x51_Belt_T_Red"}; + magazines[] = {"2000Rnd_762x51_Belt_T_Red"}; // Switch gun magazine to 7.62mm from 6.5mm canEject = 1; }; class RightDoorGun: MainTurret { - magazines[] = {"2000Rnd_762x51_Belt_T_Red"}; + magazines[] = {"2000Rnd_762x51_Belt_T_Red"}; // Switch gun magazine to 7.62mm from 6.5mm canEject = 1; }; }; - /*class UserActions { - class DoorL1_Open { - available = 1; - condition = "((this doorPhase 'door_L') == 0) AND Alive(this) AND driver this != player AND gunner this != player"; - }; - class DoorR1_Open: DoorL1_Open { - condition = "((this doorPhase 'door_R') == 0) AND Alive(this) AND driver this != player AND gunner this != player"; - }; - class DoorL1_Close: DoorL1_Open { - condition = "((this doorPhase 'door_L') > 0) AND Alive(this) AND driver this != player AND gunner this != player"; - }; - class DoorR1_Close: DoorL1_Close { - condition = "((this doorPhase 'door_R') > 0) AND Alive(this) AND driver this != player AND gunner this != player"; - }; - };*/ }; class Heli_Transport_02_base_F: Helicopter_Base_H { - lockDetectionSystem = 12; - incomingMissileDetectionSystem = 16; + incomingMissileDetectionSystem = 16; // Vanilla: 24 driverCanEject = 1; class Turrets: Turrets { @@ -153,121 +121,51 @@ class CfgVehicles { showHMD = 1; }; }; - /*class UserActions: UserActions { - class DoorL1_Open { - available = 1; - condition = "this animationPhase ""door_back_L"" < 0.5 AND Alive(this)"; - }; - class DoorR1_Open: DoorL1_Open { - condition = "this animationPhase ""door_back_R"" < 0.5 AND Alive(this)"; - }; - class DoorL1_Close: DoorL1_Open { - condition = "this animationPhase ""door_back_L"" > 0.5 AND Alive(this)"; - }; - class DoorR1_Close: DoorL1_Close { - condition = "this animationPhase ""door_back_R"" > 0.5 AND Alive(this)"; - }; - class CargoRamp_Open: DoorL1_Open { - userActionID = 52; - displayName = CSTRING(OpenCargoRamp); - textToolTip = CSTRING(OpenCargoRamp); - position = "action_cargoramp"; - radius = 3.0; - condition = "this animationPhase ""cargoramp_open"" < 0.5 AND Alive(this)"; - statement = "this animateDoor ['cargoramp_open', 1]"; - }; - class CargoRamp_Close: DoorL1_Close { - userActionID = 55; - displayName = CSTRING(CloseCargoRamp); - textToolTip = CSTRING(CloseCargoRamp); - position = "action_cargoramp"; - radius = 3.0; - condition = "this animationPhase ""cargoramp_open"" > 0.5 AND Alive(this)"; - statement = "this animateDoor ['cargoramp_open', 0]"; - }; - };*/ }; class Heli_light_03_base_F: Helicopter_Base_F { + lockDetectionSystem = 0; // Vanilla: 12 + incomingMissileDetectionSystem = 16; // Vanilla: 24 driverCanEject = 1; class Turrets: Turrets { class MainTurret: MainTurret { canEject = 1; - }; - }; - }; - class I_Heli_light_03_F: Heli_light_03_base_F { - lockDetectionSystem = 0; - incomingMissileDetectionSystem = 16; - weapons[] = {"M134_minigun", "missiles_DAR", "CMFlareLauncher", "ACE_AIR_SAFETY" }; - magazines[] = {"5000Rnd_762x51_Yellow_Belt", "24Rnd_missiles", "168Rnd_CMFlare_Chaff_Magazine"}; - - class Turrets: Turrets { - class MainTurret: MainTurret { showHMD = 1; - gunBeg = "commanderview"; - gunEnd = "laserstart"; - memoryPointGun = "laserstart"; - stabilizedInAxes = 3; - weapons[] = {"Laserdesignator_mounted"}; - soundServo[] = {"", 0.01, 1, 30}; + weapons[] = {"Laserdesignator_mounted"}; // Add Laser Designator magazines[] = {"Laserbatteries"}; - inGunnerMayFire = 1; }; }; }; - class Heli_light_03_unarmed_base_F: Heli_light_03_base_F {}; - class I_Heli_light_03_unarmed_F: Heli_light_03_unarmed_base_F {}; - class Plane_CAS_01_base_F: Plane_Base_F { - lockDetectionSystem = 12; - incomingMissileDetectionSystem = 16; - class Turrets; - #include + class Plane_CAS_01_base_F: Plane_Base_F { + lockDetectionSystem = 12; // Vanilla: 8 + incomingMissileDetectionSystem = 16; // Vanilla: 24 }; class Plane_CAS_02_base_F: Plane_Base_F { - lockDetectionSystem = 12; - incomingMissileDetectionSystem = 16; - class Turrets; - - #include + lockDetectionSystem = 12; // Vanilla: 8 + incomingMissileDetectionSystem = 16; // Vanilla: 24 }; class Plane_Fighter_03_base_F: Plane_Base_F { - lockDetectionSystem = 12; - incomingMissileDetectionSystem = 16; - class Turrets; - - #include - }; - - class UAV_01_base_F: Helicopter_Base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ + lockDetectionSystem = 12; // Vanilla: 8 + incomingMissileDetectionSystem = 16; // Vanilla: 24 }; class UAV_02_base_F: UAV { - weapons[] = {}; + weapons[] = {}; // Remove flare launcher magazines[] = {}; - - class Turrets { - class MainTurret; - }; }; class UAV_02_CAS_base_F: UAV_02_base_F { - weapons[] = {}; + weapons[] = {}; // Remove flare launcher magazines[] = {}; - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ }; class Heli_Transport_03_base_F: Helicopter_Base_H { + incomingMissileDetectionSystem = 16; // Vanilla: 24 driverCanEject = 1; class Turrets: Turrets { @@ -276,14 +174,8 @@ class CfgVehicles { }; }; }; - class B_Heli_Transport_03_F: Heli_Transport_03_base_F { - lockDetectionSystem = 12; - incomingMissileDetectionSystem = 16; - }; - class Heli_Transport_04_base_F: Helicopter_Base_H { - lockDetectionSystem = 12; - incomingMissileDetectionSystem = 16; + incomingMissileDetectionSystem = 16; // Vanilla: 24 driverCanEject = 1; class Turrets: Turrets { @@ -296,28 +188,4 @@ class CfgVehicles { }; }; }; - - class O_Heli_Transport_04_bench_F: Heli_Transport_04_base_F { - class Turrets: Turrets { - class CopilotTurret: CopilotTurret { - canEject = 1; - }; - - class LoadmasterTurret: LoadmasterTurret { - canEject = 1; - }; - }; - }; - - class O_Heli_Transport_04_covered_F: Heli_Transport_04_base_F { - class Turrets: Turrets { - class CopilotTurret: CopilotTurret { - canEject = 1; - }; - - class LoadmasterTurret: LoadmasterTurret { - canEject = 1; - }; - }; - }; }; diff --git a/addons/aircraft/CfgWeapons.hpp b/addons/aircraft/CfgWeapons.hpp index b94d9f4940..2d16223e1d 100644 --- a/addons/aircraft/CfgWeapons.hpp +++ b/addons/aircraft/CfgWeapons.hpp @@ -1,5 +1,3 @@ -class Mode_SemiAuto; -class Mode_Burst; class Mode_FullAuto; class CfgWeapons { @@ -18,20 +16,6 @@ class CfgWeapons { magazineReloadTime = 0.1; }; - // Manual Switching Of Flare Mode - class SmokeLauncher; - class CMFlareLauncher: SmokeLauncher { - modes[] = {"Single", "Burst", "AIBurst"}; - - class Single: Mode_SemiAuto { - reloadTime = 0.1; - }; - - class Burst: Mode_Burst { - displayName = CSTRING(CMFlareLauncher_Burst_Name); - }; - }; - // bigger mag for comanche class CannonCore; class gatling_20mm: CannonCore { @@ -127,22 +111,4 @@ class CfgWeapons { class medium: LowROF {}; class far: medium {}; }; - - class Gatling_30mm_Plane_CAS_01_F: CannonCore { - autoFire = 1; - burst = 1; - - class LowROF: Mode_FullAuto { - autoFire = 0; - burst = 22; //65; - reloadTime = 0.0462; //0.0154; //0.034; - multiplier = 3; - }; - - class close: LowROF {}; - class near: close {}; - class short: close {}; - class medium: close {}; - class far: close {}; - }; }; diff --git a/addons/aircraft/Heli_Attack_01_base_F.hpp b/addons/aircraft/Heli_Attack_01_base_F.hpp index 5b774a3dc2..90a417000a 100644 --- a/addons/aircraft/Heli_Attack_01_base_F.hpp +++ b/addons/aircraft/Heli_Attack_01_base_F.hpp @@ -1,887 +1,13 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { - lockDetectionSystem = 12; - incomingMissileDetectionSystem = 16; + incomingMissileDetectionSystem = 16; // Vanilla: 24 driverCanEject = 1; - class MFD { - class AirplaneHUD { - class Bones {}; - class Draw {}; - topLeft = "HUD_top_left"; - topRight = "HUD_top_right"; - bottomLeft = "HUD_bottom_left"; - borderLeft = 0; - borderRight = 0; - borderTop = 0; - borderBottom = 0; - color[] = {0.15, 1, 0.15, 1}; - enableParallax = 0; - helmetMountedDisplay = 1; - helmetPosition[] = {0, 0, 0}; - helmetRight[] = {0, 0, 0}; - helmetDown[] = {0, 0, 0}; - }; - - class ACE_HUD_1 { - topLeft = "HUD_top_left"; - topRight = "HUD_top_right"; - bottomLeft = "HUD_bottom_left"; - borderLeft = 0; - borderRight = 0; - borderTop = 0; - borderBottom = 0; - color[] = {0.15, 1, 0.15, 1}; - enableParallax = 0; - - class Bones { - class GunnerAim { - type = "vector"; - source = "weapon"; - pos0[] = {0.5, "0.9 - 0.04 + 0.012"}; - pos10[] = {"0.5 + 0.0111", "0.9 - 0.04 + 0.012 + 0.0133"}; - }; - - class Target { - source = "target"; - type = "vector"; - pos0[] = {0.5, 0.5}; - pos10[] = {0.85, 0.85}; - }; - - class Velocity { - type = "vector"; - source = "velocity"; - pos0[] = {0.5, 0.5}; - pos10[] = {0.65, 0.65}; - }; - - class Velocity_slip { - type = "vector"; - source = "velocity"; - pos0[] = {0.5, 0.845}; - pos10[] = {0.53, 0.845}; - }; - - class VspeedBone { - type = "linear"; - source = "vspeed"; - sourceScale = 1; - min = -10; - max = 10; - minPos[] = {0.93, 0.2}; - maxPos[] = {0.93, 0.8}; - }; - - class RadarAltitudeBone { - type = "linear"; - source = "altitudeAGL"; - sourceScale = 1; - min = 0; - max = 60; - minPos[] = {0.965, 0.2}; - maxPos[] = {0.965, 0.8}; - }; - - class HorizonBankRot { - type = "rotational"; - source = "horizonBank"; - center[] = {0.5, 0.5}; - min = -3.1416; - max = 3.1416; - minAngle = -180; - maxAngle = 180; - aspectRatio = 1; - }; - - class ForwardVec { - type = "vector"; - source = "forward"; - pos0[] = {0, 0}; - pos10[] = {0.25, 0.25}; - }; - - class WeaponAim { - type = "vector"; - source = "weapon"; - pos0[] = {0.5, 0.5}; - pos10[] = {0.75, 0.75}; - }; - - class Level0 { - type = "horizon"; - pos0[] = {0.5, 0.5}; - pos10[] = {0.78, 0.78}; - angle = 0; - }; - - class LevelP5: Level0 { - angle = 5; - }; - - class LevelM5: Level0 { - angle = -5; - }; - - class LevelP10: Level0 { - angle = 10; - }; - - class LevelM10: Level0 { - angle = -10; - }; - - class LevelP15: Level0 { - angle = 15; - }; - - class LevelM15: Level0 { - angle = -15; - }; - - class LevelP20: Level0 { - angle = 20; - }; - - class LevelM20: Level0 { - angle = -20; - }; - - class LevelP25: Level0 { - angle = 25; - }; - - class LevelM25: Level0 { - angle = -25; - }; - - class LevelP30: Level0 { - angle = 30; - }; - - class LevelM30: Level0 { - angle = -30; - }; - - class LevelP35: Level0 { - angle = 35; - }; - - class LevelM35: Level0 { - angle = -35; - }; - - class LevelP40: Level0 { - angle = 40; - }; - - class LevelM40: Level0 { - angle = -40; - }; - - class LevelP45: Level0 { - angle = 45; - }; - - class LevelM45: Level0 { - angle = -45; - }; - - class LevelP50: Level0 { - angle = 50; - }; - - class LevelM50: Level0 { - angle = -50; - }; - }; - - class Draw { - color[] = {0.18, 1, 0.18}; - alpha = 1; - condition = "on"; - - class Horizont { - clipTL[] = {0.15, 0.15}; - clipBR[] = {0.85, 0.85}; - - class Dimmed { - class Level0 { - type = "line"; - points[] = {{"Level0", {-0.42, 0}, 1}, {"Level0", {-0.38, 0}, 1}, {}, {"Level0", {-0.37, 0}, 1}, {"Level0", {-0.33, 0}, 1}, {}, {"Level0", {-0.32, 0}, 1}, {"Level0", {-0.28, 0}, 1}, {}, {"Level0", {-0.27, 0}, 1}, {"Level0", {-0.23, 0}, 1}, {}, {"Level0", {-0.22, 0}, 1}, {"Level0", {-0.18, 0}, 1}, {}, {"Level0", {-0.17, 0}, 1}, {"Level0", {-0.13, 0}, 1}, {}, {"Level0", {-0.12, 0}, 1}, {"Level0", {-0.08, 0}, 1}, {}, {"Level0", {0.42, 0}, 1}, {"Level0", {0.38, 0}, 1}, {}, {"Level0", {0.37, 0}, 1}, {"Level0", {0.33, 0}, 1}, {}, {"Level0", {0.32, 0}, 1}, {"Level0", {0.28, 0}, 1}, {}, {"Level0", {0.27, 0}, 1}, {"Level0", {0.23, 0}, 1}, {}, {"Level0", {0.22, 0}, 1}, {"Level0", {0.18, 0}, 1}, {}, {"Level0", {0.17, 0}, 1}, {"Level0", {0.13, 0}, 1}, {}, {"Level0", {0.12, 0}, 1}, {"Level0", {0.08, 0}, 1 }}; - }; - }; - }; - - class HorizonBankRot { - type = "line"; - width = 3; - points[] = {{"HorizonBankRot", {0, 0.25}, 1}, {"HorizonBankRot", {-0.01, 0.23}, 1}, {"HorizonBankRot", {0.01, 0.23}, 1}, {"HorizonBankRot", {0, 0.25}, 1 }}; - }; - - class Static_HAD_BOX { - clipTL[] = {0, 1}; - clipBR[] = {1, 0}; - type = "line"; - width = 5; - points[] = {{{"0.5-0.1", "0.9-0.04"}, 1}, {{"0.5-0.1", "0.9+0.04"}, 1}, {{"0.5+0.1", "0.9+0.04"}, 1}, {{"0.5+0.1", "0.9-0.04"}, 1}, {{"0.5-0.1", "0.9-0.04"}, 1}, {}, {{"0.5-0.1", "0.9-0.04+0.012"}, 1}, {{"0.5-0.092", "0.9-0.04+0.012"}, 1}, {}, {{"0.5+0.1", "0.9-0.04+0.012"}, 1}, {{"0.5+0.092", "0.9-0.04+0.012"}, 1}, {}, {{0.5, "0.9-0.04"}, 1}, {{0.5, "0.9-0.032"}, 1}, {}, {{0.5, "0.9+0.04"}, 1}, {{0.5, "0.9+0.032"}, 1}, { }}; - }; - - class Gunner_HAD { - type = "line"; - width = 6; - points[] = {{"GunnerAim", {-0.015, -0.008}, 1}, {"GunnerAim", {-0.015, 0.008}, 1}, {"GunnerAim", {0.015, 0.008}, 1}, {"GunnerAim", {0.015, -0.008}, 1}, {"GunnerAim", {-0.015, -0.008}, 1 }}; - }; - - class Slip_ball_group { - class Slip_bars { - type = "line"; - width = 4; - points[] = {{{"0.5-0.018", "0.9-0.04"}, 1}, {{"0.5-0.018", "0.9-0.075"}, 1}, {}, {{"0.5+0.018", "0.9-0.04"}, 1}, {{"0.5+0.018", "0.9-0.075"}, 1 }}; - }; - - class Slip_ball { - type = "line"; - width = 6; - points[] = {{"Velocity_slip", 1, {"0 * 0.75", "-0.02 * 0.75"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.75", "-0.01732 * 0.75"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.75", "-0.0099999998 * 0.75"}, 1}, {"Velocity_slip", 1, {"0.02 * 0.75", "0 * 0.75"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.75", "0.0099999998 * 0.75"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.75", "0.01732 * 0.75"}, 1}, {"Velocity_slip", 1, {"0 * 0.75", "0.02 * 0.75"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.75", "0.01732 * 0.75"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.75", "0.0099999998 * 0.75"}, 1}, {"Velocity_slip", 1, {"-0.02 * 0.75", "0 * 0.75"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.75", "-0.0099999998 * 0.75"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.75", "-0.01732 * 0.75"}, 1}, {"Velocity_slip", 1, {"0 * 0.75", "-0.02 * 0.75"}, 1}, {}, {"Velocity_slip", 1, {"0 * 0.6", "-0.02 * 0.6"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.6", "-0.01732 * 0.6"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.6", "-0.0099999998 * 0.6"}, 1}, {"Velocity_slip", 1, {"0.02 * 0.6", "0 * 0.6"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.6", "0.0099999998 * 0.6"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.6", "0.01732 * 0.6"}, 1}, {"Velocity_slip", 1, {"0 * 0.6", "0.02 * 0.6"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.6", "0.01732 * 0.6"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.6", "0.0099999998 * 0.6"}, 1}, {"Velocity_slip", 1, {"-0.02 * 0.6", "0 * 0.6"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.6", "-0.0099999998 * 0.6"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.6", "-0.01732 * 0.6"}, 1}, {"Velocity_slip", 1, {"0 * 0.6", "-0.02 * 0.6"}, 1}, {}, {"Velocity_slip", 1, {"0 * 0.5", "-0.02 * 0.5"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.5", "-0.01732 * 0.5"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.5", "-0.0099999998 * 0.5"}, 1}, {"Velocity_slip", 1, {"0.02 * 0.5", "0 * 0.5"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.5", "0.0099999998 * 0.5"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.5", "0.01732 * 0.5"}, 1}, {"Velocity_slip", 1, {"0 * 0.5", "0.02 * 0.5"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.5", "0.01732 * 0.5"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.5", "0.0099999998 * 0.5"}, 1}, {"Velocity_slip", 1, {"-0.02 * 0.5", "0 * 0.5"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.5", "-0.0099999998 * 0.5"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.5", "-0.01732 * 0.5"}, 1}, {"Velocity_slip", 1, {"0 * 0.5", "-0.02 * 0.5"}, 1}, {}, {"Velocity_slip", 1, {"0 * 0.4", "-0.02 * 0.4"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.4", "-0.01732 * 0.4"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.4", "-0.0099999998 * 0.4"}, 1}, {"Velocity_slip", 1, {"0.02 * 0.4", "0 * 0.4"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.4", "0.0099999998 * 0.4"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.4", "0.01732 * 0.4"}, 1}, {"Velocity_slip", 1, {"0 * 0.4", "0.02 * 0.4"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.4", "0.01732 * 0.4"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.4", "0.0099999998 * 0.4"}, 1}, {"Velocity_slip", 1, {"-0.02 * 0.4", "0 * 0.4"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.4", "-0.0099999998 * 0.4"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.4", "-0.01732 * 0.4"}, 1}, {"Velocity_slip", 1, {"0 * 0.4", "-0.02 * 0.4"}, 1}, {}, {"Velocity_slip", 1, {"0 * 0.30", "-0.02 * 0.30"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.30", "-0.01732 * 0.30"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.30", "-0.0099999998 * 0.30"}, 1}, {"Velocity_slip", 1, {"0.02 * 0.30", "0 * 0.30"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.30", "0.0099999998 * 0.30"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.30", "0.01732 * 0.30"}, 1}, {"Velocity_slip", 1, {"0 * 0.30", "0.02 * 0.30"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.30", "0.01732 * 0.30"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.30", "0.0099999998 * 0.30"}, 1}, {"Velocity_slip", 1, {"-0.02 * 0.30", "0 * 0.30"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.30", "-0.0099999998 * 0.30"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.30", "-0.01732 * 0.30"}, 1}, {"Velocity_slip", 1, {"0 * 0.30", "-0.02 * 0.30"}, 1}, {}, {"Velocity_slip", 1, {"0 * 0.20", "-0.02 * 0.20"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.20", "-0.01732 * 0.20"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.20", "-0.0099999998 * 0.20"}, 1}, {"Velocity_slip", 1, {"0.02 * 0.20", "0 * 0.20"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.20", "0.0099999998 * 0.20"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.20", "0.01732 * 0.20"}, 1}, {"Velocity_slip", 1, {"0 * 0.20", "0.02 * 0.20"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.20", "0.01732 * 0.20"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.20", "0.0099999998 * 0.20"}, 1}, {"Velocity_slip", 1, {"-0.02 * 0.20", "0 * 0.20"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.20", "-0.0099999998 * 0.20"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.20", "-0.01732 * 0.20"}, 1}, {"Velocity_slip", 1, {"0 * 0.20", "-0.02 * 0.20"}, 1}, {}, {"Velocity_slip", 1, {"0 * 0.1", "-0.02 * 0.1"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.1", "-0.01732 * 0.1"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.1", "-0.0099999998 * 0.1"}, 1}, {"Velocity_slip", 1, {"0.02 * 0.1", "0 * 0.1"}, 1}, {"Velocity_slip", 1, {"0.01732 * 0.1", "0.0099999998 * 0.1"}, 1}, {"Velocity_slip", 1, {"0.0099999998 * 0.1", "0.01732 * 0.1"}, 1}, {"Velocity_slip", 1, {"0 * 0.1", "0.02 * 0.1"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.1", "0.01732 * 0.1"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.1", "0.0099999998 * 0.1"}, 1}, {"Velocity_slip", 1, {"-0.02 * 0.1", "0 * 0.1"}, 1}, {"Velocity_slip", 1, {"-0.01732 * 0.1", "-0.0099999998 * 0.1"}, 1}, {"Velocity_slip", 1, {"-0.0099999998 * 0.1", "-0.01732 * 0.1"}, 1}, {"Velocity_slip", 1, {"0 * 0.1", "-0.02 * 0.1"}, 1 }}; - }; - }; - - class Centerline { - type = "line"; - width = 5; - points[] = {{{0.5, 0.48}, 1}, {{0.5, 0.45}, 1}, {}, {{0.5, 0.52}, 1}, {{0.5, 0.55}, 1}, {}, {{0.48, 0.5}, 1}, {{0.45, 0.5}, 1}, {}, {{0.52, 0.5}, 1}, {{0.55, 0.5}, 1}, { }}; - }; - - class WeaponName { - type = "text"; - source = "weapon"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{0.61, 0.86}, 1}; - right[] = {{0.65, 0.86}, 1}; - down[] = {{0.61, 0.9}, 1}; - }; - - class Ammo_GUN { - type = "group"; - condition = "mgun"; - - class Ammo_count_GUN { - type = "text"; - source = "ammo"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{0.61, 0.89}, 1}; - right[] = {{0.65, 0.89}, 1}; - down[] = {{0.61, 0.93}, 1}; - }; - }; - - class Ammo_RKT { - type = "group"; - condition = "rocket"; - - class Ammo_count_RKT { - type = "text"; - source = "ammo"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{0.61, 0.89}, 1}; - right[] = {{0.65, 0.89}, 1}; - down[] = {{0.61, 0.93}, 1}; - }; - }; - - class Ammo_AGM { - type = "group"; - condition = "AAmissile"; - - class Ammo_count_AGM { - type = "text"; - source = "ammo"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{0.61, 0.89}, 1}; - right[] = {{0.65, 0.89}, 1}; - down[] = {{0.61, 0.93}, 1}; - }; - }; - - class Ammo_AAM { - type = "group"; - condition = "ATmissile"; - - class Ammo_count_AAM { - type = "text"; - source = "ammo"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{0.61, 0.89}, 1}; - right[] = {{0.65, 0.89}, 1}; - down[] = {{0.61, 0.93}, 1}; - }; - }; - - class Ammo_Bomb { - type = "group"; - condition = "Bomb"; - - class Ammo_count_Bomb { - type = "text"; - source = "ammo"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{0.61, 0.89}, 1}; - right[] = {{0.65, 0.89}, 1}; - down[] = {{0.61, 0.93}, 1}; - }; - }; - - class LightsGroup { - type = "group"; - condition = "lights"; - - class LightsText { - type = "text"; - source = "static"; - text = "LIGHTS"; - align = "right"; - scale = 1; - pos[] = {{0.03, "0.53 + 0.055"}, 1}; - right[] = {{0.07, "0.53 + 0.055"}, 1}; - down[] = {{0.03, "0.53 + 0.095"}, 1}; - }; - }; - - class CollisionLightsGroup { - type = "group"; - condition = "collisionlights"; - - class CollisionLightsText { - type = "text"; - source = "static"; - text = "A-COL"; - align = "right"; - scale = 1; - pos[] = {{0.03, "0.53 + 0.105"}, 1}; - right[] = {{0.07, "0.53 + 0.105"}, 1}; - down[] = {{0.03, "0.53 + 0.145"}, 1}; - }; - }; - - class GearGroup { - type = "group"; - condition = "ils"; - - class GearText { - type = "text"; - source = "static"; - text = "GEAR"; - align = "right"; - scale = 1; - pos[] = {{0.03, "0.53 + 0.155"}, 1}; - right[] = {{0.07, "0.53 + 0.155"}, 1}; - down[] = {{0.03, "0.53 + 0.195"}, 1}; - }; - }; - - class ATMissileTOFGroup { - condition = "ATmissile"; - type = "group"; - - class TOFtext { - type = "text"; - align = "right"; - source = "static"; - text = "TOF="; - scale = 1; - pos[] = {{0.61, 0.92}, 1}; - right[] = {{0.65, 0.92}, 1}; - down[] = {{0.61, 0.96}, 1}; - }; - - class TOFnumber { - type = "text"; - source = "targetDist"; - sourcescale = 0.0025; - align = "right"; - scale = 1; - pos[] = {{0.69, 0.92}, 1}; - right[] = {{0.73, 0.92}, 1}; - down[] = {{0.69, 0.96}, 1}; - }; - }; - - class LaserTOFGroup { - condition = "Bomb"; - type = "group"; - - class TOFtext { - type = "text"; - align = "right"; - source = "static"; - text = "TOF="; - scale = 1; - pos[] = {{0.61, 0.92}, 1}; - right[] = {{0.65, 0.92}, 1}; - down[] = {{0.61, 0.96}, 1}; - }; - - class TOFnumber { - type = "text"; - source = "targetDist"; - sourcescale = 0.0025; - align = "right"; - scale = 1; - pos[] = {{0.69, 0.92}, 1}; - right[] = {{0.73, 0.92}, 1}; - down[] = {{0.69, 0.96}, 1}; - }; - }; - - class RocketTOFGroup { - condition = "Rocket"; - type = "group"; - - class TOFtext { - type = "text"; - align = "right"; - source = "static"; - text = "TOF="; - scale = 1; - pos[] = {{0.61, 0.92}, 1}; - right[] = {{0.65, 0.92}, 1}; - down[] = {{0.61, 0.96}, 1}; - }; - - class TOFnumber { - type = "text"; - source = "targetDist"; - sourcescale = 0.0025; - align = "right"; - scale = 1; - pos[] = {{0.69, 0.92}, 1}; - right[] = {{0.73, 0.92}, 1}; - down[] = {{0.69, 0.96}, 1}; - }; - }; - - class RangeNumber { - type = "text"; - source = "targetDist"; - sourceScale = 1; - align = "left"; - scale = 1; - pos[] = {{0.39, 0.89}, 1}; - right[] = {{0.43, 0.89}, 1}; - down[] = {{0.39, 0.93}, 1}; - }; - - class RangeText { - type = "text"; - source = "static"; - text = "RNG"; - align = "left"; - scale = 1; - pos[] = {{0.39, 0.86}, 1}; - right[] = {{0.43, 0.86}, 1}; - down[] = {{0.39, 0.9}, 1}; - }; - - class SpeedNumber { - type = "text"; - align = "right"; - scale = 1; - source = "speed"; - sourceScale = 3.6; - pos[] = {{0.03, 0.475}, 1}; - right[] = {{0.08, 0.475}, 1}; - down[] = {{0.03, 0.525}, 1}; - }; - - class TorqueNumber { - condition = "simulRTD"; - - class Torque_number { - type = "text"; - align = "left"; - scale = 1; - source = "rtdRotorTorque"; - sourceScale = 290; - pos[] = {{0.065, 0.175}, 1}; - right[] = {{0.115, 0.175}, 1}; - down[] = {{0.065, 0.225}, 1}; - }; - - class Torquetext { - type = "text"; - source = "static"; - text = "%"; - align = "right"; - scale = 1; - pos[] = {{0.07, 0.175}, 1}; - right[] = {{0.12, 0.175}, 1}; - down[] = {{0.07, 0.225}, 1}; - }; - }; - - class AltNumber: SpeedNumber { - align = "right"; - source = "altitudeAGL"; - sourceScale = 1; - pos[] = {{0.83, 0.475}, 1}; - right[] = {{0.88, 0.475}, 1}; - down[] = {{0.83, 0.525}, 1}; - }; - - class ASLNumber { - type = "text"; - source = "altitudeASL"; - sourceScale = 1; - align = "right"; - scale = 1; - pos[] = {{0.835, 0.18}, 1}; - right[] = {{0.875, 0.18}, 1}; - down[] = {{0.835, 0.22}, 1}; - }; - - class VspeedScalePosta { - type = "line"; - width = 5; - points[] = {{{0.98, 0.2}, 1}, {{1, 0.2}, 1}, {}, {{0.93, 0.2}, 1}, {{0.95, 0.2}, 1}, {}, {{0.98, 0.35}, 1}, {{1, 0.35}, 1}, {}, {{0.93, 0.35}, 1}, {{0.95, 0.35}, 1}, {}, {{0.94, 0.38}, 1}, {{0.95, 0.38}, 1}, {}, {{0.94, 0.41}, 1}, {{0.95, 0.41}, 1}, {}, {{0.94, 0.44}, 1}, {{0.95, 0.44}, 1}, {}, {{0.94, 0.47}, 1}, {{0.95, 0.47}, 1}, {}, {{0.98, 0.5}, 1}, {{1, 0.5}, 1}, {}, {{0.93, 0.5}, 1}, {{0.95, 0.5}, 1}, {}, {{0.94, 0.53}, 1}, {{0.95, 0.53}, 1}, {}, {{0.94, 0.56}, 1}, {{0.95, 0.56}, 1}, {}, {{0.94, 0.59}, 1}, {{0.95, 0.59}, 1}, {}, {{0.94, 0.62}, 1}, {{0.95, 0.62}, 1}, {}, {{0.98, 0.65}, 1}, {{1, 0.65}, 1}, {}, {{0.93, 0.65}, 1}, {{0.95, 0.65}, 1}, {}, {{0.99, 0.68}, 1}, {{0.98, 0.68}, 1}, {}, {{0.99, 0.71}, 1}, {{0.98, 0.71}, 1}, {}, {{0.99, 0.74}, 1}, {{0.98, 0.74}, 1}, {}, {{0.99, 0.77}, 1}, {{0.98, 0.77}, 1}, {}, {{0.98, 0.8}, 1}, {{1, 0.8}, 1}, {}, {{0.93, 0.8}, 1}, {{0.95, 0.8}, 1}, { }}; - }; - - class RadarAltitudeBand { - clipTL[] = {0, 0.2}; - clipBR[] = {1, 0.8}; - hideValue = 201; - - class radarbanda { - type = "line"; - width = 17; - points[] = {{"RadarAltitudeBone", {0, 0}, 1}, {"RadarAltitudeBone", {0, 0.6}, 1 }}; - }; - }; - - class VspeedBand { - type = "line"; - width = 3; - points[] = {{"VspeedBone", {-0.01, 0}, 1}, {"VspeedBone", {-0.025, -0.015}, 1}, {"VspeedBone", {-0.025, 0.015}, 1}, {"VspeedBone", {-0.01, 0}, 1}, { }}; - }; - - class HeadingNumber: SpeedNumber { - source = "heading"; - sourceScale = 1; - align = "center"; - pos[] = {{0.5, 0.045}, 1}; - right[] = {{0.56, 0.045}, 1}; - down[] = {{0.5, "0.045 + 0.06"}, 1}; - }; - - class Center_box { - type = "line"; - width = 1.5; - points[] = {{{0.45, "0.02 + 0.085 - 0.06"}, 1}, {{"0.45 + 0.10", "0.02 + 0.085 - 0.06"}, 1}, {{"0.45 + 0.10", "0.02 + 0.085"}, 1}, {{0.45, "0.02 + 0.085"}, 1}, {{0.45, "0.02 + 0.085 - 0.06"}, 1 }}; - }; - - class HeadingArrow { - type = "line"; - width = 7; - points[] = {{{"0.5", "0.128 + 0.03"}, 1}, {{0.5, 0.128}, 1 }}; - }; - - class HeadingScale_LEFT { - clipTL[] = {0, 0}; - clipBR[] = {0.45, 1}; - - class Heading_group { - type = "scale"; - horizontal = 1; - source = "heading"; - sourceScale = 1; - width = 5; - top = 0.12; - center = 0.5; - bottom = 0.88; - lineXleft = "0.03 + 0.085"; - lineYright = "0.02 + 0.085"; - lineXleftMajor = "0.04 + 0.085"; - lineYrightMajor = "0.02 + 0.085"; - majorLineEach = 3; - numberEach = 3; - step = 10; - stepSize = "0.05"; - align = "center"; - scale = 1; - pos[] = {0.12, "0.0 + 0.065"}; - right[] = {0.16, "0.0 + 0.065"}; - down[] = {0.12, "0.04 + 0.065"}; - }; - }; - - class HeadingScale_RIGHT { - clipTL[] = {0.55, 0}; - clipBR[] = {1, 1}; - - class Heading_group { - type = "scale"; - horizontal = 1; - source = "heading"; - sourceScale = 1; - width = 5; - top = 0.12; - center = 0.5; - bottom = 0.88; - lineXleft = "0.03 + 0.085"; - lineYright = "0.02 + 0.085"; - lineXleftMajor = "0.04 + 0.085"; - lineYrightMajor = "0.02 + 0.085"; - majorLineEach = 3; - numberEach = 3; - step = 10; - stepSize = "0.05"; - align = "center"; - scale = 1; - pos[] = {0.12, "0.0 + 0.065"}; - right[] = {0.16, "0.0 + 0.065"}; - down[] = {0.12, "0.04 + 0.065"}; - }; - }; - - class HeadingScale_BOTTOM { - clipTL[] = {0.45, "0.02 + 0.085"}; - clipBR[] = {"0.45 + 0.10", 1}; - - class Heading_group { - type = "scale"; - horizontal = 1; - source = "heading"; - sourceScale = 1; - width = 5; - top = 0.12; - center = 0.5; - bottom = 0.88; - lineXleft = "0.03 + 0.085"; - lineYright = "0.02 + 0.085"; - lineXleftMajor = "0.04 + 0.085"; - lineYrightMajor = "0.02 + 0.085"; - majorLineEach = 3; - numberEach = 3; - step = 10; - stepSize = "0.05"; - align = "center"; - scale = 1; - pos[] = {0.12, "0.0 + 0.065"}; - right[] = {0.16, "0.0 + 0.065"}; - down[] = {0.12, "0.04 + 0.065"}; - }; - }; - - class Fuel_Text { - type = "text"; - source = "static"; - text = "Fuel"; - align = "right"; - scale = 1; - pos[] = {{0.03, 0.9}, 1}; - right[] = {{0.07, 0.9}, 1}; - down[] = {{0.03, 0.94}, 1}; - }; - - class Fuel_Number { - type = "text"; - source = "fuel"; - sourceScale = 100; - align = "right"; - scale = 1; - pos[] = {{0.1, 0.9}, 1}; - right[] = {{0.14, 0.9}, 1}; - down[] = {{0.1, 0.94}, 1}; - }; - }; - helmetMountedDisplay = 1; - helmetPosition[] = {-0.04, 0.04, 0.1}; - helmetRight[] = {0.08, 0, 0}; - helmetDown[] = {0, -0.08, 0}; - }; - - class ACE_HUD_2 { - topLeft = "HUD_top_left"; - topRight = "HUD_top_right"; - bottomLeft = "HUD_bottom_left"; - borderLeft = 0; - borderRight = 0; - borderTop = 0; - borderBottom = 0; - color[] = {0.15, 1, 0.15, 1}; - enableParallax = 0; - - class Bones { - class Velocity { - type = "vector"; - source = "velocity"; - pos0[] = {0.5, 0.5}; - pos10[] = {0.75, 0.75}; - }; - - class ForwardVec1 { - type = "vector"; - source = "forward"; - pos0[] = {0, 0}; - pos10[] = {0.25, 0.25}; - }; - - class ForwardVec { - type = "vector"; - source = "forward"; - pos0[] = {0, 0}; - pos10[] = {0.253, 0.253}; - }; - - class WeaponAim { - type = "vector"; - source = "weapon"; - pos0[] = {0.5, 0.5}; - pos10[] = {0.753, 0.753}; - }; - - class WeaponAim1 { - type = "vector"; - source = "weapon"; - pos0[] = {0, 0}; - pos10[] = {0.253, 0.23}; - }; - - class Target { - type = "vector"; - source = "target"; - pos0[] = {0.5, 0.5}; - pos10[] = {0.753, 0.753}; - }; - - class RadarContact { - type = "fixed"; - pos[] = {0, 0}; - }; - }; - - class Draw { - color[] = {0.18, 1, 0.18}; - alpha = 1; - condition = "on"; - - class PlaneMovementCrosshair { - type = "line"; - width = 7; - points[] = {{"ForwardVec1", 1, "Velocity", 1, {0, -0.02}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0.01, -0.01732}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0.01732, -0.01}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0.02, 0}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0.01732, 0.01}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0.01, 0.01732}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0, 0.02}, 1}, {"ForwardVec1", 1, "Velocity", 1, {-0.01, 0.01732}, 1}, {"ForwardVec1", 1, "Velocity", 1, {-0.01732, 0.01}, 1}, {"ForwardVec1", 1, "Velocity", 1, {-0.02, 0}, 1}, {"ForwardVec1", 1, "Velocity", 1, {-0.01732, -0.01}, 1}, {"ForwardVec1", 1, "Velocity", 1, {-0.01, -0.01732}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0, -0.02}, 1}, {}, {"ForwardVec1", 1, "Velocity", 1, {0.04, 0}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0.02, 0}, 1}, {}, {"ForwardVec1", 1, "Velocity", 1, {-0.04, 0}, 1}, {"ForwardVec1", 1, "Velocity", 1, {-0.02, 0}, 1}, {}, {"ForwardVec1", 1, "Velocity", 1, {0, -0.04}, 1}, {"ForwardVec1", 1, "Velocity", 1, {0, -0.02}, 1 }}; - }; - - class Gunner_AIM { - type = "group"; - - class Circle { - type = "line"; - width = 6; - points[] = {{"ForwardVec", 1, "WeaponAim", 1, {0, -0.015}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0, -0.03}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0, -0.0325}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0, -0.0475}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0, 0.015}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0, 0.03}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0, 0.0325}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0, 0.0475}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {-0.015, 0}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {-0.03, 0}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {-0.0325, 0}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {-0.0475, 0}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0.015, 0}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0.03, 0}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0.0325, 0}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0.0475, 0}, 1 }}; - }; - }; - - class GunCross { - condition = "mgun"; - - class Circle { - type = "line"; - width = 9; - points[] = {{"ForwardVec", 1, "WeaponAim", 1, {0, -0.05}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0, -0.015}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0, 0.015}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0, 0.05}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {-0.05, 0}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {-0.015, 0}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0.015, 0}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0.05, 0}, 1}, { }}; - }; - }; - - class RocketCross { - condition = "rocket"; - width = 6; - - class Circle { - type = "line"; - width = 6; - points[] = {{"ForwardVec", 1, "WeaponAim", 1, {-0.05, -0.08}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0.05, -0.08}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {0, -0.08}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0, 0.08}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {-0.05, 0.08}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0.05, 0.08}, 1}, { }}; - }; - }; - - class AT_Aim { - condition = "ATmissile"; - width = 2; - - class Circle - { - type = "line"; - width = 2; - points[] = {{"ForwardVec", 1, "WeaponAim", 1, {-0.1, -0.1}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0.1, -0.1}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {0.1, 0.1}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {-0.1, 0.1}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {-0.1, -0.1}, 1 }}; - }; - }; - - class AA_aim { - condition = "AAmissile"; - - class Circle { - type = "line"; - width = 2.5; - points[] = {{"ForwardVec", 1, "WeaponAim", 1, {"0 / 4", "-0.248559 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0434 / 4", "-0.244781 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0855 / 4", "-0.233571 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.125 / 4", "-0.215252 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1607 / 4", "-0.190396 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1915 / 4", "-0.159774 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2165 / 4", "-0.12428 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.234925 / 4", "-0.0850072 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2462 / 4", "-0.0431499 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.25 / 4", "0 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2462 / 4", "0.0431499 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.234925 / 4", "0.0850072 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2165 / 4", "0.12428 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1915 / 4", "0.159774 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1607 / 4", "0.190396 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.125 / 4", "0.215252 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0855 / 4", "0.233571 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0434 / 4", "0.244781 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0 / 4", "0.248559 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0434 / 4", "0.244781 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0855 / 4", "0.233571 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.125 / 4", "0.215252 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1607 / 4", "0.190396 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1915 / 4", "0.159774 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2165 / 4", "0.12428 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.234925 / 4", "0.0850072 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2462 / 4", "0.0431499 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.25 / 4", "0 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2462 / 4", "-0.0431499 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.234925 / 4", "-0.0850072 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2165 / 4", "-0.12428 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1915 / 4", "-0.159774 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1607 / 4", "-0.190396 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.125 / 4", "-0.215252 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0855 / 4", "-0.233571 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0434 / 4", "-0.244781 / 4"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0 / 4", "-0.248559 / 4"}, 1}, {}, {"ForwardVec", 1, "WeaponAim", 1, {"0 / 2", "-0.248559 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0434 / 2", "-0.244781 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0855 / 2", "-0.233571 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.125 / 2", "-0.215252 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1607 / 2", "-0.190396 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1915 / 2", "-0.159774 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2165 / 2", "-0.12428 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.234925 / 2", "-0.0850072 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2462 / 2", "-0.0431499 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.25 / 2", "0 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2462 / 2", "0.0431499 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.234925 / 2", "0.0850072 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.2165 / 2", "0.12428 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1915 / 2", "0.159774 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.1607 / 2", "0.190396 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.125 / 2", "0.215252 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0855 / 2", "0.233571 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0.0434 / 2", "0.244781 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0 / 2", "0.248559 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0434 / 2", "0.244781 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0855 / 2", "0.233571 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.125 / 2", "0.215252 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1607 / 2", "0.190396 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1915 / 2", "0.159774 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2165 / 2", "0.12428 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.234925 / 2", "0.0850072 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2462 / 2", "0.0431499 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.25 / 2", "0 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2462 / 2", "-0.0431499 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.234925 / 2", "-0.0850072 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.2165 / 2", "-0.12428 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1915 / 2", "-0.159774 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.1607 / 2", "-0.190396 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.125 / 2", "-0.215252 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0855 / 2", "-0.233571 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"-0.0434 / 2", "-0.244781 / 2"}, 1}, {"ForwardVec", 1, "WeaponAim", 1, {"0 / 2", "-0.248559 / 2"}, 1 }}; - }; - }; - - class TargetACQ { - type = "line"; - width = 2; - points[] = {{"ForwardVec", 1, "target", {0, -0.06}, 1}, {"ForwardVec", 1, "target", {0, -0.055}, 1}, {}, {"ForwardVec", 1, "target", {0, -0.05}, 1}, {"ForwardVec", 1, "target", {0, -0.045}, 1}, {}, {"ForwardVec", 1, "target", {0, -0.04}, 1}, {"ForwardVec", 1, "target", {0, -0.035}, 1}, {}, {"ForwardVec", 1, "target", {0, -0.03}, 1}, {"ForwardVec", 1, "target", {0, -0.025}, 1}, {}, {"ForwardVec", 1, "target", {0, -0.02}, 1}, {"ForwardVec", 1, "target", {0, -0.015}, 1}, {}, {"ForwardVec", 1, "target", {0, -0.01}, 1}, {"ForwardVec", 1, "target", {0, -0.005}, 1}, {}, {"ForwardVec", 1, "target", {0, 0}, 1}, {"ForwardVec", 1, "target", {0, 0}, 1}, {}, {"ForwardVec", 1, "target", {0, 0.06}, 1}, {"ForwardVec", 1, "target", {0, 0.055}, 1}, {}, {"ForwardVec", 1, "target", {0, 0.05}, 1}, {"ForwardVec", 1, "target", {0, 0.045}, 1}, {}, {"ForwardVec", 1, "target", {0, 0.04}, 1}, {"ForwardVec", 1, "target", {0, 0.035}, 1}, {}, {"ForwardVec", 1, "target", {0, 0.03}, 1}, {"ForwardVec", 1, "target", {0, 0.025}, 1}, {}, {"ForwardVec", 1, "target", {0, 0.02}, 1}, {"ForwardVec", 1, "target", {0, 0.015}, 1}, {}, {"ForwardVec", 1, "target", {0, 0.01}, 1}, {"ForwardVec", 1, "target", {0, 0.005}, 1}, {}, {"ForwardVec", 1, "target", {-0.06, 0}, 1}, {"ForwardVec", 1, "target", {-0.055, 0}, 1}, {}, {"ForwardVec", 1, "target", {-0.05, 0}, 1}, {"ForwardVec", 1, "target", {-0.045, 0}, 1}, {}, {"ForwardVec", 1, "target", {-0.04, 0}, 1}, {"ForwardVec", 1, "target", {-0.035, 0}, 1}, {}, {"ForwardVec", 1, "target", {-0.03, 0}, 1}, {"ForwardVec", 1, "target", {-0.025, 0}, 1}, {}, {"ForwardVec", 1, "target", {-0.02, 0}, 1}, {"ForwardVec", 1, "target", {-0.015, 0}, 1}, {}, {"ForwardVec", 1, "target", {-0.01, 0}, 1}, {"ForwardVec", 1, "target", {-0.005, 0}, 1}, {}, {"ForwardVec", 1, "target", {0.06, 0}, 1}, {"ForwardVec", 1, "target", {0.055, 0}, 1}, {}, {"ForwardVec", 1, "target", {0.05, 0}, 1}, {"ForwardVec", 1, "target", {0.045, 0}, 1}, {}, {"ForwardVec", 1, "target", {0.04, 0}, 1}, {"ForwardVec", 1, "target", {0.035, 0}, 1}, {}, {"ForwardVec", 1, "target", {0.03, 0}, 1}, {"ForwardVec", 1, "target", {0.025, 0}, 1}, {}, {"ForwardVec", 1, "target", {0.02, 0}, 1}, {"ForwardVec", 1, "target", {0.015, 0}, 1}, {}, {"ForwardVec", 1, "target", {0.01, 0}, 1}, {"ForwardVec", 1, "target", {0.005, 0}, 1}, { }}; - }; - - class RadarTargets { - type = "radar"; - pos0[] = {0.5, 0.5}; - pos10[] = {0.753, 0.753}; - width = 2.5; - points[] = {{"ForwardVec", 1, "RadarContact", {-0.01, -0.01}, 1}, {"ForwardVec", 1, "RadarContact", {0.01, -0.01}, 1}, {"ForwardVec", 1, "RadarContact", {0.01, 0.01}, 1}, {"ForwardVec", 1, "RadarContact", {-0.01, 0.01}, 1}, {"ForwardVec", 1, "RadarContact", {-0.01, -0.01}, 1 }}; - }; - }; - helmetMountedDisplay = 1; - helmetPosition[] = {-0.035, 0.035, 0.1}; - helmetRight[] = {0.07, 0, 0}; - helmetDown[] = {0, -0.07, 0}; - }; - }; - class Turrets: Turrets { class MainTurret: MainTurret { - weapons[] = {"ACE_gatling_20mm_Comanche", "missiles_DAGR", "missiles_ASRAAM", "ACE_AIR_SAFETY"}; + weapons[] = {"ACE_gatling_20mm_Comanche", "missiles_DAGR", "missiles_ASRAAM"}; magazines[] = {"ACE_500Rnd_20mm_shells_Comanche", "4Rnd_AAA_missiles", "24Rnd_PG_missiles"}; - outGunnerMayFire = 1; - commanding = -1; - primaryGunner = 1; - gunnerOpticsModel = ""; - gunnerOpticsEffect[] = {"TankCommanderOptics1"}; - gunnerForceOptics = 0; turretInfoType = "Rsc_ACE_Helo_UI_Turret"; - showAllTargets = 2; - discretedistance[] = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700, 2800, 2900, 3000}; - discretedistanceinitindex = 3; - copilotHasFlares = 1; - directionStabilized = 1; - isCopilot = 1; - showHMD = 1; - CanEject = 1; - startEngine = 0; - minElev = -51; - maxElev = 9; - initElev = 6; - minTurn = -120; - maxTurn = 120; - initTurn = 0; + class OpticsIn { delete Narrow; @@ -957,7 +83,6 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { directionStabilized = 1; horizontallyStabilized = 1; gunnerOpticsModel = "\A3\Weapons_F_Beta\Reticle\Heli_Attack_01_Optics_Gunner_narrow_F"; - }; }; @@ -991,3 +116,13 @@ class Heli_Attack_01_base_F: Helicopter_Base_F { }; }; }; + +class Heli_Attack_01_dynamicLoadout_base_F: Heli_Attack_01_base_F { + class Turrets: Turrets { + class MainTurret: MainTurret { + weapons[] = {"ACE_gatling_20mm_Comanche"}; + magazines[] = {"ACE_500Rnd_20mm_shells_Comanche"}; + }; + }; +}; + diff --git a/addons/aircraft/README.md b/addons/aircraft/README.md index 3db71ca51a..c1bf72b3d7 100644 --- a/addons/aircraft/README.md +++ b/addons/aircraft/README.md @@ -1,7 +1,7 @@ ace_aircraft ============ -Changes to air weaponry, flight models and HUDs. +Changes to air weaponry, ejection and HUDs. - Contributions by Kimi (geraldbolso1899) for HUD updates diff --git a/addons/aircraft/flightmodel_alca.hpp b/addons/aircraft/flightmodel_alca.hpp deleted file mode 100644 index afe74ef9fd..0000000000 --- a/addons/aircraft/flightmodel_alca.hpp +++ /dev/null @@ -1,23 +0,0 @@ -acceleration = 300; -maxSpeed = 936; -irScanRangeMin = 500; -irScanRangeMax = 5000; -aileronSensitivity = 0.64; -elevatorSensitivity = 0.682; -rudderInfluence = 0.001; -aileronControlsSensitivityCoef = 3; -elevatorControlsSensitivity = 2; -rudderControlsSensitivityoef = 4; -elevatorCoef[] = {0.6, 0.73, 0.62, 0.52, 0.39, 0.33, 0.28}; -aileronCoef[] = {0.5, 0.68, 0.75, 0.86, 0.92, 0.96, 1}; -rudderCoef[] = {0.9, 0.75, 0.58, 0.45, 0.38, 0.35, 0.3}; -envelope[] = {0, 0.06, 1.2, 3, 3.6, 3.75, 3.65, 3.45, 3.3, 2.8, 2.4, 1.9, 1.5}; -angleOfIndicence = 0.0523599; //determines velocity vector behaviour, how quickly it catches up with where your nose is pointing, I think -draconicForceXCoef = 7.5; //max angle of attack, lower value gives higher aoa -draconicForceYCoef = 0.2198; //Something to do with bleed off of speed, low values seem to increase bleed off -draconicForceZCoef = 5.12; //???? -draconicTorqueXCoef = 0.18; //resistance to elevator input, also impacts speed degradation -draconicTorqueYCoef = 0.000017; -thrustCoef[] = {1.3, 1.27, 1.24, 1.2, 1.17, 1.15, 1.13, 1.1, 1.06, 1, 0.94, 0.72, 0.51, 0.4, 0.25, 0}; -gunAimDown = 0.029; -flapsFrictionCoef = 0.32; diff --git a/addons/aircraft/flightmodel_thunderbolt.hpp b/addons/aircraft/flightmodel_thunderbolt.hpp deleted file mode 100644 index 0f99f5ef91..0000000000 --- a/addons/aircraft/flightmodel_thunderbolt.hpp +++ /dev/null @@ -1,21 +0,0 @@ -maxSpeed = 736; -aileronSensitivity = 0.85; -elevatorSensitivity = 0.75; -rudderInfluence = 0.001; -aileronControlsSensitivityCoef = 3; -elevatorControlsSensitivity = 2; -rudderControlsSensitivityoef = 4; -elevatorCoef[] = {0.7, 0.75, 0.75, 0.65, 0.55, 0.45, 0.35}; -aileronCoef[] = {0.6, 0.85, 0.88, 0.92, 0.95, 0.97, 1}; -rudderCoef[] = {0.8, 0.75, 0.65, 0.5, 0.4, 0.33, 0.3}; -flapsFrictionCoef = 0.35; -angleOfIndicence = 0.0523599; -draconicForceXCoef = 9.5; -draconicForceYCoef = 0.56; -draconicForceZCoef = 0.1; -draconicTorqueXCoef = 0.58; -draconicTorqueYCoef = 0.00013; -envelope[] = {0, 0, 0.75, 2.4, 3.6, 3.8, 3.7, 3.2, 2.2, 1.7, 0.9}; -thrustCoef[] = {1, 1.2, 1.3, 1.25, 1.06, 1.01, 1, 0.92, 0.75, 0.65, 0.5, 0.25, 0}; -acceleration = 265; -landingSpeed = 220; diff --git a/addons/aircraft/flightmodel_yak.hpp b/addons/aircraft/flightmodel_yak.hpp deleted file mode 100644 index 9ba4c40c76..0000000000 --- a/addons/aircraft/flightmodel_yak.hpp +++ /dev/null @@ -1,20 +0,0 @@ -maxSpeed = 1059; -acceleration = 300; -aileronSensitivity = 0.635; -elevatorSensitivity = 0.814; -rudderInfluence = 0.001; -aileronControlsSensitivityCoef = 3; -elevatorControlsSensitivity = 2; -rudderControlsSensitivityoef = 4; -elevatorCoef[] = {0.6, 0.76, 0.7, 0.65, 0.58, 0.47, 0.43}; -aileronCoef[] = {0.5, 0.85, 0.87, 0.89, 0.92, 0.95, 1}; -rudderCoef[] = {0.8, 0.7, 0.6, 0.5, 0.4, 0.32, 0.27}; -angleOfIndicence = 0.0523599; -draconicForceXCoef = 7.6; -draconicForceYCoef = 0.75; -draconicForceZCoef = 0.085; -draconicTorqueXCoef = 0.815; -draconicTorqueYCoef = 0.000152; -envelope[] = {0, 0.446, 1.5, 3.9, 5.2, 4.8, 4.2, 3.5, 2, 1, 0.5}; -thrustCoef[] = {1, 1.2, 1.7, 1.7, 1.65, 1.54, 1.32, 1.1, 0.95, 0.75, 0.5, 0.35, 0}; -flapsFrictionCoef = 0.32; diff --git a/addons/aircraft/stringtable.xml b/addons/aircraft/stringtable.xml index 36012099b1..0c52397242 100644 --- a/addons/aircraft/stringtable.xml +++ b/addons/aircraft/stringtable.xml @@ -1,20 +1,6 @@ - - Burst - Feuerstoß - Ráfaga - Seria - Dávka - Rafale - Очередь - Sorozat - Rajada - Raffica - バースト - 점사 - XM301 XM301 @@ -28,6 +14,8 @@ XM301 XM301 XM301 + XM301 + XM301 Open Cargo Door @@ -42,6 +30,8 @@ Abrir porta de carga カーゴ ドアを開く 화물칸 개방 + 開啟貨艙門 + 开启货舱门 Close Cargo Door @@ -56,6 +46,8 @@ Fechar porta de carga カーゴ ドアを閉じる 화물칸 폐쇄 + 關閉貨艙門 + 关闭货舱门 diff --git a/addons/atragmx/XEH_PREP.hpp b/addons/atragmx/XEH_PREP.hpp index 6121619a58..c77b7e0655 100644 --- a/addons/atragmx/XEH_PREP.hpp +++ b/addons/atragmx/XEH_PREP.hpp @@ -24,6 +24,7 @@ PREP(cycle_target_speed_direction); PREP(delete_gun); PREP(evaluate_option_menu_input); PREP(init); +PREP(initGunList); PREP(insert_c1_ballistic_coefficient_data); PREP(insert_muzzle_velocity_data); PREP(parse_input); diff --git a/addons/atragmx/XEH_postInit.sqf b/addons/atragmx/XEH_postInit.sqf index 4fe5bc86f3..9034016212 100644 --- a/addons/atragmx/XEH_postInit.sqf +++ b/addons/atragmx/XEH_postInit.sqf @@ -2,62 +2,7 @@ #include "initKeybinds.sqf" -if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == ATRAGMX_PROFILE_NAMESPACE_VERSION && count (profileNamespace getVariable ["ACE_ATragMX_gunList", []]) > 0) then { - GVAR(gunList) = profileNamespace getVariable "ACE_ATragMX_gunList"; -} else { - // Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Scope Click Unit, Scope Click Number, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model, Muzzle Velocity vs. Temperature Interpolation, C1 Ballistic Coefficient vs. Distance Interpolation, Persistent - GVAR(gunList) = [["12.7x108mm" , 812, 100, 0.0666557, -0.00063800, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" , [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["12.7x99mm AMAX" , 852, 100, 0.0615965, -0.00036645, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" , [[-15,833],[0,840],[10,847],[15,852],[25,866],[30,875],[35,886]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["12.7x99mm" , 892, 100, 0.0588284, -0.00057503, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" , [[-15,873],[0,880],[10,887],[15,892],[25,906],[30,915],[35,926]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["12.7x54mm" , 299, 100, 0.3406920, -0.00019268, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" , [[-15,297],[0,298],[10,299],[15,299],[25,301],[30,302],[35,303]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - [".50 Beowulf" , 562, 100, 0.1262000, -0.00202645, 3.81, 0, 2, 10, 120, 0, 0, 21.71, 12.7, 50.80, 0.210, 1, "ASM" , [[-15,560],[0,561],[10,562],[15,562],[25,564],[30,565],[35,566]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - [".408 CheyTac 305gr", 1059, 100, 0.0482146, -0.00063655, 3.81, 0, 2, 10, 120, 0, 0, 19.76, 10.4, 33.02, 0.569, 1, "ICAO", [[-15,1040],[0,1047],[10,1054],[15,1059],[25,1073],[30,1082],[35,1093]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".408 CheyTac 419gr", 859, 100, 0.0611842, -0.00044958, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.866, 1, "ICAO", [[-15,840],[0,847],[10,854],[15,859],[25,873],[30,882],[35,893]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["9.3×64mm" , 862, 100, 0.0627652, -0.00108571, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" , [[-15,843],[0,850],[10,857],[15,862],[25,876],[30,885],[35,896]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - [".338LM 250gr" , 872, 100, 0.0604821, -0.00059133, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.645, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".338LM 300gr" , 792, 100, 0.0685883, -0.00052190, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.759, 1, "ICAO", [[-15,773],[0,780],[10,787],[15,792],[25,806],[30,815],[35,826]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".338LM API526" , 872, 100, 0.0602535, -0.00069611, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.760, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - [".300WM Mk248 Mod0" , 857, 100, 0.0621425, -0.00070530, 3.81, 0, 2, 10, 120, 0, 0, 12.31, 7.80, 25.40, 0.537, 1, "ICAO", [[-15,838],[0,845],[10,852],[15,857],[25,871],[30,880],[35,891]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".300WM Mk248 Mod1" , 839, 100, 0.0637038, -0.00061188, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.619, 1, "ICAO", [[-15,820],[0,827],[10,834],[15,839],[25,853],[30,862],[35,873]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - [".300WM Berger OTM" , 792, 100, 0.0686968, -0.00053733, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.715, 1, "ICAO", [[-15,773],[0,780],[10,787],[15,792],[25,806],[30,815],[35,826]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["7.62x54mmR" , 812, 100, 0.0678441, -0.00100023, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO", [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["7.62x51mm M80" , 802, 100, 0.0690229, -0.00100957, 3.81, 0, 2, 10, 120, 0, 0, 9.461, 7.82, 25.40, 0.398, 1, "ICAO", [[-15,783],[0,790],[10,797],[15,802],[25,816],[30,825],[35,836]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm M118LR" , 757, 100, 0.0739989, -0.00082828, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.482, 1, "ICAO", [[-15,738],[0,745],[10,752],[15,757],[25,771],[30,780],[35,791]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm Mk316" , 781, 100, 0.0709422, -0.00082029, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.483, 1, "ICAO", [[-15,777],[0,778],[10,779],[15,781],[25,783],[30,785],[35,787]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm Mk319" , 900, 100, 0.0593025, -0.00102338, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO", [[-15,898],[0,899],[10,900],[15,900],[25,902],[30,903],[35,904]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm M993" , 912, 100, 0.0585007, -0.00107148, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO", [[-15,893],[0,900],[10,907],[15,912],[25,926],[30,935],[35,946]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["7.62x51mm Subsonic", 314, 100, 0.3168140, -0.00049899, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.502, 1, "ICAO", [[-15,312],[0,313],[10,314],[15,314],[25,316],[30,317],[35,318]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["7.62x39mm" , 708, 100, 0.0846559, -0.00151621, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 7.82, 25.40, 0.275, 1, "ICAO", [[-15,689],[0,696],[10,703],[15,708],[25,722],[30,731],[35,742]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["6.5x39mm" , 766, 100, 0.0725986, -0.00075308, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.524, 1, "ICAO", [[-15,747],[0,754],[10,761],[15,766],[25,780],[30,789],[35,800]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["6.5x47mm Lapua" , 767, 100, 0.0722256, -0.00067037, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.577, 1, "ICAO", [[-15,748],[0,755],[10,762],[15,767],[25,781],[30,790],[35,801]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["6.5mm Creedmor" , 822, 100, 0.0655022, -0.00060887, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.632, 1, "ICAO", [[-15,803],[0,810],[10,817],[15,822],[25,836],[30,845],[35,856]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["5.8x42mm DBP87" , 942, 100, 0.0566639, -0.00117956, 3.81, 0, 2, 10, 120, 0, 0, 4.150, 5.99, 24.40, 0.313, 1, "ICAO", [[-15,923],[0,930],[10,937],[15,942],[25,956],[30,965],[35,976]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["5.56x45mm M855" , 862, 100, 0.0635456, -0.00126466, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.302, 1, "ASM" , [[-15,843],[0,849],[10,857],[15,862],[25,876],[30,885],[35,898]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["5.56x45mm Mk262" , 812, 100, 0.0682606, -0.00109563, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" , [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["5.56x45mm Mk318" , 872, 100, 0.0624569, -0.00123318, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" , [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - ["5.56x45mm M995" , 861, 100, 0.0635355, -0.00123272, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" , [[-15,842],[0,849],[10,856],[15,861],[25,875],[30,884],[35,895]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], - - ["5.45x39mm 7N6M" , 727, 100, 0.0801269, -0.00116278, 3.81, 0, 2, 10, 120, 0, 0, 3.428, 5.59, 16.00, 0.336, 1, "ICAO", [[-15,708],[0,715],[10,722],[15,727],[25,741],[30,750],[35,761]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true]]; - - [] call FUNC(clear_user_data); - profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)]; -}; - -[] call FUNC(init); -[] call FUNC(restore_user_data); -[] call FUNC(read_gun_list_entries_from_config); +GVAR(active) = false; +GVAR(initialised) = false; [QEGVAR(vector,rangefinderData), {_this call FUNC(sord)}] call CBA_fnc_addEventHandler; diff --git a/addons/atragmx/functions/fnc_add_new_gun.sqf b/addons/atragmx/functions/fnc_add_new_gun.sqf index 3be23920bc..729649dc5d 100644 --- a/addons/atragmx/functions/fnc_add_new_gun.sqf +++ b/addons/atragmx/functions/fnc_add_new_gun.sqf @@ -6,7 +6,7 @@ * Nothing * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_add_new_gun diff --git a/addons/atragmx/functions/fnc_calculate_distance_at_velocity.sqf b/addons/atragmx/functions/fnc_calculate_distance_at_velocity.sqf index 9641804fbe..450ecc8ab3 100644 --- a/addons/atragmx/functions/fnc_calculate_distance_at_velocity.sqf +++ b/addons/atragmx/functions/fnc_calculate_distance_at_velocity.sqf @@ -3,10 +3,10 @@ * Calculates distance at which the bullet velocity drops below the threshold velocity * * Arguments: - * theshold velocity + * theshold velocity * * Return Value: - * distance * * Example: * 403 call ace_atragmx_fnc_calculate_distance_at_velocity diff --git a/addons/atragmx/functions/fnc_calculate_range_card.sqf b/addons/atragmx/functions/fnc_calculate_range_card.sqf index b72c38e756..837a46079f 100644 --- a/addons/atragmx/functions/fnc_calculate_range_card.sqf +++ b/addons/atragmx/functions/fnc_calculate_range_card.sqf @@ -3,10 +3,10 @@ * Calculates the range card output based on the current data set * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_calculate_range_card diff --git a/addons/atragmx/functions/fnc_calculate_target_range_assist.sqf b/addons/atragmx/functions/fnc_calculate_target_range_assist.sqf index be21a09927..3a1bd879f1 100644 --- a/addons/atragmx/functions/fnc_calculate_target_range_assist.sqf +++ b/addons/atragmx/functions/fnc_calculate_target_range_assist.sqf @@ -3,10 +3,10 @@ * Calculates the target range and updates the output fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_calculate_target_range_assist @@ -74,7 +74,7 @@ switch (_this) do { if (_estRange > 0) then { _imageSize = atan(_targetSize / _estRange); }; - + switch (GVAR(rangeAssistImageSizeUnit)) do { case 0: { _imageSize = _imageSize * 6400 / 360; @@ -93,7 +93,7 @@ switch (_this) do { if (tan(_imageSize) != 0) then { _estRange = _targetSize / tan(_imageSize); }; - + ctrlSetText [7013, Str(Round(_estRange))]; }; }; diff --git a/addons/atragmx/functions/fnc_calculate_target_solution.sqf b/addons/atragmx/functions/fnc_calculate_target_solution.sqf index 2cc3973c47..f7a4750223 100644 --- a/addons/atragmx/functions/fnc_calculate_target_solution.sqf +++ b/addons/atragmx/functions/fnc_calculate_target_solution.sqf @@ -3,10 +3,10 @@ * Calculates the fireing solution and updates the result input/output fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_calculate_target_solution diff --git a/addons/atragmx/functions/fnc_calculate_target_speed_assist.sqf b/addons/atragmx/functions/fnc_calculate_target_speed_assist.sqf index c3a4dac24f..7b18559b77 100644 --- a/addons/atragmx/functions/fnc_calculate_target_speed_assist.sqf +++ b/addons/atragmx/functions/fnc_calculate_target_speed_assist.sqf @@ -3,10 +3,10 @@ * Calculates the target speed and updates the output fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_calculate_target_speed_assist diff --git a/addons/atragmx/functions/fnc_calculate_truing_drop.sqf b/addons/atragmx/functions/fnc_calculate_truing_drop.sqf index 38d19456da..d60f5b50e3 100644 --- a/addons/atragmx/functions/fnc_calculate_truing_drop.sqf +++ b/addons/atragmx/functions/fnc_calculate_truing_drop.sqf @@ -6,7 +6,7 @@ * parse input * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_calculate_truing_drop @@ -33,7 +33,7 @@ if (_parseInput) then { _subsonicRange = Round(_subsonicRange); _subsonicRange = _transonicRange max _subsonicRange; - + _transonicDrop = -100 max parseNumber(ctrlText 18013) min 100; _subsonicDrop = -100 max parseNumber(ctrlText 18014) min 100; private _dropUnit = GVAR(currentScopeUnit); @@ -56,7 +56,7 @@ if (_parseInput) then { }; _transonicDrop = Round(_transonicDrop * 100) / 100; _subsonicDrop = Round(_subsonicDrop * 100) / 100; - + _subsonicDrop = _transonicDrop max _subsonicDrop; }; @@ -65,7 +65,7 @@ if ((GVAR(truingDropDropData) select 0) == 0 || {!([_transonicRange, _subsonicRa call FUNC(calculate_target_solution); }; private _solutionInput = +GVAR(targetSolutionInput); - + if (_transonicRange == 0) then { _transonicRange = Round(403 call FUNC(calculate_distance_at_velocity)); }; diff --git a/addons/atragmx/functions/fnc_can_show.sqf b/addons/atragmx/functions/fnc_can_show.sqf index 7054e85cf9..bf05edee98 100644 --- a/addons/atragmx/functions/fnc_can_show.sqf +++ b/addons/atragmx/functions/fnc_can_show.sqf @@ -3,7 +3,7 @@ * Tests if the ATragMX dialog can be shown * * Arguments: - * Nothing + * None * * Return Value: * can_show diff --git a/addons/atragmx/functions/fnc_change_gun.sqf b/addons/atragmx/functions/fnc_change_gun.sqf index b6e5e24658..53167f87b1 100644 --- a/addons/atragmx/functions/fnc_change_gun.sqf +++ b/addons/atragmx/functions/fnc_change_gun.sqf @@ -8,7 +8,7 @@ * update display * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_change_gun diff --git a/addons/atragmx/functions/fnc_change_target_slot.sqf b/addons/atragmx/functions/fnc_change_target_slot.sqf index 7c660ff7de..158e31ad87 100644 --- a/addons/atragmx/functions/fnc_change_target_slot.sqf +++ b/addons/atragmx/functions/fnc_change_target_slot.sqf @@ -6,7 +6,7 @@ * target * * Return Value: - * Nothing + * None * * Example: * 2 call ace_atragmx_fnc_change_target_slot diff --git a/addons/atragmx/functions/fnc_clear_c1_ballistic_coefficient_data.sqf b/addons/atragmx/functions/fnc_clear_c1_ballistic_coefficient_data.sqf index c6f2d47134..a795b74c70 100644 --- a/addons/atragmx/functions/fnc_clear_c1_ballistic_coefficient_data.sqf +++ b/addons/atragmx/functions/fnc_clear_c1_ballistic_coefficient_data.sqf @@ -3,10 +3,10 @@ * Clears the c1 ballistic coefficient data fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_clear_c1_ballistic_coefficient_data diff --git a/addons/atragmx/functions/fnc_clear_muzzle_velocity_data.sqf b/addons/atragmx/functions/fnc_clear_muzzle_velocity_data.sqf index d76fa5864b..6f4472c550 100644 --- a/addons/atragmx/functions/fnc_clear_muzzle_velocity_data.sqf +++ b/addons/atragmx/functions/fnc_clear_muzzle_velocity_data.sqf @@ -3,10 +3,10 @@ * Clears the muzzle velocity data fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_clear_muzzle_velocity_data diff --git a/addons/atragmx/functions/fnc_clear_user_data.sqf b/addons/atragmx/functions/fnc_clear_user_data.sqf index faa9af07f7..727c8da107 100644 --- a/addons/atragmx/functions/fnc_clear_user_data.sqf +++ b/addons/atragmx/functions/fnc_clear_user_data.sqf @@ -3,10 +3,10 @@ * Removes all user data from the profileNamespace * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_clear_user_data @@ -43,4 +43,4 @@ profileNamespace setVariable ["ACE_ATragMX_targetRange", nil]; profileNamespace setVariable ["ACE_ATragMX_rangeCardStartRange", nil]; profileNamespace setVariable ["ACE_ATragMX_rangeCardEndRange", nil]; profileNamespace setVariable ["ACE_ATragMX_rangeCardIncrement", nil]; -profileNamespace setVariable ["ACE_ATragMX_rangeCardCurrentColumn", nil]; \ No newline at end of file +profileNamespace setVariable ["ACE_ATragMX_rangeCardCurrentColumn", nil]; diff --git a/addons/atragmx/functions/fnc_create_dialog.sqf b/addons/atragmx/functions/fnc_create_dialog.sqf index 322f135b45..c342bb1eb0 100644 --- a/addons/atragmx/functions/fnc_create_dialog.sqf +++ b/addons/atragmx/functions/fnc_create_dialog.sqf @@ -3,10 +3,10 @@ * Creates the ATragMX dialog * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_create_dialog @@ -18,6 +18,16 @@ #define __dsp (uiNamespace getVariable "ATragMX_Display") #define __ctrlBackground (__dsp displayCtrl 720000) +// Do all initialisation now +if (!GVAR(initialised)) then { + [] call FUNC(initGunList); + [] call FUNC(init); + [] call FUNC(restore_user_data); + [] call FUNC(read_gun_list_entries_from_config); + GVAR(initialised) = true; + TRACE_1("",GVAR(initialised)); +}; + if (GVAR(active)) exitWith { false }; if (underwater ACE_player) exitWith { false }; if (!("ACE_ATragMX" in (uniformItems ACE_player)) && !("ACE_ATragMX" in (vestItems ACE_player))) exitWith { false }; diff --git a/addons/atragmx/functions/fnc_cycle_gun_list.sqf b/addons/atragmx/functions/fnc_cycle_gun_list.sqf index 1cc22abb45..550bc624f2 100644 --- a/addons/atragmx/functions/fnc_cycle_gun_list.sqf +++ b/addons/atragmx/functions/fnc_cycle_gun_list.sqf @@ -6,7 +6,7 @@ * step * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_cycle_scope_unit diff --git a/addons/atragmx/functions/fnc_cycle_image_size_units.sqf b/addons/atragmx/functions/fnc_cycle_image_size_units.sqf index ce91f818c6..2981a9a73e 100644 --- a/addons/atragmx/functions/fnc_cycle_image_size_units.sqf +++ b/addons/atragmx/functions/fnc_cycle_image_size_units.sqf @@ -6,7 +6,7 @@ * step * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_cycle_image_size_units diff --git a/addons/atragmx/functions/fnc_cycle_num_ticks_units.sqf b/addons/atragmx/functions/fnc_cycle_num_ticks_units.sqf index 49b4ad0ffa..fc4746ee56 100644 --- a/addons/atragmx/functions/fnc_cycle_num_ticks_units.sqf +++ b/addons/atragmx/functions/fnc_cycle_num_ticks_units.sqf @@ -6,7 +6,7 @@ * step * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_cycle_num_ticks_units diff --git a/addons/atragmx/functions/fnc_cycle_range_card_columns.sqf b/addons/atragmx/functions/fnc_cycle_range_card_columns.sqf index dc572ede19..dfba1f0574 100644 --- a/addons/atragmx/functions/fnc_cycle_range_card_columns.sqf +++ b/addons/atragmx/functions/fnc_cycle_range_card_columns.sqf @@ -3,10 +3,10 @@ * Cycles through the range card columns * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_cycle_range_card_columns diff --git a/addons/atragmx/functions/fnc_cycle_scope_unit.sqf b/addons/atragmx/functions/fnc_cycle_scope_unit.sqf index f1cc9c2219..a2020f4147 100644 --- a/addons/atragmx/functions/fnc_cycle_scope_unit.sqf +++ b/addons/atragmx/functions/fnc_cycle_scope_unit.sqf @@ -3,10 +3,10 @@ * Cycles through the scope units * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_cycle_scope_unit diff --git a/addons/atragmx/functions/fnc_cycle_target_size_units.sqf b/addons/atragmx/functions/fnc_cycle_target_size_units.sqf index f44d2a5343..267d4d5772 100644 --- a/addons/atragmx/functions/fnc_cycle_target_size_units.sqf +++ b/addons/atragmx/functions/fnc_cycle_target_size_units.sqf @@ -6,7 +6,7 @@ * step * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_cycle_target_size_units diff --git a/addons/atragmx/functions/fnc_cycle_target_speed_direction.sqf b/addons/atragmx/functions/fnc_cycle_target_speed_direction.sqf index 568dbcec53..e1e8282440 100644 --- a/addons/atragmx/functions/fnc_cycle_target_speed_direction.sqf +++ b/addons/atragmx/functions/fnc_cycle_target_speed_direction.sqf @@ -3,10 +3,10 @@ * Cycles through the target directions left/right * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_cycle_target_direction diff --git a/addons/atragmx/functions/fnc_delete_gun.sqf b/addons/atragmx/functions/fnc_delete_gun.sqf index c94739035e..55548527f1 100644 --- a/addons/atragmx/functions/fnc_delete_gun.sqf +++ b/addons/atragmx/functions/fnc_delete_gun.sqf @@ -3,10 +3,10 @@ * Deletes the currently selected gun profile from the profileNamespace * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_delete_gun diff --git a/addons/atragmx/functions/fnc_evaluate_option_menu_input.sqf b/addons/atragmx/functions/fnc_evaluate_option_menu_input.sqf index f74f8678a4..2e4c9ef023 100644 --- a/addons/atragmx/functions/fnc_evaluate_option_menu_input.sqf +++ b/addons/atragmx/functions/fnc_evaluate_option_menu_input.sqf @@ -6,7 +6,7 @@ * option menu id * * Return Value: - * Nothing + * None * * Example: * 1 call ace_atragmx_fnc_evaluate_option_menu_input diff --git a/addons/atragmx/functions/fnc_init.sqf b/addons/atragmx/functions/fnc_init.sqf index eda2cc1ee0..48401acb4c 100644 --- a/addons/atragmx/functions/fnc_init.sqf +++ b/addons/atragmx/functions/fnc_init.sqf @@ -3,10 +3,10 @@ * Inits all global variables with the default values * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_init @@ -15,7 +15,6 @@ */ #include "script_component.hpp" -GVAR(active) = false; GVAR(workingMemory) = +(GVAR(gunList) select 0); diff --git a/addons/atragmx/functions/fnc_initGunList.sqf b/addons/atragmx/functions/fnc_initGunList.sqf new file mode 100644 index 0000000000..69efdc68ef --- /dev/null +++ b/addons/atragmx/functions/fnc_initGunList.sqf @@ -0,0 +1,83 @@ +/* + * Author: Ruthberg + * Inits the gun list from user profile + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_atragmx_fnc_initGunList + * + * Public: No + */ +#include "script_component.hpp" + +LOG_2("Trying to load gunlist from profile [Version: %1][Count: %2]", profileNamespace getVariable [ARR_2(QGVAR(profileNamespaceVersion), 'none')], count (profileNamespace getVariable [ARR_2(QGVAR(gunList), [])])); + +private _resetGunList = true; +if ((profileNamespace getVariable ["ACE_ATragMX_profileNamespaceVersion", 0]) == ATRAGMX_PROFILE_NAMESPACE_VERSION && {count (profileNamespace getVariable ["ACE_ATragMX_gunList", []]) > 0}) then { + GVAR(gunList) = profileNamespace getVariable "ACE_ATragMX_gunList"; + _resetGunList = false; + { + // Verify each gun has correct param type + if (!(_x isEqualTypeArray ["", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", [], [], false])) exitWith { + _resetGunList = true; + }; + } forEach GVAR(gunList); +}; + +if (_resetGunList) then { + WARNING("Reseting Profile Gunlist"); + // Profile Name, Muzzle Velocity, Zero Range, Scope Base Angle, AirFriction, Bore Height, Scope Unit, Scope Click Unit, Scope Click Number, Maximum Elevation, Dialed Elevation, Dialed Windage, Mass, Bullet Diameter, Rifle Twist, BC, Drag Model, Atmosphere Model, Muzzle Velocity vs. Temperature Interpolation, C1 Ballistic Coefficient vs. Distance Interpolation, Persistent + GVAR(gunList) = [["12.7x108mm" , 812, 100, 0.0666557, -0.00063800, 3.81, 0, 2, 10, 120, 0, 0, 48.28, 12.7, 38.10, 0.630, 1, "ASM" , [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["12.7x99mm AMAX" , 852, 100, 0.0615965, -0.00036645, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 38.10, 1.050, 1, "ASM" , [[-15,833],[0,840],[10,847],[15,852],[25,866],[30,875],[35,886]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["12.7x99mm" , 892, 100, 0.0588284, -0.00057503, 3.81, 0, 2, 10, 120, 0, 0, 41.92, 12.7, 38.10, 0.670, 1, "ASM" , [[-15,873],[0,880],[10,887],[15,892],[25,906],[30,915],[35,926]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["12.7x54mm" , 299, 100, 0.3406920, -0.00019268, 3.81, 0, 2, 10, 120, 0, 0, 48.60, 12.7, 24.13, 1.050, 1, "ASM" , [[-15,297],[0,298],[10,299],[15,299],[25,301],[30,302],[35,303]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + [".50 Beowulf" , 562, 100, 0.1262000, -0.00202645, 3.81, 0, 2, 10, 120, 0, 0, 21.71, 12.7, 50.80, 0.210, 1, "ASM" , [[-15,560],[0,561],[10,562],[15,562],[25,564],[30,565],[35,566]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + [".408 CheyTac 305gr", 1059, 100, 0.0482146, -0.00063655, 3.81, 0, 2, 10, 120, 0, 0, 19.76, 10.4, 33.02, 0.569, 1, "ICAO", [[-15,1040],[0,1047],[10,1054],[15,1059],[25,1073],[30,1082],[35,1093]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".408 CheyTac 419gr", 859, 100, 0.0611842, -0.00044958, 3.81, 0, 2, 10, 120, 0, 0, 27.15, 10.4, 33.02, 0.866, 1, "ICAO", [[-15,840],[0,847],[10,854],[15,859],[25,873],[30,882],[35,893]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["9.3×64mm" , 862, 100, 0.0627652, -0.00108571, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 9.30, 35.56, 0.368, 1, "ASM" , [[-15,843],[0,850],[10,857],[15,862],[25,876],[30,885],[35,896]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + [".338LM 250gr" , 872, 100, 0.0604821, -0.00059133, 3.81, 0, 2, 10, 120, 0, 0, 16.20, 8.58, 25.40, 0.645, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".338LM 300gr" , 792, 100, 0.0685883, -0.00052190, 3.81, 0, 2, 10, 120, 0, 0, 19.44, 8.58, 25.40, 0.759, 1, "ICAO", [[-15,773],[0,780],[10,787],[15,792],[25,806],[30,815],[35,826]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".338LM API526" , 872, 100, 0.0602535, -0.00069611, 3.81, 0, 2, 10, 120, 0, 0, 16.39, 8.58, 25.40, 0.580, 1, "ICAO", [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + [".300WM Mk248 Mod0" , 857, 100, 0.0621425, -0.00070530, 3.81, 0, 2, 10, 120, 0, 0, 12.31, 7.80, 25.40, 0.537, 1, "ICAO", [[-15,838],[0,845],[10,852],[15,857],[25,871],[30,880],[35,891]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".300WM Mk248 Mod1" , 839, 100, 0.0637038, -0.00061188, 3.81, 0, 2, 10, 120, 0, 0, 14.26, 7.80, 25.40, 0.619, 1, "ICAO", [[-15,820],[0,827],[10,834],[15,839],[25,853],[30,862],[35,873]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + [".300WM Berger OTM" , 792, 100, 0.0686968, -0.00053733, 3.81, 0, 2, 10, 120, 0, 0, 14.90, 7.80, 25.40, 0.715, 1, "ICAO", [[-15,773],[0,780],[10,787],[15,792],[25,806],[30,815],[35,826]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["7.62x54mmR" , 812, 100, 0.0678441, -0.00100023, 3.81, 0, 2, 10, 120, 0, 0, 9.849, 7.92, 24.13, 0.400, 1, "ICAO", [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["7.62x51mm M80" , 802, 100, 0.0690229, -0.00100957, 3.81, 0, 2, 10, 120, 0, 0, 9.461, 7.82, 25.40, 0.398, 1, "ICAO", [[-15,783],[0,790],[10,797],[15,802],[25,816],[30,825],[35,836]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm M118LR" , 757, 100, 0.0739989, -0.00082828, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.482, 1, "ICAO", [[-15,738],[0,745],[10,752],[15,757],[25,771],[30,780],[35,791]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm Mk316" , 781, 100, 0.0709422, -0.00082029, 3.81, 0, 2, 10, 120, 0, 0, 11.34, 7.82, 25.40, 0.483, 1, "ICAO", [[-15,777],[0,778],[10,779],[15,781],[25,783],[30,785],[35,787]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm Mk319" , 900, 100, 0.0593025, -0.00102338, 3.81, 0, 2, 10, 120, 0, 0, 8.424, 7.82, 25.40, 0.377, 1, "ICAO", [[-15,898],[0,899],[10,900],[15,900],[25,902],[30,903],[35,904]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm M993" , 912, 100, 0.0585007, -0.00107148, 3.81, 0, 2, 10, 120, 0, 0, 8.230, 7.82, 25.40, 0.359, 1, "ICAO", [[-15,893],[0,900],[10,907],[15,912],[25,926],[30,935],[35,946]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["7.62x51mm Subsonic", 314, 100, 0.3168140, -0.00049899, 3.81, 0, 2, 10, 120, 0, 0, 12.96, 7.82, 25.40, 0.502, 1, "ICAO", [[-15,312],[0,313],[10,314],[15,314],[25,316],[30,317],[35,318]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["7.62x39mm" , 708, 100, 0.0846559, -0.00151621, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 7.82, 25.40, 0.275, 1, "ICAO", [[-15,689],[0,696],[10,703],[15,708],[25,722],[30,731],[35,742]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["6.5x39mm" , 766, 100, 0.0725986, -0.00075308, 3.81, 0, 2, 10, 120, 0, 0, 7.970, 6.71, 22.86, 0.524, 1, "ICAO", [[-15,747],[0,754],[10,761],[15,766],[25,780],[30,789],[35,800]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["6.5x47mm Lapua" , 767, 100, 0.0722256, -0.00067037, 3.81, 0, 2, 10, 120, 0, 0, 9.007, 6.71, 22.86, 0.577, 1, "ICAO", [[-15,748],[0,755],[10,762],[15,767],[25,781],[30,790],[35,801]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["6.5mm Creedmor" , 822, 100, 0.0655022, -0.00060887, 3.81, 0, 2, 10, 120, 0, 0, 9.072, 6.71, 22.86, 0.632, 1, "ICAO", [[-15,803],[0,810],[10,817],[15,822],[25,836],[30,845],[35,856]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["5.8x42mm DBP87" , 942, 100, 0.0566639, -0.00117956, 3.81, 0, 2, 10, 120, 0, 0, 4.150, 5.99, 24.40, 0.313, 1, "ICAO", [[-15,923],[0,930],[10,937],[15,942],[25,956],[30,965],[35,976]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["5.56x45mm M855" , 862, 100, 0.0635456, -0.00126466, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.302, 1, "ASM" , [[-15,843],[0,849],[10,857],[15,862],[25,876],[30,885],[35,898]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["5.56x45mm Mk262" , 812, 100, 0.0682606, -0.00109563, 3.81, 0, 2, 10, 120, 0, 0, 4.990, 5.70, 17.78, 0.361, 1, "ASM" , [[-15,793],[0,800],[10,807],[15,812],[25,826],[30,835],[35,846]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["5.56x45mm Mk318" , 872, 100, 0.0624569, -0.00123318, 3.81, 0, 2, 10, 120, 0, 0, 4.018, 5.70, 17.78, 0.307, 1, "ASM" , [[-15,853],[0,860],[10,867],[15,872],[25,886],[30,895],[35,906]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + ["5.56x45mm M995" , 861, 100, 0.0635355, -0.00123272, 3.81, 0, 2, 10, 120, 0, 0, 4.536, 5.70, 17.78, 0.310, 1, "ASM" , [[-15,842],[0,849],[10,856],[15,861],[25,875],[30,884],[35,895]] , [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true], + + ["5.45x39mm 7N6M" , 727, 100, 0.0801269, -0.00116278, 3.81, 0, 2, 10, 120, 0, 0, 3.428, 5.59, 16.00, 0.336, 1, "ICAO", [[-15,708],[0,715],[10,722],[15,727],[25,741],[30,750],[35,761]], [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]], true]]; + + [] call FUNC(clear_user_data); + profileNamespace setVariable ["ACE_ATragMX_gunList", GVAR(gunList)]; +}; diff --git a/addons/atragmx/functions/fnc_insert_c1_ballistic_coefficient_data.sqf b/addons/atragmx/functions/fnc_insert_c1_ballistic_coefficient_data.sqf index 5b03c11475..ba5a781813 100644 --- a/addons/atragmx/functions/fnc_insert_c1_ballistic_coefficient_data.sqf +++ b/addons/atragmx/functions/fnc_insert_c1_ballistic_coefficient_data.sqf @@ -8,7 +8,7 @@ * c1 ballistic coefficient - * * Return Value: - * Nothing + * None * * Example: * [800, 0.485] call ace_atragmx_fnc_insert_c1_ballistic_coefficient_data diff --git a/addons/atragmx/functions/fnc_insert_muzzle_velocity_data.sqf b/addons/atragmx/functions/fnc_insert_muzzle_velocity_data.sqf index 1eb25b2f62..43cd936beb 100644 --- a/addons/atragmx/functions/fnc_insert_muzzle_velocity_data.sqf +++ b/addons/atragmx/functions/fnc_insert_muzzle_velocity_data.sqf @@ -7,7 +7,7 @@ * muzzle velocity - * * Return Value: - * Nothing + * None * * Example: * [10, 800] call ace_atragmx_fnc_insert_muzzle_velocity_data diff --git a/addons/atragmx/functions/fnc_on_close_dialog.sqf b/addons/atragmx/functions/fnc_on_close_dialog.sqf index fca60574a9..1c96828b1a 100644 --- a/addons/atragmx/functions/fnc_on_close_dialog.sqf +++ b/addons/atragmx/functions/fnc_on_close_dialog.sqf @@ -1,5 +1,21 @@ +/* + * Author: ACE-Team + * On close Dialog + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_atragmx_fnc_on_close_dialog + * + * Public: No + */ + #include "script_component.hpp" uiNamespace setVariable ['ATragMX_Display', nil]; GVAR(active) = false; -[GVAR(DialogPFH)] call CBA_fnc_removePerFrameHandler; \ No newline at end of file +[GVAR(DialogPFH)] call CBA_fnc_removePerFrameHandler; diff --git a/addons/atragmx/functions/fnc_parse_input.sqf b/addons/atragmx/functions/fnc_parse_input.sqf index 38310edfae..b2ca70f31f 100644 --- a/addons/atragmx/functions/fnc_parse_input.sqf +++ b/addons/atragmx/functions/fnc_parse_input.sqf @@ -3,10 +3,10 @@ * Parses all input fields in the gun-, atmosphere- and target column, the result input fields and the muzzle velocity data input fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_parse_input diff --git a/addons/atragmx/functions/fnc_read_gun_list_entries_from_config.sqf b/addons/atragmx/functions/fnc_read_gun_list_entries_from_config.sqf index 0408b0e497..4d99a5637f 100644 --- a/addons/atragmx/functions/fnc_read_gun_list_entries_from_config.sqf +++ b/addons/atragmx/functions/fnc_read_gun_list_entries_from_config.sqf @@ -3,10 +3,10 @@ * Reads gun list entries from the config and appends them to the gun list * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_read_gun_list_entries_from_config @@ -110,10 +110,10 @@ private _validate_preset = { { private _preset = _x >> "preset"; - + if (isArray(_preset)) then { private _gun = getArray _preset; - + if (_gun call _validate_preset) then { _gun set [0, (_gun select 0) select [0, 14]]; _gun set [20, false]; diff --git a/addons/atragmx/functions/fnc_recalculate_c1_ballistic_coefficient.sqf b/addons/atragmx/functions/fnc_recalculate_c1_ballistic_coefficient.sqf index 028a06fa4a..e7ec8bf5a2 100644 --- a/addons/atragmx/functions/fnc_recalculate_c1_ballistic_coefficient.sqf +++ b/addons/atragmx/functions/fnc_recalculate_c1_ballistic_coefficient.sqf @@ -7,7 +7,7 @@ * update display * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_recalculate_c1_ballistic_coefficient diff --git a/addons/atragmx/functions/fnc_recalculate_muzzle_velocity.sqf b/addons/atragmx/functions/fnc_recalculate_muzzle_velocity.sqf index 5830ba7683..248c039969 100644 --- a/addons/atragmx/functions/fnc_recalculate_muzzle_velocity.sqf +++ b/addons/atragmx/functions/fnc_recalculate_muzzle_velocity.sqf @@ -7,7 +7,7 @@ * update display * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_recalculate_muzzle_velocity diff --git a/addons/atragmx/functions/fnc_reset_relative_click_memory.sqf b/addons/atragmx/functions/fnc_reset_relative_click_memory.sqf index 489e832ea2..85d8ff6bc6 100644 --- a/addons/atragmx/functions/fnc_reset_relative_click_memory.sqf +++ b/addons/atragmx/functions/fnc_reset_relative_click_memory.sqf @@ -3,10 +3,10 @@ * Resets the relative click memory and updates the result input/output fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_reset_relative_click_memory diff --git a/addons/atragmx/functions/fnc_restore_atmo_default.sqf b/addons/atragmx/functions/fnc_restore_atmo_default.sqf index 08b7c56d86..560c0da875 100644 --- a/addons/atragmx/functions/fnc_restore_atmo_default.sqf +++ b/addons/atragmx/functions/fnc_restore_atmo_default.sqf @@ -3,10 +3,10 @@ * Restores the atmospheric data defaults * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_restore_atmo_default diff --git a/addons/atragmx/functions/fnc_restore_truing_drop.sqf b/addons/atragmx/functions/fnc_restore_truing_drop.sqf index b8541152a0..a3fb516f23 100644 --- a/addons/atragmx/functions/fnc_restore_truing_drop.sqf +++ b/addons/atragmx/functions/fnc_restore_truing_drop.sqf @@ -6,7 +6,7 @@ * update display * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_restore_truing_drop diff --git a/addons/atragmx/functions/fnc_restore_user_data.sqf b/addons/atragmx/functions/fnc_restore_user_data.sqf index de91a7cd0e..cf7f2e2bef 100644 --- a/addons/atragmx/functions/fnc_restore_user_data.sqf +++ b/addons/atragmx/functions/fnc_restore_user_data.sqf @@ -3,10 +3,10 @@ * Reads user data from profileNamespace * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_restore_user_data diff --git a/addons/atragmx/functions/fnc_save_gun.sqf b/addons/atragmx/functions/fnc_save_gun.sqf index 73e26ee5fd..e26187b231 100644 --- a/addons/atragmx/functions/fnc_save_gun.sqf +++ b/addons/atragmx/functions/fnc_save_gun.sqf @@ -3,10 +3,10 @@ * Saves the currently select gun profile into the profileNamespace * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_save_gun diff --git a/addons/atragmx/functions/fnc_shift_c1_ballistic_coefficient_data.sqf b/addons/atragmx/functions/fnc_shift_c1_ballistic_coefficient_data.sqf index 241d7fe7e0..89667e25b9 100644 --- a/addons/atragmx/functions/fnc_shift_c1_ballistic_coefficient_data.sqf +++ b/addons/atragmx/functions/fnc_shift_c1_ballistic_coefficient_data.sqf @@ -6,7 +6,7 @@ * ballistic coefficient - * * Return Value: - * Nothing + * None * * Example: * 10 call ace_atragmx_fnc_shift_c1_ballistic_coefficient_data diff --git a/addons/atragmx/functions/fnc_shift_muzzle_velocity_data.sqf b/addons/atragmx/functions/fnc_shift_muzzle_velocity_data.sqf index 4bbd9337fd..75fcc9c3a6 100644 --- a/addons/atragmx/functions/fnc_shift_muzzle_velocity_data.sqf +++ b/addons/atragmx/functions/fnc_shift_muzzle_velocity_data.sqf @@ -6,7 +6,7 @@ * velocity - * * Return Value: - * Nothing + * None * * Example: * 10 call ace_atragmx_fnc_shift_muzzle_velocity_data diff --git a/addons/atragmx/functions/fnc_show_add_new_gun.sqf b/addons/atragmx/functions/fnc_show_add_new_gun.sqf index b5b0f29a18..a5d4fd8b8b 100644 --- a/addons/atragmx/functions/fnc_show_add_new_gun.sqf +++ b/addons/atragmx/functions/fnc_show_add_new_gun.sqf @@ -6,10 +6,10 @@ * visible - * * Return Value: - * Nothing + * None * * Example: - * call ace_atragmx_fnc_show_add_new_gun + * false call ace_atragmx_fnc_show_add_new_gun * * Public: No */ diff --git a/addons/atragmx/functions/fnc_show_atmo_env_data.sqf b/addons/atragmx/functions/fnc_show_atmo_env_data.sqf index 56f75f7844..75dcaad502 100644 --- a/addons/atragmx/functions/fnc_show_atmo_env_data.sqf +++ b/addons/atragmx/functions/fnc_show_atmo_env_data.sqf @@ -6,7 +6,7 @@ * visible - * * Return Value: - * Nothing + * None * * Example: * false call ace_atragmx_fnc_show_atmo_env_data diff --git a/addons/atragmx/functions/fnc_show_c1_ballistic_coefficient_data.sqf b/addons/atragmx/functions/fnc_show_c1_ballistic_coefficient_data.sqf index 9ac13aef86..797f0498fe 100644 --- a/addons/atragmx/functions/fnc_show_c1_ballistic_coefficient_data.sqf +++ b/addons/atragmx/functions/fnc_show_c1_ballistic_coefficient_data.sqf @@ -6,7 +6,7 @@ * visible - * * Return Value: - * Nothing + * None * * Example: * false call ace_atragmx_fnc_show_c1_ballistic_coefficient_data diff --git a/addons/atragmx/functions/fnc_show_gun_ammo_data.sqf b/addons/atragmx/functions/fnc_show_gun_ammo_data.sqf index dfab6da238..c6fb288acc 100644 --- a/addons/atragmx/functions/fnc_show_gun_ammo_data.sqf +++ b/addons/atragmx/functions/fnc_show_gun_ammo_data.sqf @@ -6,7 +6,7 @@ * visible - * * Return Value: - * Nothing + * None * * Example: * false call ace_atragmx_fnc_show_gun_ammo_data diff --git a/addons/atragmx/functions/fnc_show_gun_list.sqf b/addons/atragmx/functions/fnc_show_gun_list.sqf index ce3b3bae3a..e6c8156d26 100644 --- a/addons/atragmx/functions/fnc_show_gun_list.sqf +++ b/addons/atragmx/functions/fnc_show_gun_list.sqf @@ -6,10 +6,10 @@ * visible - * * Return Value: - * Nothing + * None * * Example: - * call ace_atragmx_fnc_show_gun_list + * false call ace_atragmx_fnc_show_gun_list * * Public: No */ diff --git a/addons/atragmx/functions/fnc_show_main_page.sqf b/addons/atragmx/functions/fnc_show_main_page.sqf index 591554d632..6b2259c72a 100644 --- a/addons/atragmx/functions/fnc_show_main_page.sqf +++ b/addons/atragmx/functions/fnc_show_main_page.sqf @@ -6,10 +6,10 @@ * visible - * * Return Value: - * Nothing + * None * * Example: - * call ace_atragmx_fnc_show_main_page + * false call ace_atragmx_fnc_show_main_page * * Public: No */ diff --git a/addons/atragmx/functions/fnc_show_muzzle_velocity_data.sqf b/addons/atragmx/functions/fnc_show_muzzle_velocity_data.sqf index 8a5d39f2b5..20c7bf1826 100644 --- a/addons/atragmx/functions/fnc_show_muzzle_velocity_data.sqf +++ b/addons/atragmx/functions/fnc_show_muzzle_velocity_data.sqf @@ -6,7 +6,7 @@ * visible - * * Return Value: - * Nothing + * None * * Example: * false call ace_atragmx_fnc_show_muzzle_velocity_data diff --git a/addons/atragmx/functions/fnc_show_range_card.sqf b/addons/atragmx/functions/fnc_show_range_card.sqf index 7709589beb..d2dc368bb4 100644 --- a/addons/atragmx/functions/fnc_show_range_card.sqf +++ b/addons/atragmx/functions/fnc_show_range_card.sqf @@ -6,10 +6,10 @@ * visible - * * Return Value: - * Nothing + * None * * Example: - * call ace_atragmx_fnc_show_range_card + * false call ace_atragmx_fnc_show_range_card * * Public: No */ diff --git a/addons/atragmx/functions/fnc_show_range_card_setup.sqf b/addons/atragmx/functions/fnc_show_range_card_setup.sqf index f4d55f33d1..6597e4ee7e 100644 --- a/addons/atragmx/functions/fnc_show_range_card_setup.sqf +++ b/addons/atragmx/functions/fnc_show_range_card_setup.sqf @@ -6,10 +6,10 @@ * visible - * * Return Value: - * Nothing + * None * * Example: - * call ace_atragmx_fnc_show_range_card_setup + * false call ace_atragmx_fnc_show_range_card_setup * * Public: No */ diff --git a/addons/atragmx/functions/fnc_show_solution_setup.sqf b/addons/atragmx/functions/fnc_show_solution_setup.sqf index 761df45e6f..83476228f4 100644 --- a/addons/atragmx/functions/fnc_show_solution_setup.sqf +++ b/addons/atragmx/functions/fnc_show_solution_setup.sqf @@ -6,7 +6,7 @@ * visible - * * Return Value: - * Nothing + * None * * Example: * false call ace_atragmx_fnc_show_solution_setup diff --git a/addons/atragmx/functions/fnc_show_target_data.sqf b/addons/atragmx/functions/fnc_show_target_data.sqf index f1b432edf8..7a0845f862 100644 --- a/addons/atragmx/functions/fnc_show_target_data.sqf +++ b/addons/atragmx/functions/fnc_show_target_data.sqf @@ -6,7 +6,7 @@ * visible - * * Return Value: - * Nothing + * None * * Example: * false call ace_atragmx_fnc_show_target_data diff --git a/addons/atragmx/functions/fnc_show_target_range_assist.sqf b/addons/atragmx/functions/fnc_show_target_range_assist.sqf index d910271aa4..0f6c7bad04 100644 --- a/addons/atragmx/functions/fnc_show_target_range_assist.sqf +++ b/addons/atragmx/functions/fnc_show_target_range_assist.sqf @@ -6,10 +6,10 @@ * visible - * * Return Value: - * Nothing + * None * * Example: - * call ace_atragmx_fnc_show_target_range_assist + * false call ace_atragmx_fnc_show_target_range_assist * * Public: No */ diff --git a/addons/atragmx/functions/fnc_show_target_speed_assist.sqf b/addons/atragmx/functions/fnc_show_target_speed_assist.sqf index c5a23eb1b7..ac99a4e76e 100644 --- a/addons/atragmx/functions/fnc_show_target_speed_assist.sqf +++ b/addons/atragmx/functions/fnc_show_target_speed_assist.sqf @@ -6,10 +6,10 @@ * visible - * * Return Value: - * Nothing + * None * * Example: - * call ace_atragmx_fnc_show_target_speed_assist + * false call ace_atragmx_fnc_show_target_speed_assist * * Public: No */ diff --git a/addons/atragmx/functions/fnc_show_target_speed_assist_timer.sqf b/addons/atragmx/functions/fnc_show_target_speed_assist_timer.sqf index a731dd194d..cb28390ff6 100644 --- a/addons/atragmx/functions/fnc_show_target_speed_assist_timer.sqf +++ b/addons/atragmx/functions/fnc_show_target_speed_assist_timer.sqf @@ -6,10 +6,10 @@ * visible - * * Return Value: - * Nothing + * None * * Example: - * call ace_atragmx_fnc_show_target_speed_assist_timer + * false call ace_atragmx_fnc_show_target_speed_assist_timer * * Public: No */ diff --git a/addons/atragmx/functions/fnc_show_truing_drop.sqf b/addons/atragmx/functions/fnc_show_truing_drop.sqf index d4b7ce551f..644fe834b6 100644 --- a/addons/atragmx/functions/fnc_show_truing_drop.sqf +++ b/addons/atragmx/functions/fnc_show_truing_drop.sqf @@ -6,10 +6,10 @@ * visible - * * Return Value: - * Nothing + * None * * Example: - * call ace_atragmx_fnc_show_truing_drop + * false call ace_atragmx_fnc_show_truing_drop * * Public: No */ diff --git a/addons/atragmx/functions/fnc_sord.sqf b/addons/atragmx/functions/fnc_sord.sqf index b342072018..792d727c70 100644 --- a/addons/atragmx/functions/fnc_sord.sqf +++ b/addons/atragmx/functions/fnc_sord.sqf @@ -8,7 +8,7 @@ * 2: Inclination (Degrees) * * Return Value: - * Nothing + * None * * Example: * [1000, 45, 1] call ace_microdagr_fnc_recieveRangefinderData @@ -17,6 +17,8 @@ */ #include "script_component.hpp" +if (!GVAR(initialised)) exitWith {}; + params ["_slopeDistance", "_azimuth", "_inclination"]; GVAR(inclinationAngle) set [GVAR(currentTarget), round(_inclination)]; diff --git a/addons/atragmx/functions/fnc_store_gun_list.sqf b/addons/atragmx/functions/fnc_store_gun_list.sqf index 3e569f8a59..b3969837d2 100644 --- a/addons/atragmx/functions/fnc_store_gun_list.sqf +++ b/addons/atragmx/functions/fnc_store_gun_list.sqf @@ -3,10 +3,10 @@ * Saves the persistent gun list entries into profileNamespace * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_store_user_data diff --git a/addons/atragmx/functions/fnc_store_user_data.sqf b/addons/atragmx/functions/fnc_store_user_data.sqf index a0b3f9fe80..264ac07458 100644 --- a/addons/atragmx/functions/fnc_store_user_data.sqf +++ b/addons/atragmx/functions/fnc_store_user_data.sqf @@ -3,10 +3,10 @@ * Saves user data into profileNamespace * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_store_user_data @@ -42,4 +42,4 @@ profileNamespace setVariable ["ACE_ATragMX_targetRange", GVAR(targetRange)]; profileNamespace setVariable ["ACE_ATragMX_rangeCardStartRange", GVAR(rangeCardStartRange)]; profileNamespace setVariable ["ACE_ATragMX_rangeCardEndRange", GVAR(rangeCardEndRange)]; profileNamespace setVariable ["ACE_ATragMX_rangeCardIncrement", GVAR(rangeCardIncrement)]; -profileNamespace setVariable ["ACE_ATragMX_rangeCardCurrentColumn", GVAR(rangeCardCurrentColumn)]; \ No newline at end of file +profileNamespace setVariable ["ACE_ATragMX_rangeCardCurrentColumn", GVAR(rangeCardCurrentColumn)]; diff --git a/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf b/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf index d270dbf4c3..d9ae84e1ae 100644 --- a/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf +++ b/addons/atragmx/functions/fnc_target_speed_assist_timer.sqf @@ -3,10 +3,10 @@ * Shows and starts the target speed assist timer * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_target_speed_assist_timer diff --git a/addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf b/addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf index bda24a48f4..5e420b41f8 100644 --- a/addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf +++ b/addons/atragmx/functions/fnc_toggle_atmo_env_data.sqf @@ -6,7 +6,7 @@ * Apply new data? * * Return Value: - * Nothing + * None * * Example: * 1 call ace_atragmx_fnc_toggle_atmo_env_data diff --git a/addons/atragmx/functions/fnc_toggle_c1_ballistic_coefficient_data.sqf b/addons/atragmx/functions/fnc_toggle_c1_ballistic_coefficient_data.sqf index e83f0d985c..c83e21a872 100644 --- a/addons/atragmx/functions/fnc_toggle_c1_ballistic_coefficient_data.sqf +++ b/addons/atragmx/functions/fnc_toggle_c1_ballistic_coefficient_data.sqf @@ -6,7 +6,7 @@ * Apply new data? * * Return Value: - * Nothing + * None * * Example: * 1 call ace_atragmx_fnc_toggle_c1_ballistic_coefficient_data diff --git a/addons/atragmx/functions/fnc_toggle_coriolis.sqf b/addons/atragmx/functions/fnc_toggle_coriolis.sqf index 17b081131e..a711d2a55e 100644 --- a/addons/atragmx/functions/fnc_toggle_coriolis.sqf +++ b/addons/atragmx/functions/fnc_toggle_coriolis.sqf @@ -3,10 +3,10 @@ * Toggles the coriolis and spin drift output on/off * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_toggle_coriolis diff --git a/addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf b/addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf index c8cfe0f8f3..332c0f1aba 100644 --- a/addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf +++ b/addons/atragmx/functions/fnc_toggle_gun_ammo_data.sqf @@ -6,7 +6,7 @@ * Apply new data? * * Return Value: - * Nothing + * None * * Example: * 1 call ace_atragmx_fnc_toggle_gun_ammo_data diff --git a/addons/atragmx/functions/fnc_toggle_gun_list.sqf b/addons/atragmx/functions/fnc_toggle_gun_list.sqf index e5dbf54bd5..6ff6e3b6f4 100644 --- a/addons/atragmx/functions/fnc_toggle_gun_list.sqf +++ b/addons/atragmx/functions/fnc_toggle_gun_list.sqf @@ -6,7 +6,7 @@ * change gun? * * Return Value: - * Nothing + * None * * Example: * false call ace_atragmx_fnc_toggle_gun_list diff --git a/addons/atragmx/functions/fnc_toggle_muzzle_velocity_data.sqf b/addons/atragmx/functions/fnc_toggle_muzzle_velocity_data.sqf index 9a334b35ca..d00992d856 100644 --- a/addons/atragmx/functions/fnc_toggle_muzzle_velocity_data.sqf +++ b/addons/atragmx/functions/fnc_toggle_muzzle_velocity_data.sqf @@ -6,7 +6,7 @@ * Apply new data? * * Return Value: - * Nothing + * None * * Example: * 1 call ace_atragmx_fnc_toggle_muzzle_velocity_data diff --git a/addons/atragmx/functions/fnc_toggle_option_menu.sqf b/addons/atragmx/functions/fnc_toggle_option_menu.sqf index ea14baedad..f7d7f06a13 100644 --- a/addons/atragmx/functions/fnc_toggle_option_menu.sqf +++ b/addons/atragmx/functions/fnc_toggle_option_menu.sqf @@ -6,7 +6,7 @@ * open menu item * * Return Value: - * Nothing + * None * * Example: * 1 call ace_atragmx_fnc_toggle_option_menu @@ -29,7 +29,7 @@ if (ctrlVisible 3001) then { }; } else { lbClear 3002; - + lbAdd [3002, "Accuracy 1st"]; lbAdd [3002, "Muz Vel Table"]; lbAdd [3002, "Drag Coef Table"]; @@ -43,9 +43,11 @@ if (ctrlVisible 3001) then { }; lbAdd [3002, "Set Clicks"]; lbAdd [3002, "Gun Note"]; - + lbSetCurSel [3002, 0]; - + ctrlShow [3001, true]; ctrlShow [3002, true]; + + ctrlSetFocus ((uiNamespace getVariable ["ATragMX_Display", displayNull]) displayCtrl 3002); }; diff --git a/addons/atragmx/functions/fnc_toggle_range_card.sqf b/addons/atragmx/functions/fnc_toggle_range_card.sqf index 7d8b7a0239..4e7ea4d511 100644 --- a/addons/atragmx/functions/fnc_toggle_range_card.sqf +++ b/addons/atragmx/functions/fnc_toggle_range_card.sqf @@ -3,10 +3,10 @@ * Toggles the range card screen on/off * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_toggle_range_card diff --git a/addons/atragmx/functions/fnc_toggle_range_card_setup.sqf b/addons/atragmx/functions/fnc_toggle_range_card_setup.sqf index 96c31459b2..e5d68c3933 100644 --- a/addons/atragmx/functions/fnc_toggle_range_card_setup.sqf +++ b/addons/atragmx/functions/fnc_toggle_range_card_setup.sqf @@ -6,7 +6,7 @@ * Apply new range card settings * * Return Value: - * Nothing + * None * * Example: * 1 call ace_atragmx_fnc_toggle_range_card_setup diff --git a/addons/atragmx/functions/fnc_toggle_solution_setup.sqf b/addons/atragmx/functions/fnc_toggle_solution_setup.sqf index 5372b205d0..f548df689f 100644 --- a/addons/atragmx/functions/fnc_toggle_solution_setup.sqf +++ b/addons/atragmx/functions/fnc_toggle_solution_setup.sqf @@ -6,7 +6,7 @@ * Apply new data? * * Return Value: - * Nothing + * None * * Example: * 1 call ace_atragmx_fnc_toggle_solution_setup diff --git a/addons/atragmx/functions/fnc_toggle_target_data.sqf b/addons/atragmx/functions/fnc_toggle_target_data.sqf index 44892ca882..863af6511f 100644 --- a/addons/atragmx/functions/fnc_toggle_target_data.sqf +++ b/addons/atragmx/functions/fnc_toggle_target_data.sqf @@ -6,7 +6,7 @@ * Apply new data? * * Return Value: - * Nothing + * None * * Example: * 1 call ace_atragmx_fnc_toggle_target_data diff --git a/addons/atragmx/functions/fnc_toggle_target_range_assist.sqf b/addons/atragmx/functions/fnc_toggle_target_range_assist.sqf index 83d2daa95f..ad593830f9 100644 --- a/addons/atragmx/functions/fnc_toggle_target_range_assist.sqf +++ b/addons/atragmx/functions/fnc_toggle_target_range_assist.sqf @@ -6,7 +6,7 @@ * update range? * * Return Value: - * Nothing + * None * * Example: * 1 call ace_atragmx_fnc_toggle_target_range_assist diff --git a/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf b/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf index 4d1680d195..cbeabc48ac 100644 --- a/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf +++ b/addons/atragmx/functions/fnc_toggle_target_speed_assist.sqf @@ -6,7 +6,7 @@ * update speed? * * Return Value: - * Nothing + * None * * Example: * 1 call ace_atragmx_fnc_toggle_target_speed_assist diff --git a/addons/atragmx/functions/fnc_toggle_truing_drop.sqf b/addons/atragmx/functions/fnc_toggle_truing_drop.sqf index 8c2e72587c..9865005c78 100644 --- a/addons/atragmx/functions/fnc_toggle_truing_drop.sqf +++ b/addons/atragmx/functions/fnc_toggle_truing_drop.sqf @@ -6,7 +6,7 @@ * Apply new data? * * Return Value: - * Nothing + * None * * Example: * 1 call ace_atragmx_fnc_toggle_truing_drop diff --git a/addons/atragmx/functions/fnc_trim_gun_name.sqf b/addons/atragmx/functions/fnc_trim_gun_name.sqf index 2ab603c804..36344d6dfa 100644 --- a/addons/atragmx/functions/fnc_trim_gun_name.sqf +++ b/addons/atragmx/functions/fnc_trim_gun_name.sqf @@ -3,10 +3,10 @@ * Trims the gun name input field * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_trim_gun_name diff --git a/addons/atragmx/functions/fnc_true_c1_ballistic_coefficient.sqf b/addons/atragmx/functions/fnc_true_c1_ballistic_coefficient.sqf index 6af3e179ac..dfa41ea0b4 100644 --- a/addons/atragmx/functions/fnc_true_c1_ballistic_coefficient.sqf +++ b/addons/atragmx/functions/fnc_true_c1_ballistic_coefficient.sqf @@ -3,10 +3,10 @@ * Trues the c1 ballistic coefficient * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_true_c1_ballistic_coefficient diff --git a/addons/atragmx/functions/fnc_true_muzzle_velocity.sqf b/addons/atragmx/functions/fnc_true_muzzle_velocity.sqf index d8aa478412..db907aa29d 100644 --- a/addons/atragmx/functions/fnc_true_muzzle_velocity.sqf +++ b/addons/atragmx/functions/fnc_true_muzzle_velocity.sqf @@ -3,10 +3,10 @@ * Trues the muzzle velocity * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_true_muzzle_velocity diff --git a/addons/atragmx/functions/fnc_update_atmo_env_data.sqf b/addons/atragmx/functions/fnc_update_atmo_env_data.sqf index 7cd34754da..e8e805c0ab 100644 --- a/addons/atragmx/functions/fnc_update_atmo_env_data.sqf +++ b/addons/atragmx/functions/fnc_update_atmo_env_data.sqf @@ -3,10 +3,10 @@ * Updates the atmospheric data fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_atmo_env_data diff --git a/addons/atragmx/functions/fnc_update_atmo_selection.sqf b/addons/atragmx/functions/fnc_update_atmo_selection.sqf index 18036178b4..cd808326f8 100644 --- a/addons/atragmx/functions/fnc_update_atmo_selection.sqf +++ b/addons/atragmx/functions/fnc_update_atmo_selection.sqf @@ -3,10 +3,10 @@ * Updates the atmospheric data input method * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_atmo_selection diff --git a/addons/atragmx/functions/fnc_update_atmosphere.sqf b/addons/atragmx/functions/fnc_update_atmosphere.sqf index be7565bda7..d54daed532 100644 --- a/addons/atragmx/functions/fnc_update_atmosphere.sqf +++ b/addons/atragmx/functions/fnc_update_atmosphere.sqf @@ -3,10 +3,10 @@ * Updates all atmosphere column input fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_atmosphere diff --git a/addons/atragmx/functions/fnc_update_c1_ballistic_coefficient_data.sqf b/addons/atragmx/functions/fnc_update_c1_ballistic_coefficient_data.sqf index d63d9768da..5095ee0d96 100644 --- a/addons/atragmx/functions/fnc_update_c1_ballistic_coefficient_data.sqf +++ b/addons/atragmx/functions/fnc_update_c1_ballistic_coefficient_data.sqf @@ -3,10 +3,10 @@ * Updates the c1 ballistic coefficient data fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_c1_ballistic_coefficient_data diff --git a/addons/atragmx/functions/fnc_update_gun.sqf b/addons/atragmx/functions/fnc_update_gun.sqf index aa1f8c44bf..ff7de54a1c 100644 --- a/addons/atragmx/functions/fnc_update_gun.sqf +++ b/addons/atragmx/functions/fnc_update_gun.sqf @@ -3,10 +3,10 @@ * Updates all gun column input fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_gun diff --git a/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf b/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf index abdb401454..7d29252b28 100644 --- a/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf +++ b/addons/atragmx/functions/fnc_update_gun_ammo_data.sqf @@ -3,10 +3,10 @@ * Updates the gun ammo data fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_gun_ammo_data diff --git a/addons/atragmx/functions/fnc_update_inclination_angle.sqf b/addons/atragmx/functions/fnc_update_inclination_angle.sqf index ea5599bf2d..223a7ae4d4 100644 --- a/addons/atragmx/functions/fnc_update_inclination_angle.sqf +++ b/addons/atragmx/functions/fnc_update_inclination_angle.sqf @@ -6,7 +6,7 @@ * Reference input field ID * * Return Value: - * Nothing + * None * * Example: * 0 call ace_atragmx_fnc_update_inclination_angle diff --git a/addons/atragmx/functions/fnc_update_muzzle_velocity_data.sqf b/addons/atragmx/functions/fnc_update_muzzle_velocity_data.sqf index 989d3d113c..466d83cc4c 100644 --- a/addons/atragmx/functions/fnc_update_muzzle_velocity_data.sqf +++ b/addons/atragmx/functions/fnc_update_muzzle_velocity_data.sqf @@ -3,10 +3,10 @@ * Updates the muzzle velocity data fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_muzzle_velocity_data diff --git a/addons/atragmx/functions/fnc_update_range_card.sqf b/addons/atragmx/functions/fnc_update_range_card.sqf index e8c910ca74..5656a45fe5 100644 --- a/addons/atragmx/functions/fnc_update_range_card.sqf +++ b/addons/atragmx/functions/fnc_update_range_card.sqf @@ -3,10 +3,10 @@ * Updates the range card listbox content * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_range_card diff --git a/addons/atragmx/functions/fnc_update_relative_click_memory.sqf b/addons/atragmx/functions/fnc_update_relative_click_memory.sqf index 1dc534ce4b..fe09d46cf7 100644 --- a/addons/atragmx/functions/fnc_update_relative_click_memory.sqf +++ b/addons/atragmx/functions/fnc_update_relative_click_memory.sqf @@ -3,10 +3,10 @@ * Updates the relative click memory * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_relative_click_memory diff --git a/addons/atragmx/functions/fnc_update_result.sqf b/addons/atragmx/functions/fnc_update_result.sqf index 2541222583..98718e6955 100644 --- a/addons/atragmx/functions/fnc_update_result.sqf +++ b/addons/atragmx/functions/fnc_update_result.sqf @@ -3,10 +3,10 @@ * Updates the result input and output fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_result @@ -28,7 +28,7 @@ _wind2 = GVAR(windage2Output) select GVAR(currentTarget); if (GVAR(showCoriolis)) then { _elevationRel = GVAR(verticalCoriolisOutput) select GVAR(currentTarget); _windageRel = GVAR(horizontalCoriolisOutput) select GVAR(currentTarget); - + _windageCur = GVAR(spinDriftOutput) select GVAR(currentTarget); } else { _elevationCur = GVAR(workingMemory) select 10; diff --git a/addons/atragmx/functions/fnc_update_scope_unit.sqf b/addons/atragmx/functions/fnc_update_scope_unit.sqf index 46db8c40c4..b66d0885bb 100644 --- a/addons/atragmx/functions/fnc_update_scope_unit.sqf +++ b/addons/atragmx/functions/fnc_update_scope_unit.sqf @@ -3,10 +3,10 @@ * Updates the scope unit fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_scope_unit @@ -26,4 +26,4 @@ if (GVAR(currentScopeUnit) == 3) then { } else { ctrlSetText [5000, GVAR(scopeUnits) select GVAR(currentScopeUnit)]; ctrlShow [2001, false]; -}; \ No newline at end of file +}; diff --git a/addons/atragmx/functions/fnc_update_solution_setup.sqf b/addons/atragmx/functions/fnc_update_solution_setup.sqf index 204a844c9d..8850c937a5 100644 --- a/addons/atragmx/functions/fnc_update_solution_setup.sqf +++ b/addons/atragmx/functions/fnc_update_solution_setup.sqf @@ -3,10 +3,10 @@ * Updates all solution setup input fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_solution_setup diff --git a/addons/atragmx/functions/fnc_update_target.sqf b/addons/atragmx/functions/fnc_update_target.sqf index ef2ef1de5c..c457a5cc21 100644 --- a/addons/atragmx/functions/fnc_update_target.sqf +++ b/addons/atragmx/functions/fnc_update_target.sqf @@ -3,10 +3,10 @@ * Updates all target column input fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_target diff --git a/addons/atragmx/functions/fnc_update_target_data.sqf b/addons/atragmx/functions/fnc_update_target_data.sqf index 6fa9035a62..3cb6c24c9c 100644 --- a/addons/atragmx/functions/fnc_update_target_data.sqf +++ b/addons/atragmx/functions/fnc_update_target_data.sqf @@ -3,10 +3,10 @@ * Updates all target column input fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_target diff --git a/addons/atragmx/functions/fnc_update_target_selection.sqf b/addons/atragmx/functions/fnc_update_target_selection.sqf index d9fd6002c9..7ae6256f33 100644 --- a/addons/atragmx/functions/fnc_update_target_selection.sqf +++ b/addons/atragmx/functions/fnc_update_target_selection.sqf @@ -3,10 +3,10 @@ * Updates all input fields based on the currently selected target * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_target_selection diff --git a/addons/atragmx/functions/fnc_update_truing_drop_data.sqf b/addons/atragmx/functions/fnc_update_truing_drop_data.sqf index 5d97780d49..161e8877e1 100644 --- a/addons/atragmx/functions/fnc_update_truing_drop_data.sqf +++ b/addons/atragmx/functions/fnc_update_truing_drop_data.sqf @@ -3,10 +3,10 @@ * Updates the truing drop data fields * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_truing_drop_data diff --git a/addons/atragmx/functions/fnc_update_truing_drop_selection.sqf b/addons/atragmx/functions/fnc_update_truing_drop_selection.sqf index 98f7483276..e00876e4a1 100644 --- a/addons/atragmx/functions/fnc_update_truing_drop_selection.sqf +++ b/addons/atragmx/functions/fnc_update_truing_drop_selection.sqf @@ -3,10 +3,10 @@ * Updates the truing drop input method * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_truing_drop_selection diff --git a/addons/atragmx/functions/fnc_update_unit_selection.sqf b/addons/atragmx/functions/fnc_update_unit_selection.sqf index f054857078..2fc5400e27 100644 --- a/addons/atragmx/functions/fnc_update_unit_selection.sqf +++ b/addons/atragmx/functions/fnc_update_unit_selection.sqf @@ -3,10 +3,10 @@ * Updates all input fields based on the currently selected unit * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_unit_selection diff --git a/addons/atragmx/functions/fnc_update_zero_range.sqf b/addons/atragmx/functions/fnc_update_zero_range.sqf index e4b3d0da8c..f0f787d7cf 100644 --- a/addons/atragmx/functions/fnc_update_zero_range.sqf +++ b/addons/atragmx/functions/fnc_update_zero_range.sqf @@ -3,10 +3,10 @@ * Updates the scope base angle based on the zero range input * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * call ace_atragmx_fnc_update_zero_range diff --git a/addons/atragmx/stringtable.xml b/addons/atragmx/stringtable.xml index 13c9e4478f..4c11ea8add 100644 --- a/addons/atragmx/stringtable.xml +++ b/addons/atragmx/stringtable.xml @@ -14,6 +14,8 @@ ATragMX ATragMX ATragMX + ATragMX + ATragMX Open ATragMX @@ -28,6 +30,8 @@ Abrir ATragMX ATragMX を開く ATragMX 열기 + 開啟ATragMX + 开启ATragMX Rugged PDA with ATragMX @@ -42,6 +46,8 @@ PDA Robusto com ATragMX ATragMX 付きの携行型端末 ATragMX가 달린 PDA + 裝有軍用PDA的ATragMX + 装有军用PDA的ATragMX Open ATragMX @@ -56,6 +62,8 @@ Abrir ATragMX ATragMX を開く ATragMX 열기 + 開啟ATragMX + 开启ATragMX diff --git a/addons/attach/CfgVehicles.hpp b/addons/attach/CfgVehicles.hpp index 1e0c0f3e71..5fa75105e7 100644 --- a/addons/attach/CfgVehicles.hpp +++ b/addons/attach/CfgVehicles.hpp @@ -10,7 +10,6 @@ showDisabled = 0; \ priority = 0; \ icon = QPATHTOF(UI\attach_ca.paa); \ - distance = 4.5; \ }; \ class GVAR(DetachVehicle) { \ displayName = CSTRING(Detach); \ @@ -20,7 +19,6 @@ showDisabled = 0; \ priority = 0.1; \ icon = QPATHTOF(UI\detach_ca.paa); \ - distance = 4.5; \ }; \ }; \ }; diff --git a/addons/attach/functions/fnc_attach.sqf b/addons/attach/functions/fnc_attach.sqf index 366a43d900..3bbf085ca4 100644 --- a/addons/attach/functions/fnc_attach.sqf +++ b/addons/attach/functions/fnc_attach.sqf @@ -8,7 +8,7 @@ * 2: Array containing a string of the attachable item * * Return Value: - * Nothing + * None * * Example: * [bob, bob, ["light"]] call ace_attach_fnc_attach; @@ -57,7 +57,6 @@ if (_unit == _attachToVehicle) then { //Self Attachment _actionID = _unit addAction [format ["%1", localize LSTRING(CancelAction)], {GVAR(placeAction) = PLACE_CANCEL}]; //Display to show virtual object: - private []; _model = getText (configFile >> "CfgAmmo" >> _itemVehClass >> "model"); if (_model == "") then { _model = getText (configFile >> "CfgVehicles" >> _itemVehClass >> "model"); diff --git a/addons/attach/functions/fnc_canAttach.sqf b/addons/attach/functions/fnc_canAttach.sqf index 37d92e8908..36264ed628 100644 --- a/addons/attach/functions/fnc_canAttach.sqf +++ b/addons/attach/functions/fnc_canAttach.sqf @@ -27,7 +27,7 @@ _attachLimit = [6, 1] select (_player == _attachToVehicle); _attachedObjects = _attachToVehicle getVariable [QGVAR(attached), []]; ((_player == _attachToVehicle) || {canStand _player}) && -{(_attachToVehicle distance _player) < 7} && -{alive _attachToVehicle} && -{(count _attachedObjects) < _attachLimit} && +{(_attachToVehicle distance _player) < 10} && +{alive _attachToVehicle} && +{(count _attachedObjects) < _attachLimit} && {_itemClassname in ((itemsWithMagazines _player) + [""])}; diff --git a/addons/attach/functions/fnc_canDetach.sqf b/addons/attach/functions/fnc_canDetach.sqf index d9796a5a5c..a9b6f2deff 100644 --- a/addons/attach/functions/fnc_canDetach.sqf +++ b/addons/attach/functions/fnc_canDetach.sqf @@ -21,7 +21,7 @@ TRACE_2("params",_attachToVehicle,_unit); if ((vehicle _unit) != _unit) exitWith {false}; -_attachedList = _attachToVehicle getVariable [QGVAR(attached), []]; +private _attachedList = _attachToVehicle getVariable [QGVAR(attached), []]; if ((count _attachedList) == 0) exitWith {false}; private ["_inRange"]; diff --git a/addons/attach/functions/fnc_detach.sqf b/addons/attach/functions/fnc_detach.sqf index 4ff4f9fbd6..945e399b74 100644 --- a/addons/attach/functions/fnc_detach.sqf +++ b/addons/attach/functions/fnc_detach.sqf @@ -7,7 +7,7 @@ * 1: unit doing the detaching (player) * * Return Value: - * Nothing + * None * * Example: * [car, bob] call ace_attach_fnc_detach @@ -69,7 +69,7 @@ if (toLower _itemName in ["b_ir_grenade", "o_ir_grenade", "i_ir_grenade"]) then detach _x; deleteVehicle _x; } forEach (attachedObjects _attachedObject); - + // Delete attached item detach _attachedObject; deleteVehicle _attachedObject; diff --git a/addons/attach/functions/fnc_placeApprove.sqf b/addons/attach/functions/fnc_placeApprove.sqf index 922136107e..895f91a7b6 100644 --- a/addons/attach/functions/fnc_placeApprove.sqf +++ b/addons/attach/functions/fnc_placeApprove.sqf @@ -16,7 +16,7 @@ * 5: Starting Pos of dummy item * * Return Value: - * Nothing + * None * * Example: * No diff --git a/addons/attach/stringtable.xml b/addons/attach/stringtable.xml index 383ba884fb..39455dedcf 100644 --- a/addons/attach/stringtable.xml +++ b/addons/attach/stringtable.xml @@ -12,8 +12,10 @@ Attacca l'oggetto Tárgy hozzácsatolása Прикрепить предмет - &gt;&gt; アイテムを取り付ける + アイテムを取り付ける 물건 부착 + 附掛裝備>> + 附挂装备>> Attach @@ -28,6 +30,8 @@ Прикрепить 取り付ける 부착 + 附掛 + 附挂 Detach item @@ -42,6 +46,8 @@ Отсоединить アイテムを外す 분리 + 取下裝備 + 取下装备 IR Strobe Attached @@ -56,6 +62,8 @@ ИК-маяк прикреплён 赤外線ストロボを取り付ける 적외선 스트로브 부착됨 + 已附掛紅外線頻閃器 + 已附挂红外线频闪器 IR Strobe Detached @@ -70,6 +78,8 @@ ИК-маяк отсоединён 赤外線ストロボを外す 적외선 스트로브 분리됨 + 已取下紅外線頻閃器 + 已取下红外线频闪器 IR Grenade Attached @@ -84,6 +94,8 @@ ИК-граната прикреплена 赤外線グレネードを取り付ける 적외선 수류탄 부착됨 + 已附掛紅外線手榴彈 + 已附挂红外线手榴弹 IR Grenade Detached @@ -98,6 +110,8 @@ ИК-граната отсоединена 赤外線グレネードを外す 적외선 수류탄 분리됨 + 已取下紅外線手榴彈 + 已取下红外线手榴弹 Chemlight Attached @@ -112,6 +126,8 @@ Химсвет прикреплён ケミライトを取り付け 켐라이트 부착됨 + 已附掛螢光棒 + 已附挂萤光棒 Chemlight Detached @@ -126,6 +142,8 @@ Химсвет отсоединён ケミライトを外す 켐라이트 분리됨 + 已取下螢光棒 + 已取下萤光棒 No inventory space @@ -140,6 +158,8 @@ В инвентаре нет места インベントリに空きがない 넣을 공간이 없음 + 無可用空間 + 无可用空间 IR Strobe @@ -154,6 +174,8 @@ ИК-маяк 赤外線ストロボ 적외선 스트로브 + 紅外線頻閃器 + 红外线频闪器 IR Strobe allows you to signal your position through a pulsating beacon only visible with NVGs. @@ -168,6 +190,8 @@ ИК-маяк позволяет сигнализировать о своём местоположении через пульсирующий свет, видимый только через ПНВ. 赤外線ストロボはあなたの位置を知らせますが、夜間暗視装置を介してでしか見れません。 적외선 스트로브는 자신의 위치를 반짝이면서 표시합니다. 이는 야간투시경으로 밖에 보지 못합니다. + 紅外線閃頻器,藉由紅外線閃頻信號來辨識你的位置,僅能使用夜視系統來辨識紅外線信號 + 红外线闪频器,藉由红外线闪频信号来辨识你的位置,仅能使用夜视系统来辨识红外线信号 Place @@ -182,6 +206,8 @@ Установить 置く 두기 + 放置 + 放置 Cancel @@ -196,6 +222,8 @@ Отмена やめる 취소 + 取消 + 取消 Attach Failed @@ -210,6 +238,8 @@ Non si attacca 取り付けに失敗した 부착 실패 + 附掛失敗 + 附挂失败 %1<br/>Attached @@ -222,8 +252,10 @@ %1<br/>attaccata %1<br/>hozzácsatolva %1<br/>присоединен(-а) - %1&lt;br/&gt; を取り付けた + %1<br/>を取り付けた %1<br/>부착됨 + %1<br/>已附掛 + %1<br/>已附挂 %1<br/>Detached @@ -236,8 +268,10 @@ %1<br/>staccata %1<br/>lecsatolva %1<br/>отсоединен(-а) - %1&lt;br/&gt; を外した + %1<br/>を外した %1<br/>분리됨 + %1<br/>已取下 + %1<br/>已取下 diff --git a/addons/backpacks/functions/fnc_backpackOpened.sqf b/addons/backpacks/functions/fnc_backpackOpened.sqf index 8b4e05c20e..0b94b391f0 100644 --- a/addons/backpacks/functions/fnc_backpackOpened.sqf +++ b/addons/backpacks/functions/fnc_backpackOpened.sqf @@ -3,13 +3,16 @@ * Someone opened your backpack. Play sound and camshake. Execute locally. * * Arguments: - * 0: Who accessed your inventory? (Object) - * 1: Unit that wields the backpack (Object) - * 2: The backpack object (Object) + * 0: Who accessed your inventory? + * 1: Unit that wields the backpack + * 2: The backpack object * * Return Value: * None * + * Example: + * [bob, kevin, backpack] call ace_backpacks_fnc_backpackOpened + * * Public: No */ #include "script_component.hpp" diff --git a/addons/backpacks/functions/fnc_isBackpack.sqf b/addons/backpacks/functions/fnc_isBackpack.sqf index aa12b85ad9..80550290f2 100644 --- a/addons/backpacks/functions/fnc_isBackpack.sqf +++ b/addons/backpacks/functions/fnc_isBackpack.sqf @@ -8,6 +8,9 @@ * Return Value: * Boolean * + * Example: + * [bob] call ace_backpacks_fnc_isBackpack + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/backpacks/functions/fnc_onOpenInventory.sqf b/addons/backpacks/functions/fnc_onOpenInventory.sqf index 0857f6b7ab..b229bbb111 100644 --- a/addons/backpacks/functions/fnc_onOpenInventory.sqf +++ b/addons/backpacks/functions/fnc_onOpenInventory.sqf @@ -7,7 +7,10 @@ * 1: Backpack * * Return Value: - * false. Always open the inventory dialog. (Bool) + * false. Always open the inventory dialog. + * + * Example: + * [bob, backpack] call ace_backpacks_fnc_onOpenInventory * * Public: No */ diff --git a/addons/ballistics/CfgWeapons.hpp b/addons/ballistics/CfgWeapons.hpp index 326e7a46db..f95408d6a6 100644 --- a/addons/ballistics/CfgWeapons.hpp +++ b/addons/ballistics/CfgWeapons.hpp @@ -112,8 +112,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_mag_Tracer_Dim" }; initSpeed = -1.0; - ACE_barrelTwist=228.6; - ACE_barrelLength=406.4; + ACE_barrelTwist = 228.6; + ACE_barrelLength = 406.4; }; class arifle_MXM_F: arifle_MX_Base_F { magazines[] = { @@ -124,8 +124,8 @@ class CfgWeapons { "ACE_30Rnd_65_Creedmor_mag" }; initSpeed = -1.01842; - ACE_barrelTwist=228.6; - ACE_barrelLength=457.2; + ACE_barrelTwist = 228.6; + ACE_barrelLength = 457.2; class Single: Single { dispersion = 0.000436; // radians. Equal to 1.50 MOA. }; @@ -154,13 +154,13 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.859238; - ACE_barrelTwist=177.8; - ACE_barrelLength=264.0; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 264.0; }; class arifle_SPAR_02_base_F: Rifle_Base_F { initSpeed = -0.934282; - ACE_barrelTwist=177.8; - ACE_barrelLength=368.0; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 368.0; }; class arifle_SPAR_03_base_F: Rifle_Base_F { magazines[] = { @@ -174,8 +174,8 @@ class CfgWeapons { "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.984394; - ACE_barrelTwist=279.4; - ACE_barrelLength=508.0; + ACE_barrelTwist = 279.4; + ACE_barrelLength = 508.0; }; /* Other */ @@ -186,18 +186,18 @@ class CfgWeapons { "ACE_200Rnd_65x39_cased_Box_Tracer_Dim" }; initSpeed = -0.976974; - ACE_barrelTwist=177.8; - ACE_barrelLength=317.5; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 317.5; }; class LMG_Zafir_F: Rifle_Long_Base_F { initSpeed = -1.00333; - ACE_barrelTwist=304.8; - ACE_barrelLength=459.74; + ACE_barrelTwist = 304.8; + ACE_barrelLength = 459.74; }; class LMG_03_base_F: Rifle_Long_Base_F { initSpeed = -1.02002; - ACE_barrelTwist=177.8; - ACE_barrelLength=414.02; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 414.02; }; class Tavor_base_F: Rifle_Base_F {}; class mk20_base_F: Rifle_Base_F {}; @@ -225,51 +225,51 @@ class CfgWeapons { class hgun_P07_F: Pistol_Base_F { initSpeed = -1.0; - ACE_barrelTwist=254.0; - ACE_barrelLength=101.6; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 101.6; }; class hgun_Rook40_F: Pistol_Base_F { initSpeed = -1.03077; - ACE_barrelTwist=254.0; - ACE_barrelLength=111.76; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 111.76; }; class hgun_ACPC2_F: Pistol_Base_F { initSpeed = -1.0; - ACE_barrelTwist=406.4; - ACE_barrelLength=127.0; + ACE_barrelTwist = 406.4; + ACE_barrelLength = 127.0; }; class hgun_Pistol_heavy_01_F: Pistol_Base_F { initSpeed = -0.96; - ACE_barrelTwist=406.4; - ACE_barrelLength=114.3; + ACE_barrelTwist = 406.4; + ACE_barrelLength = 114.3; }; class hgun_Pistol_heavy_02_F: Pistol_Base_F { initSpeed = -0.92; - ACE_barrelTwist=406.4; - ACE_barrelLength=76.2; + ACE_barrelTwist = 406.4; + ACE_barrelLength = 76.2; }; class hgun_Pistol_01_F: Pistol_Base_F { initSpeed = -0.974359; - ACE_barrelTwist=254.0; - ACE_barrelLength=93.5; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 93.5; }; class pdw2000_base_F: Rifle_Short_Base_F { initSpeed = -1.09615; - ACE_barrelTwist=228.6; - ACE_barrelLength=177.8; + ACE_barrelTwist = 228.6; + ACE_barrelLength = 177.8; }; /* Rifles */ class arifle_AKS_base_F: Rifle_Base_F { initSpeed = -1.0; - ACE_barrelTwist=160.02; - ACE_barrelLength=206.5; + ACE_barrelTwist = 160.02; + ACE_barrelLength = 206.5; }; class arifle_AKM_base_F: Rifle_Base_F { initSpeed = -1.0014; @@ -303,8 +303,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim" }; initSpeed = -1.08355; - ACE_barrelTwist=203.2; - ACE_barrelLength=728.98; + ACE_barrelTwist = 203.2; + ACE_barrelLength = 508.0; }; class arifle_Katiba_C_F: arifle_katiba_Base_F { magazines[] = { @@ -313,8 +313,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim" }; initSpeed = -1.07105; - ACE_barrelTwist=203.2; - ACE_barrelLength=680.72; + ACE_barrelTwist = 203.2; + ACE_barrelLength = 393.7; }; class arifle_Katiba_GL_F: arifle_katiba_Base_F { magazines[] = { @@ -323,8 +323,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_green_mag_Tracer_Dim" }; initSpeed = -1.08355; - ACE_barrelTwist=203.2; - ACE_barrelLength=728.98; + ACE_barrelTwist = 203.2; + ACE_barrelLength = 508.0; }; class arifle_MX_F: arifle_MX_Base_F { magazines[] = { @@ -333,8 +333,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_mag_Tracer_Dim" }; initSpeed = -0.990132; - ACE_barrelTwist=228.6; - ACE_barrelLength=368.3; + ACE_barrelTwist = 228.6; + ACE_barrelLength = 368.3; }; class arifle_MX_GL_F: arifle_MX_Base_F { magazines[] = { @@ -343,8 +343,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_mag_Tracer_Dim" }; initSpeed = -0.99; - ACE_barrelTwist=228.6; - ACE_barrelLength=368.3; + ACE_barrelTwist = 228.6; + ACE_barrelLength = 368.3; }; /* class arifle_MX_SW_F: arifle_MX_Base_F { @@ -359,8 +359,8 @@ class CfgWeapons { "ACE_30Rnd_65x39_caseless_mag_Tracer_Dim" }; initSpeed = -0.963816; - ACE_barrelTwist=203.2; - ACE_barrelLength=266.7; + ACE_barrelTwist = 203.2; + ACE_barrelLength = 266.7; }; /* class arifle_MXM_F: arifle_MX_Base_F { @@ -383,18 +383,18 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.989; - ACE_barrelTwist=285.75; - ACE_barrelLength=457.2; + ACE_barrelTwist = 285.75; + ACE_barrelLength = 457.2; }; class SMG_02_base_F: Rifle_Short_Base_F { initSpeed = -1.10288; - ACE_barrelTwist=254.0; - ACE_barrelLength=195.58; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 195.58; }; class SMG_05_base_F: Rifle_Short_Base_F { initSpeed = -1.04058; - ACE_barrelTwist=254.0; - ACE_barrelLength=115.0; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 115.0; }; class arifle_TRG20_F: Tavor_base_F { magazines[] = { @@ -410,8 +410,8 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.95; - ACE_barrelTwist=177.8; - ACE_barrelLength=381.0; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 381.0; }; class arifle_TRG21_F: Tavor_base_F { magazines[] = { @@ -427,8 +427,8 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.988043; - ACE_barrelTwist=177.8; - ACE_barrelLength=459.74; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 459.74; }; class arifle_TRG21_GL_F: arifle_TRG21_F { magazines[] = { @@ -444,8 +444,8 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.988043; - ACE_barrelTwist=177.8; - ACE_barrelLength=459.74; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 459.74; }; /* class LMG_Zafir_F: Rifle_Long_Base_F { @@ -467,8 +467,8 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.980978; - ACE_barrelTwist=177.8; - ACE_barrelLength=441.96; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 441.96; }; class arifle_Mk20C_F: mk20_base_F { magazines[] = { @@ -484,8 +484,8 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.962648; - ACE_barrelTwist=177.8; - ACE_barrelLength=406.4; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 406.4; }; class arifle_Mk20_GL_F: mk20_base_F { magazines[] = { @@ -501,13 +501,13 @@ class CfgWeapons { "ACE_30Rnd_556x45_Stanag_Tracer_Dim" }; initSpeed = -0.962648; - ACE_barrelTwist=177.8; - ACE_barrelLength=406.4; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 406.4; }; class SMG_01_Base: Rifle_Short_Base_F { initSpeed = -1.0175; - ACE_barrelTwist=406.4; - ACE_barrelLength=139.7; + ACE_barrelTwist = 406.4; + ACE_barrelLength = 139.7; }; class srifle_DMR_01_F: DMR_01_base_F { magazines[] = { @@ -515,8 +515,8 @@ class CfgWeapons { "ACE_10Rnd_762x54_Tracer_mag" }; initSpeed = -1.025; - ACE_barrelTwist=241.3; - ACE_barrelLength=609.6; + ACE_barrelTwist = 241.3; + ACE_barrelLength = 609.6; }; class srifle_EBR_F: EBR_base_F { magazines[] = { @@ -530,8 +530,8 @@ class CfgWeapons { "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.972389; - ACE_barrelTwist=304.8; - ACE_barrelLength=457.2; + ACE_barrelTwist = 304.8; + ACE_barrelLength = 457.2; }; /* class LMG_Mk200_F: Rifle_Long_Base_F { @@ -546,8 +546,8 @@ class CfgWeapons { "ACE_7Rnd_408_305gr_Mag" }; initSpeed = -1.0; - ACE_barrelTwist=330.2; - ACE_barrelLength=736.6; + ACE_barrelTwist = 330.2; + ACE_barrelLength = 736.6; }; class srifle_GM6_F: GM6_base_F { magazines[] = { @@ -558,8 +558,8 @@ class CfgWeapons { "ACE_5Rnd_127x99_AMAX_Mag" }; initSpeed = -1.0; - ACE_barrelTwist=381.0; - ACE_barrelLength=730; + ACE_barrelTwist = 381.0; + ACE_barrelLength = 730; }; class srifle_DMR_02_F: DMR_02_base_F { magazines[] = { @@ -571,8 +571,8 @@ class CfgWeapons { "ACE_20Rnd_762x67_Berger_Hybrid_OTM_Mag" }; initSpeed = -0.961749; - ACE_barrelTwist=254.0; - ACE_barrelLength=508.0; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 508.0; }; class srifle_DMR_03_F: DMR_03_base_F { magazines[] = { @@ -586,18 +586,18 @@ class CfgWeapons { "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.984394; - ACE_barrelTwist=254.0; - ACE_barrelLength=508.0; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 508.0; }; class srifle_DMR_04_F: DMR_04_base_F { initSpeed = -1.0; - ACE_barrelTwist=203.2; - ACE_barrelLength=450.088; + ACE_barrelTwist = 203.2; + ACE_barrelLength = 450.088; }; class srifle_DMR_05_blk_F: DMR_05_base_F { initSpeed = -1.0; - ACE_barrelTwist=359.918; - ACE_barrelLength=620.014; + ACE_barrelTwist = 359.918; + ACE_barrelLength = 620.014; }; class srifle_DMR_06_camo_F: DMR_06_base_F { magazines[] = { @@ -611,18 +611,18 @@ class CfgWeapons { "ACE_20Rnd_762x51_Mag_SD" }; initSpeed = -0.992197; - ACE_barrelTwist=304.8; - ACE_barrelLength=558.8; + ACE_barrelTwist = 304.8; + ACE_barrelLength = 558.8; }; class MMG_01_hex_F: MMG_01_base_F { initSpeed = -0.997073; - ACE_barrelTwist=359.918; - ACE_barrelLength=549.91; + ACE_barrelTwist = 359.918; + ACE_barrelLength = 549.91; }; class MMG_02_camo_F: MMG_02_base_F { initSpeed = -1.0; - ACE_barrelTwist=234.95; - ACE_barrelLength=609.6; + ACE_barrelTwist = 234.95; + ACE_barrelLength = 609.6; }; class HMG_127 : LMG_RCWS { @@ -631,8 +631,8 @@ class CfgWeapons { }; class HMG_M2: HMG_01 { initSpeed = -1.0; - ACE_barrelTwist=304.8; - ACE_barrelLength=1143.0; + ACE_barrelTwist = 304.8; + ACE_barrelLength = 1143.0; }; /* Silencers */ diff --git a/addons/ballistics/stringtable.xml b/addons/ballistics/stringtable.xml index b86b2eb576..ad33b30704 100644 --- a/addons/ballistics/stringtable.xml +++ b/addons/ballistics/stringtable.xml @@ -4,7 +4,7 @@ 6.5x47mm 20Rnd Mag (HPBT Scenar) - Ch. 6.5x47mm 20Cps (HPBT Scenar) + Ch. 6,5x47mm 20Cps (HPBT Scenar) Cargador de 20 balas de 6.5x47mm (HPBT Scenar) Magazynek 6,5x47mm 20rd (HPBT Scenar) Магазин из 20-ти 6,5x47 мм (экспансивные Scenar) @@ -15,10 +15,12 @@ 6,5x47mm 20-lövedékes tár (HPBT Scenar) 6.5x47mm 20発入り 弾倉 (HPBT Scenar) 20발들이 6.5x47mm (HPBT Scenar) + 6.5x47mm 20發 彈匣 (Lapua 空尖艇尾狙擊專用彈) + 6.5x47mm 20发 弹匣 (Lapua 空尖艇尾狙击专用弹) 6.5mm Lapua - 6.5mm Lapua + 6,5mm Lapua 6.5mm Lapua 6,5mm Lapua 6,5 мм Lapua @@ -29,10 +31,12 @@ 6,5mm Lapua 6.5mm Lapua 6.5mm Lapua + 6.5mm Lapua 空尖艇尾狙擊專用彈 + 6.5mm Lapua 空尖艇尾狙击专用弹 Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 20<br />Used in: QBU-88 - Calibre: 6.5x47mm (HPBT Scenar)<br />Cartouches: 20 + Calibre: 6,5x47mm (HPBT Scenar)<br />Cartouches: 20 Calibre: 6.5x47mm (HPBT Scenar)<br />Balas: 20<br />Se usa en: QBU-88 Kaliber: 6,5x47mm (HPBT Scenar)<br />Pociski: 20 Калибр: 6,5x47 мм (экспансивные Scenar)<br />Патронов: 20<br />Используются с: QBU-88 @@ -43,6 +47,8 @@ Kaliber: 6,5x47mm (HPBT Scenar)<br />Lövedékek: 20<br />Használható: QBU-88 口径: 6.5x47mm (HPBT Scenar)<br />装填数: 20<br />次で使用: QBU-88 구경: 6.5x47mm (HPBT Scenar)<br />장탄수: 20<br />사용처: QBU-88 + 口徑: 6.5x47mm (Lapua 空尖艇尾狙擊專用彈)<br />發數: 20<br />使用於: QBU-88 + 口径: 6.5x47mm (Lapua 空尖艇尾狙击专用弹)<br />发数: 20<br />使用于: QBU-88 6.5mm Creedmor 20Rnd Mag @@ -51,16 +57,18 @@ Магазин из 20-ти 6,5 мм Creedmor 6,5mm Creedmor 20-Patronen-Magazin Cargador de 20 balas Creedmor de 6.5mm - Ch. 6.5mm Creedmor 20Cps + Ch. 6,5mm Creedmor 20Cps 6.5mm Creedmor 20náb. Zásobník Carregador 6.5mm com 20 cartuchos Creedmor 6,5mm Creedmor 20-lövedékes tár 6.5mm Creedmor 20発入り 弾倉 20발들이 6.5mm Creedmor 탄창 + 6.5mm 20發 彈匣 (Creedmor 狙擊專用彈) + 6.5mm 20发 弹匣 (Creedmor 狙击专用弹) 6.5mm CM - 6.5mm CM + 6,5mm CM 6.5mm CM 6,5mm CM 6,5 мм CM @@ -71,12 +79,14 @@ 6,5mm CM 6.5mm CM 6.5mm CM + 6.5mm CM 狙擊專用彈 + 6.5mm CM 狙击专用弹 Caliber: 6.5x47mm Creedmor<br />Rounds: 20<br />Used in: QBU-88 Kaliber: 6,5x47mm Creedmor<br />Pociski: 20<br />Używany w: QBU-88 Kaliber: 6,5x47mm Creedmor<br />Patronen: 20<br />Eingesetzt von: QBU-88 - Calibre: 6.5x47mm Creedmor <br />Cartouches: 20<br />Utilisé avec: QBU-88 + Calibre: 6,5x47mm Creedmor <br />Cartouches: 20<br />Utilisé avec: QBU-88 Calibro: 6.5mm Creedmor<br />Munizioni: 20<br />In uso su: QBU-88 Calibre: 6.5mm Creedmor<br />Balas: 20<br />Se usa en: QBU-88 Калибр: 6,5x47мм Creedmor<br />Патронов: 20<br />Используются c: QBU-88 @@ -85,6 +95,8 @@ Kaliber: 6,5x47mm Creedmor<br />Lövedékek: 20<br />Használható: QBU-88 口径: 6.5x47mm Creedmor<br />装填数: 20<br />次で使用: QBU-88 구경: 6.5x47mm Creedmor<br />장탄수: 20<br />사용처: QBU-88 + 口徑: 6.5x47mm Creedmor 狙擊專用彈<br />發數: 20<br />使用於: QBU-88 + 口径: 6.5x47mm Creedmor 狙击专用弹<br />发数: 20<br />使用于: QBU-88 @@ -100,6 +112,8 @@ Магазин из 30-ти 6,5 мм ИК-трассирующих 6.5mm 30発入り IR-DIM曳光弾 弾倉 30발들이 6.5mm IR-DIM 예광탄 탄창 + 6.5mm 30發 低視度紅外線曳光彈 彈匣 + 6.5mm 30发 低视度红外线曳光弹 弹匣 6.5mm IR-DIM @@ -114,6 +128,8 @@ 6,5 мм ИК-трассирующие 6.5mm IR-DIM曳光弾 6.5mm IR-DIM 예광탄 + 6.5mm 低視紅外曳光彈 + 6.5mm 低视红外曳光弹 Caliber: 6.5x39mm Tracer IR-DIM<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL @@ -128,6 +144,8 @@ Калибр: 6,5x39 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL 口径: 6.5x39mm 曳光弾 IR-DIM<br />装填数: 30<br />次で使用: MX/C/M/SW/3GL 구경: 6.5x39mm IR-DIM 예광탄<br />장탄수: 30<br />사용처: MX/C/M/SW/3GL + 口徑: 6.5x39mm 低視度紅外線曳光彈<br />發數: 30<br />使用於: MX/C/M/SW/3GL + 口径: 6.5x39mm 低视度红外线曳光弹<br />发数: 30<br />使用于: MX/C/M/SW/3GL 6.5mm 30Rnd SD Mag @@ -142,6 +160,8 @@ Магазин из 30-ти 6,5 мм дозвуковых 6.5mm 30発入り 亜音速弾 弾倉 30발들이 6.5mm 아음속탄 탄창 + 6.5mm 30發 消音彈 彈匣 + 6.5mm 30发 消音弹 弹匣 6.5mm SD @@ -156,6 +176,8 @@ 6,5 мм дозвуковые 6.5mm 亜音速弾 6.5mm 아음속탄 + 6.5mm 消音彈 + 6.5mm 消音弹 Caliber: 6.5x39mm SD<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL @@ -170,6 +192,8 @@ Калибр: 6,5x39 мм дозвуковые<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL 口径: 6.5x39mm 亜音速弾<br />装填数: 30<br />次で使用: MX/C/M/SW/3GL 구경: 6.5x39mm SD<br />장탄수: 30<br />사용처: MX/C/M/SW/3GL + 口徑: 6.5x39mm 消音彈<br />發數: 30<br />使用於: MX/C/M/SW/3GL + 口径: 6.5x39mm 消音弹<br />发数: 30<br />使用于: MX/C/M/SW/3GL 6.5mm 30Rnd AP Mag @@ -184,6 +208,8 @@ Магазин из 30-ти 6,5 мм бронебойных 6.5mm 30 発入り徹甲弾 弾倉 30발들이 6.5mm 철갑탄 탄창 + 6.5mm 30發 穿甲彈 彈匣 + 6.5mm 30发 穿甲弹 弹匣 6.5mm AP @@ -198,6 +224,8 @@ 6,5 мм бронебойные 6.5mm 徹甲弾 6.5mm 철갑탄 + 6.5mm 穿甲彈 + 6.5mm 穿甲弹 Caliber: 6.5x39mm AP<br />Rounds: 30<br />Used in: MX/C/M/SW/3GL @@ -212,6 +240,8 @@ Калибр: 6,5x39 мм бронебойные<br />Патронов: 30<br />Используются с: MX/C/M/SW/3GL 口径: 6.5x39mm 徹甲弾<br />装填数: 30<br />次で使用: MX/C/M/SW/3GL 구경: 6.5x39mm 철갑탄<br />장탄수: 30<br />사용처: MX/C/M/SW/3GL + 口徑: 6.5x39mm 穿甲彈<br />發數: 30<br />使用於: MX/C/M/SW/3GL + 口径: 6.5x39mm 穿甲弹<br />发数: 30<br />使用于: MX/C/M/SW/3GL @@ -227,6 +257,8 @@ Магазин из 30-ти 6,5 мм ИК-трассирующих 6.5mm 30発入り IR-DIM曳光弾 弾倉 30발들이 6.5mm IR-DIM 예광탄 탄창 + 6.5mm 30發 低視度紅外線曳光彈 彈匣 + 6.5mm 30发 低视度红外线曳光弹 弹匣 6.5mm IR-DIM @@ -241,6 +273,8 @@ 6,5 мм ИК-трассирующие 6.5mm IR-DIM曳光弾 6.5mm IR-DIM 예광탄 + 6.5mm 低視紅外曳光彈 + 6.5mm 低视红外曳光弹 Caliber: 6.5x39mm Tracer IR-DIM<br />Rounds: 30<br />Used in: Katiba @@ -255,6 +289,8 @@ Калибр: 6,5x39 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: Katiba 口径: 6.5x39mm IR-DIM曳光弾<br />装填数: 30<br />次で使用: Katiba 구경: 6.5x39mm IR-DIM 예광탄<br />장탄수: 30<br />사용처: Katiba + 口徑: 6.5x39mm 低視度紅外線曳光彈<br />發數: 30<br />使用於: Katiba + 口径: 6.5x39mm 低视度红外线曳光弹<br />发数: 30<br />使用于: Katiba 6.5mm 30Rnd SD Mag @@ -269,6 +305,8 @@ Магазин из 30-ти 6,5 мм дозвуковых 6.5mm 30発入り 亜音速弾 弾倉 30발들이 6.5mm 아음속탄 탄창 + 6.5mm 30發 消音彈 彈匣 + 6.5mm 30发 消音弹 弹匣 6.5mm SD @@ -283,6 +321,8 @@ 6,5 мм дозвуковые 6.5mm 亜音速弾 6.5mm 아음속탄 + 6.5mm 消音彈 + 6.5mm 消音弹 Caliber: 6.5x39mm SD<br />Rounds: 30<br />Used in: Katiba @@ -297,6 +337,8 @@ Калибр: 6,5x39 мм дозвуковые<br />Патронов: 30<br />Используются с: Katiba 口径: 6.5x39mm 亜音速弾<br />装填数: 30<br />次で使用: Katiba 구경: 6.5x39mm 아음속탄<br />장탄수: 30<br />사용처: Katiba + 口徑: 6.5x39mm 消音彈<br />發數: 30<br />使用於: Katiba + 口径: 6.5x39mm 消音弹<br />发数: 30<br />使用于: Katiba 6.5mm 30Rnd AP Mag @@ -311,6 +353,8 @@ Магазин из 30-ти 6,5 мм бронебойных 6.5mm 30 発入り徹甲弾 弾倉 30발들이 6.5mm 철갑탄 탄창 + 6.5mm 30發 穿甲彈 彈匣 + 6.5mm 30发 穿甲弹 弹匣 6.5mm AP @@ -325,6 +369,8 @@ 6,5 мм бронебойные 6.5mm 徹甲弾 6.5mm 철갑탄 + 6.5mm 穿甲彈 + 6.5mm 穿甲弹 Caliber: 6.5x39mm AP<br />Rounds: 30<br />Used in: Katiba @@ -339,6 +385,8 @@ Калибр: 6,5x39 мм бронебойные<br />Патронов: 30<br />Используются с: Katiba 口径: 6.5x39mm 徹甲弾<br />装填数: 30<br />次で使用: Katiba 구경: 6.5x39mm 철갑탄<br />장탄수: 30<br />사용처: Katiba + 口徑: 6.5x39mm 穿甲彈<br />發數: 30<br />使用於: Katiba + 口径: 6.5x39mm 穿甲弹<br />发数: 30<br />使用于: Katiba @@ -354,6 +402,8 @@ Магазин из 30-ти 5,56 мм ИК-трассирующих 5.56mm 30発入り IR-DIM曳光弾 弾倉 30발 들이 5.56mm IR-DIM 예광탄 탄창 + 5.56mm 30發 低視度紅外線曳光彈 彈匣 + 5.56mm 30发 低视度红外线曳光弹 弹匣 5.56mm IR-DIM @@ -368,6 +418,8 @@ 5,56 мм ИК-трассирующие 5.56mm IR-DIM曳光弾 5.56mm IR-DIM 예광탄 + 5.56mm 低視紅外曳光彈 + 5.56mm 低视红外曳光弹 Caliber: 5.56x45mm Tracer IR-DIM<br />Rounds: 30<br />Used in: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR @@ -382,6 +434,8 @@ Калибр: 5,56x45 мм ИК-трассирующие<br />Патронов: 30<br />Используются с: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR 口径: 5.56x45mm IR-DIM曳光弾<br />装填数: 30<br />次で使用: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR 구경: 5.56x45mm IR-DIM 예광탄<br />장탄수: 30<br />사용처: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + 口徑: 5.56x45mm 低視度紅外線曳光彈<br />發數: 30<br />使用於: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR + 口径: 5.56x45mm 低视度红外线曳光弹<br />发数: 30<br />使用于: TRG-20, TRG-21/EGLM, Mk20/C/EGLM, SDAR @@ -397,6 +451,8 @@ Магазин из 20-ти 7,62 мм трассирующих 7.62mm 20発入り 曳光弾 20발들이 7.62mm 예광탄 탄창 + 7.62mm 20發 曳光彈 彈匣 + 7.62mm 20发 曳光弹 弹匣 7.62mm Tracer @@ -411,6 +467,8 @@ 7,62 мм трассирущие 7.62mm 曳光弾 7.62mm 예광탄 + 7.62mm 曳光彈 + 7.62mm 曳光弹 Caliber: 7.62x51mm Tracer<br />Rounds: 20<br />Used in: Mk18 ABR @@ -425,6 +483,8 @@ Калибр: 7,62x51 мм трассирующие<br />Патронов: 20<br />Используются с: Mk18 ABR 口径: 7.62x51mm 曳光弾<br />装填数: 20<br />次で使用: Mk18 ABR 구경: 7.62x51mm 예광탄<br />장탄수: 20<br />사용처: Mk18 ABR + 口徑: 7.62x51mm 曳光彈<br />發數: 20<br />使用於: Mk18 ABR + 口径: 7.62x51mm 曳光弹<br />发数: 20<br />使用于: Mk18 ABR 7.62mm 20rnd Tracer IR-DIM Mag @@ -439,6 +499,8 @@ Магазин из 20-ти 7,62 мм ИК-трассирующих 7.62mm 20発入り IR-DIM曳光弾 20발들이 7.62mm IR-DIM 예광탄 탄창 + 7.62mm 20發 低視度紅外線曳光彈 彈匣 + 7.62mm 20发 低视度红外线曳光弹 弹匣 7.62mm IR-DIM @@ -453,6 +515,8 @@ 7,62 мм ИК-трассирующие 7.62mm IR-DIM曳光弾 7.62mm IR-DIM 예광탄 + 7.62mm 低視紅外曳光彈 + 7.62mm 低视红外曳光弹 Caliber: 7.62x51mm Tracer IR-DIM<br />Rounds: 20<br />Used in: Mk18 ABR @@ -467,6 +531,8 @@ Калибр: 7,62x51 мм ИК-трассирующие<br />Патронов: 20<br />Используются с: Mk18 ABR 口径: 7.62x51mm IR-DIM曳光弾<br />装填数: 20<br />次で使用: Mk18 ABR 구경: 7.62x51mm IR-DIM 예광탄<br />장탄수: 20<br />사용처: Mk18 ABR + 口徑: 7.62x51mm 低視度紅外線曳光彈<br />發數: 20<br />使用於: Mk18 ABR + 口径: 7.62x51mm 低视度红外线曳光弹<br />发数: 20<br />使用于: Mk18 ABR 7.62mm 20Rnd SD Mag @@ -481,6 +547,8 @@ Магазин из 20-ти 7,62 мм дозвуковых 7.62mm 20発入り 亜音速弾 弾倉 20발들이 7.62mm 아음속탄 탄창 + 7.62mm 20發 消音彈 彈匣 + 7.62mm 20发 消音弹 弹匣 7.62mm SD @@ -495,6 +563,8 @@ 7,62 мм дозвуковые 7.62mm 亜音速弾 7.62mm 아음속탄 + 7.62mm 消音彈 + 7.62mm 消音弹 Caliber: 7.62x51mm SD<br />Rounds: 20<br />Used in: Mk18 ABR @@ -509,6 +579,8 @@ Калибр: 7,62x51 мм дозвуковые<br />Патронов: 20<br />Используются с: Mk18 ABR 口径: 7.62x51mm 亜音速弾<br />装填数: 20<br />次で使用: Mk18 ABR 구경: 7.62x51mm SD<br />장탄수: 20<br />사용처: Mk18 ABR + 口徑: 7.62x51mm 消音彈<br />發數: 20<br />使用於: Mk18 ABR + 口径: 7.62x51mm 消音弹<br />发数: 20<br />使用于: Mk18 ABR @@ -524,6 +596,8 @@ .338 NM 130-lövedékes nyomkövető heveder .338 NM 130発入り 曳光弾ベルト 130발들이 .338 NM 예광탄 벨트 + .338 NM 130發 曳光彈 彈鏈 + .338 NM 130发 曳光弹 弹链 .338 NM Tracer @@ -538,6 +612,8 @@ .338 NM nyomkövető .338 NM 曳光弾 .338 NM 예광탄 + .338 NM 曳光彈 + .338 NM 曳光弹 Caliber: .338 Norma Magnum Tracer<br />Rounds: 130<br />Used in: SPMG @@ -552,6 +628,8 @@ Kaliber: .338 Norma Magnum nyomkövető<br />Lövedékek: 130<br />Használható: SPMG 口径: .338 Norma Magnum 曳光弾<br />装填数: 130<br />次で使用: SPMG 구경: .338 Norma 매그넘 예광탄<br />장탄수: 130<br />사용처: SPMG + 口徑: .338 Norma Magnum 曳光彈<br />發數: 130<br />使用於: SPMG + 口径: .338 Norma Magnum 曳光弹<br />发数: 130<br />使用于: SPMG .338 NM 130Rnd IR-DIM Belt @@ -566,6 +644,8 @@ .338 NM 130-lövedékes infravörös nyomkövető heveder .338 NM 130発入り IR-DIM曳光弾ベルト 130발들이 .338 NM IR-DIM 예광탄 벨트 + .338 NM 130發 低視度紅外線曳光彈 彈鏈 + .338 NM 130发 低视度红外线曳光弹 弹链 .338 NM IR-DIM @@ -580,6 +660,8 @@ .338 NM infravörös nyomkövető .338 NM IR-DIM曳光弾 .338 NM IR-DIM 예광탄 + .338 NM 低視紅外曳光彈 + .338 NM 低视红外曳光弹 Caliber: .338 Norma Magnum Tracer IR-DIM<br />Rounds: 130<br />Used in: SPMG @@ -594,6 +676,8 @@ Kaliber: .338 Norma Magnum infravörös nyomkövető<br />Lövedékek: 130<br />Használható: SPMG 口径: .338 Norma Magnum IR-DIM曳光弾<br />装填数: 130<br />次で使用: SPMG 구경: .338 Norma 매그넘 IR-DIM 예광탄<br />장탄수: 130<br />사용처: SPMG + 口徑: .338 Norma Magnum 低視度紅外線曳光彈<br />發數: 130<br />使用於: SPMG + 口径: .338 Norma Magnum 低视度红外线曳光弹<br />发数: 130<br />使用于: SPMG .338 NM 130Rnd AP Belt @@ -608,6 +692,8 @@ .338 NM 130-lövedékes páncéltörő heveder .338 NM 130発入り 徹甲弾ベルト 130발들이 .338 NM 철갑탄 벨트 + .338 NM 130發 穿甲彈 彈鏈 + .338 NM 130发 穿甲弹 弹链 .338 NM AP @@ -622,6 +708,8 @@ .338 NM páncéltörő .338 NM 徹甲弾 .338 NM 철갑탄 + .338 NM 穿甲彈 + .338 NM 穿甲弹 Caliber: .338 Norma Magnum AP<br />Rounds: 130<br />Used in: SPMG @@ -636,13 +724,15 @@ Kaliber: .338 Norma Magnum páncéltörő<br />Lövedékek: 130<br />Használható: SPMG 口径: .338 Norma Magnum 徹甲弾<br />装填数: 130<br />次で使用: SPMG 구경: .338 Norma 매그넘 철갑탄<br />장탄수: 130<br />사용처: SPMG + 口徑: .338 Norma Magnum 穿甲彈<br />發數: 130<br />使用於: SPMG + 口径: .338 Norma Magnum 穿甲弹<br />发数: 130<br />使用于: SPMG 9.3mm 10Rnd Tracer Mag 9,3mm 10-Patronen-Magazin Leuchtspur Magazynek 9.3mm 10rd Smugacz - Ch. 9.3mm 10Cps Traçante + Ch. 9,3mm 10Cps Traçante Cargador de 10 balas trazadoras de 9.3mm Магазин из 10-ти 9,3 мм трассирующих 9.3mm 10Rnd Tracer Mag @@ -651,13 +741,15 @@ 9,3mm 10-lövedékes nyomkövető tár 9.3mm 10発入り 曳光弾 弾倉 10발들이 9.3mm 예광탄 탄창 + 9.3mm 10發 曳光彈 彈匣 + 9.3mm 10发 曳光弹 弹匣 9.3mm Tracer 9,3mm Leuchtspur 9,3mm Smugacz 9.3mm Svítící - 9.3mm Traçante + 9,3mm Traçante 9.3mm Trazadora 9,3 мм трассирующие 9.3mm Tracer @@ -665,12 +757,14 @@ 9,3mm nyomkövető 9.3mm 曳光弾 9.3mm 예광탄 + 9.3mm 曳光彈 + 9.3mm 曳光弹 Caliber: 9.3x64mm Tracer<br />Rounds: 10<br />Used in: Cyrus Kaliber: 9,3x64mm Leuchtspur<br />Patronen: 10<br />Eingesetzt von: Cyrus Kaliber: 9,3x64mm Smugacz<br />Pociski: 10<br />Używany w: Cyrus - Calibre: 9.3x64mm Traçante<br />Cartouches: 10<br />Utilisé avec: Cyrus + Calibre: 9,3x64mm Traçante<br />Cartouches: 10<br />Utilisé avec: Cyrus Calibre: 9.3x64mm trazadora<br />Balas: 10<br />Se usa en: Cyrus Калибр: 9,3x64 мм трассирующие<br />Патронов: 10<br />Используются с: Cyrus Calibro: 9.3x64mm Tracer<br />Munizioni: 10<br />In uso su: Cyrus @@ -679,12 +773,14 @@ Kaliber: 9,3x64mm nyomkövető<br />Lövedékek: 10<br />Használható: Cyrus 口径: 9.3x64mm 曳光弾<br />装填数: 10<br />次で使用: Cyrus 구경: 9.3x64mm 예광탄<br />장탄수: 10<br />사용처: Cyrus + 口徑: 9.3x64mm 曳光彈<br />發數: 10<br />使用於: Cyrus + 口径: 9.3x64mm 曳光弹<br />发数: 10<br />使用于: Cyrus 9.3mm 10Rnd Tracer IR-DIM Mag 9,3mm 10-Patronen-Magazin Leuchtspur IR-DIM Magazynek 9,3mm 10rd Smugacz IR-DIM - Ch. 9.3mm 10Cps Traçante IR-DIM + Ch. 9,3mm 10Cps Traçante IR-DIM Cargador de 10 balas trazadoras IR-DIM de 9.3mm Магазин из 10-ти 9,3 мм ИК-трассирующих 9.3mm 10Rnd Tracciante IR-DIM Mag @@ -693,13 +789,15 @@ 9,3mm 10-lövedékes infravörös nyomkövető tár 9.3mm 10発入り IR-DIM曳光弾 弾倉 10발들이 9.3mm IR-DIM 예광탄 탄창 + 9.3mm 10發 低視度紅外線曳光彈 彈匣 + 9.3mm 10发 低视度红外线曳光弹 弹匣 9.3mm IR-DIM 9,3mm IR-DIM 9,3mm IR-DIM 9.3mm IR-DIM - 9.3mm IR-DIM + 9,3mm IR-DIM 9.3mm IR-DIM 9,3 мм ИК-трассирующие 9.3mm IR-DIM @@ -707,12 +805,14 @@ 9,3mm infravörös nyomkövető 9.3mm IR-DIM曳光弾 9.3mm IR-DIM 예광탄 + 9.3mm 低視紅外曳光彈 + 9.3mm 低视红外曳光弹 Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 10<br />Used in: Cyrus Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Patronen: 10<br />Eingesetzt von: Cyrus Kaliber: 9,3x64mm Smugacz IR-DIM<br />Pociski: 10<br />Używany w: Cyrus - Calibre: 9.3x64mm Traçante IR-DIM<br />Cartouches: 10<br />Utilisé avec: Cyrus + Calibre: 9,3x64mm Traçante IR-DIM<br />Cartouches: 10<br />Utilisé avec: Cyrus Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 10<br />Se usa en: Cyrus Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 10<br />Используются с: Cyrus Calibro: 9.3x64mm Tracciante IR-DIM<br />Munizioni: 10<br />In uso su: Cyrus @@ -721,13 +821,15 @@ Kaliber: 9,3x64mm infravörös nyomkövető<br />Lövedékek: 10<br /> Használható: Cyrus 口径: 9.3x64mm IR-DIM曳光弾<br />装填数: 10<br />次で使用: Cyrus 구경: 9.3x64mm IR-DIM 예광탄<br />장탄수: 10<br />사용처: Cyrus + 口徑: 9.3x64mm 低視度紅外線曳光彈<br />發數: 10<br />使用於: Cyrus + 口径: 9.3x64mm 低视度红外线曳光弹<br />发数: 10<br />使用于: Cyrus 9.3mm 150Rnd Tracer Belt 9,3mm 150-Patronen-Gurt Leuchtspur Taśma 9,3mm 150rd Smugacz - Bande 9.3mm 150Cps Traçante + Bande 9,3mm 150Cps Traçante Cinta de 150 balas trazadoras de 9.3mm Лента из 150-ти 9,3 мм трассирующих 9.3mm 150Rnd Tracer Belt @@ -736,13 +838,15 @@ 9,3mm 150-lövedékes nyomkövető heveder 9.3mm 150発入り 曳光弾ベルト 150발들이 9.3mm 예광탄 벨트 + 9.3mm 150發 曳光彈 彈鏈 + 9.3mm 150发 曳光弹 弹链 9.3mm Tracer 9,3mm Leuchtspur 9,3mm Smugacz 9.3mm Svítící - 9.3mm Traçante + 9,3mm Traçante 9.3mm Trazadora 9,3 мм трассирующие 9.3mm Tracciante @@ -750,12 +854,14 @@ 9,3mm nyomkövető 9.3mm 曳光弾 9.3mm 예광탄 + 9.3mm 曳光彈 + 9.3mm 曳光弹 Caliber: 9.3x64mm Tracer<br />Rounds: 150<br />Used in: Navid Kaliber: 9,3x64mm Leuchtspur<br />Patronen: 150<br />Eingesetzt von: Navid Kaliber: 9,3x64mm Smugacz<br />Pociski: 150<br />Używane w: Navid - Calibre: 9.3x64mm Traçante<br />Cartouches: 150<br />Utilisé avec: Navid + Calibre: 9,3x64mm Traçante<br />Cartouches: 150<br />Utilisé avec: Navid Calibre: 9.3x64mm trazadora<br />Balas: 150<br />Se usa en: Navid Калибр: 9,3x64 мм трассирующие<br />Патронов: 150<br />Используются с: Навид Calibro: 9.3x64mm Tracciante<br />Munizioni: 150<br />In uso su: Navid @@ -764,12 +870,14 @@ Kaliber: 9,3x64mm nyomkövető<br />Lövedékek: 150<br />Használható: Navid 口径: 9.3x64mm 曳光弾<br />装填数: 150<br />次で使用: Navid 구경: 9.3x64mm 예광탄<br />장탄수: 150<br />사용처: Navid + 口徑: 9.3x64mm 曳光彈<br />發數: 150<br />使用於: Navid + 口径: 9.3x64mm 曳光弹<br />发数: 150<br />使用于: Navid 9.3mm 150Rnd Tracer IR-DIM Belt 9,3mm 150-Patronen-Gurt Leuchtspur IR-DIM Taśma 9,3mm 150rd Smugacz IR-DIM - Bande 9.3mm 150Cps Traçante IR-DIM + Bande 9,3mm 150Cps Traçante IR-DIM Cinta de 150 balas trazadoras IR-DIM de 9.3mm Лента из 150-ти 9,3 мм ИК-трассирующих 9.3mm 150Rnd Tracciante IR-DIM Belt @@ -778,13 +886,15 @@ 9,3mm 150-lövedékes infravörös nyomkövető heveder 9.3mm 150発入り IR-DIM曳光弾ベルト 150발들이 9.3mm IR-DIM 예광탄 벨트 + 9.3mm 150發 低視度紅外線曳光彈 彈鏈 + 9.3mm 150发 低视度红外线曳光弹 弹链 9.3mm IR-DIM 9,3mm IR-DIM 9,3mm IR-DIM 9.3mm IR-DIM - 9.3mm IR-DIM + 9,3mm IR-DIM 9.3mm IR-DIM 9,3 мм ИК-трассирующие 9.3mm IR-DIM @@ -792,12 +902,14 @@ 9,3mm infravörös nyomkövető 9.3mm IR-DIM曳光弾 9.3mm IR-DIM 예광탄 + 9.3mm 低視紅外曳光彈 + 9.3mm 低视红外曳光弹 Caliber: 9.3x64mm Tracer IR-DIM<br />Rounds: 150<br />Used in: Navid Kaliber: 9,3x64mm Leuchtspur IR-DIM<br />Patronen: 150<br />Eingesetzt von: Navid Kaliber: 9,3x64mm Smugacz IR-DIM<br />Pociski: 150<br />Używane w: Navid - Calibre: 9.3x64mm Traçante IR-DIM<br />Cartouches: 150<br />Utilisé avec: Navid + Calibre: 9,3x64mm Traçante IR-DIM<br />Cartouches: 150<br />Utilisé avec: Navid Calibre: 9.3x64mm trazadora IR-DIM<br />Balas: 150<br />Se usa en: Navid Калибр: 9,3x64 мм ИК-трассирующие<br />Патронов: 150<br />Используются с: Навид Calibro: 9.3x64mm Tracciante IR-DIM<br />Munizioni: 150<br />In uso su: Navid @@ -806,12 +918,14 @@ Kaliber: 9,3x64mm infravörös nyomkövető<br />Lövedékek: 150<br />Használható: Navid 口径: 9.3x64mm IR-DIM曳光弾<br />装填数: 150<br />次で使用: Navid 구경: 9.3x64mm IR-DIM 예광탄<br />장탄수: 150<br />사용처: Navid + 口徑: 9.3x64mm 低視度紅外線曳光彈<br />發數: 150<br />使用於: Navid + 口径: 9.3x64mm 低视度红外线曳光弹<br />发数: 150<br />使用于: Navid 9.3mm 150Rnd AP Belt 9,3mm 150-Patronen-Gurt Hartkern Taśma 9,3mm 150rd AP - Bande 9.3mm 150Cps AP + Bande 9,3mm 150Cps AP Cinta de 150 balas AP de 9.3mm Лента из 150-ти 9,3 мм бронебойных 9.3mm 150Rnd AP Belt @@ -820,13 +934,15 @@ 9,3mm 150-lövedékes páncéltörő heveder 9.3mm 150発入り 徹甲弾ベルト 150발들이 9.3mm 철갑탄 벨트 + 9.3mm 150發 穿甲彈 彈鏈 + 9.3mm 150发 穿甲弹 弹链 9.3mm AP 9,3mm AP 9,3mm AP 9.3mm AP - 9.3mm AP + 9,3mm AP 9.3mm AP 9,3 мм бронебойные 9.3mm AP @@ -834,12 +950,14 @@ 9,3mm páncéltörő 9.3mm 徹甲弾 9.3mm 철갑탄 + 9.3mm 穿甲彈 + 9.3mm 穿甲弹 Caliber: 9.3x64mm AP<br />Rounds: 150<br />Used in: Navid Kaliber: 9,3x64mm Hartkern<br />Patronen: 150<br />Eingesetzt von: Navid Kaliber: 9,3x64mm AP<br />Pociski: 150<br />Używane w: Navid - Calibre: 9.3x64mm AP<br />Cartouches: 150<br />Utilisé avec: Navid + Calibre: 9,3x64mm AP<br />Cartouches: 150<br />Utilisé avec: Navid Calibre: 9.3x64mm AP<br />Balas: 150<br />Se usa en: Navid Калибр: 9,3x64 мм бронебойные<br />Патронов: 150<br />Используются с: Навид Calibro: 9.3x64mm AP<br />Munizioni: 150<br />In uso su: Navid @@ -848,6 +966,8 @@ Kaliber: 9,3x64mm páncéltörő<br />Lövedékek: 150<br />Használható: Navid 口径: 9.3x64mm 徹甲弾<br />装填数: 150<br />次で使用: Navid 구경: 9.3x64mm 철갑탄<br />장탄수: 150<br />사용처: Navid + 口徑: 9.3x64mm 穿甲彈<br />發數: 150<br />使用於: Navid + 口径: 9.3x64mm 穿甲弹<br />发数: 150<br />使用于: Navid 9x19mm 16Rnd Mag @@ -862,6 +982,8 @@ 9x19mm 16-lövedékes tár 9x19mm 16発入り 弾倉 16발들이 9x19mm 탄창 + 9x19mm 16發 彈匣 + 9x19mm 16发 弹匣 9x19mm @@ -876,6 +998,8 @@ 9x19mm 9x19mm 9x19mm + 9x19mm + 9x19mm 9x19mm 30Rnd Mag @@ -890,6 +1014,8 @@ 9x19mm 16-lövedékes tár 9x19mm 30発入り 弾倉 30발들이 9x19mm 탄창 + 9x19mm 30發 彈匣 + 9x19mm 30发 弹匣 9x19mm 30Rnd Mag @@ -904,6 +1030,8 @@ 9x19mm 30-lövedékes tár 9x19mm 30発入り 弾倉 30발들이 9x19mm 탄창 + 9x19mm 30發 彈匣 + 9x19mm 30发 弹匣 9x19mm @@ -918,6 +1046,8 @@ 9x19mm 9x19mm 9x19mm + 9x19mm + 9x19mm 9x19mm 30Rnd Mag @@ -932,11 +1062,13 @@ 9x19mm 30-lövedékes tár 9x19mm 30発入り 弾倉 30발들이 9x19mm 탄창 + 9x19mm 30發 彈匣 + 9x19mm 30发 弹匣 7.62x54mm 10Rnd Tracer Mag Magazynek 7,62x54mm 10rd Smugacz - Ch. 7.62x54mm 10Rnd Traçante + Ch. 7,62x54mm 10Cps Traçante Cargador de 10 balas trazadoras de 7.62x54mm Магазин из 10-ти 7,62 мм ИК-трассирующих 7,62x54mm 10-Patronen-Magazin Leuchtspur @@ -946,11 +1078,13 @@ 7,62x54mm 10-lövedékes nyomkövető tár 7.62x54mm 10発入り 曳光弾 弾倉 10발들이 7.62x54mm 예광탄 탄창 + 7.62x54mm 10發 曳光彈 彈匣 + 7.62x54mm 10发 曳光弹 弹匣 7.62mm 7,62mm - 7.62mm + 7,62mm 7.62mm 7,62 мм 7,62mm @@ -960,11 +1094,13 @@ 7,62mm 7.62mm 7.62mm + 7.62mm + 7.62mm 7.62x54mm 10Rnd Tracer Mag Magazynek 7,62x54mm 10rd Smugacz - Ch. 7.62x54mm 10Cps Traçante + Ch. 7,62x54mm 10Cps Traçante Cargador de 10 balas trazadoras de 7.62x54mm Магазин из 10-ти 7,62 мм ИК-трассирующих 7,62x54mm 10-Patronen-Magazin Leuchtspur @@ -974,11 +1110,13 @@ 7,62x54mm 10-lövedékes nyomkövető tár 7.62x54mm 10発入り 曳光弾 弾倉 10발들이 7.62x54mm 예광탄 탄창 + 7.62x54mm 10發 曳光彈 彈匣 + 7.62x54mm 10发 曳光弹 弹匣 6.5mm 100Rnd Tracer IR-DIM Mag Magazynek 6,5mm 100rd Smugacz IR-DIM - Ch. 6.5mm 100Rnd Traçante IR-DIM + Ch. 6,5mm 100Cps Traçante IR-DIM Cargador de 100 balas trazadoras IR-DIM de 6.5mm Магазин из 100 6,5 мм ИК-трассирующих 6,5mm 100-Patronen-Magazin IR-DIM Leuchtspur @@ -988,11 +1126,13 @@ 6,5mm 100-lövedékes infravörös nyomkövető tár 6.5mm 100発入り IR-DIM曳光弾 弾倉 100발들이 6.5mm IR-DIM 예광탄 탄창 + 6.5mm 100發 低視度紅外線曳光彈 彈匣 + 6.5mm 100发 低视度红外线曳光弹 弹匣 6.5mm IR-DIM 6,5mm IR-DIM - 6.5mm IR-DIM + 6,5mm IR-DIM 6.5mm IR-DIM 6,5 мм ИК-трассирующие 6,5mm IR-DIM @@ -1002,11 +1142,13 @@ 6,5mm infravörös nyomkövető 6.5mm IR-DIM曳光弾 6.5mm IR-DIM 예광탄 + 6.5mm 低視紅外曳光彈 + 6.5mm 低视红外曳光弹 6.5mm 100Rnd Tracer IR-DIM Mag<br />Rounds: 100<br />Used in: MX LSW Magazynek 6,5mm 100rd Smugacz IR-DIM - Ch. 6.5mm 100Rnd Traçante IR-DIM<br />Cartouches: 100<br />Utilisé avec: MX LSW + Ch. 6,5mm 100Cps Traçante IR-DIM<br />Cartouches: 100<br />Utilisé avec: MX LSW Cargador de 100 balas trazadoras IR-DIM de 6.5mm Магазин из 100 6,5 мм ИК-трассирующих 6,5mm 100-Patronen-Magazin IR-DIM Leuchtspur<br />Patronen: 100<br />Eingesetzt von: MXLSW @@ -1016,11 +1158,13 @@ 6.5mm 100-lövedékes infravörös nyomkövető tár<br />Lövedékek: 100<br />Használható: MX LSW 6.5mm 100発入り IR-DIM曳光弾 弾倉<br />装填数: 100<br />次で使用: MX LSW 100발들이 6.5mm IR-DIM 예광탄 탄창<br />장탄수: 100<br />사용처: MX LSW + 6.5mm 100發 低視度紅外線曳光彈<br />發數: 100<br />使用於: MX LSW + 6.5mm 100发 低视度红外线曳光弹<br />发数: 100<br />使用于: MX LSW 6.5mm 200Rnd Tracer IR-DIM Belt Magazynek 6,5mm 200rd Smugacz IR-DIM - Bande 6.5mm 200Rnd Traçante IR-DIM + Bande 6,5mm 200Cps Traçante IR-DIM Cinta de 200 balas trazadoras IR-DIM de 6.5mm Магазин из 200-т 6,5 мм ИК-трассирующих 6,5mm 200-Patronen-Gurt IR-DIM Leuchtspur @@ -1030,11 +1174,13 @@ 6,5mm 200-lövedékes infravörös nyomkövető heveder 6.5mm 200発入り IR-DIM曳光弾ベルト 200발들이 6.5mm IR-DIM 예광탄 탄창 + 6.5mm 200發 低視度紅外線曳光彈 彈鏈 + 6.5mm 200发 低视度红外线曳光弹 弹链 6.5mm IR-DIM 6,5mm IR-DIM - 6.5mm IR-DIM + 6,5mm IR-DIM 6.5mm IR-DIM 6,5 мм ИК-трассирующие 6,5mm IR-DIM @@ -1044,6 +1190,8 @@ 6,5mm infravörös nyomkövető 6.5mm IR-DIM曳光弾 6.5mm IR-DIM 예광탄 + 6.5mm 低視紅外曳光彈 + 6.5mm 低视红外曳光弹 6.5mm 200Rnd Tracer IR-DIM Belt<br />Rounds: 200<br />Used in: Stoner 99 LMG @@ -1058,11 +1206,13 @@ 6.5mm 200-lövedékes infravörös nyomkövető heveder<br />Lövedékek: 200<br />Használható: Stoner 99 LMG 6.5mm 200発入り IR-DIM曳光弾ベルト<br />装填数: 200<br />次で使用: Stoner 99 LMG 200발들이 6.5mm IR-DIM 예광탄 벨트<br />장탄수: 200<br />사용처: Stoner 99 LMG + 6.5mm 200發 低視度紅外線曳光彈<br />發數: 200<br />使用於: Stoner 99 LMG + 6.5mm 200发 低视度红外线曳光弹<br />发数: 200<br />使用于: Stoner 99 LMG 5.56mm 30Rnd Mag (Mk262) Magazynek 5,56mm 30rd Mk262 - 5.56mm 30Cps (Mk262) + 5,56mm 30Cps (Mk262) Cargador de 30 balas de 5.56mm (Mk262) Магазин из 30-ти 5.56 мм Mk262 5,56mm 30-Patronen-Magazin (Mk262) @@ -1072,11 +1222,13 @@ 5,56mm 30-lövedékes tár (Mk262) 5.56mm 30発入り 弾倉 (Mk262) 30발들이 5.56mm 탄창 (Mk262) + 5.56mm 30發 彈匣 (Mk262 狙擊專用彈) + 5.56mm 30发 弹匣 (Mk262 狙击专用弹) 5.56mm Mk262 5,56mm Mk262 - 5.56mm Mk262 + 5,56mm Mk262 5.56mm Mk262 5,56 мм Mk262 5,56mm Mk262 @@ -1086,11 +1238,13 @@ 5,56mm Mk262 5.56mm Mk262 5.56mm Mk262 + 5.56mm Mk262 狙擊專用彈 + 5.56mm Mk262 狙击专用弹 Caliber: 5.56x45mm NATO (Mk262)<br />Rounds: 30 Kaliber: 5,56x45mm NATO (Mk262)<br />Pociski: 30 - Calibre: 5.56x45mm NATO (Mk262)<br />Cartouches: 30 + Calibre: 5,56x45mm NATO (Mk262)<br />Cartouches: 30 Calibre: 5.56x45mm NATO (Mk262)<br />Balas: 30 Калибр: 5,56x45 мм NATO (Mk262)<br />Патронов: 30 Kaliber: 5,56x45mm NATO (Mk262)<br />Patronen: 30 @@ -1100,11 +1254,13 @@ Kaliber: 5,56x45mm NATO (Mk262)<br />Lövedékek: 30 口径: 5.56x45mm NATO (Mk262)<br />装填数: 30 구경: 5.56x45mm NATO (Mk262)<br />장탄수: 30 + 口徑: 5.56x45mm NATO標準 (Mk262 狙擊專用彈)<br />發數: 30 + 口径: 5.56x45mm NATO标准 (Mk262 狙击专用弹)<br />发数: 30 5.56mm 30Rnd Mag (Mk318) Magazynek 5,56mm 30rd (Mk318) - Ch. 5.56mm 30Cps (Mk318) + Ch. 5,56mm 30Cps (Mk318) Cargador de 30 balas de 5.56mm (Mk318) Магазин из 30-ти 5.56 мм (Mk318) 5,56mm 30-Patronen-Magazin (Mk318) @@ -1114,11 +1270,13 @@ 5,56mm 30-lövedékes tár (Mk318) 5.56mm 30発入り 弾倉 (Mk318) 30발들이 5.56mm 탄창 (Mk318) + 5.56mm 30發 彈匣 (Mk318 特戰專用彈) + 5.56mm 30发 弹匣 (Mk318 特战专用弹) 5.56mm Mk318 5,56mm Mk318 - 5.56mm Mk318 + 5,56mm Mk318 5.56mm Mk318 5.56 мм Mk318 5,56mm Mk318 @@ -1128,11 +1286,13 @@ 5,56mm Mk318 5.56mm Mk318 5.56mm Mk318 + 5.56mm Mk318 特戰專用彈 + 5.56mm Mk318 特战专用弹 Caliber: 5.56x45mm NATO (Mk318)<br />Rounds: 30 Kaliber: 5,56x45mm NATO (Mk318)<br />Pociski: 30 - Calibre: 5.56x45mm NATO (Mk318)<br />Cartouches: 30 + Calibre: 5,56x45mm NATO (Mk318)<br />Cartouches: 30 Calibre: 5.56x45mm NATO (Mk318)<br />Balas: 30 Калибр: 5,56x45 мм NATO (Mk318)<br />Патронов: 30 Kaliber: 5,56x45mm NATO (Mk318)<br />Patronen: 30 @@ -1142,11 +1302,13 @@ Kaliber: 5,56x45mm NATO (Mk318)<br />Lövedékek: 30 口径: 5.56x45mm NATO (Mk318)<br />装填数: 30 구경: 5.56x45mm NATO (Mk318)<br />장탄수: 30 + 口徑: 5.56x45mm NATO標準 (Mk318 特戰專用彈)<br />發數: 30 + 口径: 5.56x45mm NATO标准 (Mk318 特战专用弹)<br />发数: 30 5.56mm 30Rnd Mag (M995 AP) Magazynek 5,56mm 30rd (M995 AP) - Ch. 5.56mm 30Cps (M995 AP) + Ch. 5,56mm 30Cps (M995 AP) Cargador de 30 balas de 5.56mm (M995 AP) Магазин из 30-ти 5.56 мм (M995 бронебойные) 5,56mm 30-Patronen-Magazin (M995AP) @@ -1156,11 +1318,13 @@ 5,56mm 30-lövedékes tár (M995 páncéltörő) 5.56mm 30発入り 弾倉 (M995 徹甲弾) 30발들이 5.56mm 탄창 (Mk995 철갑탄) + 5.56mm 30發 彈匣 (M995 穿甲彈) + 5.56mm 30发 弹匣 (M995 穿甲弹) 5.56mm AP 5,56mm AP - 5.56mm AP + 5,56mm AP 5.56mm AP 5.56 мм бронебойные 5,56mm AP @@ -1170,11 +1334,13 @@ 5,56mm páncéltörő 5.56mm 徹甲弾 5.56mm 철갑탄 + 5.56mm M995 穿甲彈 + 5.56mm M995 穿甲弹 Caliber: 5.56x45mm NATO (M995 AP)<br />Rounds: 30 Kaliber: 5,56x45mm NATO (M995 AP)<br />Pociski: 30 - Calibre: 5.56x45mm NATO (M995 AP)<br />Cartouches: 30 + Calibre: 5,56x45mm NATO (M995 AP)<br />Cartouches: 30 Calibre: 5.56x45mm NATO (M995 AP)<br />Balas: 30 Калибр: 5,56x45 мм NATO (M995 бронебойные)<br />Патронов: 30 Kaliber: 5,56x45mm NATO (M995 AP)<br />Patronen: 30 @@ -1184,11 +1350,13 @@ Kaliber: 5,56x45mm NATO (M995 páncéltörő)<br />Lövedékek: 30 口径: 5.56x45mm NATO (M995 徹甲弾)<br />装填数: 30 구경: 5.56x45mm NATO (Mk995 철갑탄)<br />장탄수: 30 + 口徑: 5.56x45mm NATO標準 (M995 穿甲彈)<br />發數: 30 + 口径: 5.56x45mm NATO标准 (M995 穿甲弹)<br />发数: 30 7.62mm 10Rnd Mag (M118LR) Magazynek 7,62mm 10rd (M118LR) - Ch. 7.62mm 10Cps (M118LR) + Ch. 7,62mm 10Cps (M118LR) Cargador de 10 balas de 7.62mm (M118LR) Магазин из 10-ти 7,62 мм (M118LR) 7,62mm 10-Patronen-Magazin (M118LR) @@ -1198,11 +1366,13 @@ 7,62mm 10-lövedékes tár (M118LR) 7.62mm 10発入り 弾倉 (M118LR) 10발들이 7.62mm 탄창 (M118LR) + 7.62mm 10發 彈匣 (M118LR 狙擊專用彈) + 7.62mm 10发 弹匣 (M118LR 狙击专用弹) 7.62mm M118LR 7,62mm M118LR - 7.62mm M118LR + 7,62mm M118LR 7.62mm M118LR 7,62 мм M118LR 7,62mm M118LR @@ -1212,11 +1382,13 @@ 7,62mm M118LR 7.62mm M118LR 7.62mm M118LR + 7.62mm M118LR 狙擊專用彈 + 7.62mm M118LR 狙击专用弹 Caliber: 7.62x51mm NATO (M118LR)<br />Rounds: 10 Kaliber: 7,62x51mm NATO (M118LR)<br />Pociski: 10 - Calibre: 7.62x51mm NATO (M118LR)<br />Cartouches: 10 + Calibre: 7,62x51mm NATO (M118LR)<br />Cartouches: 10 Calibre: 7.62x51mm NATO (M118LR)<br />Balas: 10 Калибр: 7,62x51 мм NATO (M118LR)<br />Патронов: 10 Kaliber: 7,62x51mm NATO (M118LR)<br />Patronen: 10 @@ -1226,11 +1398,13 @@ Kaliber: 7,62x51mm NATO (M118LR)<br />Lövedékek: 10 口径: 7.62x51mm NATO (M118LR)<br />装填数: 10 구경: 7.62x51mm NATO (M118LR)<br />장탄수: 10 + 口徑: 7.62x51mm NATO標準 (M118LR 狙擊專用彈)<br />發數: 10 + 口径: 7.62x51mm NATO标准 (M118LR 狙击专用弹)<br />发数: 10 7.62mm 20Rnd Mag (M118LR) Magazynek 7,62mm 20rd (M118LR) - Ch. 7.62mm 20Cps (M118LR) + Ch. 7,62mm 20Cps (M118LR) Cargador de 20 balas de 7.62mm (M118LR) Магазин из 20-ти 7,62 мм (M118LR) 7,62mm 20-Patronen-Magazin (M118LR) @@ -1240,11 +1414,13 @@ 7,62mm 20-lövedékes tár (M118LR) 7.62mm 20発入り 弾倉 (M118LR) 20발들이 7.62mm 탄창 (M118LR) + 7.62mm 20發 彈匣 (M118LR 狙擊專用彈) + 7.62mm 20发 弹匣 (M118LR 狙击专用弹) 7.62mm M118LR 7,62mm M118LR - 7.62mm M118LR + 7,62mm M118LR 7.62mm M118LR 7,62 мм M118LR 7,62mm M118LR @@ -1254,6 +1430,8 @@ 7,62mm M118LR 7.62mm M118LR 7.62mm M118LR + 7.62mm M118LR 狙擊專用彈 + 7.62mm M118LR 狙击专用弹 Caliber: 7.62x51mm NATO (M118LR)<br />Rounds: 20 @@ -1268,11 +1446,13 @@ Kaliber: 7,62x51mm NATO (M118LR)<br />Lövedékek: 20 口径: 7.62x51mm NATO (M118LR)<br />装填数: 20 구경: 7.62x51mm NATO (M118LR)<br />장탄수: 20 + 口徑: 7.62x51mm NATO標準 (M118LR 狙擊專用彈)<br />發數: 20 + 口径: 7.62x51mm NATO标准 (M118LR 狙击专用弹)<br />发数: 20 7.62mm 10Rnd Mag (Mk316 Mod 0) Magazynek 7,62mm 10rd (Mk316 Mod 0) - Ch. 7.62mm 10Cps (Mk316 Mod 0) + Ch. 7,62mm 10Cps (Mk316 Mod 0) Cargador de 10 balas de 7.62mm (Mk316 Mod 0) Магазин из 10-ти 7,62 мм (Mk316 Mod 0) 7,62mm 10-Patronen-Magazin (Mk316 Mod 0) @@ -1282,11 +1462,13 @@ 7,62mm 10-lövedékes tár (Mk316 Mod 0) 7.62mm 10発入り 弾倉 (Mk316 Mod 0) 10발들이 7.62mm 탄창 (Mk316 Mod 0) + 7.62mm 10發 彈匣 (Mk316 Mod 0 狙擊專用彈) + 7.62mm 10发 弹匣 (Mk316 Mod 0 狙击专用弹) 7.62mm Mk316 7,62mm Mk316 - 7.62mm Mk316 + 7,62mm Mk316 7.62mm Mk316 7,62 мм Mk316 7,62mm Mk316 @@ -1296,11 +1478,13 @@ 7,62mm Mk316 7.62mm Mk316 7.62mm Mk316 + 7.62mm Mk316 狙擊專用彈 + 7.62mm Mk316 狙击专用弹 Caliber: 7.62x51mm NATO (Mk316 Mod 0)<br />Rounds: 10 Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Pociski: 10 - Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Cartouches: 10 + Calibre: 7,62x51mm NATO (Mk316 Mod 0)<br />Cartouches: 10 Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Balas: 10 Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 10 Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Patronen: 10 @@ -1310,11 +1494,13 @@ Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Lövedékek: 10 口径: 7.62x51mm NATO (Mk316 Mod 0)<br />装填数: 10 구경: 7.62x51mm NATO (Mk316 Mod 0)<br />장탄수: 10 + 口徑: 7.62x51mm NATO標準 (Mk316 Mod 0 狙擊專用彈)<br />發數: 10 + 口径: 7.62x51mm NATO标准 (Mk316 Mod 0 狙击专用弹)<br />发数: 10 7.62mm 20Rnd Mag (Mk316 Mod 0) Magazynek 7,62mm 20rd (Mk316 Mod 0) - Ch. 7.62mm 20Cps (Mk316 Mod 0) + Ch. 7,62mm 20Cps (Mk316 Mod 0) Cargador de 20 balas de 7.62mm (Mk316 Mod 0) Магазин из 20-ти 7,62 мм (Mk316 Mod 0) 7,62mm 20-Patronen-Magazin (Mk316 Mod 0) @@ -1324,11 +1510,13 @@ 7,62mm 20-lövedékes tár (Mk316 Mod 0) 7.62mm 20発入り 弾倉 (Mk316 Mod 0) 20발들이 7.62mm 탄창 (Mk316 Mod 0) + 7.62mm 20發 彈匣 (Mk316 Mod 0 狙擊專用彈) + 7.62mm 20发 弹匣 (Mk316 Mod 0 狙击专用弹) 7.62mm Mk316 7,62mm Mk316 - 7.62mm Mk316 + 7,62mm Mk316 7.62mm Mk316 7,62 мм Mk316 7,62mm Mk316 @@ -1338,11 +1526,13 @@ 7,62mm Mk316 7.62mm Mk316 7.62mm Mk316 + 7.62mm Mk316 狙擊專用彈 + 7.62mm Mk316 狙击专用弹 Caliber: 7.62x51mm NATO (Mk316 Mod 0)<br />Rounds: 20 Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Pociski: 20 - Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Cartouches: 20 + Calibre: 7,62x51mm NATO (Mk316 Mod 0)<br />Cartouches: 20 Calibre: 7.62x51mm NATO (Mk316 Mod 0)<br />Balas: 20 Калибр: 7,62x51 мм NATO (Mk316 Mod 0)<br />Патронов: 20 Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Patronen: 20 @@ -1352,11 +1542,13 @@ Kaliber: 7,62x51mm NATO (Mk316 Mod 0)<br />Lövedékek: 20 口径: 7.62x51mm NATO (Mk316 Mod 0)<br />装填数: 20 구경: 7.62x51mm NATO (Mk316 Mod 0)<br />장탄수: 20 + 口徑: 7.62x51mm NATO標準 (Mk316 Mod 0 狙擊專用彈)<br />發數: 20 + 口径: 7.62x51mm NATO标准 (Mk316 Mod 0 狙击专用弹)<br />发数: 20 7.62mm 10Rnd Mag (Mk319 Mod 0) Magazynek 7,62mm 10rd (Mk319 Mod 0) - Ch. 7.62mm 10Cps (Mk319 Mod 0) + Ch. 7,62mm 10Cps (Mk319 Mod 0) Cargador de 10 balas de 7.62mm (Mk319 Mod 0) Магазин из 10-ти 7,62 мм (Mk319 Mod 0) 7,62mm 10-Patronen-Magazin (Mk319 Mod 0) @@ -1366,11 +1558,13 @@ 7,62mm 10-lövedékes tár (Mk319 Mod 0) 7.62mm 10発入り 弾倉 (Mk319 Mod 0) 10발들이 7.62mm 탄창 (Mk319 Mod 0) + 7.62mm 10發 彈匣 (Mk319 Mod 0 特戰專用彈) + 7.62mm 10发 弹匣 (Mk319 Mod 0 特战专用弹) 7.62mm Mk319 7,62mm Mk319 - 7.62mm Mk319 + 7,62mm Mk319 7.62mm Mk319 7,62 мм Mk319 7,62mm Mk319 @@ -1380,11 +1574,13 @@ 7,62mm Mk319 7.62mm Mk319 7.62mm Mk319 + 7.62mm Mk319 特戰專用彈 + 7.62mm Mk319 特战专用弹 Caliber: 7.62x51mm NATO (Mk319 Mod 0)<br />Rounds: 10 Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Pociski: 10 - Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Cartouches: 10 + Calibre: 7,62x51mm NATO (Mk319 Mod 0)<br />Cartouches: 10 Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Balas: 10 Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 10 Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Patronen: 10 @@ -1394,11 +1590,13 @@ Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Lövedékek: 10 口径: 7.62x51mm NATO (Mk319 Mod 0)<br />装填数: 10 구경: 7.62x51mm NATO (Mk319 Mod 0)<br />장탄수: 10 + 口徑: 7.62x51mm NATO標準 (Mk319 Mod 0 特戰專用彈)<br />發數: 10 + 口径: 7.62x51mm NATO标准 (Mk319 Mod 0 特战专用弹)<br />发数: 10 7.62mm 20Rnd Mag (Mk319 Mod 0) Magazynek 7,62mm 20rd (Mk319 Mod 0) - Ch. 7.62mm 20Cps (Mk319 Mod 0) + Ch. 7,62mm 20Cps (Mk319 Mod 0) Cargador de 20 balas de 7.62mm (Mk319 Mod 0) Магазин из 20-ти 7,62 мм (Mk319 Mod 0) 7,62mm 20-Patronen-Magazin (Mk319 Mod 0) @@ -1408,11 +1606,13 @@ 7,62mm 20-lövedékes tár (Mk319 Mod 0) 7.62mm 20発入り 弾倉 (Mk319 Mod 0) 20발들이 7.62mm 탄창 (Mk319 Mod 0) + 7.62mm 20發 彈匣 (Mk319 Mod 0 特戰專用彈) + 7.62mm 20发 弹匣 (Mk319 Mod 0 特战专用弹) 7.62mm Mk319 7,62mm Mk319 - 7.62mm Mk319 + 7,62mm Mk319 7.62mm Mk319 7,62 мм Mk319 7,62mm Mk319 @@ -1422,11 +1622,13 @@ 7,62mm Mk319 7.62mm Mk319 7.62mm Mk319 + 7.62mm Mk319 特戰專用彈 + 7.62mm Mk319 特战专用弹 Caliber: 7.62x51mm NATO (Mk319 Mod 0)<br />Rounds: 20 Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Pociski: 20 - Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Cartouches: 20 + Calibre: 7,62x51mm NATO (Mk319 Mod 0)<br />Cartouches: 20 Calibre: 7.62x51mm NATO (Mk319 Mod 0)<br />Balas: 20 Калибр: 7,62x51 мм NATO (Mk319 Mod 0)<br />Патронов: 20 Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Patronen: 20 @@ -1436,11 +1638,13 @@ Kaliber: 7,62x51mm NATO (Mk319 Mod 0)<br />Lövedékek: 20 口径: 7.62x51mm NATO (Mk319 Mod 0)<br />装填数: 20 구경: 7.62x51mm NATO (Mk319 Mod 0)<br />장탄수: 20 + 口徑: 7.62x51mm NATO標準 (Mk319 Mod 0 特戰專用彈)<br />發數: 20 + 口径: 7.62x51mm NATO标准 (Mk319 Mod 0 特战专用弹)<br />发数: 20 7.62mm 10Rnd Mag (M993 AP) Magazynek 7,62mm 10rd (M993 AP) - Ch. 7.62mm 10Cps (M993 AP) + Ch. 7,62mm 10Cps (M993 AP) Cargador de 10 balas de 7.62mm (M993 AP) Магазин из 10-ти 7,62 мм (M993 бронебойные) 7,62mm 10-Patronen-Magazin (M993 AP) @@ -1450,11 +1654,13 @@ 7,62mm 10-lövedékes tár (M993 páncéltörő) 7.62mm 10発入り 弾倉 (M993 徹甲弾) 10발들이 7.62mm 탄창 (M993 철갑탄) + 7.62mm 10發 彈匣 (M993 穿甲專用彈) + 7.62mm 10发 弹匣 (M993 穿甲专用弹) 7.62mm AP 7,62mm AP - 7.62mm AP + 7,62mm AP 7.62mm AP 7,62mm бронебойные 7,62mm AP @@ -1464,11 +1670,13 @@ 7,62mm páncéltörő 7.62mm 徹甲弾 7.62mm 철갑탄 + 7.62mm M993 穿甲專用彈 + 7.62mm M993 穿甲专用弹 Caliber: 7.62x51mm NATO (M993 AP)<br />Rounds: 10 Kaliber: 7,62x51mm NATO (M993 AP)<br />Pociski: 10 - Calibre: 7.62x51mm NATO (M993 AP)<br />Cartouches: 10 + Calibre: 7,62x51mm NATO (M993 AP)<br />Cartouches: 10 Calibre: 7.62x51mm NATO (M993 AP)<br />Balas: 10 Калибр: 7,62x51 мм NATO (M993 бронебойные)<br />Патронов: 10 Kaliber: 7,62x51mm NATO (M993 AP)<br />Patronen: 10 @@ -1478,11 +1686,13 @@ Kaliber: 7,62x51mm NATO (M993 páncéltörő)<br />Lövedékek: 10 口径: 7.62x51mm NATO (Mk319 Mod 0)<br />装填数: 10 구경: 7.62x51mm NATO (M993 철갑탄)<br />장탄수: 10 + 口徑: 7.62x51mm NATO標準 (M993 穿甲專用彈)<br />發數: 10 + 口径: 7.62x51mm NATO标准 (M993 穿甲专用弹)<br />发数: 10 7.62mm 20Rnd Mag (M993 AP) Magazynek 7,62mm 20rd (M993 AP) - Ch. 7.62mm 20Cps (M993 AP) + Ch. 7,62mm 20Cps (M993 AP) Cargador de 20 balas de 7.62mm (M993 AP) Магазин из 20-ти 7,62 мм (M993 бронебойные) 7,62mm 20-Patronen-Magazin (M993 AP) @@ -1492,11 +1702,13 @@ 7,62mm 20-lövedékes tár (M993 páncéltörő) 7.62mm 20発入り 弾倉 (M993 徹甲弾) 20발들이 7.62mm 탄창 (M993 철갑탄) + 7.62mm 20發 彈匣 (M993 穿甲專用彈) + 7.62mm 20发 弹匣 (M993 穿甲专用弹) 7.62mm AP 7,62mm AP - 7.62mm AP + 7,62mm AP 7.62mm AP 7,62 мм бронебойные 7,62mm AP @@ -1506,11 +1718,13 @@ 7,62mm páncéltörő 7.62mm 徹甲弾 7.62mm 철갑탄 + 7.62mm M993 穿甲專用彈 + 7.62mm M993 穿甲专用弹 Caliber: 7.62x51mm NATO (M993 AP)<br />Rounds: 20 Kaliber: 7,62x51mm NATO (M993 AP)<br />Pociski: 20 - Calibre: 7.62x51mm NATO (M993 AP)<br />Cartouches: 20 + Calibre: 7,62x51mm NATO (M993 AP)<br />Cartouches: 20 Калибр: 7,62x51 мм NATO (M993 бронебойные)<br />Патронов: 20 Kaliber: 7,62x51mm NATO (M993 AP)<br />Patronen: 20 Calibro: 7.62x51 mm NATO (M993 AP)<br />Munizioni: 20 @@ -1520,11 +1734,13 @@ Kaliber: 7,62x51mm NATO (M993 páncéltörő)<br />Lövedékek: 20 口径: 7.62x51mm NATO (M993 徹甲弾)<br />装填数: 20 구경: 7.62x51mm NATO (M993 철갑탄)<br />장탄수: 20 + 口徑: 7.62x51mm NATO標準 (M993 穿甲專用彈)<br />發數: 20 + 口径: 7.62x51mm NATO标准 (M993 穿甲专用弹)<br />发数: 20 7.62mm 20Rnd Mag (Mk248 Mod 0) Magazynek 7,62mm 20rd (Mk248 Mod 0) - Ch. 7.62mm 20Cps (Mk248 Mod 0) + Ch. 7,62mm 20Cps (Mk248 Mod 0) Cargador de 20 balas de 7.62mm (Mk248 Mod 0) Магазин из 20-ти 7,62 мм (Mk248 Mod 0) 7,62mm 20-Patronen-Magazin (Mk248 Mod 0) @@ -1534,11 +1750,13 @@ 7,62mm 20-lövedékes tár (Mk248 Mod 0) 7.62mm 20発入り 弾倉 (Mk248 Mod 0) 20발들이 7.62mm 탄창 (Mk248 Mod 0) + 7.62mm 20發 彈匣 (Mk248 Mod 0 狙擊專用彈) + 7.62mm 20发 弹匣 (Mk248 Mod 0 狙击专用弹) 7.62mm Mk248 7,62mm Mk248 - 7.62mm Mk248 + 7,62mm Mk248 7.62mm Mk248 7,62 мм Mk248 7,62mm Mk248 @@ -1548,11 +1766,13 @@ 7,62mm Mk248 7.62mm Mk248 7.62mm Mk248 + 7.62mm Mk248 狙擊專用彈 + 7.62mm Mk248 狙击专用弹 Caliber: 7.62x67mm NATO (Mk248 Mod 0)<br />Rounds: 20 Kaliber: 7,62x67mm NATO (Mk248 Mod 0)<br />Pociski: 20 - Calibre: 7.62x67mm NATO (Mk248 Mod 0)<br />Cartouches: 20 + Calibre: 7,62x67mm NATO (Mk248 Mod 0)<br />Cartouches: 20 Calibre: 7.62x67mm NATO (Mk248 Mod 0)<br />Balas: 20 Калибр: 7,62x67 мм NATO (Mk248 Mod 0)<br />Патронов: 20 Kaliber: 7,62x51mm NATO (Mk248 Mod 0)<br />Patronen: 20 @@ -1562,11 +1782,13 @@ Kaliber: 7,62x51mm NATO (Mk248 Mod 0)<br />Lövedékek: 20 口径: 7.62x67mm NATO (Mk248 Mod 0)<br />装填数: 20 구경: 7.62x51mm NATO (Mk248 Mod 0)<br />장탄수: 20 + 口徑: 7.62x67mm NATO標準 (Mk248 Mod 0 狙擊專用彈)<br />發數: 20 + 口径: 7.62x67mm NATO标准 (Mk248 Mod 0 狙击专用弹)<br />发数: 20 7.62mm 20Rnd Mag (Mk248 Mod 1) Magazynek 7,62mm 20rd (Mk248 Mod 1) - Ch. 7.62mm 20Cps (Mk248 Mod 1) + Ch. 7,62mm 20Cps (Mk248 Mod 1) Cargador de 20 balas de 7.62mm (Mk248 Mod 1) Магазин из 20-ти 7,62 мм (Mk248 Mod 1) 7,62mm 20-Patronen-Magazin (Mk248 Mod 1) @@ -1576,11 +1798,13 @@ 7,62mm 20-lövedékes tár (Mk248 Mod 1) 7.62mm 20発入り 弾倉 (Mk248 Mod 1) 20발들이 7.62mm 탄창 (Mk248 Mod 1) + 7.62mm 20發 彈匣 (Mk248 Mod 1 狙擊專用彈) + 7.62mm 20发 弹匣 (Mk248 Mod 1 狙击专用弹) 7.62mm Mk248 7,62mm Mk248 - 7.62mm Mk248 + 7,62mm Mk248 7.62mm Mk248 7,62 мм Mk248 7,62mm Mk248 @@ -1590,11 +1814,13 @@ 7,62mm Mk248 7.62mm Mk248 7.62mm Mk248 + 7.62mm Mk248 狙擊專用彈 + 7.62mm Mk248 狙击专用弹 Caliber: 7.62x67mm NATO (Mk248 Mod 1)<br />Rounds: 20 Kaliber: 7,62x67mm NATO (Mk248 Mod 1)<br />Pociski: 20 - Calibre: 7.62x67mm NATO (Mk248 Mod 1)<br />Cartouches: 20 + Calibre: 7,62x67mm NATO (Mk248 Mod 1)<br />Cartouches: 20 Calibre: 7.62x67mm NATO (Mk248 Mod 1)<br />Balas: 20 Калибр: 7,62x67 мм NATO (Mk248 Mod 1)<br />Патронов: 20 Kaliber: 7,62x51mm NATO (Mk248 Mod 1)<br />Patronen: 20 @@ -1604,11 +1830,13 @@ Kaliber: 7,62x51mm NATO (Mk248 Mod 1)<br />Lövedékek: 20 口径: 7.62x67mm NATO (Mk248 Mod 1)<br />装填数: 20 구경: 7.62x51mm NATO (Mk248 Mod 1)<br />장탄수: 20 + 口徑: 7.62x67mm NATO標準 (Mk248 Mod 1 狙擊專用彈)<br />發數: 20 + 口径: 7.62x67mm NATO标准 (Mk248 Mod 1 狙击专用弹)<br />发数: 20 7.62mm 20Rnd Mag (Berger Hybrid OTM) Magazynek 7,62mm 20rd (Berger Hybrid OTM) - Ch. 7.62 20Cps (Berger Hybrid OTM) + Ch. 7,62 20Cps (Berger Hybrid OTM) Cargador de 20 balas de 7.62mm (Berger Hybrid OTM) Магазин из 20-ти 7,62 мм (Berger Hybrid OTM) 7,62mm 20-Patronen-Magazin (Berger Hybrid OTM) @@ -1618,11 +1846,13 @@ 7,62mm 20-lövedékes tár (Berger Hybrid OTM) 7.62mm 20発入り 弾倉 (Berger Hybrid OTM) 20발들이 7.62mm 탄창 (Berger Hybrid OTM) + 7.62mm 20發 彈匣 (Berger Hybrid 空尖比賽專用彈) + 7.62mm 20发 弹匣 (Berger Hybrid 空尖比赛专用弹) 7.62mm OTM 7,62mm OTM - 7.62mm OTM + 7,62mm OTM 7.62mm OTM 7,62 мм OTM 7,62mm OTM @@ -1632,11 +1862,13 @@ 7,62mm OTM 7.62mm OTM 7.62mm OTM + 7.62mm 空尖比賽專用彈 + 7.62mm 空尖比赛专用弹 Caliber: 7.62x67mm NATO (Berger Hybrid OTM)<br />Rounds: 20 Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)<br />Pociski: 20 - Calibre: 7.62x67mm NATO (Berger Hybrid OTM)<br />Cartouches: 20 + Calibre: 7,62x67mm NATO (Berger Hybrid OTM)<br />Cartouches: 20 Calibre: 7.62x67mm NATO (Berger Hybrid OTM)<br />Balas: 20 Калибр: 7,62x67 мм NATO (Berger Hybrid OTM)<br />Патронов: 20 Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)<br />Patronen: 20 @@ -1646,10 +1878,12 @@ Kaliber: 7,62x67mm NATO (Berger Hybrid OTM)<br />Lövedékek: 20 口径: 7.62x67mm NATO (Berger Hybrid OTM)<br />装填数: 20 구경: 7.62x51mm NATO (Berger Hybrid OTM)<br />장탄수: 20 + 口徑: 7.62x67mm NATO標準 (Berger Hybrid 空尖比賽專用彈)<br />發數: 20 + 口径: 7.62x67mm NATO标准 (Berger Hybrid 空尖比赛专用弹)<br />发数: 20 6.5x47mm 30Rnd Mag (HPBT Scenar) - Ch. 6.5x47mm 30Cps (HPBT Scenar) + Ch. 6,5x47mm 30Cps (HPBT Scenar) Cargador de 30 balas de 6.5x47mm (HPBT Scenar) Magazynek 6,5x47mm 30rd (HPBT Scenar) Магазин из 30-ти 6,5x47 мм (экспансивные Scenar) @@ -1660,10 +1894,12 @@ 6,5x47mm 30-lövedékes tár (HPBT Scenar) 6.5x47mm 30発入り 弾倉 (HPBT Scenar) 30발들이 6.5x47mm 탄창 (HPBT Scenar) + 6.5x47mm 30發 彈匣 (Lapua 空尖艇尾狙擊專用彈) + 6.5x47mm 30发 弹匣 (Lapua 空尖艇尾狙击专用弹) 6.5mm Lapua - 6.5mm Lapua + 6,5mm Lapua 6.5mm Lapua 6,5mm Lapua 6,5 мм Lapua @@ -1674,10 +1910,12 @@ 6,5mm Lapua 6.5mm Lapua 6.5mm Lapua + 6.5mm Lapua 空尖艇尾狙擊專用彈 + 6.5mm Lapua 空尖艇尾狙击专用弹 Caliber: 6.5x47mm (HPBT Scenar)<br />Rounds: 30<br />Used in: MXM - Calibre: 6.5x47mm (HPBT Scenar)<br />Cartouches: 30 + Calibre: 6,5x47mm (HPBT Scenar)<br />Cartouches: 30 Calibre: 6.5x47mm (HPBT Scenar)<br />Balas: 30<br />Se usa en: MXM Kaliber: 6,5x47mm (HPBT Scenar)<br />Pociski: 30 Калибр: 6,5x47 мм (экспансивные Scenar)<br />Патронов: 30<br />Используются с: MXM @@ -1688,6 +1926,8 @@ Kaliber: 6,5x47mm (HPBT Scenar)<br />Lövedékek: 30<br />Használható: MXM 口径: 6.5x47mm (HPBT Scenar)<br />装填数: 30<br />次で使用: MXM 구경: 6.5x47mm (HPBT Scenar)<br />장탄수: 30<br />사용처: MXM + 口徑: 6.5x47mm (Lapua 空尖艇尾狙擊專用彈)<br />發數: 30<br />使用於: MXM + 口径: 6.5x47mm (Lapua 空尖艇尾狙击专用弹)<br />发数: 30<br />使用于: MXM 6.5mm Creedmor 30Rnd Mag @@ -1696,16 +1936,18 @@ Магазин из 30-ти 6,5 мм Creedmor 6,5mm Creedmor 30-Patronen-Magazin Cargador de 30 balas Creedmor de 6.5mm - Ch. 6.5mm Creedmor 30Cps + Ch. 6,5mm Creedmor 30Cps 6.5mm Creedmor 30náb. Zásobník Carregador 6.5mm com 30 cartuchos Creedmor 6,5mm Creedmor 30-lövedékes tár 6.5mm Creedmor 30発入り 弾倉 30발들이 6.5mm Creedmor 탄창 + 6.5mm 30發 彈匣 (Creedmor 狙擊專用彈) + 6.5mm 30发 弹匣 (Creedmor 狙击专用弹) 6.5mm CM - 6.5mm CM + 6,5mm CM 6.5mm CM 6,5mm CM 6,5 мм CM @@ -1716,12 +1958,14 @@ 6,5mm CM 6.5mm CM 6.5mm CM + 6.5mm CM 狙擊專用彈 + 6.5mm CM 狙击专用弹 Caliber: 6.5x47mm Creedmor<br />Rounds: 30<br />Used in: MXM Kaliber: 6,5x47mm Creedmor<br />Pociski: 30<br />Używany w: MXM Kaliber: 6,5x47mm Creedmor<br />Patronen: 30<br />Eingesetzt von: MXM - Calibre: 6.5x47mm Creedmor <br />Cartouches: 30<br />Utilisé avec: MXM + Calibre: 6,5x47mm Creedmor <br />Cartouches: 30<br />Utilisé avec: MXM Calibro: 6.5mm Creedmor<br />Munizioni: 30<br />In uso su: MXM Calibre: 6.5mm Creedmor<br />Balas: 30<br />Se usa en: MXM Калибр: 6,5x47мм Creedmor<br />Патронов: 30<br />Используются c: MXM @@ -1730,6 +1974,8 @@ Kaliber: 6,5x47mm Creedmor<br />Lövedékek: 30<br />Használható: MXM 口径: 6.5x47mm Creedmor<br />装填数: 30<br />次で使用: MXM 구경: 6.5x47mm Creedmor<br />장탄수: 30<br />사용처: MXM + 口徑: 6.5x47mm Creedmor 狙擊專用彈<br />發數: 30<br />使用於: MXM + 口径: 6.5x47mm Creedmor 狙击专用弹<br />发数: 30<br />使用于: MXM .338 10Rnd Mag (300gr Sierra MatchKing HPBT) @@ -1744,6 +1990,8 @@ .338 10-lövedékes tár (300gr Sierra MatchKing HPBT) .338 10発入り 弾倉 (300gr Sierra MatchKing HPBT) 10발들이 .338 탄창 (300gr Sierra MatchKing HPBT) + .338 10發 彈匣 (300公克 Sierra MatchKing 空尖艇尾比賽專用彈) + .338 10发 弹匣 (300公克 Sierra MatchKing 空尖艇尾比赛专用弹) .338 HPBT @@ -1758,10 +2006,12 @@ .338 HPBT 338 HPBT .338 HPBT + .338 空尖艇尾比賽專用彈 + .338 空尖艇尾比赛专用弹 Caliber: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Rounds: 10 - Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Cartouches: 10 + Calibre: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Cartouches: 10 Calibre: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />Balas: 10 Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Pociski: 10 Калибр: 8,6x70mm (300 гран Sierra MatchKing экспансивные)<br />Патронов: 10 @@ -1772,6 +2022,8 @@ Kaliber: 8,6x70mm (300gr Sierra MatchKing HPBT)<br />Lövedékek: 10 口径: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />装填数: 10 구경: 8.6x70mm (300gr Sierra MatchKing HPBT)<br />장탄수: 10 + 口徑: 8.6x70mm (300公克 Sierra MatchKing 空尖艇尾比賽專用彈)<br />發數: 10 + 口径: 8.6x70mm (300公克 Sierra MatchKing 空尖艇尾比赛专用弹)<br />发数: 10 .338 10Rnd Mag (API526) @@ -1786,6 +2038,8 @@ .338 10-lövedékes tár (API526) .338 10発入り 弾倉 (API526) 10발들이 .338 탄창 (API526) + .338 10發 彈匣 (API526 穿甲燃燒彈) + .338 10发 弹匣 (API526 穿甲燃烧弹) .338 AP @@ -1800,10 +2054,12 @@ .338 páncéltörő .338 徹甲弾 .338 철갑탄 + .338 API526 穿甲燃燒彈 + .338 API526 穿甲燃烧弹 Caliber: 8.6x70mm (API526)<br />Rounds: 10 - Calibre: 8.6x70mm (API526)<br />Cartouches: 10 + Calibre: 8,6x70mm (API526)<br />Cartouches: 10 Calibre: 8.6x70mm (API526)<br />Balas: 10 Kaliber: 8,6x70mm (API526)<br />Pociski: 10 Калибр: 8,6x70 мм (API526)<br />Патронов: 10 @@ -1814,6 +2070,8 @@ Kaliber: 8,6x70mm (API526)<br />Lövedékek: 10 口径: 8.6x70mm (API526)<br />装填数: 10 구경: 8.6x70mm (API526)<br />장탄수: 10 + 口徑: 8.6x70mm (API526 穿甲燃燒彈)<br />發數: 10 + 口径: 8.6x70mm (API526 穿甲燃烧弹)<br />发数: 10 .408 7Rnd Mag (305gr) @@ -1828,6 +2086,8 @@ .408 7-lövedékes tár (305gr) .408 7発入り 弾倉 (305gr) 7발들이 .408 탄창 (305gr) + .408 7發 彈匣 (305公克) + .408 7发 弹匣 (305公克) .408 @@ -1842,6 +2102,8 @@ .408 .408 .408 + .408 + .408 Caliber: .408 CheyTac (305gr)<br />Rounds: 7 @@ -1856,10 +2118,12 @@ Kaliber: .408 CheyTac (305gr)<br />Lövedékek: 7 口径: .408 CheyTac (305gr)<br />装填数: 7 구경: .408 CheyTac (305gr)<br />장탄수: 7 + 口徑: .408 夏伊戰術狙擊彈 (305公克)<br />發數: 7 + 口径: .408 夏伊战术狙击弹 (305公克)<br />发数: 7 12.7x99mm 5Rnd Mag - Ch. 12.7x99mm 5Cps + Ch. 12,7x99mm 5Cps Cargador de 5 balas de 12.7x99mm Magazynek 12,7x99mm 5rd Магазин из 5-ти 12,7x99 мм @@ -1870,10 +2134,12 @@ 12,7x99mm 5-lövedékes tár 12.7x99mm 5発入り 弾倉 5발들이 12.7x99mm 탄창 + 12.7x99mm 5發 彈匣 + 12.7x99mm 5发 弹匣 12.7mm - 12.7mm + 12,7mm 12.7mm 12,7mm 12,7 мм @@ -1884,6 +2150,8 @@ 12,7mm 12.7mm 12.7mm + 12.7mm + 12.7mm Caliber: 12.7x99mm<br />Rounds: 5 @@ -1898,10 +2166,12 @@ Kaliber: 12,7x99mm<br />Lövedékek: 5 口径: 12.7x99mm<br />装填数: 5 구경: 12.7x99mm<br />장탄수: 5 + 口徑: 12.7x99mm<br />發數: 5 + 口径: 12.7x99mm<br />发数: 5 12.7x99mm API 5Rnd Mag - Ch. 12.7x99mm API 5Cps + Ch. 12,7x99mm API 5Cps Cargador de 5 balas de 12.7x99mm API Magazynek 12,7x99mm API 5rd 12.7x99mm API 5Rnd Mag @@ -1912,10 +2182,12 @@ 12,7x99mm 5-lövedékes tár (páncéltörő-gyújtó) 12.7x99mm 5発入り焼夷徹甲弾 弾倉 5발들이 12.7x99mm 철갑소이탄 탄창 + 12.7x99mm 穿甲燃燒彈 5發 彈匣 + 12.7x99mm 穿甲燃烧弹 5发 弹匣 12.7mm API - 12.7mm API + 12,7mm API 12.7mm API 12,7mm API 12.7mm API @@ -1926,10 +2198,12 @@ 12,7mm páncéltörő-gyújtó 12.7mm 焼夷徹甲弾 12.7mm 철갑소이탄 + 12.7mm 穿甲燃燒彈 + 12.7mm 穿甲燃烧弹 Caliber: 12.7x99mm API<br />Rounds: 5 - Calibre: 12.7x99mm API<br />Cartouches: 5 + Calibre: 12,7x99mm API<br />Cartouches: 5 Calibre: 12.7x99mm API<br />Balas: 5 Kaliber: 12,7x99mm API<br />Pociski: 5 Калибр: 12,7x99 мм бронебойно-зажигательные<br />Патронов: 5 @@ -1940,10 +2214,12 @@ Kaliber: 12,7x99mm API<br />Lövedékek: 5 口径: 12.7x99mm 焼夷徹甲弾<br />装填数: 5 구경: 12.7x99mm 철갑소이탄<br />장탄수: 5 + 口徑: 12.7x99mm 穿甲燃燒彈<br />發數: 5 + 口径: 12.7x99mm 穿甲燃烧弹<br />发数: 5 12.7x99mm 5Rnd Mag (AMAX) - Ch. 12.7x99mm 5Cps (AMAX) + Ch. 12,7x99mm 5Cps (AMAX) Cargador de 5 balas de 12.7x99mm (AMAX) Magazynek 12,7x99mm 5rd (AMAX) Магазин из 5-ти 12,7x99 мм (A-MAX) @@ -1954,10 +2230,12 @@ 12,7x99mm 5-lövedékes tár (AMAX) 12.7x99mm 5発入り 弾倉 (AMAX) 5발들이 12.7x99mm 탄창 (AMAX) + 12.7x99mm 5發 彈匣 (AMAX 比賽專用彈) + 12.7x99mm 5发 弹匣 (AMAX 比赛专用弹) 12.7mm - 12.7mm + 12,7mm 12.7mm 12,7mm 12,7 мм @@ -1968,10 +2246,12 @@ 12,7mm 12.7mm 12.7mm + 12.7mm AMAX 比賽專用彈 + 12.7mm AMAX 比赛专用弹 Caliber: 12.7x99mm (AMAX)<br />Rounds: 5 - Calibre: 12.7x99mm (AMAX)<br />Cartouches: 5 + Calibre: 12,7x99mm (AMAX)<br />Cartouches: 5 Calibre: 12.7x99mm (AMAX)<br />Balas: 5 Kaliber: 12,7x99mm (AMAX)<br />Pociski: 5 Калибр: 12,7x99 мм (A-MAX)<br />Патронов: 5 @@ -1982,6 +2262,8 @@ Kaliber: 12,7x99mm (AMAX)<br />Lövedékek: 5 口径: 12.7x99mm (AMAX)<br />装填数: 5 구경: 12.7x99mm (AMAX)<br />장탄수: 5 + 口徑: 12.7x99mm (AMAX 比賽專用彈)<br />發數: 5 + 口径: 12.7x99mm (AMAX 比赛专用弹)<br />发数: 5 [ACE] Ammo Supply Crate @@ -1996,6 +2278,8 @@ [ACE] Cassa munizioni [ACE] 弾薬物資箱 [ACE] 탄약 보급 상자 + [ACE] 彈藥補給箱 + [ACE] 弹药补给箱 diff --git a/addons/captives/functions/fnc_doEscortCaptive.sqf b/addons/captives/functions/fnc_doEscortCaptive.sqf index e0d3ae8fa6..ad57dabcd7 100644 --- a/addons/captives/functions/fnc_doEscortCaptive.sqf +++ b/addons/captives/functions/fnc_doEscortCaptive.sqf @@ -30,7 +30,7 @@ if (_state) then { _unit setVariable [QGVAR(escortedUnit), _target, true]; //Add Actionmenu to release captive - _actionID = _unit addAction [format ["%1", localize LSTRING(StopEscorting)], + private _actionID = _unit addAction [format ["%1", localize LSTRING(StopEscorting)], {[(_this select 0), ((_this select 0) getVariable [QGVAR(escortedUnit), objNull]), false] call FUNC(doEscortCaptive);}, nil, 20, false, true, "", QUOTE(!isNull (GETVAR(_target,QGVAR(escortedUnit),objNull)))]; diff --git a/addons/captives/functions/fnc_doFriskPerson.sqf b/addons/captives/functions/fnc_doFriskPerson.sqf index d3ddecfd13..700fba4ffb 100644 --- a/addons/captives/functions/fnc_doFriskPerson.sqf +++ b/addons/captives/functions/fnc_doFriskPerson.sqf @@ -7,7 +7,7 @@ * 1: unit * * Return Value: - * Nothing + * None * * Example: * [player, bob] call ACE_captives_fnc_doFristPerson; diff --git a/addons/captives/functions/fnc_doLoadCaptive.sqf b/addons/captives/functions/fnc_doLoadCaptive.sqf index a06a569e12..82e446b460 100644 --- a/addons/captives/functions/fnc_doLoadCaptive.sqf +++ b/addons/captives/functions/fnc_doLoadCaptive.sqf @@ -8,7 +8,7 @@ * 2: Vehicle to load the captive into. ObjNull for the nearest vehicle * * Return Value: - * Nothing + * None * * Example: * [bob, tom, car] call ACE_captives_fnc_doLoadCaptive diff --git a/addons/captives/functions/fnc_doUnloadCaptive.sqf b/addons/captives/functions/fnc_doUnloadCaptive.sqf index fd4375e4b7..93bdab114c 100644 --- a/addons/captives/functions/fnc_doUnloadCaptive.sqf +++ b/addons/captives/functions/fnc_doUnloadCaptive.sqf @@ -7,7 +7,7 @@ * 1: A captive loaded in a vehicle * * Return Value: - * Nothing + * None * * Example: * [bob, prisoner] call ACE_captives_fnc_doUnloadCaptive diff --git a/addons/captives/functions/fnc_handleAnimChangedHandcuffed.sqf b/addons/captives/functions/fnc_handleAnimChangedHandcuffed.sqf index 2f55d51fc3..f71a3f04a3 100644 --- a/addons/captives/functions/fnc_handleAnimChangedHandcuffed.sqf +++ b/addons/captives/functions/fnc_handleAnimChangedHandcuffed.sqf @@ -6,9 +6,12 @@ * 0: The Unit * 1: New animation * - * ReturnValue: + * Return Value: * None * + * Example: + * [bob, "movearm"] call ACE_captives_fnc_handleAnimChangedHandcuffed + * * Public: No */ @@ -23,7 +26,7 @@ if (_unit == (vehicle _unit)) then { [_unit, "ACE_AmovPercMstpScapWnonDnon", 1] call EFUNC(common,doAnimation); }; } else { - _turretPath = []; + private _turretPath = []; { _x params ["_xUnit", "", "", "_xTurretPath"]; if (_unit == _xUnit) exitWith {_turretPath = _xTurretPath}; diff --git a/addons/captives/functions/fnc_handleAnimChangedSurrendered.sqf b/addons/captives/functions/fnc_handleAnimChangedSurrendered.sqf index cf17d8b873..304926600f 100644 --- a/addons/captives/functions/fnc_handleAnimChangedSurrendered.sqf +++ b/addons/captives/functions/fnc_handleAnimChangedSurrendered.sqf @@ -6,9 +6,12 @@ * 0: The Unit * 1: New animation * - * ReturnValue: + * Return Value: * None * + * Example: + * [bob, "movearm"] call ACE_captives_fnc_handleAnimChangedSurrendered + * * Public: No */ diff --git a/addons/captives/functions/fnc_handleGetIn.sqf b/addons/captives/functions/fnc_handleGetIn.sqf index d89049a031..60f1ecf9b9 100644 --- a/addons/captives/functions/fnc_handleGetIn.sqf +++ b/addons/captives/functions/fnc_handleGetIn.sqf @@ -31,7 +31,7 @@ if (local _unit) then { if (_unit getVariable [QGVAR(isHandcuffed), false]) then { //Need to force animation for FFV turrets - _turretPath = []; + private _turretPath = []; { _x params ["_xUnit", "", "", "_xTurretPath"]; if (_unit == _xUnit) exitWith {_turretPath = _xTurretPath}; diff --git a/addons/captives/functions/fnc_handleLocal.sqf b/addons/captives/functions/fnc_handleLocal.sqf index 693eb844fd..ee11e74fcb 100644 --- a/addons/captives/functions/fnc_handleLocal.sqf +++ b/addons/captives/functions/fnc_handleLocal.sqf @@ -6,9 +6,12 @@ * 0: The Unit * 1: Is local * - * ReturnValue: + * Return Value: * None * + * Example: + * [bob, true] call ACE_captives_fnc_handleLocal + * * Public: No */ diff --git a/addons/captives/functions/fnc_handleOnUnconscious.sqf b/addons/captives/functions/fnc_handleOnUnconscious.sqf index 456161d9de..d89d18c506 100644 --- a/addons/captives/functions/fnc_handleOnUnconscious.sqf +++ b/addons/captives/functions/fnc_handleOnUnconscious.sqf @@ -7,7 +7,7 @@ * 0: Is Unconsisisiouses * * Return Value: - * Nothing + * None * * Example: * [bob, true] call ACE_captives_fnc_handleOnUnconscious diff --git a/addons/captives/functions/fnc_handleRespawn.sqf b/addons/captives/functions/fnc_handleRespawn.sqf index b95438fa22..98672798fd 100644 --- a/addons/captives/functions/fnc_handleRespawn.sqf +++ b/addons/captives/functions/fnc_handleRespawn.sqf @@ -7,7 +7,7 @@ * 1: Corpse * * Return Value: - * Nothing + * None * * Example: * [alive, body] call ACE_captives_fnc_handleRespawn; @@ -46,7 +46,7 @@ if (_respawn > 3) then { }; [_unit, "setCaptive", QGVAR(Surrendered), false] call EFUNC(common,statusEffect_set); - if (_oldUnit getVariable [QGVAR(isEscorting), false]) then { - _oldUnit setVariable [QGVAR(isEscorting), false, true]; + if (_unit getVariable [QGVAR(isEscorting), false]) then { + _unit setVariable [QGVAR(isEscorting), false, true]; }; }; diff --git a/addons/captives/functions/fnc_handleZeusDisplayChanged.sqf b/addons/captives/functions/fnc_handleZeusDisplayChanged.sqf index 433c1fc259..bdb1450874 100644 --- a/addons/captives/functions/fnc_handleZeusDisplayChanged.sqf +++ b/addons/captives/functions/fnc_handleZeusDisplayChanged.sqf @@ -8,7 +8,7 @@ * 1: Display is now open * * Return Value: - * Nothing + * None * * Example: * [bob1, false] call ACE_captives_fnc_handleZeusDisplayChanged diff --git a/addons/captives/functions/fnc_moduleHandcuffed.sqf b/addons/captives/functions/fnc_moduleHandcuffed.sqf index b2e0b431b3..5b04696678 100644 --- a/addons/captives/functions/fnc_moduleHandcuffed.sqf +++ b/addons/captives/functions/fnc_moduleHandcuffed.sqf @@ -9,7 +9,7 @@ * 2: Activated * * Return Value: - * Nothing + * None * * Example: * [objNull, [player], true] call ace_captives_fnc_moduleHandcuffed diff --git a/addons/captives/functions/fnc_moduleSettings.sqf b/addons/captives/functions/fnc_moduleSettings.sqf index fc8c76721f..6be3fb8d56 100644 --- a/addons/captives/functions/fnc_moduleSettings.sqf +++ b/addons/captives/functions/fnc_moduleSettings.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [LOGIC] call ace_captives_fnc_moduleSettings + * * Public: No */ diff --git a/addons/captives/functions/fnc_moduleSurrender.sqf b/addons/captives/functions/fnc_moduleSurrender.sqf index c4482ce904..9f3bd8cdf9 100644 --- a/addons/captives/functions/fnc_moduleSurrender.sqf +++ b/addons/captives/functions/fnc_moduleSurrender.sqf @@ -9,7 +9,7 @@ * 2: Activated * * Return Value: - * Nothing + * None * * Example: * [objNull, [player], true] call ace_captives_fnc_moduleSurrender diff --git a/addons/captives/functions/fnc_setHandcuffed.sqf b/addons/captives/functions/fnc_setHandcuffed.sqf index d2011b5292..9a713af0b4 100644 --- a/addons/captives/functions/fnc_setHandcuffed.sqf +++ b/addons/captives/functions/fnc_setHandcuffed.sqf @@ -7,7 +7,7 @@ * 1: True to take captive, false to release captive * * Return Value: - * Nothing + * None * * Example: * [bob, true] call ACE_captives_fnc_setHandcuffed; diff --git a/addons/captives/functions/fnc_setSurrendered.sqf b/addons/captives/functions/fnc_setSurrendered.sqf index 53e709bab7..a0551d0219 100644 --- a/addons/captives/functions/fnc_setSurrendered.sqf +++ b/addons/captives/functions/fnc_setSurrendered.sqf @@ -7,7 +7,7 @@ * 1: True to surrender, false to un-surrender * * Return Value: - * Nothing + * None * * Example: * [Pierre, true] call ACE_captives_fnc_setSurrendered; diff --git a/addons/captives/functions/fnc_vehicleCaptiveMoveIn.sqf b/addons/captives/functions/fnc_vehicleCaptiveMoveIn.sqf index 503d80de2c..fa1d920a0d 100644 --- a/addons/captives/functions/fnc_vehicleCaptiveMoveIn.sqf +++ b/addons/captives/functions/fnc_vehicleCaptiveMoveIn.sqf @@ -7,7 +7,7 @@ * 1: The Vehicle * * Return Value: - * Nothing + * None * * Example: * [bob, car1] call ACE_captives_fnc_vehicleCaptiveMoveIn; diff --git a/addons/captives/functions/fnc_vehicleCaptiveMoveOut.sqf b/addons/captives/functions/fnc_vehicleCaptiveMoveOut.sqf index ce44b5926f..329adc1740 100644 --- a/addons/captives/functions/fnc_vehicleCaptiveMoveOut.sqf +++ b/addons/captives/functions/fnc_vehicleCaptiveMoveOut.sqf @@ -6,7 +6,7 @@ * 0: Captive Unit being unloaded * * Return Value: - * Nothing + * None * * Example: * [bob] call ACE_captives_fnc_vehicleCaptiveMoveOut; diff --git a/addons/captives/stringtable.xml b/addons/captives/stringtable.xml index f54f53e48e..467d06bd83 100644 --- a/addons/captives/stringtable.xml +++ b/addons/captives/stringtable.xml @@ -14,6 +14,8 @@ Взять в плен 捕虜にする 사로잡기 + 逮捕俘虜 + 逮捕俘虏 Free Prisoner @@ -28,6 +30,8 @@ Освободить пленника 捕虜を解放する 풀어주기 + 釋放俘虜 + 释放俘虏 Escort Prisoner @@ -42,6 +46,8 @@ Конвоировать пленника 捕虜を移動させる 포로 호송하기 + 護送俘虜 + 护送俘虏 Release Prisoner @@ -56,6 +62,8 @@ Прекратить конвоирование 捕虜を解放する 포로 풀어주기 + 停止護送俘虜 + 停止护送俘虏 You need to take him as prisoner first! @@ -70,6 +78,8 @@ Вы должны сначала взять его в плен! あなたは先に捕虜を取る必要があります。 먼저 포로로 만들어야합니다! + 你必須先逮捕他! + 你必须先逮捕他! Load Captive @@ -84,6 +94,8 @@ Fai salire il prigioniero 捕虜を乗せる 포로 태우기 + 將俘虜放入載具 + 将俘虏放入载具 Unload Captive @@ -98,6 +110,8 @@ Fai scendere il prigioniero 捕虜を降ろす 포로 내리기 + 將俘虜帶出載具 + 将俘虏带出载具 Cable Tie @@ -112,6 +126,8 @@ Кабельная стяжка ケーブル タイ 케이블 타이 + 束線帶 + 束线带 Cable ties that allow you to restrain prisoners. @@ -126,6 +142,8 @@ Кабельные стяжки позволяют связывать пленников. ケーブル タイは捕虜を制圧できます。 케이블 타이는 포로를 구류시킬때 씁니다. + 束線帶可以綁住俘虜 + 束线带可以绑住俘虏 Inventory of frisked person @@ -140,6 +158,8 @@ Inventario della persona perquisita 捕虜の持ち物を確認する 검문당한 사람의 소지품 + 搜身選單 + 搜身选单 Frisk person @@ -154,6 +174,8 @@ Perquisisci la persona 捕虜の持ち物 검문당한사람 + 搜身 + 搜身 Surrender @@ -168,6 +190,8 @@ Arrenditi 投降 투항 + 投降 + 投降 Stop Surrendering @@ -182,6 +206,8 @@ Smetti di arrenderti 投降をやめる 투항하는것을 멈춤 + 停止投降 + 停止投降 Make Unit Surrender @@ -196,6 +222,8 @@ Fai arrendere l'unità ユニットを投降させる 투항시키기 + 使單位投降 + 使单位投降 Sync a unit to make them surrender. @@ -210,6 +238,8 @@ Sincronizza una unità per farla arrendere. 同期されたユニットを投降させます。 투항시키기 위해 동기화합니다. + 同步此模塊到一個單位, 使該單位投降 + 同步此模块到一个单位, 使该单位投降 Make Unit Handcuffed @@ -223,6 +253,8 @@ Rendre une unité captive ユニットを拘束する 수갑을 채우기 + 使單位戴上手銬 + 使单位戴上手铐 Sync a unit to make them handcuffed. @@ -236,6 +268,8 @@ Synchronisez une unité pour la rendre captive. 同期されたユニットを拘束させます。 수갑을 채우기 위해 동기화합니다. + 使單位戴上手銬 + 使单位戴上手铐 Captives Settings @@ -250,6 +284,8 @@ Impostazioni Prigionieri 拘束の設定 포로 설정 + 俘虜設定 + 俘虏设定 Controls settings for surrender and cable ties @@ -264,6 +300,8 @@ Controlla le impostazioni per la resa e le manette 投降したユニットや拘束されたユニットの扱いを設定します。 투항과 케이블 타이에 관련한 설정 + 定義投降與束帶等設定 + 定义投降与束带等设定 Can handcuff own side @@ -278,6 +316,8 @@ Puoi ammanettare unità alleate 自陣営への拘束を可能に 자기편에게 수갑을 채울 수 있게 합니다 + 可以銬住同陣營隊友 + 可以铐住同阵营队友 Can players cabletie units on their own side @@ -292,6 +332,8 @@ I giocatori possono ammanettare unità alleate プレイヤーがユニットを拘束し、彼らの陣営に変更できます。 자기편에게 케이블타이를 사용할 수 있게합니다 + 玩家可以使用束線帶銬住同陣營隊友 + 玩家可以使用束线带铐住同阵营队友 Allow surrendering @@ -306,6 +348,8 @@ Permetti Resa 投降を許可 투항 활성화 + 允許投降 + 允许投降 Players can surrender after holstering their weapon @@ -320,6 +364,8 @@ I giocatori possono arrendersi dopo aver messo via le proprie armi プレイヤーは武器を収めたあとに投降できるようにします。 비무장한 플레이어가 투항할 수 있게 합니다 + 玩家能在收起自己武器後投降 + 玩家能在收起自己武器后投降 Require surrendering @@ -333,6 +379,8 @@ Requiert la reddition 投降を必要とする 투항 필요 + 要求目標投降 + 要求目标投降 Require Players to surrender before they can be arrested @@ -346,6 +394,8 @@ Requiert la capitulation des joueurs avant qu'ils ne puissent être arrêtés プレイヤーは拘束される前に、投降する必要があります。 체포하기 전에 플레이어가 투항을 먼저해야만 합니다 + 玩家須先要求目標投降, 才可以進行逮捕 + 玩家须先要求目标投降, 才可以进行逮捕 Surrendering only @@ -359,6 +409,8 @@ Reddition seulement 投降中のみ 투항 중에만 + 只能在投降狀態 + 只能在投降状态 Surrendering or No weapon @@ -372,6 +424,8 @@ Capitulation ou desarmé 投降中か非武装時 투항 중 혹은 비무장 + 投降或無武器狀態 + 投降或无武器状态 diff --git a/addons/cargo/ACE_Settings.hpp b/addons/cargo/ACE_Settings.hpp index 574000155e..595de28459 100644 --- a/addons/cargo/ACE_Settings.hpp +++ b/addons/cargo/ACE_Settings.hpp @@ -6,4 +6,11 @@ class ACE_Settings { value = 1; category = ECSTRING(OptionsMenu,CategoryLogistics); }; + class GVAR(paradropTimeCoefficent) { + displayName = CSTRING(paradropTimeCoefficent); + description = CSTRING(paradropTimeCoefficent_description); + typeName = "SCALAR"; + value = 2.5; + category = ECSTRING(OptionsMenu,CategoryLogistics); + }; }; diff --git a/addons/cargo/CfgEden.hpp b/addons/cargo/CfgEden.hpp new file mode 100644 index 0000000000..9144ba458b --- /dev/null +++ b/addons/cargo/CfgEden.hpp @@ -0,0 +1,37 @@ +class Cfg3DEN { + class Object { + class AttributeCategories { + class ace_attributes { + class Attributes { + class GVAR(space) { + displayName = CSTRING(space_edenName); + tooltip = CSTRING(space_edenDesc); + property = QGVAR(space); + control = "Edit"; + + expression = QUOTE([ARR_2(_this,_value)] call DFUNC(setSpace);); + defaultValue = QUOTE(GET_NUMBER(configFile >> 'CfgVehicles' >> typeOf _this >> QQGVAR(space),0)); + + validate = "number"; + condition = "objectHasInventoryCargo"; + typeName = "NUMBER"; + }; + class GVAR(size) { + displayName = CSTRING(size_edenName); + tooltip = CSTRING(size_edenDesc); + property = QGVAR(size); + control = "Edit"; + + // Expression only runs on the server, must handle actions for all machines and future JIPs (Why BI?!) + expression = QUOTE([ARR_2(_this,_value)] call DFUNC(setSize);); + defaultValue = QUOTE(GET_NUMBER(configFile >> 'CfgVehicles' >> typeOf _this >> QQGVAR(size),-1)); + + validate = "number"; + condition = "1-objectBrain"; + typeName = "NUMBER"; + }; + }; + }; + }; + }; +}; diff --git a/addons/cargo/CfgEventHandlers.hpp b/addons/cargo/CfgEventHandlers.hpp index 45f6d48997..823dc87470 100644 --- a/addons/cargo/CfgEventHandlers.hpp +++ b/addons/cargo/CfgEventHandlers.hpp @@ -24,52 +24,3 @@ class Extended_Killed_EventHandlers { }; }; }; - -//Need initPost or we have problems with setVariable with 'ACE_Cargo' -class Extended_InitPost_EventHandlers { - class ThingX { - class ADDON { - init = QUOTE(_this call DFUNC(initObject); _this call DFUNC(initVehicle)); - }; - }; - class Land_PaperBox_closed_F { - class ADDON { - init = QUOTE(_this call DFUNC(initObject); _this call DFUNC(initVehicle)); - }; - }; - class PlasticCase_01_base_F { - class ADDON { - init = QUOTE(_this call DFUNC(initObject); _this call DFUNC(initVehicle)); - }; - }; - class LandVehicle { - class ADDON { - init = QUOTE(_this call DFUNC(initVehicle)); - }; - }; - class Air { - class ADDON { - init = QUOTE(_this call DFUNC(initVehicle)); - }; - }; - class Ship_F { - class ADDON { - init = QUOTE(_this call DFUNC(initVehicle)); - }; - }; - class ACE_ConcertinaWireCoil { - class ADDON { - init = QUOTE(_this call DFUNC(initObject)); - }; - }; - class Land_PortableLight_single_F { - class ADDON { - init = QUOTE(_this call DFUNC(initObject)); - }; - }; - class StaticWeapon { - class ADDON { - init = QUOTE(_this call DFUNC(initObject)); - }; - }; -}; diff --git a/addons/cargo/CfgVehicles.hpp b/addons/cargo/CfgVehicles.hpp index a89375e4a0..b8d5b30415 100644 --- a/addons/cargo/CfgVehicles.hpp +++ b/addons/cargo/CfgVehicles.hpp @@ -26,6 +26,12 @@ class CfgVehicles { typeName = "BOOL"; defaultValue = 1; }; + class paradropTimeCoefficent { + displayName = CSTRING(paradropTimeCoefficent); + description = CSTRING(paradropTimeCoefficent_description); + typeName = "SCALAR"; + defaultValue = 2.5; + }; }; class ModuleDescription { @@ -279,7 +285,7 @@ class CfgVehicles { GVAR(space) = 4; GVAR(hasCargo) = 1; }; - + // autonomus class UAV_01_base_F: Helicopter_Base_F { GVAR(space) = 0; @@ -321,26 +327,6 @@ class CfgVehicles { GVAR(canLoad) = 1; }; - // Taru pods - class Pod_Heli_Transport_04_base_F; - class Land_Pod_Heli_Transport_04_ammo_F: Pod_Heli_Transport_04_base_F { - GVAR(space) = 8; - GVAR(hasCargo) = 1; - }; - class Land_Pod_Heli_Transport_04_box_F: Pod_Heli_Transport_04_base_F { - GVAR(space) = 20; - GVAR(hasCargo) = 1; - }; - class Land_Pod_Heli_Transport_04_repair_F: Pod_Heli_Transport_04_base_F { - GVAR(space) = 12; - GVAR(hasCargo) = 1; - }; - class Pod_Heli_Transport_04_crewed_base_F; - class Land_Pod_Heli_Transport_04_medevac_F: Pod_Heli_Transport_04_crewed_base_F { - GVAR(space) = 8; - GVAR(hasCargo) = 1; - }; - class StaticMortar; class Mortar_01_base_F: StaticMortar { GVAR(size) = 2; // 1 = small, 2 = large @@ -369,8 +355,57 @@ class CfgVehicles { class CargoNet_01_base_F: Slingload_base_F { //Slingload pallets GVAR(size) = 6; }; - class Slingload_01_Base_F: Slingload_base_F { //Huron 20ft containers + + //Huron 20ft containers + class Slingload_01_Base_F: Slingload_base_F { GVAR(canLoad) = 0; + GVAR(size) = -1; + }; + class B_Slingload_01_Cargo_F: Slingload_01_Base_F { // Huron Cargo + GVAR(space) = 20; + GVAR(hasCargo) = 1; + }; + class B_Slingload_01_Ammo_F: Slingload_01_Base_F { // Huron Ammo + GVAR(space) = 8; + GVAR(hasCargo) = 1; + }; + class B_Slingload_01_Medevac_F: Slingload_01_Base_F { // Huron Medevac + GVAR(space) = 8; + GVAR(hasCargo) = 1; + }; + class B_Slingload_01_Repair_F: Slingload_01_Base_F { // Huron Repair + GVAR(space) = 12; + GVAR(hasCargo) = 1; + }; + + // Taru pods + class Pod_Heli_Transport_04_base_F: Slingload_base_F { + GVAR(canLoad) = 0; + GVAR(size) = -1; + }; + class Land_Pod_Heli_Transport_04_ammo_F: Pod_Heli_Transport_04_base_F { + GVAR(space) = 8; + GVAR(hasCargo) = 1; + }; + class Land_Pod_Heli_Transport_04_box_F: Pod_Heli_Transport_04_base_F { + GVAR(space) = 20; + GVAR(hasCargo) = 1; + }; + class Land_Pod_Heli_Transport_04_repair_F: Pod_Heli_Transport_04_base_F { + GVAR(space) = 12; + GVAR(hasCargo) = 1; + }; + class Pod_Heli_Transport_04_crewed_base_F: StaticWeapon { + GVAR(canLoad) = 0; + GVAR(size) = -1; + }; + class Land_Pod_Heli_Transport_04_covered_F: Pod_Heli_Transport_04_crewed_base_F { + GVAR(space) = 8; + GVAR(hasCargo) = 1; + }; + class Land_Pod_Heli_Transport_04_medevac_F: Pod_Heli_Transport_04_crewed_base_F { + GVAR(space) = 8; + GVAR(hasCargo) = 1; }; //Plastic and metal case diff --git a/addons/cargo/XEH_PREP.hpp b/addons/cargo/XEH_PREP.hpp index 8224ec0029..8b7d3c5d4f 100644 --- a/addons/cargo/XEH_PREP.hpp +++ b/addons/cargo/XEH_PREP.hpp @@ -1,9 +1,8 @@ PREP(addCargoItem); -PREP(canLoad); +PREP(addCargoVehiclesActions); PREP(canLoadItemIn); PREP(canUnloadItem); -PREP(findNearestVehicle); PREP(getCargoSpaceLeft); PREP(getSizeItem); PREP(handleDestroyed); @@ -15,6 +14,8 @@ PREP(moduleMakeLoadable); PREP(moduleSettings); PREP(onMenuOpen); PREP(paradropItem); +PREP(setSize); +PREP(setSpace); PREP(startLoadIn); PREP(startUnload); PREP(unloadItem); diff --git a/addons/cargo/XEH_postInit.sqf b/addons/cargo/XEH_postInit.sqf index 6b7320d5ae..051c77ec9c 100644 --- a/addons/cargo/XEH_postInit.sqf +++ b/addons/cargo/XEH_postInit.sqf @@ -51,3 +51,28 @@ _item hideObjectGlobal false; _item setPosASL (AGLtoASL _emptyPosAGL); }] call CBA_fnc_addEventHandler; + +// Private events to handle adding actions globally via public functions +[QGVAR(initObject), DFUNC(initObject)] call CBA_fnc_addEventHandler; +[QGVAR(initVehicle), DFUNC(initVehicle)] call CBA_fnc_addEventHandler; + +// Add all the vehicle init EHs (require initPost for set/get variables) +["LandVehicle", "initPost", DFUNC(initVehicle), nil, nil, true] call CBA_fnc_addClassEventHandler; +["Air", "initPost", DFUNC(initVehicle), nil, nil, true] call CBA_fnc_addClassEventHandler; +["Ship_F", "initPost", DFUNC(initVehicle), nil, nil, true] call CBA_fnc_addClassEventHandler; + +// Add all the object init EHs +["StaticWeapon", "initPost", DFUNC(initObject), nil, nil, true] call CBA_fnc_addClassEventHandler; +["Land_PortableLight_single_F", "initPost", DFUNC(initObject), nil, nil, true] call CBA_fnc_addClassEventHandler; +["ACE_ConcertinaWireCoil", "initPost", DFUNC(initObject), nil, nil, true] call CBA_fnc_addClassEventHandler; + +// Add all the vehicle/object init EHs +["ThingX", "initPost", { + _this call DFUNC(initObject); _this call DFUNC(initVehicle); +}, nil, nil, true] call CBA_fnc_addClassEventHandler; +["Land_PaperBox_closed_F", "initPost", { + _this call DFUNC(initObject); _this call DFUNC(initVehicle); +}, nil, nil, true] call CBA_fnc_addClassEventHandler; +["PlasticCase_01_base_F", "initPost", { + _this call DFUNC(initObject); _this call DFUNC(initVehicle); +}, nil, nil, true] call CBA_fnc_addClassEventHandler; diff --git a/addons/cargo/XEH_preInit.sqf b/addons/cargo/XEH_preInit.sqf index 7784968d3f..5ee6406a7d 100644 --- a/addons/cargo/XEH_preInit.sqf +++ b/addons/cargo/XEH_preInit.sqf @@ -8,5 +8,6 @@ PREP_RECOMPILE_END; GVAR(initializedItemClasses) = []; GVAR(initializedVehicleClasses) = []; +GVAR(cargoHolderTypes) = ["Car", "Air", "Tank", "Ship", "Cargo_base_F", "Land_PaperBox_closed_F"]; ADDON = true; diff --git a/addons/cargo/config.cpp b/addons/cargo/config.cpp index 1912740903..31f01ffd72 100644 --- a/addons/cargo/config.cpp +++ b/addons/cargo/config.cpp @@ -15,6 +15,7 @@ class CfgPatches { }; #include "ACE_Settings.hpp" +#include "CfgEden.hpp" #include "CfgEventHandlers.hpp" #include "CfgVehicles.hpp" #include "menu.hpp" diff --git a/addons/cargo/functions/fnc_addCargoVehiclesActions.sqf b/addons/cargo/functions/fnc_addCargoVehiclesActions.sqf new file mode 100644 index 0000000000..176b2f31b6 --- /dev/null +++ b/addons/cargo/functions/fnc_addCargoVehiclesActions.sqf @@ -0,0 +1,45 @@ +/* + * Author: Dystopian + * Create actions for nearest vehicles with cargo. + * + * Arguments: + * 0: Target + * 1: Player + * + * Return Value: + * Children actions + * + * Example: + * [target, player] call ace_cargo_fnc_addCargoVehiclesActions + * + * Public: No + */ +#include "script_component.hpp" + +params ["_target", "_player"]; + +private _statement = { + params ["_target", "_player", "_params"]; + _params params ["_vehicle"]; + [_player, _target, _vehicle] call FUNC(startLoadIn); +}; + +private _actions = []; + +{ + private _config = configFile >> "CfgVehicles" >> typeOf _x; + private _hasCargoPublic = _x getVariable [QGVAR(hasCargo), false]; + private _hasCargoConfig = getNumber (_config >> QGVAR(hasCargo)) == 1; + if ((_hasCargoPublic || _hasCargoConfig) && {_x != _target}) then { + private _name = getText (_config >> "displayName"); + private _ownerName = [_x, true] call EFUNC(common,getName); + if ("" != _ownerName) then { + _name = format ["%1 (%2)", _name, _ownerName]; + }; + private _icon = (getText (_config >> "icon")) call BIS_fnc_textureVehicleIcon; + private _action = [format ["%1", _x], _name, _icon, _statement, {true}, {}, [_x]] call EFUNC(interact_menu,createAction); + _actions pushBack [_action, [], _target]; + }; +} forEach (nearestObjects [_player, GVAR(cargoHolderTypes), MAX_LOAD_DISTANCE]); + +_actions diff --git a/addons/cargo/functions/fnc_canLoad.sqf b/addons/cargo/functions/fnc_canLoad.sqf deleted file mode 100644 index e0fd172eef..0000000000 --- a/addons/cargo/functions/fnc_canLoad.sqf +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Author: Glowbal - * Check if player can load an item into the nearest vehicle. - * - * Arguments: - * 0: Player - * 1: Object to load - * - * Return Value: - * Can load - * - * Example: - * [player, object] call ace_cargo_fnc_canLoad - * - * Public: No - */ -#include "script_component.hpp" - -params ["_player", "_object"]; -TRACE_2("params",_player,_object); - -if (!([_player, _object, []] call EFUNC(common,canInteractWith))) exitWith {false}; - -private _nearestVehicle = [_player, _object] call FUNC(findNearestVehicle); - -if (_nearestVehicle isKindOf "Cargo_Base_F" || isNull _nearestVehicle) then { - { - if ([_object, _x] call FUNC(canLoadItemIn)) exitWith {_nearestVehicle = _x}; - } forEach (nearestObjects [_player, ["Cargo_base_F", "Land_PaperBox_closed_F"], MAX_LOAD_DISTANCE]); -}; - -if (isNull _nearestVehicle) exitWith {false}; - -if ((locked _nearestVehicle) >= 2) exitWith {false}; - -[_object, _nearestVehicle] call FUNC(canLoadItemIn) diff --git a/addons/cargo/functions/fnc_canLoadItemIn.sqf b/addons/cargo/functions/fnc_canLoadItemIn.sqf index 77a230108c..092272f94f 100644 --- a/addons/cargo/functions/fnc_canLoadItemIn.sqf +++ b/addons/cargo/functions/fnc_canLoadItemIn.sqf @@ -40,4 +40,5 @@ if (_item isEqualType "") then { _validItem && {_itemSize > 0} && {alive _vehicle} && -{_itemSize <= ([_vehicle] call FUNC(getCargoSpaceLeft))} +{_itemSize <= ([_vehicle] call FUNC(getCargoSpaceLeft))} && +{locked _vehicle < 2} diff --git a/addons/cargo/functions/fnc_findNearestVehicle.sqf b/addons/cargo/functions/fnc_findNearestVehicle.sqf deleted file mode 100644 index 7981782255..0000000000 --- a/addons/cargo/functions/fnc_findNearestVehicle.sqf +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Author: Glowbal - * Get nearest vehicle from unit that is not excluded, priority: Car-Air-Tank-Ship. - * - * Arguments: - * 0: Unit - * 1: Object to exclude - * - * Return Value: - * Vehicle in Distance - * - * Example: - * [unit, object] call ace_cargo_fnc_findNearestVehicle - * - * Public: No - */ -#include "script_component.hpp" - -params ["_unit","_object"]; - -private _loadCar = nearestObjects [_unit, ["car"], MAX_LOAD_DISTANCE]; -_loadCar deleteAt (_loadCar find _object); -if !(_loadCar isEqualTo []) exitWith {_loadCar select 0}; - -private _loadHelicopter = nearestObjects [_unit, ["air"], MAX_LOAD_DISTANCE]; -_loadHelicopter deleteAt (_loadHelicopter find _object); -if !(_loadHelicopter isEqualTo []) exitWith {_loadHelicopter select 0}; - -private _loadTank = nearestObjects [_unit, ["tank"], MAX_LOAD_DISTANCE]; -_loadTank deleteAt (_loadTank find _object); -if !(_loadTank isEqualTo []) exitWith {_loadTank select 0}; - -private _loadShip = nearestObjects [_unit, ["ship"], MAX_LOAD_DISTANCE]; -_loadShip deleteAt (_loadShip find _object);; -if !(_loadShip isEqualTo []) exitWith {_loadShip select 0}; - -private _loadContainer = nearestObjects [_unit, ["Cargo_base_F"], MAX_LOAD_DISTANCE]; -_loadContainer deleteAt (_loadContainer find _object); -if !(_loadContainer isEqualTo []) exitWith {_loadContainer select 0}; - -objNull diff --git a/addons/cargo/functions/fnc_getCargoSpaceLeft.sqf b/addons/cargo/functions/fnc_getCargoSpaceLeft.sqf index 7e8594ffe4..dc5f3ab073 100644 --- a/addons/cargo/functions/fnc_getCargoSpaceLeft.sqf +++ b/addons/cargo/functions/fnc_getCargoSpaceLeft.sqf @@ -18,4 +18,4 @@ params ["_object"]; // TRACE_1("params",_object); -_object getVariable [QGVAR(space), getNumber (configFile >> "CfgVehicles" >> typeOf _object >> QGVAR(space))] +(_object getVariable [QGVAR(space), getNumber (configFile >> "CfgVehicles" >> typeOf _object >> QGVAR(space))]) max 0 diff --git a/addons/cargo/functions/fnc_getSizeItem.sqf b/addons/cargo/functions/fnc_getSizeItem.sqf index c53c05ee28..32ec92a550 100644 --- a/addons/cargo/functions/fnc_getSizeItem.sqf +++ b/addons/cargo/functions/fnc_getSizeItem.sqf @@ -1,5 +1,5 @@ /* - * Author: Glowbal + * Author: Glowbal, SilentSpike * Get the cargo size of an object. * * Arguments: @@ -17,23 +17,13 @@ params ["_item"]; -scopeName "return"; - -private _isVirtual = (_item isEqualType ""); -private _itemClass = if (_isVirtual) then {_item} else {typeOf _item}; -private _config = (configFile >> "CfgVehicles" >> _itemClass >> QGVAR(size)); - -if (_isVirtual) then { - if (isNumber _config) then { - (getNumber _config) breakOut "return"; - }; +// Virtual items are much easier to deal with +if (_item isEqualType "") then { + CARGO_SIZE(_item) } else { - if (!isNil {_item getVariable QGVAR(size)}) then { - (_item getVariable QGVAR(size)) breakOut "return"; - }; - if (isNumber _config) then { - (getNumber _config) breakOut "return"; + if (isNil {_item getVariable QGVAR(size)}) then { + CARGO_SIZE(typeOf _item) + } else { + _item getVariable QGVAR(size) }; }; - --1 diff --git a/addons/cargo/functions/fnc_initObject.sqf b/addons/cargo/functions/fnc_initObject.sqf index 92403b8dd9..d59249c31b 100644 --- a/addons/cargo/functions/fnc_initObject.sqf +++ b/addons/cargo/functions/fnc_initObject.sqf @@ -1,5 +1,5 @@ /* - * Author: Glowbal + * Author: Glowbal, SilentSpike * Initializes variables for loadable objects. Called from init EH. * * Arguments: @@ -19,20 +19,47 @@ params ["_object"]; private _type = typeOf _object; TRACE_2("params",_object,_type); -if ((_object getVariable [QGVAR(canLoad), getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(canLoad))]) != 1) exitWith {}; +// If object had size given to it via eden/public then override config canLoad setting +private _canLoadPublic = _object getVariable [QGVAR(canLoad), false]; +if (!(_canLoadPublic isEqualType false)) then { + WARNING_4("%1[%2] - Variable %3 is %4 - Should be bool",_object,_type,QGVAR(canLoad),_canLoadPublic); +}; +private _canLoadConfig = getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(canLoad)) == 1; -// do nothing if the class is already initialized +// Nothing to do here if object can't be loaded +if !(_canLoadConfig || {_canLoadPublic in [true, 1]}) exitWith {}; + +// Servers and HCs do not require action menus (beyond this point) +if !(hasInterface) exitWith {}; + +// Unnecessary to add actions to an object class that's already got them if (_type in GVAR(initializedItemClasses)) exitWith {}; -GVAR(initializedItemClasses) pushBack _type; +if (_object getVariable [QGVAR(initObject),false]) exitWith {}; -TRACE_1("Adding load cargo action to class", _type); +// Objects given size via eden have their actions added to the object +// So this function may run for multiple of the same class in that case +if (_canLoadConfig) then { + GVAR(initializedItemClasses) pushBack _type; + TRACE_1("Adding load cargo action to class", _type); +} else { + _object setVariable [QGVAR(initObject),true]; + TRACE_1("Adding load cargo action to object", _object); +}; +// Vehicles with passengers inside are prevented from being loaded in `fnc_canLoadItemIn` private _condition = { + //IGNORE_PRIVATE_WARNING ["_target", "_player"]; GVAR(enable) && - {(_target getVariable [QGVAR(canLoad), getNumber (configFile >> "CfgVehicles" >> (typeOf _target) >> QGVAR(canLoad))]) == 1} && + {(_target getVariable [QGVAR(canLoad), getNumber (configFile >> "CfgVehicles" >> (typeOf _target) >> QGVAR(canLoad))]) in [true, 1]} && {locked _target < 2} && {alive _target} && - {[_player, _target, []] call EFUNC(common,canInteractWith)} + {[_player, _target, []] call EFUNC(common,canInteractWith)} && + {0 < { + private _type = typeOf _x; + private _hasCargoPublic = _x getVariable [QGVAR(hasCargo), false]; + private _hasCargoConfig = getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(hasCargo)) == 1; + (_hasCargoPublic || _hasCargoConfig) && {_x != _target} + } count (nearestObjects [_player, GVAR(cargoHolderTypes), MAX_LOAD_DISTANCE])} }; private _statement = { params ["_target", "_player"]; @@ -41,6 +68,10 @@ private _statement = { private _text = localize LSTRING(loadObject); private _icon = QPATHTOF(UI\Icon_load.paa); -private _action = [QGVAR(load), _text, _icon, _statement, _condition] call EFUNC(interact_menu,createAction); -[_type, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToClass); +private _action = [QGVAR(load), _text, _icon, _statement, _condition, {call FUNC(addCargoVehiclesActions)}] call EFUNC(interact_menu,createAction); +if (_canLoadConfig) then { + [_type, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToClass); +} else { + [_object, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToObject); +}; diff --git a/addons/cargo/functions/fnc_initVehicle.sqf b/addons/cargo/functions/fnc_initVehicle.sqf index c65a9bddbc..6d3709a329 100644 --- a/addons/cargo/functions/fnc_initVehicle.sqf +++ b/addons/cargo/functions/fnc_initVehicle.sqf @@ -20,8 +20,24 @@ TRACE_1("params", _vehicle); private _type = typeOf _vehicle; -if (getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(hasCargo)) != 1) exitWith {}; +// If vehicle had space given to it via eden/public then override config hasCargo setting +private _hasCargoPublic = _vehicle getVariable [QGVAR(hasCargo), false]; +private _hasCargoConfig = getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(hasCargo)) == 1; +// Nothing to do here if vehicle has no cargo space +if !(_hasCargoConfig || _hasCargoPublic) exitWith {}; + +// Check if cargo is in cargo holder types (checked when trying to search for loadable objects) +private _addCargoType = true; +{ + if (_type isKindOf _x) exitWith {_addCargoType = false}; +} forEach GVAR(cargoHolderTypes); +TRACE_2("",_addCargoType,_type); +if (_addCargoType) then { + GVAR(cargoHolderTypes) pushBack _type; +}; + +// Vehicle can have default ace cargo in its config if (isServer) then { { if (isClass _x) then { @@ -33,19 +49,33 @@ if (isServer) then { } count ("true" configClasses (configFile >> "CfgVehicles" >> _type >> "ACE_Cargo" >> "Cargo")); }; -// do nothing if the class is already initialized +// Servers and HCs do not require action menus (beyond this point) +if !(hasInterface) exitWith {}; + +// Unnecessary to add actions to a vehicle class that's already got them if (_type in GVAR(initializedVehicleClasses)) exitWith {}; -// set class as initialized -GVAR(initializedVehicleClasses) pushBack _type; +if (_vehicle getVariable [QGVAR(initVehicle),false]) exitWith {}; -if (!hasInterface) exitWith {}; - -TRACE_1("Adding unload cargo action to class", _type); +// Vehicles given cargo via eden have their actions added to the object +// So this function may run for multiple of the same class in that case +if (_hasCargoConfig) then { + GVAR(initializedVehicleClasses) pushBack _type; + TRACE_1("Adding unload cargo action to class", _type); +} else { + _vehicle setVariable [QGVAR(initVehicle),true]; + TRACE_1("Adding unload cargo action to object", _vehicle); +}; private _condition = { - GVAR(enable) && {locked _target < 2} && {alive _target} && {[_player, _target, ["isNotSwimming"]] call EFUNC(common,canInteractWith)} + //IGNORE_PRIVATE_WARNING ["_target", "_player"]; + GVAR(enable) && + {(_target getVariable [QGVAR(hasCargo), getNumber (configFile >> "CfgVehicles" >> (typeOf _target) >> QGVAR(hasCargo)) == 1])} && + {locked _target < 2} && + {alive _target} && + {[_player, _target, ["isNotSwimming"]] call EFUNC(common,canInteractWith)} }; private _statement = { + //IGNORE_PRIVATE_WARNING ["_target", "_player"]; GVAR(interactionVehicle) = _target; GVAR(interactionParadrop) = false; createDialog QGVAR(menu); @@ -54,11 +84,16 @@ private _text = localize LSTRING(openMenu); private _icon = ""; private _action = [QGVAR(openMenu), _text, _icon, _statement, _condition] call EFUNC(interact_menu,createAction); -[_type, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToClass); +if (_hasCargoConfig) then { + [_type, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToClass); +} else { + [_vehicle, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToObject); +}; // Add the paradrop self interaction for planes and helicopters if (_vehicle isKindOf "Air") then { private _condition = { + //IGNORE_PRIVATE_WARNING ["_target", "_player"]; GVAR(enable) && {[_player, _target, []] call EFUNC(common,canInteractWith)} && { private _turretPath = _player call CBA_fnc_turretPath; (_player == (driver _target)) || // pilot @@ -66,6 +101,7 @@ if (_vehicle isKindOf "Air") then { {_turretPath in (getArray (configFile >> "CfgVehicles" >> (typeOf _target) >> QGVAR(loadmasterTurrets)))}} // loadMaster turret from config }; private _statement = { + //IGNORE_PRIVATE_WARNING ["_target", "_player"]; GVAR(interactionVehicle) = _target; GVAR(interactionParadrop) = true; createDialog QGVAR(menu); @@ -74,5 +110,9 @@ if (_vehicle isKindOf "Air") then { private _icon = ""; private _action = [QGVAR(openMenu), _text, _icon, _statement, _condition] call EFUNC(interact_menu,createAction); - [_type, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToClass); // self action on the vehicle + if (_hasCargoConfig) then { + [_type, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToClass); // self action on the vehicle + } else { + [_vehicle, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToObject); + }; }; diff --git a/addons/cargo/functions/fnc_loadItem.sqf b/addons/cargo/functions/fnc_loadItem.sqf index 1d59cc1e64..bb608ff926 100644 --- a/addons/cargo/functions/fnc_loadItem.sqf +++ b/addons/cargo/functions/fnc_loadItem.sqf @@ -13,7 +13,7 @@ * Example: * [object, vehicle] call ace_cargo_fnc_loadItem * - * Public: No + * Public: Yes */ #include "script_component.hpp" diff --git a/addons/cargo/functions/fnc_makeLoadable.sqf b/addons/cargo/functions/fnc_makeLoadable.sqf index 6bd962398a..4d2aac21f0 100644 --- a/addons/cargo/functions/fnc_makeLoadable.sqf +++ b/addons/cargo/functions/fnc_makeLoadable.sqf @@ -17,6 +17,13 @@ */ #include "script_component.hpp" +// Only run this after the settings are initialized +if !(EGVAR(common,settingsInitFinished)) exitWith { + EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(makeLoadable), _this]; +}; + +ACE_DEPRECATED(QFUNC(makeLoadable),"3.12.0",QFUNC(setSize)); + params [["_object", objNull, [objNull]], ["_canLoad", true, [false, 0]], ["_setSize", 1, [0]]]; TRACE_3("params",_object,_canLoad,_setSize); @@ -25,7 +32,7 @@ private _type = typeOf _object; private _cfgCanLoad = getNumber (configFile >> "CfgVehicles" >> _type >> QGVAR(canLoad)); private _curSize = [_object] call FUNC(getSizeItem); -_canLoad = [0, 1] select _canLoad; //convert true/false to scalar +_canLoad = [0, 1] select _canLoad; // Convert true/false to scalar if ((_canLoad == 1) && {_setSize <= 0}) exitWith { ERROR("ace_cargo_fnc_makeLoadable (size <= 0) when making loadable"); @@ -33,7 +40,7 @@ if ((_canLoad == 1) && {_setSize <= 0}) exitWith { TRACE_2("setVar if different from config",_canLoad,_cfgCanLoad); if (_canLoad != _cfgCanLoad) then { - _object setVariable [QGVAR(canLoad), _canLoad]; + _object setVariable [QGVAR(canLoad), _canLoad == 1]; }; TRACE_2("setVar if different from config",_setSize,_curSize); diff --git a/addons/cargo/functions/fnc_moduleMakeLoadable.sqf b/addons/cargo/functions/fnc_moduleMakeLoadable.sqf index 9c7fb06742..9a9e21a22d 100644 --- a/addons/cargo/functions/fnc_moduleMakeLoadable.sqf +++ b/addons/cargo/functions/fnc_moduleMakeLoadable.sqf @@ -20,6 +20,8 @@ params ["_logic", "_objects", "_activated"]; TRACE_3("params",_logic,_objects,_activated); +ACE_DEPRECATED(QFUNC(moduleMakeLoadable),"3.12.0","Eden editor object attributes"); + if ((isNull _logic) || {!_activated}) exitWith {}; if (_objects isEqualTo []) exitWith { WARNING_1("ace_cargo_fnc_moduleMakeLoadable has no synced objects [%1]", _logic); diff --git a/addons/cargo/functions/fnc_moduleSettings.sqf b/addons/cargo/functions/fnc_moduleSettings.sqf index 0374152a5a..b7af19c76a 100644 --- a/addons/cargo/functions/fnc_moduleSettings.sqf +++ b/addons/cargo/functions/fnc_moduleSettings.sqf @@ -24,5 +24,6 @@ params ["_logic", "", "_activated"]; if (!_activated) exitWith {}; [_logic, QGVAR(enable), "enable"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(paradropTimeCoefficent), "paradropTimeCoefficent"] call EFUNC(common,readSettingFromModule); INFO("Cargo Module Initialized."); diff --git a/addons/cargo/functions/fnc_onMenuOpen.sqf b/addons/cargo/functions/fnc_onMenuOpen.sqf index 852729e529..8b3847993d 100644 --- a/addons/cargo/functions/fnc_onMenuOpen.sqf +++ b/addons/cargo/functions/fnc_onMenuOpen.sqf @@ -44,7 +44,13 @@ if (GVAR(interactionParadrop)) then { lbClear _ctrl; { private _class = if (_x isEqualType "") then {_x} else {typeOf _x}; - _ctrl lbAdd (getText(configfile >> "CfgVehicles" >> _class >> "displayName")); + private _displayName = getText (configfile >> "CfgVehicles" >> _class >> "displayName"); + if (GVAR(interactionParadrop)) then { + _ctrl lbAdd format ["%1 (%2s)", _displayName, GVAR(paradropTimeCoefficent) * ([_class] call FUNC(getSizeItem))]; + } else { + _ctrl lbAdd _displayName; + }; + true } count _loaded; diff --git a/addons/cargo/functions/fnc_paradropItem.sqf b/addons/cargo/functions/fnc_paradropItem.sqf index 2eb59fee1d..0f74787723 100644 --- a/addons/cargo/functions/fnc_paradropItem.sqf +++ b/addons/cargo/functions/fnc_paradropItem.sqf @@ -6,7 +6,7 @@ * 0: Object * 1: Vehicle * - * Return value: + * Return Value: * Object unloaded * * Example: @@ -32,9 +32,9 @@ private _itemSize = [_item] call FUNC(getSizeItem); _vehicle setVariable [QGVAR(space), (_cargoSpace + _itemSize), true]; (boundingBoxReal _vehicle) params ["_bb1", "_bb2"]; -private _distBehind = ((_bb1 select 1) min (_bb2 select 1)) - 3; // 3 meters behind max bounding box +private _distBehind = ((_bb1 select 1) min (_bb2 select 1)) - 4; // 4 meters behind max bounding box TRACE_1("",_distBehind); -private _posBehindVehicleAGL = _vehicle modelToWorld [0, _distBehind, -1]; +private _posBehindVehicleAGL = _vehicle modelToWorld [0, _distBehind, -2]; private _itemObject = if (_item isEqualType objNull) then { @@ -49,7 +49,7 @@ private _itemObject = if (_item isEqualType objNull) then { _newItem }; -_itemObject setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vectorDir _vehicle)) vectorMultiply 10)); +_itemObject setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vectorDir _vehicle)) vectorMultiply -5)); // open parachute and ir light effect [{ @@ -90,6 +90,15 @@ _itemObject setVelocity ((velocity _vehicle) vectorAdd ((vectorNormalized (vecto }, 1, [_itemObject]] call CBA_fnc_addPerFrameHandler; +[ + [ + LSTRING(UnloadedItem), + getText (configFile >> "CfgVehicles" >> typeOf _itemObject >> "displayName"), + getText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "displayName") + ], + 3 +] call EFUNC(common,displayTextStructured); + // Invoke listenable event ["ace_cargoUnloaded", [_item, _vehicle, "paradrop"]] call CBA_fnc_globalEvent; diff --git a/addons/cargo/functions/fnc_setSize.sqf b/addons/cargo/functions/fnc_setSize.sqf new file mode 100644 index 0000000000..2e5c0aa441 --- /dev/null +++ b/addons/cargo/functions/fnc_setSize.sqf @@ -0,0 +1,56 @@ +/* + * Author: SilentSpike + * Set the cargo size of any object. Has global effect. + * Adds the load action menu if necessary. + * Negative size makes unloadable. + * + * Arguments: + * 0: Object + * 1: Cargo size + * + * Return Value: + * None + * + * Example: + * [cursorTarget, 3] call ace_cargo_fnc_setSize + * + * Public: Yes + */ +#include "script_component.hpp" + +// Only run this after the settings are initialized +if !(EGVAR(common,settingsInitFinished)) exitWith { + EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(setSize), _this]; +}; + +params [ + ["_object",objNull,[objNull]], + ["_size",nil,[0]] // Default can't be a number since all are valid +]; +TRACE_2("setSize",_object,_size); + +// Nothing to do here +if ( + (isNil "_size") || + {isNull _object} || + {_size == _object getVariable [QGVAR(size), CARGO_SIZE(typeOf _object)]} +) exitWith {}; + +// Apply new size globally +// Necessary to update value, even if unloadable, as API could be used again +_object setVariable [QGVAR(canLoad), _size >= 0, true]; +_object setVariable [QGVAR(size), _size, true]; + +// If no size no need for load action +if (_size < 0) exitWith {}; + +// If an existing ID is present, load action has already been added globally +private _jipID = _object getVariable QGVAR(setSize_jipID); + +// Actions should be added to all future JIP players too +if (isNil "_jipID") then { + _jipID = [QGVAR(initObject), [_object]] call CBA_fnc_globalEventJIP; + + // Store the ID for any future calls to this function + _object setVariable [QGVAR(setSize_jipID), _jipID, true]; +}; diff --git a/addons/cargo/functions/fnc_setSpace.sqf b/addons/cargo/functions/fnc_setSpace.sqf new file mode 100644 index 0000000000..9f8ab85c68 --- /dev/null +++ b/addons/cargo/functions/fnc_setSpace.sqf @@ -0,0 +1,55 @@ +/* + * Author: SilentSpike + * Set the cargo space of any object. Has global effect. + * Adds the cargo action menu if necessary. + * + * Arguments: + * 0: Object + * 1: Cargo space + * + * Return Value: + * None + * + * Example: + * [vehicle player, 20] call ace_cargo_fnc_setSpace + * + * Public: Yes + */ +#include "script_component.hpp" + +// Only run this after the settings are initialized +if !(EGVAR(common,settingsInitFinished)) exitWith { + EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(setSpace), _this]; +}; + +params [ + ["_vehicle",objNull,[objNull]], + ["_space",nil,[0]] // Default can't be a number since all are valid +]; +TRACE_2("setSpace",_vehicle,_size); + +// Nothing to do here +if ( + (isNil "_space") || + {isNull _vehicle} || + {_space == _vehicle getVariable [QGVAR(space), CARGO_SPACE(typeOf _vehicle)]} +) exitWith {}; + +// Apply new space globally +// Necessary to update value, even if no space, as API could be used again +_vehicle setVariable [QGVAR(hasCargo), _space > 0, true]; +_vehicle setVariable [QGVAR(space), _space, true]; + +// If no cargo space no need for cargo menu +if (_space <= 0) exitWith {}; + +// If an existing ID is present, cargo menu has already been added globally +private _jipID = _vehicle getVariable QGVAR(setSpace_jipID); + +// Cargo menu should be added to all future JIP players too +if (isNil "_jipID") then { + _jipID = [QGVAR(initVehicle), [_vehicle]] call CBA_fnc_globalEventJIP; + + // Store the ID for any future calls to this function + _vehicle setVariable [QGVAR(setSpace_jipID), _jipID, true]; +}; diff --git a/addons/cargo/functions/fnc_startLoadIn.sqf b/addons/cargo/functions/fnc_startLoadIn.sqf index 8af411bddd..4fa0401772 100644 --- a/addons/cargo/functions/fnc_startLoadIn.sqf +++ b/addons/cargo/functions/fnc_startLoadIn.sqf @@ -5,6 +5,7 @@ * Arguments: * 0: Player * 1: Object + * 2: Vehicle (Optional) * * Return Value: * Load ProgressBar Started @@ -16,15 +17,14 @@ */ #include "script_component.hpp" -params ["_player", "_object"]; -TRACE_2("params",_player,_object); +params ["_player", "_object", ["_cargoVehicle", objNull]]; +TRACE_3("params",_player,_object,_cargoVehicle); -private _vehicle = [_player, _object] call FUNC(findNearestVehicle); - -if ((isNull _vehicle) || {_vehicle isKindOf "Cargo_Base_F"}) then { +private _vehicle = _cargoVehicle; +if (isNull _vehicle) then { { if ([_object, _x] call FUNC(canLoadItemIn)) exitWith {_vehicle = _x}; - } forEach (nearestObjects [_player, ["Cargo_base_F", "Land_PaperBox_closed_F"], MAX_LOAD_DISTANCE]); + } forEach (nearestObjects [_player, GVAR(cargoHolderTypes), MAX_LOAD_DISTANCE]); }; if (isNull _vehicle) exitWith { diff --git a/addons/cargo/functions/fnc_startUnload.sqf b/addons/cargo/functions/fnc_startUnload.sqf index 8631449b9e..27ebe9e952 100644 --- a/addons/cargo/functions/fnc_startUnload.sqf +++ b/addons/cargo/functions/fnc_startUnload.sqf @@ -28,13 +28,18 @@ private _ctrl = _display displayCtrl 100; private _selected = (lbCurSel _ctrl) max 0; if (count _loaded <= _selected) exitWith {}; -private _item = _loaded select _selected; //This can be an object or a classname string +private _item = _loaded select _selected; // This can be an object or a classname string if (GVAR(interactionParadrop)) exitWith { + // If drop time is 0 don't show a progress bar + if (GVAR(paradropTimeCoefficent) == 0) exitWith { + [QGVAR(paradropItem), [_item, GVAR(interactionVehicle)]] call CBA_fnc_localEvent; + }; + // Start progress bar - paradrop private _size = [_item] call FUNC(getSizeItem); [ - 2.5 * _size, + GVAR(paradropTimeCoefficent) * _size, [_item, GVAR(interactionVehicle), ACE_player], { (_this select 0) params ["_item", "_target", "_player"]; diff --git a/addons/cargo/functions/fnc_unloadItem.sqf b/addons/cargo/functions/fnc_unloadItem.sqf index 47ff3ba36e..20fde5d631 100644 --- a/addons/cargo/functions/fnc_unloadItem.sqf +++ b/addons/cargo/functions/fnc_unloadItem.sqf @@ -5,14 +5,15 @@ * Arguments: * 0: Item * 1: Vehicle + * 2: Unloader (default: objNull) * * Return Value: - * Object unloaded + * Object was unloaded * * Example: * [object, vehicle] call ace_cargo_fnc_unloadItem * - * Public: No + * Public: Yes */ #include "script_component.hpp" diff --git a/addons/cargo/script_component.hpp b/addons/cargo/script_component.hpp index 4a1305a160..3ae6331f91 100644 --- a/addons/cargo/script_component.hpp +++ b/addons/cargo/script_component.hpp @@ -17,3 +17,9 @@ #include "\z\ace\addons\main\script_macros.hpp" #define MAX_LOAD_DISTANCE 10 + +#define GET_NUMBER(config,default) (if (isNumber (config)) then {getNumber (config)} else {default}) + +// Default cargo size is -1 as 0 is a valid size +#define CARGO_SIZE(classname) GET_NUMBER(configFile >> "CfgVehicles" >> (classname) >> QGVAR(size),-1) +#define CARGO_SPACE(classname) GET_NUMBER(configFile >> "CfgVehicles" >> (classname) >> QGVAR(space),0) diff --git a/addons/cargo/stringtable.xml b/addons/cargo/stringtable.xml index 191e8929f1..05c8d9bc23 100644 --- a/addons/cargo/stringtable.xml +++ b/addons/cargo/stringtable.xml @@ -13,6 +13,8 @@ Charger 積み込む 싣기 + 裝載 + 装载 Unload @@ -26,6 +28,8 @@ Décharger 下ろす 내리기 + 卸載 + 卸载 Cargo @@ -39,6 +43,8 @@ Cargaison カーゴ 화물 + 貨物 + 货物 Cargo Menu @@ -52,6 +58,8 @@ Menu de cargaison カーゴ メニュー 화물 메뉴 + 貨物選單 + 货物选单 Cargo space left: %1 @@ -63,8 +71,10 @@ Espacio de carga restante: %1 Spazio cargo rimanente: %1 Espace de cargaison restant : %1 - カーゴの空き容量は: %1 + カーゴの空き容量: %1 선적 공간 남음: %1 + 貨物剩餘空間: %1 + 货物剩余空间: %1 Enable Cargo @@ -78,6 +88,8 @@ Activer la mise en cargaison カーゴを有効化 화물 활성화 + 啟用貨物裝載 + 启用货物装载 Enable the load in cargo module @@ -91,6 +103,8 @@ Active le chargement de cargaison dans un vehicule カーゴ モジュールで積み込みを有効化 화물 모듈에 싣기를 활성화합니다 + 啟用貨物裝載功能 + 启用货物装载功能 Cargo Settings @@ -104,6 +118,8 @@ Paramètres de cargaison カーゴ設定 화물 설정 + 貨物設定 + 货物设定 Configure the cargo module settings @@ -117,6 +133,8 @@ Configure les paramètres du module de cargaison カーゴ モジュールの設定を構成 화물 모듈의 환경 설정을 바꿉니다 + 配置貨物模塊設定 + 配置货物模块设定 %1<br/>loaded into<br/>%2 @@ -129,8 +147,10 @@ %1<br/>caricato su<br/>%2 %1<br/>berakodva ide:<br/>%2 %1<br/>загружен в<br/>%2 - %1&lt;br/&gt; は &lt;br/&gt;%2 へ積み込まれた + %1<br/>は<br/>%2へ積み込まれた %1<br/>는<br/>%2 에 실림 + %1<br/>裝載至<br/>%2 + %1<br/>装载至<br/>%2 Unloaded<br/>%1 from<br/>%2 @@ -143,8 +163,10 @@ Hai scaricato<br/>%1 da<br/>%2 1%<br/>kirakodva ebből:<br/>%2 %1<br/>разгружен из<br/>%2 - &lt;br/&gt;%2 から &lt;br/&gt;%1 が下ろされた + <br/>%1が<br/>%2から降ろされた %1<br/>는<br/>%2 에서 내려짐 + 從<br/>%2卸載<br/>%1 + 从<br/>%2卸载<br/>%1 Loading Cargo @@ -158,6 +180,8 @@ Chargement de la cargaison カーゴへ積み込んでいる 화물 싣기 + 裝載貨物中 + 装载货物中 Unloading Cargo @@ -169,8 +193,10 @@ Scaricando Descargando Déchargement de la cargaison - カーゴから下ろしている + カーゴから降ろしている 화물 내리기 + 卸載貨物中 + 卸载货物中 %1<br/>could not be loaded @@ -182,8 +208,10 @@ %1<br/>non può essere caricato %1<br/>no pudo ser cargado %1<br /> n'a pas pu être chargé - %1&lt;br/&gt;は積み込めなかった + %1<br/>は積み込めなかった %1<br/>이 실릴 수가 없습니다 + %1<br/>無法被裝載 + %1<br/>无法被装载 %1<br/>could not be unloaded @@ -195,8 +223,10 @@ %1<br/>non può essere scaricato %1<br/>no pudo ser descargado %1<br /> n'a pas pu être déchargé - %1&lt;br/&gt;は下ろせなかった + %1<br/>は降ろせなかった %1<br/>이 내려질 수가 없습니다 + %1<br/>無法被卸載 + %1<br/>无法被卸载 Make Object Loadable @@ -210,6 +240,8 @@ Сделать объект загружаемым オブジェクトを積載可能に 물체를 화물화시키기 + 使物件可裝載 + 使物件可装载 Sets the synced object as loadable by the cargo system. @@ -223,6 +255,8 @@ Делает синхронизированный объект загружаемым для модуля перевозки грузов. オブジェクトを同期させると、カーゴ システムによる積載が可能になります。 물체를 화물 시스템과 동기화시켜 실을 수 있게 합니다 + 使用同步線來使該物件可被裝載. + 使用同步线来使该物件可被装载. Object's Size @@ -236,6 +270,36 @@ Размер объекта オブジェクトの大きさ 물체 크기 + 物件的大小 + 物件的大小 + + + Cargo Space + Spazio Cargo + カーゴ スペース + 貨物空間 + 货物空间 + + + The cargo space available in this vehicle/container + Lo spazio disponibile in questo veicolo/container + この車両/コンテナでカーゴ スペースを使えるようにします + 設定此載具/集裝箱可裝載多少貨物 + 设定此载具/集装箱可装载多少货物 + + + Cargo Size + Dimensioni Cargo + カーゴ サイズ + 貨物的大小 + 货物的大小 + + + The cargo space required to hold this object (-1 for unloadable) + Lo spazio del cargo necessita di mantenere questo oggetto (-1 per scaricabile) + このオブジェクトを積載するのに必要なカーゴ スペース (-1 で積載不可) + 此貨物會佔掉多少空間(設定-1的話此貨物就不能被裝載) + 此货物会占掉多少空间(设定-1的话此货物就不能被装载) Airdrop @@ -243,6 +307,10 @@ 空中投下 Zrzut zaopatrzenia 공중 투하 + Largage aérien + Lancio Aereo + 空投 + 空投 Unlevel Flight @@ -250,6 +318,26 @@ 機体が水平ではありません Nierówny lot 기체가 수평이 아닙니다 + Rétablir l'assiette + Volo non Livellato + 此架飛機並無保持水平飛行 + 此架飞机并无保持水平飞行 + + + Paradrop Time Coffecient + 空中投下までの時間係数 + Coefficente Tempo Lancio Paracadute + Coefficient Temps de largage de cargaison + 空投時間係數 + 空投时间系数 + + + Modifier for how long it takes to paradrop a cargo item. + カーゴ アイテムを空中投下するまでの時間を変更します。 + Modificato per quanto tempo ci impiega a paracadutare un oggetto cargo. + Modifier le temps qu'il faut pour larguer la cargaison. + 設定空投所需消耗的時間. + 设定空投所需消耗的时间. diff --git a/addons/chemlights/functions/fnc_compileChemlightMenu.sqf b/addons/chemlights/functions/fnc_compileChemlightMenu.sqf index 74b0a154c9..c87c4247ec 100644 --- a/addons/chemlights/functions/fnc_compileChemlightMenu.sqf +++ b/addons/chemlights/functions/fnc_compileChemlightMenu.sqf @@ -7,7 +7,7 @@ * 1: Player * 2: Parameters * - * Return value: + * Return Value: * None * * Example: @@ -29,7 +29,7 @@ private _chemlights = [_player] call FUNC(getShieldComponents); private _icon = getText (_config >> "picture"); private _shieldClass = getText (_config >> "ACE_Chemlight_Shield"); private _displayName = getText (configFile >> "CfgWeapons" >> _shieldClass >> "displayName"); - + _displayName = format [localize LSTRING(Action_Prepare), _displayName]; private _statement = {_this call FUNC(prepShield)}; diff --git a/addons/chemlights/functions/fnc_getShieldComponents.sqf b/addons/chemlights/functions/fnc_getShieldComponents.sqf index be089b261c..6055070351 100644 --- a/addons/chemlights/functions/fnc_getShieldComponents.sqf +++ b/addons/chemlights/functions/fnc_getShieldComponents.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Unit to check * - * Return value: + * Return Value: * List of carried chemlight classnames * * Example: diff --git a/addons/chemlights/functions/fnc_prepShield.sqf b/addons/chemlights/functions/fnc_prepShield.sqf index 52623d6488..b4861da080 100644 --- a/addons/chemlights/functions/fnc_prepShield.sqf +++ b/addons/chemlights/functions/fnc_prepShield.sqf @@ -7,7 +7,7 @@ * 1: Activator Unit (player) * 2: Chemlight class, chemlight shield class * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/chemlights/stringtable.xml b/addons/chemlights/stringtable.xml index 20bba14951..cd3ee7c894 100644 --- a/addons/chemlights/stringtable.xml +++ b/addons/chemlights/stringtable.xml @@ -7,6 +7,10 @@ Świetliki Knicklichter 켐라이트 + Cyalumes + Luce chimica + 螢光棒 + 萤光棒 Prepare %1 @@ -14,27 +18,37 @@ Przygotuj %1 %1 vorbereiten %1 준비 + Prépare %1 + Prepara %1 + 使用%1 + 使用%1 %1<br/>Prepared - %1&lt;br/&gt; をつかった + %1<br/>をつかった %1<br/>Przygotowany %1<br/>vorbereitet %1<br/>준비됨 + %1<br/>prêt + %1 <br/> Preparata + %1<br/>已使用 + %1<br/>已使用 No inventory space Kein Platz im Inventar Sin espacio en inventario Brak miejsca w ekwipunku - Pas de place dans l'inventaire + Pas de place Nedostatek místa v inventáři Sem espaço no inventário - Non hai più spazio + Nessuno spazio nell'inventario Nincs több hely В инвентаре нет места インベントリに空きがありません 소지품 공간이 없음 + 已無存放空間 + 已无存放空间 [ACE] Chemlights @@ -42,6 +56,10 @@ [ACE] Świetliki [ACE] Knicklichter [ACE] 켐라이트 + [ACE] Cyalume + [ACE] Luci chimiche + [ACE] 螢光棒 + [ACE] 萤光棒 Chemlight (Orange) @@ -49,6 +67,10 @@ Świetlik (pomarańczowy) Knicklicht (orange) 켐라이트 (주황) + Cyalume (orange) + Luce chimica (Arancione) + 螢光棒 (橘色) + 萤光棒 (橘色) Orange Light @@ -56,13 +78,21 @@ Pomarańczowe światło Oranges Knicklicht 주황색 + Lum. orange + Luce Arancione + 橘色光 + 橘色光 Type: Light - Orange<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - オレンジ&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + 種類: 照明 - オレンジ<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - pomarańczowe<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - orange<br />Anzahl: 1<br />Benutzt in: Hand 종류:밝은 오렌지<br />수량: 1<br />사용처: 손 + Type: Lumière - orange<br />Nbre: 1<br /> À main + Tipo: Luce - Arancione<br/>Rimanenti: 1<br/>Usata in: Mano + 類型: 光 - 橘色<br />發數: 1<br />使用於: 手 + 类型: 光 - 橘色<br />发数: 1<br />使用于: 手 Chemlight (White) @@ -70,6 +100,10 @@ Świetlik (biały) Knicklicht (weiß) 켐라이트 (하양) + Cyalume (blanc) + Luce chimica (Bianca) + 螢光棒 (白色) + 萤光棒 (白色) White Light @@ -77,13 +111,21 @@ Białe światło Weißes Knicklicht 하얀색 + Lum. blanche + Luce Bianca + 白色光 + 白色光 Type: Light - White<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 白&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + 種類: 照明 - 白<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - białe<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - weiß<br />Anzahl: 1<br />Benutzt in: Hand 종류:하얀색<br />수량: 1<br />사용처: 손 + Type: Lumière - blanche<br />Nbre: 1<br /> À main + Tipo: Luce - Bianca<br/>Rimanenti: 1<br/>Usata in: Mano + 類型: 光 - 白色<br />發數: 1<br />使用於: 手 + 类型: 光 - 白色<br />发数: 1<br />使用于: 手 Chemlight (Hi Red) @@ -91,6 +133,10 @@ Świetlik (jaskrawy czerwony) Knicklicht (rot, hell) 켐라이트 (밝은 빨간색) + Cyalume (Hi rouge) + Luce chimica (Hi Rossa) + 螢光棒 (超亮紅色) + 萤光棒 (超亮红色) Red Hi Light @@ -98,13 +144,21 @@ Jaskrawe czerwone światło Helles, rotes Knicklicht 밝은 빨간색 + Lum. rouge haute intensité + Luce Hi Rossa + 超亮紅色光 + 超亮红色光 Type: Light - Red Hi (5 minute)<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 高輝度 赤 (5分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + 種類: 照明 - 高輝度 赤 (5分間)<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - jaskrawe czerwone (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - rot, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류: 밝은 빨간색 (5분)<br />수량: 1<br />사용처: 손 + Type: Lumière - rouge Hi (5 minutes)<br />Nbre: 1<br /> À main + Tipo: Luce - Rossa Hi (5 minuti)<br />Rimanenti: 1<br/>Usata in: Mano + 類型: 光 - 超亮紅色 (5分鐘)<br />發數: 1<br />使用於: 手 + 类型: 光 - 超亮红色 (5分钟)<br />发数: 1<br />使用于: 手 Chemlight (Hi Yellow) @@ -112,6 +166,10 @@ Świetlik (jaskrawy żółty) Knicklicht (gelb, hell) 켐라이트 (밝은 노란색) + Cyalume (Hi jaune) + Luce chimica (Hi Gialla) + 螢光棒 (超亮黃色) + 萤光棒 (超亮黄色) Yellow Hi Light @@ -119,13 +177,21 @@ Jaskrawe żółte światło Helles, gelbes Knicklicht 밝은 노란색 + Lum. jaune haute intensité + Luce Hi Gialla + 超亮黃色光 + 超亮黄色光 Type: Light - Yellow Hi (5 minute)<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 高輝度 黄 (5分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + 種類: 照明 - 高輝度 黄 (5分間)<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - jaskrawe żółte (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - gelb, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류:밝은 노란색 (5분)<br />수량: 1<br />사용처: Hand + Type: Lumière - Jaune Hi (5 minutes)Nbre: 1<br /> À main + Tipo: Luce - Gialla Hi (5 minuti)<br />Rimanenti: 1<br/>Usata in: Mano + 類型: 光 - 超亮黃色 (5分鐘)<br />發數: 1<br />使用於: 手 + 类型: 光 - 超亮黄色 (5分钟)<br />发数: 1<br />使用于: 手 Chemlight (Hi Orange) @@ -133,6 +199,10 @@ Świetlik (jaskrawy pomarańczowy) Knicklicht (orange, hell) 켐라이트 (밝은 주황색) + Cyalume (Hi orange) + Luce chimica (Hi Arancione) + 螢光棒 (超亮橘色) + 萤光棒 (超亮橘色) Orange Hi Light @@ -140,13 +210,21 @@ Jaskrawe pomarańczowe światło Helles, oranges Knicklicht 밝은 주황색 + Lum. orange haute intensité + Luce Hi Arancione + 超亮橘色光 + 超亮橘色光 Type: Light - Orange Hi (5 minute)<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 高輝度 オレンジ (5分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + 種類: 照明 - 高輝度 オレンジ (5分間)<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - jaskrawe pomarańczowe (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - orange, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류: 밝은 주황색 (5분)<br />수량: 1<br />사용처: 손 + Type: Lumière - orange Hi (5 minutes)<br />Nbre: 1<br /> À main + Tipo: Luce - Arancione Hi (5 minuti)<br />Rimanenti: 1<br/>Usata in: Mano + 類型: 光 - 超亮橘色 (5分鐘)<br />發數: 1<br />使用於: 手 + 类型: 光 - 超亮橘色 (5分钟)<br />发数: 1<br />使用于: 手 Chemlight (Hi White) @@ -154,6 +232,10 @@ Świetlik (jaskrawy biały) Knicklicht (weiß, hell) 켐라이트 (밝은 하얀색) + Cyalume (Hi blanc) + Luce chimica (Hi Bianca) + 螢光棒 (超亮白色) + 萤光棒 (超亮白色) White Hi Light @@ -161,13 +243,21 @@ Jaskrawe białe światło Helles, weißes Knicklicht 밝은 하얀색 + Lum. blanche haute intensité + Luce Hi Bianca + 超亮白色光 + 超亮白色光 Type: Light - White Hi (5 minute)<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 高輝度 白 (5分間)&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + 種類: 照明 - 高輝度 白 (5分間)<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - jaskrawe białe (5 minut)<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - weiß, hell (5 Minuten)<br />Anzahl: 1<br />Benutzt in: Hand 종류: 밝은 하얀색 (5분)<br />수량: 1<br />사용처: 손 + Type: Lumière - blanche Hi (5 minutes)<br />Nbre: 1<br /> À main + Tipo: Luce - Bianca Hi (5 minuti)<br />Rimanenti: 1<br/>Usata in: Mano + 類型: 光 - 超亮白色 (5分鐘)<br />發數: 1<br />使用於: 手 + 类型: 光 - 超亮白色 (5分钟)<br />发数: 1<br />使用于: 手 Chemlight (IR) @@ -175,6 +265,10 @@ Świetlik (podczerwony) Knicklicht (IR) 켐라이트 (적외선) + Cyalume (IR) + Luce chimica (IR) + 螢光棒 (紅外線) + 萤光棒 (红外线) IR Light @@ -182,13 +276,21 @@ Światło podczerwone IR-Knicklicht 적외선 켐라이트 + Lumière IR + Luce IR + 紅外線光 + 红外线光 Type: Light - Infrared<br />Rounds: 1<br />Used in: Hand - 種類: 照明 - 赤外線&lt;br /&gt;装填数: 1&lt;br /&gt;次で使用: 携帯 + 種類: 照明 - 赤外線<br />装填数: 1<br />次で使用: 携帯 Typ: Światło - podczerwone<br/>Pociski: 1<br/>Używany w: ręce Typ: Licht - infrarot<br />Anzahl: 1<br />Benutzt in: Hand 종류: 적외선<br />수량: 1<br />사용처: 손 + Type: Lumière - infrarouge<br />Nbre: 1<br /> À main + Tipo: Luce - Infrarossi<br />Usata in: Mano + 類型: 光 - 紅外線<br />發數: 1<br />使用於: 手 + 类型: 光 - 红外线<br />发数: 1<br />使用于: 手 Chemlight Shield (Empty) @@ -196,6 +298,10 @@ Osłona na świetlik (pusta) Knicklicht-Abschirmung (leer) 켐라이트 쉴드 (비어있음) + Étui cyalume (vide) + Scudo Luce chimica (Vuoto) + 螢光棒保護殼 (空) + 萤光棒保护壳 (空) Shield for chemlights. Combine with chemlight to prepare reading light. @@ -203,6 +309,10 @@ Osłona na świetliki. Połącz ją ze świetlikiem by stworzyć lampkę do czytania. Abschirmung für Knicklichter. Mit Knicklicht kombinieren, um Leselicht zu erhalten. 켐라이트를 위한 가림막입니다. 켐라이트와 같이 사용하여 읽을 때 씁니다. + Étui pour cyalume. Combiné avec un cyalume pour obtennir un lampe de lecture. + Scudo per luci chimiche. Combina con una luce chimica per una luce da lettura. + 螢光棒的保護殼. 與螢光棒結合後可充當閱讀燈. + 萤光棒的保护壳. 与萤光棒结合后可充当阅读灯. Chemlight Shield (Green) @@ -210,6 +320,10 @@ Osłona na świetlik (zielona) Knicklicht-Abschirmung (grün) 켐라이트 쉴드 (초록) + Étui cyalume (vert) + Scudo Luce Chimica (Verde) + 螢光棒保護殼 (綠色) + 萤光棒保护壳 (绿色) Green reading light. @@ -217,6 +331,10 @@ Zielona lampka. Grünes Leselicht. 초록빛 조명 + Lampe d'orientation verte. + Luce da lettura Verde. + 綠色閱讀燈. + 绿色阅读灯. Chemlight Shield (Red) @@ -224,6 +342,10 @@ Osłona na świetlik (czerwona) Knicklicht-Abschirmung (rot) 켐라이트 쉴드 (빨강) + Étui cyalume (rouge) + Scudo Luce Chimica (Rossa) + 螢光棒保護殼 (紅色) + 萤光棒保护壳 (红色) Red reading light. @@ -231,6 +353,10 @@ Czerwona lampka. Rotes Leselicht. 빨간색 조명 + Lampe d'orientation rouge. + Luce da lettura Rossa. + 紅色閱讀燈. + 红色阅读灯. Chemlight Shield (Blue) @@ -238,6 +364,10 @@ Osłona na świetlik (niebieska) Knicklicht-Abschirmung (blau) 켐라이트 쉴드 (파랑) + Étui cyalume (bleu) + Scudo Luce Chimica (Blu) + 螢光棒保護殼 (藍色) + 萤光棒保护壳 (蓝色) Blue reading light. @@ -245,6 +375,10 @@ Niebieska lampka. Blaues Leselicht. 파란색 조명 + Lampe d'orientation bleue. + Luce da lettura Blu. + 藍色閱讀燈. + 蓝色阅读灯. Chemlight Shield (Yellow) @@ -252,6 +386,10 @@ Osłona na świetlik (żółta) Knicklicht-Abschirmung (gelb) 켐라이트 쉴드 (노랑) + Étui cyalume (jaune) + Scudo Luce Chimica (Gialla) + 螢光棒保護殼 (黃色) + 萤光棒保护壳 (黄色) Yellow reading light. @@ -259,6 +397,10 @@ Żółta lampka. Gelbes Leselicht. 노란색 조명 + Lampe d'orientation jaune. + Luce da lettura Gialla. + 黃色閱讀燈. + 黄色阅读灯. Chemlight Shield (Orange) @@ -266,6 +408,10 @@ Osłona na świetlik (pomarańczowa) Knicklicht-Abschirmung (orange) 켐라이트 쉴드 (주황) + Étui cyalume (orange) + Scudo Luce Chimica (Arancione) + 螢光棒保護殼 (橘色) + 萤光棒保护壳 (橘色) Orange reading light. @@ -273,6 +419,10 @@ Pomarańczowa lampka. Oranges Leselicht. 주황색 조명 + Lampe d'orientation orange. + Luce da lettura Arancione. + 橘色閱讀燈. + 橘色阅读灯. Chemlight Shield (White) @@ -280,6 +430,10 @@ Osłona na świetlik (biała) Knicklicht-Abschirmung (weiß) 켐라이트 쉴드 (하양) + Étui cyalume (blanc) + Scudo Luce Chimica (Bianca) + 螢光棒保護殼 (白色) + 萤光棒保护壳 (白色) White reading light. @@ -287,6 +441,10 @@ Biała lampka. Weißes Leselicht. 주황색 조명 + Lampe d'orientation blanche. + Luce da lettura Bianca. + 白色閱讀燈. + 白色阅读灯. diff --git a/addons/common/CfgLocationTypes.hpp b/addons/common/CfgLocationTypes.hpp index 15b56c120c..163c1e5a88 100644 --- a/addons/common/CfgLocationTypes.hpp +++ b/addons/common/CfgLocationTypes.hpp @@ -4,7 +4,7 @@ class CfgLocationTypes { class ACE_HashLocation { color[] = {0,0,0,0}; - drawStyle = "bananas"; + drawStyle = "WARNING-ACE_HashLocation_is_deprecated"; // Replaced by CBA_fnc_createNamespace font = "RobotoCondensed"; importance = 5; name = "HashLocation"; diff --git a/addons/common/XEH_PREP.hpp b/addons/common/XEH_PREP.hpp index 3f6f264699..5720d31873 100644 --- a/addons/common/XEH_PREP.hpp +++ b/addons/common/XEH_PREP.hpp @@ -13,6 +13,7 @@ PREP(ASLToPosition); PREP(binarizeNumber); PREP(blurScreen); PREP(cachedCall); +PREP(canDig); PREP(canGetInPosition); PREP(canInteractWith); PREP(changeProjectileDirection); @@ -36,6 +37,7 @@ PREP(displayTextPicture); PREP(displayTextStructured); PREP(doAnimation); PREP(doGesture); +PREP(dummy); PREP(dropBackpack); PREP(endRadioTransmission); PREP(eraseCache); diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf index 68920a7a5c..51baec47f9 100644 --- a/addons/common/XEH_postInit.sqf +++ b/addons/common/XEH_postInit.sqf @@ -133,6 +133,7 @@ if (isServer) then { if (isServer) then { [QGVAR(hideObjectGlobal), {(_this select 0) hideObjectGlobal (_this select 1)}] call CBA_fnc_addEventHandler; [QGVAR(enableSimulationGlobal), {(_this select 0) enableSimulationGlobal (_this select 1)}] call CBA_fnc_addEventHandler; + [QGVAR(setShotParents), {(_this select 0) setShotParents [_this select 1, _this select 2]}] call CBA_fnc_addEventHandler; ["ace_setOwner", {(_this select 0) setOwner (_this select 1)}] call CBA_fnc_addEventHandler; [QGVAR(serverLog), FUNC(serverLog)] call CBA_fnc_addEventHandler; }; @@ -282,11 +283,11 @@ enableCamShake true; params ["_newPlayer","_oldPlayer"]; if (alive _newPlayer) then { - [_newPlayer] call FUNC(setName); + [FUNC(setName), [_newPlayer]] call CBA_fnc_execNextFrame; }; if (alive _oldPlayer) then { - [_oldPlayer] call FUNC(setName); + [FUNC(setName), [_oldPlayer]] call CBA_fnc_execNextFrame; }; }] call CBA_fnc_addPlayerEventHandler; @@ -295,18 +296,10 @@ enableCamShake true; // Set up numerous eventhanders for player controlled units ////////////////////////////////////////////////// -// It is possible that CBA_fnc_addPlayerEventHandler has allready been called and run -// We will NOT get any events for the initial state, so manually set ACE_player -if (!isNull (missionNamespace getVariable ["cba_events_oldUnit", objNull])) then { - // INFO("CBA_fnc_addPlayerEventHandler has already run - manually setting ace_player"); //ToDo CBA 3.1 - diag_log text "[ACE-Common - CBA_fnc_addPlayerEventHandler has already run - manually setting ace_player"; - ACE_player = cba_events_oldUnit; -}; - -// "playerChanged" event +TRACE_1("adding unit playerEH to set ace_player",isNull cba_events_oldUnit); ["unit", { ACE_player = (_this select 0); -}] call CBA_fnc_addPlayerEventHandler; +}, true] call CBA_fnc_addPlayerEventHandler; GVAR(OldIsCamera) = false; @@ -380,7 +373,9 @@ GVAR(isReloading) = false; private _weapon = currentWeapon ACE_player; if (_weapon != "") then { - private _gesture = getText (configfile >> "CfgWeapons" >> _weapon >> "reloadAction"); + private _muzzle = currentMuzzle ACE_player; + private _wpnConfig = configFile >> "CfgWeapons" >> _weapon; + private _gesture = getText ([_wpnConfig >> _muzzle, _wpnConfig] select (_weapon isEqualTo _muzzle) >> "reloadAction"); if (_gesture == "") exitWith {}; //Ignore weapons with no reload gesture (binoculars) private _isLauncher = _weapon isKindOf ["Launcher", configFile >> "CfgWeapons"]; private _config = ["CfgGesturesMale", "CfgMovesMaleSdr"] select _isLauncher; @@ -465,8 +460,8 @@ GVAR(deviceKeyCurrentIndex) = -1; ["ACE3 Equipment", QGVAR(cycleDevice), (localize "STR_ACE_Common_cycleHandheldDevices"), { [1] call FUNC(deviceKeyFindValidIndex); if (GVAR(deviceKeyCurrentIndex) == -1) exitWith {false}; - _displayName = ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 0); - _iconImage = ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 1); + private _displayName = ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 0); + private _iconImage = ((GVAR(deviceKeyHandlingArray) select GVAR(deviceKeyCurrentIndex)) select 1); [_displayName, _iconImage] call FUNC(displayTextPicture); true }, diff --git a/addons/common/functions/fnc_ASLToPosition.sqf b/addons/common/functions/fnc_ASLToPosition.sqf index a5afb1db75..0f745cd2bb 100644 --- a/addons/common/functions/fnc_ASLToPosition.sqf +++ b/addons/common/functions/fnc_ASLToPosition.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [1, 2, 3] call ace_common_fnc_ASLToPosition + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc__handleRequestAllSyncedEvents.sqf b/addons/common/functions/fnc__handleRequestAllSyncedEvents.sqf index 763874de82..e41436078c 100644 --- a/addons/common/functions/fnc__handleRequestAllSyncedEvents.sqf +++ b/addons/common/functions/fnc__handleRequestAllSyncedEvents.sqf @@ -8,6 +8,9 @@ * Return Value: * Event is successed * + * Example: + * [bob] call ace_common_fnc__handleRequestAllSyncedEvents + * * Public: No */ #include "script_component.hpp" @@ -15,6 +18,7 @@ params ["_client"]; [GVAR(syncedEvents), { + //IGNORE_PRIVATE_WARNING ["_key", "_value"]; _value params ["", "_eventLog"]; ["ACEs", [_key, _eventLog], _client] call CBA_fnc_targetEvent; diff --git a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf index f3fd2e241d..61711eb0b0 100644 --- a/addons/common/functions/fnc__handleRequestSyncedEvent.sqf +++ b/addons/common/functions/fnc__handleRequestSyncedEvent.sqf @@ -2,17 +2,21 @@ * Author: jaynus * Receives either requests for synchronization from clients, or the synchronization data from the server. * - * Arguments [Client] : + * Arguments [Client]: * 0: eventName * 1: eventLog * - * Arguments [Server] : + * Arguments [Server]: * 0: eventName * 1: client * * Return Value: * Event is successed * + * Example: + * ["name", [LOG]] call ace_common_fnc__handleRequestSyncedEvent //Client + * ["name", bob] call ace_common_fnc__handleRequestSyncedEvent//Server + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc__handleSyncedEvent.sqf b/addons/common/functions/fnc__handleSyncedEvent.sqf index d773e424fd..f59c8a6535 100644 --- a/addons/common/functions/fnc__handleSyncedEvent.sqf +++ b/addons/common/functions/fnc__handleSyncedEvent.sqf @@ -2,7 +2,7 @@ * Author: jaynus * Handles synced events being received. Server will log them, and server/client will execute them. * - * Arguments [Client] : + * Arguments: [Client] * 0: eventName * 1: arguments * 2: ttl @@ -10,6 +10,9 @@ * Return Value: * Boolean of success * + * Example: + * [bob] call ace_common_fnc__handleSyncedEvent + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_addActionEventHandler.sqf b/addons/common/functions/fnc_addActionEventHandler.sqf index 56d2de16db..18d337225f 100644 --- a/addons/common/functions/fnc_addActionEventHandler.sqf +++ b/addons/common/functions/fnc_addActionEventHandler.sqf @@ -11,6 +11,9 @@ * Return Value: * ID of the action (used to remove it later) * + * Example: + * [bob, "DefaultAction", "condition", "execute"] call ace_common_fnc_addActionEventHandler + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_addActionMenuEventHandler.sqf b/addons/common/functions/fnc_addActionMenuEventHandler.sqf index c86cf45f17..94028b9aea 100644 --- a/addons/common/functions/fnc_addActionMenuEventHandler.sqf +++ b/addons/common/functions/fnc_addActionMenuEventHandler.sqf @@ -15,6 +15,9 @@ * Return Value: * ID of the action (used to remove it later) * + * Example: + * [bob, "Title", "DefaultAction", "condition", "execute", "conditionmenu", "executemenu", 5] call ace_common_fnc_addActionMenuEventHandler + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_addCanInteractWithCondition.sqf b/addons/common/functions/fnc_addCanInteractWithCondition.sqf index 294dac1c72..7c2bc3591b 100644 --- a/addons/common/functions/fnc_addCanInteractWithCondition.sqf +++ b/addons/common/functions/fnc_addCanInteractWithCondition.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * ["ID", {Condition}] call ace_common_fnc_addCanInteractWithCondition + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_addLineToDebugDraw.sqf b/addons/common/functions/fnc_addLineToDebugDraw.sqf index 5fd7f028ba..46f015c5e0 100644 --- a/addons/common/functions/fnc_addLineToDebugDraw.sqf +++ b/addons/common/functions/fnc_addLineToDebugDraw.sqf @@ -8,10 +8,10 @@ * 2: Color * * Return Value: - * Nothing + * None * * Example: - * [[0,0,0], [1,1,0], [1,0,0,1]]] call ace_common_fnc_addLineToDebugDraw; + * [[0,0,0], [1,1,0], [1,0,0,1]] call ace_common_fnc_addLineToDebugDraw; * * Public: No */ diff --git a/addons/common/functions/fnc_addMapMarkerCreatedEventHandler.sqf b/addons/common/functions/fnc_addMapMarkerCreatedEventHandler.sqf index 2201426e48..1b82b9fedf 100644 --- a/addons/common/functions/fnc_addMapMarkerCreatedEventHandler.sqf +++ b/addons/common/functions/fnc_addMapMarkerCreatedEventHandler.sqf @@ -8,6 +8,9 @@ * Return Value: * ID of the event script (used to remove it later). * + * Example: + * ["bob"] call ace_common_fnc_addMapMarkerCreatedEventHandler + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_addSetting.sqf b/addons/common/functions/fnc_addSetting.sqf index c4b97ddcce..0e5d391b1a 100644 --- a/addons/common/functions/fnc_addSetting.sqf +++ b/addons/common/functions/fnc_addSetting.sqf @@ -16,6 +16,9 @@ * Return Value: * None * + * Example: + * ["bob", "type", true, "bob", "person", [1,2,3], true, 5] call ace_common_fnc_addSettings + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_addToInventory.sqf b/addons/common/functions/fnc_addToInventory.sqf index 187a218382..19aea9bcdd 100644 --- a/addons/common/functions/fnc_addToInventory.sqf +++ b/addons/common/functions/fnc_addToInventory.sqf @@ -12,6 +12,9 @@ * 0: Added to player * 1: weaponholder * + * Example: + * [bob, "classname", "", 5] call ace_common_fnc_addToInventory + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_ambientBrightness.sqf b/addons/common/functions/fnc_ambientBrightness.sqf index 4ec2840e47..276d7aa5c3 100644 --- a/addons/common/functions/fnc_ambientBrightness.sqf +++ b/addons/common/functions/fnc_ambientBrightness.sqf @@ -8,6 +8,9 @@ * Return Value: * Ambient brightness * + * Example: + * [] call ace_common_fnc_ambientBrightness + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_arithmeticGetResult.sqf b/addons/common/functions/fnc_arithmeticGetResult.sqf index d3fb67b1af..3dae9b23a0 100644 --- a/addons/common/functions/fnc_arithmeticGetResult.sqf +++ b/addons/common/functions/fnc_arithmeticGetResult.sqf @@ -8,7 +8,7 @@ * 2: Operation (sum, product, min, max, avg) * * Return Value: - * + * Value * * Example: * [ace_player, "ace_aimCoefficents", "product"] call ace_common_fnc_arithmeticGetResult diff --git a/addons/common/functions/fnc_arithmeticSetSource.sqf b/addons/common/functions/fnc_arithmeticSetSource.sqf index 1cb156bcc3..a11cb29527 100644 --- a/addons/common/functions/fnc_arithmeticSetSource.sqf +++ b/addons/common/functions/fnc_arithmeticSetSource.sqf @@ -9,7 +9,7 @@ * 3: Code that returns a number (can access var _namespace) [use {} to remove] * * Return Value: - * Nothing + * None * * Example: * [missionNameSpace, "ace_hearing", "myMission", {0.5}] call ace_common_fnc_arithmeticSetSource diff --git a/addons/common/functions/fnc_assignedItemFix.sqf b/addons/common/functions/fnc_assignedItemFix.sqf index 9a4ac5bf47..f7fe02f30c 100644 --- a/addons/common/functions/fnc_assignedItemFix.sqf +++ b/addons/common/functions/fnc_assignedItemFix.sqf @@ -8,7 +8,10 @@ * Return Value: * None * - * Public : No + * Example: + * call ace_common_fnc_assignedItemFix + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_binarizeNumber.sqf b/addons/common/functions/fnc_binarizeNumber.sqf index 0945afa770..82494e39d6 100644 --- a/addons/common/functions/fnc_binarizeNumber.sqf +++ b/addons/common/functions/fnc_binarizeNumber.sqf @@ -9,6 +9,9 @@ * Return Value: * Booleans * + * Example: + * [5, 5] call ace_common_fnc_binarizeNumber + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_blurScreen.sqf b/addons/common/functions/fnc_blurScreen.sqf index 4a6c0d3cb4..0995c957d9 100644 --- a/addons/common/functions/fnc_blurScreen.sqf +++ b/addons/common/functions/fnc_blurScreen.sqf @@ -4,7 +4,7 @@ * * Arguments: * 0: ID - * 1: Show? + * 1: Show? * * Return Value: * None diff --git a/addons/common/functions/fnc_cachedCall.sqf b/addons/common/functions/fnc_cachedCall.sqf index c0b858e58a..8636ffff84 100644 --- a/addons/common/functions/fnc_cachedCall.sqf +++ b/addons/common/functions/fnc_cachedCall.sqf @@ -13,6 +13,9 @@ * Return Value: * Result of the function * + * Example: + * [[array]], {dothings}, NAMESPACE, "UID", 5, "clear"] call ace_common_fnc_cachedCall + * * Public: No */ #include "script_component.hpp" @@ -33,11 +36,12 @@ if ((_namespace getVariable [_uid, [-99999]]) select 0 < diag_tickTime) then { missionNamespace setVariable [_varName, _cacheList]; [_event, { - // _eventName is defined on the function that calls the event #ifdef DEBUG_MODE_FULL INFO_1("Clear cached variables on event: %1",_eventName); #endif // Get the list of caches to clear + //IGNORE_PRIVATE_WARNING ["_eventName"]; + // _eventName is defined on the function that calls the event private _varName = format [QGVAR(clearCache_%1), _eventName]; private _cacheList = missionNamespace getVariable [_varName, []]; // Erase all the cached results diff --git a/addons/common/functions/fnc_canDig.sqf b/addons/common/functions/fnc_canDig.sqf new file mode 100644 index 0000000000..b3cdfd8405 --- /dev/null +++ b/addons/common/functions/fnc_canDig.sqf @@ -0,0 +1,31 @@ +/* + * Author: Ruthberg, commy2 + * Checks if the player can dig on the surface below (enough dust). + * + * Arguments: + * 0: Unit + * + * Return Value: + * Can Dig + * + * Example: + * [ACE_player] call ace_common_fnc_canDig + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unit"]; + +private _posASL = getPosASL _unit; + +if ((getPosATL _unit) select 2 > 0.05 || // Walking on objects, such as buildings, pavements, etc. + {surfaceIsWater _posASL} // posATL in low water (not as low to allow awalking) is negative +) exitWith {false}; + +private _surfaceClass = (surfaceType _posASL) select [1]; +private _surfaceType = getText (configFile >> "CfgSurfaces" >> _surfaceClass >> "soundEnviron"); +private _surfaceDust = getNumber (configFile >> "CfgSurfaces" >> _surfaceClass >> "dust"); +TRACE_2("Surface",_surfaceType,_surfaceDust); + +!(_surfaceType in DIG_SURFACE_BLACKLIST) && {_surfaceDust >= 0.1} diff --git a/addons/common/functions/fnc_canGetInPosition.sqf b/addons/common/functions/fnc_canGetInPosition.sqf index c470337d6a..c0379c861a 100644 --- a/addons/common/functions/fnc_canGetInPosition.sqf +++ b/addons/common/functions/fnc_canGetInPosition.sqf @@ -7,12 +7,14 @@ * 1: The vehicle to be entered * 2: Position. Can be "Driver", "Pilot", "Gunner", "Commander", "Copilot", "Turret", "FFV", "Codriver" or "Cargo" * 3: Check current distance to vehicles memory point? (default: false) - * 4: Index. "Turret", "FFV", "Codriver" and "Cargo" support this optional parameter. Which position should be taken. - * Note: This index is diffrent from Armas "cargoIndex". (default: next free index) + * 4: Index. "Turret", "FFV", "Codriver" and "Cargo" support this optional parameter. Which position should be taken. Note: This index is different from Armas "cargoIndex". (default: next free index) * * Return Value: * None * + * Example: + * [bob, car, "Pilot", true, "Turret"] call ace_common_fnc_canGetInPosition + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_canInteractWith.sqf b/addons/common/functions/fnc_canInteractWith.sqf index 7603452965..a94ba6d9d1 100644 --- a/addons/common/functions/fnc_canInteractWith.sqf +++ b/addons/common/functions/fnc_canInteractWith.sqf @@ -8,7 +8,10 @@ * 2: Exceptions. What general conditions are to skip? (default: []) * * Return Value: - * Unit can interact? + * Unit can interact? + * + * Example: + * [bob, target, []] call ace_common_fnc_canInteractWith * * Public: Yes */ diff --git a/addons/common/functions/fnc_changeProjectileDirection.sqf b/addons/common/functions/fnc_changeProjectileDirection.sqf index 89a8988306..6e42ee332a 100644 --- a/addons/common/functions/fnc_changeProjectileDirection.sqf +++ b/addons/common/functions/fnc_changeProjectileDirection.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * [bullet, 2, 5, 3] call ace_common_fnc_changeProjectileDirection + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_checkFiles.sqf b/addons/common/functions/fnc_checkFiles.sqf index a3ad83459b..480cdab9a9 100644 --- a/addons/common/functions/fnc_checkFiles.sqf +++ b/addons/common/functions/fnc_checkFiles.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * call ace_common_fnc_checkFiles + * * Public: No */ #include "script_component.hpp" @@ -41,18 +44,29 @@ private _addons = "true" configClasses (configFile >> "CfgPatches");// _addons = _addons apply {toLower configName _x};// _addons = _addons select {_x find "ace_" == 0}; +private _oldCompats = []; { if (getText (configFile >> "CfgPatches" >> _x >> "versionStr") != _version) then { private _errorMsg = format ["File %1.pbo is outdated.", _x]; ERROR(_errorMsg); - if (hasInterface) then { - ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); + if ((_x select [0, 10]) != "ace_compat") then { + if (hasInterface) then { + ["[ACE] ERROR", _errorMsg, {findDisplay 46 closeDisplay 0}] call FUNC(errorMessage); + }; + } else { + _oldCompats pushBack _x; // Don't block game if it's just an old compat pbo }; }; false } count _addons; +if (!(_oldCompats isEqualTo [])) then { + [{ + // Lasts for ~10 seconds + ERROR_WITH_TITLE_1("The following ACE compatiblity PBOs are outdated", "%1", _this); + }, _oldCompats, 1] call CBA_fnc_waitAndExecute; +}; /////////////// // check dlls @@ -111,7 +125,7 @@ if (isMultiplayer) then { _addons = _addons - GVAR(ServerAddons); if !(_addons isEqualTo []) then { - _errorMsg = format ["Client/Server Addon Mismatch. Client has extra addons: %1.",_addons]; + private _errorMsg = format ["Client/Server Addon Mismatch. Client has extra addons: %1.",_addons]; ERROR(_errorMsg); diff --git a/addons/common/functions/fnc_checkPBOs.sqf b/addons/common/functions/fnc_checkPBOs.sqf index 886ae3b5ca..2504d73dc1 100644 --- a/addons/common/functions/fnc_checkPBOs.sqf +++ b/addons/common/functions/fnc_checkPBOs.sqf @@ -14,6 +14,9 @@ * Return Value: * None * + * Example: + * [0, false, ""] call ace_common_fnc_checkPBOs + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_claim.sqf b/addons/common/functions/fnc_claim.sqf index b3fe3d5544..79237d725b 100644 --- a/addons/common/functions/fnc_claim.sqf +++ b/addons/common/functions/fnc_claim.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [bob, flag, true] call ace_common_fnc_claim + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_codeToString.sqf b/addons/common/functions/fnc_codeToString.sqf index 62e4cb5698..ff4597f7bb 100644 --- a/addons/common/functions/fnc_codeToString.sqf +++ b/addons/common/functions/fnc_codeToString.sqf @@ -8,6 +8,9 @@ * Return Value: * Code * + * Example: + * ["bob"] call ace_common_fnc_codeToString + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_createOrthonormalReference.sqf b/addons/common/functions/fnc_createOrthonormalReference.sqf index e45bf269aa..cb443de15b 100644 --- a/addons/common/functions/fnc_createOrthonormalReference.sqf +++ b/addons/common/functions/fnc_createOrthonormalReference.sqf @@ -2,7 +2,7 @@ * Author: esteldunedain * Returns a orthonormal system of reference aligned with the supplied vector * - * Arguments: + * Arguments: * Vector to align the coordinate system with * * Return Value: @@ -10,6 +10,9 @@ * 1: Normalized Cross Product Vector * 2: Vector Cross Product * + * Example: + * [[0,0,0]] call ace_common_fnc_createOrthonormalReference + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_currentChannel.sqf b/addons/common/functions/fnc_currentChannel.sqf index a78e2b0204..0844ebd881 100644 --- a/addons/common/functions/fnc_currentChannel.sqf +++ b/addons/common/functions/fnc_currentChannel.sqf @@ -8,6 +8,9 @@ * Return Value: * The current channel ("group", "side", "global", "command", "vehicle", "direct", "custom_X") * + * Example: + * [] call ace_common_fnc_currentChannel + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_debug.sqf b/addons/common/functions/fnc_debug.sqf index 019ce2abff..a825c82523 100644 --- a/addons/common/functions/fnc_debug.sqf +++ b/addons/common/functions/fnc_debug.sqf @@ -9,6 +9,9 @@ * Return Value: * Message is Printed * + * Example: + * [bob, 2] call ace_common_fnc_debug + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_debugModule.sqf b/addons/common/functions/fnc_debugModule.sqf index 125887183e..c4fa7b8547 100644 --- a/addons/common/functions/fnc_debugModule.sqf +++ b/addons/common/functions/fnc_debugModule.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * call ace_common_fnc_debugModule + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_defineVariable.sqf b/addons/common/functions/fnc_defineVariable.sqf index 35a1e96d31..7c1a694aeb 100644 --- a/addons/common/functions/fnc_defineVariable.sqf +++ b/addons/common/functions/fnc_defineVariable.sqf @@ -13,6 +13,9 @@ * Return Value: * None * + * Example: + * ["bob", 1, true, "category", 1, true] call ace_common_fnc_defineVariable + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_deviceKeyFindValidIndex.sqf b/addons/common/functions/fnc_deviceKeyFindValidIndex.sqf index 02135e59db..aeacf940cc 100644 --- a/addons/common/functions/fnc_deviceKeyFindValidIndex.sqf +++ b/addons/common/functions/fnc_deviceKeyFindValidIndex.sqf @@ -3,7 +3,7 @@ * Finds next valid index for the device array. * * Arguments: - * 0: Offset from currentIndex (use 1 to find next valid after current) or a displayName string (default: 0) + * 0: Offset from currentIndex (use 1 to find next valid after current) or a displayName string (default: 0) * * Return Value: * The new index (-1 if no valid) @@ -28,7 +28,7 @@ if (_searchOffsetOrName isEqualType "") then { } forEach GVAR(deviceKeyHandlingArray); } else { if (count GVAR(deviceKeyHandlingArray) > 0) then { - _baseIndex = [GVAR(deviceKeyCurrentIndex) + _searchOffsetOrName, 0] select (GVAR(deviceKeyCurrentIndex) == -1); + private _baseIndex = [GVAR(deviceKeyCurrentIndex) + _searchOffsetOrName, 0] select (GVAR(deviceKeyCurrentIndex) == -1); for "_offset" from _baseIndex to (count GVAR(deviceKeyHandlingArray) - 1 + _baseIndex) do { private _realIndex = _offset % (count GVAR(deviceKeyHandlingArray)); diff --git a/addons/common/functions/fnc_disableUserInput.sqf b/addons/common/functions/fnc_disableUserInput.sqf index 8e28edc5f0..729da9b504 100644 --- a/addons/common/functions/fnc_disableUserInput.sqf +++ b/addons/common/functions/fnc_disableUserInput.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [true] call ace_common_fnc_disableUserInput + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_displayText.sqf b/addons/common/functions/fnc_displayText.sqf index ee22f6949a..fdd1f960d5 100644 --- a/addons/common/functions/fnc_displayText.sqf +++ b/addons/common/functions/fnc_displayText.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * ["Message", true, 5, 2] call ace_common_fnc_displayText + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_displayTextStructured.sqf b/addons/common/functions/fnc_displayTextStructured.sqf index e952fce9a4..ee2c6a9f3f 100644 --- a/addons/common/functions/fnc_displayTextStructured.sqf +++ b/addons/common/functions/fnc_displayTextStructured.sqf @@ -1,23 +1,25 @@ /* - * Author: commy2, Glowbal + * Author: commy2, Glowbal, GitHawk * Display a structured text. * * Arguments: * 0: Text * 1: Size of the textbox (default: 1.5) * 2: Target Unit. Will only display if target is the player controlled object (default: ACE_player) + * 3: Custom Width (default: 10) * * Return Value: * None * * Example: - * + * [["Test: %1", 123], 1.5] call ace_common_fnc_displayTextStructured + * ["wow", 1, ace_player, 3] call ace_common_fnc_displayTextStructured * * Public: Yes */ #include "script_component.hpp" -params [["_text", ""], ["_size", 1.5, [0]], ["_target", ACE_player, [objNull]]]; +params [["_text", ""], ["_size", 1.5, [0]], ["_target", ACE_player, [objNull]], ["_width", 10, [0]]]; if (_target != ACE_player) exitWith {}; @@ -55,9 +57,9 @@ private _wPos = profilenamespace getVariable ["IGUI_GRID_ACE_displayText_W", (10 private _hPos = profilenamespace getVariable ["IGUI_GRID_ACE_displayText_H", (2 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))]; */ -private _xPos = ((safezoneX + safezoneW) - (10 *(((safezoneW / safezoneH) min 1.2) / 40)) - 2.9 *(((safezoneW / safezoneH) min 1.2) / 40)); +private _xPos = ((safezoneX + safezoneW) - (_width *(((safezoneW / safezoneH) min 1.2) / 40)) - 2.9 *(((safezoneW / safezoneH) min 1.2) / 40)); private _yPos = safeZoneY + 0.175 * safezoneH; -private _wPos = (10 *(((safezoneW / safezoneH) min 1.2) / 40)); +private _wPos = (_width *(((safezoneW / safezoneH) min 1.2) / 40)); private _hPos = (2 *((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)); // Zeus Interface Open and Display would be under the "CREATE" list diff --git a/addons/common/functions/fnc_dropBackpack.sqf b/addons/common/functions/fnc_dropBackpack.sqf index b0d77af7d5..dcbb9a3f70 100644 --- a/addons/common/functions/fnc_dropBackpack.sqf +++ b/addons/common/functions/fnc_dropBackpack.sqf @@ -8,6 +8,9 @@ * Return Value: * Ground wepaon holder with backpack * + * Example: + * [unit] call ace_common_fnc_dropBackpack + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_dummy.sqf b/addons/common/functions/fnc_dummy.sqf new file mode 100644 index 0000000000..a70fed35c0 --- /dev/null +++ b/addons/common/functions/fnc_dummy.sqf @@ -0,0 +1,12 @@ +/* + * Author: SilentSpike + * A dummy function which does nothing. Can be useful. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Public: No + */ diff --git a/addons/common/functions/fnc_dumpPerformanceCounters.sqf b/addons/common/functions/fnc_dumpPerformanceCounters.sqf index ec6f225ce4..a6bcc1d29c 100644 --- a/addons/common/functions/fnc_dumpPerformanceCounters.sqf +++ b/addons/common/functions/fnc_dumpPerformanceCounters.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * call ace_common_fnc_dumpPerformanceCounters + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_endRadioTransmission.sqf b/addons/common/functions/fnc_endRadioTransmission.sqf index 4597426d67..ead1ec29c6 100644 --- a/addons/common/functions/fnc_endRadioTransmission.sqf +++ b/addons/common/functions/fnc_endRadioTransmission.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * call ace_common_fnc_endRadioTransmission + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_eraseCache.sqf b/addons/common/functions/fnc_eraseCache.sqf index ae988ced28..0bcfab1dd4 100644 --- a/addons/common/functions/fnc_eraseCache.sqf +++ b/addons/common/functions/fnc_eraseCache.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [NAMESPACE, "UID"] call ace_common_fnc_eraseCache + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_errorMessage.sqf b/addons/common/functions/fnc_errorMessage.sqf index 88e0a3b90f..8ccd7c22fb 100644 --- a/addons/common/functions/fnc_errorMessage.sqf +++ b/addons/common/functions/fnc_errorMessage.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * call ace_common_fnc_errorMessage + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_firedEH.sqf b/addons/common/functions/fnc_firedEH.sqf index 29e58a4c6a..cbf49f626b 100644 --- a/addons/common/functions/fnc_firedEH.sqf +++ b/addons/common/functions/fnc_firedEH.sqf @@ -14,6 +14,9 @@ * Return Value: * None * + * Example: + * [bob, "gun", "muzzle", "single", "ammo", "magazine", "bullet"] call ace_common_fnc_firedEH + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_fixCollision.sqf b/addons/common/functions/fnc_fixCollision.sqf index 3b3b16a9f9..569d7d1e87 100644 --- a/addons/common/functions/fnc_fixCollision.sqf +++ b/addons/common/functions/fnc_fixCollision.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_common_fnc_fixCollision + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_fixFloating.sqf b/addons/common/functions/fnc_fixFloating.sqf index 5a00aa3863..dc7608f9fe 100644 --- a/addons/common/functions/fnc_fixFloating.sqf +++ b/addons/common/functions/fnc_fixFloating.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [object] call ace_common_fnc_fixFloating + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_fixLoweredRifleAnimation.sqf b/addons/common/functions/fnc_fixLoweredRifleAnimation.sqf index 9e230b00ad..f804b087d2 100644 --- a/addons/common/functions/fnc_fixLoweredRifleAnimation.sqf +++ b/addons/common/functions/fnc_fixLoweredRifleAnimation.sqf @@ -6,7 +6,7 @@ * 0: Unit * * Return Value: - * Nothing + * None * * Example: * [ACE_player] call ace_common_fnc_fixLoweredRifleAnimation diff --git a/addons/common/functions/fnc_fixPosition.sqf b/addons/common/functions/fnc_fixPosition.sqf index 883a502c4e..fb14141fe2 100644 --- a/addons/common/functions/fnc_fixPosition.sqf +++ b/addons/common/functions/fnc_fixPosition.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_common_fnc_fixPosition + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getAllDefinedSetVariables.sqf b/addons/common/functions/fnc_getAllDefinedSetVariables.sqf index a5d973767f..fd94ae8024 100644 --- a/addons/common/functions/fnc_getAllDefinedSetVariables.sqf +++ b/addons/common/functions/fnc_getAllDefinedSetVariables.sqf @@ -14,6 +14,9 @@ * 3: publicFlag * 4: peristentFlag * + * Example: + * [bob, ""] call ace_common_fnc_getAllDefinedSetVariables + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getChildren.sqf b/addons/common/functions/fnc_getChildren.sqf index f2930b015d..56bc5d779c 100644 --- a/addons/common/functions/fnc_getChildren.sqf +++ b/addons/common/functions/fnc_getChildren.sqf @@ -7,6 +7,9 @@ * * Return Value: * Parent Entry Class Children + + * Example: + * [bob] call ace_common_fnc_getChildren * * Public: Yes */ diff --git a/addons/common/functions/fnc_getConfigCommander.sqf b/addons/common/functions/fnc_getConfigCommander.sqf index d4a53905b8..45d7d6389c 100644 --- a/addons/common/functions/fnc_getConfigCommander.sqf +++ b/addons/common/functions/fnc_getConfigCommander.sqf @@ -7,6 +7,9 @@ * * Return Value: * Commander config + + * Example: + * [car] call ace_common_fnc_getConfigCommander * * Public: Yes */ diff --git a/addons/common/functions/fnc_getConfigGunner.sqf b/addons/common/functions/fnc_getConfigGunner.sqf index abbbd5f014..c14eb85ed5 100644 --- a/addons/common/functions/fnc_getConfigGunner.sqf +++ b/addons/common/functions/fnc_getConfigGunner.sqf @@ -8,6 +8,9 @@ * Return Value: * Gunner config * + * Example: + * [car] call ace_common_fnc_getConfigGunner + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getDefinedVariable.sqf b/addons/common/functions/fnc_getDefinedVariable.sqf index 32a75edb5e..98267ab18f 100644 --- a/addons/common/functions/fnc_getDefinedVariable.sqf +++ b/addons/common/functions/fnc_getDefinedVariable.sqf @@ -9,6 +9,9 @@ * Return Value: * Value of variable or default value, if the variable is undefined * + * Example: + * [bob, "var"] call ace_common_fnc_getDefinedVariable + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getDefinedVariableDefault.sqf b/addons/common/functions/fnc_getDefinedVariableDefault.sqf index c6f4f7711c..88199f8ad3 100644 --- a/addons/common/functions/fnc_getDefinedVariableDefault.sqf +++ b/addons/common/functions/fnc_getDefinedVariableDefault.sqf @@ -8,6 +8,9 @@ * Return Value: * Default value of variable * + * Example: + * ["name"] call ace_common_fnc_getDefinedVariableDefault + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getDefinedVariableInfo.sqf b/addons/common/functions/fnc_getDefinedVariableInfo.sqf index adcb70c6ee..e22ba193f6 100644 --- a/addons/common/functions/fnc_getDefinedVariableInfo.sqf +++ b/addons/common/functions/fnc_getDefinedVariableInfo.sqf @@ -8,6 +8,9 @@ * Return Value: * Variable Metadata * + * Example: + * ["var"] call ace_common_fnc_getDefinedVariableInfo + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getDisplayConfigName.sqf b/addons/common/functions/fnc_getDisplayConfigName.sqf index 1660bbf804..d61800e5ce 100644 --- a/addons/common/functions/fnc_getDisplayConfigName.sqf +++ b/addons/common/functions/fnc_getDisplayConfigName.sqf @@ -8,6 +8,9 @@ * Return Value: * Display Classnames * + * Example: + * [5] call ace_common_fnc_getDisplayConfigName + * * Public: Yes * * Note: Really slow due to iteration through whole config. Meant for debugging. diff --git a/addons/common/functions/fnc_getDoorTurrets.sqf b/addons/common/functions/fnc_getDoorTurrets.sqf index 533e2a7489..cfb0369d63 100644 --- a/addons/common/functions/fnc_getDoorTurrets.sqf +++ b/addons/common/functions/fnc_getDoorTurrets.sqf @@ -8,6 +8,9 @@ * Return Value: * All turret indecies of the Vehicle * + * Example: + * [car] call ace_common_fnc_getDoorTurrets + * * Public: Yes */ #include "script_component.hpp" @@ -23,7 +26,7 @@ private _doorTurrets = []; _config = [_config, _x] call FUNC(getTurretConfigPath); - if (getNumber (_config >> "isCopilot" == 0) && {count getArray (_config >> "weapons") > 0}) then { + if (((getNumber (_config >> "isCopilot")) == 0) && {count getArray (_config >> "weapons") > 0}) then { _doorTurrets pushBack _x; }; false diff --git a/addons/common/functions/fnc_getFirstObjectIntersection.sqf b/addons/common/functions/fnc_getFirstObjectIntersection.sqf index c4cc46ab9b..951f48ad16 100644 --- a/addons/common/functions/fnc_getFirstObjectIntersection.sqf +++ b/addons/common/functions/fnc_getFirstObjectIntersection.sqf @@ -11,6 +11,9 @@ * 0: Intersects * 1: Intersection Position ASL * + * Example: + * [[1,2,3], [0,0,5], 5] call ace_common_fnc_getFirstObjectIntersection + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getFirstTerrainIntersection.sqf b/addons/common/functions/fnc_getFirstTerrainIntersection.sqf index 27a6f3c613..cfb2397c95 100644 --- a/addons/common/functions/fnc_getFirstTerrainIntersection.sqf +++ b/addons/common/functions/fnc_getFirstTerrainIntersection.sqf @@ -11,6 +11,9 @@ * 0: Intersects * 1: Intersection Position ASL * + * Example: + * [[1,2,3], [0,0,5], 5] call ace_common_fnc_getFirstTerrainIntersection + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getGunner.sqf b/addons/common/functions/fnc_getGunner.sqf index c11f2882ca..85f4cef199 100644 --- a/addons/common/functions/fnc_getGunner.sqf +++ b/addons/common/functions/fnc_getGunner.sqf @@ -9,6 +9,9 @@ * Return Value: * Gunner * + * Example: + * [car, "gun"] call ace_common_fnc_getGunner + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getInPosition.sqf b/addons/common/functions/fnc_getInPosition.sqf index 5d6e5d71b5..a19a150704 100644 --- a/addons/common/functions/fnc_getInPosition.sqf +++ b/addons/common/functions/fnc_getInPosition.sqf @@ -1,16 +1,19 @@ /* * Author: commy2 * Move unit into given vehicle position or switch to that position if the unit is already inside the vehicle. - * - * Arguments: + * + * Arguments: * 0: Unit * 1: Vehicle * 2: Position ("Driver", "Pilot", "Gunner", "Commander", "Copilot", "Turret", "FFV", "Codriver", "Cargo") * 3: Index (only applies to "Turret", "FFV", "Codriver", "Cargo") (default: next free index) - * - * Return Value: + * + * Return Value: * None * + * Example: + * [unit, vehicle, "Driver", 5] call ace_common_fnc_getInPosition + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getItemType.sqf b/addons/common/functions/fnc_getItemType.sqf index eb5015e20a..33d9d267e4 100644 --- a/addons/common/functions/fnc_getItemType.sqf +++ b/addons/common/functions/fnc_getItemType.sqf @@ -9,6 +9,9 @@ * 0: Type ("weapon", "item", "magazine", "") * 1: Item Description * + * Example: + * ["tire"] call ace_common_fnc_getItemType + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getLightProperties.sqf b/addons/common/functions/fnc_getLightProperties.sqf index a376dff841..ffaddfaf87 100644 --- a/addons/common/functions/fnc_getLightProperties.sqf +++ b/addons/common/functions/fnc_getLightProperties.sqf @@ -13,6 +13,9 @@ * 3: Light inner angle * 4: Light outer angle * + * Example: + * [car, "light"] call ace_common_fnc_getLightProperties + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getLightPropertiesWeapon.sqf b/addons/common/functions/fnc_getLightPropertiesWeapon.sqf index 44c866e67f..dfcd483304 100644 --- a/addons/common/functions/fnc_getLightPropertiesWeapon.sqf +++ b/addons/common/functions/fnc_getLightPropertiesWeapon.sqf @@ -12,6 +12,9 @@ * 3: Light inner angle * 4: Light outer angle * + * Example: + * ["flashlight"] call ace_common_fnc_getLightPropertiesWeapon + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getMGRSdata.sqf b/addons/common/functions/fnc_getMGRSdata.sqf index 6b29b6625a..4e0df618e1 100644 --- a/addons/common/functions/fnc_getMGRSdata.sqf +++ b/addons/common/functions/fnc_getMGRSdata.sqf @@ -12,6 +12,9 @@ * 1: 100km square * 2: GZD + 100km sq. as a single string * + * Example: + * ["worldName"] call ace_common_fnc_getMGRSdata + * * Public: No */ #include "script_component.hpp" @@ -25,9 +28,9 @@ private _altitude = getNumber (configFile >> "CfgWorlds" >> _map >> "elevationO private _mapData = _map call FUNC(getMapData); if (!(_mapData isEqualTo [])) then { _lat = _mapData select 0; - _alt = _mapData select 1; + _altitude = _mapData select 1; }; -TRACE_2("Latitude and Altitude",_lat,_alt); +TRACE_2("Latitude and Altitude",_lat,_altitude); private _UTM = [_long, _lat] call BIS_fnc_posDegToUTM; private _easting = _UTM select 0; diff --git a/addons/common/functions/fnc_getMapData.sqf b/addons/common/functions/fnc_getMapData.sqf index ed7e7383e4..33f3e09d83 100644 --- a/addons/common/functions/fnc_getMapData.sqf +++ b/addons/common/functions/fnc_getMapData.sqf @@ -9,6 +9,9 @@ * 0: Latitude * 1: Altitude * + * Example: + * ["altis"] call ace_common_fnc_getMapData + * * Public: No */ @@ -21,82 +24,90 @@ _map = toLower _map; if (_map in ["tanoa"]) exitWith { [-18, 0] }; if (_map in ["altis"]) exitWith { [40, 0] }; if (_map in ["stratis"]) exitWith { [40, 0] }; +if (_map in ["malden", "abel"]) exitWith { [38.8, 0] }; // 1.72 Malden and CWR2 Malden -if (_map in ["abbottabad"]) exitWith { [34, 1256] }; //Abbottabad elevation 1256m (Wikipedia) -if (_map in ["abel"]) exitWith { [39, 0] }; //CWR2 Malden +if (_map in ["abbottabad"]) exitWith { [34, 1256] }; // Abbottabad elevation 1256m (Wikipedia) if (_map in ["abramia"]) exitWith { [60, 0] }; if (_map in ["af_kandahar_province"]) exitWith { [42, 0] }; if (_map in ["angel"]) exitWith { [38, 0] }; if (_map in ["anim_helvantis_v2"]) exitWith { [50, 0] }; if (_map in ["australia"]) exitWith { [-25, 0] }; -if (_map in ["baranow", "ivachev", "panavo", "staszow"]) exitWith { [50, 148.1] }; //IFA3LITE - default elevationOffset +if (_map in ["baranow", "ivachev", "panavo", "staszow"]) exitWith { [50, 148.1] }; // IFA3LITE - default elevationOffset if (_map in ["beketov"]) exitWith { [55, 0] }; +if (_map in ["blud_cordelia"]) exitWith { [12, 5] }; // Trung Si if (_map in ["bootcamp_acr"]) exitWith { [50, 0] }; if (_map in ["bornholm"]) exitWith { [55, 0] }; if (_map in ["bozcaada"]) exitWith { [40, 0] }; -if (_map in ["cain"]) exitWith { [40, 0] }; //CWR2 Kolgujev +if (_map in ["cain"]) exitWith { [40, 0] }; // CWR2 Kolgujev if (_map in ["caribou"]) exitWith { [68, 0] }; -if (_map in ["cartercity"]) exitWith { [43, 130] }; //Pecher, based on Grozny (1995 - 1996) elevation 130m (Wikipedia) +if (_map in ["cartercity"]) exitWith { [43, 130] }; // Pecher, based on Grozny (1995 - 1996) elevation 130m (Wikipedia) if (_map in ["catalina"]) exitWith { [33, 0] }; if (_map in ["chernarus", "chernarus_summer", "chernarus_winter"]) exitWith { [50, 0] }; if (_map in ["chernobylzone", "chernobylzonea2"]) exitWith { [51, 0] }; if (_map in ["clafghan"]) exitWith { [34, 640] }; -if (_map in ["colleville"]) exitWith { [49, 0] }; //IFA3LITE, Omaha Beach 1944 -if (_map in ["csj_lawlands", "uns_dong_ha"]) exitWith { [12, 0] }; //Unsung Mod -if (_map in ["csj_sea"]) exitWith { [15, 0] }; //Unsung Mod -if (_map in ["dakrong"]) exitWith { [16, 0] }; //Unsung Mod +if (_map in ["colleville"]) exitWith { [49, 0] }; // IFA3LITE, Omaha Beach 1944 +if (_map in ["csj_lawlands", "uns_dong_ha"]) exitWith { [12, 0] }; // Unsung Mod +if (_map in ["csj_sea"]) exitWith { [15, 0] }; // Unsung Mod +if (_map in ["dakrong"]) exitWith { [16, 0] }; // Unsung Mod if (_map in ["desert_e"]) exitWith { [40, 800] }; -if (_map in ["desert_island"]) exitWith { [40, 0] }; //CWR2 Desert Island -if (_map in ["dya"]) exitWith { [34, 110] }; //Diyala Iraq - default elevationOffset -if (_map in ["eden"]) exitWith { [45, 0] }; //CWR2 Everon +if (_map in ["desert_island"]) exitWith { [40, 0] }; // CWR2 Desert Island +if (_map in ["dya"]) exitWith { [34, 110] }; // Diyala Iraq - default elevationOffset +if (_map in ["eden"]) exitWith { [45, 0] }; // CWR2 Everon if (_map in ["esseker"]) exitWith { [43, 2000] }; -if (_map in ["evergreen"]) exitWith { [41, 0] }; //Burgazada, Turkey - default elevationOffset +if (_map in ["evergreen"]) exitWith { [41, 0] }; // Burgazada, Turkey - default elevationOffset if (_map in ["fallujah"]) exitWith { [33, 0] }; if (_map in ["fata"]) exitWith { [33, 1347] }; if (_map in ["gorgona"]) exitWith { [43, 0] }; -if (_map in ["hellskitchen", "hellskitchens"]) exitWith { [32, 900] }; //Sangin summer, Sangin winter - Sangin elevation 888m (Wikipedia) +if (_map in ["hellskitchen", "hellskitchens"]) exitWith { [32, 900] }; // Sangin summer, Sangin winter - Sangin elevation 888m (Wikipedia) if (_map in ["hindukush"]) exitWith { [36, 0] }; +if (_map in ["i44_omaha_v2"]) exitWith { [49, 0] }; if (_map in ["imrali", "imralispring"]) exitWith { [40, 0] }; if (_map in ["intro"]) exitWith { [40, 0] }; if (_map in ["isladuala3"]) exitWith { [-19, 0] }; -if (_map in ["jacobi"]) exitWith { [34, 2000] }; //default elevationOffset +if (_map in ["jacobi"]) exitWith { [34, 2000] }; // default elevationOffset if (_map in ["kapaulio"]) exitWith { [0, 0] }; -if (_map in ["kerama"]) exitWith { [26, 0] }; //Kerama Islands, Japan - default elevationOffset -if (_map in ["khe_sanh"]) exitWith { [17, 0] }; //Unsung Mod +if (_map in ["kerama"]) exitWith { [26, 0] }; // Kerama Islands, Japan - default elevationOffset +if (_map in ["khe_sanh"]) exitWith { [17, 0] }; // Unsung Mod if (_map in ["kholm"]) exitWith { [36, 0] }; -if (_map in ["kidal"]) exitWith { [18, 0] }; //Kidal, Mali - default elevationOffset +if (_map in ["kidal"]) exitWith { [18, 0] }; // Kidal, Mali - default elevationOffset if (_map in ["koplic"]) exitWith { [42, 0] }; if (_map in ["kunduz"]) exitWith { [37, 0] }; -if (_map in ["lingor", "lingor3"]) exitWith { [-4, 0] }; +if (_map in ["lingor", "lingor3", "dingor"]) exitWith { [-4, 0] }; if (_map in ["lost", "lostw"]) exitWith { [60, 0] }; +if (_map in ["lythium"]) exitWith { [34, 0] }; if (_map in ["malvinas"]) exitWith { [-52, 0] }; -if (_map in ["marenice"]) exitWith { [51, 0] }; //CSA38 Mod (Czechoslovak army 1938 - Munich crisis), Lisatian Mountains. +if (_map in ["marenice"]) exitWith { [51, 0] }; // CSA38 Mod (Czechoslovak army 1938 - Munich crisis), Lisatian Mountains. if (_map in ["mcn_aliabad"]) exitWith { [36, 0] }; +if (_map in ["mcn_neaville", "mcn_neaville_winter"]) exitWith { [45, 0] }; // I44: Neaville, I44: Neaville (Winter) if (_map in ["mef_alaska"]) exitWith { [60, 5] }; -if (_map in ["mog"]) exitWith { [2, 0] }; //Mogadishu, Somalia +if (_map in ["mog"]) exitWith { [2, 0] }; // Mogadishu, Somalia if (_map in ["mountains_acr"]) exitWith { [35, 2000] }; +if (_map in ["mske"]) exitWith { [35, 0] }; // MSKE 2017 if (_map in ["nam2"]) exitWith { [14, 0] }; if (_map in ["namalsk"]) exitWith { [65, 0] }; if (_map in ["napf", "napfwinter"]) exitWith { [47, 0] }; -if (_map in ["newyork_lumnuon"]) exitWith { [41, 5] }; //Governer´s Island, New York - default elevationOffset -if (_map in ["noe"]) exitWith { [45, 0] }; //CWR2 Nogova +if (_map in ["newyork_lumnuon"]) exitWith { [41, 5] }; // Governer´s Island, New York - default elevationOffset +if (_map in ["noe"]) exitWith { [45, 0] }; // CWR2 Nogova if (_map in ["panthera3", "winthera3"]) exitWith { [46, 0] }; -if (_map in ["phu_bai", "rockwall", "us101_cao_bang"]) exitWith { [14, 0] }; //Unsung Mod -if (_map in ["pianosa_aut"]) exitWith { [43, 0] }; //Pianosa, Italy - default elevationOffset -if (_map in ["pja305"]) exitWith { [0, 0] }; //G.O.S N'Ziwasogo -if (_map in ["pja306"]) exitWith { [35, 0] }; //G.O.S Kalu Khan -if (_map in ["pja307"]) exitWith { [17, 0] }; //F.S.F Daryah -if (_map in ["pja308"]) exitWith { [36, 0] }; //G.O.S Gunkizli -if (_map in ["pja310"]) exitWith { [36, 0] }; //G.O.S Al Rayak -if (_map in ["pja312"]) exitWith { [16, 0] }; //G.O.S Song Bin Tanh +if (_map in ["phu_bai", "rockwall", "us101_cao_bang"]) exitWith { [14, 0] }; // Unsung Mod +if (_map in ["pianosa_aut"]) exitWith { [43, 0] }; // Pianosa, Italy - default elevationOffset +if (_map in ["pja305"]) exitWith { [0, 0] }; // G.O.S N'Ziwasogo +if (_map in ["pja306"]) exitWith { [35, 0] }; // G.O.S Kalu Khan +if (_map in ["pja307"]) exitWith { [17, 0] }; // F.S.F Daryah +if (_map in ["pja308"]) exitWith { [36, 0] }; // G.O.S Gunkizli +if (_map in ["pja310"]) exitWith { [36, 0] }; // G.O.S Al Rayak +if (_map in ["pja312"]) exitWith { [16, 0] }; // G.O.S Song Bin Tanh +if (_map in ["pja314"]) exitWith { [46, 0] }; // G.O.S Leskovets +if (_map in ["pja319"]) exitWith { [20, 0] }; // G.O.S N'Djenahoud, Ennedi Massif (Republic of Chad) +if (_map in ["plr_bulge"]) exitWith { [49, 0] }; // I44: Battle of the Bulge if (_map in ["porquerolles"]) exitWith { [43, 0] }; if (_map in ["porto"]) exitWith { [40, 0] }; if (_map in ["provinggrounds_pmc"]) exitWith { [35, 100] }; if (_map in ["reshmaan"]) exitWith { [35, 2000] }; -if (_map in ["rungsat"]) exitWith { [10, 0] }; //Unsung Mod +if (_map in ["rungsat"]) exitWith { [10, 0] }; // Unsung Mod if (_map in ["sara", "sara_dbe1"]) exitWith { [40, 0] }; if (_map in ["saralite"]) exitWith { [40, 0] }; -if (_map in ["sb3"]) exitWith { [53, 25] }; //TrpUebPl Einfelde Nord (Munster North Training Area, Germany) - default elevationOffset +if (_map in ["sb3"]) exitWith { [53, 25] }; // TrpUebPl Einfelde Nord (Munster North Training Area, Germany) - default elevationOffset if (_map in ["sfp_sturko"]) exitWith { [56, 0] }; if (_map in ["sfp_wamako"]) exitWith { [14, 0] }; if (_map in ["shapur_baf"]) exitWith { [35, 100] }; @@ -105,13 +116,13 @@ if (_map in ["takistan"]) exitWith { [35, 2000] }; if (_map in ["thirsk"]) exitWith { [65, 0] }; if (_map in ["tilos"]) exitWith { [36, 0] }; if (_map in ["uhao"]) exitWith { [21, 0] }; -if (_map in ["uns_idv", "uns_ptv"]) exitWith { [13, 0] }; //Unsung Mod +if (_map in ["uns_idv", "uns_ptv"]) exitWith { [13, 0] }; // Unsung Mod if (_map in ["utes"]) exitWith { [50, 0] }; -if (_map in ["vt5"]) exitWith { [61, 100] }; //Valtatie 5, Finland - default elevationOffset +if (_map in ["vt5"]) exitWith { [61, 100] }; // Valtatie 5, Finland - default elevationOffset if (_map in ["wake"]) exitWith { [19, 0] }; if (_map in ["waziristan"]) exitWith { [33, 0] }; -if (_map in ["wintermap"]) exitWith { [61, 0] }; //Nordkvingo - default elevationOffset -if (_map in ["wintertown", "wintertowna3"]) exitWith { [39, 600] }; //U.S. state Kansas mean elevation 610m (Wikipedia) +if (_map in ["wintermap"]) exitWith { [61, 0] }; // Nordkvingo - default elevationOffset +if (_map in ["wintertown", "wintertowna3"]) exitWith { [39, 600] }; // U.S. state Kansas mean elevation 610m (Wikipedia) if (_map in ["woodland_acr"]) exitWith { [50, 0] }; if (_map in ["xcam_prototype"]) exitWith { [35, 0] }; if (_map in ["xcam_taunus"]) exitWith { [50, 0] }; diff --git a/addons/common/functions/fnc_getMapGridData.sqf b/addons/common/functions/fnc_getMapGridData.sqf index bda9288635..60edb8941d 100644 --- a/addons/common/functions/fnc_getMapGridData.sqf +++ b/addons/common/functions/fnc_getMapGridData.sqf @@ -64,8 +64,8 @@ while {_startGrid == _originGrid} do { private _realOffsetY = (parseNumber (_originGrid select [count _formatX, count _formatY])) * _stepY + _heightOffset - 1; //Calculate MGRS 10digit step - they should both be 1 meter: -_stepXat5 = _stepX * 10 ^ ((count _formatX) - 5); -_stepYat5 = -1 * _stepY * 10 ^ ((count _formatY) - 5); +private _stepXat5 = _stepX * 10 ^ ((count _formatX) - 5); +private _stepYat5 = -1 * _stepY * 10 ^ ((count _formatY) - 5); if (_stepYat5 < 0) then { WARNING_1("Map Grid Warning (%1) - Northing is reversed.",worldName); diff --git a/addons/common/functions/fnc_getMapPosFromGrid.sqf b/addons/common/functions/fnc_getMapPosFromGrid.sqf index a148679fa9..18599f4ef4 100644 --- a/addons/common/functions/fnc_getMapPosFromGrid.sqf +++ b/addons/common/functions/fnc_getMapPosFromGrid.sqf @@ -6,7 +6,7 @@ * 0: Grid Cords * 1: Grid center (true), Grid Bottom Right (false) (default: true) * - * Return values: + * Return Value: * Position * * Example: diff --git a/addons/common/functions/fnc_getMarkerType.sqf b/addons/common/functions/fnc_getMarkerType.sqf index 0da7f1a46e..3d5864cf08 100644 --- a/addons/common/functions/fnc_getMarkerType.sqf +++ b/addons/common/functions/fnc_getMarkerType.sqf @@ -3,11 +3,14 @@ * Get the apropriate marker for a group. * * Arguments: - * 0: Group + * 0: Group * * Return Value: * Marker Type * + * Example: + * ["GROUP"] call ace_common_fnc_getmarkerType + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getNumberMagazinesIn.sqf b/addons/common/functions/fnc_getNumberMagazinesIn.sqf index 87f92979eb..dd02d055e0 100644 --- a/addons/common/functions/fnc_getNumberMagazinesIn.sqf +++ b/addons/common/functions/fnc_getNumberMagazinesIn.sqf @@ -9,6 +9,9 @@ * Return Value: * Magazine amount * + * Example: + * [bob, "magazine"] call ace_common_fnc_getNumberMagazinesIn + * * Public: No */ #include "script_component.hpp" @@ -21,11 +24,14 @@ if (_unit isKindOf "CAManBase") then { _return = {_x == _magazine} count magazines _unit; } else { { - _return = _return + {_x == _magazine} count magazines _x; + _return = _return + ({_x == _magazine} count magazines _x); false } count crew _unit; - _return = _return + ({_x == _magazine} count getMagazineCargo _unit); + (getMagazineCargo _unit) params [["_magNames", []], ["_magCount", []]]; + { + if (_magazine == _x) exitWith {_return = _return + (_magCount select _forEachIndex)}; + } forEach _magNames; }; _return diff --git a/addons/common/functions/fnc_getPitchBankYaw.sqf b/addons/common/functions/fnc_getPitchBankYaw.sqf index 89fab8d92b..2a7a5c43e8 100644 --- a/addons/common/functions/fnc_getPitchBankYaw.sqf +++ b/addons/common/functions/fnc_getPitchBankYaw.sqf @@ -10,6 +10,9 @@ * 1: bank * 2: yaw * + * Example: + * [plane] call ace_common_fnc_getPitchBankYaw + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getReflectorsWithSelections.sqf b/addons/common/functions/fnc_getReflectorsWithSelections.sqf index 248050486c..d166818494 100644 --- a/addons/common/functions/fnc_getReflectorsWithSelections.sqf +++ b/addons/common/functions/fnc_getReflectorsWithSelections.sqf @@ -12,6 +12,9 @@ * 0: Light Hitpoints * 1: Selections * + * Example: + * [car] call ace_common_fnc_getReflectorsWithSelections + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getSelectionsWithoutHitPoints.sqf b/addons/common/functions/fnc_getSelectionsWithoutHitPoints.sqf index b46ec308ec..028024a94e 100644 --- a/addons/common/functions/fnc_getSelectionsWithoutHitPoints.sqf +++ b/addons/common/functions/fnc_getSelectionsWithoutHitPoints.sqf @@ -4,10 +4,15 @@ * Returns all damageable selections without hitpoints of any vehicle. * * Arguments: - * 0: A vehicle, not the classname (Object) + * 0: A vehicle, not the classname * * Return Value: - * The selections without hitpoints, i.e. reflectors. (Array) + * The selections without hitpoints, i.e. reflectors. + * + * Example: + * [car] call ace_common_fnc_getSelectionsWithoutHitPoints + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getSettingData.sqf b/addons/common/functions/fnc_getSettingData.sqf index ae9dd5351e..0eb76d9b7b 100644 --- a/addons/common/functions/fnc_getSettingData.sqf +++ b/addons/common/functions/fnc_getSettingData.sqf @@ -6,7 +6,7 @@ * 0: Setting Name * * Return Value: - * Setting Data (Array) + * Setting Data * 0: Name * 1: Type Name * 2: Is Client Settable @@ -17,6 +17,9 @@ * 7: Default Value * 8: Localized Category * + * Example: + * ["setting"] call ace_common_fnc_getSettingData + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getStaminaBarControl.sqf b/addons/common/functions/fnc_getStaminaBarControl.sqf index 1fa747fef6..cfdef5bb35 100644 --- a/addons/common/functions/fnc_getStaminaBarControl.sqf +++ b/addons/common/functions/fnc_getStaminaBarControl.sqf @@ -8,6 +8,9 @@ * Return Value: * Stamina Bar control * + * Example: + * call ace_common_fnc_getStaminaBarControl + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getTargetAzimuthAndInclination.sqf b/addons/common/functions/fnc_getTargetAzimuthAndInclination.sqf index 0d2343bec9..98e7a5e3b2 100644 --- a/addons/common/functions/fnc_getTargetAzimuthAndInclination.sqf +++ b/addons/common/functions/fnc_getTargetAzimuthAndInclination.sqf @@ -9,6 +9,9 @@ * 0: Azimuth * 1: Inclination * + * Example: + * [] call ace_common_fnc_getTargetAzimuthAndInclination + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getTargetDistance.sqf b/addons/common/functions/fnc_getTargetDistance.sqf index 000f0ae31d..c93941eb12 100644 --- a/addons/common/functions/fnc_getTargetDistance.sqf +++ b/addons/common/functions/fnc_getTargetDistance.sqf @@ -10,6 +10,9 @@ * Return Value: * Distance in meters * + * Example: + * [5,20000,56] call ace_common_fnc_getTargetDistance + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getTargetObject.sqf b/addons/common/functions/fnc_getTargetObject.sqf index ed757dedf4..9ee1d26ff3 100644 --- a/addons/common/functions/fnc_getTargetObject.sqf +++ b/addons/common/functions/fnc_getTargetObject.sqf @@ -8,6 +8,9 @@ * Return Value: * Nearest object in line of sight, objNull if none are found * + * Example: + * [56] call ace_common_fnc_getTargetObject + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getTurnedOnLights.sqf b/addons/common/functions/fnc_getTurnedOnLights.sqf index a996e146d2..f95a4bbf19 100644 --- a/addons/common/functions/fnc_getTurnedOnLights.sqf +++ b/addons/common/functions/fnc_getTurnedOnLights.sqf @@ -8,6 +8,9 @@ * Return Value: * All burning lights * + * Example: + * [car] call ace_common_fnc_getTurnedOnLights + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getTurretCommander.sqf b/addons/common/functions/fnc_getTurretCommander.sqf index 3e7f09215f..2f832438b5 100644 --- a/addons/common/functions/fnc_getTurretCommander.sqf +++ b/addons/common/functions/fnc_getTurretCommander.sqf @@ -8,6 +8,9 @@ * Return Value: * Vehicle commander turrent indecies * + * Example: + * [car] call ace_common_fnc_getTurretCommander + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getTurretConfigPath.sqf b/addons/common/functions/fnc_getTurretConfigPath.sqf index 95d0773fd3..6af9aa62e3 100644 --- a/addons/common/functions/fnc_getTurretConfigPath.sqf +++ b/addons/common/functions/fnc_getTurretConfigPath.sqf @@ -9,6 +9,9 @@ * Return Value: * Turret config * + * Example: + * [CfgVehicle, [Array]] call ace_common_fnc_getTurretConfigPath + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getTurretCopilot.sqf b/addons/common/functions/fnc_getTurretCopilot.sqf index 49002cc40e..ef52200f6e 100644 --- a/addons/common/functions/fnc_getTurretCopilot.sqf +++ b/addons/common/functions/fnc_getTurretCopilot.sqf @@ -8,6 +8,9 @@ * Return Value: * Vehicle Copilot Turret indecies * + * Example: + * [car] call ace_common_fnc_getTurretCopilot + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getTurretDirection.sqf b/addons/common/functions/fnc_getTurretDirection.sqf index 5861586402..7bec5cf3e6 100644 --- a/addons/common/functions/fnc_getTurretDirection.sqf +++ b/addons/common/functions/fnc_getTurretDirection.sqf @@ -10,6 +10,9 @@ * 0: Position ASL * 1: Direction * + * Example: + * [car, [5,6,5]] call ace_common_fnc_getTurretDirection + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getTurretGunner.sqf b/addons/common/functions/fnc_getTurretGunner.sqf index 4a26e2c03d..e1846f96de 100644 --- a/addons/common/functions/fnc_getTurretGunner.sqf +++ b/addons/common/functions/fnc_getTurretGunner.sqf @@ -8,6 +8,9 @@ * Return Value: * Vehicle Gunner Turret indecies * + * Example: + * [car] call ace_common_fnc_getTurretGunner + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getTurretsFFV.sqf b/addons/common/functions/fnc_getTurretsFFV.sqf index 5c36e20197..885396b2bf 100644 --- a/addons/common/functions/fnc_getTurretsFFV.sqf +++ b/addons/common/functions/fnc_getTurretsFFV.sqf @@ -8,6 +8,9 @@ * Return Value: * Vehicle FFV Turret indecies * + * Example: + * [car] call ace_common_fnc_getTurretsFFV + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getTurretsOther.sqf b/addons/common/functions/fnc_getTurretsOther.sqf index ef2a1278dc..04750e98fd 100644 --- a/addons/common/functions/fnc_getTurretsOther.sqf +++ b/addons/common/functions/fnc_getTurretsOther.sqf @@ -8,6 +8,9 @@ * Return Value: * Vehicle Other Turret indecies * + * Example: + * [car] call ace_common_fnc_getTurretsOther + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getVehicleCargo.sqf b/addons/common/functions/fnc_getVehicleCargo.sqf index 68599c919b..5279825008 100644 --- a/addons/common/functions/fnc_getVehicleCargo.sqf +++ b/addons/common/functions/fnc_getVehicleCargo.sqf @@ -8,6 +8,9 @@ * Return Value: * Vehicle cargo positions * + * Example: + * [car] call ace_common_fnc_getVehicleCargo + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getVehicleCodriver.sqf b/addons/common/functions/fnc_getVehicleCodriver.sqf index a1cc5814e1..8b0fd3be29 100644 --- a/addons/common/functions/fnc_getVehicleCodriver.sqf +++ b/addons/common/functions/fnc_getVehicleCodriver.sqf @@ -8,6 +8,9 @@ * Return Value: * Vehicle codriver positions * + * Example: + * ["car"] call ace_common_fnc_getVehicleCodriver + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getVehicleCrew.sqf b/addons/common/functions/fnc_getVehicleCrew.sqf index adb0e9701a..f0377671e9 100644 --- a/addons/common/functions/fnc_getVehicleCrew.sqf +++ b/addons/common/functions/fnc_getVehicleCrew.sqf @@ -9,6 +9,9 @@ * Return Value: * Crew * + * Example: + * [car, ["driver"]] call ace_common_fnc_getVehicleCrew + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getVehicleUAVCrew.sqf b/addons/common/functions/fnc_getVehicleUAVCrew.sqf index 2b2281ed10..9804a14b68 100644 --- a/addons/common/functions/fnc_getVehicleUAVCrew.sqf +++ b/addons/common/functions/fnc_getVehicleUAVCrew.sqf @@ -8,6 +8,9 @@ * Return Value: * UAV Dummy Crew * + * Example: + * [car] call ace_common_fnc_getVehicleUAVCrew + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getVersion.sqf b/addons/common/functions/fnc_getVersion.sqf index 24773240b7..e0f2ab9f6d 100644 --- a/addons/common/functions/fnc_getVersion.sqf +++ b/addons/common/functions/fnc_getVersion.sqf @@ -8,6 +8,9 @@ * Return Value: * ACE Version * + * Example: + * [] call ace_common_fnc_getVersion + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getWeaponAzimuthAndInclination.sqf b/addons/common/functions/fnc_getWeaponAzimuthAndInclination.sqf index f7c7909e01..604a89b9f8 100644 --- a/addons/common/functions/fnc_getWeaponAzimuthAndInclination.sqf +++ b/addons/common/functions/fnc_getWeaponAzimuthAndInclination.sqf @@ -9,6 +9,9 @@ * 0: Azimuth * 1: Inclination * + * Example: + * ["gun"] call ace_common_fnc_getWeaponAzimuthAndInclination + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getWeaponIndex.sqf b/addons/common/functions/fnc_getWeaponIndex.sqf index 0e24f190a5..a881233469 100644 --- a/addons/common/functions/fnc_getWeaponIndex.sqf +++ b/addons/common/functions/fnc_getWeaponIndex.sqf @@ -13,6 +13,9 @@ * 2 = handgun * -1 = other * + * Example: + * [bob, "gun"] call ace_common_fnc_getWeaponIndex + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getWeaponModes.sqf b/addons/common/functions/fnc_getWeaponModes.sqf index 48755d3a9b..ede86ac842 100644 --- a/addons/common/functions/fnc_getWeaponModes.sqf +++ b/addons/common/functions/fnc_getWeaponModes.sqf @@ -8,6 +8,9 @@ * Return Value: * Firing Modes * + * Example: + * ["gun"] call ace_common_fnc_getWeaponModes + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getWeaponMuzzles.sqf b/addons/common/functions/fnc_getWeaponMuzzles.sqf index e252d879f9..b0b0533721 100644 --- a/addons/common/functions/fnc_getWeaponMuzzles.sqf +++ b/addons/common/functions/fnc_getWeaponMuzzles.sqf @@ -8,6 +8,9 @@ * Return Value: * All weapon muzzles * + * Example: + * ["gun"] call ace_common_fnc_getWeaponMuzzles + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getWeaponState.sqf b/addons/common/functions/fnc_getWeaponState.sqf index 73e5897236..772a5058b9 100644 --- a/addons/common/functions/fnc_getWeaponState.sqf +++ b/addons/common/functions/fnc_getWeaponState.sqf @@ -12,6 +12,9 @@ * 2: Magazines * 3: Ammo * + * Example: + * [bob, "gun"] call ace_common_fnc_getWeaponState + * * Public: Yes */ #include "script_component.hpp" @@ -42,4 +45,4 @@ private _ammo = _muzzles apply {0}; false } count magazinesAmmoFull _unit; -[_attachments, _muzzles, _magazines, _ammo]; +[_attachments, _muzzles, _magazines, _ammo]; diff --git a/addons/common/functions/fnc_getWeaponType.sqf b/addons/common/functions/fnc_getWeaponType.sqf index 5666ea5bc0..b53f23d514 100644 --- a/addons/common/functions/fnc_getWeaponType.sqf +++ b/addons/common/functions/fnc_getWeaponType.sqf @@ -12,6 +12,9 @@ * 3 = handgun * -1 = other * + * Example: + * ["gun"] call ace_common_fnc_getWeaponType + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getWindDirection.sqf b/addons/common/functions/fnc_getWindDirection.sqf index 7341ea9c1d..f35047fc30 100644 --- a/addons/common/functions/fnc_getWindDirection.sqf +++ b/addons/common/functions/fnc_getWindDirection.sqf @@ -8,6 +8,9 @@ * Return Value: * Wind cardinal direction * + * Example: + * [] call ace_common_fnc_getWindDirection + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_getZoom.sqf b/addons/common/functions/fnc_getZoom.sqf index f4113198a7..9c3f7987a4 100644 --- a/addons/common/functions/fnc_getZoom.sqf +++ b/addons/common/functions/fnc_getZoom.sqf @@ -8,10 +8,13 @@ * Return Value: * Zoom * + * Example: + * [] call ace_common_fnc_getZoom + * * Public: Yes */ #include "script_component.hpp" if (!hasInterface) exitWith {0}; -(0.5 - ((worldToScreen positionCameraToWorld [0, 1, 1]) select 1)) * (getResolution select 5) +(0.5 - ((worldToScreen positionCameraToWorld [0, 1, 1]) select 1)) * (getResolution select 5) diff --git a/addons/common/functions/fnc_goKneeling.sqf b/addons/common/functions/fnc_goKneeling.sqf index 9e7aed708a..b838a4f047 100644 --- a/addons/common/functions/fnc_goKneeling.sqf +++ b/addons/common/functions/fnc_goKneeling.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_common_fnc_goKneeling + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_hadamardProduct.sqf b/addons/common/functions/fnc_hadamardProduct.sqf index cdaf707395..20173e7d0b 100644 --- a/addons/common/functions/fnc_hadamardProduct.sqf +++ b/addons/common/functions/fnc_hadamardProduct.sqf @@ -10,6 +10,9 @@ * Return Value: * Hadamard Product * + * Example: + * [[0,0,0], [1,1,1]] call ace_common_fnc_hadamardProduct + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_handleEngine.sqf b/addons/common/functions/fnc_handleEngine.sqf index 829ad5bb49..55696a679e 100644 --- a/addons/common/functions/fnc_handleEngine.sqf +++ b/addons/common/functions/fnc_handleEngine.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, "running"] call ace_common_fnc_handleEngine + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_handleModifierKey.sqf b/addons/common/functions/fnc_handleModifierKey.sqf index bfb7e84931..094ec278f4 100644 --- a/addons/common/functions/fnc_handleModifierKey.sqf +++ b/addons/common/functions/fnc_handleModifierKey.sqf @@ -8,7 +8,10 @@ * Return Value: * None * - * Public : No + * Example: + * call ace_common_fnc_handleModifierKey + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_handleModifierKeyUp.sqf b/addons/common/functions/fnc_handleModifierKeyUp.sqf index ffa5855115..97df636050 100644 --- a/addons/common/functions/fnc_handleModifierKeyUp.sqf +++ b/addons/common/functions/fnc_handleModifierKeyUp.sqf @@ -8,7 +8,10 @@ * Return Value: * None * - * Public : No + * Example: + * call ace_common_fnc_handleModifierKeyUp + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_hasHatch.sqf b/addons/common/functions/fnc_hasHatch.sqf index e39c52f897..b750d01b85 100644 --- a/addons/common/functions/fnc_hasHatch.sqf +++ b/addons/common/functions/fnc_hasHatch.sqf @@ -8,6 +8,9 @@ * Return Value: * Unit has a hatch? * + * Example: + * [bob] call ace_common_fnc_hasHatch + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_hasItem.sqf b/addons/common/functions/fnc_hasItem.sqf index 8ca785d78e..f77337a5dd 100644 --- a/addons/common/functions/fnc_hasItem.sqf +++ b/addons/common/functions/fnc_hasItem.sqf @@ -9,6 +9,9 @@ * Return Value: * has Item * + * Example: + * [[bob, "item"] call ace_common_fnc_hasItem + * * Public: yes * * Note: Case sensitive diff --git a/addons/common/functions/fnc_hasMagazine.sqf b/addons/common/functions/fnc_hasMagazine.sqf index eaa9bc0556..4ad40bf959 100644 --- a/addons/common/functions/fnc_hasMagazine.sqf +++ b/addons/common/functions/fnc_hasMagazine.sqf @@ -9,6 +9,9 @@ * Return Value: * has Magazine * + * Example: + * [bob, "magazine"] call ace_common_fnc_hasMagazine + * * Public: yes * * Note: Case sensitive diff --git a/addons/common/functions/fnc_headBugFix.sqf b/addons/common/functions/fnc_headBugFix.sqf index 07a1652b1b..fca04c234b 100644 --- a/addons/common/functions/fnc_headBugFix.sqf +++ b/addons/common/functions/fnc_headBugFix.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [] call ace_common_fnc_headBugFix + * * Public: Yes * * Note: Has to be spawned not called diff --git a/addons/common/functions/fnc_hideUnit.sqf b/addons/common/functions/fnc_hideUnit.sqf index e0adb201c3..838bd4246e 100644 --- a/addons/common/functions/fnc_hideUnit.sqf +++ b/addons/common/functions/fnc_hideUnit.sqf @@ -7,7 +7,7 @@ * 1: Reason to hide the unit * * Return Value: - * nil + * None * * Example: * [ACE_Player, "SpectatorMode"] call ace_common_fnc_hideUnit diff --git a/addons/common/functions/fnc_inTransitionAnim.sqf b/addons/common/functions/fnc_inTransitionAnim.sqf index fd90291d73..a127fad005 100644 --- a/addons/common/functions/fnc_inTransitionAnim.sqf +++ b/addons/common/functions/fnc_inTransitionAnim.sqf @@ -3,10 +3,13 @@ * Check if given unit is in a transitional animation * * Arguments: - * 0: A soldier + * 0: A soldier * * Return Value: - * + * Boolean + * + * Example: + * [bob] call ace_common_fnc_inTransitionAnim * * Public: Yes */ diff --git a/addons/common/functions/fnc_interpolateFromArray.sqf b/addons/common/functions/fnc_interpolateFromArray.sqf index 07207071e7..9c63a9798c 100644 --- a/addons/common/functions/fnc_interpolateFromArray.sqf +++ b/addons/common/functions/fnc_interpolateFromArray.sqf @@ -9,6 +9,9 @@ * Return Value: * Interpolation result * + * Example: + * [[0,1], 5] call ace_common_fnc_interpolateFromArray + * * Public: Yes */ #include "script_component.hpp" @@ -18,4 +21,4 @@ params ["_array", "_value"]; private _min = _array select floor _value; private _max = _array select ceil _value; -_min + (_max - _min) * (_value % 1) // return +linearConversion [0, 1, _value % 1, _min, _max] // return diff --git a/addons/common/functions/fnc_isAwake.sqf b/addons/common/functions/fnc_isAwake.sqf index 1179ced02f..d7f0b79149 100644 --- a/addons/common/functions/fnc_isAwake.sqf +++ b/addons/common/functions/fnc_isAwake.sqf @@ -8,6 +8,9 @@ * Return Value: * if unit is awake * + * Example: + * [bob] call ace_common_fnc_isAwake + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_isEOD.sqf b/addons/common/functions/fnc_isEOD.sqf index ee82cf2068..2a6e04247c 100644 --- a/addons/common/functions/fnc_isEOD.sqf +++ b/addons/common/functions/fnc_isEOD.sqf @@ -20,4 +20,4 @@ params ["_unit"]; -_unit getVariable ["ACE_isEOD", getNumber (configFile >> "CfgVehicles" >> typeOf _unit >> "canDeactivateMines") == 1] // return +_unit getVariable ["ACE_isEOD", _unit getUnitTrait "explosiveSpecialist"] // return diff --git a/addons/common/functions/fnc_isEngineer.sqf b/addons/common/functions/fnc_isEngineer.sqf index 01eabfc0b3..96a00970f6 100644 --- a/addons/common/functions/fnc_isEngineer.sqf +++ b/addons/common/functions/fnc_isEngineer.sqf @@ -17,7 +17,7 @@ params ["_unit"]; -private _isEngineer = _unit getVariable ["ACE_isEngineer", getNumber (configFile >> "CfgVehicles" >> typeOf _unit >> "engineer") == 1]; +private _isEngineer = _unit getVariable ["ACE_isEngineer", _unit getUnitTrait "engineer"]; //Handle ace_repair modules setting this to a number if (_isEngineer isEqualType 0) then {_isEngineer = _isEngineer > 0}; diff --git a/addons/common/functions/fnc_isFeatureCameraActive.sqf b/addons/common/functions/fnc_isFeatureCameraActive.sqf index 7d282109b2..b0870408af 100644 --- a/addons/common/functions/fnc_isFeatureCameraActive.sqf +++ b/addons/common/functions/fnc_isFeatureCameraActive.sqf @@ -25,7 +25,7 @@ !( isNull curatorCamera && // Curator - {isNull (GETMVAR(EGVAR(spectator,camera),objNull))} && // ACE Spectator + {!(GETMVAR(EGVAR(spectator,isSet),false))} && // ACE Spectator {isNull (GETUVAR(BIS_fnc_arsenal_cam, objNull))} && // Arsenal camera {isNull (GETMVAR(BIS_fnc_establishingShot_fakeUAV, objNull))} && // Establishing shot camera {isNull (GETMVAR(BIS_fnc_camera_cam, objNull))} && // Splendid camera diff --git a/addons/common/functions/fnc_isInBuilding.sqf b/addons/common/functions/fnc_isInBuilding.sqf index d4a9307cd6..98f092e762 100644 --- a/addons/common/functions/fnc_isInBuilding.sqf +++ b/addons/common/functions/fnc_isInBuilding.sqf @@ -8,6 +8,9 @@ * Return Value: * Is the unit in a building? * + * Example: + * [bob] call ace_common_fnc_isInBuilding + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_isModLoaded.sqf b/addons/common/functions/fnc_isModLoaded.sqf index 46e1bc03a8..f740f58b0b 100644 --- a/addons/common/functions/fnc_isModLoaded.sqf +++ b/addons/common/functions/fnc_isModLoaded.sqf @@ -8,6 +8,9 @@ * Return Value: * if modification is loaded * + * Example: + * ["class"] call ace_common_fnc_isModLoaded + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_isUnderwater.sqf b/addons/common/functions/fnc_isUnderwater.sqf index 637ed49f3d..f3f127d75f 100644 --- a/addons/common/functions/fnc_isUnderwater.sqf +++ b/addons/common/functions/fnc_isUnderwater.sqf @@ -8,6 +8,9 @@ * Return Value: * If unit's head is underwater * + * Example: + * [bob] call ace_common_fnc_isUnderwater + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_lightIntensityFromObject.sqf b/addons/common/functions/fnc_lightIntensityFromObject.sqf index a495897dea..6725a71580 100644 --- a/addons/common/functions/fnc_lightIntensityFromObject.sqf +++ b/addons/common/functions/fnc_lightIntensityFromObject.sqf @@ -7,7 +7,10 @@ * 1: Object that emits light * * Return Value: - * Brightest light level + * Brightest light level + * + * Example: + * [reciever, giver] call ace_common_fnc_lightIntensityFromObject * * Public: Yes */ diff --git a/addons/common/functions/fnc_loadPerson.sqf b/addons/common/functions/fnc_loadPerson.sqf index f8a4456b96..59c9af2c20 100644 --- a/addons/common/functions/fnc_loadPerson.sqf +++ b/addons/common/functions/fnc_loadPerson.sqf @@ -9,6 +9,9 @@ * Return Value: * the vehicle that the unitToBeloaded has been loaded in. Returns ObjNull if function failed * + * Example: + * [bob, kevin] call ace_common_fnc_loadPerson + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_loadPersonLocal.sqf b/addons/common/functions/fnc_loadPersonLocal.sqf index db0248a901..90cbd7da03 100644 --- a/addons/common/functions/fnc_loadPersonLocal.sqf +++ b/addons/common/functions/fnc_loadPersonLocal.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [bob, car, kevin] call ace_common_fnc_loadPersonLocal + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_loadSettingsFromProfile.sqf b/addons/common/functions/fnc_loadSettingsFromProfile.sqf index 46b0134740..9151d79cce 100644 --- a/addons/common/functions/fnc_loadSettingsFromProfile.sqf +++ b/addons/common/functions/fnc_loadSettingsFromProfile.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * call ace_common_fnc_loadSettingsFromProfile + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_loadSettingsLocalizedText.sqf b/addons/common/functions/fnc_loadSettingsLocalizedText.sqf index 3fe182b7e3..7ceffa04e7 100644 --- a/addons/common/functions/fnc_loadSettingsLocalizedText.sqf +++ b/addons/common/functions/fnc_loadSettingsLocalizedText.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * call ace_common_fnc_loadSettingsLocalizedText + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_loadSettingsOnServer.sqf b/addons/common/functions/fnc_loadSettingsOnServer.sqf index 4498c9d058..eaeac7d51d 100644 --- a/addons/common/functions/fnc_loadSettingsOnServer.sqf +++ b/addons/common/functions/fnc_loadSettingsOnServer.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * call ace_common_fnc_loadSettingsOnServer + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_moduleCheckPBOs.sqf b/addons/common/functions/fnc_moduleCheckPBOs.sqf index 23c9b7ffd3..f3a8c0902c 100644 --- a/addons/common/functions/fnc_moduleCheckPBOs.sqf +++ b/addons/common/functions/fnc_moduleCheckPBOs.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_common_fnc_moduleCheckPBOs + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_moduleLSDVehicles.sqf b/addons/common/functions/fnc_moduleLSDVehicles.sqf index a8e7c8c055..cecc8983a1 100644 --- a/addons/common/functions/fnc_moduleLSDVehicles.sqf +++ b/addons/common/functions/fnc_moduleLSDVehicles.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob, target, []] call ace_common_fnc_moduleLSDVehicles + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_monitor.sqf b/addons/common/functions/fnc_monitor.sqf index 8aef62895c..591e923d1b 100644 --- a/addons/common/functions/fnc_monitor.sqf +++ b/addons/common/functions/fnc_monitor.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [{code}] call ace_common_fnc_monitor + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_muteUnit.sqf b/addons/common/functions/fnc_muteUnit.sqf index 11c18aedd7..25106c979f 100644 --- a/addons/common/functions/fnc_muteUnit.sqf +++ b/addons/common/functions/fnc_muteUnit.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, "because"] call ace_common_fnc_muteUnit + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_muteUnitHandleInitPost.sqf b/addons/common/functions/fnc_muteUnitHandleInitPost.sqf index 53e8d4d5b7..4e6ac7cbaf 100644 --- a/addons/common/functions/fnc_muteUnitHandleInitPost.sqf +++ b/addons/common/functions/fnc_muteUnitHandleInitPost.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_common_fnc_muteUnitHandleInitPost + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_muteUnitHandleRespawn.sqf b/addons/common/functions/fnc_muteUnitHandleRespawn.sqf index ceb0614116..6e93e40ef6 100644 --- a/addons/common/functions/fnc_muteUnitHandleRespawn.sqf +++ b/addons/common/functions/fnc_muteUnitHandleRespawn.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_common_fnc_muteUnitHandleRespawn + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_numberToDigits.sqf b/addons/common/functions/fnc_numberToDigits.sqf index b90f0eefd7..d9aceb2426 100644 --- a/addons/common/functions/fnc_numberToDigits.sqf +++ b/addons/common/functions/fnc_numberToDigits.sqf @@ -9,6 +9,9 @@ * Return Value: * Digits. The maximum count is six digits. * + * Example: + * [5, 5] call ace_common_fnc_numberToDigits + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_numberToDigitsString.sqf b/addons/common/functions/fnc_numberToDigitsString.sqf index 7e2c78f8b4..9f19cfe3dc 100644 --- a/addons/common/functions/fnc_numberToDigitsString.sqf +++ b/addons/common/functions/fnc_numberToDigitsString.sqf @@ -4,11 +4,14 @@ * * Arguments: * 0: Number to 'digitize' - * 1: Set the minimal length of the returned string. Useful for getting left hand zeroes. (Number, optional) + * 1: Set the minimal length of the returned string. Useful for getting left hand zeroes. (Optional) * * Return Value: * Digits. The maximum length is six digits. * + * Example: + * [5, 5] call ace_common_fnc_numberToDigitsString + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_numberToString.sqf b/addons/common/functions/fnc_numberToString.sqf index 1cb2f521f8..8ca22bca88 100644 --- a/addons/common/functions/fnc_numberToString.sqf +++ b/addons/common/functions/fnc_numberToString.sqf @@ -8,6 +8,9 @@ * Return Value: * The number as string * + * Example: + * [5] call ace_common_fnc_numberToString + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_onAnswerRequest.sqf b/addons/common/functions/fnc_onAnswerRequest.sqf index 8c77719256..38f35f1968 100644 --- a/addons/common/functions/fnc_onAnswerRequest.sqf +++ b/addons/common/functions/fnc_onAnswerRequest.sqf @@ -3,10 +3,15 @@ * N/A * * Arguments: - * ? + * 0: Unit + * 1: ID? + * 2: Accepted * * Return Value: - * ? + * None + * + * Example: + * [bob, "ID", true] call ace_common_fnc_onAnswerRequest * * Public: No */ diff --git a/addons/common/functions/fnc_owned.sqf b/addons/common/functions/fnc_owned.sqf index e352795c5e..a8c3f737e7 100644 --- a/addons/common/functions/fnc_owned.sqf +++ b/addons/common/functions/fnc_owned.sqf @@ -6,7 +6,10 @@ * 0: Any object. * * Return Value: - * Is this object claimed by someone? + * Is this object claimed by someone? + * + * Example: + * [bob] call ace_common_fnc_owned * * Public: No */ diff --git a/addons/common/functions/fnc_playConfigSound3D.sqf b/addons/common/functions/fnc_playConfigSound3D.sqf index 236802538e..2631c30d06 100644 --- a/addons/common/functions/fnc_playConfigSound3D.sqf +++ b/addons/common/functions/fnc_playConfigSound3D.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * ["sound", [0,0,0], 5, 5] call ace_common_fnc_playConfigSound3D + * * Public: Yes */ #define DEBUG_MODE_FULL diff --git a/addons/common/functions/fnc_player.sqf b/addons/common/functions/fnc_player.sqf index 1a268515a7..54510be05e 100644 --- a/addons/common/functions/fnc_player.sqf +++ b/addons/common/functions/fnc_player.sqf @@ -9,6 +9,9 @@ * Return Value: * Player controlled unit * + * Example: + * [] call ace_common_fnc_player + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_playerSide.sqf b/addons/common/functions/fnc_playerSide.sqf index 3a7ce5bba9..dd6b7e8b2f 100644 --- a/addons/common/functions/fnc_playerSide.sqf +++ b/addons/common/functions/fnc_playerSide.sqf @@ -8,6 +8,9 @@ * Return Value: * current local side * + * Example: + * [] call ace_common_fnc_playerSide + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_positionToASL.sqf b/addons/common/functions/fnc_positionToASL.sqf index 267bbf2353..297e89ee2b 100644 --- a/addons/common/functions/fnc_positionToASL.sqf +++ b/addons/common/functions/fnc_positionToASL.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [1, 1, 1] call ace_common_fnc_positionToASL + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_progressBar.sqf b/addons/common/functions/fnc_progressBar.sqf index 7103dd08e4..37fb17190a 100644 --- a/addons/common/functions/fnc_progressBar.sqf +++ b/addons/common/functions/fnc_progressBar.sqf @@ -4,16 +4,16 @@ * Finish/Failure/Conditional are all passed [_args, _elapsedTime, _totalTime, _errorCode] * * Arguments: - * 0: NUMBER - Total Time (in game "time" seconds) - * 1: ARRAY - Arguments, passed to condition, fail and finish - * 2: CODE or STRING - On Finish: Code called or STRING raised as event. - * 3: CODE or STRING - On Failure: Code called or STRING raised as event. - * 4: STRING - (Optional) Localized Title - * 5: CODE - (Optional) Code to check each frame - * 6: ARRAY - (Optional) Exceptions for checking EFUNC(common,canInteractWith) + * 0: Total Time (in game "time" seconds) + * 1: Arguments, passed to condition, fail and finish + * 2: On Finish: Code called or STRING raised as event. + * 3: On Failure: Code called or STRING raised as event. + * 4: (Optional) Localized Title + * 5: Code to check each frame (Optional) + * 6: Exceptions for checking EFUNC(common,canInteractWith) (Optional) * * Return Value: - * Nothing + * None * * Example: * [5, [], {Hint "Finished!"}, {hint "Failure!"}, "My Title"] call ace_common_fnc_progressBar diff --git a/addons/common/functions/fnc_readSettingFromModule.sqf b/addons/common/functions/fnc_readSettingFromModule.sqf index b08ceb1bcd..21e7dc7e4b 100644 --- a/addons/common/functions/fnc_readSettingFromModule.sqf +++ b/addons/common/functions/fnc_readSettingFromModule.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * [MODULE, "Param", "paramname"] call ace_common_fnc_readSettingFromModule + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_receiveRequest.sqf b/addons/common/functions/fnc_receiveRequest.sqf index 1bb48428df..a3f10550af 100644 --- a/addons/common/functions/fnc_receiveRequest.sqf +++ b/addons/common/functions/fnc_receiveRequest.sqf @@ -3,11 +3,18 @@ * N/A * * Arguments: - * ? + * 0: caller + * 1: target + * 2: requestID + * 3: Message + * 4: callback (NOT USED) * * Return Value: * None * + * Example: + * [bob, kevin, "ID", "Message", {Callback}] call ace_common_fnc_recieveRequest + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_removeActionEventHandler.sqf b/addons/common/functions/fnc_removeActionEventHandler.sqf index 60e551590d..db711b77f4 100644 --- a/addons/common/functions/fnc_removeActionEventHandler.sqf +++ b/addons/common/functions/fnc_removeActionEventHandler.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [bob, "DefaultAction", 5] call ace_common_fnc_removeActionEventHandler + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_removeActionMenuEventHandler.sqf b/addons/common/functions/fnc_removeActionMenuEventHandler.sqf index 943e3b4e22..9fb8ee6588 100644 --- a/addons/common/functions/fnc_removeActionMenuEventHandler.sqf +++ b/addons/common/functions/fnc_removeActionMenuEventHandler.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [bob, "DefaultAction", 5] call ace_common_fnc_removeActionMenuEventHandler + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_removeCanInteractWithCondition.sqf b/addons/common/functions/fnc_removeCanInteractWithCondition.sqf index b267e84557..8c7c72d861 100644 --- a/addons/common/functions/fnc_removeCanInteractWithCondition.sqf +++ b/addons/common/functions/fnc_removeCanInteractWithCondition.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * ["ID"] call ace_common_fnc_removeCanInteractWithCondition + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_removeMapMarkerCreatedEventHandler.sqf b/addons/common/functions/fnc_removeMapMarkerCreatedEventHandler.sqf index 825281c3e0..bda7877a70 100644 --- a/addons/common/functions/fnc_removeMapMarkerCreatedEventHandler.sqf +++ b/addons/common/functions/fnc_removeMapMarkerCreatedEventHandler.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [5] call ace_common_fnc_removeMapMarkerCreatedEventHandler + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_removeSpecificMagazine.sqf b/addons/common/functions/fnc_removeSpecificMagazine.sqf index 4ca5eec6d7..73fe910673 100644 --- a/addons/common/functions/fnc_removeSpecificMagazine.sqf +++ b/addons/common/functions/fnc_removeSpecificMagazine.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [bob, "magazine", 5] call ace_common_fnc_removeSpecificMagazine + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_removeSyncedEventHandler.sqf b/addons/common/functions/fnc_removeSyncedEventHandler.sqf index 090ecf4320..f256c21203 100644 --- a/addons/common/functions/fnc_removeSyncedEventHandler.sqf +++ b/addons/common/functions/fnc_removeSyncedEventHandler.sqf @@ -6,7 +6,10 @@ * 0: Name * * Return Value: - * Boolean of success + * Boolean of success + * + * Example: + * ["bob"] call ace_common_fnc_removeSyncedEventHandler * * Public: No */ diff --git a/addons/common/functions/fnc_requestCallback.sqf b/addons/common/functions/fnc_requestCallback.sqf index 399f50466d..e28ff9439f 100644 --- a/addons/common/functions/fnc_requestCallback.sqf +++ b/addons/common/functions/fnc_requestCallback.sqf @@ -3,10 +3,13 @@ * N/A * * Arguments: - * ? + * ? * * Return Value: - * ? + * ? + * + * Example: + * [bob] call ace_common_fnc_requestCallback * * Public: No */ diff --git a/addons/common/functions/fnc_requestSyncedEvent.sqf b/addons/common/functions/fnc_requestSyncedEvent.sqf index e35c1e3645..fd277c4b36 100644 --- a/addons/common/functions/fnc_requestSyncedEvent.sqf +++ b/addons/common/functions/fnc_requestSyncedEvent.sqf @@ -6,7 +6,10 @@ * 0: eventName * * Return Value: - * Boolean of success + * Boolean of success + * + * Example: + * ["event"] call ace_common_fnc_requestSyncedEvent * * Public: No */ diff --git a/addons/common/functions/fnc_resetAllDefaults.sqf b/addons/common/functions/fnc_resetAllDefaults.sqf index 6432f3759e..367c72d5e9 100644 --- a/addons/common/functions/fnc_resetAllDefaults.sqf +++ b/addons/common/functions/fnc_resetAllDefaults.sqf @@ -3,10 +3,13 @@ * reset all variables that have been defined * * Arguments: - * ? + * 0: Unit * * Return Value: - * ? + * ? + * + * Example: + * [bob] call ace_common_fnc_resetAllDefaults * * Public: No */ diff --git a/addons/common/functions/fnc_restoreVariablesJIP.sqf b/addons/common/functions/fnc_restoreVariablesJIP.sqf index 39626514bb..921be28165 100644 --- a/addons/common/functions/fnc_restoreVariablesJIP.sqf +++ b/addons/common/functions/fnc_restoreVariablesJIP.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_common_fnc_restoreVariablesJIP + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_sendRequest.sqf b/addons/common/functions/fnc_sendRequest.sqf index a0c505c575..55a3da9873 100644 --- a/addons/common/functions/fnc_sendRequest.sqf +++ b/addons/common/functions/fnc_sendRequest.sqf @@ -5,13 +5,16 @@ * Arguments: * 0: caller * 1: target - * 2: requestID (STRING) - * 3: requestMessage Will be localized for other target object. (STRING) - * 4: callback Code called upon accept or decline. (CODE) + * 2: requestID + * 3: requestMessage Will be localized for other target object. + * 4: callback Code called upon accept or decline. * * Return Value: * None * + * Example: + * [bob, kevin, "ID", "Message", {callback}] call ace_common_fnc_sendRequest + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_setApproximateVariablePublic.sqf b/addons/common/functions/fnc_setApproximateVariablePublic.sqf index 549dea9eb4..e888efe3c2 100644 --- a/addons/common/functions/fnc_setApproximateVariablePublic.sqf +++ b/addons/common/functions/fnc_setApproximateVariablePublic.sqf @@ -9,7 +9,7 @@ * 3: Absolute tolerance * * Return Value: - * Nothing. + * None * * Example: * [player, "balls", 2, 0.1] call ace_common_fnc_setApproximateVariablePublic; diff --git a/addons/common/functions/fnc_setDefinedVariable.sqf b/addons/common/functions/fnc_setDefinedVariable.sqf index 6f1f0c2e58..70b8ef42e3 100644 --- a/addons/common/functions/fnc_setDefinedVariable.sqf +++ b/addons/common/functions/fnc_setDefinedVariable.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [bob, "var", 5] call ace_common_fnc_setDefinedVariable + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_setDisableUserInputStatus.sqf b/addons/common/functions/fnc_setDisableUserInputStatus.sqf index ec475f744f..b217570dac 100644 --- a/addons/common/functions/fnc_setDisableUserInputStatus.sqf +++ b/addons/common/functions/fnc_setDisableUserInputStatus.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * ["id", true] call ace_common_fnc_setDisableUserInputStatus + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_setName.sqf b/addons/common/functions/fnc_setName.sqf index 1b2b515ec2..e93e09c0f0 100644 --- a/addons/common/functions/fnc_setName.sqf +++ b/addons/common/functions/fnc_setName.sqf @@ -8,11 +8,15 @@ * Return Value: * None * + * Example: + * [bob] call ace_common_fnc_setName + * * Public: No */ #include "script_component.hpp" params ["_unit"]; +TRACE_3("setName",_unit,alive _unit,name _unit); if (isNull _unit || {!alive _unit}) exitWith {}; diff --git a/addons/common/functions/fnc_setParameter.sqf b/addons/common/functions/fnc_setParameter.sqf index b24e2506b5..723d49ea0c 100644 --- a/addons/common/functions/fnc_setParameter.sqf +++ b/addons/common/functions/fnc_setParameter.sqf @@ -4,11 +4,14 @@ * * Arguments: * 0: Parameter name - * 1: Value + * 1: Value * * Return Value: * None * + * Example: + * ["Name", 5] call ace_common_fnc_setParameter + * * Public: Yes * * Deprecated diff --git a/addons/common/functions/fnc_setPitchBankYaw.sqf b/addons/common/functions/fnc_setPitchBankYaw.sqf index fecc16208c..1b986c6445 100644 --- a/addons/common/functions/fnc_setPitchBankYaw.sqf +++ b/addons/common/functions/fnc_setPitchBankYaw.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * [bob, 1, 2, 3] call ace_common_fnc_setPitchBankYaw + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_setProne.sqf b/addons/common/functions/fnc_setProne.sqf index c40b0de254..8df8a4d900 100644 --- a/addons/common/functions/fnc_setProne.sqf +++ b/addons/common/functions/fnc_setProne.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_common_fnc_setProne + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_setSettingFromConfig.sqf b/addons/common/functions/fnc_setSettingFromConfig.sqf index ac7a0f4875..6308438ac8 100644 --- a/addons/common/functions/fnc_setSettingFromConfig.sqf +++ b/addons/common/functions/fnc_setSettingFromConfig.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [CONFIG] call ace_common_fnc_setSettingFromConfig + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_setVariableJIP.sqf b/addons/common/functions/fnc_setVariableJIP.sqf index 35e8c0d116..151d7b9925 100644 --- a/addons/common/functions/fnc_setVariableJIP.sqf +++ b/addons/common/functions/fnc_setVariableJIP.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [bob, "varname", 5] call ace_common_fnc_setVariableJIP + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_setVariablePublic.sqf b/addons/common/functions/fnc_setVariablePublic.sqf index 5eeff87aee..2eac69f6ce 100644 --- a/addons/common/functions/fnc_setVariablePublic.sqf +++ b/addons/common/functions/fnc_setVariablePublic.sqf @@ -9,7 +9,7 @@ * 3: Embargo delay (Optional. Default: 1) * * Return Value: - * Nothing. + * None * * Example: * [player, "balls", 2, 1] call ace_common_fnc_setVariablePublic; @@ -48,6 +48,7 @@ TRACE_2("Starting Embargo", _varName, _delay); //If value at start of embargo doesn't equal current, then broadcast and start new embargo if (!(_value isEqualTo _curValue)) then { + _this set [2, _curValue]; _this call FUNC(setVariablePublic); }; }, _this, _delay] call CBA_fnc_waitAndExecute; diff --git a/addons/common/functions/fnc_setVolume.sqf b/addons/common/functions/fnc_setVolume.sqf index 37e1f04cfa..5d7f349ce1 100644 --- a/addons/common/functions/fnc_setVolume.sqf +++ b/addons/common/functions/fnc_setVolume.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [true] call ace_common_fnc_setVolume + * * Public: Yes * * Note: Uses player diff --git a/addons/common/functions/fnc_showUser.sqf b/addons/common/functions/fnc_showUser.sqf index 2e7af12a3f..6c78e03f97 100644 --- a/addons/common/functions/fnc_showUser.sqf +++ b/addons/common/functions/fnc_showUser.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_common_fnc_showUser + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_statusEffect_addType.sqf b/addons/common/functions/fnc_statusEffect_addType.sqf index 2934f4ae98..c423db2393 100644 --- a/addons/common/functions/fnc_statusEffect_addType.sqf +++ b/addons/common/functions/fnc_statusEffect_addType.sqf @@ -8,7 +8,7 @@ * 2: Common Effect Reaons to pre-seed durring init * * Return Value: - * Nothing + * None * * Example: * ["setCaptive", true, []] call ace_common_fnc_statusEffect_addType diff --git a/addons/common/functions/fnc_statusEffect_localEH.sqf b/addons/common/functions/fnc_statusEffect_localEH.sqf index 5490029a3b..84f3e0e9a2 100644 --- a/addons/common/functions/fnc_statusEffect_localEH.sqf +++ b/addons/common/functions/fnc_statusEffect_localEH.sqf @@ -4,9 +4,10 @@ * * Arguments: * 0: vehicle that it will be attached to (player or vehicle) + * 1: isLocal * * Return Value: - * Nothing + * None * * Example: * [player, true] call ace_common_fnc_statusEffect_localEH @@ -19,7 +20,7 @@ params ["_object", "_isLocal"]; TRACE_2("params",_object,_isLocal); -//Only run this after the settings are initialized +//Only run this after the settings are initialized //Need to wait for all EH to be installed (local event will happen between pre and post init) if !(GVAR(settingsInitFinished)) exitWith { TRACE_1("pushing to runAtSettingsInitialized", _this); diff --git a/addons/common/functions/fnc_statusEffect_resetVariables.sqf b/addons/common/functions/fnc_statusEffect_resetVariables.sqf index 2a307c84e5..7f638bcbef 100644 --- a/addons/common/functions/fnc_statusEffect_resetVariables.sqf +++ b/addons/common/functions/fnc_statusEffect_resetVariables.sqf @@ -6,7 +6,7 @@ * 0: vehicle that it will be attached to (player or vehicle) * * Return Value: - * Nothing + * None * * Example: * [player, true] call ace_common_fnc_statusEffect_resetVariables diff --git a/addons/common/functions/fnc_statusEffect_respawnEH.sqf b/addons/common/functions/fnc_statusEffect_respawnEH.sqf index 92717b68c7..ba3058be19 100644 --- a/addons/common/functions/fnc_statusEffect_respawnEH.sqf +++ b/addons/common/functions/fnc_statusEffect_respawnEH.sqf @@ -6,7 +6,7 @@ * 0: vehicle that it will be attached to (player or vehicle) * * Return Value: - * Nothing + * None * * Example: * [player, objNull] call ace_common_fnc_statusEffect_respawnEH @@ -19,7 +19,7 @@ params ["_object"]; TRACE_1("params",_object); -//Only run this after the settings are initialized +//Only run this after the settings are initialized //Need to wait for all EH to be installed (local event will happen between pre and post init) if !(GVAR(settingsInitFinished)) exitWith { TRACE_1("pushing to runAtSettingsInitialized", _this); diff --git a/addons/common/functions/fnc_statusEffect_sendEffects.sqf b/addons/common/functions/fnc_statusEffect_sendEffects.sqf index f82ab10427..0945fc3424 100644 --- a/addons/common/functions/fnc_statusEffect_sendEffects.sqf +++ b/addons/common/functions/fnc_statusEffect_sendEffects.sqf @@ -7,7 +7,7 @@ * 1: Effect name (or "" to send all) * * Return Value: - * Nothing + * None * * Example: * [player, ""] call ace_common_fnc_statusEffect_sendEffects diff --git a/addons/common/functions/fnc_statusEffect_set.sqf b/addons/common/functions/fnc_statusEffect_set.sqf index a0be8d8719..4908da5395 100644 --- a/addons/common/functions/fnc_statusEffect_set.sqf +++ b/addons/common/functions/fnc_statusEffect_set.sqf @@ -9,7 +9,7 @@ * 3: Is Set (true adds/false removes) * * Return Value: - * Nothing + * None * * Example: * [player, "setCaptive", "reason1", true] call ace_common_fnc_statusEffect_set diff --git a/addons/common/functions/fnc_stringCompare.sqf b/addons/common/functions/fnc_stringCompare.sqf index ad3073eb1e..b14eedb653 100644 --- a/addons/common/functions/fnc_stringCompare.sqf +++ b/addons/common/functions/fnc_stringCompare.sqf @@ -7,7 +7,10 @@ * 1: stringB * * Return Value: - * Number of matching characters >NUMBER> + * Number of matching characters + * + * Example: + * ["a", "b"] call ace_common_fnc_stringCompare * * Public: Yes */ diff --git a/addons/common/functions/fnc_stringToColoredText.sqf b/addons/common/functions/fnc_stringToColoredText.sqf index e6e19e4869..c072da9253 100644 --- a/addons/common/functions/fnc_stringToColoredText.sqf +++ b/addons/common/functions/fnc_stringToColoredText.sqf @@ -9,6 +9,9 @@ * Return Value: * Text * + * Example: + * ["text", [0, 1, 2]] call ace_common_fnc_stringToColoredText + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_switchToGroupSide.sqf b/addons/common/functions/fnc_switchToGroupSide.sqf index 3a559a7a65..914c12034f 100644 --- a/addons/common/functions/fnc_switchToGroupSide.sqf +++ b/addons/common/functions/fnc_switchToGroupSide.sqf @@ -11,11 +11,14 @@ * Return Value: * None * + * Example: + * [bob, true, "id", SIDE] call ace_common_fnc_switchToGroupSide + * * Public: Yes */ #include "script_component.hpp" -params [["_unit", objNull], ["_switch", false], ["_id", ""], ["_side", side _unit]]; +params [["_unit", objNull], ["_switch", false], ["_id", ""], ["_side", sideUnknown]]; private _previousGroupsList = _unit getVariable [QGVAR(previousGroupSwitchTo), []]; diff --git a/addons/common/functions/fnc_syncedEvent.sqf b/addons/common/functions/fnc_syncedEvent.sqf index 4a364bf730..a6a7fb30e3 100644 --- a/addons/common/functions/fnc_syncedEvent.sqf +++ b/addons/common/functions/fnc_syncedEvent.sqf @@ -10,6 +10,9 @@ * Return Value: * Boolean of success * + * Example: + * ["bob", [args], 5] call ace_common_fnc_syncedEvent + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_syncedEventPFH.sqf b/addons/common/functions/fnc_syncedEventPFH.sqf index 8fcd143536..c35be73d5c 100644 --- a/addons/common/functions/fnc_syncedEventPFH.sqf +++ b/addons/common/functions/fnc_syncedEventPFH.sqf @@ -1,5 +1,5 @@ /* - * Author: ? + * Author: ACE-Team * * ? * @@ -7,9 +7,12 @@ * ? * * Return Value: - * ? + * None * - * Public: ? + * Example: + * [?] call ace_common_fnc_syncedEventPFH + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_throttledPublicVariable.sqf b/addons/common/functions/fnc_throttledPublicVariable.sqf index 3aaa3c8f47..7d86a75a29 100644 --- a/addons/common/functions/fnc_throttledPublicVariable.sqf +++ b/addons/common/functions/fnc_throttledPublicVariable.sqf @@ -27,7 +27,7 @@ if (isNil QGVAR(publishSchedId)) then { GVAR(publishSchedId) = [{ if (diag_tickTime > GVAR(publishNextTime)) then { { - _x params [_unit, _varName]; + _x params ["_unit", "_varName"]; _unit setVariable [_varName, _unit getVariable _varName, true]; false } count GVAR(publishVarNames); diff --git a/addons/common/functions/fnc_toBin.sqf b/addons/common/functions/fnc_toBin.sqf index f8ec0bac68..f3e08711a7 100644 --- a/addons/common/functions/fnc_toBin.sqf +++ b/addons/common/functions/fnc_toBin.sqf @@ -8,6 +8,9 @@ * Return Value: * A binary number as string * + * Example: + * [5] call ace_common_fnc_toBin + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_toBitmask.sqf b/addons/common/functions/fnc_toBitmask.sqf index 333e5c737b..ac5b7f056e 100644 --- a/addons/common/functions/fnc_toBitmask.sqf +++ b/addons/common/functions/fnc_toBitmask.sqf @@ -8,6 +8,9 @@ * Return Value: * Bitmask * + * Example: + * [[true, false]] call ace_common_fnc_toBitmask + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_toHex.sqf b/addons/common/functions/fnc_toHex.sqf index c558aab04b..2c82c1c4a3 100644 --- a/addons/common/functions/fnc_toHex.sqf +++ b/addons/common/functions/fnc_toHex.sqf @@ -8,6 +8,9 @@ * Return Value: * A hexadecimal number as string * + * Example: + * [154] call ace_common_fnc_toHex + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_toNumber.sqf b/addons/common/functions/fnc_toNumber.sqf index c375dfb02e..eeede0813b 100644 --- a/addons/common/functions/fnc_toNumber.sqf +++ b/addons/common/functions/fnc_toNumber.sqf @@ -6,7 +6,7 @@ * 0: Value to attempt to convert to number or if number simply return number. * * Return Value: - * + * Number * * Example: * number = ["102"] call ace_common_fnc_toNumber; diff --git a/addons/common/functions/fnc_translateToModelSpace.sqf b/addons/common/functions/fnc_translateToModelSpace.sqf index 309387086f..0d7a5551fc 100644 --- a/addons/common/functions/fnc_translateToModelSpace.sqf +++ b/addons/common/functions/fnc_translateToModelSpace.sqf @@ -1,14 +1,17 @@ /* - * Author: ? + * Author: ACE-Team * ? * * Arguments: - * ? + * * * Return Value: - * ? + * Something * - * Public: ? + * Example: + * [UNKNOWN] call ace_common_fnc_translateToModelSpace + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_translateToWeaponSpace.sqf b/addons/common/functions/fnc_translateToWeaponSpace.sqf index fab3fe6a3c..af3abddb74 100644 --- a/addons/common/functions/fnc_translateToWeaponSpace.sqf +++ b/addons/common/functions/fnc_translateToWeaponSpace.sqf @@ -1,14 +1,17 @@ /* - * Author: ? + * Author: ACE-Team * ? * * Arguments: - * ? + * * * Return Value: - * ? + * Unknown * - * Public: ? + * Example: + * [UNKOWN] call ace_common_fnc_translateToWeaponSpace + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_uniqueElements.sqf b/addons/common/functions/fnc_uniqueElements.sqf index 471ba47457..62a68a71ff 100644 --- a/addons/common/functions/fnc_uniqueElements.sqf +++ b/addons/common/functions/fnc_uniqueElements.sqf @@ -8,6 +8,9 @@ * Return Value: * Copy of original array * + * Example: + * [[array]] call ace_common_fnc_uniqueElements + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_unloadPersonLocal.sqf b/addons/common/functions/fnc_unloadPersonLocal.sqf index dbc28dc977..ed5b8dc020 100644 --- a/addons/common/functions/fnc_unloadPersonLocal.sqf +++ b/addons/common/functions/fnc_unloadPersonLocal.sqf @@ -10,6 +10,9 @@ * Return Value: * Returns true if succesfully unloaded person * + * Example: + * [bob, car, bob] call ace_common_fnc_unloadpersonLocal + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_unmuteUnit.sqf b/addons/common/functions/fnc_unmuteUnit.sqf index b6d673cfd5..7d81ae7346 100644 --- a/addons/common/functions/fnc_unmuteUnit.sqf +++ b/addons/common/functions/fnc_unmuteUnit.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, "because"] call ace_common_fnc_unmuteUnit + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_useItem.sqf b/addons/common/functions/fnc_useItem.sqf index 2d2116b38f..3accecc429 100644 --- a/addons/common/functions/fnc_useItem.sqf +++ b/addons/common/functions/fnc_useItem.sqf @@ -9,6 +9,9 @@ * Return Value: * if item has been used. * + * Example: + * [bob, "gun"] call ace_common_fnc_useItem + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_useMagazine.sqf b/addons/common/functions/fnc_useMagazine.sqf index 4dc6136fa6..646d461d21 100644 --- a/addons/common/functions/fnc_useMagazine.sqf +++ b/addons/common/functions/fnc_useMagazine.sqf @@ -9,6 +9,9 @@ * Return Value: * if magazine has been used. * + * Example: + * [bob, "magazine"] call ace_common_fnc_useMagazine + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/common/functions/fnc_watchVariable.sqf b/addons/common/functions/fnc_watchVariable.sqf index 931450bd22..300a5ef195 100644 --- a/addons/common/functions/fnc_watchVariable.sqf +++ b/addons/common/functions/fnc_watchVariable.sqf @@ -14,7 +14,7 @@ * 0: Number of structured text lines (default: 1) * * Return Value: - * Nothing + * None * * Example: * ["CBA_missionTime"] call ace_common_fnc_watchVariable; // Uses title as code diff --git a/addons/common/functions/fnc_waveHeightAt.sqf b/addons/common/functions/fnc_waveHeightAt.sqf index c140b1ce94..1a9049b491 100644 --- a/addons/common/functions/fnc_waveHeightAt.sqf +++ b/addons/common/functions/fnc_waveHeightAt.sqf @@ -3,11 +3,13 @@ * Gets the wave height at a specific location. Uses a logic, so may be performance iffy * * Arguments: - * 0: Position ASL to get height at + * 0: Position ASL to get height at * * Return Value: - * Wave height in meters + * Wave height in meters * + * Example: + * [[5, 2, 5]]] call ace_common_fnc_waveHeightAt * * Public: No */ diff --git a/addons/common/functions/fnc_worldToScreenBounds.sqf b/addons/common/functions/fnc_worldToScreenBounds.sqf index 77df6e47bf..42ffa27317 100644 --- a/addons/common/functions/fnc_worldToScreenBounds.sqf +++ b/addons/common/functions/fnc_worldToScreenBounds.sqf @@ -19,6 +19,9 @@ * 2: Maximal X * 3: Maximal Y * + * Example: + * [bob, [5, 5, 5], [6, 6, 6]] call ace_common_fnc_worldToScreenBounds + * * Public: No */ #include "script_component.hpp" diff --git a/addons/common/script_component.hpp b/addons/common/script_component.hpp index af8e0a5229..66f7ac63bf 100644 --- a/addons/common/script_component.hpp +++ b/addons/common/script_component.hpp @@ -19,3 +19,16 @@ #define VERSION_CONFIG_COMMON VERSION_CONFIG;\ versionDesc = "ACE 3";\ versionAct = QUOTE(call COMPILE_FILE(init_versionTooltip)) + + +#define DIG_SURFACE_BLACKLIST [ \ + "concrete", "concrete_exp", "concrete_int", "int_concrete", "int_concrete_exp", \ + "pavement_exp", "int_pavement_exp", \ + "tiling", "tiles_int", "int_tiles", \ + "roof_tin", "roof_tiles", "rooftiles_exp", \ + "tarmac", "asphalt_exp", \ + "stones_exp", "rock", "stony", \ + "metal", "gridmetal_exp", "metalplate_exp", "int_metalplate_exp", "metal_int", "wavymetal", "wavymetal_exp", "int_metal", "steel_exp", \ + "lino_exp", "int_lino_exp", "int_mat_exp", \ + "wood", "wood_int", "int_wood", "softwood_exp", "int_softwood_exp", "int_solidwood_exp" \ +] diff --git a/addons/common/scripts/checkVersionNumber.sqf b/addons/common/scripts/checkVersionNumber.sqf index 6267ed08b2..f407ed57b0 100644 --- a/addons/common/scripts/checkVersionNumber.sqf +++ b/addons/common/scripts/checkVersionNumber.sqf @@ -74,7 +74,7 @@ if (!isServer) then { } forEach _files; // display and log error messages - _fnc_cutComma = { + private _fnc_cutComma = { _string = _this; _string = toArray _string; diff --git a/addons/common/stringtable.xml b/addons/common/stringtable.xml index 10a6141686..94c723567f 100644 --- a/addons/common/stringtable.xml +++ b/addons/common/stringtable.xml @@ -14,6 +14,8 @@ ACE-Team ACE-Team ACE-Team + ACE-製作團隊 + ACE-制作团队 Save @@ -28,6 +30,8 @@ Salva 保存 저장 + 儲存 + 储存 Cancel @@ -42,6 +46,8 @@ Annulla 中止 취소 + 取消 + 取消 ACE Options @@ -56,6 +62,8 @@ Opzioni ACE ACE オプション ACE 옵션 + ACE設定選項 + ACE设定选项 @@ -69,8 +77,10 @@ N É N - N + + + NNE @@ -83,8 +93,10 @@ NNE ÉÉK NNE - NNE + 北北東 북북동 + 北北東 + 北北东 NE @@ -97,8 +109,10 @@ NE ÉK NE - NE + 北東 북동 + 東北 + 东北 ENE @@ -111,8 +125,10 @@ LNE KÉK ENE - ENE + 東北東 동북동 + 東北東 + 东北东 E @@ -125,8 +141,10 @@ L K E - E + + + ESE @@ -139,8 +157,10 @@ LSE KDK ESE - ESE + 東南東 동남동 + 東南東 + 东南东 SE @@ -153,8 +173,10 @@ SE DK SE - SE + 南東 남동 + 東南 + 东南 SSE @@ -167,8 +189,10 @@ SSE DDK SSE - SSE + 南南東 남남동 + 南南東 + 南南东 S @@ -181,8 +205,10 @@ S D S - S + + + SSW @@ -195,8 +221,10 @@ SSO DDNy SSO - SSW + 南南西 남남서 + 南南西 + 南南西 SW @@ -209,8 +237,10 @@ SO DNy SO - SW + 南西 남서 + 西南 + 西南 WSW @@ -223,8 +253,10 @@ OSO NyDNy OSO - WSW + 西南西 서남서 + 西南西 + 西南西 W @@ -237,8 +269,10 @@ O Ny O - W + 西 + 西 + 西 WNW @@ -251,8 +285,10 @@ ONO NyÉNy ONO - WNW + 北北西 서북서 + 西北西 + 西北西 NW @@ -265,8 +301,10 @@ NO ÉNy NO - NW + 北西 북서 + 西北 + 西北 NNW @@ -279,8 +317,10 @@ NNO ÉÉNy NNO - NNW + 北北西 북북서 + 北北西 + 北北西 Action cancelled. @@ -295,6 +335,8 @@ Azione cancellata. 動作を中止した。 행동 취소됨. + 動作已被取消 + 动作已被取消 [ACE] Miscellaneous Items @@ -309,6 +351,8 @@ [ACE] Oggetti vari [ACE] その他のアイテム [ACE] 기타 물품. + [ACE] 雜項 + [ACE] 杂项 Disable Command Menu @@ -323,6 +367,8 @@ Desabilitar menu de comando 指揮メニューを無効化 지휘 메뉴 종료 + 關閉命令選單 + 关闭命令选单 Unknown @@ -337,6 +383,8 @@ Desconhecido 不明 알 수 없음 + 未知的 + 未知的 No Voice @@ -351,6 +399,8 @@ Sem voz 音声なし 무음 + 沒聲音 + 没声音 Accept Requests @@ -365,6 +415,8 @@ Accetta la richiesta 要求を受け入れ 요청 수락 + 接受請求 + 接受请求 Decline Requests @@ -379,6 +431,8 @@ Rifiuta la richiesta 要求を拒否 요청 거부 + 拒絕請求 + 拒绝请求 Accept Requests send by other players. These can be requests to use / share equipment, perform certain actions. @@ -393,6 +447,8 @@ Aceitar pedidos enviados por outros jogadores. Podem ser pedidos para usar/ compartilhar equipamento, realizar certas ações. 他プレイヤからの要求を許可します。他プレイヤは装備を共有し、使うなど特定の動作を行えます。 다른 플레이어가 보내온 요청을 수락합니다. 이것은 장비 사용 / 공유 요청, 특정 작업 수행 등이 될 수 있습니다. + 接受由其他玩家送出的請求. 包含使用/共享裝備與執行特定動作 + 接受由其他玩家送出的请求. 包含使用/共享装备与执行特定动作 Decline Requests send by other players. These can be requests to use / share equipment, perform certain actions. @@ -407,6 +463,8 @@ Rejeita pedidos enviados por outros jogadores. Podem ser pedidos para usar/ compartilhar equipamento, realizar certas ações. 他プレイヤからの要求を拒否します。他プレイヤは装備を共有し、使うなど特定の動作をできません。 다른 플레이어가 보내온 요청을 거부합니다. 이것은 장비 사용 / 공유 요청, 특정 작업 수행 등이 될 수 있습니다. + 拒絕由其他玩家送出的請求. 包含使用/共享裝備與執行特定動作 + 拒绝由其他玩家送出的请求. 包含使用/共享装备与执行特定动作 Feedback icons @@ -421,6 +479,8 @@ Ícones de Feedback フィードバック アイコン 피드백 아이콘 + 回饋圖標 + 回馈图标 Select the position of or disable the feedback icons on your screen. These icons will show to provide extra feedback on your character status and actions performed. @@ -435,6 +495,8 @@ 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. 画面上に表示するフィードバック アイコンの位置や無効化を選択できます。このアイコンは自キャラクター状態や動作の状況をフィードバックするために表示されています。 피드백 아이콘의 위치를 설정하거나 비활성화합니다. 피드백 아이콘은 캐릭터의 상세정보와 행동을 보여줍니다. + 選擇位置或取消回饋圖標顯示在螢幕上. 這些圖標將顯示出你角色額外的狀態與行動等資訊. + 选择位置或取消回馈图标显示在荧幕上. 这些图标将显示出你角色额外的状态与行动等资讯. Progress bar location @@ -449,6 +511,8 @@ Local da barra de progresso プログレス バーの位置 진행 막대의 위치 + 進度欄位置 + 进度栏位置 Set the desired location of the progress bar on your screen. @@ -463,6 +527,8 @@ Define o local desejado da barra de progresso na sua tela. 画面上に表示されるプログレス バーの位置を設定できます。 진행 막대를 원하는 곳에 배치합니다. + 設定進度欄在畫面中的位置 + 设定进度栏在画面中的位置 Hint Background color @@ -477,6 +543,8 @@ Cor do fundo da hint ヒントの背景色 힌트 배경색 + 提示的背景顏色 + 提示的背景颜色 The color of the background from the ACE hints. @@ -491,6 +559,8 @@ A cor de fundo das hints do ACE. ACE によるヒントの背景色を指定します。 ACE힌트의 배경색을 정합니다. + 設定ACE提示的背景顏色. + 设定ACE提示的背景颜色. Hint text font color @@ -505,6 +575,8 @@ Cor do do texto da hint ヒント文章の色 힌트 글씨색 + 提示文字的顏色 + 提示文字的颜色 The color of the text font from the ACE hints. This color is the default color for all text displayed through the ACE Hint system, if the hint text has no other color specified. @@ -519,6 +591,8 @@ 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. ACE によるヒントの文章へ、色を設定できます。この色は ACE ヒント システムを介して表示される全文章の色と標準でなっており、特定の色を設定していても、標準色になります。 ACE 힌트에 쓰이는 글씨 색입니다. 힌트 글씨의 색이 정해지지 않을경우 모든 힌트의 색은 기본으로 설정됩니다. + 設定ACE提示文字的顏色. 若提示字體並無指定其他顏色, 將會自動選用ACE系統的預設顏色 + 设定ACE提示文字的颜色. 若提示字体并无指定其他颜色, 将会自动选用ACE系统的预设颜色 Banana @@ -533,6 +607,8 @@ Banana 甘蕉 바나나 + 香蕉 + 香蕉 A banana is an edible fruit, botanically a berry, produced by several kinds of large herbaceous flowering plants in the genus Musa. @@ -547,6 +623,8 @@ A banana é uma fruta comestível, botanicamente uma baga, produzida por vários tipos de plantas herbáceas grandes do genero Musa. 甘蕉は食べられる果物でバショウ科バショウ属のうち、果実を食用とする品種群の総称。また、その果実のこと。いくつかの原種から育種された多年草。種によっては熟すまでは毒を持つものもある。 바나나는 식용 과일로써 식물학적으로 열매류이며 여러 종류의 개화가능한 초본의 파초과로 부터 생산됩니다. + 香蕉(學名: Musa × paradisiaca), 為芭蕉科芭蕉屬小果野蕉及野蕉的人工栽培雜交種, 為多年生草本植物. 果實長有棱; 果皮黃色, 果肉白色, 味道香甜. 主要生長在熱帶、亞熱帶地區. 原產於亞洲東南部熱帶、亞熱帶地區. + 香蕉(学名: Musa × paradisiaca), 为芭蕉科芭蕉属小果野蕉及野蕉的人工栽培杂交种, 为多年生草本植物. 果实长有棱; 果皮黄色, 果肉白色, 味道香甜. 主要生长在热带、亚热带地区. 原产于亚洲东南部热带、亚热带地区. Check PBOs @@ -561,6 +639,8 @@ Controlla PBO PBO を検査 PBO 검사 + 檢查PBO檔 + 检查PBO档 Check addon integrity with server and do selected action if an addon is missing. @@ -574,6 +654,8 @@ Controlla l'integrità degli addon con il server ed esegui l'azione selezionata se un addon è mancante サーバがアドオンの整合性を検査し、もし不備があれば実行する動作を選択できます。 서버 에드온의 무결성을 검사하고 사라진 에드온이 있을경우 행동을 선택합니다. + 檢查客戶端與伺服器端的模組清單是否一致且完整, 並提供訊息表示遺失的模組. + 检查客户端与伺服器端的模组清单是否一致且完整, 并提供讯息表示遗失的模组. Action @@ -588,6 +670,8 @@ Azione 動作 작동 + 動作 + 动作 What to do with people who do not have the right PBOs? @@ -602,6 +686,8 @@ Cosa fare con giocatori che non hanno i PBO corretti? プレイヤーが正しい PBO を持っていない場合は? 올바르지 않는 PBO를 가진 사람을 어떻게 할까요? + 若玩家沒有正確的PBO檔時, 將採取何種動作? + 若玩家没有正确的PBO档时, 将采取何种动作? Warn once @@ -616,6 +702,8 @@ Avverti una volta 一度の警告 경고 한 번 + 警告 (一次) + 警告 (一次) Warn (permanent) @@ -630,6 +718,8 @@ Avverti (permanente) 警告(永久的) 경고 (영구적) + 警告 (持續) + 警告 (持续) Kick @@ -644,6 +734,8 @@ Kick 排除 추방 + 踢除 + 踢除 Check all addons @@ -658,6 +750,8 @@ Controlla tutti gli addon 全アドオンを検査 모든 에드온 검사 + 檢查所有模組 + 检查所有模组 Check all addons instead of only those of ACE? @@ -672,6 +766,8 @@ Controlla tutti gli addon invece dei soli addon ACE? ACE MOD の代わりに全アドオンを検査しますか? ACE를 제외한 모든 모드를 검사할까요? + 檢查包含ACE之外的其他模組? + 检查包含ACE之外的其他模组? Whitelist @@ -686,6 +782,8 @@ Lista Bianca 許可制 화이트리스트 + 白名單 + 白名单 What addons are allowed regardless? @@ -700,6 +798,8 @@ Quali addon sono permessi in ogni caso? どのようなアドオンを許可しますか? 허가되는 에드온은 어느것입니까? + 哪些模組是可被允許/忽略的? + 哪些模组是可被允许/忽略的? LSD Vehicles @@ -714,6 +814,8 @@ Veicoli LSD LSD 車両 LSD 차량 + 迷幻載具 + 迷幻载具 Adds LSD effect to synchronized vehicle @@ -728,6 +830,8 @@ Aggiunge effetti LSD ai veicoli sincronizzati 同期されたオブジェクトに LSD の効果を追加します 동기화된 차량에 LSD효과를 추가합니다. + 使被同步的載具產生瘋狂的迷幻效果. (後果自負) + 使被同步的载具产生疯狂的迷幻效果. (后果自负) Toggle Handheld Device @@ -742,6 +846,8 @@ Apri dispositivo palmare デバイスを常に表示 휴대장치 토글 + 切換手持裝備 + 切换手持装备 Close Handheld Device @@ -756,6 +862,8 @@ Chiudi dispositivo palmare デバイスを閉じる 휴대장치 닫기 + 關閉手持裝備 + 关闭手持装备 Cycle Handheld Devices @@ -770,6 +878,8 @@ Cicla tra dispositivi palmari 表示するデバイスを変える 휴대장치 순환 + 循環切換手持裝備 + 循环切换手持装备 Disabled @@ -783,6 +893,8 @@ Desactivado 無効化 비활성화 + 停用 + 停用 Enabled @@ -796,6 +908,8 @@ Activado 有効化 활성화 + 啟用 + 启用 Yes @@ -810,6 +924,8 @@ Si はい + + No @@ -824,6 +940,8 @@ No いいえ 아니오 + + Vehicles only @@ -837,6 +955,8 @@ Vehicules seulement 車両のみ 차량 전용 + 只有載具 + 只有载具 Do Not Force @@ -850,6 +970,8 @@ Ne pas forcer 強制しない 강제하지 말것 + 不要強行 + 不要强行 ACE3 Equipment @@ -863,6 +985,8 @@ ACE3 Equipement ACE3 装備 ACE3 장비 + ACE3 裝備按鍵 + ACE3 装备按键 ACE3 Common @@ -876,6 +1000,8 @@ ACE3 Commun ACE3 全般 ACE3 일반 + ACE3 通用按鍵 + ACE3 通用按键 ACE3 Weapons @@ -889,6 +1015,8 @@ ACE3 Armes ACE3 武器 ACE3 무기 + ACE3 武器按鍵 + ACE3 武器按键 ACE3 Movement @@ -902,6 +1030,8 @@ ACE3 Mouvement ACE3 移動 ACE3 움직임 + ACE3 動作按鍵 + ACE3 动作按键 ACE3 Scope Adjustment @@ -915,6 +1045,8 @@ ACE3 Ajustement de la lunette ACE3 スコープ調節 ACE3 조준경 조정 + ACE3 瞄準鏡調節按鍵 + ACE3 瞄准镜调节按键 ACE3 Vehicles @@ -928,6 +1060,8 @@ ACE3 Vehicules ACE3 車両 ACE3 차량 + ACE3 載具按鍵 + ACE3 载具按键 No Room to unload @@ -940,6 +1074,24 @@ Sem espaço para descarregar Нет места для выгрузки 降ろすための空間がありません + 沒有空間可卸載 + 没有空间可卸载 + + + Toggle + переключить + переключить + Basculer + Cambiar + Cambia + Umschalten + pecek + přep. + alternar + トグル + 토글 + 切換 + 切换 diff --git a/addons/concertina_wire/XEH_init.sqf b/addons/concertina_wire/XEH_init.sqf index dc6424f172..b24353b4df 100644 --- a/addons/concertina_wire/XEH_init.sqf +++ b/addons/concertina_wire/XEH_init.sqf @@ -1,3 +1,3 @@ #include "script_component.hpp" params ["_wire"]; -_wire addEventHandler ["HandleDamage", FUNC(handleDamage)]; +_wire addEventHandler ["HandleDamage", {call FUNC(handleDamage)}]; diff --git a/addons/concertina_wire/functions/fnc_deploy.sqf b/addons/concertina_wire/functions/fnc_deploy.sqf index 67b3584de2..6dc05b365d 100644 --- a/addons/concertina_wire/functions/fnc_deploy.sqf +++ b/addons/concertina_wire/functions/fnc_deploy.sqf @@ -10,11 +10,14 @@ * Return Value: * None * + * Example: + * [coil, bob] call ace_concertina_wire_fnc_deploy + * * Public: No */ #include "script_component.hpp" -PARAMS_2(_wirecoil,_unit); +params ["_wirecoil", "_unit"]; private _wireNoGeo = "ACE_ConcertinaWireNoGeo" createVehicle [0,0,0]; { diff --git a/addons/concertina_wire/functions/fnc_dismount.sqf b/addons/concertina_wire/functions/fnc_dismount.sqf index f2d3bc76c1..ef32431292 100644 --- a/addons/concertina_wire/functions/fnc_dismount.sqf +++ b/addons/concertina_wire/functions/fnc_dismount.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [wire, bob] call ace_concertina_wire_fnc_dismount + * * Public: No */ #include "script_component.hpp" diff --git a/addons/concertina_wire/functions/fnc_dismountSuccess.sqf b/addons/concertina_wire/functions/fnc_dismountSuccess.sqf index a3f5081271..d730fbb4b6 100644 --- a/addons/concertina_wire/functions/fnc_dismountSuccess.sqf +++ b/addons/concertina_wire/functions/fnc_dismountSuccess.sqf @@ -9,11 +9,14 @@ * Return Value: * None * + * Example: + * [wire] call ace_concertina_wire_fnc_dismountSuccess + * * Public: No */ #include "script_component.hpp" -PARAMS_1(_wire); +params ["_wire"]; { _wire animate [_x, 1]; diff --git a/addons/concertina_wire/functions/fnc_handleDamage.sqf b/addons/concertina_wire/functions/fnc_handleDamage.sqf index 43a04641dd..d4f2555546 100644 --- a/addons/concertina_wire/functions/fnc_handleDamage.sqf +++ b/addons/concertina_wire/functions/fnc_handleDamage.sqf @@ -13,6 +13,9 @@ * Return Value: * None * + * Example: + * [wire, "selection", 5, source, "scrap"] call ace_concertina_wire_fnc_handleDamage + * * Public: No */ #include "script_component.hpp" diff --git a/addons/concertina_wire/functions/fnc_handleKilled.sqf b/addons/concertina_wire/functions/fnc_handleKilled.sqf index 7fb5ef6e1b..6649f5c3b6 100644 --- a/addons/concertina_wire/functions/fnc_handleKilled.sqf +++ b/addons/concertina_wire/functions/fnc_handleKilled.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [wire, car] call ace_concertina_wire_fnc_handleKilled + * * Public: No */ #include "script_component.hpp" diff --git a/addons/concertina_wire/functions/fnc_vehicleDamage.sqf b/addons/concertina_wire/functions/fnc_vehicleDamage.sqf index e5732f7000..7d84d4b244 100644 --- a/addons/concertina_wire/functions/fnc_vehicleDamage.sqf +++ b/addons/concertina_wire/functions/fnc_vehicleDamage.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [wire, car] call ace_concertina_wire_fnc_vehicleDamage + * * Public: No */ #include "script_component.hpp" diff --git a/addons/concertina_wire/stringtable.xml b/addons/concertina_wire/stringtable.xml index 2bc0005a35..6c510c56b7 100644 --- a/addons/concertina_wire/stringtable.xml +++ b/addons/concertina_wire/stringtable.xml @@ -14,6 +14,8 @@ Arame farpado 鉄条網 철조망 + 鐵絲網 + 铁丝网 Concertina Wire Coil @@ -28,6 +30,8 @@ Bobina de arame farpado 鉄条網コイル 윤형 철조망 + 鐵絲網捲 + 铁丝网卷 Dismount Concertina Wire @@ -42,6 +46,8 @@ Desmontar arame farpado 鉄条網をほどく 철조망 해체 + 卸下鐵絲網 + 卸下铁丝网 Deploy Concertina Wire @@ -56,6 +62,8 @@ Colocar arame farpado 鉄条網を置く 철조망 배치 + 佈署鐵絲網 + 布署铁丝网 diff --git a/addons/cookoff/CfgSFX.hpp b/addons/cookoff/CfgSFX.hpp index 0e10644729..0d670ead86 100644 --- a/addons/cookoff/CfgSFX.hpp +++ b/addons/cookoff/CfgSFX.hpp @@ -1,9 +1,18 @@ class CfgSFX { - class GVAR(CookOff) { - name = QGVAR(cookoff); - sounds[] = {QGVAR(cookoff)}; - GVAR(cookoff)[] = {PATHTOF(sounds\cookoff.wss),6,1.8,400,1,0,0,0}; + class GVAR(CookOff_low) { + name = QGVAR(cookoff_low); + sound[] = {QPATHTOF(sounds\cookoff_low_pressure.ogg),6,1,400,1,0,0,0}; + sounds[] = {"sound"}; + titles[] = {}; empty[] = {"",0,0,0,0,0,0,0}; }; + class GVAR(CookOff_mid): GVAR(CookOff_low) { + name = QGVAR(cookoff_mid); + sound[] = {QPATHTOF(sounds\cookoff_mid_pressure.ogg),6,1,400,1,0,0,0}; + }; + class GVAR(CookOff_high): GVAR(CookOff_low) { + name = QGVAR(cookoff_high); + sound[] = {QPATHTOF(sounds\cookoff_high_pressure.ogg),6,1,400,1,0,0,0}; + }; }; diff --git a/addons/cookoff/CfgVehicles.hpp b/addons/cookoff/CfgVehicles.hpp index 1155b9ba52..7d82d97c12 100644 --- a/addons/cookoff/CfgVehicles.hpp +++ b/addons/cookoff/CfgVehicles.hpp @@ -1,11 +1,18 @@ class CfgVehicles { class Sound; - class GVAR(Sound): Sound { + class GVAR(Sound_low): Sound { author = ECSTRING(common,ACETeam); _generalMacro = QGVAR(Sound); scope = 1; - sound = QGVAR(CookOff); + sound = QGVAR(CookOff_low); + }; + + class GVAR(Sound_mid): GVAR(Sound_low) { + sound = QGVAR(CookOff_mid); + }; + class GVAR(Sound_high): GVAR(Sound_low) { + sound = QGVAR(CookOff_high); }; class ThingX; diff --git a/addons/cookoff/functions/fnc_cookOff.sqf b/addons/cookoff/functions/fnc_cookOff.sqf index 7ae36670ac..8154217e9d 100644 --- a/addons/cookoff/functions/fnc_cookOff.sqf +++ b/addons/cookoff/functions/fnc_cookOff.sqf @@ -91,7 +91,9 @@ if (local _vehicle) then { } forEach _positions; if (isServer) then { - private _sound = createSoundSource [QGVAR(Sound), position _vehicle, [], 0]; + private _soundName = [QGVAR(Sound_low), 0.1, QGVAR(Sound_mid), 0.25, QGVAR(Sound_high), 0.65] call BIS_fnc_selectRandomWeighted; // TODO: replace with script Command in 1.74 + // TODO - Players in the vehicle hear no sound (even after exiting the vehicle) + private _sound = createSoundSource [_soundName, position _vehicle, [], 0]; _effects pushBack _sound; }; @@ -107,11 +109,12 @@ if (local _vehicle) then { DEC(_counter); if (_counter > 0) then { - [_fnc_FlameEffect, [_vehicle, _fnc_FlameEffect, _counter], 0.4] call CBA_fnc_waitAndExecute + [_fnc_FlameEffect, [_vehicle, _fnc_FlameEffect, _counter], FLAME_EFFECT_DELAY] call CBA_fnc_waitAndExecute }; }; - [_vehicle, _fnc_FlameEffect, 12] call _fnc_FlameEffect; // recursive function + // Recursive function, occurs for duration of cookoff + [_vehicle, _fnc_FlameEffect, ceil(COOKOFF_TIME/FLAME_EFFECT_DELAY)] call _fnc_FlameEffect; private _randomPosition = _vehicle getPos [100, random 360]; @@ -132,6 +135,6 @@ if (local _vehicle) then { if (local _vehicle) then { _vehicle setDamage 1; }; - }, [_vehicle, _effects], 4 + random 20] call CBA_fnc_waitAndExecute; - }, [_vehicle, _effects, _positions], 3 + random 15] call CBA_fnc_waitAndExecute; -}, _vehicle, 0.5 + random 5] call CBA_fnc_waitAndExecute; + }, [_vehicle, _effects], COOKOFF_TIME] call CBA_fnc_waitAndExecute; // TODO: Randomise cook off time with locality in mind + }, [_vehicle, _effects, _positions], SMOKE_TIME] call CBA_fnc_waitAndExecute; +}, _vehicle, IGNITE_TIME] call CBA_fnc_waitAndExecute; diff --git a/addons/cookoff/functions/fnc_cookOffBox.sqf b/addons/cookoff/functions/fnc_cookOffBox.sqf index f944d917e8..4e509e3194 100644 --- a/addons/cookoff/functions/fnc_cookOffBox.sqf +++ b/addons/cookoff/functions/fnc_cookOffBox.sqf @@ -71,6 +71,6 @@ if (local _box) then { if (local _box) then { _box setDamage 1; }; - }, [_box, _effects], 45 + random 75] call CBA_fnc_waitAndExecute; // Give signifcant time for ammo cookoff to occur (perhaps keep the box alive until all cooked off?) - }, [_box, _effects], 3 + random 15] call CBA_fnc_waitAndExecute; -}, _box, 0.5 + random 5] call CBA_fnc_waitAndExecute; + }, [_box, _effects], COOKOFF_TIME_BOX] call CBA_fnc_waitAndExecute; // TODO: Change so that box is alive until no ammo left, with locality in mind + }, [_box, _effects], SMOKE_TIME] call CBA_fnc_waitAndExecute; +}, _box, IGNITE_TIME] call CBA_fnc_waitAndExecute; diff --git a/addons/cookoff/functions/fnc_detonateAmmunition.sqf b/addons/cookoff/functions/fnc_detonateAmmunition.sqf index 20ec84cbbd..c5c0a64549 100644 --- a/addons/cookoff/functions/fnc_detonateAmmunition.sqf +++ b/addons/cookoff/functions/fnc_detonateAmmunition.sqf @@ -65,7 +65,6 @@ if (_amountOfMagazines > 0) exitWith { private _velVec = _vectorAmmo vectorMultiply _speed; _projectile setVectorDir _velVec; _projectile setVelocity _velVec; - // [ACE_player, _projectile, [1,0,0,1]] call EFUNC(frag,addTrack); // visual debuging from ace_frag } else { _projectile setDamage 1; }; diff --git a/addons/cookoff/functions/fnc_handleDamage.sqf b/addons/cookoff/functions/fnc_handleDamage.sqf index 331c1d177a..f462cbf56c 100644 --- a/addons/cookoff/functions/fnc_handleDamage.sqf +++ b/addons/cookoff/functions/fnc_handleDamage.sqf @@ -3,10 +3,10 @@ * Handles all incoming damage for tanks (including wheeled APCs). * * Arguments: - * HandleDamage EH + * HandleDamage EH * * Return Value: - * Damage to be inflicted. + * Damage to be inflicted. * * Example: * _this call ace_cookoff_fnc_handleDamage diff --git a/addons/cookoff/script_component.hpp b/addons/cookoff/script_component.hpp index 7a9468c50c..5daa0e8330 100644 --- a/addons/cookoff/script_component.hpp +++ b/addons/cookoff/script_component.hpp @@ -17,3 +17,13 @@ #include "\z\ace\addons\main\script_macros.hpp" #define IS_EXPLOSIVE_AMMO(ammo) (getNumber (ammo call CBA_fnc_getObjectConfig >> "explosive") > 0.5) + +// Stages of cookoff in order (in seconds) +// Should be no un-synced randomness in these as the effects must be ran on each client +#define IGNITE_TIME 3 +#define SMOKE_TIME 10.5 +#define COOKOFF_TIME 14 // Cook off time should be 20s at most due to length of sound files +#define COOKOFF_TIME_BOX 82.5 // Cook off time for boxes should be significant to allow time for ammo to burn + +// Delay between flame effect for players in a cooking off vehicle +#define FLAME_EFFECT_DELAY 0.4 diff --git a/addons/cookoff/sounds/cookoff.wss b/addons/cookoff/sounds/cookoff.wss deleted file mode 100644 index 11b9d55194..0000000000 Binary files a/addons/cookoff/sounds/cookoff.wss and /dev/null differ diff --git a/addons/cookoff/sounds/cookoff_high_pressure.ogg b/addons/cookoff/sounds/cookoff_high_pressure.ogg new file mode 100644 index 0000000000..ebcffaf9ce Binary files /dev/null and b/addons/cookoff/sounds/cookoff_high_pressure.ogg differ diff --git a/addons/cookoff/sounds/cookoff_low_pressure.ogg b/addons/cookoff/sounds/cookoff_low_pressure.ogg new file mode 100644 index 0000000000..89439e21a7 Binary files /dev/null and b/addons/cookoff/sounds/cookoff_low_pressure.ogg differ diff --git a/addons/cookoff/sounds/cookoff_mid_pressure.ogg b/addons/cookoff/sounds/cookoff_mid_pressure.ogg new file mode 100644 index 0000000000..b82cbcf4e1 Binary files /dev/null and b/addons/cookoff/sounds/cookoff_mid_pressure.ogg differ diff --git a/addons/cookoff/stringtable.xml b/addons/cookoff/stringtable.xml index 9bd2ae1f34..c9c04f86dd 100644 --- a/addons/cookoff/stringtable.xml +++ b/addons/cookoff/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -9,6 +9,10 @@ 誘爆を有効化 쿡오프 현상 활성화 Aktywuj efekty samozapłonu amunicji + Active le cook-off + Abilita Esplosione + 開啟殉爆效果 + 开启殉爆效果 Enables cook off and related vehicle destruction effects. @@ -18,6 +22,10 @@ 誘爆を有効化し、車両が誘爆によって破壊されていきます。 쿡오프 현상을 활성화 하고 관련된 차량에 폭발 이펙트를 적용합니다. Aktywuje efekt samozapłonu amunicji na zniszczonych pojazdach. + Active le cook-off (autocombustion des munitions) et les effets de destruction liés. + Abilita l'esplosione e i relativi effetti di distruzione del veicolo. + 開啟此功能後, 將使有關載具在損毀時有殉爆的效果. + 开启此功能后, 将使有关载具在损毁时有殉爆的效果. Wreck (Turret) @@ -32,6 +40,8 @@ Ruínas (torre) 잔해(포탑) 残骸(タレット) + 殘骸 (砲塔) + 残骸 (炮塔) Enable ammo box cook off @@ -39,6 +49,10 @@ Selbstzündung für Munitionskisten ermöglichen 탄약 상자 쿡오프 현상 활성화 Aktywuj samozapłon skrzyń z amunicją + Cook-off caisses de munitions + Abilita esplosione cassa munizioni + 開啟彈藥箱殉爆效果 + 开启弹药箱殉爆效果 Enables cooking off of ammo boxes. @@ -46,6 +60,10 @@ Ermöglicht Selbstzündung von Munitionskisten. 탄약 상자에 쿡오프 현상을 적용합니다. Aktywuje samozapłon skrzyń z amunicją + Active le cook-off sur toutes les caisses de munitions. + Abilita l'esplosione della cassa di munizioni. + 開啟彈藥箱殉爆效果. + 开启弹药箱殉爆效果. Enable Ammunition cook off @@ -53,18 +71,38 @@ Selbstzündung für Munition ermöglichen 탄약 쿡오프 현상 활성화 Aktywuj samozapłon amunicji + Active le cook-off des munitions + Abilita Esplosione munizioni + 開啟彈藥殉爆效果 + 开启弹药殉爆效果 Enables Ammunition cook off. Fires ammunition projectiles while vehicle is on fire and has ammunition. 弾薬が誘爆します。車両が燃えると、搭載している弾薬が激しく燃え上がりす。 Ermöglicht Selbstzündung von Munition. Feuert Projektile der Munition ab, solange das Fahrzeug brennt und Munition besitzt. Aktywuje samozapłon amunicji. Wystrzeliwuje pociski podczas gdy pojazd płonie i posiada amunicję. + Mets à feu les munitions lorsqu'un véhicule est en feu et contient des munitions. + Abilita l'esplosione delle munizioni. Spara munizioni di proiettili quando il veicolo va a fuoco e contiene munizioni. + 開啟彈藥殉爆效果. 當一台載有彈藥的載具起火時, 將會有殉爆的效果. + 开启弹药殉爆效果. 当一台载有弹药的载具起火时, 将会有殉爆的效果. Ammunition cook off duration + Czas trwania samozapłonu amunicji + 弾薬の誘爆持続時間 + Durée cook-off des munitions + Durata esplosione munizioni + 彈藥殉爆效果持續時間 + 弹药殉爆效果持续时间 Multiplier for how long cook off lasts [Setting to 0 will disable ammo cookoff] + Multiplicateur de la durée du cook-off des munitions [Une valeur de 0 désactive l'effet] + Mnożnik decydujący jak długo ma trwać samozapłon amunicji [Ustawienie na 0 spowoduje wyłącznie samozapłonu] + 誘爆の持続時間を乗数で設定。[0 に設定で誘爆を無効化] + Moltiplicatore della durata dell'esplosione [Impostare 0 disabiliterà l'esplosione delle munizioni] + 設定彈藥殉爆效果會持續多久時間 [輸入0來關閉殉爆效果] + 设定弹药殉爆效果会持续多久时间 [输入0来关闭殉爆效果] diff --git a/addons/dagr/functions/fnc_handleRangeFinderData.sqf b/addons/dagr/functions/fnc_handleRangeFinderData.sqf index 59e10a1711..61d8201552 100644 --- a/addons/dagr/functions/fnc_handleRangeFinderData.sqf +++ b/addons/dagr/functions/fnc_handleRangeFinderData.sqf @@ -8,7 +8,7 @@ * 2: Inclination (Degrees) * * Return Value: - * Nothing + * None * * Example: * [1000, 45, 1] call ace_dagr_fnc_handleRangeFinderData diff --git a/addons/dagr/functions/fnc_menuInit.sqf b/addons/dagr/functions/fnc_menuInit.sqf index c4aa989854..b061717c58 100644 --- a/addons/dagr/functions/fnc_menuInit.sqf +++ b/addons/dagr/functions/fnc_menuInit.sqf @@ -3,10 +3,10 @@ * Creates the DAGR menu dialog * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * diff --git a/addons/dagr/functions/fnc_outputData.sqf b/addons/dagr/functions/fnc_outputData.sqf index 0fcc3ccbda..2208587932 100644 --- a/addons/dagr/functions/fnc_outputData.sqf +++ b/addons/dagr/functions/fnc_outputData.sqf @@ -3,12 +3,13 @@ * DAGR data output loop * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: + * call ace_dagr_fnc_outputData * * Public: No */ diff --git a/addons/dagr/functions/fnc_outputVector.sqf b/addons/dagr/functions/fnc_outputVector.sqf index 23996c46b4..686dbcc407 100644 --- a/addons/dagr/functions/fnc_outputVector.sqf +++ b/addons/dagr/functions/fnc_outputVector.sqf @@ -1,17 +1,19 @@ -/* +/* * Author: Rosuto * DAGR vector output loop * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: + * call ace_dagr_fnc_outputVector * * Public: No */ + #include "script_component.hpp" private ["_xGrid", "_yGrid", "_dagrGrid", "_bearing", "_dagrDist", "_dagrElevation", "_dagrTime", "_elevation", "_xCoord", "_yCoord"]; diff --git a/addons/dagr/functions/fnc_outputWP.sqf b/addons/dagr/functions/fnc_outputWP.sqf index d36f222a51..32e1c2eaa0 100644 --- a/addons/dagr/functions/fnc_outputWP.sqf +++ b/addons/dagr/functions/fnc_outputWP.sqf @@ -1,14 +1,15 @@ -/* +/* * Author: Rosuto * DAGR waypoint output loop * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: + * call ace_dagr_fnc_outputWP * * Public: No */ @@ -79,7 +80,11 @@ GVAR(outputPFH) = [{ }); // WP Heading - _bearing = floor ((_WPpos vectorDiff _MYpos) call CBA_fnc_vectDir); + _bearing = floor (if (GVAR(useDegrees)) then { + ((_WPpos vectorDiff _MYpos) call CBA_fnc_vectDir) + } else { + DEG_TO_MIL(((_WPpos vectorDiff _MYpos) call CBA_fnc_vectDir)) + }); // Output __gridControl ctrlSetText format ["%1", _dagrGrid]; diff --git a/addons/dagr/functions/fnc_toggleOverlay.sqf b/addons/dagr/functions/fnc_toggleOverlay.sqf index d48a83ae51..af9909efda 100644 --- a/addons/dagr/functions/fnc_toggleOverlay.sqf +++ b/addons/dagr/functions/fnc_toggleOverlay.sqf @@ -3,12 +3,13 @@ * Toggles the DAGR overlay * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: + * call ace_dagr_fnc_toggleOverlay * * Public: No */ diff --git a/addons/dagr/stringtable.xml b/addons/dagr/stringtable.xml index e72e4f7770..51ca754a82 100644 --- a/addons/dagr/stringtable.xml +++ b/addons/dagr/stringtable.xml @@ -13,6 +13,8 @@ DAGR DAGR DAGR + 軍用GPS接收器 + 军用GPS接收器 Configure DAGR @@ -26,6 +28,8 @@ Configurer le DAGR DAGR を設定 DAGR 설정 + 軍用GPS接收器設定 + 军用GPS接收器设定 Toggle DAGR @@ -39,6 +43,8 @@ Activer/Desactiver le DAGR DAGR を常に表示 DAGR 토글 + 切換軍用GPS接收器 + 切换军用GPS接收器 Defense Advanced GPS Receiver @@ -52,6 +58,8 @@ Defense Advanced GPS Receiver アドバンスド DAGR の受信を定義します 국방 고급위성항법시스템 수신기 + 軍用高級防禦GPS接收器 + 军用高级防御GPS接收器 diff --git a/addons/disarming/functions/fnc_disarmDropItems.sqf b/addons/disarming/functions/fnc_disarmDropItems.sqf index c9eb920084..af799e25df 100644 --- a/addons/disarming/functions/fnc_disarmDropItems.sqf +++ b/addons/disarming/functions/fnc_disarmDropItems.sqf @@ -10,7 +10,7 @@ * 3: Do Not Drop Ammo * * Return Value: - * Nothing + * None * * Example: * [player, cursorTarget, ["ace_bandage"]] call ace_disarming_fnc_disarmDropItems diff --git a/addons/disarming/functions/fnc_eventTargetFinish.sqf b/addons/disarming/functions/fnc_eventTargetFinish.sqf index d71d93d254..f700cb6f79 100644 --- a/addons/disarming/functions/fnc_eventTargetFinish.sqf +++ b/addons/disarming/functions/fnc_eventTargetFinish.sqf @@ -10,7 +10,7 @@ * 2: errorMsg * * Return Value: - * Nothing + * None * * Example: * [player1, player2, "Someting fucked up"] call ace_disarming_fnc_eventTargetFinish diff --git a/addons/disarming/functions/fnc_eventTargetStart.sqf b/addons/disarming/functions/fnc_eventTargetStart.sqf index 77dfd9d271..8490c17be1 100644 --- a/addons/disarming/functions/fnc_eventTargetStart.sqf +++ b/addons/disarming/functions/fnc_eventTargetStart.sqf @@ -10,10 +10,10 @@ * 2: type of disarm * * Return Value: - * Nothing + * None * * Example: - * eventTargetStart + * [bob, kevin, "disarm"] call ace_disarming_fnc_eventTargetStart * * Public: No */ diff --git a/addons/disarming/functions/fnc_showItemsInListbox.sqf b/addons/disarming/functions/fnc_showItemsInListbox.sqf index 82b9645850..d43dd9b5ca 100644 --- a/addons/disarming/functions/fnc_showItemsInListbox.sqf +++ b/addons/disarming/functions/fnc_showItemsInListbox.sqf @@ -8,7 +8,7 @@ * 1: ItemArray [["itemClassnames"],[counts]] * * Return Value: - * Nothing + * None * * Example: * [theListBox, [["ace_bandage"],[2]]] call ace_disarming_fnc_showItemsInListbox diff --git a/addons/disarming/stringtable.xml b/addons/disarming/stringtable.xml index eaf572cc56..30f9fa4b85 100644 --- a/addons/disarming/stringtable.xml +++ b/addons/disarming/stringtable.xml @@ -14,6 +14,8 @@ Abrir inventário インベントリを開く 소지품 열기 + 開啟裝備 + 开启装备 diff --git a/addons/disposable/CfgWeapons.hpp b/addons/disposable/CfgWeapons.hpp index 0ca6763d63..731910b704 100644 --- a/addons/disposable/CfgWeapons.hpp +++ b/addons/disposable/CfgWeapons.hpp @@ -5,6 +5,7 @@ class CfgWeapons { magazines[] = {"ACE_PreloadedMissileDummy"}; // The dummy magazine }; class ACE_launch_NLAW_Used_F: launch_NLAW_F { // the used tube should be a sub class of the disposable launcher + EGVAR(nlaw,enabled) = 0; // disable guidance for the disposabled tube scope = 1; ACE_isUsedLauncher = 1; author = ECSTRING(common,ACETeam); diff --git a/addons/disposable/functions/fnc_replaceATWeapon.sqf b/addons/disposable/functions/fnc_replaceATWeapon.sqf index 58c58a6056..d94944bfde 100644 --- a/addons/disposable/functions/fnc_replaceATWeapon.sqf +++ b/addons/disposable/functions/fnc_replaceATWeapon.sqf @@ -6,7 +6,7 @@ * None. Parameters inherited from EFUNC(common,firedEH) * * Return Value: - * Nothing + * None * * Example: * [fromBisFiredEH] call ace_disposable_fnc_replaceATWeapon; diff --git a/addons/disposable/stringtable.xml b/addons/disposable/stringtable.xml index 29d9d5e232..f41b2cad88 100644 --- a/addons/disposable/stringtable.xml +++ b/addons/disposable/stringtable.xml @@ -10,10 +10,12 @@ Lanzador utilizado Elhasznált kilövőcső Отстрелянная труба - Tubo usato + Lanciatore usato Tubo utilizado 使用済み 사용함 + 使用過的火箭筒 + 使用过的火箭筒 Used disposable rocket launcher @@ -28,6 +30,8 @@ Lança foguetes descartável utilizado 使い終わったロケット ランチャーの筒部分 사용한 일회용 발사관 + 使用過的一次性火箭發射器 + 使用过的一次性火箭发射器 Preloaded Missile Dummy @@ -42,6 +46,8 @@ Míssel inerte pré-carregado 仮置きのミサイルをあらかじめ装填 임시로 미사일을 미리 장전 + 預裝訓練導彈 + 预装训练导弹 diff --git a/addons/dogtags/stringtable.xml b/addons/dogtags/stringtable.xml index 75a12ccff2..e47a0ae1b7 100644 --- a/addons/dogtags/stringtable.xml +++ b/addons/dogtags/stringtable.xml @@ -9,6 +9,10 @@ ドッグ タグ Hundemarke 군번줄 + Plaque d'identification + Piastrina + 兵籍牌 + 兵籍牌 Check Dog Tag @@ -18,6 +22,10 @@ ドッグ タグを見る Hundemarke prüfen 군번줄 확인 + Vérifier les plaques d'identification + Controlla Piastrina + 檢查兵籍牌 + 检查兵籍牌 Check @@ -27,6 +35,10 @@ 見る Prüfen 확인 + Vérifier + Controlla + 檢查 + 检查 Take @@ -36,6 +48,10 @@ 取る Nehmen 회수 + Prendre + Prendi + 拿取 + 拿取 Dogtag taken from %1... @@ -45,6 +61,10 @@ %1からドッグ タグを取っている・・・ Hundemarke von %1 genommen ... %1로부터 군번줄을 회수했습니다... + Plaque d'identification pris sur %1... + Piastrina presa da %1... + 從%1身上拿取兵籍牌... + 从%1身上拿取兵籍牌... Somebody else has already taken the dogtag... @@ -54,6 +74,10 @@ すでに誰かがドッグ タグを取っているようだ・・・ Jemand anderes hat bereits die Hundemarke genommen ... 누군가 이미 군번줄을 회수해갔습니다... + Quelqu'un d'autre a déjâ pris les plaques d'identification... + Qualcun altro ha già preso la piastrina... + 已經有人把他的兵籍牌拿走了... + 已经有人把他的兵籍牌拿走了... diff --git a/addons/dragging/CfgVehicles.hpp b/addons/dragging/CfgVehicles.hpp index c8e3c7284a..f5d72fba50 100644 --- a/addons/dragging/CfgVehicles.hpp +++ b/addons/dragging/CfgVehicles.hpp @@ -30,6 +30,21 @@ class CfgVehicles { GVAR(dragDirection) = 0; }; + // Big 1.70 Autonomous AA Turrets + class StaticMGWeapon; + class AAA_System_01_base_F: StaticMGWeapon { // Praetorian 1C (aka Phalanx CIWS) + GVAR(canCarry) = 0; + GVAR(canDrag) = 0; + }; + class SAM_System_01_base_F: StaticMGWeapon { // Mk49 Spartan + GVAR(canCarry) = 0; + GVAR(canDrag) = 0; + }; + class SAM_System_02_base_F: StaticMGWeapon { // Mk21 Centurion + GVAR(canCarry) = 0; + GVAR(canDrag) = 0; + }; + // ammo boxes class ThingX; class Items_base_F; @@ -52,6 +67,10 @@ class CfgVehicles { GVAR(canCarry) = 0; GVAR(canDrag) = 0; }; + class Pod_Heli_Transport_04_crewed_base_F: StaticWeapon { + GVAR(canCarry) = 0; + GVAR(canDrag) = 0; + }; class EAST_Box_Base: ReammoBox_F { GVAR(canCarry) = 1; diff --git a/addons/dragging/functions/fnc_handleAnimChanged.sqf b/addons/dragging/functions/fnc_handleAnimChanged.sqf index 935a6d3652..c59b088ee0 100644 --- a/addons/dragging/functions/fnc_handleAnimChanged.sqf +++ b/addons/dragging/functions/fnc_handleAnimChanged.sqf @@ -16,6 +16,8 @@ */ #include "script_component.hpp" +//IGNORE_PRIVATE_WARNING ["_thisArgs", "_thisID"]; // From CBA_fnc_addBISEventHandler; + params ["_unit", "_anim"]; _thisArgs params ["_realUnit"]; TRACE_4("params",_unit,_anim,_realUnit,_thisID); diff --git a/addons/dragging/functions/fnc_handleScrollWheel.sqf b/addons/dragging/functions/fnc_handleScrollWheel.sqf index e3a30ea9e0..f82478d531 100644 --- a/addons/dragging/functions/fnc_handleScrollWheel.sqf +++ b/addons/dragging/functions/fnc_handleScrollWheel.sqf @@ -37,8 +37,12 @@ _position set [2, ((_position select 2) + _scrollAmount min (_maxHeight + 1.5)) // move up/down object and reattach at current position detach _carriedItem; -_carriedItem setPosATL _position; -_carriedItem attachTo [_unit]; + +// Uses this method of selecting position because setPosATL did not have immediate effect +private _positionChange = _position vectorDiff (getPosATL _carriedItem); +private _selectionPosition = _unit worldToModel (ASLtoAGL getPosWorld _carriedItem); +_selectionPosition = _selectionPosition vectorAdd _positionChange; +_carriedItem attachTo [_unit, _selectionPosition]; //reset the carry direction private _direction = _carriedItem getVariable [QGVAR(carryDirection), 0]; diff --git a/addons/dragging/functions/fnc_isObjectOnObject.sqf b/addons/dragging/functions/fnc_isObjectOnObject.sqf index cec6ce764e..00c2823e4a 100644 --- a/addons/dragging/functions/fnc_isObjectOnObject.sqf +++ b/addons/dragging/functions/fnc_isObjectOnObject.sqf @@ -6,9 +6,9 @@ * 0: Object * * Return Value: - * + * Boolean * - * Example; + * Example: * [player] call ace_dragging_fnc_isObjectOnObject * * Public: No diff --git a/addons/dragging/functions/fnc_setDraggable.sqf b/addons/dragging/functions/fnc_setDraggable.sqf index 1fbcb995dc..ce47f8a829 100644 --- a/addons/dragging/functions/fnc_setDraggable.sqf +++ b/addons/dragging/functions/fnc_setDraggable.sqf @@ -5,8 +5,8 @@ * Arguments: * 0: Any object * 1: true to enable dragging, false to disable - * 2: Position offset for attachTo command (Array, optinal; default: [0,0,0]) - * 3: Direction in degree to rotate the object after attachTo (Number, optional; default: 0) + * 2: Position offset for attachTo command (optinal; default: [0,0,0]) + * 3: Direction in degree to rotate the object after attachTo (optional; default: 0) * * Return Value: * None @@ -18,7 +18,7 @@ */ #include "script_component.hpp" -//IGNORE_PRIVATE_WARNING("_player", "_target"); +//IGNORE_PRIVATE_WARNING ["_player", "_target"]; params ["_object", "_enableDrag", "_position", "_direction"]; if (isNil "_position") then { diff --git a/addons/dragging/functions/fnc_startCarry.sqf b/addons/dragging/functions/fnc_startCarry.sqf index 1890dbac1a..7a5341b8a8 100644 --- a/addons/dragging/functions/fnc_startCarry.sqf +++ b/addons/dragging/functions/fnc_startCarry.sqf @@ -51,7 +51,7 @@ if (_target isKindOf "CAManBase") then { } else { // select no weapon and stop sprinting - _unit action ["SwitchWeapon", _unit, _unit, 99]; + _unit action ["SwitchWeapon", _unit, _unit, 299]; [_unit, "AmovPercMstpSnonWnonDnon", 0] call EFUNC(common,doAnimation); [_unit, "forceWalk", "ACE_dragging", true] call EFUNC(common,statusEffect_set); diff --git a/addons/dragging/stringtable.xml b/addons/dragging/stringtable.xml index 50b5947ac9..767ae3fd73 100644 --- a/addons/dragging/stringtable.xml +++ b/addons/dragging/stringtable.xml @@ -14,6 +14,8 @@ Húzás 引きずる 끌기 + 拖拉 + 拖拉 Release @@ -28,6 +30,8 @@ Elengedés はなす 놓기 + 放開 + 放开 Drag/Release Object @@ -42,6 +46,8 @@ Húzás/Elengedés Objektum オブジェクトを引きずる/はなす 물건 끌기/놓기 + 拖拉/放開物品 + 拖拉/放开物品 Item too heavy @@ -56,6 +62,8 @@ Az objektum túl nehéz アイテムが重すぎる 물체가 너무 무겁습니다 + 此物品過重 + 此物品过重 Carry @@ -70,6 +78,8 @@ Нести 運ぶ 업기 + 背起 + 背起 Raise/Lower @@ -83,6 +93,8 @@ Lever/Baisser 上げる/下げる 높이기/낮추기 + 提高/下降 + 提高/下降 diff --git a/addons/explosives/CfgAmmo.hpp b/addons/explosives/CfgAmmo.hpp index 05780b706a..355377102a 100644 --- a/addons/explosives/CfgAmmo.hpp +++ b/addons/explosives/CfgAmmo.hpp @@ -27,10 +27,13 @@ class CfgAmmo { class PipeBombCore: TimeBombCore; class PipeBombBase: PipeBombCore; */ + // GVAR(size) = 0; is small size + // GVAR(size) = 1; is large size class DirectionalBombBase; class ClaymoreDirectionalMine_Remote_Ammo: DirectionalBombBase { GVAR(magazine) = "ClaymoreDirectionalMine_Remote_Mag"; GVAR(Explosive) = "ClaymoreDirectionalMine_Remote_Ammo_Scripted"; + GVAR(size) = 0; GVAR(defuseObjectPosition)[] = {0, 0, 0.038}; soundActivation[] = {"", 0, 0, 0}; soundDeactivation[] = {"", 0, 0, 0}; @@ -39,6 +42,7 @@ class CfgAmmo { class APERSTripMine_Wire_Ammo: DirectionalBombBase { GVAR(defuseObjectPosition)[] = {-1.415, 0, 0.12}; + GVAR(size) = 0; }; class ACE_FlareTripMine_Wire_Ammo: APERSTripMine_Wire_Ammo { @@ -58,16 +62,18 @@ class CfgAmmo { distance = 0; }; }; - + class F_20mm_Red; class ACE_TripFlare_FlareEffect: F_20mm_Red { triggerTime = 0.1; + GVAR(size) = 0; }; class SLAMDirectionalMine_Wire_Ammo: DirectionalBombBase { indirectHitRange = 20; GVAR(explodeOnDefuseChance) = 1; GVAR(magazine) = "SLAMDirectionalMine_Wire_Mag"; + GVAR(size) = 0; }; class ACE_SLAMDirectionalMine_Command_Ammo: SLAMDirectionalMine_Wire_Ammo { mineTrigger = "RemoteTrigger"; @@ -89,6 +95,7 @@ class CfgAmmo { class DemoCharge_Remote_Ammo: PipeBombBase { GVAR(magazine) = "DemoCharge_Remote_Mag"; GVAR(Explosive) = "DemoCharge_Remote_Ammo_Scripted"; + GVAR(size) = 0; GVAR(defuseObjectPosition)[] = {0.07, 0, 0.055}; soundActivation[] = {"", 0, 0, 0}; soundDeactivation[] = {"", 0, 0, 0}; @@ -99,6 +106,7 @@ class CfgAmmo { class SatchelCharge_Remote_Ammo: PipeBombBase { GVAR(magazine) = "SatchelCharge_Remote_Mag"; GVAR(Explosive) = "SatchelCharge_Remote_Ammo_Scripted"; + GVAR(size) = 0; GVAR(defuseObjectPosition)[] = {0.1, 0.1, 0.05}; soundActivation[] = {"", 0, 0, 0}; soundDeactivation[] = {"", 0, 0, 0}; @@ -110,6 +118,7 @@ class CfgAmmo { triggerWhenDestroyed = 1; GVAR(explodeOnDefuseChance) = 0.02; GVAR(magazine) = "IEDUrbanBig_Remote_Mag"; + GVAR(size) = 1; soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40}; }; class ACE_IEDUrbanBig_Command_Ammo: IEDUrbanBig_Remote_Ammo { @@ -123,6 +132,7 @@ class CfgAmmo { triggerWhenDestroyed = 1; GVAR(explodeOnDefuseChance) = 0.02; GVAR(magazine) = "IEDUrbanSmall_Remote_Mag"; + GVAR(size) = 0; soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40}; }; class ACE_IEDUrbanSmall_Command_Ammo: IEDUrbanSmall_Remote_Ammo { @@ -136,6 +146,7 @@ class CfgAmmo { triggerWhenDestroyed = 1; GVAR(explodeOnDefuseChance) = 0.02; GVAR(magazine) = "IEDLandBig_Remote_Mag"; + GVAR(size) = 1; soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40}; }; class ACE_IEDLandBig_Command_Ammo: IEDLandBig_Remote_Ammo { @@ -149,6 +160,7 @@ class CfgAmmo { triggerWhenDestroyed = 1; GVAR(explodeOnDefuseChance) = 0.02; GVAR(magazine) = "IEDLandSmall_Remote_Mag"; + GVAR(size) = 0; soundTrigger[] = {"A3\Sounds_F\weapons\mines\mech_trigger_1", 0.8, 1, 40}; }; class ACE_IEDLandSmall_Command_Ammo: IEDLandSmall_Remote_Ammo { diff --git a/addons/explosives/CfgVehicles.hpp b/addons/explosives/CfgVehicles.hpp index f2b6ece8db..70499ba809 100644 --- a/addons/explosives/CfgVehicles.hpp +++ b/addons/explosives/CfgVehicles.hpp @@ -60,11 +60,11 @@ class CfgVehicles { icon = QPATHTOF(UI\Defuse_ca.paa); }; }; - }; + }; class ACE_DefuseObject_Large: ACE_DefuseObject { class ACE_Actions: ACE_Actions { class ACE_Defuse: ACE_Defuse { - distance = 1.5; + distance = 2; }; }; }; diff --git a/addons/explosives/XEH_PREP.hpp b/addons/explosives/XEH_PREP.hpp index b43953d8fd..17558ee54c 100644 --- a/addons/explosives/XEH_PREP.hpp +++ b/addons/explosives/XEH_PREP.hpp @@ -2,6 +2,7 @@ PREP(addCellphoneIED); PREP(addClacker); PREP(addDetonateActions); +PREP(addDetonateHandler); PREP(addExplosiveActions); PREP(addToSpeedDial); PREP(addTransmitterActions); diff --git a/addons/explosives/XEH_preInit.sqf b/addons/explosives/XEH_preInit.sqf index 65bebfd321..3a4d9a5aea 100644 --- a/addons/explosives/XEH_preInit.sqf +++ b/addons/explosives/XEH_preInit.sqf @@ -25,4 +25,6 @@ if (isServer) then { GVAR(explosivesOrientations) = [] }; +GVAR(detonationHandlers) = []; + ADDON = true; diff --git a/addons/explosives/functions/fnc_addDetonateActions.sqf b/addons/explosives/functions/fnc_addDetonateActions.sqf index f88abc29d3..5b61de01f4 100644 --- a/addons/explosives/functions/fnc_addDetonateActions.sqf +++ b/addons/explosives/functions/fnc_addDetonateActions.sqf @@ -43,7 +43,7 @@ _explosivesList = []; {(_this select 2) call FUNC(detonateExplosive);}, {true}, {}, - [_unit,_range,_x] + [_unit,_range,_x,_detonator] ] call EFUNC(interact_menu,createAction), [], _unit @@ -62,7 +62,7 @@ if (_detonator != "ACE_DeadManSwitch") then { {(_this select 2) call FUNC(detonateExplosiveAll);}, {true}, {}, - [_unit,_range,_explosivesList] + [_unit,_range,_explosivesList, _detonator] ] call EFUNC(interact_menu,createAction), [], _unit diff --git a/addons/explosives/functions/fnc_addDetonateHandler.sqf b/addons/explosives/functions/fnc_addDetonateHandler.sqf new file mode 100644 index 0000000000..2058b24502 --- /dev/null +++ b/addons/explosives/functions/fnc_addDetonateHandler.sqf @@ -0,0 +1,24 @@ +/* + * Author: PabstMirror + * Add a explosive detonation handler. + * Should be called on all machines. + * Code needs to return BOOL: true(allowed) / false(blocked) + * See https://ace3mod.com/wiki/framework/explosives-framework.html for an example. + * + * Arguments: + * 0: Code + * - Passed [Unit, MaxRange , Explosive , FuzeTime , TriggerItem ] + * + * Return Value: + * None + * + * Example: + * [{false}] call ace_explosives_fnc_addDetonateHandler; + * + * Public: Yes + */ +#include "script_component.hpp" + +params [["_code", {true}, [{}]]]; + +GVAR(detonationHandlers) pushBack _code; diff --git a/addons/explosives/functions/fnc_addExplosiveActions.sqf b/addons/explosives/functions/fnc_addExplosiveActions.sqf index 0ee3ca9f78..888583b60c 100644 --- a/addons/explosives/functions/fnc_addExplosiveActions.sqf +++ b/addons/explosives/functions/fnc_addExplosiveActions.sqf @@ -6,7 +6,10 @@ * 0: Unit * * Return Value: - * Actions + * Actions + * + * Example: + * [bob] call ace_explosives_fnc_addExplosiveActions * * Public: No */ diff --git a/addons/explosives/functions/fnc_addTransmitterActions.sqf b/addons/explosives/functions/fnc_addTransmitterActions.sqf index 4397e743a0..418d99a0df 100644 --- a/addons/explosives/functions/fnc_addTransmitterActions.sqf +++ b/addons/explosives/functions/fnc_addTransmitterActions.sqf @@ -6,7 +6,7 @@ * 0: Unit * * Return Value: - * Nothing + * None * * Example: * [player] call ACE_Explosives_fnc_addTransmitterActions; diff --git a/addons/explosives/functions/fnc_defuseExplosive.sqf b/addons/explosives/functions/fnc_defuseExplosive.sqf index b98b992f8e..a6d0e82a6b 100644 --- a/addons/explosives/functions/fnc_defuseExplosive.sqf +++ b/addons/explosives/functions/fnc_defuseExplosive.sqf @@ -21,7 +21,7 @@ TRACE_2("params",_unit,_explosive); if (GVAR(ExplodeOnDefuse) && {(random 1.0) < (getNumber (ConfigFile >> "CfgAmmo" >> typeOf _explosive >> QGVAR(explodeOnDefuseChance)))}) exitWith { TRACE_1("exploding on defuse",_explosive); - [_unit, -1, [_explosive, 1], true] call FUNC(detonateExplosive); + [_unit, -1, [_explosive, 1], "#ExplodeOnDefuse"] call FUNC(detonateExplosive); [QGVAR(explodeOnDefuse), [_explosive, _unit]] call CBA_fnc_globalEvent; }; diff --git a/addons/explosives/functions/fnc_detonateExplosive.sqf b/addons/explosives/functions/fnc_detonateExplosive.sqf index 0b7f9f3fa4..822a04aeaf 100644 --- a/addons/explosives/functions/fnc_detonateExplosive.sqf +++ b/addons/explosives/functions/fnc_detonateExplosive.sqf @@ -8,28 +8,35 @@ * 2: Explosive * 0: Explosive * 1: Fuse time + * 3: Trigger Item Classname * * Return Value: * None * * Example: - * [player, 100, [Explosive, 1]] call ACE_Explosives_fnc_detonateExplosive; // has to be within range - * [player, -1, [Explosive, 1]] call ACE_Explosives_fnc_detonateExplosive; // range ignored. + * [player, 100, [Explosive, 1], "ACE_Clacker"] call ACE_Explosives_fnc_detonateExplosive; // has to be within range + * [player, -1, [Explosive, 1], "ACE_Cellphone"] call ACE_Explosives_fnc_detonateExplosive; // range ignored. * * Public: Yes */ #include "script_component.hpp" -params ["_unit", "_range", "_item"]; -TRACE_3("params",_unit,_range,_item); +params ["_unit", "_range", "_item", ["_triggerClassname", "#unknown", [""]]]; +TRACE_4("detonateExplosive",_unit,_range,_item,_triggerClassname); private ["_result", "_ignoreRange", "_pos"]; _ignoreRange = (_range == -1); -_result = true; - if (!_ignoreRange && {(_unit distance (_item select 0)) > _range}) exitWith {TRACE_1("out of range",_range); false}; +_result = true; +{ + // Pass [Unit, MaxRange , Explosive , FuzeTime , TriggerItem ] + private _handlerResult = [_unit, _range, _item select 0, _item select 1, _triggerClassname] call _x; + if (_handlerResult isEqualTo false) then {TRACE_1("Handler Failed",_forEachIndex); _result = false}; +} forEach GVAR(detonationHandlers); +if (!_result) exitWith {false}; + if (getNumber (ConfigFile >> "CfgAmmo" >> typeOf (_item select 0) >> "TriggerWhenDestroyed") == 0) then { private ["_exp", "_previousExp"]; _previousExp = _item select 0; diff --git a/addons/explosives/functions/fnc_detonateExplosiveAll.sqf b/addons/explosives/functions/fnc_detonateExplosiveAll.sqf index 377dc0b93a..468183a003 100644 --- a/addons/explosives/functions/fnc_detonateExplosiveAll.sqf +++ b/addons/explosives/functions/fnc_detonateExplosiveAll.sqf @@ -8,20 +8,21 @@ * 2: Explosives to detonate * 0: Explosive * 1: Fuse time + * 3: Trigger Item Classname * * Return Value: * None * * Example: - * [player, -1, [[c4,0.5]]] call ACE_Explosives_fnc_detonateExplosiveAll; + * [player, -1, [[c4,0.5]], "ACE_Clacker"] call ACE_Explosives_fnc_detonateExplosiveAll; * * Public: No */ #include "script_component.hpp" -params ["_unit", "_range", "_explosivesList"]; -TRACE_3("Params",_unit,_range,_explosivesList); +params ["_unit", "_range", "_explosivesList", "_triggerClassname"]; +TRACE_4("Params",_unit,_range,_explosivesList,_triggerClassname); { - [_unit,_range,_x] call FUNC(detonateExplosive); + [_unit,_range,_x,_triggerClassname] call FUNC(detonateExplosive); } forEach _explosivesList; diff --git a/addons/explosives/functions/fnc_dialPhone.sqf b/addons/explosives/functions/fnc_dialPhone.sqf index e205f9b381..7e715c2ac7 100644 --- a/addons/explosives/functions/fnc_dialPhone.sqf +++ b/addons/explosives/functions/fnc_dialPhone.sqf @@ -41,6 +41,6 @@ if (_unit == ace_player) then { playSound3D [QUOTE(PATHTO_R(Data\Audio\Cellphone_Ring.wss)),objNull, false, getPosASL (_this select 1),3.16228,1,75]; (_this select 0) setVariable [QGVAR(Dialing), false, true]; }, [_unit,_explosive select 0], 0.25 * (count _arr - 4)] call CBA_fnc_waitAndExecute; - [_explosive select 0,(0.25 * (count _arr - 1)) + (_explosive select 2)] call FUNC(startTimer); + [_explosive select 0,(0.25 * (count _arr - 1)) + (_explosive select 2), "ACE_Cellphone"] call FUNC(startTimer); }; }; diff --git a/addons/explosives/functions/fnc_dialingPhone.sqf b/addons/explosives/functions/fnc_dialingPhone.sqf index aa20ebf4b0..9cafa01a5e 100644 --- a/addons/explosives/functions/fnc_dialingPhone.sqf +++ b/addons/explosives/functions/fnc_dialingPhone.sqf @@ -31,7 +31,7 @@ private _explosive = [_code] call FUNC(getSpeedDialExplosive); if (_i >= (count _arr + 2)) then { [_pfID] call CALLSTACK(CBA_fnc_removePerFrameHandler); if ((count _explosive) > 0) then { - [_unit, -1, [_explosive select 0, _explosive select 2]] call FUNC(detonateExplosive); + [_unit, -1, [_explosive select 0, _explosive select 2], "ACE_Cellphone"] call FUNC(detonateExplosive); }; _unit setVariable [QGVAR(Dialing), false, true]; if (_unit == ace_player) then { diff --git a/addons/explosives/functions/fnc_interactEH.sqf b/addons/explosives/functions/fnc_interactEH.sqf index c8486adc09..eac82bcddb 100644 --- a/addons/explosives/functions/fnc_interactEH.sqf +++ b/addons/explosives/functions/fnc_interactEH.sqf @@ -7,7 +7,7 @@ * Interact Menu Type (0 - world, 1 - self) * * Return Value: - * Nothing + * None * * Example: * [0] call ace_explosives_fnc_interactEH @@ -42,14 +42,16 @@ if (!("ACE_DefusalKit" in (items ACE_player))) exitWith {}; if (((getPosASL ace_player) distance _setPosition) > 5) then { { if (((_x distance ACE_player) < 15) && {!(_x in _minesHelped)}) then { - TRACE_3("Making Defuse Helper",(_x),(typeOf _x),(_x isKindOf "UnderwaterMine_Range_Ammo")); - private _defuseHelper = if (_x isKindOf "UnderwaterMine_Range_Ammo") then { - "ACE_DefuseObject_Large" createVehicleLocal (getPos _x); - } else { - "ACE_DefuseObject" createVehicleLocal (getPos _x); - }; private _config = configFile >> "CfgAmmo" >> typeOf _x; + private _size = getNumber (_config >> QGVAR(size)); + TRACE_3("Making Defuse Helper",(_x),(typeOf _x),(_size == 1)); + private ["_defuseHelper"]; + if (_size == 1) then { + _defuseHelper = "ACE_DefuseObject_Large" createVehicleLocal (getPos _x); + } else { + _defuseHelper = "ACE_DefuseObject" createVehicleLocal (getPos _x); + }; private _defuseObjectPosition = getArray (_config >> QGVAR(defuseObjectPosition)); if (_defuseObjectPosition isEqualTo []) then { diff --git a/addons/explosives/functions/fnc_onIncapacitated.sqf b/addons/explosives/functions/fnc_onIncapacitated.sqf index 96949e7719..6f9a9f498a 100644 --- a/addons/explosives/functions/fnc_onIncapacitated.sqf +++ b/addons/explosives/functions/fnc_onIncapacitated.sqf @@ -26,7 +26,7 @@ private _range = getNumber (configFile >> "CfgWeapons" >> "ACE_DeadManSwitch" >> private _deadman = [_unit, "DeadManSwitch"] call FUNC(getPlacedExplosives); TRACE_2("placed",_deadman,_range); { - [_unit, _range, _x, true] call FUNC(detonateExplosive); + [_unit, _range, _x, "ACE_DeadManSwitch"] call FUNC(detonateExplosive); } forEach _deadman; //Handle deadman connected to explosive in inventory @@ -47,5 +47,5 @@ if (_connectedInventoryExplosive != "") then { private _explosive = createVehicle [_ammo, (getPos _unit), [], 0, "NONE"]; _explosive setPosASL (getPosASL _unit); - [_unit, -1, [_explosive, 0.5]] call FUNC(detonateExplosive); //Explode, ignoring range, with a 0.5 second delay + [_unit, -1, [_explosive, 0.5], "ACE_DeadManSwitch"] call FUNC(detonateExplosive); //Explode, ignoring range, with a 0.5 second delay }; diff --git a/addons/explosives/functions/fnc_scriptedExplosive.sqf b/addons/explosives/functions/fnc_scriptedExplosive.sqf index 6a554ac09c..ff7a2ca1a0 100644 --- a/addons/explosives/functions/fnc_scriptedExplosive.sqf +++ b/addons/explosives/functions/fnc_scriptedExplosive.sqf @@ -6,6 +6,7 @@ * Arguments: * 0: Explosives objects to detonate * 1: Fuze delay (for each explosive; use negative number for random time up to value) + * 2: Trigger Item Classname * * Return Value: * None @@ -18,7 +19,7 @@ */ #include "script_component.hpp" -params [["_explosiveArr", [], [[], objNull]], ["_fuzeTime", 0, [0]]]; +params [["_explosiveArr", [], [[], objNull]], ["_fuzeTime", 0, [0]], ["_triggerClassname", "#scripted", [""]]]; if (_explosiveArr isEqualType objNull) then { _explosiveArr = [_explosiveArr]; @@ -26,5 +27,5 @@ if (_explosiveArr isEqualType objNull) then { { private _detTime = if (_fuzeTime < 0) then {random abs _fuzeTime} else {_fuzeTime}; - [objNull, -1, [_x, _detTime]] call FUNC(detonateExplosive); + [objNull, -1, [_x, _detTime], _triggerClassname] call FUNC(detonateExplosive); } forEach _explosiveArr; diff --git a/addons/explosives/functions/fnc_startDefuse.sqf b/addons/explosives/functions/fnc_startDefuse.sqf index 95e258696c..375f1562e1 100644 --- a/addons/explosives/functions/fnc_startDefuse.sqf +++ b/addons/explosives/functions/fnc_startDefuse.sqf @@ -7,7 +7,7 @@ * 1: Target explosive * * Return Value: - * Nothing + * None * * Example: * [player, ACE_Interaction_Target] call ACE_Explosives_fnc_StartDefuse; diff --git a/addons/explosives/functions/fnc_startTimer.sqf b/addons/explosives/functions/fnc_startTimer.sqf index 1f529d9765..6694d5dc0d 100644 --- a/addons/explosives/functions/fnc_startTimer.sqf +++ b/addons/explosives/functions/fnc_startTimer.sqf @@ -5,6 +5,7 @@ * Arguments: * 0: Explosive * 1: Time till detonate + * 2: Trigger Item Classname * * Return Value: * None @@ -16,13 +17,13 @@ */ #include "script_component.hpp" -params ["_explosive", "_delay"]; -TRACE_2("params",_explosive,_delay); +params ["_explosive", "_delay", ["_triggerClassname", "#timer", [""]]]; +TRACE_3("startTimer",_explosive,_delay,_triggerClassname); [{ - params ["_explosive"]; + params ["_explosive", "_triggerClassname"]; TRACE_1("Explosive Going Boom",_explosive); if (!isNull _explosive) then { - [_explosive, -1, [_explosive, 0]] call FUNC(detonateExplosive); + [_explosive, -1, [_explosive, 0], _triggerClassname] call FUNC(detonateExplosive); }; -}, [_explosive], _delay] call CBA_fnc_waitAndExecute; +}, [_explosive, _triggerClassname], _delay] call CBA_fnc_waitAndExecute; diff --git a/addons/explosives/stringtable.xml b/addons/explosives/stringtable.xml index d4ba515406..f34a160cca 100644 --- a/addons/explosives/stringtable.xml +++ b/addons/explosives/stringtable.xml @@ -14,6 +14,8 @@ Взрывчатка 爆発物 폭발물 + 炸药 + 炸藥 Place @@ -28,6 +30,8 @@ Установить 設置 설치 + 放置 + 放置 Detonate @@ -42,6 +46,8 @@ Подрыв 点火 폭파 + 引爆 + 引爆 Detonate All @@ -55,6 +61,8 @@ Detonar Tudo すべて点火 모두 폭파 + 引爆全部 + 引爆全部 Explosive code: %1 @@ -69,6 +77,8 @@ Codice esplosivo: %1 爆破コード: %1 폭파 코드: %1 + 炸药代码: %1 + 炸藥代碼: %1 Place @@ -83,6 +93,8 @@ Установить 設置 설치 + 放置 + 放置 Attach @@ -97,6 +109,8 @@ Прикрепить 取り付け 부착 + 连接 + 連接 Blocked @@ -110,6 +124,8 @@ Bloqué 取り付けできない 막힘 + 断开 + 斷開 Cancel @@ -124,6 +140,8 @@ Отмена 中止 취소 + 取消 + 取消 Rotate @@ -138,6 +156,8 @@ Bращать 向きを変える 회전 + 旋转 + 旋轉 Turn On Thor III @@ -152,6 +172,8 @@ Активировать Thor III Thor III を使う Thor III 켜기 + 开启索尔三型 + 開啟索爾三型 Turn Off Thor III @@ -166,6 +188,8 @@ Деактивировать Thor III Thor III を止める Thor III 끄기 + 关闭索尔三型 + 關閉索爾三型 Cellphone @@ -180,6 +204,8 @@ Сотовый телефон 携帯電話 휴대전화 + 手机 + 手機 Used to remotely trigger explosives @@ -194,6 +220,8 @@ Используется для удаленной детонации СВУ 爆発物を遠隔で起爆させるのに使います 원격으로 폭발물을 폭파시킬때 씁니다. + 用于远端引爆炸药 + 用於遠端引爆炸藥 M57 Firing Device @@ -208,6 +236,8 @@ Взрыватель M57 M57 起爆装置 M57 격발기 + M57 引爆装置 + M57 引爆裝置 Used to remotely trigger explosives @@ -222,6 +252,8 @@ Используется для удаленной детонации зарядов 爆発物を遠隔で起爆させるのに使います 원격으로 폭발물을 폭파시킬때 씁니다. + 用于远端引爆炸药 + 用於遠端引爆炸藥 M152 Firing Device @@ -236,6 +268,8 @@ Взрыватель M152 M152 起爆装置 M152 격발기 + M152 引爆装置 + M152 引爆裝置 M152 RAMS @@ -250,6 +284,8 @@ M152 RAMS M152 RAMS M152 RAMS + M152 远端炸药引爆系统 + M152 遠端炸藥引爆系統 Defusal Kit @@ -264,6 +300,8 @@ Комплект разминирования 解除キット 해체 장비 + 拆弹工具 + 拆彈工具 Allows defusing of explosives @@ -278,6 +316,8 @@ Позволяет обезвреживать взрывчатку 爆発物を無力化できます 폭발물을 해체할 수 있게 해줍니다 + 可以用来拆除炸弹 + 可以用來拆除炸彈 Add to Speed Dial @@ -292,6 +332,8 @@ Добавить в быстрый вызов 短縮ダイアルに追加 단축키에 지정 + 增加到快速拨号 + 增加到快速撥號 Clear @@ -306,6 +348,8 @@ Очистить 消去 삭제 + 清除 + 清除 Dial @@ -320,6 +364,8 @@ Hабрать ダイアル 다이얼 + 拨号 + 撥號 Up @@ -334,6 +380,8 @@ Вызов 上へ + + Down @@ -348,6 +396,8 @@ Сброс 下へ 아래 + + Cancel @@ -362,6 +412,8 @@ Отмена 中止 취소 + 取消 + 取消 Detonate Menu @@ -376,6 +428,8 @@ Меню подрыва 点火メニュー 폭파 메뉴 + 引爆选单 + 引爆選單 Place Menu @@ -390,6 +444,8 @@ Меню установки 設置メニュー 설치 메뉴 + 放置选单 + 放置選單 Defuse @@ -404,6 +460,8 @@ Обезвредить 無力化 해체 + 拆除 + 拆除 Defusing Explosive... @@ -418,6 +476,8 @@ Обезвреживание... 爆発物を無力化中・・・ 폭발물 해체중... + 炸弹拆除中... + 炸彈拆除中... Timer @@ -432,6 +492,8 @@ Таймер タイマー 타이머 + 计时器 + 計時器 Time: %1m %2s @@ -446,6 +508,8 @@ Время: %1m %2c 設定時間: %1分 %2秒 시간: %1분 %2초 + 时间: %1分%2秒 + 時間: %1分%2秒 Set Time @@ -460,6 +524,8 @@ Установить время 時間を設定 시간 설정 + 设定时间 + 設定時間 Select a Trigger @@ -474,6 +540,8 @@ Выберите детонатор 点火装置を選択 작동방식 선택 + 选择一个触发器 + 選擇一個觸發器 Select @@ -488,6 +556,8 @@ Выбрать 選択 선택 + 选择 + 選擇 Pressure Plate @@ -502,6 +572,8 @@ Нажимная плита 圧力感知式 압력식 + 压力盘 + 壓力盤 Tripwire @@ -516,6 +588,8 @@ Растяжка 仕掛け線 인계철선 + 绊线 + 絆線 IR Sensor @@ -530,6 +604,8 @@ ИК сенсор 赤外線感知式 적외선 센서 + 红外线感应器 + 紅外線感應器 No triggers available for %1 @@ -544,6 +620,8 @@ Нет доступных взрывателей для %1 %1 につかえる点火装置がありません %1(을)를 작동할 장치가 없습니다. + 没有适合%1的触发器 + 沒有適合%1的觸發器 IR Sensor (Side Attack) @@ -558,6 +636,8 @@ ИК сенсор (детонация вбок) 赤外線感知式 (横からの攻撃) 적외선 센서 (측면 공격) + 红外线感应器 (侧边攻击) + 紅外線感應器 (側邊攻擊) Magnetic Influence Sensor (Bottom Attack) @@ -572,6 +652,8 @@ Магнитный сенсор (детонация вверх) 磁気感知式 (下からの攻撃) 자기장 감지센서 (바닥 공격) + 磁性感应器 (底部攻击) + 磁性感應器 (底部攻擊) No explosives on trigger. @@ -586,6 +668,8 @@ Взрыватель не подсоединён к взрывчатке 点火装置に爆発物がありません。 격발기에 등록된 폭발물이 없습니다. + 触发器上并没有炸药 + 觸發器上並沒有炸藥 Dead Man's Switch @@ -600,6 +684,8 @@ Detonatore a rilascio 自爆装置 자폭 장치 + 自杀炸弹客引爆器 + 自殺炸彈客引爆器 Used to remotely trigger explosives when released. @@ -614,6 +700,8 @@ Usato per attivare a distanza esplosivi al momento del rilascio 点火装置を離すと遠隔で起爆したいときに使います。 압력이 해제될때 원격으로 폭발시킵니다. + 当放开按钮时, 将会引爆炸弹. + 當放開按鈕時, 將會引爆炸彈. Pick up @@ -628,6 +716,8 @@ Pegar 拾う 줍기 + 捡起 + 撿起 Explosive System @@ -642,6 +732,8 @@ Sistema Esplosivi 爆発システム 폭발물 시스템 + 炸药系统 + 炸藥系統 Require specialists? @@ -656,6 +748,8 @@ Richiedi specialisti? 特技兵を必要としますか? 전문가가 필요합니까? + 需要专家? + 需要專家? Require explosive specialists to disable explosives? Default: No @@ -670,6 +764,8 @@ Richiedi specialisti esplosivi per disabilitare esplosivi? Default: No 爆発物を無効化するには、爆発物の特技兵を必要としますか?標準:いいえ 폭발물을 해제하기 위해서는 전문가가 필요합니까? 기본설정: 아니요 + 需要炸弹专家才能拆除炸弹? 预设: 否 + 需要炸彈專家才能拆除炸彈? 預設: 否 Punish non-specialists? @@ -684,6 +780,8 @@ Punisci non-specialisti? 非特技兵へ足かせを与えますか? 비-전문가에 불이익을 줍니까? + 折磨非专业人员? + 折磨非專業人員? Increase the time it takes to complete actions for non-specialists? Default: Yes @@ -698,6 +796,8 @@ Aumenta il tempo richiesto per completare azioni per non-specialisti? Default: Si 非特技兵は動作を完了する必要を増加させますか?標準:はい 비-전문가가 폭발물을 해제시 더욱 많은 시간을 소요합니까? 기본설정: 예 + 增加非专业人员相关操作的时间? 预设: 是 + 增加非專業人員相關操作的時間? 預設: 是 Explode on defusal? @@ -712,6 +812,8 @@ Fai esplodere quando disarmato? 解除時に爆発させますか? 해제시 폭발합니까? + 拆除时引爆? + 拆除時引爆? Enable certain explosives to explode on defusal? Default: Yes @@ -726,6 +828,8 @@ Abilita alcuni esplosivi per esplosione al disarmo? Default: Si 特定の爆発物へ、解除時に爆発させますか?標準:はい 특정 폭발물이 해제시 폭발하게 합니까? 기본설정: 예 + 启用后, 某些炸弹会在拆除时引爆? 预设: 是 + 啟用後, 某些炸彈會在拆除時引爆? 預設: 是 This module adjusts the settings related to explosives. @@ -740,6 +844,8 @@ Questo modulo cambia le impostazioni relative agli esplosivi このモジュールを調節し爆発物に設定を反映させます。 이 모듈은 폭발물에 관한 설정을 수정할 수 있게합니다. + 此模块用来调整炸药的相关设定 + 此模塊用來調整炸藥的相關設定 M6 SLAM Mine (Bottom Attack) @@ -760,6 +866,8 @@ Мина M6 SLAM (направлена вверх) M6 SLAM 地雷 (下からの攻撃) M6 SLAM 지뢰 (바닥 공격) + M6指向性反装甲地雷 (底部攻击) + M6指向性反裝甲地雷 (底部攻擊) M6 SLAM Mine (Side Attack) @@ -780,6 +888,8 @@ Мина M6 SLAM (направлена вбок) M6 SLAM 地雷 (横からの攻撃) M6 SLAM 지뢰 (측면 공격) + M6指向性反装甲地雷 (侧边攻击) + M6指向性反裝甲地雷 (側邊攻擊) Large IED (Urban, Pressure Plate) @@ -800,6 +910,8 @@ Большое СВУ (городское, нажимного действия) 大きな IED (市街地用、圧力感知) 대형 급조폭발물 (시가지, 압력식) + 大型简易爆炸装置 (地表上, 压力盘) + 大型簡易爆炸裝置 (地表上, 壓力盤) Large IED (Dug-in, Pressure Plate) @@ -820,6 +932,8 @@ Большое СВУ (закопанное, нажимного действия) 大きな IED (埋め込み型、圧力感知) 대형 급조폭발물 (묻힘, 압력식) + 大型简易爆炸装置 (地表下, 压力盘) + 大型簡易爆炸裝置 (地表下, 壓力盤) Small IED (Urban, Pressure Plate) @@ -840,6 +954,8 @@ Малое СВУ (городское, нажимного действия) 小さな IED (市街地用、圧力感知) 소형 급조폭발물 (시가지, 압력식) + 小型简易爆炸装置 (地表上, 压力盘) + 小型簡易爆炸裝置 (地表上, 壓力盤) Small IED (Dug-in, Pressure Plate) @@ -860,6 +976,8 @@ Малое СВУ (закопанное, нажимного действия) 小さな IED (埋め込み型、圧力感知) 소형 급조폭발물 (묻힘, 압력식) + 小型简易爆炸装置 (地表下, 压力盘) + 小型簡易爆炸裝置 (地表下, 壓力盤) Connect to %1 @@ -874,6 +992,8 @@ Conectar à %1 %1 へ接続 %1에 연결중 + 连接到%1 + 連接到%1 Tripwire Flare @@ -882,6 +1002,10 @@ Flara na linkę Stolperdraht-Leuchtrakete 조명지뢰 + Fusée éclairante avec fil de détente + Cavo d'innesco + 绊线闪光地雷 + 絆線閃光地雷 Type: Tripwire flare - Ignites a non-lethal flare when triggered.<br />Rounds: 1<br />Used on: Ground @@ -890,6 +1014,10 @@ Typ: Flara na linkę - Wystrzeliwuje nieszkodliwą flarę przy nadepnięciu linki.<br/>Pociski: 1<br/>Używane na: ziemia Typ: Stolperdraht-Leuchtrakete - Schießt bei Auslösung eine nicht-tödliche Leuchtrakete ab.<br />Ladungen: 1<br />Benutzt auf: Boden 종류: 조명지뢰 - 작동시 무해한 조명을 사출합니다.<br />장탄수: 1<br />사용처: 지면 + Type : Fusée éclairante avec fil de détente - Allume une fusée éclairante lorsque déclenché. <br />Coups : 1<br />Utilisé sur : le sol + Tipo: Cavo d'innesco - Sfocio un abbaglio non letale quanto attivato. <br />Rimanenti: 1<br />Usato: A terra + 类型: 绊线闪光地雷 - 触发后产生非致命性的强光.<br />发数: 1<br />使用于: 地面 + 類型: 絆線閃光地雷 - 觸發後產生非致命性的強光.<br />發數: 1<br />使用於: 地面 diff --git a/addons/fastroping/functions/fnc_deployAIWaypoint.sqf b/addons/fastroping/functions/fnc_deployAIWaypoint.sqf index 9d8f4a03e2..df8cdef0c1 100644 --- a/addons/fastroping/functions/fnc_deployAIWaypoint.sqf +++ b/addons/fastroping/functions/fnc_deployAIWaypoint.sqf @@ -7,7 +7,7 @@ * 1: Waypoint position * * Return Value: - * true + * true * * Example: * [_group, [6560, 12390, 0]] call ace_fastroping_fnc_deployAIWayoint diff --git a/addons/fastroping/functions/fnc_onRopeBreak.sqf b/addons/fastroping/functions/fnc_onRopeBreak.sqf index ed5f8bf1c8..29da355481 100644 --- a/addons/fastroping/functions/fnc_onRopeBreak.sqf +++ b/addons/fastroping/functions/fnc_onRopeBreak.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [[array]], "top"] call ace_fastroping_fnc_onRopeBreak + * * Public: No */ diff --git a/addons/fastroping/stringtable.xml b/addons/fastroping/stringtable.xml index 362b422fa1..f3988ee14f 100644 --- a/addons/fastroping/stringtable.xml +++ b/addons/fastroping/stringtable.xml @@ -7,12 +7,14 @@ Wyposaż FRIES Equiper le FRIES Equipar FRIES - Equipaggia la FRIES + Equipaggia il FRIES Vybavit FRIES Equipar FRIES Десантирование по канатам FRIES を装備 FRIES 장착 + 启用快速绳降及撤离系统 + 啟用快速繩降及撤離系統 Equips compatible helicopters with a Fast Rope Insertion Extraction System. @@ -20,12 +22,14 @@ Wyposaża kompatybilne helikoptery w zestaw Fast Rope Insertion Extraction System. Equipe les hélicoptères compatibles avec un Module Fast Rope Insertion Extraction System. Equipar helicoptero compatible con un Sistema de Inserción Extracción Fast Rope. - Equipagga l'elicottero compatibile con il Fast Rope Insertion Exstraction System + Equipagga l'elicottero compatibile con il Fast Rope Insertion Extraction System Vybavit kompatibilní vrtulníky systémem Fast Rope Insertion Extraction (FRIES). Equipa um helicóptero compatível com o Fast Rope Insertion Exctraction System. Снаряжает совместимые вертолеты оборудованием для спуска десанта по канатам. ヘリコプターで Fast Rope Insertion Extraction System を使えるようにします 패스트로프 투입 및 탈출 시스템을 호환되는 헬리콥터에 적용합니다. + 使可相容的直升机启用快速绳降及撤离系统 + 使可相容的直升機啟用快速繩降及撤離系統 Prepare fast roping system @@ -39,6 +43,8 @@ Подготовить канаты ファスト ロープのシステムを準備 패스트로프 준비 + 准备快速绳降系统 + 準備快速繩降系統 Deploy ropes @@ -52,6 +58,8 @@ Зацепить канаты ロープを展開 줄 배치 + 部属绳索 + 部屬繩索 Fast rope @@ -59,12 +67,14 @@ Zjedź na linie Descendre à la corde Descender por la cuerda - Scendi sulla corda + Scendi dalla corda SLANIT Descida rápida Спуститься по канату ファスト ロープをする 강하하기 + 快速绳降 + 快速繩降 Cut ropes @@ -78,6 +88,8 @@ Обрезать канаты ロープを切断 줄 자르기 + 剪掉绳索 + 剪掉繩索 Equip helicopter with FRIES @@ -85,12 +97,14 @@ Wyposaż helikopter w FRIES Equiper l'hélicoptère avec le FRIES Equipar helicoptero con FRIES - Equipaggia l'elicottero con FRIES + Equipaggia l'elicottero con il FRIES Vybavit vrtulník pomocí FRIES Equipar helicóptero com FRIES Снарядить вертолет канатами для спуска ヘリコプターへ FRIES を装備 헬리콥터에 FRIES 장착 + 启用快速绳降及撤离系统给指定的直升机 + 啟用快速繩降及撤離系統給指定的直升機 Equips the selected helicopter with a Fast Rope Insertion Extraction System @@ -104,6 +118,8 @@ Снаряжает выбранный вертолет оборудованием для спуска десанта по канатам 選択されたヘリコプターで Fast Rope Insertion Extraction System を使えるようにします。 선택된 헬리콥터에 패스트로프 투입 및 탈출 시스템을 장착합니다. + 使指定的直升机启用快速绳降及撤离系统 + 使指定的直升機啟用快速繩降及撤離系統 LET UNITS FAST ROPE @@ -114,6 +130,8 @@ ДЕСАНТИРОВАНИЕ ПО КАНАТУ ユニットへファスト ロープをさせる ZJAZD NA LINACH + 让单位快速绳降 + 讓單位快速繩降 diff --git a/addons/fcs/CfgEventHandlers.hpp b/addons/fcs/CfgEventHandlers.hpp index b477f93d6a..9c5c368307 100644 --- a/addons/fcs/CfgEventHandlers.hpp +++ b/addons/fcs/CfgEventHandlers.hpp @@ -17,7 +17,7 @@ class Extended_PostInit_EventHandlers { }; }; -class Extended_Init_EventHandlers { +class Extended_InitPost_EventHandlers { class Tank { class ADDON { serverInit = QUOTE(_this call FUNC(vehicleInit)); diff --git a/addons/fcs/CfgOptics.hpp b/addons/fcs/CfgOptics.hpp index aa68a6f68a..f8770d7327 100644 --- a/addons/fcs/CfgOptics.hpp +++ b/addons/fcs/CfgOptics.hpp @@ -11,110 +11,13 @@ h = 0; \ }; +class RscText; class RscControlsGroup; class RscMapControl; class RscInGameUI { class RscUnitInfo; - class RscUnitInfo_AH64D_gunner { - controls[] = {"CA_Distance","ACE_CA_Distance"}; - MACRO_RANGEFINDER - }; - class RscWeaponRangeFinder { - controls[] = {"CA_Distance","ACE_CA_Distance"}; - MACRO_RANGEFINDER - }; - class RscWeaponRangeFinderPAS13 { - MACRO_RANGEFINDER - }; - class RscOptics_Rangefinder: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscWeaponRangeFinderMAAWS { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscWeaponRangeFinderAbramsCom { - controls[] = {"CA_Distance","ACE_CA_Distance"}; - MACRO_RANGEFINDER - }; - class RscWeaponRangeFinderAbramsGun { - controls[] = {"CA_Distance","ACE_CA_Distance"}; - MACRO_RANGEFINDER - }; - class RscWeaponRangeFinderStrykerMGSGun { - controls[] = {"CA_Distance","ACE_CA_Distance"}; - MACRO_RANGEFINDER - }; - class RscOptics_crows: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_strider_commander { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - - class RscWeaponRangeZeroing: RscUnitInfo { - controls[] = {"CA_Zeroing", "CA_DistanceText", "CA_Distance","ACE_CA_Distance", "ACE_Rangehelper"}; - MACRO_RANGEFINDER - }; - class RscOptics_sos: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_nightstalker: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_tws: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_punisher { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_tws_sniper: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_SDV_periscope { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; class RscOptics_Heli_Attack_02_gunner: RscUnitInfo { class CA_IGUI_elements_group: RscControlsGroup { class controls { @@ -122,7 +25,7 @@ class RscInGameUI { }; }; }; - class Rsc_ACE_Helo_UI_Turret: RscUnitInfo { + class Rsc_ACE_Helo_UI_Turret: RscUnitInfo { // RscOptics_Heli_Attack_01_gunner onLoad = "[""onLoad"",_this,""RscUnitInfo"",'IGUI'] call (uinamespace getvariable 'BIS_fnc_initDisplay'); uiNamespace setVariable ['ACE_dlgRangefinder', _this select 0]; ((_this select 0) displayCtrl 151) ctrlSetTextColor [0, 0, 0, 0];"; class CA_IGUI_elements_group: RscControlsGroup { class controls { @@ -130,103 +33,30 @@ class RscInGameUI { }; }; }; - class RscOptics_Heli_Attack_01_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_UAV_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_UGV_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; + class RscOptics_APC_Tracked_01_gunner: RscUnitInfo { class CA_IGUI_elements_group: RscControlsGroup { class controls { - MACRO_RANGEFINDER + class CA_Distance: RscText {}; }; }; }; - class RscOptics_APC_Tracked_03_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_APC_Wheeled_01_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_APC_Wheeled_03_commander: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_APC_Wheeled_03_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_MBT_01_commander: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_MBT_01_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_MBT_02_commander: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_MBT_02_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - class RscOptics_MBT_03_gunner: RscUnitInfo { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER - }; - }; - }; - - // marksmen - class RscOptics_LaserDesignator_02 { - class CA_IGUI_elements_group: RscControlsGroup { - class controls { - MACRO_RANGEFINDER + class ACE_RscOptics_APC_Tracked_01_gunner: RscOptics_APC_Tracked_01_gunner { + class CA_IGUI_elements_group: CA_IGUI_elements_group { + class controls: controls { + // MACRO_RANGEFINDER + modify IDC of CA_Distance + class CA_Distance: CA_Distance { + idc = 151; + }; + class ACE_CA_Distance: CA_Distance { + idc = 1713151; + text = "----"; + }; + class ACE_Rangehelper: RscMapControl { + onDraw = "((ctrlParent (_this select 0)) displayCtrl 1713151) ctrlShow (cameraView == 'GUNNER');"; + w = 0; + h = 0; + }; }; }; }; diff --git a/addons/fcs/CfgVehicles.hpp b/addons/fcs/CfgVehicles.hpp index 82572f2c68..47b731a66c 100644 --- a/addons/fcs/CfgVehicles.hpp +++ b/addons/fcs/CfgVehicles.hpp @@ -49,9 +49,6 @@ class CfgVehicles { class Turrets { class MainTurret: NewTurret { GVAR(Enabled) = 1; // all tracked vehicles get one by default - class Turrets { - class CommanderOptics; - }; }; }; }; @@ -60,231 +57,52 @@ class CfgVehicles { class Turrets { class MainTurret: NewTurret { GVAR(Enabled) = 1; // all tracked vehicles get one by default - class Turrets { - class CommanderOptics;//: CommanderOptics {}; - }; }; }; }; - class Car_F: Car { - class Turrets { - class MainTurret; - }; - }; - - class Wheeled_APC_F: Car_F { - class Turrets { - class MainTurret: NewTurret { - class Turrets { - class CommanderOptics;//: CommanderOptics {}; - }; - }; - }; - }; - - class MRAP_01_base_F: Car_F {}; - - class MRAP_01_gmg_base_F: MRAP_01_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - - class MRAP_01_hmg_base_F: MRAP_01_gmg_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - - class B_MRAP_01_F: MRAP_01_base_F { - class Turrets; - }; - - class MRAP_02_base_F: Car_F {}; - - class MRAP_02_hmg_base_F: MRAP_02_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - - class MRAP_02_gmg_base_F: MRAP_02_hmg_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - - class O_MRAP_02_F: MRAP_02_base_F { - class Turrets; - }; - - class MRAP_03_base_F: Car_F { - class Turrets: Turrets { - class CommanderTurret: MainTurret { - GVAR(Enabled) = 0; - }; - }; - }; - - class MRAP_03_hmg_base_F: MRAP_03_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - class CommanderTurret: CommanderTurret { - GVAR(Enabled) = 0; - }; - }; - }; - - class MRAP_03_gmg_base_F: MRAP_03_hmg_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - class CommanderTurret: CommanderTurret {}; - };*/ - }; - - class APC_Wheeled_01_base_F: Wheeled_APC_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret { - class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - }; - }; - };*/ - }; - - class B_APC_Wheeled_01_base_F: APC_Wheeled_01_base_F {}; - - class B_APC_Wheeled_01_cannon_F: B_APC_Wheeled_01_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - - class APC_Wheeled_02_base_F: Wheeled_APC_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - - // class CommanderOptics: CommanderOptics {}; - }; - }; - - class APC_Wheeled_03_base_F: Wheeled_APC_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - /*class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - };*/ - }; - }; - }; - - class I_APC_Wheeled_03_base_F: APC_Wheeled_03_base_F {}; - - class I_APC_Wheeled_03_cannon_F: I_APC_Wheeled_03_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - class APC_Tracked_01_base_F: Tank_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret { - class Turrets; - }; - };*/ - }; - - class B_APC_Tracked_01_base_F: APC_Tracked_01_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - - class B_APC_Tracked_01_rcws_F: B_APC_Tracked_01_base_F { class Turrets: Turrets { class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; + GVAR(Enabled) = 0; }; - class CommanderOptics: CommanderOptics {}; }; }; - class B_APC_Tracked_01_CRV_F: B_APC_Tracked_01_base_F { - //GVAR(Enabled) = 0; @todo - }; + class B_APC_Tracked_01_base_F: APC_Tracked_01_base_F {}; class B_APC_Tracked_01_AA_F: B_APC_Tracked_01_base_F { class Turrets: Turrets { class MainTurret: MainTurret { + GVAR(Enabled) = 1; + turretinfotype = "ACE_RscOptics_APC_Tracked_01_gunner"; + GVAR(MaxDistance) = 2000; discreteDistance[] = {}; discreteDistanceInitIndex = 0; magazines[] += {"ACE_120Rnd_35mm_ABM_shells_Tracer_Red"}; - - /*class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - };*/ }; }; }; class APC_Tracked_02_base_F: Tank_F { - /*class Turrets: Turrets { + class Turrets: Turrets { class MainTurret: MainTurret { - class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - }; + GVAR(Enabled) = 0; }; - };*/ + }; }; class O_APC_Tracked_02_base_F: APC_Tracked_02_base_F {}; - - class O_APC_Tracked_02_cannon_F: O_APC_Tracked_02_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - + class O_APC_Tracked_02_AA_F: O_APC_Tracked_02_base_F { class Turrets: Turrets { class MainTurret: MainTurret { + GVAR(Enabled) = 1; + turretinfotype = "ACE_RscOptics_APC_Tracked_01_gunner"; + GVAR(MaxDistance) = 2000; + discreteDistance[] = {}; + discreteDistanceInitIndex = 0; magazines[] += {"ACE_120Rnd_35mm_ABM_shells_Tracer_Green"}; - - /*class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - };*/ }; }; }; @@ -292,151 +110,31 @@ class CfgVehicles { class APC_Tracked_03_base_F: Tank_F { class Turrets: Turrets { class MainTurret: MainTurret { - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - /*class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - };*/ + GVAR(Enabled) = 0; }; }; }; class MBT_01_base_F: Tank_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - /*class Turrets: Turrets { - class CommanderOptics: CommanderOptics {}; - };*/ - }; - }; - }; - - class B_MBT_01_base_F: MBT_01_base_F {}; - - class B_MBT_01_cannon_F: B_MBT_01_base_F {}; - - class B_MBT_01_TUSK_F: B_MBT_01_cannon_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - class Turrets: Turrets { - class CommanderOptics: CommanderOptics { - GVAR(Enabled) = 1; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - }; - }; - - class MBT_01_arty_base_F: MBT_01_base_F { class Turrets: Turrets { class MainTurret: MainTurret { GVAR(Enabled) = 0; - - class Turrets: Turrets { - class CommanderOptics: CommanderOptics { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - }; - }; - - class MBT_01_mlrs_base_F: MBT_01_base_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 0; - //class Turrets; }; }; }; class MBT_02_base_F: Tank_F { - class Turrets: Turrets { - class MainTurret: MainTurret { - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - class Turrets: Turrets { - class CommanderOptics: CommanderOptics { - GVAR(Enabled) = 1; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - }; - }; - - class MBT_02_arty_base_F: MBT_02_base_F { class Turrets: Turrets { class MainTurret: MainTurret { GVAR(Enabled) = 0; - - class Turrets: Turrets { - class CommanderOptics: CommanderOptics { - GVAR(Enabled) = 1; - GVAR(MaxDistance) = 2000; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; }; }; }; - + class MBT_03_base_F: Tank_F { class Turrets: Turrets { class MainTurret: MainTurret { - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - - class Turrets: Turrets { - class CommanderOptics: CommanderOptics { - GVAR(Enabled) = 1; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - }; - }; - - // SHIPS - class Ship: AllVehicles { - class Turrets { - class MainTurret; - }; - }; - - class Ship_F: Ship {}; - - class Boat_F: Ship_F {}; - - class Boat_Armed_01_base_F: Boat_F { - class Turrets: Turrets { - class FrontTurret: NewTurret { - GVAR(enabled) = 1; - GVAR(minDistance) = 100; - GVAR(maxDistance) = 2000; - GVAR(distanceInterval) = 5; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - class RearTurret: FrontTurret { - discreteDistance[] = {100,200,300,400,600,800,1000,1200}; // Originally inherited from FrontTurret - discreteDistanceInitIndex = 4; + GVAR(Enabled) = 0; }; }; }; @@ -450,51 +148,7 @@ class CfgVehicles { }; }; - class Plane: Air {}; - - class Helicopter_Base_F: Helicopter { - class Turrets: Turrets { - class CopilotTurret; - }; - }; - - class Helicopter_Base_H: Helicopter_Base_F { - class Turrets: Turrets { - class CopilotTurret; - }; - }; - - class Heli_Light_01_base_F: Helicopter_Base_H { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - - class Heli_Light_01_unarmed_base_F: Heli_Light_01_base_F {}; - - class B_Heli_Light_01_F: Heli_Light_01_unarmed_base_F { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - - class Heli_Light_01_armed_base_F: Heli_Light_01_base_F { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - - class Heli_Light_02_base_F: Helicopter_Base_H { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - - class Plane_Base_F: Plane { - class Turrets { - class CopilotTurret; - }; - }; + class Helicopter_Base_F: Helicopter {}; class Heli_Attack_01_base_F: Helicopter_Base_F { class Turrets: Turrets { @@ -515,80 +169,4 @@ class CfgVehicles { }; }; }; - - class Heli_Transport_01_base_F: Helicopter_Base_H { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - class MainTurret: MainTurret {}; - class RightDoorGun: MainTurret {}; - };*/ - }; - - class Heli_Transport_02_base_F: Helicopter_Base_H { - /*class Turrets: Turrets { - class CopilotTurret: CopilotTurret {}; - };*/ - }; - - class Heli_light_03_base_F; - class I_Heli_light_03_base_F: Heli_light_03_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - class I_Heli_light_03_F: Heli_light_03_base_F { - /*class Turrets: Turrets { - class MainTurret: MainTurret {}; - };*/ - }; - - class Plane_CAS_01_base_F: Plane_Base_F { - class Turrets; - }; - - class Plane_CAS_02_base_F: Plane_Base_F { - class Turrets; - }; - - class Plane_Fighter_03_base_F: Plane_Base_F { - class Turrets; - }; - - // static weapons. - class StaticWeapon: LandVehicle { - class Turrets { - class MainTurret; //: NewTurret {}; - }; - }; - - class StaticMGWeapon: StaticWeapon {}; - - class HMG_01_base_F: StaticMGWeapon { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MinDistance) = 200; - GVAR(MaxDistance) = 2000; - GVAR(DistanceInterval) = 5; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; - - class StaticGrenadeLauncher: StaticWeapon {}; - class GMG_TriPod: StaticGrenadeLauncher {}; - - class GMG_01_base_F: GMG_TriPod { - class Turrets: Turrets { - class MainTurret: MainTurret { - GVAR(Enabled) = 1; - GVAR(MinDistance) = 200; - GVAR(MaxDistance) = 2000; - GVAR(DistanceInterval) = 5; - discreteDistance[] = {}; - discreteDistanceInitIndex = 0; - }; - }; - }; }; diff --git a/addons/fcs/CfgWeapons.hpp b/addons/fcs/CfgWeapons.hpp index 760e39e2de..555060b119 100644 --- a/addons/fcs/CfgWeapons.hpp +++ b/addons/fcs/CfgWeapons.hpp @@ -1,15 +1,6 @@ class CfgWeapons { - // disable locking, so it doesn't interfere with our system class CannonCore; - class cannon_120mm: CannonCore { - canLock = 0; - ballisticsComputer = 0; - }; - class autocannon_Base_F: CannonCore { - canLock = 0; - ballisticsComputer = 0; - }; class autocannon_35mm: CannonCore { canLock = 0; ballisticsComputer = 4; //was "4 + 2", 2 is for manual zeroing, 4 is for the lead indicator - https://community.bistudio.com/wiki/A3_Locking_Review#ballisticsComputer diff --git a/addons/fcs/XEH_postInit.sqf b/addons/fcs/XEH_postInit.sqf index 02c9e72ae5..ef6e89d5cc 100644 --- a/addons/fcs/XEH_postInit.sqf +++ b/addons/fcs/XEH_postInit.sqf @@ -21,3 +21,7 @@ if (!hasInterface) exitWith {}; // Register event for global updates [QGVAR(forceUpdate), {[ACE_player] call FUNC(onForceUpdate)}] call CBA_fnc_addEventHandler; + +#ifdef DEBUG_MODE_FULL +call compile preprocessFileLineNumbers QPATHTOF(functions\dev_debugConfigs.sqf); +#endif diff --git a/addons/fcs/functions/dev_debugConfigs.sqf b/addons/fcs/functions/dev_debugConfigs.sqf new file mode 100644 index 0000000000..73abd89771 --- /dev/null +++ b/addons/fcs/functions/dev_debugConfigs.sqf @@ -0,0 +1,88 @@ +// PabstMirror +#include "script_component.hpp" + +diag_log text format ["[ACE_FCS] ---------------"]; +private _vehicles = configProperties [configFile >> "CfgVehicles", "(isClass _x) && {2 == getNumber (_x >> 'scope')}", true]; +private _problemUIs = []; +{ + private _vehicleType = configName _x; + { + private _turret = _x; + private _config = [_vehicleType, _turret] call CBA_fnc_getTurret; + if (!isNull _config) then { + private _aceFCS = (getNumber (_config >> "ACE_FCS_Enabled")) == 1; + + private _vanillaFCS = false; + private _weapons = getArray (_config >> "weapons"); + { + private _weapon = _x; + private _ballisticComputer = getNumber (configFile >> "CfgWeapons" >> _weapon >> "ballisticsComputer"); + _ballisticComputer = [_ballisticComputer, 5] call ace_common_fnc_toBin; + if ((_ballisticComputer select [(count _ballisticComputer) - 5, 1]) == "1") then { + _vanillaFCS = true; + if (_aceFCS) then {diag_log text format ["%1 -> %2: ACE FCS Enabled CONFLICTS with vanilla FCS [%3]", _vehicleType, _weapon, _ballisticComputer];}; + }; + } forEach _weapons; + + if (!(_weapons isEqualTo [])) then { + private _fcsMsg = switch (true) do { + // case ((!_vanillaFCS) && {!_aceFCS}): {"No FCS"}; + // case ((_vanillaFCS) && {_aceFCS}): {"CONFLICT FCS"}; + // case (_vanillaFCS): {"Vanilla FCS"}; + // case (_aceFCS): {"ACE FCS"}; + default {""}; + }; + if (_fcsMsg != "") then {diag_log text format ["%1: %2", _vehicleType, _fcsMsg];}; + }; + + if (_vanillaFCS) then { + private _dd = getArray (_config >> "discreteDistance"); + if (_dd isEqualTo []) exitWith {diag_log format ["%1->%2: discreteDistance with vanillaFCS [%3]", _vehicleType, _turret, _config];}; + }; + + if (true) then { + private _turretInfo = getText (_config >> "turretInfoType"); + private _infoConfig = configFile >> "RscInGameUI" >> _turretInfo; + if (!isNull _infoConfig) then { + private _idcList = []; + + private _fncGetIDCS = { + params ["_subConfig"]; + if (!isClass _subConfig) exitWith {diag_log "err";}; + private _controlsArray = getArray (_subConfig >> "controls"); + { + [_subConfig >> _x] call _fncGetIDCS; + } forEach _controlsArray; + private _controlsConfig = configProperties [(_subConfig >> "controls"), "isClass _x", true]; + { + [_x] call _fncGetIDCS; + } forEach _controlsConfig; + _idcList pushBack getNumber (_subConfig >> "idc"); + }; + [_infoConfig] call _fncGetIDCS; + + if (_aceFCS && {!(1713151 in _idcList)}) then { + _problemUIs pushBackUnique format ["%1: ACE_FCS, but missing ACE_CA_DIST", _turretInfo]; + }; + if (_aceFCS && {(198 in _idcList)}) then { + _problemUIs pushBackUnique format ["%1: ACE_FCS, but NEW Lazr CA_DIST", _turretInfo, _vehicleType]; + }; + if ((!_aceFCS) && {(1713151 in _idcList)}) then { + _problemUIs pushBackUnique format ["%1: Not ACE but has ACE_CA_DIST", _turretInfo, _vehicleType]; + }; + if (_vanillaFCS && {!(198 in _idcList)}) then { + _problemUIs pushBackUnique format ["%1: vanillaFCS but missing NEW Lazr CA_DIST [just a warning]", _turretInfo, _vehicleType]; + }; + }; + }; + }; + } forEach [[0],[0,0]]; +} forEach _vehicles; + +_problemUIs sort true; + +diag_log text format ["[ACE_FCS] ------- Problem UIs --------"]; +{ + diag_log text format ["- %1", _x]; +} forEach _problemUIs; +diag_log text format ["[ACE_FCS] ---------------"]; diff --git a/addons/fcs/functions/fnc_adjustRange.sqf b/addons/fcs/functions/fnc_adjustRange.sqf index bed9389716..0f400a50fb 100644 --- a/addons/fcs/functions/fnc_adjustRange.sqf +++ b/addons/fcs/functions/fnc_adjustRange.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [bob, [], 5] call ace_fcs_fnc_adjustRange + * * Public: No */ #include "script_component.hpp" diff --git a/addons/fcs/functions/fnc_calculateSolution.sqf b/addons/fcs/functions/fnc_calculateSolution.sqf index 41cbfa5069..f28a1c7048 100644 --- a/addons/fcs/functions/fnc_calculateSolution.sqf +++ b/addons/fcs/functions/fnc_calculateSolution.sqf @@ -3,14 +3,17 @@ * Calculate FCS solution * * Arguments: - * 0: Vehicle - * 1: Turret - * 2: Target distance - * 3: Azimuth offset + * 0: Vehicle + * 1: Turret + * 2: Target distance + * 3: Azimuth offset * * Return Value: * None * + * Example: + * [car, [turret], 5, ?] call ace_fcs_fnc_calculateSolution + * * Public: No */ #include "script_component.hpp" diff --git a/addons/fcs/functions/fnc_canResetFCS.sqf b/addons/fcs/functions/fnc_canResetFCS.sqf index cf0dcf2674..8713357f3d 100644 --- a/addons/fcs/functions/fnc_canResetFCS.sqf +++ b/addons/fcs/functions/fnc_canResetFCS.sqf @@ -3,11 +3,14 @@ * Called from config. Can player reset FCS? * * Arguments: - * Nothing + * None * * Return Value: * Boolean * + * Example: + * call ace_fcs_fnc_canResetFCS + * * Public: No */ #include "script_component.hpp" diff --git a/addons/fcs/functions/fnc_canUseRangefinder.sqf b/addons/fcs/functions/fnc_canUseRangefinder.sqf index 7403c74ac1..a8b8239097 100644 --- a/addons/fcs/functions/fnc_canUseRangefinder.sqf +++ b/addons/fcs/functions/fnc_canUseRangefinder.sqf @@ -8,6 +8,9 @@ * Return Value: * Boolean * + * Example: + * call ace_fcs_fnc_canUseRangeFinder + * * Public: No */ #include "script_component.hpp" diff --git a/addons/fcs/functions/fnc_firedEH.sqf b/addons/fcs/functions/fnc_firedEH.sqf index dbfebae025..097722c958 100644 --- a/addons/fcs/functions/fnc_firedEH.sqf +++ b/addons/fcs/functions/fnc_firedEH.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * call ace_fcs_fnc_firedEH + * * Public: No */ #include "script_component.hpp" diff --git a/addons/fcs/functions/fnc_getAngle.sqf b/addons/fcs/functions/fnc_getAngle.sqf index d2c51a9542..d9e14a343b 100644 --- a/addons/fcs/functions/fnc_getAngle.sqf +++ b/addons/fcs/functions/fnc_getAngle.sqf @@ -14,6 +14,9 @@ * Return Value: * offset from the current angle necessary to hit the target * + * Example: + * [1, 2, 3, 4, 5, 6, 7] call ace_fcs_fnc_getAngle + * * Public: No */ #include "script_component.hpp" diff --git a/addons/fcs/functions/fnc_getRange.sqf b/addons/fcs/functions/fnc_getRange.sqf index ba49621047..829e4c9072 100644 --- a/addons/fcs/functions/fnc_getRange.sqf +++ b/addons/fcs/functions/fnc_getRange.sqf @@ -11,6 +11,9 @@ * Return Value: * Measured distance * + * Example: + * [5, 6, 7, true] call ace_fcs_fnc_getRange + * * Public: No */ #include "script_component.hpp" diff --git a/addons/fcs/functions/fnc_handleAirBurstAmmunitionPFH.sqf b/addons/fcs/functions/fnc_handleAirBurstAmmunitionPFH.sqf index aa166ece12..4c1c210994 100644 --- a/addons/fcs/functions/fnc_handleAirBurstAmmunitionPFH.sqf +++ b/addons/fcs/functions/fnc_handleAirBurstAmmunitionPFH.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [[array]] call ace_fcs_fnc_handleAirBurstAummunitionPFH + * * Public: No */ #include "script_component.hpp" diff --git a/addons/fcs/functions/fnc_keyDown.sqf b/addons/fcs/functions/fnc_keyDown.sqf index 3c4943badf..01795ce280 100644 --- a/addons/fcs/functions/fnc_keyDown.sqf +++ b/addons/fcs/functions/fnc_keyDown.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [car, [turret]] call ace_fcs_fnc_keyDown + * * Public: No */ #include "script_component.hpp" diff --git a/addons/fcs/functions/fnc_keyUp.sqf b/addons/fcs/functions/fnc_keyUp.sqf index a07f5d5d35..d35174a198 100644 --- a/addons/fcs/functions/fnc_keyUp.sqf +++ b/addons/fcs/functions/fnc_keyUp.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [car, [turret]] call ace_fcs_fnc_keyUp + * * Public: No */ #include "script_component.hpp" diff --git a/addons/fcs/functions/fnc_onForceUpdate.sqf b/addons/fcs/functions/fnc_onForceUpdate.sqf index 2c6d136300..1bbaee5b58 100644 --- a/addons/fcs/functions/fnc_onForceUpdate.sqf +++ b/addons/fcs/functions/fnc_onForceUpdate.sqf @@ -1,3 +1,19 @@ +/* + * Author: ACE-Team + * + * + * Arguments: + * Nothing + * + * Return Value: + * None + * + * Example: + * call ace_fcs_fnc_onForceUpdate + * + * Public: No + */ + #include "script_component.hpp" params ["_unit"]; diff --git a/addons/fcs/functions/fnc_reset.sqf b/addons/fcs/functions/fnc_reset.sqf index dcb1718b3f..9d4a5f65a0 100644 --- a/addons/fcs/functions/fnc_reset.sqf +++ b/addons/fcs/functions/fnc_reset.sqf @@ -7,7 +7,10 @@ * 1: Turret * * Return Value: - * none + * None + * + * Example: + * [car, [turret]] call ace_fcs_fnc_reset * * Public: No */ diff --git a/addons/fcs/functions/fnc_updateRangeHUD.sqf b/addons/fcs/functions/fnc_updateRangeHUD.sqf index 0bb15b2507..2e415b3f49 100644 --- a/addons/fcs/functions/fnc_updateRangeHUD.sqf +++ b/addons/fcs/functions/fnc_updateRangeHUD.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * call ace_fcs_fnc_updateRangeHUD + * * Public: No */ #include "script_component.hpp" diff --git a/addons/fcs/functions/fnc_vehicleInit.sqf b/addons/fcs/functions/fnc_vehicleInit.sqf index 901e0477ab..47b8359b2b 100644 --- a/addons/fcs/functions/fnc_vehicleInit.sqf +++ b/addons/fcs/functions/fnc_vehicleInit.sqf @@ -3,10 +3,13 @@ * Checks if a vehicle is equipped with an FCS and if so, adds the fired event handler. Execute on server. * * Arguments: - * 0: Vehicle + * 0: Vehicle * * Return Value: - * none + * None + * + * Example: + * [car] call ace_fcs_fnc_vehicleInit * * Public: No */ diff --git a/addons/fcs/stringtable.xml b/addons/fcs/stringtable.xml index 2418d649ce..9e776f34cd 100644 --- a/addons/fcs/stringtable.xml +++ b/addons/fcs/stringtable.xml @@ -14,6 +14,8 @@ Marcar com laser / Medir Distância レーザー ターゲット / 計測距離 목표까지 거리를 레이저로 취득 + 雷射指示目标 / 测量距离 + 雷射指示目標 / 測量距離 Zeroed To @@ -28,6 +30,8 @@ Azzeramento a 次にゼロイン 영점 조절 + 归零到 + 歸零到 Adjust FCS Range (Up) @@ -42,6 +46,8 @@ Диапазон СУО (Выше) FCS による距離を調節 (上げ) 사통장치 거리 조정 (위로) + 调整火控系统距离 (上) + 調整火控系統距離 (上) Adjust FCS Range (Down) @@ -56,6 +62,8 @@ Диапазон СУО (Ниже) FCS による距離を調節 (下げ) 사통장치 거리 조정 (아래로) + 调整火控系统距离 (下) + 調整火控系統距離 (下) Reset FCS @@ -70,6 +78,8 @@ Обнулить СУО FCS を初期化 사통장치 초기화 + 重置火控系统 + 重置火控系統 FCS has been reset. @@ -84,6 +94,8 @@ СУО обнулен. FCS は初期化された 사통장치 초기화됨 + 火控系统已被重置 + 火控系統已被重置 diff --git a/addons/finger/functions/fnc_moduleSettings.sqf b/addons/finger/functions/fnc_moduleSettings.sqf index c5189f4562..4667e76c51 100644 --- a/addons/finger/functions/fnc_moduleSettings.sqf +++ b/addons/finger/functions/fnc_moduleSettings.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [logic] call ace_finger_fnc_moduleSettings + * * Public: No */ diff --git a/addons/finger/functions/fnc_perFrameEH.sqf b/addons/finger/functions/fnc_perFrameEH.sqf index 94ea4fe067..a28a30ef96 100644 --- a/addons/finger/functions/fnc_perFrameEH.sqf +++ b/addons/finger/functions/fnc_perFrameEH.sqf @@ -24,6 +24,7 @@ if ((ACE_player != vehicle ACE_player) && {!((vehicle ACE_player) isKindOf "Stat private _iconSize = BASE_SIZE * 0.10713 * (call EFUNC(common,getZoom)); [+GVAR(fingersHash), { + //IGNORE_PRIVATE_WARNING ["_key", "_value"]; _value params ["_lastTime", "_pos", "_name"]; private _timeLeftToShow = _lastTime + FP_TIMEOUT - diag_tickTime; if (_timeLeftToShow <= 0) then { diff --git a/addons/finger/stringtable.xml b/addons/finger/stringtable.xml index c447e894cf..b6dc3c5f87 100644 --- a/addons/finger/stringtable.xml +++ b/addons/finger/stringtable.xml @@ -14,6 +14,8 @@ Mostra puntatore per te stesso 自分にポインティング表記を表示する 자신이 가리키는곳을 보여줍니다 + 显示指向指示器给自己 + 顯示指向指示器給自己 Render the indicator for the pointing player. This option doesn't affect whether the other players would see the indicator @@ -28,6 +30,8 @@ Mostra puntatore per il giocatore indicato. Questa opzione non influisce la possibilità che gli altri giocatori vedano il puntatore プレイヤーへのポインティング表記を描画します。このオプションは他のプレイヤーの表記に影響しません。 대상이 가리키는곳을 보이게 합니다. + 显示指向指示器给玩家自己. 此选项设定并不影响其他玩家能否看到指示器. + 顯示指向指示器給玩家自己. 此選項設定並不影響其他玩家能否看到指示器. Pointing indicator @@ -42,6 +46,8 @@ Indicatore di puntamento ポインティング表記 가리키기 표시기 + 指向指示器 + 指向指示器 Color of the pointing indicator circle @@ -56,6 +62,8 @@ Colore del cerchio dell'indicatore di puntamento ポインティング表記の円の色 가리키기의 원형 색상 + 指向指示器颜色 + 指向指示器顏色 Action "point a finger at" @@ -70,6 +78,8 @@ Azione "punta il dito a" "point a finger at"キー "손가락으로 가리키기"행동 + 使"手指指向在" + 使"手指指向在" Points, and shows a virtual marker of where you are looking to nearby units. Can be held down. @@ -84,6 +94,8 @@ Punta e mostra un marker virtuale di dove stai guardando alle unità vicine. Può essere tenuto premuto. ポイント、そして架空のマーカー表記は自ユニットの近くにいると表記されます。これは押しっぱなしにできます。 당신이 보는것을 가상의 마커로 표시함으로서 다른 인원이 볼 수 있게 합니다. 누른채로 유지할 수 있습니다. + 当按下此按键后, 你附近的单位即可看见一个虚拟图示, 标明你正在指向的位置. 此按键可以被按住来持续显示. + 當按下此按鍵後, 你附近的單位即可看見一個虛擬圖示, 標明你正在指向的位置. 此按鍵可以被按住來持續顯示. Pointing Settings @@ -98,6 +110,8 @@ Impostazioni puntamento ポインティング設定 가리키기 설정 + 指向设定 + 指向設定 Pointing Enabled @@ -112,6 +126,8 @@ Puntamento abilitato ポインティングを有効 가리키기 활성화 + 指向系统启动 + 指向系統啟動 Pointing Max Range @@ -126,6 +142,8 @@ Raggio massimo puntamento ポインティングの最大範囲 가리키기 최대 범위 + 指向指示器最大显示距离 + 指向指示器最大顯示距離 Max range between players to show the pointing indicator [default: 4 meters] @@ -140,6 +158,8 @@ Distanza massima tra giocatori per mostrare l'indicatore di puntamento [default: 4 metri] ポインティング表記が他のプレイヤーに表示される範囲を決定できます。(標準 4 メートル) 플레이어 사이에서 가리키기 표시를 보이게 하는 최대거리를 설정합니다[기본설정: 4 미터] + 设定指向指示器最大显示距离. [预设: 4公尺] + 設定指向指示器最大顯示距離. [預設: 4公尺] diff --git a/addons/flashlights/stringtable.xml b/addons/flashlights/stringtable.xml index 2a411e9158..d896d3724a 100644 --- a/addons/flashlights/stringtable.xml +++ b/addons/flashlights/stringtable.xml @@ -13,6 +13,8 @@ Fulton MX-991 Fulton MX-991 Fulton MX-991 + Fulton MX-991 + Fulton MX-991 Flashlight with red filter. For use on map. @@ -26,6 +28,8 @@ Lampe torche avec un filtre rouge. Pour utilisation sur carte. 赤色フィルタ付きのフラッシュライト。地図上でつかいます。 빨간색 필터가 달린 손전등입니다. 지도를 비출때 씁니다. + 拥有红色滤光片的手电筒. 用来照亮地图. + 擁有紅色濾光片的手電筒. 用來照亮地圖. Maglite XL50 @@ -39,6 +43,8 @@ Maglite XL50 Maglite XL50 Maglite XL50 + Maglite XL50 + Maglite XL50 White mini flashlight. For use on map. @@ -52,6 +58,8 @@ Mini lampe torche blanche. Pour utilisation sur carte. 白色光の小さなフラッシュライト。地図上でつかいます。 하얀색 조그마한 손전등. 지도를 비출때 씁니다. + 白色的迷你手电筒. 用来照亮地图. + 白色的迷你手電筒. 用來照亮地圖. KSF-1 @@ -65,6 +73,8 @@ KSF-1 KSF-1 KSF-1 + KSF-1 + KSF-1 Flashlight with red filter. For use on map. @@ -78,6 +88,8 @@ Lampe torche avec un filtre rouge. Pour utilisation sur carte. 赤色フィルタ付きのフラッシュライト。地図上でつかいます。 빨간색 필터가 달린 손전등입니다. 지도를 비출때 씁니다. + 拥有红色滤光片的手电筒. 用来照亮地图. + 擁有紅色濾光片的手電筒. 用來照亮地圖. diff --git a/addons/flashsuppressors/stringtable.xml b/addons/flashsuppressors/stringtable.xml index e35d442136..52563ea1c4 100644 --- a/addons/flashsuppressors/stringtable.xml +++ b/addons/flashsuppressors/stringtable.xml @@ -14,6 +14,8 @@ Bocacha (6,5 mm) 消炎器 (6.5 mm) 소염기 (6.5 mm) + 消光器 (6.5 mm) + 消光器 (6.5 mm) Flash Suppressor (7.62 mm) @@ -28,6 +30,8 @@ Bocacha (7,62 mm) 消炎器 (7.62 mm) 소염기 (7.62 mm) + 消光器 (7.62 mm) + 消光器 (7.62 mm) Flash Suppressor (5.56 mm) @@ -42,6 +46,8 @@ Bocacha (5,56 mm) 消炎器 (5.56 mm) 소염기 (5.56 mm) + 消光器 (5.56 mm) + 消光器 (5.56 mm) Flash Suppressor (.45 ACP) @@ -56,6 +62,8 @@ Bocacha (.45 ACP) 消炎器 (.45 ACP) 소염기 (.45 ACP) + 消光器 (.45 ACP) + 消光器 (.45 ACP) Flash Suppressor (9 mm) @@ -70,6 +78,8 @@ Bocacha (9 mm) 消炎器 (9 mm) 소염기 (9 mm) + 消光器 (9 mm) + 消光器 (9 mm) Flash Suppressor (.338) @@ -84,6 +94,8 @@ Bocacha (.338) 消炎器 (.338) 소염기 (.338) + 消光器 (.338) + 消光器 (.338) Flash Suppressor (9.3 mm) @@ -98,6 +110,8 @@ Bocacha (9,3 mm) 消炎器 (9.3 mm) 소염기 (9.3 mm) + 消光器 (9.3 mm) + 消光器 (9.3 mm) diff --git a/addons/frag/ACE_Settings.hpp b/addons/frag/ACE_Settings.hpp index eb0beea661..63a3d564d2 100644 --- a/addons/frag/ACE_Settings.hpp +++ b/addons/frag/ACE_Settings.hpp @@ -25,20 +25,13 @@ class ACE_Settings { displayName = CSTRING(MaxTrack); description = CSTRING(MaxTrack_Desc); typeName = "SCALAR"; - value = 500; + value = 10; }; class GVAR(maxTrackPerFrame) { category = CSTRING(Module_DisplayName); displayName = CSTRING(MaxTrackPerFrame); description = CSTRING(MaxTrackPerFrame_Desc); typeName = "SCALAR"; - value = 50; - }; - class GVAR(enableDebugTrace) { - category = CSTRING(Module_DisplayName); - displayName = CSTRING(EnableDebugTrace); - description = CSTRING(EnableDebugTrace_Desc); - typeName = "BOOL"; - value = 0; + value = 10; }; }; diff --git a/addons/frag/XEH_PREP.hpp b/addons/frag/XEH_PREP.hpp index a9a9d43c5b..a7fb8ff8c3 100644 --- a/addons/frag/XEH_PREP.hpp +++ b/addons/frag/XEH_PREP.hpp @@ -7,19 +7,17 @@ PREP(spallTrack); // * Other */ PREP(addBlackList); -PREP(addTrack); -PREP(drawTraces); -PREP(removeTrack); +PREP(dev_addTrack); +PREP(dev_drawTraces); PREP(spallHP); -PREP(startTracing); -PREP(stopTracing); -PREP(trackTrace); +PREP(dev_startTracing); +PREP(dev_stopTracing); +PREP(dev_trackTrace); // New tracking mechanisms PREP(masterPFH); PREP(pfhRound); PREP(addPfhRound); -PREP(removePfhRound); // THIS SHOULD ABE USED SPARINGLY // Explosive Reflection PREP(findReflections); diff --git a/addons/frag/XEH_postInit.sqf b/addons/frag/XEH_postInit.sqf index 20a6a1ca70..4126ca328c 100644 --- a/addons/frag/XEH_postInit.sqf +++ b/addons/frag/XEH_postInit.sqf @@ -1,11 +1,7 @@ #include "script_component.hpp" -if (GVAR(EnableDebugTrace) && {!isMultiplayer}) then { - GVAR(traceFrags) = true; - GVAR(autoTrace) = true; -}; - if (isServer) then { + GVAR(lastFragTime) = -1; [QGVAR(frag_eh), {_this call FUNC(frago);}] call CBA_fnc_addEventHandler; }; @@ -18,13 +14,19 @@ if (isServer) then { ["ace_firedPlayerVehicle", LINKFUNC(fired)] call CBA_fnc_addEventHandler; ["ace_firedNonPlayerVehicle", LINKFUNC(fired)] call CBA_fnc_addEventHandler; - [LINKFUNC(masterPFH), 0, []] call CBA_fnc_addPerFrameHandler; + addMissionEventHandler ["EachFrame", {call FUNC(masterPFH)}]; }] call CBA_fnc_addEventHandler; // Cache for ammo type configs GVAR(cacheRoundsTypesToTrack) = [false] call CBA_fnc_createNamespace; -#ifdef DEBUG_ENABLED_FRAG -[true, true, 30] call FUNC(dev_debugAmmo); + +// Debug stuff: + +#ifdef DRAW_FRAG_INFO +[] call FUNC(dev_startTracing); #endif +#ifdef DEBUG_MODE_FULL +[true, true, 30] call FUNC(dev_debugAmmo); +#endif diff --git a/addons/frag/XEH_preInit.sqf b/addons/frag/XEH_preInit.sqf index da87d01194..7cbd6092a1 100644 --- a/addons/frag/XEH_preInit.sqf +++ b/addons/frag/XEH_preInit.sqf @@ -6,23 +6,18 @@ PREP_RECOMPILE_START; #include "XEH_PREP.hpp" PREP_RECOMPILE_END; -GVAR(replacedBisArtyWrapper) = true; GVAR(blackList) = []; GVAR(traceFrags) = false; -GVAR(totalFrags) = 0; - GVAR(spallHPData) = []; GVAR(spallIsTrackingCount) = 0; -GVAR(autoTrace) = false; GVAR(traceID) = -1; GVAR(traces) = []; GVAR(tracesStarted) = false; GVAR(lastIterationIndex) = 0; GVAR(objects) = []; -GVAR(objectTypes) = []; GVAR(arguments) = []; ADDON = true; diff --git a/addons/frag/functions/fnc_addBlackList.sqf b/addons/frag/functions/fnc_addBlackList.sqf index 9950cab2b0..cfa96c9784 100644 --- a/addons/frag/functions/fnc_addBlackList.sqf +++ b/addons/frag/functions/fnc_addBlackList.sqf @@ -1,5 +1,21 @@ +/* + * Author: Jaynus, NouberNou + * Adds a round to the blacklist (will be ignored). + * + * Arguments: + * 0: Projectile + * + * Return Value: + * None + * + * Example: + * [bullet] call ace_frag_fnc_addBlackList + * + * Public: No + */ #include "script_component.hpp" params ["_round"]; +TRACE_1("addBlackList",_round); GVAR(blackList) pushBack _round; diff --git a/addons/frag/functions/fnc_addPfhRound.sqf b/addons/frag/functions/fnc_addPfhRound.sqf index a211752e98..f97d868b9d 100644 --- a/addons/frag/functions/fnc_addPfhRound.sqf +++ b/addons/frag/functions/fnc_addPfhRound.sqf @@ -1,27 +1,38 @@ +/* + * Author: Jaynus, NouberNou + * Starts tracking a round that will frag. + * Should only be called once per round. + * + * Arguments: + * 0: Shooter + * 1: Ammo classname + * 2: Projectile + * + * Return Value: + * None + * + * Example: + * [player, "handGrenade", bullet] call ace_frag_fnc_addPfhRound + * + * Public: No + */ //#define DEBUG_MODE_FULL #include "script_component.hpp" -params ["_gun", "_type", "_round", ["_doFragTrack", false]]; +params ["_gun", "_type", "_round"]; +TRACE_3("addPfhRound",_gun,_type,_round); -if (!GVAR(enabled)) exitWith {}; +if (!GVAR(enabled)) exitWith {TRACE_1("setting disabled",_this);}; -//_enabled = getNumber (configFile >> "CfgAmmo" >> _type >> QGVAR(enabled)); -//if (_enabled < 1) exitWith {}; +if (!alive _round) exitWith {TRACE_1("round dead?",_this);}; if (_round in GVAR(blackList)) exitWith { + TRACE_1("round in blackList",_this); REM(GVAR(blackList),_round); }; // Exit on max track -if ((count GVAR(objects)) > GVAR(MaxTrack)) exitWith {}; - -if ( - _gun == ACE_player || - {(gunner _gun) == ACE_player} || - {local _gun && {!(isPlayer (gunner _gun))} && {!(isPlayer _gun)}} -) then { - _doFragTrack = true; -}; +if ((count GVAR(objects)) >= GVAR(maxTrack)) exitWith {TRACE_1("maxTrack limit",count GVAR(objects));}; private _doSpall = false; if (GVAR(SpallEnabled)) then { @@ -29,23 +40,23 @@ if (GVAR(SpallEnabled)) then { GVAR(spallHPData) = []; }; if (GVAR(spallIsTrackingCount) > 5) then { - // ACE_player sideChat "LIMT!"; + TRACE_1("At Spall Limit",GVAR(spallIsTrackingCount)); } else { _doSpall = true; INC(GVAR(spallIsTrackingCount)); }; + TRACE_2("",_doSpall,GVAR(spallIsTrackingCount)); }; -// ACE_player sideChat format ["c: %1", GVAR(spallIsTrackingCount)]; -if (GVAR(autoTrace)) then { - [ACE_player, _round, [1, 0, 0, 1]] call FUNC(addTrack); -}; +#ifdef DRAW_FRAG_INFO +[ACE_player, _round, [0, 1, 0, 1]] call FUNC(dev_addTrack); +#endif // We only do the single track object check here. // We should do an {!(_round in GVAR(objects))} // But we leave that out here for optimization. So this cannot be a framework function // Otherwise, it should only be added once and from the FiredEH -if (_doFragTrack && {alive _round}) then { +if (alive _round) then { private _spallTrack = []; private _spallTrackID = []; @@ -64,5 +75,4 @@ if (_doFragTrack && {alive _round}) then { if (_doSpall) then { [_round, 1, _spallTrack, _spallTrackID] call FUNC(spallTrack); }; - // ACE_player sideChat "WTF2"; }; diff --git a/addons/frag/functions/fnc_addTrack.sqf b/addons/frag/functions/fnc_dev_addTrack.sqf similarity index 58% rename from addons/frag/functions/fnc_addTrack.sqf rename to addons/frag/functions/fnc_dev_addTrack.sqf index a93106d518..fd180eacfe 100644 --- a/addons/frag/functions/fnc_addTrack.sqf +++ b/addons/frag/functions/fnc_dev_addTrack.sqf @@ -1,10 +1,21 @@ +/* + * Author: ACE-Team + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_frag_fnc_addTack + * + * Public: No + */ + #include "script_component.hpp" -if (GVAR(autoTrace)) then { - [] call FUNC(startTracing); -}; - -// setAccTime 0.05; params ["_origin", "_obj", ["_color", [1, 0, 0, 1]]]; private _positions = []; @@ -13,4 +24,4 @@ _positions pushBack [getPos _obj, _objSpd]; private _data = [_origin, typeOf _origin, typeOf _obj, _objSpd, _positions, _color]; private _index = GVAR(traces) pushBack _data; -[DFUNC(trackTrace), 0, [_obj, _index, CBA_missionTime]] call CBA_fnc_addPerFrameHandler; +[DFUNC(dev_trackTrace), 0, [_obj, _index, CBA_missionTime]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/frag/functions/fnc_dev_debugAmmo.sqf b/addons/frag/functions/fnc_dev_debugAmmo.sqf index 894c532728..8eec5f04f5 100644 --- a/addons/frag/functions/fnc_dev_debugAmmo.sqf +++ b/addons/frag/functions/fnc_dev_debugAmmo.sqf @@ -1,3 +1,19 @@ +/* + * Author: ACE-Team + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_frag_fnc_debugAmmo + * + * Public: No + */ + #define DEBUG_MODE_FULL #include "script_component.hpp" diff --git a/addons/frag/functions/fnc_drawTraces.sqf b/addons/frag/functions/fnc_dev_drawTraces.sqf similarity index 70% rename from addons/frag/functions/fnc_drawTraces.sqf rename to addons/frag/functions/fnc_dev_drawTraces.sqf index 6dd710f61c..f7d36b4f02 100644 --- a/addons/frag/functions/fnc_drawTraces.sqf +++ b/addons/frag/functions/fnc_dev_drawTraces.sqf @@ -1,11 +1,26 @@ +/* + * Author: ACE-Team + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_frag_fnc_drawTraces + * + * Public: No + */ + #include "script_component.hpp" { - private _positions = _x select 4; - private _color = _x select 5; + _x params ["", "", "", "", "_positions", "_color"]; private _index = 0; private _max = count _positions; - private _lastSpd = []; + // private _lastSpd = []; private _lastPos = []; while {_index < _max} do { _data1 = _positions select _index; @@ -17,7 +32,7 @@ drawLine3D [_pos1, _pos2, _color]; _lastPos = _pos2; - _lastSpd = _data1 select 1; + // _lastSpd = _data1 select 1; }; // drawIcon3D ["", [1,0,0,1], _lastPos, 0, 0, 0, format ["%1m/s", _lastSpd], 1, 0.05, "RobotoCondensed"]; } forEach GVAR(traces); diff --git a/addons/frag/functions/fnc_dev_startTracing.sqf b/addons/frag/functions/fnc_dev_startTracing.sqf new file mode 100644 index 0000000000..e58445ec83 --- /dev/null +++ b/addons/frag/functions/fnc_dev_startTracing.sqf @@ -0,0 +1,24 @@ +/* + * Author: ACE-Team + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_frag_fnc_dev_startTracing + * + * Public: No + */ + +#include "script_component.hpp" + +if (GVAR(tracesStarted)) exitWith {}; + +INFO("Starting Trace Drawing"); + +GVAR(tracesStarted) = true; +GVAR(traceID) = [LINKFUNC(dev_drawTraces), 0, []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/frag/functions/fnc_dev_stopTracing.sqf b/addons/frag/functions/fnc_dev_stopTracing.sqf new file mode 100644 index 0000000000..f3b8fa234b --- /dev/null +++ b/addons/frag/functions/fnc_dev_stopTracing.sqf @@ -0,0 +1,23 @@ +/* + * Author: ACE-Team + * Dev things + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * + * Public: No + */ + +#include "script_component.hpp" + +if (!GVAR(tracesStarted)) exitWith {}; + +INFO("Ending Trace Drawing"); + +GVAR(tracesStarted) = false; +[GVAR(traceID)] call CBA_fnc_removePerFrameHandler; diff --git a/addons/frag/functions/fnc_trackTrace.sqf b/addons/frag/functions/fnc_dev_trackTrace.sqf similarity index 70% rename from addons/frag/functions/fnc_trackTrace.sqf rename to addons/frag/functions/fnc_dev_trackTrace.sqf index 07867ba1ff..b71f1982ff 100644 --- a/addons/frag/functions/fnc_trackTrace.sqf +++ b/addons/frag/functions/fnc_dev_trackTrace.sqf @@ -1,3 +1,19 @@ +/* + * Author: ACE-Team + * Dev things + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_frag_fnc_dev_trackTrace + * + * Public: No + */ + #include "script_component.hpp" params ["_args", "_pfhID"]; diff --git a/addons/frag/functions/fnc_doExplosions.sqf b/addons/frag/functions/fnc_doExplosions.sqf index 85074bdb13..25302cca7c 100644 --- a/addons/frag/functions/fnc_doExplosions.sqf +++ b/addons/frag/functions/fnc_doExplosions.sqf @@ -1,3 +1,19 @@ +/* + * Author: ACE-Team + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_frag_fnc_doExplosions + * + * Public: No + */ + //fnc_doExplosions.sqf #include "script_component.hpp" diff --git a/addons/frag/functions/fnc_doReflections.sqf b/addons/frag/functions/fnc_doReflections.sqf index b4bec189f7..622c4c57f4 100644 --- a/addons/frag/functions/fnc_doReflections.sqf +++ b/addons/frag/functions/fnc_doReflections.sqf @@ -1,3 +1,19 @@ +/* + * Author: ACE-Team + * Dev things + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_frag_fnc_doReflections + * + * Public: No + */ + //fnc_doReflections.sqf #include "script_component.hpp" diff --git a/addons/frag/functions/fnc_doSpall.sqf b/addons/frag/functions/fnc_doSpall.sqf index 5b9bf757c4..dcc1759648 100644 --- a/addons/frag/functions/fnc_doSpall.sqf +++ b/addons/frag/functions/fnc_doSpall.sqf @@ -1,3 +1,19 @@ +/* + * Author: ACE-Team + * Dev things + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_frag_fnc_doSpall + * + * Public: No + */ + //fnc_doSpall.sqf #include "script_component.hpp" // ACE_player sideChat "WAAAAAAAAAAAAAAAAAAAAA"; @@ -99,10 +115,11 @@ for "_i" from 1 to _spallCount do { _fragment setPosASL _spallPos; _fragment setVelocity _spallFragVect; - if (GVAR(traceFrags)) then { - [ACE_player, _fragment, [1, 0.5, 0, 1]] call FUNC(addTrack); - }; + #ifdef DRAW_FRAG_INFO + [ACE_player, _fragment, [1, 0.5, 0, 1]] call FUNC(dev_addTrack); + #endif }; + _spread = 5 + (random 5); _spallCount = 3 + (random 5); for "_i" from 1 to _spallCount do { @@ -121,7 +138,7 @@ for "_i" from 1 to _spallCount do { _fragment setPosASL _spallPos; _fragment setVelocity _spallFragVect; - if (GVAR(traceFrags)) then { - [ACE_player, _fragment, [1, 0, 0, 1]] call FUNC(addTrack); - }; + #ifdef DRAW_FRAG_INFO + [ACE_player, _fragment, [1, 0, 0, 1]] call FUNC(dev_addTrack); + #endif }; diff --git a/addons/frag/functions/fnc_findReflections.sqf b/addons/frag/functions/fnc_findReflections.sqf index f8c9685bda..774e1764ea 100644 --- a/addons/frag/functions/fnc_findReflections.sqf +++ b/addons/frag/functions/fnc_findReflections.sqf @@ -1,3 +1,19 @@ +/* + * Author: ACE-Team + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_frag_fnc_findReflections + * + * Public: No + */ + //fnc_findReflections.sqf #include "script_component.hpp" @@ -75,23 +91,18 @@ if (_zIndex < 5) then { private _explosions = []; { private _blist = _x select 1; - private _avgX = 0; - private _avgY = 0; - private _avgZ = 0; + private _avg = [0, 0, 0]; { - ADD(_avgX,_x select 0); - ADD(_avgY,_x select 1); - ADD(_avgZ,_x select 2); + _avg = _avg vectorAdd _x; } forEach _blist; _c = count _blist; - private _bpos = [_avgX / _c, _avgY / _c, _avgZ / _c]; + private _bpos = _avg vectorMultiply (1 / _c); private _distance = _pos vectorDistance _bpos; private _hitFactor = 1 - (((_distance / (_indirectHitRange * 4)) min 1) max 0); // _hitFactor = 1 / (_distance ^ 2); - private _hit = _indirectHit * _hitFactor; - _hit = (floor (_hit / 4)) min 500; + private _hit = (floor (_indirectHit * _hitFactor / 4)) min 500; SUB(_hit,_hit % 10); private _range = (floor (_indirectHitRange - (_distance / 4))) min 100; SUB(_range,_range % 2); diff --git a/addons/frag/functions/fnc_fired.sqf b/addons/frag/functions/fnc_fired.sqf index 6b12e09d76..b1e29a79ca 100644 --- a/addons/frag/functions/fnc_fired.sqf +++ b/addons/frag/functions/fnc_fired.sqf @@ -7,7 +7,7 @@ * None. Parameters inherited from EFUNC(common,firedEH) * * Return Value: - * Nothing + * None * * Example: * [clientFiredBIS-XEH] call ace_frag_fnc_fired @@ -30,7 +30,7 @@ if (isNil "_shouldAdd") then { _shouldAdd = false; }; - if (GVAR(SpallEnabled)) exitWith { + if (GVAR(spallEnabled)) exitWith { //Always want to run whenever spall is enabled? _shouldAdd = true; TRACE_2("SettingCache[spallEnabled]",_ammo,_shouldAdd); @@ -50,6 +50,14 @@ if (isNil "_shouldAdd") then { }; if (_shouldAdd) then { - TRACE_3("Running Frag Tracking",_unit,_ammo,_projectile); + // firedMan will have nil "_gunner", so just check _unit; for firedVehicle we want to check _gunner + private _localShooter = if (isNil "_gunner") then {local _unit} else {local _gunner}; + TRACE_4("",_localShooter,_unit,_ammo,_projectile); + if (!_localShooter) exitWith {}; + + // Skip if less than 0.5 second from last shot + if ((CBA_missionTime - (_unit getVariable [QGVAR(lastTrack), -1])) < 0.5) exitWith {}; + _unit setVariable [QGVAR(lastTrack), CBA_missionTime]; + [_unit, _ammo, _projectile] call FUNC(addPfhRound); }; diff --git a/addons/frag/functions/fnc_frago.sqf b/addons/frag/functions/fnc_frago.sqf index 51ed23cfea..a21e92d4b3 100644 --- a/addons/frag/functions/fnc_frago.sqf +++ b/addons/frag/functions/fnc_frago.sqf @@ -1,17 +1,35 @@ -//fnc_frago.sqf -// #define DEBUG_MODE_FULL +/* + * Author: Jaynus, NouberNou + * Server func to create the fragmentation for a round. + * + * Arguments: + * 0: Last Position (ASL) + * 1: Velocity + * 2: Ammo Classname + * + * Return Value: + * None + * + * Example: + * [[], [], "handGrenade"] call ace_frag_fnc_frago + * + * Public: No + */ +//#define DEBUG_MODE_FULL #include "script_component.hpp" #define FRAG_VEC_VAR 0.004 - #define MAX_FRAG_COUNT 50 -if (!isServer) exitWith {}; - BEGIN_COUNTER(frago); -// _startTime = diag_tickTime; -params ["_round", "_lastPos", "_lastVel", "_shellType", "_firedFrame", "_gun"]; +params ["_lastPos", "_lastVel", "_shellType"]; +TRACE_3("frago",_lastPos,_lastVel,_shellType); + +// Limit max frag count if there was a recent frag +private _maxFrags = round (MAX_FRAG_COUNT * linearConversion [0.1, 1.5, (CBA_missionTime - GVAR(lastFragTime)), 0.1, 1, true]); +TRACE_2("",_maxFrags,CBA_missionTime - GVAR(lastFragTime)); +GVAR(lastFragTime) = CBA_missionTime; private _fragTypes = [ QGVAR(tiny), QGVAR(tiny), QGVAR(tiny), @@ -28,12 +46,6 @@ if (isArray (configFile >> "CfgAmmo" >> _shellType >> QGVAR(CLASSES))) then { _warn = true; }; -private _isArmed = true; -if (!isNil "_gun") then { - private _fuseDist = getNumber(configFile >> "CfgAmmo" >> _shellType >> "fuseDistance"); - _isArmed = ((getPosASL _gun) distance _lastPos > _fuseDist); -}; - private _indirectHitRange = getNumber(configFile >> "CfgAmmo" >> _shellType >> "indirecthitrange"); private _fragRange = 20 * _indirectHitRange * 4; // _c = 185; // grams of comp-b @@ -59,117 +71,101 @@ if (_warn) then { INFO_1("Ammo class %1 lacks proper explosive properties definitions for frag!",_shellType); }; -private _fragPower = (((_m / _c) + _k) ^ - (1 / 2)) * _gC; -_fragPower = _fragPower * 0.8; // Gunery equation is for a non-fragmenting metal, imperical value of 80% represents fragmentation +// Gunery equation is for a non-fragmenting metal, imperical value of 80% represents fragmentation +private _fragPower = 0.8 * (((_m / _c) + _k) ^ - (1 / 2)) * _gC; private _atlPos = ASLtoATL _lastPos; private _fragPowerRandom = _fragPower * 0.5; if ((_atlPos select 2) < 0.5) then { - _lastPos set [2, (_lastPos select 2) + 0.5]; + _lastPos vectorAdd [0, 0, 0.5]; }; -// _manObjects = _atlPos nearEntities ["CaManBase", _fragRange]; - -// setAccTime 0.01; - -//_objects = nearestObjects [_atlPos, ["AllVehicles"], _fragRange]; // Not sure if tracking "ReammoBox" is required, if so revert this change for _objects private _objects = _atlPos nearEntities [["Car", "Motorcycle", "Tank", "StaticWeapon", "CAManBase", "Air", "Ship"], _fragRange]; - -// _objects = _manObjects; // Add unique crews in faster way { { _objects pushBackUnique _x; } forEach (crew _x); } forEach _objects; +TRACE_2("",_fragRange,count _objects); private _fragCount = 0; private _fragArcs = []; _fragArcs set [360, 0]; -#ifdef DEBUG_MODE_FULL - ACE_player sideChat format ["_fragRange: %1", _fragRange]; - ACE_player sideChat format ["_objects: %1", _objects]; -#endif - private _doRandom = true; -if (_isArmed && {!(_objects isEqualTo [])}) then { - if (GVAR(ReflectionsEnabled)) then { +if (!(_objects isEqualTo [])) then { + if (GVAR(reflectionsEnabled)) then { [_lastPos, _shellType] call FUNC(doReflections); }; { - //if (random(1) > 0.5) then { - private _target = _x; - if (alive _target) then { - private _boundingBox = boundingBox _target; - private _targetPos = getPosASL _target; - private _distance = _targetPos distance _lastPos; - private _add = (((_boundingBox select 1) select 2) / 2) + ((((_distance - (_fragpower / 8)) max 0) / _fragPower) * 10); - private _bbX = (abs ((_boundingBox select 0) select 0)) + ((_boundingBox select 1) select 0); - private _bbY = (abs ((_boundingBox select 0) select 1)) + ((_boundingBox select 1) select 1); - private _bbZ = (abs ((_boundingBox select 0) select 2)) + ((_boundingBox select 1) select 2); - private _cubic = _bbX * _bbY * _bbZ; - if (_cubic > 1) then { - _doRandom = true; + private _target = _x; + if (alive _target) then { + (boundingBox _target) params ["_boundingBoxA", "_boundingBoxB"]; - private _targetVel = velocity _target; + private _cubic = ((abs (_boundingBoxA select 0)) + (_boundingBoxB select 0)) * ((abs (_boundingBoxA select 1)) + (_boundingBoxB select 1)) * ((abs (_boundingBoxA select 2)) + (_boundingBoxB select 2)); - _targetPos = _targetPos vectorAdd [ - (_targetVel select 0) * (_distance / _fragPower), - (_targetVel select 1) * (_distance / _fragPower), - _add - ]; + if (_cubic <= 1) exitWith {}; + // _doRandom = true; - private _baseVec = _lastPos vectorFromTo _targetPos; + private _targetVel = velocity _target; + private _targetPos = getPosASL _target; + private _distance = _targetPos vectorDistance _lastPos; + private _add = ((_boundingBoxB select 2) / 2) + ((((_distance - (_fragpower / 8)) max 0) / _fragPower) * 10); - private _dir = floor (_baseVec call CBA_fnc_vectDir); - private _currentCount = _fragArcs select _dir; - ISNILS(_currentCount,0); - if (_currentCount < 20) then { - private _count = ceil (random (sqrt (_m / 1000))); - private _vecVar = FRAG_VEC_VAR; - if (!(_target isKindOf "Man")) then { - _vecVar = ((sqrt _cubic) / 2000) + FRAG_VEC_VAR; - if ((crew _target) isEqualTo [] && {_count > 0}) then { - _count = 0 max (_count / 2); - }; - }; - for "_i" from 1 to _count do { - private _vec = _baseVec vectorDiff [ - (_vecVar / 2) + (random _vecVar), - (_vecVar / 2) + (random _vecVar), - (_vecVar / 2) + (random _vecVar) - ]; + _targetPos = _targetPos vectorAdd [ + (_targetVel select 0) * (_distance / _fragPower), + (_targetVel select 1) * (_distance / _fragPower), + _add + ]; - private _fp = _fragPower - (random (_fragPowerRandom)); - private _vel = _vec vectorMultiply _fp; + private _baseVec = _lastPos vectorFromTo _targetPos; - private _fragType = round (random ((count _fragTypes) - 1)); - private _fragObj = (_fragTypes select _fragType) createVehicleLocal [0,0,10000]; - // diag_log text format ["fp: %1 %2", _fp, typeOf _fragObj]; - _fragObj setPosASL _lastPos; - _fragObj setVectorDir _vec; - _fragObj setVelocity _vel; - if (GVAR(traceFrags)) then { - INC(GVAR(totalFrags)); - [ACE_player, _fragObj, [1,0,0,1]] call FUNC(addTrack); - }; - INC(_fragCount); - INC(_currentCount); - }; - _fragArcs set [_dir, _currentCount]; + private _dir = floor (_baseVec call CBA_fnc_vectDir); + private _currentCount = RETDEF(_fragArcs select _dir,0); + if (_currentCount < 10) then { + private _count = ceil (random (sqrt (_m / 1000))); + private _vecVar = FRAG_VEC_VAR; + if (!(_target isKindOf "Man")) then { + ADD(_vecVar,(sqrt _cubic) / 2000); + if ((crew _target) isEqualTo [] && {_count > 0}) then { + _count = 0 max (_count / 2); }; }; + for "_i" from 1 to _count do { + private _vec = _baseVec vectorDiff [ + (_vecVar / 2) + (random _vecVar), + (_vecVar / 2) + (random _vecVar), + (_vecVar / 2) + (random _vecVar) + ]; + + private _fp = _fragPower - (random (_fragPowerRandom)); + private _vel = _vec vectorMultiply _fp; + + private _fragObj = (selectRandom _fragTypes) createVehicleLocal [0,0,10000]; + // TRACE_4("targeted",_fp, typeOf _fragObj,_lastPos vectorDistance _targetPos,typeOf _x); + _fragObj setPosASL _lastPos; + _fragObj setVectorDir _vec; + _fragObj setVelocity _vel; + #ifdef DRAW_FRAG_INFO + [ACE_player, _fragObj, [1,0,0,1]] call FUNC(dev_addTrack); + #endif + INC(_fragCount); + INC(_currentCount); + }; + _fragArcs set [_dir, _currentCount]; }; - //}; - if (_fragCount > MAX_FRAG_COUNT) exitWith {}; + }; + if (_fragCount > _maxFrags) exitWith {}; } forEach _objects; - if (_fragCount > MAX_FRAG_COUNT) exitWith {}; - private _randomCount = ((ceil ((MAX_FRAG_COUNT - _fragCount) * 0.1)) max 0) + 20; + TRACE_1("targeted",_fragCount); + if (_fragCount > _maxFrags) exitWith {}; + private _randomCount = ceil ((_maxFrags - _fragCount) * 0.35); + TRACE_1("",_randomCount); private _sectorSize = 360 / (_randomCount max 1); - // _doRandom = false; + if (_doRandom) then { for "_i" from 1 to _randomCount do { // Distribute evenly @@ -181,24 +177,19 @@ if (_isArmed && {!(_objects isEqualTo [])}) then { _vel = _vec vectorMultiply _fp; - _fragType = round (random ((count _fragTypes) - 1)); - _fragObj = (_fragTypes select _fragType) createVehicleLocal [0, 0, 10000]; + _fragObj = (selectRandom _fragTypes) createVehicleLocal [0, 0, 10000]; _fragObj setPosASL _lastPos; _fragObj setVectorDir _vec; _fragObj setVelocity _vel; - if (GVAR(traceFrags)) then { - INC(GVAR(totalFrags)); - [ACE_player, _fragObj, [1,0.5,0,1]] call FUNC(addTrack); - }; + #ifdef DRAW_FRAG_INFO + [ACE_player, _fragObj, [1,0.5,0,1]] call FUNC(dev_addTrack); + #endif INC(_fragCount); }; }; - }; -// #ifdef DEBUG_MODE_FULL - // ACE_player sideChat format["total frags: %1", GVAR(totalFrags)]; - // ACE_player sideChat format["tracks: %1", (count GVAR(trackedObjects))]; -// #endif -// _endTime = diag_tickTime; + +TRACE_1("total created",_fragCount); + END_COUNTER(frago); diff --git a/addons/frag/functions/fnc_masterPFH.sqf b/addons/frag/functions/fnc_masterPFH.sqf index d543c35bf7..638a91ee63 100644 --- a/addons/frag/functions/fnc_masterPFH.sqf +++ b/addons/frag/functions/fnc_masterPFH.sqf @@ -1,25 +1,32 @@ /* * Author: jaynus - * - * Master single PFH abstraction for all rounds being tracked by frag/spall + * Master single PFH abstraction for all rounds being tracked by frag/spall. * * Arguments: - * + * None * * Return Value: * None + * + * Example: + * call ace_frag_fnc_masterPFH + * + * Public: No */ + //#define DEBUG_MODE_FULL #include "script_component.hpp" -//PARAMS_2(_pfhArgs,_handle); -if (!GVAR(enabled)) exitWith {}; +BEGIN_COUNTER(PFH); + +// Fast exit if nothing to do +if (GVAR(objects) isEqualTo []) exitWith {END_COUNTER(PFH);}; private _gcIndex = []; private _iter = 0; private _objectCount = count GVAR(objects); -while {_objectCount > 0 && {_iter < (GVAR(MaxTrackPerFrame) min _objectCount)}} do { +while {_objectCount > 0 && {_iter < (GVAR(maxTrackPerFrame) min _objectCount)}} do { if (GVAR(lastIterationIndex) >= _objectCount) then { GVAR(lastIterationIndex) = 0; @@ -47,3 +54,5 @@ private _deletionCount = 0; INC(_deletionCount); } forEach _gcIndex; + +END_COUNTER(PFH); diff --git a/addons/frag/functions/fnc_pfhRound.sqf b/addons/frag/functions/fnc_pfhRound.sqf index 1338e8fef9..9d63df3f2a 100644 --- a/addons/frag/functions/fnc_pfhRound.sqf +++ b/addons/frag/functions/fnc_pfhRound.sqf @@ -1,6 +1,22 @@ +/* + * Author: ACE-Team + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_frag_fnc_pfhRound + * + * Public: No + */ + #include "script_component.hpp" -params ["_round", "_lastPos", "_lastVel", "_type", "_firedFrame", "_gun", "_doSpall", "_spallTrack", "_foundObjectHPIds", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"]; +params ["_round", "_lastPos", "_lastVel", "_shellType", "_firedFrame", "_gun", "_doSpall", "_spallTrack", "_foundObjectHPIds", "_skip", "_explosive", "_indirectRange", "_force", "_fragPower"]; if (_round in GVAR(blackList)) exitWith { false @@ -11,14 +27,22 @@ if (!alive _round) exitWith { if (_skip == 0) then { if ((_explosive > 0.5 && {_indirectRange >= 4.5} && {_fragPower >= 35}) || {_force == 1}) then { // shotbullet, shotShell don't seem to explode when touching water, so don't create frags - if (((_lastPos select 2) < 0) && {(toLower getText (configFile >> "CfgAmmo" >> _type >> "simulation")) in ["shotbullet", "shotshell"]}) exitWith {}; - [QGVAR(frag_eh), _this] call CBA_fnc_serverEvent; + if (((_lastPos select 2) < 0) && {(toLower getText (configFile >> "CfgAmmo" >> _shellType >> "simulation")) in ["shotbullet", "shotshell"]}) exitWith {}; + private _isArmed = true; + if (!isNil "_gun") then { + private _fuseDist = getNumber(configFile >> "CfgAmmo" >> _shellType >> "fuseDistance"); + _isArmed = ((getPosASL _gun) distance _lastPos > _fuseDist); + TRACE_2("",_fuseDist,_isArmed); + }; + if (!_isArmed) exitWith {TRACE_1("round not armed",_this);}; + TRACE_3("Sending frag event to server",_lastPos,_lastVel,_shellType); + [QGVAR(frag_eh), [_lastPos,_lastVel,_shellType]] call CBA_fnc_serverEvent; }; }; }; if (_doSpall) then { DEC(GVAR(spallIsTrackingCount)); - // diag_log text format ["F: %1", _foundObjectHPIds]; + TRACE_1("doSpall",_foundObjectHPIds); { if (!isNil "_x") then { _x removeEventHandler ["hitPart", _foundObjectHPIds select _forEachIndex]; @@ -32,8 +56,7 @@ _this set [1, getPosASL _round]; _this set [2, velocity _round]; if (_doSpall) then { - private ["_scale"]; - _scale = ((count GVAR(objects)) / GVAR(MaxTrackPerFrame)) max 0.1; + private _scale = ((count GVAR(objects)) / GVAR(maxTrackPerFrame)) max 0.1; [_round, _scale, _spallTrack, _foundObjectHPIds] call FUNC(spallTrack); }; diff --git a/addons/frag/functions/fnc_removePfhRound.sqf b/addons/frag/functions/fnc_removePfhRound.sqf deleted file mode 100644 index b9df275643..0000000000 --- a/addons/frag/functions/fnc_removePfhRound.sqf +++ /dev/null @@ -1,11 +0,0 @@ -#include "script_component.hpp" - -// THIS FUNCTION SHOULD NOT BE USED BECAUSE IT CAUSES AN SEARCH AND REBUILD - -PARAMS_1(_round); - -if (_round in GVAR(blackList)) then { - REM(GVAR(blackList),_round); -}; - -REM(GVAR(objects),_round); diff --git a/addons/frag/functions/fnc_removeTrack.sqf b/addons/frag/functions/fnc_removeTrack.sqf deleted file mode 100644 index 8c0f7e3736..0000000000 --- a/addons/frag/functions/fnc_removeTrack.sqf +++ /dev/null @@ -1,13 +0,0 @@ -#include "script_component.hpp" - -private _ret = true; -if (IS_ARRAY(_this select 0)) then { - _ret = false; -} else { - if ((_this select 0) in GVAR(trackedObjects)) then { - REM(GVAR(trackedObjects),_this select 0); - } else { - _ret = false; - }; -}; -_ret diff --git a/addons/frag/functions/fnc_spallHP.sqf b/addons/frag/functions/fnc_spallHP.sqf index 085e037e70..643f5aefe4 100644 --- a/addons/frag/functions/fnc_spallHP.sqf +++ b/addons/frag/functions/fnc_spallHP.sqf @@ -1,3 +1,19 @@ +/* + * Author: ACE-Team + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_frag_fnc_spallHP + * + * Public: No + */ + #include "script_component.hpp" //player sideChat format ["f: %1 c: %2", (_this select 0), (count GVAR(spallHPData))]; diff --git a/addons/frag/functions/fnc_spallTrack.sqf b/addons/frag/functions/fnc_spallTrack.sqf index aedcf56cf8..ee928b35c0 100644 --- a/addons/frag/functions/fnc_spallTrack.sqf +++ b/addons/frag/functions/fnc_spallTrack.sqf @@ -1,3 +1,19 @@ +/* + * Author: ACE-Team + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_frag_fnc_spallTrack + * + * Public: No + */ + //fnc_spallTrack.sqf #include "script_component.hpp" diff --git a/addons/frag/functions/fnc_startTracing.sqf b/addons/frag/functions/fnc_startTracing.sqf deleted file mode 100644 index d860d6635e..0000000000 --- a/addons/frag/functions/fnc_startTracing.sqf +++ /dev/null @@ -1,5 +0,0 @@ -#include "script_component.hpp" - -if (GVAR(tracesStarted)) exitWith {}; -GVAR(tracesStarted) = true; -GVAR(traceID) = [FUNC(drawTraces)] call CBA_fnc_addPerFrameHandler; diff --git a/addons/frag/functions/fnc_stopTracing.sqf b/addons/frag/functions/fnc_stopTracing.sqf deleted file mode 100644 index e06a9a2b46..0000000000 --- a/addons/frag/functions/fnc_stopTracing.sqf +++ /dev/null @@ -1,5 +0,0 @@ -#include "script_component.hpp" - -if (!GVAR(tracesStarted)) exitWith {}; -GVAR(tracesStarted) = false; -[GVAR(traceID)] call CBA_fnc_removePerFrameHandler; diff --git a/addons/frag/script_component.hpp b/addons/frag/script_component.hpp index 59868e36cf..0215e9f4d7 100644 --- a/addons/frag/script_component.hpp +++ b/addons/frag/script_component.hpp @@ -2,7 +2,7 @@ #define COMPONENT_BEAUTIFIED Frag #include "\z\ace\addons\main\script_mod.hpp" -//#define DEBUG_ENABLED_FRAG +// #define DRAW_FRAG_INFO // #define DEBUG_MODE_FULL // #define DISABLE_COMPILE_CACHE // #define ENABLE_PERFORMANCE_COUNTERS diff --git a/addons/frag/stringtable.xml b/addons/frag/stringtable.xml index 5221af0651..d74033f6a4 100644 --- a/addons/frag/stringtable.xml +++ b/addons/frag/stringtable.xml @@ -14,6 +14,8 @@ Simulazione Frammentazione 破片シミュレーション 조각 시뮬레이션 + 模拟碎片 + 模擬碎片 Fragmentation Simulation @@ -28,6 +30,8 @@ Simulazione Frammentazione 破片シミュレーション 조각 시뮬레이션 + 模拟碎片 + 模擬碎片 Enable the ACE Fragmentation Simulation @@ -42,6 +46,8 @@ Abilita la Simulazione Frammentazione di ACE ACE 破片シミュレーションを有効化 ACE 조각 시뮬레이션을 적용합니다. + 启用ACE模拟碎片 + 啟用ACE模擬碎片 Spalling Simulation @@ -56,6 +62,8 @@ Simulazione Spalling 剥離シミュレーション 파편 시뮬레이션 + 模拟剥落 + 模擬剝落 Enable the ACE Spalling Simulation @@ -70,6 +78,8 @@ Abilita la Simulazione Spalling di ACE ACE 剥離シミュレーションを有効化 ACE 파편 시뮬레이션을 적용합니다. + 启用ACE模拟剥落 + 啟用ACE模擬剝落 Explosion Reflections Simulation @@ -82,6 +92,8 @@ Cимуляция отражения взрывов ACE 爆発による飛翔シミュレーション 폭발 반사 시뮬레이션 + 模拟爆炸反射 + 模擬爆炸反射 Enable the ACE Explosion Reflection Simulation @@ -94,6 +106,8 @@ Включить симуляцию отражения взрывов ACE 爆発による飛翔シミュレーションを有効化 ACE 폭발 반사 시뮬레이션을 적용합니다. + 启用ACE模拟爆炸反射 + 啟用ACE模擬爆炸反射 Maximum Projectiles Tracked @@ -108,6 +122,8 @@ Numero massimo di Proiettili Tracciati 最大弾頭追跡数 최대 발사체 추적수 + 最大碎片/剥落粒子追踪数量 + 最大碎片/剝落粒子追蹤數量 This setting controls the maximum amount of projectiles the fragmentation and spalling system will track at any given time. If more projectiles are fired, they will not be tracked. Lower this setting if you do not want FPS drops at high-count projectile scenarios ( >200 rounds in the air at once) @@ -122,6 +138,8 @@ 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 (>200 proiettili in aria contemporaneamente) 時間が許すかぎり、破片と剥離システムの最大数を設定できます。設定数以上の弾丸が発射された場合、それは対象になりません。もし多い弾数による FPS の低下を望まない場合は、低い数へ設定にします。( &gt;一度に空中内で200発) 이 설정은 조각 및 파편 시스템으로 인해 생긴 발사체의 수를 결정합니다. 만약 더 많은 발사체가 나올경우 정해진 수 이외에는 추적하지 않습니다. 이 설정을 낮춤으로써 파편이 많은 시나리오를 실행할때 더욱 원활히 진행할 수 있습니다 (한 번에 200개 이하) + 设定在指定时间内, 系统最大可追踪的碎片/剥落粒子数量. 如有更多的碎片在这之后产生, 这些粒子将不会被追踪. 如果你想要维持好的帧数, 此设定勿调的过高. ( >一次200颗粒子) + 設定在指定時間內, 系統最大可追蹤的碎片/剝落粒子數量. 如有更多的碎片在這之後產生, 這些粒子將不會被追蹤. 如果你想要維持好的幀數, 此設定勿調的過高. ( >一次200顆粒子) Maximum Projectiles Per Frame @@ -136,6 +154,8 @@ Numero massimo di proiettili per Frame フレームごとの最大弾頭数 프레임당 최대 발사체 수 + 每一帧数(FPS)最大碎片/剥落粒子数量 + 每一幀數(FPS)最大碎片/剝落粒子數量 The number of spall track calculations to perform in any given frame. This helps spread the FPS impact of tracking spall rounds across multiple frames, limiting its impact even further. @@ -150,6 +170,8 @@ 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. 与えられたフレームごとに追跡する剥離の数を決定します。FPS に影響をあたえないよう、剥離を複数のフレームで追跡し、分散させています。 가능한 프레임마다 파편을 추적 및 계산합니다. 여러 프레임에 걸쳐 파편난 발사체를 추적하여 FPS에 도움을 줍니다. 이를 제한함으로써 더욱 큰 효과를 볼 수 있습니다. + 设定在每一帧数内, 系统最大可追踪的碎片/剥落粒子数量. 此设定可有效帮助系统减低计算压力. + 設定在每一幀數內, 系統最大可追蹤的碎片/剝落粒子數量. 此設定可有效幫助系統減低計算壓力. (SP Only) Frag/Spall Debug Tracing @@ -164,6 +186,8 @@ (Solo SP) Debug Tracciamento Frag/Spall (SP のみ) 破片/剥離のデバッグ用表示 (싱글플레이 전용) 조각/파편 디버그 추적화 + (仅在单人模式) 碎片/剥落除错追踪 + (僅在單人模式) 碎片/剝落除錯追蹤 (SP Only) Requires a mission/editor restart. Enables visual tracing of fragmentation and spalling rounds in SP game mode only. @@ -172,11 +196,13 @@ (nur SP) Splitter-/Explosions-Debugging (Pouze SP) Vyžaduje restart mise/editoru. Aktivuje vizuální stopování fragmentace a úlomů pouze v režimu jednoho hráče. (Somente SP) Requer um reinício de missão / editor. Habilita o rastreamento visual de projéteis de fragmentação e estilhaçamento apenas no modo de jogo SP. - (SP seulement) Requiert un redémarrage de mission ou de l'éditeur. Active les traceurs visuels de fragmentation et d'éclats en mode solo seulement + (SP seulement) Requiert un redémarrage de mission ou de l'éditeur. Active les traceurs visuels de fragmentation et d'éclats en mode solo seulement. (Csak SP) Küldetés/Editor újraindítás szükséges. Engedélyezi a repeszek és pattogzó lövedékek vizuális nyomkövetését, csak egyjátékos módok alatt. (Только для одиночной игры) Требует перезапуска миссии/редактора. Включает визуальные следы от осколков и обломков в режиме одиночной игры. (Solo SP) Richiede un restart editor/missione. Abilita il tracciamento visivo di schegge da frammentazione/spalling in modalità Giocatore Singolo. (SP のみ) ミッションとエディタの再起動が必要です。有効化すると、シングルプレイでのみ破片と剥離の弾頭が見えるようになります。 + (仅在单人模式) 让你在单人模式下可观察到碎片/剥落粒子的移动轨迹. + (僅在單人模式) 讓你在單人模式下可觀察到碎片/剝落粒子的移動軌跡. diff --git a/addons/gestures/functions/fnc_playSignal.sqf b/addons/gestures/functions/fnc_playSignal.sqf index 273db82da1..9dc1ecce4b 100644 --- a/addons/gestures/functions/fnc_playSignal.sqf +++ b/addons/gestures/functions/fnc_playSignal.sqf @@ -6,7 +6,7 @@ * Animation * * Return Value: - * + * Boolean * * Example: * "GeniusAnimation" call ace_gestures_fnc_playSignal diff --git a/addons/gestures/stringtable.xml b/addons/gestures/stringtable.xml index 46a3fdba6a..18e8883227 100644 --- a/addons/gestures/stringtable.xml +++ b/addons/gestures/stringtable.xml @@ -8,12 +8,14 @@ ACE Posunky ACE Gestes ACE Kézjelek - ACE Gesti + Gesti ACE ACE Gestos ACE Жесты ACE Gestos ACE ジェスチャー ACE 수신호 + ACE 手势 + ACE 手勢 Gestures @@ -28,6 +30,8 @@ Gesti ジェスチャー 수신호 + 手势 + 手勢 Advance @@ -42,6 +46,8 @@ Avanzare 警戒 전진 + 前进 + 前進 Go @@ -56,6 +62,8 @@ Muoversi 進め 이동 + 出发 + 出發 Follow @@ -70,6 +78,8 @@ Seguire ついて来い 따라올것 + 跟进 + 跟進 Up @@ -84,6 +94,8 @@ Alzarsi 立ち上がれ + 起立 + 起立 Cease Fire @@ -98,6 +110,8 @@ Cessare il Fuoco 撃つな 사격 중지 + 停火 + 停火 Stop @@ -111,6 +125,8 @@ Detenerse 止まれ 멈춰 + 停止 + 停止 Freeze @@ -125,6 +141,8 @@ Fermi 動くな 정지 + 不准动 + 不准動 Cover @@ -139,6 +157,8 @@ Copertura 隠れろ 엄폐 + 掩护 + 掩護 Rally up @@ -152,6 +172,8 @@ Reunirse 集合 집결 + 集合 + 集合 Move forward @@ -165,6 +187,8 @@ Avanzar 前に進め 앞으로 이동 + 往前走 + 往前走 Engage @@ -178,6 +202,8 @@ Atacar 交戦しろ 교전할것 + 交战 + 交戰 Point @@ -191,6 +217,8 @@ Señalar 指示 가리키기 + 指出 + 指出 Hold @@ -204,6 +232,8 @@ Esperar そこにいろ 기다려 + 停住 + 停住 Warning @@ -217,6 +247,8 @@ Atención 注意 주의 + 警告 + 警告 Show Gestures On Interaction Menu @@ -230,45 +262,53 @@ Показать жесты в меню взаимодействия インタラクション メニュー上でジェスチャーを表示する 수신호를 상호작용 메뉴에서 보여줍니다 + 显示手势互动选单 + 顯示手勢互動選單 Show gestures on the self interaction menu, or just use keybinds, or disable completely Zeige Gesten im Selbst-Interkationsmenü, lege sie auf Schnelltasten, oder deaktiviere sie vollständig. Zobrazit posunky pro vlastní interakční menu, nebo prostě použít klávesové zkratky, nebo to zakázat úplně Pokaż listę gestów w menu własnej interakcji, użyj tylko skrótów na klawiaturze lub wyłącz całkowicie - Mostra Gesti nel Menù Interazione Personale, o usa solamente Hotkey, o disabilita completamente + Mostra Gesti nel Menù Interazione Personale, o usa solamente tasti di scelta rapida, o disabilita completamente Muestror los gestos en el menú de interacción propia, utilizar solo combinación de teclas o desactivarlos completamente Afficher les gestes dans le menu d'interaction personnel, ou seulement utiliser les touches, ou desactiver complètement. Mostra gestos no menu de interação, ou utilize um dos atalhos de teclado ou desative completamente Показать жесты в меню взамиодейтсвия с собой или только использовать горячие клавиши, или полностью отключить キー操作や同時使用を無効化している場合はセルフ インタラクション メニュ上でジェスチャーを表示します 수신호를 상호작용 메뉴에서 보여주거나 혹은 단축키를 지정하거나 아니면 아예 사용하지 않습니다. + 显示手势选项在自己的互动选单上, 或只利用键盘来使用手势, 或完全禁用 + 顯示手勢選項在自己的互動選單上, 或只利用鍵盤來使用手勢, 或完全禁用 Just Keybinds Nur Schnelltasten Pouze klávesové zkratky Tylko skróty klaw. - Solo Hotkey + Solo tasti di scelta rapida Solo mediante teclas Seulement les touches Somente atalhos de teclado Только горячие клавиши キー操作のみ 오직 단축키만 + 只利用键盘 + 只利用鍵盤 Keybinds + Interaction Menu Schnelltasten+ Interaktionsmenü Klávesové zkratky + interakční menu Skróty klaw. + menu interakcji - Hotkey + Menù Interazione + Tasti di scelta rapida + Menù Interazione Teclas y Menú de Interacción Touches + menu d'interaction Atalhos + Menu de Interação Клавиши + Меню взаимодействия キー操作とインタラクション メニュ 단축키및 상호작용 메뉴 + 键盘 + 互动选单 + 鍵盤 + 互動選單 diff --git a/addons/gforces/XEH_postInit.sqf b/addons/gforces/XEH_postInit.sqf index 9eb049c9f5..f7d532c288 100644 --- a/addons/gforces/XEH_postInit.sqf +++ b/addons/gforces/XEH_postInit.sqf @@ -3,22 +3,26 @@ if (!hasInterface) exitWith {}; GVAR(pfID) = -1; +GVAR(playerIsVirtual) = false; ["ace_settingsInitialized", { TRACE_1("SettingsInitialized eh",GVAR(enabledFor)); if (GVAR(enabledFor) == 0) exitWith {}; //Module has no effect if enabledFor is "None" + + ["unit", { // Add unit changed EH to check if player is either virtual (logic) or a UAV AI + params ["_unit"]; + GVAR(playerIsVirtual) = ((getNumber (configFile >> "CfgVehicles" >> (typeOf _unit) >> "isPlayableLogic")) == 1) || + {(getText (configFile >> "CfgVehicles" >> (typeOf _unit) >> "simulation")) == "UAVPilot"}; + TRACE_3("unit changed",_unit,typeOf _unit,GVAR(playerIsVirtual)); + }, true] call CBA_fnc_addPlayerEventHandler; + if (GVAR(enabledFor) == 2) exitWith { //PFEH is always on when enabledFor is "All" [] call FUNC(addPFEH); TRACE_1("adding perm PFEH",GVAR(pfID)); }; //PFEH only runs when player is in a type "Air" vehicle when enabledFor is "Aircraft" - - if ((!isNull (vehicle ACE_player)) && {(vehicle ACE_player) isKindOf "Air"}) then { //"playerVehicleChanged" can happen before "settingInit" - [] call FUNC(addPFEH); - TRACE_1("adding temp PFEH [start in]",GVAR(pfID)); - }; ["vehicle", { params ["", "_vehicle"]; TRACE_2("playerVehicleChanged",_vehicle,typeOf _vehicle); @@ -35,5 +39,5 @@ GVAR(pfID) = -1; GVAR(pfID) = -1; }; }; - }] call CBA_fnc_addPlayerEventHandler; + }, true] call CBA_fnc_addPlayerEventHandler; }] call CBA_fnc_addEventHandler; diff --git a/addons/gforces/functions/fnc_addPFEH.sqf b/addons/gforces/functions/fnc_addPFEH.sqf index 9bd4d7fa1a..2464575fdc 100644 --- a/addons/gforces/functions/fnc_addPFEH.sqf +++ b/addons/gforces/functions/fnc_addPFEH.sqf @@ -8,12 +8,19 @@ * Return Value: * None * + * Example: + * call ace_gforces_fnc_addPFEH + * * Public: No */ #include "script_component.hpp" //Reset forces array GVAR(GForces) = []; +// init array to full array of neutral g-forces +GVAR(GForces) resize 30; +GVAR(GForces) = GVAR(GForces) apply {1}; + GVAR(GForces_Index) = 0; // Setup ppEffect @@ -26,4 +33,4 @@ GVAR(GForces_CC) ppEffectCommit 0.4; GVAR(lastUpdateTime) = 0; GVAR(oldVel) = [0,0,0]; -GVAR(pfID) = [DFUNC(pfhUpdateGForces), 0, []] call CBA_fnc_addPerFrameHandler; +GVAR(pfID) = [LINKFUNC(pfhUpdateGForces), 0, []] call CBA_fnc_addPerFrameHandler; diff --git a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf index 48370c2431..98e633f500 100644 --- a/addons/gforces/functions/fnc_pfhUpdateGForces.sqf +++ b/addons/gforces/functions/fnc_pfhUpdateGForces.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [[args], 5] call ace_gforces_fnc_pfhUpdateGForces + * * Public: No */ #include "script_component.hpp" @@ -17,7 +20,7 @@ if ((CBA_missionTime - GVAR(lastUpdateTime)) < INTERVAL) exitWith {}; GVAR(lastUpdateTime) = CBA_missionTime; -if (isNull ACE_player || !(alive ACE_player)) exitWith {}; +if (GVAR(playerIsVirtual) || {!alive ACE_player}) exitWith {}; BEGIN_COUNTER(everyInterval); @@ -27,7 +30,7 @@ private _accel = ((_newVel vectorDiff GVAR(oldVel)) vectorMultiply (1 / INTERVAL private _currentGForce = (((_accel vectorDotProduct vectorUp (vehicle ACE_player)) / 9.8) max -10) min 10; GVAR(GForces) set [GVAR(GForces_Index), _currentGForce]; -GVAR(GForces_Index) = (GVAR(GForces_Index) + 1) % round (AVERAGEDURATION / INTERVAL); +GVAR(GForces_Index) = (GVAR(GForces_Index) + 1) % 30; // 30 = round (AVERAGEDURATION / INTERVAL); GVAR(oldVel) = _newVel; /* Source: https://github.com/KoffeinFlummi/AGM/issues/1774#issuecomment-70341573 diff --git a/addons/gforces/stringtable.xml b/addons/gforces/stringtable.xml index 4bce899bd1..12d3d0ba53 100644 --- a/addons/gforces/stringtable.xml +++ b/addons/gforces/stringtable.xml @@ -12,6 +12,9 @@ G による効果 Efekty przeciążeń 중력가속도 효과 + Effetti forza G + G力影响 + G力影響 Only Aircraft @@ -24,6 +27,9 @@ 航空機のみ Tylko samoloty 비행기에만 적용 + Solo Aerei + 只有战斗机 + 只有戰鬥機 diff --git a/addons/goggles/XEH_postInit.sqf b/addons/goggles/XEH_postInit.sqf index b7b5de9e1b..5b93a7a459 100644 --- a/addons/goggles/XEH_postInit.sqf +++ b/addons/goggles/XEH_postInit.sqf @@ -20,7 +20,7 @@ if (!hasInterface) exitWith {}; if (GVAR(effects) == 0) exitWith {}; // ---Add the TINT Effect--- - + // make sure to stack effect layers in correct order GVAR(GogglesEffectsLayer) = QGVAR(GogglesEffectsLayer) call BIS_fnc_RSCLayer; GVAR(GogglesLayer) = QGVAR(GogglesLayer) call BIS_fnc_RSCLayer; @@ -29,6 +29,26 @@ if (!hasInterface) exitWith {}; GVAR(UsePP) = true; }; + // init pp effects + GVAR(PostProcess) = ppEffectCreate ["ColorCorrections", 1995]; + GVAR(EffectsActive) = false; + + // add glasses eventhandlers + ["ace_glassesChanged", { + params ["_unit", "_glasses"]; + TRACE_2("ace_glassesChanged eh",_unit,_glasses); + + SETGLASSES(_unit,GLASSESDEFAULT); + + if (call FUNC(ExternalCamera)) exitWith {call FUNC(RemoveGlassesEffect)}; + + if ([_unit] call FUNC(isGogglesVisible)) then { + [_unit, _glasses] call FUNC(applyGlassesEffect); + } else { + call FUNC(removeGlassesEffect); + }; + }] call CBA_fnc_addEventHandler; + // init GlassesChanged eventhandler GVAR(OldGlasses) = ""; ["loadout", { @@ -40,12 +60,9 @@ if (!hasInterface) exitWith {}; ["ace_glassesChanged", [_unit, _currentGlasses]] call CBA_fnc_localEvent; GVAR(OldGlasses) = _currentGlasses; }; - }] call CBA_fnc_addPlayerEventHandler; + }, true] call CBA_fnc_addPlayerEventHandler; - // init pp effects - GVAR(PostProcess) = ppEffectCreate ["ColorCorrections", 1995]; - GVAR(EffectsActive) = false; // check goggles private _fnc_checkGoggles = { @@ -57,7 +74,7 @@ if (!hasInterface) exitWith {}; }; } else { if (!(call FUNC(externalCamera)) && {[_unit] call FUNC(isGogglesVisible)}) then { - [goggles _unit] call FUNC(applyGlassesEffect); + [_unit, goggles _unit] call FUNC(applyGlassesEffect); }; }; }; @@ -66,21 +83,6 @@ if (!hasInterface) exitWith {}; ["ace_activeCameraChanged", _fnc_checkGoggles] call CBA_fnc_addEventHandler; - // add glasses eventhandlers - ["ace_glassesChanged", { - params ["_unit", "_glasses"]; - - SETGLASSES(_unit,GLASSESDEFAULT); - - if (call FUNC(ExternalCamera)) exitWith {call FUNC(RemoveGlassesEffect)}; - - if ([_unit] call FUNC(isGogglesVisible)) then { - _glasses call FUNC(applyGlassesEffect); - } else { - call FUNC(removeGlassesEffect); - }; - }] call CBA_fnc_addEventHandler; - // // ---Add the Dust/Dirt/Rain Effects--- if (GVAR(effects) == 2) then { @@ -96,7 +98,7 @@ if (!hasInterface) exitWith {}; GVAR(PostProcessEyes) ppEffectCommit 0; GVAR(PostProcessEyes) ppEffectEnable false; GVAR(PostProcessEyes_Enabled) = false; - + GVAR(FrameEvent) = [false, [false, 20]]; GVAR(DustHandler) = -1; GVAR(RainDrops) = objNull; diff --git a/addons/goggles/functions/fnc_applyGlassesEffect.sqf b/addons/goggles/functions/fnc_applyGlassesEffect.sqf index 71a5b3b84c..71425ce6ca 100644 --- a/addons/goggles/functions/fnc_applyGlassesEffect.sqf +++ b/addons/goggles/functions/fnc_applyGlassesEffect.sqf @@ -5,23 +5,29 @@ * Sets dirt/rain overlay for glasses. * * Arguments: - * 0: Glasses classname to be applied + * 0: Player + * 1: Glasses classname to be applied * * Return Value: * None * * Example: - * [goggles ace_player] call ace_goggles_fnc_applyGlassesEffect + * [ace_player, goggles ace_player] call ace_goggles_fnc_applyGlassesEffect * * Public: No */ #include "script_component.hpp" -params ["_glasses"]; +params ["_player", "_glasses"]; +TRACE_2("applyGlassesEffect",_player,_glasses); // remove old effect call FUNC(removeGlassesEffect); +if ((getNumber (configFile >> "CfgVehicles" >> (typeOf _player) >> "isPlayableLogic")) == 1) exitWith { + TRACE_1("skipping playable logic",typeOf _player); // VirtualMan_F (placeable logic zeus / spectator) +}; + private ["_config", "_postProcessColour", "_postProcessTintAmount", "_imagePath"]; _config = configFile >> "CfgGlasses" >> _glasses; diff --git a/addons/goggles/functions/fnc_handleExplosion.sqf b/addons/goggles/functions/fnc_handleExplosion.sqf index 44be6ab6c1..fcda2a3e49 100644 --- a/addons/goggles/functions/fnc_handleExplosion.sqf +++ b/addons/goggles/functions/fnc_handleExplosion.sqf @@ -8,6 +8,9 @@ * Return Value: * Function is handled? * + * Example: + * [bob] call ace_goggles_fnc_handleExplosion + * * Public: No */ #include "script_component.hpp" diff --git a/addons/goggles/functions/fnc_handleFired.sqf b/addons/goggles/functions/fnc_handleFired.sqf index 066bc040f7..e231a4562b 100644 --- a/addons/goggles/functions/fnc_handleFired.sqf +++ b/addons/goggles/functions/fnc_handleFired.sqf @@ -8,6 +8,9 @@ * Return Value: * Function is handled? * + * Example: + * call ace_goggles_fnc_handleFired + * * Public: No */ #include "script_component.hpp" diff --git a/addons/goggles/functions/fnc_handleKilled.sqf b/addons/goggles/functions/fnc_handleKilled.sqf index b9af2e075b..001a4041b8 100644 --- a/addons/goggles/functions/fnc_handleKilled.sqf +++ b/addons/goggles/functions/fnc_handleKilled.sqf @@ -8,6 +8,9 @@ * Return Value: * Function is handled? * + * Example: + * [bob] call ace_goggles_fnc_handleKilled + * * Public: No */ #include "script_component.hpp" diff --git a/addons/goggles/functions/fnc_isInRotorWash.sqf b/addons/goggles/functions/fnc_isInRotorWash.sqf index 319da3a875..80e1bdd8e8 100644 --- a/addons/goggles/functions/fnc_isInRotorWash.sqf +++ b/addons/goggles/functions/fnc_isInRotorWash.sqf @@ -7,7 +7,7 @@ * 1: Radius to check for helicopter (default: 15) * * Return Value: - * : + * Array : * 0: In rotorwash * 1: Amount of rotor wash. * diff --git a/addons/goggles/stringtable.xml b/addons/goggles/stringtable.xml index c268ec3ab6..309a420a46 100644 --- a/addons/goggles/stringtable.xml +++ b/addons/goggles/stringtable.xml @@ -14,6 +14,8 @@ Attiva l'effetto degli occhiali in terza persona 三人称視点でもゴーグルによる効果を出す 3인칭시에도 고글 효과를 보이게 합니다 + 在第三人称视角显示护目镜效果 + 在第三人稱視角顯示護目鏡效果 Wipe Goggles @@ -28,6 +30,8 @@ Pulisci gli occhiali ゴーグルを拭く 고글 닦기 + 擦拭护目镜 + 擦拭護目鏡 Goggle Effects @@ -36,6 +40,10 @@ Efekty gogli Brilleneffekt 고글 효과 + Effets des lunettes + Effetto Occhiali + 护目镜效果 + 護目鏡效果 Tint @@ -44,6 +52,10 @@ Winieta Tönung 색조 + Teinte + Colore + 染色 + 染色 Tint + Effects @@ -52,6 +64,10 @@ Winieta + Efekty Tönung + Effekte 색조+효과 + Teinte + effets + Colore + Effetti + 染色 + 影响 + 染色 + 影響 diff --git a/addons/grenades/CfgVehicles.hpp b/addons/grenades/CfgVehicles.hpp index 1315ccf611..f9ac60d9fe 100644 --- a/addons/grenades/CfgVehicles.hpp +++ b/addons/grenades/CfgVehicles.hpp @@ -2,40 +2,40 @@ class CfgVehicles { class NATO_Box_Base; class Box_NATO_Grenades_F: NATO_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_HandFlare_White,12); - MACRO_ADDITEM(ACE_HandFlare_Green,12); - MACRO_ADDITEM(ACE_M84,12); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_HandFlare_White,12); + MACRO_ADDMAGAZINE(ACE_HandFlare_Green,12); + MACRO_ADDMAGAZINE(ACE_M84,12); }; }; class EAST_Box_Base; class Box_East_Grenades_F: EAST_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_HandFlare_Yellow,12); - MACRO_ADDITEM(ACE_HandFlare_Red,12); - MACRO_ADDITEM(ACE_M84,12); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_HandFlare_Yellow,12); + MACRO_ADDMAGAZINE(ACE_HandFlare_Red,12); + MACRO_ADDMAGAZINE(ACE_M84,12); }; }; class IND_Box_Base; class Box_IND_Grenades_F: IND_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_HandFlare_Yellow,12); - MACRO_ADDITEM(ACE_HandFlare_Green,12); - MACRO_ADDITEM(ACE_M84,12); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_HandFlare_Yellow,12); + MACRO_ADDMAGAZINE(ACE_HandFlare_Green,12); + MACRO_ADDMAGAZINE(ACE_M84,12); }; }; class Box_NATO_Support_F; class ACE_Box_Misc: Box_NATO_Support_F { - class TransportItems { - MACRO_ADDITEM(ACE_HandFlare_White,12); - MACRO_ADDITEM(ACE_HandFlare_Red,12); - MACRO_ADDITEM(ACE_HandFlare_Green,12); - MACRO_ADDITEM(ACE_HandFlare_Yellow,12); - MACRO_ADDITEM(ACE_M84,12); - MACRO_ADDITEM(ACE_M14,12); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_HandFlare_White,12); + MACRO_ADDMAGAZINE(ACE_HandFlare_Red,12); + MACRO_ADDMAGAZINE(ACE_HandFlare_Green,12); + MACRO_ADDMAGAZINE(ACE_HandFlare_Yellow,12); + MACRO_ADDMAGAZINE(ACE_M84,12); + MACRO_ADDMAGAZINE(ACE_M14,12); }; }; }; diff --git a/addons/grenades/stringtable.xml b/addons/grenades/stringtable.xml index 55f80563e4..fb54bed50b 100644 --- a/addons/grenades/stringtable.xml +++ b/addons/grenades/stringtable.xml @@ -14,6 +14,8 @@ Alternar Modo de Granada グレネード モードを切り替え 투척 종류 전환 + 切换投掷模式 + 切換投擲模式 Normal Throw @@ -28,6 +30,8 @@ Arremesso Normal 通常で投げる 일반 던지기 + 普通投掷 + 普通投擲 High Throw @@ -42,6 +46,8 @@ Arremesso Alto 高く投げる 높이 던지기 + 高抛 + 高拋 Precise Throw @@ -56,6 +62,8 @@ Arremesso Preciso 低く投げる 정확한 던지기 + 精准投掷 + 精準投擲 Roll Grenade @@ -70,6 +78,8 @@ Rolar Granada 転がす 굴려넣기 + 地面滚抛 + 地面滾拋 Drop Grenade @@ -84,6 +94,8 @@ Largar Granada 落とす 떨어뜨리기 + 下丢投掷 + 下丟投擲 M84 Stun Grenade @@ -98,6 +110,8 @@ M84 granada de atordoamento M84 閃光手榴弾 M84 섬광 수류탄 + M84 震撼弹 + M84 震撼彈 M84 @@ -112,6 +126,8 @@ M84 M84 M84 + M84 + M84 Also known as flashbang. Causes immediate flash blindness, deafness, tinnitus, and inner ear disturbance. @@ -126,6 +142,8 @@ Também conhecida como flashbang. Causa uma clarão imediato, cegueira, surdez, zumbido e distúrbio no tímpano. フラッシュバンとも知られています。即時に失明と難聴、耳鳴り、内耳障害を引き起こします。 플래시뱅이라고도 알려져있습니다. 사용즉시 섬광으로 인한 시력장애, 청각장애, 이명, 내이기관방해를 유발합니다. + 也被称为闪光弹, 会造成暂时性失明, 耳聋, 耳鸣等效果 + 也被稱為閃光彈, 會造成暫時性失明, 耳聾, 耳鳴等效果 M127A1 Hand Held Signal (White) @@ -140,6 +158,8 @@ M127A1 Feux à main (Blanc) M127A1 信号弾 (白) M127A1 신호탄 (하얀색) + M127A1 手持式信号弹 (白色) + M127A1 手持式信號彈 (白色) M127A1 Hand Held Signal (Red) @@ -154,6 +174,8 @@ M127A1 Feux à main (Rouge) M127A1 信号弾 (赤) M127A1 신호탄 (빨간색) + M127A1 手持式信号弹 (红色) + M127A1 手持式信號彈 (紅色) M127A1 Hand Held Signal (Green) @@ -168,6 +190,8 @@ M127A1 Feux à main (Vert) M127A1 信号弾 (緑) M127A1 신호탄 (초록색) + M127A1 手持式信号弹 (绿色) + M127A1 手持式信號彈 (綠色) M127A1 Hand Held Signal (Yellow) @@ -182,6 +206,8 @@ M127A1 Feux à main (Jaune) M127A1 信号弾 (黄) M127A1 신호탄 (노란색) + M127A1 手持式信号弹 (黄色) + M127A1 手持式信號彈 (黃色) White Hand Flare @@ -196,6 +222,8 @@ Feux à main (Blanc) 白の発炎筒 하얀색 불꽃신호기 + 白色手持式信号弹 + 白色手持式信號彈 Red Hand Flare @@ -210,6 +238,8 @@ Feux à main (Rouge) 赤の発炎筒 빨간색 불꽃신호기 + 红色手持式信号弹 + 紅色手持式信號彈 Green Hand Flare @@ -224,6 +254,8 @@ Feux à main (Vert) 緑の発炎筒 초록색 불꽃신호기 + 绿色手持式信号弹 + 綠色手持式信號彈 Yellow Hand Flare @@ -238,6 +270,8 @@ Feux à main (Jaune) 黄の発炎筒 노란색 불꽃신호기 + 黄色手持式信号弹 + 黃色手持式信號彈 M127A1 (White) @@ -252,6 +286,8 @@ M127A1 (Blanca) M127A1 (白) M127A1 (하양) + M127A1 (白色) + M127A1 (白色) M127A1 (Red) @@ -266,6 +302,8 @@ M127A1 (Roja) M127A1 (赤) M127A1 (빨강) + M127A1 (红色) + M127A1 (紅色) M127A1 (Green) @@ -280,6 +318,8 @@ M127A1 (Verde) M127A1 (緑) M127A1 (초록) + M127A1 (绿色) + M127A1 (綠色) M127A1 (Yellow) @@ -294,6 +334,8 @@ M127A1 (Amarilla) M127A1 (黄) M127A1 (노랑) + M127A1 (黄色) + M127A1 (黃色) AN-M14 Incendiary Grenade @@ -302,6 +344,10 @@ AN-M14 焼夷手榴弾 Granat zapalający AN-M14 AN-M14 소이 수류탄 + Grenade incendiaire AN-M14 + AN-M14 Granata Incendiaria + AN-M14 燃烧手榴弹 + AN-M14 燃燒手榴彈 AN-M14 @@ -310,6 +356,10 @@ AN-M14 AN-M14 AN-M14 + AN-M14 + AN-M14 + AN-M14 + AN-M14 Incendiary grenade used to destroy weapons, ammunition and other equipment. @@ -318,6 +368,10 @@ 焼夷手榴弾は武器や弾薬箱などの装備を破壊するために使われます。 Granat zapalający, używany do niszczenia broni, amunicji i innego sprzętu. 소이 수류탄은 무기나 탄약 그리고 장비를 파괴할때 쓰입니다. + Grenade incendiaire utilisé pour détruire des armes, munitions et autres équipements. + Granata incendiaria usata per distruggere armi, munizioni e altri equipaggiamenti. + 燃烧手榴弹是用来摧毁武器, 弹药以及其他装备的好帮手. + 燃燒手榴彈是用來摧毀武器, 彈藥以及其他裝備的好幫手. diff --git a/addons/gunbag/functions/fnc_canInteract.sqf b/addons/gunbag/functions/fnc_canInteract.sqf index 1ec9e38583..556ea1f700 100644 --- a/addons/gunbag/functions/fnc_canInteract.sqf +++ b/addons/gunbag/functions/fnc_canInteract.sqf @@ -7,7 +7,7 @@ * 1: Target * * Return Value: - * -1: can't interact 0: empty gunbag 1: full gunbag + * -1: can't interact 0: empty gunbag 1: full gunbag * * Example: * _canInteract = [player, target] call ace_gunbag_fnc_canInteract diff --git a/addons/gunbag/functions/fnc_offGunbagCallback.sqf b/addons/gunbag/functions/fnc_offGunbagCallback.sqf index 5d548d0e9c..580103b021 100644 --- a/addons/gunbag/functions/fnc_offGunbagCallback.sqf +++ b/addons/gunbag/functions/fnc_offGunbagCallback.sqf @@ -29,6 +29,16 @@ if (_state isEqualTo []) exitWith { _state params ["_weapon", "_items", "_magazines"]; _unit addWeapon _weapon; + +// Game will auto add magazines from player's inventory, put these back in player inventory as they will be overwritten +([_unit, _weapon] call EFUNC(common,getWeaponState)) params ["", "", "_addedMags", "_addedAmmo"]; +{ + if (((_x select 0) != "") && {(_addedMags select _forEachIndex) != ""}) then { + TRACE_2("Re-adding mag",_x,_addedMags select _forEachIndex); + _unit addMagazine [_addedMags select _forEachIndex, _addedAmmo select _forEachIndex]; + }; +} forEach _magazines; + removeAllPrimaryWeaponItems _unit; { diff --git a/addons/gunbag/stringtable.xml b/addons/gunbag/stringtable.xml index 51a1e63cdf..ab4fdf5ac7 100644 --- a/addons/gunbag/stringtable.xml +++ b/addons/gunbag/stringtable.xml @@ -10,6 +10,9 @@ ガンバッグ Torba na broń 총가방 + Borsa per Armi + 枪袋 + 槍袋 Gunbag (Tan) @@ -20,6 +23,9 @@ ガンバッグ (タン) Torba na broń (jasnobrązowa) 총가방 (황갈색) + Borsa per Armi (Tan) + 枪袋 (黄褐色) + 槍袋 (黃褐色) Put weapon into gunbag @@ -30,6 +36,9 @@ ガンバッグへ武器を入れる Włóż broń do torby 무기를 총가방에 넣기 + Metti l'arma nella borsa per armi + 将武器放置枪袋 + 將武器放置槍袋 Get weapon out of gunbag @@ -40,6 +49,9 @@ ガンバッグから武器を出す Wyciągnij broń z torby 무기를 총가방에서 꺼내기 + Prendi l'arma dalla borsa per armi + 将武器拿出枪袋 + 將武器拿出槍袋 Status @@ -50,6 +62,9 @@ 中身 Status 상태 + Stato + 状态 + 狀態 Gunbag Empty @@ -60,6 +75,9 @@ ガンバッグは空 Torba jest pusta 총가방 비어있음 + Borsa per armi vuota + 枪袋为空 + 槍袋為空 diff --git a/addons/hearing/CfgVehicles.hpp b/addons/hearing/CfgVehicles.hpp index 760ed95a03..f44e50e6d0 100644 --- a/addons/hearing/CfgVehicles.hpp +++ b/addons/hearing/CfgVehicles.hpp @@ -5,7 +5,7 @@ class CfgVehicles { class ACE_Equipment { class ACE_PutInEarplugs { displayName = CSTRING(EarPlugs_On); - condition = QUOTE( !([_player] call FUNC(hasEarPlugsIn)) && {'ACE_EarPlugs' in items _player} ); + condition = QUOTE(GVAR(EnableCombatDeafness) && {!([_player] call FUNC(hasEarPlugsIn)) && {'ACE_EarPlugs' in items _player}}); exceptions[] = {"isNotInside", "isNotSitting"}; statement = QUOTE( [_player] call FUNC(putInEarPlugs) ); showDisabled = 0; @@ -14,7 +14,7 @@ class CfgVehicles { }; class ACE_RemoveEarplugs { displayName = CSTRING(EarPlugs_Off); - condition = QUOTE( [_player] call FUNC(hasEarPlugsIn) ); + condition = QUOTE( GVAR(EnableCombatDeafness) && {[_player] call FUNC(hasEarPlugsIn)}); exceptions[] = {"isNotInside", "isNotSitting"}; statement = QUOTE( [_player] call FUNC(removeEarPlugs) ); showDisabled = 0; diff --git a/addons/hearing/CfgWeapons.hpp b/addons/hearing/CfgWeapons.hpp index c063c0e896..8b138271b3 100644 --- a/addons/hearing/CfgWeapons.hpp +++ b/addons/hearing/CfgWeapons.hpp @@ -13,42 +13,42 @@ class CfgWeapons { }; }; + #define HEARING_PROTECTION_VICCREW EGVAR(hearing,protection) = 0.85; EGVAR(hearing,lowerVolume) = 0.6; + #define HEARING_PROTECTION_EARMUFF EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0.5; + #define HEARING_PROTECTION_PELTOR EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0; + class H_HelmetB; class H_HelmetCrew_B: H_HelmetB { - GVAR(protection) = 1; - GVAR(lowerVolume) = 0.80; + HEARING_PROTECTION_VICCREW }; class H_CrewHelmetHeli_B: H_HelmetB { - GVAR(protection) = 0.85; - GVAR(lowerVolume) = 0.75; + HEARING_PROTECTION_VICCREW }; class H_PilotHelmetHeli_B: H_HelmetB { - GVAR(protection) = 0.85; - GVAR(lowerVolume) = 0.75; + HEARING_PROTECTION_VICCREW }; class H_PilotHelmetFighter_B: H_HelmetB { - GVAR(protection) = 1; - GVAR(lowerVolume) = 0.80; + HEARING_PROTECTION_VICCREW }; class HelmetBase; class H_Cap_headphones: HelmetBase { - GVAR(protection) = 0.5; - GVAR(lowerVolume) = 0.60; + HEARING_PROTECTION_EARMUFF }; class H_HelmetB_light: H_HelmetB { - GVAR(protection) = 0.8; - GVAR(lowerVolume) = 0.20; + HEARING_PROTECTION_PELTOR + }; + class H_HelmetB_camo: H_HelmetB { + HEARING_PROTECTION_PELTOR }; class H_HelmetB_plain_mcamo; class H_HelmetSpecB: H_HelmetB_plain_mcamo { - GVAR(protection) = 0.8; - GVAR(lowerVolume) = 0.20; + HEARING_PROTECTION_PELTOR }; }; diff --git a/addons/hearing/XEH_postInit.sqf b/addons/hearing/XEH_postInit.sqf index 19be45f3c3..17548a973b 100644 --- a/addons/hearing/XEH_postInit.sqf +++ b/addons/hearing/XEH_postInit.sqf @@ -35,7 +35,7 @@ GVAR(lastPlayerVehicle) = objNull; TRACE_2("removed veh eh",_firedEH,GVAR(lastPlayerVehicle)); }; if ((!isNull _vehicle) && {_player != _vehicle}) then { - private _firedEH = _vehicle addEventHandler ["FiredNear", LINKFUNC(firedNear)]; + private _firedEH = _vehicle addEventHandler ["FiredNear", {call FUNC(firedNear)}]; _vehicle setVariable [QGVAR(firedEH), _firedEH]; GVAR(lastPlayerVehicle) = _vehicle; TRACE_2("added veh eh",_firedEH,GVAR(lastPlayerVehicle)); @@ -48,7 +48,7 @@ GVAR(lastPlayerVehicle) = objNull; ["unit", { params ["_player", "_oldPlayer"]; TRACE_2("unit change",_player,_oldPlayer); - + if (!isNull _oldPlayer) then { private _firedEH = _oldPlayer getVariable [QGVAR(firedEH), -1]; _oldPlayer removeEventHandler ["FiredNear", _firedEH]; @@ -60,16 +60,18 @@ GVAR(lastPlayerVehicle) = objNull; }; // Don't add a new EH if the unit respawned if ((_player getVariable [QGVAR(firedEH), -1]) == -1) then { - private _firedEH = _player addEventHandler ["FiredNear", LINKFUNC(firedNear)]; + if ((getNumber (configFile >> "CfgVehicles" >> (typeOf _player) >> "isPlayableLogic")) == 1) exitWith { + TRACE_1("skipping playable logic",typeOf _player); // VirtualMan_F (placeable logic zeus / spectator) + }; + private _firedEH = _player addEventHandler ["FiredNear", {call FUNC(firedNear)}]; _player setVariable [QGVAR(firedEH), _firedEH]; - private _explosionEH = _player addEventHandler ["Explosion", LINKFUNC(explosionNear)]; + private _explosionEH = _player addEventHandler ["Explosion", {call FUNC(explosionNear)}]; _player setVariable [QGVAR(explosionEH), _explosionEH]; TRACE_3("added unit eh",_player,_firedEH,_explosionEH); }; GVAR(deafnessDV) = 0; GVAR(deafnessPrior) = 0; - ACE_player setVariable [QGVAR(deaf), false]; GVAR(time3) = 0; [] call FUNC(updateHearingProtection); }, true] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/hearing/functions/fnc_firedNear.sqf b/addons/hearing/functions/fnc_firedNear.sqf index a1a97deca0..9a5e65b774 100644 --- a/addons/hearing/functions/fnc_firedNear.sqf +++ b/addons/hearing/functions/fnc_firedNear.sqf @@ -53,7 +53,7 @@ if (isNil "_loudness") then { }; } count _muzzles; { - _ammoType = getText(configFile >> "CfgMagazines" >> _x >> "ammo"); + private _ammoType = getText(configFile >> "CfgMagazines" >> _x >> "ammo"); _weaponMagazines set [_forEachIndex, [_x, _ammoType]]; } forEach _weaponMagazines; diff --git a/addons/hearing/functions/fnc_handleRespawn.sqf b/addons/hearing/functions/fnc_handleRespawn.sqf index 5bad68761c..58500f1c3d 100644 --- a/addons/hearing/functions/fnc_handleRespawn.sqf +++ b/addons/hearing/functions/fnc_handleRespawn.sqf @@ -6,7 +6,7 @@ * 0: Unit * * Return Value: - * Nothing + * None * * Example: * [player] call ACE_hearing_fnc_handleRespawn; diff --git a/addons/hearing/functions/fnc_hasEarPlugsIn.sqf b/addons/hearing/functions/fnc_hasEarPlugsIn.sqf index 67a76685f4..ce697ab295 100644 --- a/addons/hearing/functions/fnc_hasEarPlugsIn.sqf +++ b/addons/hearing/functions/fnc_hasEarPlugsIn.sqf @@ -3,7 +3,7 @@ * Check if the unit has earplugs put in. * * Arguments: - * 0:Unit (player) + * 0: Unit (player) * * Return Value: * Have Earplugs in diff --git a/addons/hearing/functions/fnc_moduleHearing.sqf b/addons/hearing/functions/fnc_moduleHearing.sqf index 35276c60f8..8c04d9b8a4 100644 --- a/addons/hearing/functions/fnc_moduleHearing.sqf +++ b/addons/hearing/functions/fnc_moduleHearing.sqf @@ -3,10 +3,15 @@ * Initializes the Hearing module. * * Arguments: - * Whatever the module provides. (I dunno.) + * Whatever the module provides. (I dunno.) * * Return Value: * None + * + * Example: + * [player] call ACE_hearing_fnc_moduleHearing + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/hearing/functions/fnc_putInEarplugs.sqf b/addons/hearing/functions/fnc_putInEarplugs.sqf index 90fe8d62ac..4471ec1aba 100644 --- a/addons/hearing/functions/fnc_putInEarplugs.sqf +++ b/addons/hearing/functions/fnc_putInEarplugs.sqf @@ -3,7 +3,7 @@ * Puts in earplugs. * * Arguments: - * 0:Unit (player) + * 0: Unit (player) * * Return Value: * None @@ -17,6 +17,8 @@ params ["_player"]; +if (!GVAR(EnableCombatDeafness)) exitWith {}; + // Plugs in inventory, putting them in _player removeItem "ACE_EarPlugs"; diff --git a/addons/hearing/functions/fnc_removeEarplugs.sqf b/addons/hearing/functions/fnc_removeEarplugs.sqf index 3154230ecf..a46febefb2 100644 --- a/addons/hearing/functions/fnc_removeEarplugs.sqf +++ b/addons/hearing/functions/fnc_removeEarplugs.sqf @@ -3,7 +3,7 @@ * Takes out earplugs. * * Arguments: - * 0:Unit (player) + * 0: Unit (player) * * Return Value: * None @@ -17,6 +17,8 @@ params ["_player"]; +if (!GVAR(EnableCombatDeafness)) exitWith {}; + if !(_player canAdd "ACE_EarPlugs") exitWith { // inventory full [localize LSTRING(Inventory_Full)] call EFUNC(common,displayTextStructured); }; diff --git a/addons/hearing/stringtable.xml b/addons/hearing/stringtable.xml index 0b82e64659..e8b44833ef 100644 --- a/addons/hearing/stringtable.xml +++ b/addons/hearing/stringtable.xml @@ -14,6 +14,8 @@ Tappi auricolari 耳栓 귀마개 + 耳塞 + 耳塞 Protective Earplugs allow the wearer to be near loud weaponry without damage to his hearing. @@ -28,6 +30,8 @@ Proteggono l'apparato uditivo, permettendo a chi li indossa di resistere ai suoni particolarmente forti senza alcun danno. 着けることにより、近くの大きな銃声から聴覚を保護します。 보호용 귀마개는 화기로부터의 큰소리로부터 사용자의 청력을 보호합니다. + 配戴防护耳塞, 遇到大声的武器发射时也不会损害听力. + 配戴防護耳塞, 遇到大聲的武器發射時也不會損害聽力. Earplugs in @@ -42,6 +46,8 @@ Indossa i tappi auricolari 耳栓を着ける 귀마개 착용 + 塞入耳塞 + 塞入耳塞 Earplugs out @@ -56,6 +62,8 @@ Levati i tappi auricolari 耳栓を外す 귀마개 뺌 + 取出耳塞 + 取出耳塞 Earplugs in @@ -70,6 +78,8 @@ Indossa i tappi auricolari 耳栓を着けた 귀마개 착용 + 耳塞已塞入 + 耳塞已塞入 Earplugs out @@ -84,6 +94,8 @@ Levati i tappi auricolari 耳栓を外した 귀마개 뺌 + 耳塞已取出 + 耳塞已取出 You have no earplugs @@ -98,6 +110,8 @@ Non hai i tappi auricolari 耳栓を持っていません 귀마개가 없습니다 + 你没有耳塞 + 你沒有耳塞 No inventory space @@ -112,6 +126,8 @@ Нет места в инвентаре インベントリに空きがありません。 넣을 공간이 없습니다 + 无可用空间 + 無可用空間 Disable ear ringing @@ -126,6 +142,8 @@ Desabilitar zumbido de ouvidos 耳鳴りを無効化する 이명현상 끄기 + 关闭耳鸣效果 + 關閉耳鳴效果 Remove tinnitus effect when the player takes hearing damage @@ -138,6 +156,8 @@ Убирает эффект звона в ушах, когда игрок получает повреждение слуха プレイヤーの聴覚が損傷をしたら耳鳴りの効果を削除します 플레이어가 청력손실을 입을때 생기는 이명현상을 제거합니다. + 关闭耳鸣效果时, 就算玩家受到相当程度的听力伤害, 也不会造成耳鸣效果. + 關閉耳鳴效果時, 就算玩家受到相當程度的聽力傷害, 也不會造成耳鳴效果. Hearing @@ -152,6 +172,8 @@ Udito 聴覚 청력 + 听力设定 + 聽力設定 Enable Combat Deafness @@ -166,6 +188,8 @@ Sordità da combattimento 戦闘による難聴を有効化 전투 난청 켜기 + 启用战斗性耳聋? + 啟用戰鬥性耳聾? Reduces the hearing ability as the player takes hearing damage @@ -179,6 +203,8 @@ Réduire l'audition lorsque le joueur prend des dommages auditifs. 音による損傷をうけ、聴覚が減る可能性があります 청력에 손상을 입으면 듣는 소리가 감소합니다. + 当玩家听力受损时降低听力能力? + 當玩家聽力受損時降低聽力能力? Controls combat deafness and ear ringing. When activated, players can be deafened when a gun is fired in their vicinity or an explosion takes place without hearing protection @@ -193,6 +219,8 @@ Controlla la sordità da combattimento e fischio alle orecchie. Quando attivato, i giocatori possono essere assordati quando un'arma spara vicino o avviene un'esplosione senza protezione uditiva 戦闘による難聴や、耳鳴りを設定します。有効になった場合、聴覚を保護していないと近傍の銃声や爆発音により、難聴になります。 전투 난청과 이명현상을 조작합니다. 작동시 플레이어가 화기나 폭발의 주변에 있을경우 청력보호장치가 없을때 청력손실을 입습니다. + 设定战斗性耳聋和耳鸣. 当启用后, 玩家会在有武器在旁边射击或爆炸产生时造成耳鸣效果 + 設定戰鬥性耳聾和耳鳴. 當啟用後, 玩家會在有武器在旁邊射擊或爆炸產生時造成耳鳴效果 Effect Zeus RC @@ -206,6 +234,8 @@ Effet sur le CàD du Zeus Zeus RC への効果 Zeus RC 효과 + 启用效果在宙斯远程遥控 + 啟用效果在宙斯遠程遙控 Allow zeus remote controlled units to be able to take hearing damage. @@ -219,6 +249,8 @@ Permet aux unités controlées à distance de subir des traumatismes sonores. Zeus により遠隔操作されたユニットにも、聴覚へ損傷を受けるようにします。 Zeus가 원격으로 청력손실을 입힐 수 있게 합니다. + 设定宙斯远程遥控的单位也会受到耳鸣的效果. + 設定宙斯遠程遙控的單位也會受到耳鳴的效果. Add earplugs to units @@ -232,6 +264,8 @@ Ajouter des bouchons anti-bruits aux unités ユニットへ耳栓を追加 해당 인원에게 귀마개 추가 + 增加耳塞给单位 + 增加耳塞給單位 Add the `ACE_EarPlugs` item to all units that have loud weapons. Can disable if using custom loadouts. @@ -245,6 +279,8 @@ Ajoute l'objet "Ace_EarPlugs" à toutes les unités ayant des armes bruyantes. Peut être désactivé par des loadouts personalisés. 全ユニットへ`ACE_EarPlugs`アイテムをもたせます。これは変更された武装で無効化できます。 무기를 가지고 있는 모든 인원에게 'ACE_EarPlugs'를 지급합니다. 임의의 장비를 사용시 비활성화 할 수 있습니다. + 增加`ACE_EarPlugs`物品给拥有巨大噪音武器的单位. 当你想自定装备时, 此功能可被关闭. + 增加`ACE_EarPlugs`物品給擁有巨大噪音武器的單位. 當你想自定裝備時, 此功能可被關閉. diff --git a/addons/hellfire/$PBOPREFIX$ b/addons/hellfire/$PBOPREFIX$ new file mode 100644 index 0000000000..5bd6c77aff --- /dev/null +++ b/addons/hellfire/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\hellfire diff --git a/addons/hellfire/ACE_GuidanceConfig.hpp b/addons/hellfire/ACE_GuidanceConfig.hpp new file mode 100644 index 0000000000..1c5d4705f3 --- /dev/null +++ b/addons/hellfire/ACE_GuidanceConfig.hpp @@ -0,0 +1,17 @@ +class EGVAR(missileguidance,AttackProfiles) { + class hellfire { + // LOBL and LOAL-DIR behaive the same + name = "LOAL-DIR"; + nameLocked = "LOBL"; + functionName = QFUNC(attackProfile); + GVAR(launchHeightClear) = 0; + }; + class hellfire_hi: hellfire { + name = "LOAL-HI"; + GVAR(launchHeightClear) = 304.8; // clear 1000 ft by 1500m + }; + class hellfire_lo: hellfire_hi { + name = "LOAL-LO"; + GVAR(launchHeightClear) = 91.5; // clear 300 ft by 600m + }; +}; diff --git a/addons/hellfire/CfgAmmo.hpp b/addons/hellfire/CfgAmmo.hpp new file mode 100644 index 0000000000..c8900459ad --- /dev/null +++ b/addons/hellfire/CfgAmmo.hpp @@ -0,0 +1,70 @@ +class CfgAmmo { + class M_PG_AT; + + class ACE_Hellfire_AGM114K: M_PG_AT { + displayName = "AGM-114K"; + displayNameShort = "AGM-114K"; + description = "AGM-114K"; + descriptionShort = "AGM-114K"; + + model = "\A3\Weapons_F\Ammo\Missile_AT_03_fly_F"; + proxyShape = "\A3\Weapons_F\Ammo\Missile_AT_03_F"; + + hit = 1400; + indirectHit = 71; + indirectHitRange = 4.5; + effectsMissile = "missile2"; + + irLock = 0; + laserLock = 0; + manualControl = 0; + maxSpeed = 450; + + thrustTime = 2.5; // motor burn 2-3 sec + thrust = 250; + timeToLive = 40; + + EGVAR(rearm,caliber) = 178; + + class ace_missileguidance { + enabled = 1; + + minDeflection = 0.0005; // Minium flap deflection for guidance + maxDeflection = 0.01; // Maximum flap deflection for guidance + incDeflection = 0.0005; // The incrmeent in which deflection adjusts. + + canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode + + // Guidance type for munitions + defaultSeekerType = "SALH"; + seekerTypes[] = { "SALH", "LIDAR", "SARH", "Optic", "Thermal", "GPS", "SACLOS", "MCLOS" }; + + defaultSeekerLockMode = "LOAL"; + seekerLockModes[] = { "LOAL", "LOBL" }; + + seekLastTargetPos = 1; // seek last target position [if seeker loses LOS of target, continue to last known pos] + seekerAngle = 70; // Angle in front of the missile which can be searched + seekerAccuracy = 1; // seeker accuracy multiplier + + seekerMinRange = 1; + seekerMaxRange = 5000; // Range from the missile which the seeker can visually search + + // Attack profile type selection + defaultAttackProfile = "hellfire"; + attackProfiles[] = {"hellfire", "hellfire_hi", "hellfire_lo"}; + }; + }; + class ACE_Hellfire_AGM114N: ACE_Hellfire_AGM114K { + displayName = "AGM-114N"; + displayNameShort = "AGM-114N"; + description = "AGM-114N"; + descriptionShort = "AGM-114N"; + hit = 1100; + indirectHit = 200; + indirectHitRange = 10; + explosionEffects = "BombExplosion"; + class ace_missileguidance: ace_missileguidance { + enabled = 1; // Missile Guidance must be explicitly enabled + }; + }; +}; diff --git a/addons/hellfire/CfgEventHandlers.hpp b/addons/hellfire/CfgEventHandlers.hpp new file mode 100644 index 0000000000..77ea0239bd --- /dev/null +++ b/addons/hellfire/CfgEventHandlers.hpp @@ -0,0 +1,15 @@ +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preStart)); + }; +}; +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; +class Extended_PostInit_EventHandlers { + class ADDON { + clientInit = QUOTE(call COMPILE_FILE(XEH_postInit)); + }; +}; diff --git a/addons/hellfire/CfgMagazines.hpp b/addons/hellfire/CfgMagazines.hpp new file mode 100644 index 0000000000..79c5b5016c --- /dev/null +++ b/addons/hellfire/CfgMagazines.hpp @@ -0,0 +1,87 @@ +class CfgMagazines { + class 12Rnd_PG_missiles; + + // Kilo - tandem shaped charge HEAT (anti-tank) + class 6Rnd_ACE_Hellfire_AGM114K: 12Rnd_PG_missiles { // Old style vehicle magazine + count = 6; + ammo = "ACE_Hellfire_AGM114K"; + displayName = "AGM-114K [ACE]"; + displayNameShort = "AGM-114K"; + descriptionShort = "AGM-114K"; + }; + + // 1.70 pylon magazines: + class PylonMissile_1Rnd_ACE_Hellfire_AGM114K: 6Rnd_ACE_Hellfire_AGM114K { // Bare missle + displayName = "1x AGM-114K [ACE]"; + count = 1; + mass = 70; + pylonWeapon = QGVAR(launcher); + hardpoints[] = {"SCALPEL_1RND"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonMissile_1x_Bomb_04_F.p3d"; + }; + class PylonRack_1Rnd_ACE_Hellfire_AGM114K: 6Rnd_ACE_Hellfire_AGM114K { // 1x Launcher Support Rack + displayName = "1x AGM-114K [ACE]"; + count = 1; + mass = 85; + pylonWeapon = QGVAR(launcher); + hardpoints[] = {"B_MISSILE_PYLON", "SCALPEL_1RND_EJECTOR", "B_ASRRAM_EJECTOR", "UNI_SCALPEL"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonPod_1x_Missile_AA_04_F.p3d"; + }; + class PylonRack_3Rnd_ACE_Hellfire_AGM114K: 6Rnd_ACE_Hellfire_AGM114K { // 3x Launcher Support Rack + displayName = "3x AGM-114K [ACE]"; + count = 3; + mass = 250; + pylonWeapon = QGVAR(launcher); + hardpoints[] = {"B_MISSILE_PYLON", "UNI_SCALPEL"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonPod_3x_Missile_LG_scalpel_F.p3d"; + mirrorMissilesIndexes[] = {2, 1, 3}; + }; + class PylonRack_4Rnd_ACE_Hellfire_AGM114K: 6Rnd_ACE_Hellfire_AGM114K { // 4x Launcher Support Rack + displayName = "4x AGM-114K [ACE]"; + count = 4; + mass = 340; + pylonWeapon = QGVAR(launcher); + hardpoints[] = {"UNI_SCALPEL"}; + model = "\A3\Weapons_F\DynamicLoadout\PylonPod_4x_Missile_LG_scalpel_F.p3d"; + mirrorMissilesIndexes[] = {2, 1, 4, 3}; + }; + + // November - Metal augmented charge (Thermobaric) (Enclosures, ships, urban targets, air defense units) + class 6Rnd_ACE_Hellfire_AGM114N: 6Rnd_ACE_Hellfire_AGM114K { // Old style vehicle magazine + count = 6; + ammo = "ACE_Hellfire_AGM114N"; + displayName = "AGM-114N [ACE]"; + displayNameShort = "AGM-114N"; + descriptionShort = "AGM-114N"; + }; + + // 1.70 pylon magazines: + class PylonMissile_1Rnd_ACE_Hellfire_AGM114N: PylonMissile_1Rnd_ACE_Hellfire_AGM114K { // Bare missle + displayName = "1x AGM-114N [ACE]"; + displayNameShort = "AGM-114N"; + descriptionShort = "AGM-114N"; + ammo = "ACE_Hellfire_AGM114N"; + pylonWeapon = QGVAR(launcher_N); + }; + class PylonRack_1Rnd_ACE_Hellfire_AGM114N: PylonRack_1Rnd_ACE_Hellfire_AGM114K { // 1x Launcher Support Rack + displayName = "1x AGM-114N [ACE]"; + displayNameShort = "AGM-114N"; + descriptionShort = "AGM-114N"; + ammo = "ACE_Hellfire_AGM114N"; + pylonWeapon = QGVAR(launcher_N); + }; + class PylonRack_3Rnd_ACE_Hellfire_AGM114N: PylonRack_3Rnd_ACE_Hellfire_AGM114K { // 3x Launcher Support Rack + displayName = "3x AGM-114N [ACE]"; + displayNameShort = "AGM-114N"; + descriptionShort = "AGM-114N"; + ammo = "ACE_Hellfire_AGM114N"; + pylonWeapon = QGVAR(launcher_N); + }; + class PylonRack_4Rnd_ACE_Hellfire_AGM114N: PylonRack_4Rnd_ACE_Hellfire_AGM114K { // 4x Launcher Support Rack + displayName = "4x AGM-114N [ACE]"; + displayNameShort = "AGM-114N"; + descriptionShort = "AGM-114N"; + ammo = "ACE_Hellfire_AGM114N"; + pylonWeapon = QGVAR(launcher_N); + }; +}; diff --git a/addons/hellfire/CfgVehicles.hpp b/addons/hellfire/CfgVehicles.hpp new file mode 100644 index 0000000000..89dbf131d7 --- /dev/null +++ b/addons/hellfire/CfgVehicles.hpp @@ -0,0 +1,6 @@ +class CfgVehicles { + class Heli_Attack_01_base_F; + class Heli_Attack_01_dynamicLoadout_base_F: Heli_Attack_01_base_F { + GVAR(addLaserDesignator) = 1; + }; +}; diff --git a/addons/hellfire/CfgWeapons.hpp b/addons/hellfire/CfgWeapons.hpp new file mode 100644 index 0000000000..483f1dd0a7 --- /dev/null +++ b/addons/hellfire/CfgWeapons.hpp @@ -0,0 +1,17 @@ +class CfgWeapons { + class missiles_SCALPEL; + class GVAR(launcher): missiles_SCALPEL { + displayName = "AGM-114K Hellfire II"; + GVAR(enabled) = 1; // show attack profile / lock on hud + EGVAR(laser,canSelect) = 1; // can ace_laser lock (allows switching laser code) + canLock = 0; + weaponLockSystem = 0; + magazines[] = {"6Rnd_ACE_Hellfire_AGM114K", "PylonMissile_1Rnd_ACE_Hellfire_AGM114K", "PylonRack_1Rnd_ACE_Hellfire_AGM114K", "PylonRack_3Rnd_ACE_Hellfire_AGM114K", "PylonRack_4Rnd_ACE_Hellfire_AGM114K"}; + lockingTargetSound[] = {"",0,1}; + lockedTargetSound[] = {"",0,1}; + }; + class GVAR(launcher_N): GVAR(launcher) { + displayName = "AGM-114N Hellfire II"; + magazines[] = {"6Rnd_ACE_Hellfire_AGM114N", "PylonMissile_1Rnd_ACE_Hellfire_AGM114N", "PylonRack_1Rnd_ACE_Hellfire_AGM114N", "PylonRack_3Rnd_ACE_Hellfire_AGM114N", "PylonRack_4Rnd_ACE_Hellfire_AGM114N"}; + }; +}; diff --git a/addons/hellfire/README.md b/addons/hellfire/README.md new file mode 100644 index 0000000000..bb9eef711e --- /dev/null +++ b/addons/hellfire/README.md @@ -0,0 +1,10 @@ +ace_hellfire +========== + +Adds AGM-114K Hellfire missiles. + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [PabstMirror](https://github.com/PabstMirror) diff --git a/addons/hellfire/RscTitles.hpp b/addons/hellfire/RscTitles.hpp new file mode 100644 index 0000000000..2bbedae1b6 --- /dev/null +++ b/addons/hellfire/RscTitles.hpp @@ -0,0 +1,57 @@ +class RscControlsGroupNoScrollbars; +class RscPictureKeepAspect; +class RscText; + +class RscTitles { + class GVAR(modeDisplay) { + idd = -1; + onLoad = QUOTE(with uiNameSpace do { GVAR(display) = _this select 0 };); + movingEnable = 0; + duration = 60; + fadeIn = "false"; + fadeOut = "false"; + class controls { + class ModeControlGroup: RscControlsGroupNoScrollbars { + idc = IDC_MODECONTROLGROUP; + x = "3.8 * (((safezoneW / safezoneH) min 1.2) / 40) + (profilenamespace getvariable ['IGUI_GRID_WEAPON_X',((safezoneX + safezoneW) - (10 * (((safezoneW / safezoneH) min 1.2) / 40)) - 4.3 * (((safezoneW / safezoneH) min 1.2) / 40))])"; + y = "2.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) + (profilenamespace getVariable ['IGUI_GRID_WEAPON_Y', (safezoneY + 0.5 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))])"; + w = "10 * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + + class controls { + class AttackMode: RscText { + idc = IDC_ATTACKMODE; + colorText[] = {1, 1, 1, 1}; + colorBackground[] = {0, 0, 0, 0}; + x = "0"; + y = "0"; + w = "(2.6) * (((safezoneW / safezoneH) min 1.2) / 40)"; + h = "1 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + sizeEx = "0.8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + }; + class LaserCode: RscText { + idc = IDC_LASERCODE; + colorText[] = {1, 1, 1, 1}; + colorBackground[] = {0, 0, 0, 0}; + x = "(3.6) * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + y = "0"; + w = "(2.5) * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + h = "(1) * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + sizeEx = "0.8 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + }; + class LaserIcon: RscPictureKeepAspect { + idc = IDC_LASERICON; + colorText[] = {1, 0, 0, 1}; + colorBackground[] = {0, 0, 0, 0}; + text = "\a3\Ui_F_Curator\Data\CfgCurator\laser_ca.paa"; + x = "(6.1) * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + y = "0"; + w = "(1) * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + h = "(1) * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"; + }; + }; + }; + + }; + }; +}; diff --git a/addons/hellfire/XEH_PREP.hpp b/addons/hellfire/XEH_PREP.hpp new file mode 100644 index 0000000000..8b07d00b2c --- /dev/null +++ b/addons/hellfire/XEH_PREP.hpp @@ -0,0 +1,5 @@ +LOG("prep"); +PREP(attackProfile); +PREP(getAttackProfileSettings); +PREP(setupVehicle); +PREP(showHud); diff --git a/addons/hellfire/XEH_postInit.sqf b/addons/hellfire/XEH_postInit.sqf new file mode 100644 index 0000000000..34fc5b92ba --- /dev/null +++ b/addons/hellfire/XEH_postInit.sqf @@ -0,0 +1,10 @@ +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +GVAR(pfID) = -1; + +["ace_settingsInitialized", { + ["turret", LINKFUNC(showHud), false] call CBA_fnc_addPlayerEventHandler; + ["vehicle", LINKFUNC(showHud), true] call CBA_fnc_addPlayerEventHandler; // only one of these needs the retro flag +}] call CBA_fnc_addEventHandler; diff --git a/addons/hellfire/XEH_preInit.sqf b/addons/hellfire/XEH_preInit.sqf new file mode 100644 index 0000000000..3464490b65 --- /dev/null +++ b/addons/hellfire/XEH_preInit.sqf @@ -0,0 +1,9 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP_RECOMPILE_START; + #include "XEH_PREP.hpp" +PREP_RECOMPILE_END; + +ADDON = true; diff --git a/addons/hellfire/XEH_preStart.sqf b/addons/hellfire/XEH_preStart.sqf new file mode 100644 index 0000000000..022888575e --- /dev/null +++ b/addons/hellfire/XEH_preStart.sqf @@ -0,0 +1,3 @@ +#include "script_component.hpp" + +#include "XEH_PREP.hpp" diff --git a/addons/hellfire/config.cpp b/addons/hellfire/config.cpp new file mode 100644 index 0000000000..14c00904f1 --- /dev/null +++ b/addons/hellfire/config.cpp @@ -0,0 +1,23 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_interaction", "ace_missileguidance"}; + author = ECSTRING(common,ACETeam); + authors[] = {"PabstMirror"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "ACE_GuidanceConfig.hpp" +#include "CfgAmmo.hpp" +#include "CfgEventHandlers.hpp" +#include "CfgMagazines.hpp" +#include "CfgVehicles.hpp" +#include "CfgWeapons.hpp" +#include "RscTitles.hpp" diff --git a/addons/hellfire/functions/fnc_attackProfile.sqf b/addons/hellfire/functions/fnc_attackProfile.sqf new file mode 100644 index 0000000000..84f1c39f0a --- /dev/null +++ b/addons/hellfire/functions/fnc_attackProfile.sqf @@ -0,0 +1,85 @@ +/* + * Author: PabstMirror + * Hellfire attack profile. Handles all 4 modes LOBL, LOAL-DIR, LOAL-HI, LOAL-LO + * + * Arguments: + * 0: Seeker Target PosASL + * 1: Guidance Arg Array + * 2: Attack Profile State + * + * Return Value: + * Missile Aim PosASL + * + * Example: + * [[1,2,3], [], []] call ace_hellfire_fnc_attackProfile + * + * Public: No + */ +// #define DEBUG_MODE_FULL +#include "script_component.hpp" + +params ["_seekerTargetPos", "_args", "_attackProfileStateParams"]; +_args params ["_firedEH", "_launchParams"]; +_launchParams params ["","_targetLaunchParams"]; +_targetLaunchParams params ["", "", "_launchPos"]; +_firedEH params ["","","","","","","_projectile"]; + +// Get state params: +if (_attackProfileStateParams isEqualTo []) then { + _this call FUNC(getAttackProfileSettings); +}; +_attackProfileStateParams params ["_attackStage", "_configLaunchHeightClear"]; + + +private _projectilePos = getPosASL _projectile; +private _distanceFromLaunch2d = _launchPos distance2d _projectilePos; +private _heightAboveLaunch = (_projectilePos select 2) - (_launchPos select 2); + +// Add height depending on distance for compensate +private _returnTargetPos = nil; + +switch (_attackStage) do { + case STAGE_LAUNCH: { // Gain height quickly to pass terrain mask + _returnTargetPos = _projectilePos getPos [100, getDir _projectile]; + _returnTargetPos set [2, (_projectilePos select 2) + 36.4]; // 100 and 36.4 gives a 20 deg angle + + if (_heightAboveLaunch > _configLaunchHeightClear) then { + _attackProfileStateParams set [0, STAGE_SEEK_CRUISE]; + TRACE_2("New Stage: STAGE_SEEK_CRUISE",_distanceFromLaunch2d,_heightAboveLaunch); + }; + }; + case STAGE_SEEK_CRUISE: { // Slowly gain altitude while searching for target + // Before 4000 cruise at 5.7 degrees up, then level out + private _cruiseHeight = linearConversion [3000, 5000, _distanceFromLaunch2d, 10, 0, true]; + + _returnTargetPos = _projectilePos getPos [100, getDir _projectile]; + _returnTargetPos set [2, (_projectilePos select 2) + _cruiseHeight]; + + if (!(_seekerTargetPos isEqualTo [0,0,0])) then { + _attackProfileStateParams set [0, STAGE_ATTACK_CRUISE]; + TRACE_1("New Stage: STAGE_ATTACK_CRUISE",_distanceFromLaunch2d); + }; + }; + case STAGE_ATTACK_CRUISE: { + private _currentHeightOverTarget = (_projectilePos select 2) - (_seekerTargetPos select 2); + private _distanceToTarget2d = _seekerTargetPos distance2d _projectilePos; + private _distToGoRatio = _distanceToTarget2d / (_launchPos distance2d _seekerTargetPos); + + // arcing up at 7 degrees to start until 50% left, then smooth curve to a downward attack + private _gainSlope = linearConversion [0.5, 0.1, _distToGoRatio, 7, -7, true]; + _returnTargetPos = +_seekerTargetPos; + _returnTargetPos set [2, ((_projectilePos select 2) + (_distanceToTarget2d * sin _gainSlope)) max (_seekerTargetPos select 2)]; + + if ((_distanceToTarget2d < 500) || {(_currentHeightOverTarget atan2 _distanceToTarget2d) > 15}) then { // Wait until we can come down at a sharp angle + _attackProfileStateParams set [0, STAGE_ATTACK_TERMINAL]; + TRACE_2("New Stage: STAGE_ATTACK_TERMINAL",_distanceToTarget2d,_currentHeightOverTarget); + }; + }; + case STAGE_ATTACK_TERMINAL: { + private _distanceToTarget2d = _seekerTargetPos distance2d _projectilePos; + _returnTargetPos = _seekerTargetPos vectorAdd [0, 0, _distanceToTarget2d * 0.02]; + }; +}; + +// TRACE_1("Adjusted target position", _returnTargetPos); +_returnTargetPos; diff --git a/addons/hellfire/functions/fnc_getAttackProfileSettings.sqf b/addons/hellfire/functions/fnc_getAttackProfileSettings.sqf new file mode 100644 index 0000000000..a4854faa55 --- /dev/null +++ b/addons/hellfire/functions/fnc_getAttackProfileSettings.sqf @@ -0,0 +1,46 @@ +/* + * Author: PabstMirror + * Gets attack profile parameters for first run of hellfire attack profile function + * + * Arguments: + * 0: Seeker Target PosASL + * 1: Guidance Arg Array + * 2: Attack Profile State + * + * Return Value: + * Nothing + * + * Example: + * [[], [], []] call ace_hellfire_fnc_getAttackProfileSettings; + * + * Public: No + */ +// #define DEBUG_MODE_FULL +#include "script_component.hpp" + +params ["_seekerTargetPos", "_args", "_attackProfileStateParams"]; +_args params ["_firedEH", "_launchParams"]; +_launchParams params ["", "", "", "_attackProfile"]; +_firedEH params ["","","","","","","_projectile"]; + +private _attackConfig = configFile >> QEGVAR(missileguidance,AttackProfiles) >> _attackProfile; + +// Launch (clearing terrain mask for LO/HI): +private _configLaunchHeightClear = getNumber (_attackConfig >> QGVAR(launchHeightClear)); + +// Get starting stage +private _startingStage = if (_configLaunchHeightClear > 0) then { + STAGE_LAUNCH; // LOAL-HI / LO +} else { + if (_seekerTargetPos isEqualTo [0,0,0]) then { + STAGE_SEEK_CRUISE; // LOAL-DIR + } else { + STAGE_ATTACK_CRUISE // LOBL + }; +}; + +// Set data in param array +_attackProfileStateParams set [0, _startingStage]; +_attackProfileStateParams set [1, _configLaunchHeightClear]; + +TRACE_1("new shot settings",_attackProfileStateParams); diff --git a/addons/hellfire/functions/fnc_setupVehicle.sqf b/addons/hellfire/functions/fnc_setupVehicle.sqf new file mode 100644 index 0000000000..811e6c6f3f --- /dev/null +++ b/addons/hellfire/functions/fnc_setupVehicle.sqf @@ -0,0 +1,76 @@ +/* + * Author: PabstMirror + * Adds interaction menu actions to switch the firemode to a vehicle. + * Also adds a Laser Designator if vehicle is configured for one. + * + * Arguments: + * 0: Vehicle + * 1: Player's Turret Path + * + * Return Value: + * Nothing + * + * Example: + * [(vehicle player), [0]] call ace_hellfire_fnc_setupVehicle + * + * Public: No + */ +// #define DEBUG_MODE_FULL +#include "script_component.hpp" + +params ["_vehicle", "_turretPath"]; +TRACE_2("setupVehicle",_vehicle,_turretPath); + +// Add laser if vehicle is configured for one: +if ((getNumber (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> QGVAR(addLaserDesignator))) == 1) then { + [{ + params ["_vehicle", "_turretPath"]; + TRACE_3("checking for laser",_vehicle,_turretPath,_vehicle turretLocal _turretPath); + if (!alive _vehicle) exitWith {}; + if (!(_vehicle turretLocal _turretPath)) then {WARNING("Turret not local");}; + private _hasLaser = false; + { + // Most addons just use "Laserdesignator_mounted", but this should cover custom ones + if ((getNumber (configFile >> "CfgWeapons" >> _x >> "Laser")) == 1) exitWith { + _hasLaser = true; + }; + } forEach (_vehicle weaponsTurret _turretPath); + if (!_hasLaser) then { + TRACE_1("Adding Laser Designator",typeOf _vehicle); + _vehicle addWeaponTurret ["Laserdesignator_mounted", _turretPath]; + _vehicle addMagazineTurret ["Laserbatteries", _turretPath]; + }; + }, _this, 1] call CBA_fnc_waitAndExecute; // Need to delay slightly for turret to become local (probably only needs a single frame) +}; + + +// Add interaction menu actions: +if (_vehicle getVariable [QGVAR(actionsAdded), false]) exitWith {}; +_vehicle setVariable [QGVAR(actionsAdded), true]; + +private _action = [QUOTE(ADDON), localize LSTRING(hellfireModeAction), "", {}, {true}] call EFUNC(interact_menu,createAction); +private _basePath = [_vehicle, 1, ["ACE_SelfActions"], _action] call EFUNC(interact_menu,addActionToObject); + +private _fnc_statement = { + params ["_target", "", "_attackProfile"]; + TRACE_2("statement",_target,_attackProfile); + + _target setVariable [QEGVAR(missileguidance,attackProfile), _attackProfile]; +}; +private _fnc_condition = { + params ["_target", "_player", "_attackProfile"]; + + private _turretPath = if (ACE_player == (driver _target)) then {[-1]} else {ACE_player call CBA_fnc_turretPath}; + private _hasWeapon = ({(isNumber (configFile >> "CfgWeapons" >> _x >> QGVAR(enabled))) && {getNumber (configFile >> "CfgWeapons" >> _x >> QGVAR(enabled)) > 0}} count (_target weaponsTurret _turretPath)) > 0; + + (_hasWeapon) && + {(_target getVariable [QEGVAR(missileguidance,attackProfile), "hellfire"]) != _attackProfile}; +}; + +{ + private _displayName = getText (configFile >> QEGVAR(missileguidance,AttackProfiles) >> _x >> "name"); + private _action = [format [QGVAR(%1),_x], _displayName, "", _fnc_statement, _fnc_condition, {}, _x] call EFUNC(interact_menu,createAction); + [_vehicle, 1, _basePath, _action] call EFUNC(interact_menu,addActionToObject); +} forEach ["hellfire", "hellfire_hi", "hellfire_lo"]; + +TRACE_2("interactions added",_vehicle,typeOf _vehicle); diff --git a/addons/hellfire/functions/fnc_showHud.sqf b/addons/hellfire/functions/fnc_showHud.sqf new file mode 100644 index 0000000000..c79780c3fe --- /dev/null +++ b/addons/hellfire/functions/fnc_showHud.sqf @@ -0,0 +1,124 @@ +/* + * Author: PabstMirror + * Shows the hellfire hud when vehicle is equiped with the weapon. + * Shows laser code, fire mode and seeker status. + * + * Arguments: + * 0: Player + * + * Return Value: + * Nothing + * + * Example: + * [player] call ace_hellfire_fnc_showHud + * + * Public: No + */ +#include "script_component.hpp" + +params ["_player"]; +TRACE_1("showHud",_player); + +private _enabled = false; +private _vehicle = vehicle _player; +private _turretPath = [-1]; + +if ((alive _player) && {_player != _vehicle}) then { + if (_player != (driver _vehicle)) then { + _turretPath = _player call CBA_fnc_turretPath + }; + { + if ((getNumber (configFile >> "CfgWeapons" >> _x >> QGVAR(enabled))) == 1) then { + TRACE_1("enabled",_x); + _enabled = true; + }; + } forEach (_vehicle weaponsTurret _turretPath); +}; + +if ((!_enabled) && (GVAR(pfID) < 0)) exitWith {TRACE_2("Disabled - No Change",_enabled,GVAR(pfID));}; + +TRACE_2("Cleaning up old pfeh and display",_enabled,GVAR(pfID)); +[GVAR(pfID)] call CBA_fnc_removePerFrameHandler; +if (!isNull (uiNamespace getVariable [QGVAR(display), displayNull])) then { + ([QGVAR(modeDisplay)] call BIS_fnc_rscLayer) cutText ["", "PLAIN"]; +}; +GVAR(pfID) = -1; + +if (!_enabled) exitWith {TRACE_2("Disabled - Now Off",_enabled,GVAR(pfID));}; + +TRACE_2("Enabled - Adding actions and PFEH",_enabled,GVAR(pfID)); + +[_vehicle, _turretPath] call FUNC(setupVehicle); + +private _adjustDown = false; // Flares display will block ours, if present just move ours down a bit +{ + if ((getText (configFile >> "CfgWeapons" >> _x >> "simulation")) == "cmlauncher") exitWith {_adjustDown = true}; +} forEach (_vehicle weaponsTurret _turretPath); + +private _turretConfig = [_vehicle, _turretPath] call CBA_fnc_getTurret; +private _seekerSource = getText (_turretConfig >> "memoryPointGunnerOptics"); +TRACE_3("",_adjustDown,_seekerSource,_vehicle selectionPosition _seekerSource); + +GVAR(pfID) = [{ + params ["_args", "_pfID"]; + _args params ["_vehicle", "_turretPath", "_seekerSource", "_adjustDown"]; + + // Restart display if null (not just at start, this will happen periodicly) + if (isNull (uiNamespace getVariable [QGVAR(display), displayNull])) then { + TRACE_1("creating display",_this); + ([QGVAR(modeDisplay)] call BIS_fnc_rscLayer) cutRsc [QGVAR(modeDisplay), "PLAIN", 1, false]; + if (_adjustDown) then { + private _ctrl = (uiNamespace getVariable [QGVAR(display), displayNull]) displayCtrl IDC_MODECONTROLGROUP; + private _pos = ctrlPosition _ctrl; + _pos set [1, (_pos select 1) + ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)]; + _ctrl ctrlSetPosition _pos; + _ctrl ctrlCommit 0; + }; + }; + + private _currentWeapon = _vehicle currentWeaponTurret _turretPath; + private _showLockMode = (getNumber (configFile >> "CfgWeapons" >> _currentWeapon >> QGVAR(enabled))) == 1; + + private _ctrlGroup = (uiNamespace getVariable [QGVAR(display), displayNull]) displayCtrl 1000; + + if (!_showLockMode) exitWith { + _ctrlGroup ctrlShow false; + }; + _ctrlGroup ctrlShow true; + + private _ctrlText = (uiNamespace getVariable [QGVAR(display), displayNull]) displayCtrl IDC_ATTACKMODE; + private _ctrlCode = (uiNamespace getVariable [QGVAR(display), displayNull]) displayCtrl IDC_LASERCODE; + private _ctrlIcon = (uiNamespace getVariable [QGVAR(display), displayNull]) displayCtrl IDC_LASERICON; + + // Do Laser Scan: + private _laserSource = AGLtoASL (_vehicle modelToWorld (_vehicle selectionPosition _seekerSource)); + private _laserCode = _vehicle getVariable [QEGVAR(laser,code), ACE_DEFAULT_LASER_CODE]; + private _laserResult = [_laserSource, vectorDir _vehicle, 70, 5000, [ACE_DEFAULT_LASER_WAVELENGTH,ACE_DEFAULT_LASER_WAVELENGTH], _laserCode, _vehicle] call EFUNC(laser,seekerFindLaserSpot); + private _foundTargetPos = _laserResult select 0; + private _haveLock = !isNil "_foundTargetPos"; + + private _modeShort = "ERR"; + private _vehicleLockMode = _vehicle getVariable [QEGVAR(missileguidance,attackProfile), ""]; + + switch (_vehicleLockMode) do { // note: missileguidance is case sensitive + case ("hellfire_hi"): { + _modeShort = getText (configFile >> QEGVAR(missileguidance,AttackProfiles) >> _vehicleLockMode >> "name"); + }; + case ("hellfire_lo"): { + _modeShort = getText (configFile >> QEGVAR(missileguidance,AttackProfiles) >> _vehicleLockMode >> "name"); + }; + default { + _vehicleLockMode = "hellfire"; + _modeShort = if (_haveLock) then { + getText (configFile >> QEGVAR(missileguidance,AttackProfiles) >> _vehicleLockMode >> "nameLocked"); + } else { + getText (configFile >> QEGVAR(missileguidance,AttackProfiles) >> _vehicleLockMode >> "name"); + }; + }; + }; + + _ctrlIcon ctrlSetTextColor ([[0,0,0,0.25],[1,0,0,0.75]] select _haveLock); + _ctrlText ctrlSetText _modeShort; + _ctrlCode ctrlSetText format ["CODE: %1", _laserCode]; + +}, 0.1, [_vehicle, _turretPath, _seekerSource, _adjustDown]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/hellfire/functions/script_component.hpp b/addons/hellfire/functions/script_component.hpp new file mode 100644 index 0000000000..899f29a758 --- /dev/null +++ b/addons/hellfire/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\hellfire\script_component.hpp" diff --git a/addons/hellfire/script_component.hpp b/addons/hellfire/script_component.hpp new file mode 100644 index 0000000000..2e8cf04eff --- /dev/null +++ b/addons/hellfire/script_component.hpp @@ -0,0 +1,27 @@ +#define COMPONENT hellfire +#define COMPONENT_BEAUTIFIED Hellfire +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_HELLFIRE + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_HELLFIRE + #define DEBUG_SETTINGS DEBUG_SETTINGS_HELLFIRE +#endif + +#include "\z\ace\addons\main\script_macros.hpp" + +#define STAGE_LAUNCH 1 +#define STAGE_SEEK_CRUISE 2 +#define STAGE_ATTACK_CRUISE 3 +#define STAGE_ATTACK_TERMINAL 4 + +#define IDC_MODECONTROLGROUP 1000 +#define IDC_ATTACKMODE 1001 +#define IDC_LASERCODE 1002 +#define IDC_LASERICON 1003 diff --git a/addons/hellfire/stringtable.xml b/addons/hellfire/stringtable.xml new file mode 100644 index 0000000000..8afbad9bd8 --- /dev/null +++ b/addons/hellfire/stringtable.xml @@ -0,0 +1,12 @@ + + + + + Set Hellfire mode + Imposta modalità Hellfire + ヘルファイア モードを設定 + 设定地狱火模式 + 設定地獄火模式 + + + diff --git a/addons/hitreactions/functions/fnc_fallDown.sqf b/addons/hitreactions/functions/fnc_fallDown.sqf index 03484438eb..a7814b914e 100644 --- a/addons/hitreactions/functions/fnc_fallDown.sqf +++ b/addons/hitreactions/functions/fnc_fallDown.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [player, kevin, 5] call ACE_hitreactions_fnc_fallDown + * * Public: No */ #include "script_component.hpp" @@ -27,6 +30,9 @@ if (_unit == _firer) exitWith {}; // camshake for player if (_unit == ACE_player) then { + if (visibleMap) then { + openMap false; + }; addCamShake [3, 5, _damage + random 10]; }; diff --git a/addons/hitreactions/functions/fnc_getRandomAnimation.sqf b/addons/hitreactions/functions/fnc_getRandomAnimation.sqf index 996901a31e..10b64b5eae 100644 --- a/addons/hitreactions/functions/fnc_getRandomAnimation.sqf +++ b/addons/hitreactions/functions/fnc_getRandomAnimation.sqf @@ -8,6 +8,9 @@ * Return Value: * Fall animation * + * Example: + * [bob] call ACE_hitreactions_fnc_getRandomAnimation + * * Public: No */ #include "script_component.hpp" diff --git a/addons/huntir/functions/fnc_cam.sqf b/addons/huntir/functions/fnc_cam.sqf index 41a9561e60..4c9ba71745 100644 --- a/addons/huntir/functions/fnc_cam.sqf +++ b/addons/huntir/functions/fnc_cam.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [cam] call ACE_huntir_fnc_cam + * * Public: No */ #include "script_component.hpp" diff --git a/addons/huntir/functions/fnc_handleFired.sqf b/addons/huntir/functions/fnc_handleFired.sqf index b7e8c2a010..50ed4713aa 100644 --- a/addons/huntir/functions/fnc_handleFired.sqf +++ b/addons/huntir/functions/fnc_handleFired.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * call ACE_huntir_fnc_handleFired + * * Public: No */ #include "script_component.hpp" diff --git a/addons/huntir/functions/fnc_huntir.sqf b/addons/huntir/functions/fnc_huntir.sqf index 844ca302e7..f692da749b 100644 --- a/addons/huntir/functions/fnc_huntir.sqf +++ b/addons/huntir/functions/fnc_huntir.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * call ACE_huntir_fnc_huntir + * * Public: No */ #include "script_component.hpp" diff --git a/addons/huntir/functions/fnc_huntirCompass.sqf b/addons/huntir/functions/fnc_huntirCompass.sqf index f383a23a24..662dd621a3 100644 --- a/addons/huntir/functions/fnc_huntirCompass.sqf +++ b/addons/huntir/functions/fnc_huntirCompass.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * call ACE_huntir_fnc_huntirCompass + * * Public: No */ #include "script_component.hpp" diff --git a/addons/huntir/functions/fnc_keyPressed.sqf b/addons/huntir/functions/fnc_keyPressed.sqf index 509dcb9de5..82764ffd05 100644 --- a/addons/huntir/functions/fnc_keyPressed.sqf +++ b/addons/huntir/functions/fnc_keyPressed.sqf @@ -3,7 +3,7 @@ * Handles the HuntIR monitor key interaction * * Arguments: - * 0: ? + * 0: ? * 1: keycode * * Return Value: diff --git a/addons/huntir/stringtable.xml b/addons/huntir/stringtable.xml index a65c98f8b5..3bba8c02ab 100644 --- a/addons/huntir/stringtable.xml +++ b/addons/huntir/stringtable.xml @@ -14,6 +14,8 @@ Caixa de transporte do HuntIR HuntIR 輸送箱 HuntIR 수송함 + 高空战术成像器运输箱 + 高空戰術成像器運輸箱 HuntIR Round @@ -28,6 +30,8 @@ Cartucho HuntIR HuntIR 弾頭 HuntIR 유탄 + 高空战术成像器弹药 + 高空戰術成像器彈藥 HuntIR monitor @@ -42,6 +46,8 @@ Monitor HuntIR HuntIR モニタ HuntIR 모니터 + 高空战术成像器显示面板 + 高空戰術成像器顯示面板 Activate HuntIR monitor @@ -56,6 +62,8 @@ Ativar monitor do HuntIR HuntIR を起動する HuntIR 모니터 켜기 + 开启高空战术成像器显示面板 + 開啟高空戰術成像器顯示面板 Camera: @@ -70,6 +78,8 @@ Câmera: カメラ: 카메라: + 摄影机: + 攝影機: Altitude: @@ -84,6 +94,8 @@ Altitude: 高度: 고도: + 高度: + 高度: Recording Time: @@ -98,6 +110,8 @@ Tempo de gravação: 録画時間: 녹화시간: + 记录时间: + 記錄時間: Press ESC to quit camera @@ -112,6 +126,8 @@ Pressione ESC para sair da câmera ESC を押しカメラを抜ける ESC를 눌러 카메라 나가기 + 按下ESC退出摄影机 + 按下ESC退出攝影機 Help @@ -126,6 +142,8 @@ Ajuda ヘルプ 도움말 + 帮助 + 幫助 A/D - Cycle zoom @@ -140,6 +158,8 @@ A/D - Troca zoom A/D - 倍率の変更 A/D - 줌 전환 + A/D - 切换放大倍率 + A/D - 切換放大倍率 W/S - Select camera @@ -154,6 +174,8 @@ W/S - Seleciona câmera W/S - カメラを選択 W/S - 카메라 선택 + W/S - 切换摄影机 + W/S - 切換攝影機 Left/Right - Rotate camera @@ -168,6 +190,8 @@ Esquerda/Direita - Rotaciona câmera Left/Right - カメラを開店 좌/우 - 카메라 돌리기 + 左/右 - 旋转摄影机 + 左/右 - 旋轉攝影機 Up/Down - Elevate/lower camera @@ -182,6 +206,8 @@ Acima/Abaixo - Eleva/Abaixa a câmera Up/Down - カメラ角度を変更 상/하 카메라 올리기/내리기 + 上/下 - 上升/下降摄影机 + 上/下 - 上升/下降攝影機 N - Cycle IT modes @@ -196,6 +222,8 @@ N - Troca modo IT N - IT モードを変更 N - IT모드 순환 + N - 切换热显模式 + N - 切換熱顯模式 R - Reset camera @@ -210,6 +238,8 @@ R - Redefine a câmera R - カメラを初期化 R - 카메라 초기화 + R - 重置摄影机 + R - 重置攝影機 Esc - Exit help @@ -224,6 +254,8 @@ Esc - Sai do Ajuda Esc - ヘルプを出る Esc - 도움말 나가기 + Esc - 离开帮助 + Esc - 離開幫助 diff --git a/addons/interact_menu/CfgEventHandlers.hpp b/addons/interact_menu/CfgEventHandlers.hpp index fa53ccf57c..b8bb1264e1 100644 --- a/addons/interact_menu/CfgEventHandlers.hpp +++ b/addons/interact_menu/CfgEventHandlers.hpp @@ -29,4 +29,10 @@ class Extended_DisplayLoad_EventHandlers { class RscDiary { ADDON = QUOTE(call COMPILE_FILE(XEH_displayLoad)); }; + class RscDisplayInterrupt { + ADDON = QUOTE(_this call FUNC(handleEscapeMenu)); + }; + class RscDisplayMPInterrupt { + ADDON = QUOTE(_this call FUNC(handleEscapeMenu)); + }; }; diff --git a/addons/interact_menu/XEH_PREP.hpp b/addons/interact_menu/XEH_PREP.hpp index 0c1a6842fc..55c35d54df 100644 --- a/addons/interact_menu/XEH_PREP.hpp +++ b/addons/interact_menu/XEH_PREP.hpp @@ -9,6 +9,7 @@ PREP(collectActiveActionTree); PREP(createAction); PREP(ctrlSetParsedTextCached); PREP(findActionNode); +PREP(handleEscapeMenu); PREP(isSubPath); PREP(keyDown); PREP(keyUp); diff --git a/addons/interact_menu/XEH_clientInit.sqf b/addons/interact_menu/XEH_clientInit.sqf index 0d280506b3..dbe9d548cd 100644 --- a/addons/interact_menu/XEH_clientInit.sqf +++ b/addons/interact_menu/XEH_clientInit.sqf @@ -21,7 +21,7 @@ GVAR(ParsedTextCached) = []; //Setup text/shadow/size/color settings matrix [] call FUNC(setupTextColors); // Install the render EH on the main display - addMissionEventHandler ["Draw3D", DFUNC(render)]; + addMissionEventHandler ["Draw3D", {call FUNC(render)}]; }] call CBA_fnc_addEventHandler; //Add Actions to Houses: @@ -42,6 +42,27 @@ GVAR(ParsedTextCached) = []; [219, [false, true, false]], false] call CBA_fnc_addKeybind; //Left Windows Key + Ctrl/Strg +["ACE3 Common", QGVAR(InteractKey_Toggle), +format ["%1 (%2)", (localize LSTRING(InteractKey)), localize ELSTRING(common,KeybindToggle)], +{ + if (GVAR(openedMenuType) != 0) then { + [0] call FUNC(keyDown) + } else { + [0,false] call FUNC(keyUp) + }; +}, {}, [-1, [false, false, false]], false] call CBA_fnc_addKeybind; // UNBOUND + +["ACE3 Common", QGVAR(SelfInteractKey_Toggle), +format ["%1 (%2)", (localize LSTRING(SelfInteractKey)), localize ELSTRING(common,KeybindToggle)], +{ + if (GVAR(openedMenuType) != 1) then { + [1] call FUNC(keyDown) + } else { + [1, false] call FUNC(keyUp) + }; +}, {}, [-1, [false, false, false]], false] call CBA_fnc_addKeybind; // UNBOUND + + // Listens for the falling unconscious event, just in case the menu needs to be closed ["ace_unconscious", { // If no menu is open just quit diff --git a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf index ae066576f7..08e1608990 100644 --- a/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf +++ b/addons/interact_menu/functions/fnc_collectActiveActionTree.sqf @@ -11,6 +11,9 @@ * Return Value: * Active children * + * Example: + * [bob, [array], [array], 5] call ACE_interact_menu_fnc_collectActoveActionTree + * * Public: No */ #include "script_component.hpp" diff --git a/addons/interact_menu/functions/fnc_compileMenu.sqf b/addons/interact_menu/functions/fnc_compileMenu.sqf index 225ebc59b4..58e13ee481 100644 --- a/addons/interact_menu/functions/fnc_compileMenu.sqf +++ b/addons/interact_menu/functions/fnc_compileMenu.sqf @@ -8,9 +8,12 @@ * Return Value: * None * + * Example: + * [bob] call ACE_interact_menu_fnc_compileMenu + * * Public: No */ -#include "script_component.hpp"; +#include "script_component.hpp" params ["_target"]; @@ -109,6 +112,22 @@ private _actionsCfg = configFile >> "CfgVehicles" >> _objectType >> "ACE_Actions TRACE_1("Building ACE_Actions",_objectType); private _actions = [_actionsCfg, 0] call _recurseFnc; +// ace_interaction_fnc_addPassengerAction expects ACE_MainActions to be first +// Other mods can change the order that configs are added, so we should verify this now and resort if needed +if (_objectType isKindOf "CaManBase") then { + if ((((_actions select 0) select 0) select 0) != "ACE_MainActions") then { + INFO_1("ACE_MainActions not first for man [%1]",_objectType); + private _mainActions = []; + { + if (((_x select 0) select 0) == "ACE_MainActions") then { + _mainActions = _actions deleteAt _forEachIndex; + }; + } forEach _actions; + if (_mainActions isEqualTo []) exitWith {ERROR_1("ACE_MainActions not found on man [%1]",_objectType);}; + _actions = [_mainActions] + _actions; // resort array with ACE_MainActions first + }; +}; + _namespace setVariable [_objectType, _actions]; /* diff --git a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf index 0c5e236f0b..9209447630 100644 --- a/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf +++ b/addons/interact_menu/functions/fnc_compileMenuSelfAction.sqf @@ -8,9 +8,12 @@ * Return Value: * None * + * Example: + * [bob] call ACE_interact_menu_fnc_compileMenuSelfAction + * * Public: No */ -#include "script_component.hpp"; +#include "script_component.hpp" params ["_target"]; diff --git a/addons/interact_menu/functions/fnc_compileMenuZeus.sqf b/addons/interact_menu/functions/fnc_compileMenuZeus.sqf index c0797269e6..a5987d411f 100644 --- a/addons/interact_menu/functions/fnc_compileMenuZeus.sqf +++ b/addons/interact_menu/functions/fnc_compileMenuZeus.sqf @@ -3,14 +3,17 @@ * Compile the zeus action menu (only to be done once) * * Arguments: - * nil + * None * * Return Value: * None * + * Example: + * call ACE_interact_menu_fnc_compileMenuZeus + * * Public: No */ -#include "script_component.hpp"; +#include "script_component.hpp" // Exit if the action menu is already compiled for zeus if !(isNil {missionNamespace getVariable [QGVAR(ZeusActions), nil]}) exitWith {}; diff --git a/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf index 38e5a42460..98408f58f9 100644 --- a/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf +++ b/addons/interact_menu/functions/fnc_ctrlSetParsedTextCached.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [CONTROL, 5, "text"] call ACE_interact_menu_fnc_ctrlSetParsedTextCached + * * Public: No */ #include "script_component.hpp" diff --git a/addons/interact_menu/functions/fnc_handleEscapeMenu.sqf b/addons/interact_menu/functions/fnc_handleEscapeMenu.sqf new file mode 100644 index 0000000000..41e16e8951 --- /dev/null +++ b/addons/interact_menu/functions/fnc_handleEscapeMenu.sqf @@ -0,0 +1,25 @@ +/* + * Author: PabstMirror + * Handle the escape key being pressed. + * + * Arguments: + * 0: Escape menu display that should be closed + * + * Return Value: + * Nothing + * + * Public: No + */ +#include "script_component.hpp" + +if (GVAR(openedMenuType) < 0) exitWith {}; + +params [["_display", displayNull, [displayNull]]]; +TRACE_2("handleEscapeMenu",_display,isNull _display); + +if (!isNull _display) then { + _display closeDisplay 0; +}; + +GVAR(actionSelected) = false; +[GVAR(openedMenuType), false] call FUNC(keyUp); diff --git a/addons/interact_menu/functions/fnc_isSubPath.sqf b/addons/interact_menu/functions/fnc_isSubPath.sqf index 5933e2c462..2c8244b081 100644 --- a/addons/interact_menu/functions/fnc_isSubPath.sqf +++ b/addons/interact_menu/functions/fnc_isSubPath.sqf @@ -7,7 +7,7 @@ * 1: ShortPath * * Return Value: - * Bool + * Bool * * Example: * [[["ACE_SelfActions", player],["ace_Gestures", player]], [["ACE_SelfActions", player]]] call ace_interact_menu_fnc_isSubPath @@ -22,6 +22,7 @@ private _isSubPath = true; if (count _shortPath > count _longPath) exitWith {false}; +//IGNORE_PRIVATE_WARNING ["_i"]; for [{private _i = 0},{_i < count _shortPath},{_i = _i + 1}] do { if !((_longPath select _i) isEqualTo (_shortPath select _i)) exitWith { _isSubPath = false; diff --git a/addons/interact_menu/functions/fnc_keyDown.sqf b/addons/interact_menu/functions/fnc_keyDown.sqf index 58286a65bb..52388ffe89 100644 --- a/addons/interact_menu/functions/fnc_keyDown.sqf +++ b/addons/interact_menu/functions/fnc_keyDown.sqf @@ -8,6 +8,9 @@ * Return Value: * true * + * Example: + * [0] call ACE_interact_menu_fnc_keyDown + * * Public: No */ #include "script_component.hpp" @@ -59,7 +62,13 @@ if (GVAR(useCursorMenu)) then { createDialog QGVAR(cursorMenu); }; (finddisplay 91919) displayAddEventHandler ["KeyUp", {[_this,'keyup'] call CBA_events_fnc_keyHandler}]; - (finddisplay 91919) displayAddEventHandler ["KeyDown", {[_this,'keydown'] call CBA_events_fnc_keyHandler}]; + (finddisplay 91919) displayAddEventHandler ["KeyDown", { + // Handle the escape key being pressed with menu open: + if ((_this select [1,4]) isEqualTo [1,false,false,false]) exitWith { // escape key with no modifiers + [displayNull] call FUNC(handleEscapeMenu); + }; + [_this,'keydown'] call CBA_events_fnc_keyHandler; + }]; // The dialog sets: // uiNamespace getVariable QGVAR(dlgCursorMenu); // uiNamespace getVariable QGVAR(cursorMenuOpened); @@ -73,6 +82,10 @@ if (GVAR(useCursorMenu)) then { ((finddisplay 91919) displayctrl 9922) ctrlAddEventHandler ["MouseMoving", DFUNC(handleMouseMovement)]; ((finddisplay 91919) displayctrl 9922) ctrlAddEventHandler ["MouseButtonDown", DFUNC(handleMouseButtonDown)]; setMousePosition [0.5, 0.5]; +} else { + if (uiNamespace getVariable [QGVAR(cursorMenuOpened),false]) then { + (findDisplay 91919) closeDisplay 2; + }; }; GVAR(selfMenuOffset) = (AGLtoASL (positionCameraToWorld [0, 0, 2])) vectorDiff (AGLtoASL (positionCameraToWorld [0, 0, 0])); diff --git a/addons/interact_menu/functions/fnc_keyUp.sqf b/addons/interact_menu/functions/fnc_keyUp.sqf index aae9a370c1..dc1fcf3fe6 100644 --- a/addons/interact_menu/functions/fnc_keyUp.sqf +++ b/addons/interact_menu/functions/fnc_keyUp.sqf @@ -8,6 +8,9 @@ * Return Value: * true * + * Example: + * [1] call ACE_interact_menu_fnc_keyUp + * * Public: No */ #include "script_component.hpp" diff --git a/addons/interact_menu/functions/fnc_renderActionPoints.sqf b/addons/interact_menu/functions/fnc_renderActionPoints.sqf index 017d3e539b..0572f15fa6 100644 --- a/addons/interact_menu/functions/fnc_renderActionPoints.sqf +++ b/addons/interact_menu/functions/fnc_renderActionPoints.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * call ACE_interact_menu_fnc_renderActionPoints + * * Public: No */ #include "script_component.hpp" diff --git a/addons/interact_menu/functions/fnc_renderBaseMenu.sqf b/addons/interact_menu/functions/fnc_renderBaseMenu.sqf index 363f7100f9..4b88212d59 100644 --- a/addons/interact_menu/functions/fnc_renderBaseMenu.sqf +++ b/addons/interact_menu/functions/fnc_renderBaseMenu.sqf @@ -10,6 +10,9 @@ * Return Value: * Was the menu rendered * + * Example: + * [bob, [node], [0, 0, 0]] call ACE_interact_menu_fnc_renderBaseMenu + * * Public: No */ #include "script_component.hpp" @@ -61,7 +64,7 @@ if ((_sPos select 0) < safeZoneXAbs || {(_sPos select 0) > safeZoneXAbs + safeZo if ((_sPos select 1) < safeZoneY || {(_sPos select 1) > safeZoneY + safeZoneH}) exitWith {false}; -BEGIN_COUNTER(fnc_collectActiveActionTree) +BEGIN_COUNTER(fnc_collectActiveActionTree); // Collect active tree private _uid = format [QGVAR(ATCache_%1), _actionName]; @@ -71,7 +74,7 @@ private _activeActionTree = [ _object, _uid, 1.0, "ace_interactMenuClosed" ] call EFUNC(common,cachedCall); -END_COUNTER(fnc_collectActiveActionTree) +END_COUNTER(fnc_collectActiveActionTree); #ifdef DEBUG_MODE_EXTRA diag_log "Printing: _activeActionTree"; @@ -79,9 +82,6 @@ diag_log "Printing: _activeActionTree"; params ["_level", "_node"]; _node params ["_actionData", "_children", "_object"]; diag_log text format ["Level %1 -> %2 on %3", _level, _actionData select 0, _object]; - { - [_level + 1, _x] call _fnc_print; - } forEach _children; }; #endif @@ -101,6 +101,6 @@ GVAR(collectedActionPoints) pushBack [_sPos select 2, _sPos, _activeActionTree]; END_COUNTER(fnc_renderMenus); -END_COUNTER(fnc_renderBaseMenu) +END_COUNTER(fnc_renderBaseMenu); true diff --git a/addons/interact_menu/functions/fnc_renderIcon.sqf b/addons/interact_menu/functions/fnc_renderIcon.sqf index ec26635f02..4d9892ed2c 100644 --- a/addons/interact_menu/functions/fnc_renderIcon.sqf +++ b/addons/interact_menu/functions/fnc_renderIcon.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * ["text", "icon", [5, 6], "text"] call ACE_interact_menu_fnc_renderIcon + * * Public: No */ #include "script_component.hpp" diff --git a/addons/interact_menu/functions/fnc_renderMenu.sqf b/addons/interact_menu/functions/fnc_renderMenu.sqf index 687c56d2c3..70bf02fe9a 100644 --- a/addons/interact_menu/functions/fnc_renderMenu.sqf +++ b/addons/interact_menu/functions/fnc_renderMenu.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * [[], [], [5, 2], []] call ACE_interact_menu_fnc_renderMenu + * * Public: No */ #include "script_component.hpp" diff --git a/addons/interact_menu/functions/fnc_renderSelector.sqf b/addons/interact_menu/functions/fnc_renderSelector.sqf index ef10456b5a..c2fe5f932c 100644 --- a/addons/interact_menu/functions/fnc_renderSelector.sqf +++ b/addons/interact_menu/functions/fnc_renderSelector.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [[2, 5], "icon"] call ACE_interact_menu_fnc_renderSelector + * * Public: No */ #include "script_component.hpp" diff --git a/addons/interact_menu/functions/fnc_setupTextColors.sqf b/addons/interact_menu/functions/fnc_setupTextColors.sqf index 120c5b18e3..e51d39e533 100644 --- a/addons/interact_menu/functions/fnc_setupTextColors.sqf +++ b/addons/interact_menu/functions/fnc_setupTextColors.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * call ACE_interact_menu_fnc_setupTextColor + * * Public: No */ #include "script_component.hpp" diff --git a/addons/interact_menu/functions/fnc_splitPath.sqf b/addons/interact_menu/functions/fnc_splitPath.sqf index eba203aa6f..93dea35d7c 100644 --- a/addons/interact_menu/functions/fnc_splitPath.sqf +++ b/addons/interact_menu/functions/fnc_splitPath.sqf @@ -9,6 +9,9 @@ * 0: Parent path * 1: Action name * + * Example: + * [[path]] call ACE_interact_menu_fnc_splitPath + * * Public: No */ #include "script_component.hpp" diff --git a/addons/interact_menu/functions/fnc_userActions_addHouseActions.sqf b/addons/interact_menu/functions/fnc_userActions_addHouseActions.sqf index 2940bc2936..7fa9ffdac5 100644 --- a/addons/interact_menu/functions/fnc_userActions_addHouseActions.sqf +++ b/addons/interact_menu/functions/fnc_userActions_addHouseActions.sqf @@ -7,7 +7,7 @@ * 0: Interact Menu Type (0 - world, 1 - self) * * Return Value: - * Nothing + * None * * Example: * [0] call ace_interact_menu_fnc_userActions_addHouseActions diff --git a/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf b/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf index c513805d10..99eafc0392 100644 --- a/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf +++ b/addons/interact_menu/functions/fnc_userActions_getHouseActions.sqf @@ -6,7 +6,7 @@ * 0: Building Classname * * Return Value: - * [[Array of MemPoints], [Array Of Actions]] + * [[Array of MemPoints], [Array Of Actions]] * * Example: * ["Land_i_House_Big_01_V1_F"] call ace_interact_menu_fnc_userActions_getHouseActions diff --git a/addons/interact_menu/stringtable.xml b/addons/interact_menu/stringtable.xml index ba9647e99a..83d9b1c31f 100644 --- a/addons/interact_menu/stringtable.xml +++ b/addons/interact_menu/stringtable.xml @@ -14,6 +14,8 @@ Sempre mostrar cursor para interação pessoal セルフ インタラクションへ常にカーソルを表示 자기상호작용시 항상 커서를 보이기 + 自我互动时永远显示游标 + 自我互動時永遠顯示游標 Always display cursor for interaction @@ -28,6 +30,8 @@ Sempre mostrar cursor para interação インタラクションへ常にカーソルを表示 상호작용시 항상 커서를 보이기 + 互动时永远显示游标 + 互動時永遠顯示游標 Display interaction menus as lists @@ -42,6 +46,8 @@ Mostrar menu de interação como listas 表示されるインタラクション メニューを一覧表示 상호작용메뉴를 리스트화 해서 보이기 + 以列表方式显示互动表单 + 以列表方式顯示互動表單 Interact Key @@ -56,6 +62,8 @@ Tecla de Interação インタラクション キー 상호작용 키 + 互动键 + 互動鍵 Self Interaction Key @@ -70,6 +78,8 @@ Tecla de Interação Pessoal セルフ インタラクション キー 자기상호작용 키 + 自我互动键 + 自我互動鍵 Self Actions @@ -84,6 +94,8 @@ Ações Pessoais 自分への動作 자기 동작 + 自我动作 + 自我動作 Vehicle Actions @@ -98,6 +110,8 @@ Ações de Veículos 車両への動作 차량 동작 + 载具动作 + 載具動作 Zeus Actions @@ -112,6 +126,8 @@ Azioni Zeus Zeus への動作 Zeus 동작 + 宙斯操作 + 宙斯操作 Interaction - Text Max @@ -126,6 +142,8 @@ Interação - Max. de Texto インタラクション - 文字の色 상호작용 - 문자색깔 + 互动 - 文字最大化 + 互動 - 文字最大化 Interaction - Text Min @@ -140,6 +158,8 @@ Interação - Min. de Texto インタラクション - 文字の背景色 상호작용 - 문자배경색 + 互动 - 文字最小化 + 互動 - 文字最小化 Interaction - Shadow Max @@ -154,6 +174,8 @@ Interação - Max. de Sombra インタラクション - 文字への影の色 상호작용 - 문자그림자색 + 互动 - 阴影最大化 + 互動 - 陰影最大化 Interaction - Shadow Min @@ -168,6 +190,8 @@ Interação - Min. de Sombra インタラクション - 文字への影の最低色 상호작용 - 문자그림자배경색 + 互动 - 阴影最小化 + 互動 - 陰影最小化 Keep cursor centered @@ -182,6 +206,8 @@ Mantieni il cursore centrato 常にカーソルを中央にする 커서를 항상 가운데에 둡니다 + 保持游标在中心点 + 保持游標在中心點 Keeps cursor centered and pans the option menu around. Useful if screen size is limited. @@ -196,6 +222,8 @@ Mantieni il cursore centrato e sposta il menù intorno. Utile se lo schermo è piccolo. 常にカーソルを中央へ表示させ、オプション メニューが移動します。画面の大きさが制限されている時に使いやすくなります。 커서를 항상 가운데에 두고 메뉴를 움직입니다. 화면의 크기가 제한되있을때 유용합니다. + 保持游标在中心点并平移周遭的选项选单. 这对在荧幕尺寸有限的玩家很有用! + 保持游標在中心點並平移周遭的選項選單. 這對在螢幕尺寸有限的玩家很有用! Do action when releasing menu key @@ -210,6 +238,8 @@ Esegui l'azione quando rilasci il tasto menu メニュー キーを離したときに動作を実行します。 메뉴키를 놓을때 행동하기 + 当放开选单键后就执行动作 + 當放開選單鍵後就執行動作 Interaction Text Size @@ -224,6 +254,8 @@ Dimensione del testo d'interazione インタラクション文字の大きさ 상호작용 - 문자크기 + 互动选单文字大小 + 互動選單文字大小 Interaction Text Shadow @@ -238,6 +270,8 @@ Ombra del testo d'interazione インタラクション文字へ影 상호작용 - 문자그림자 + 互动选单文字阴影 + 互動選單文字陰影 Allows controlling the text's shadow. Outline ignores custom shadow colors. @@ -252,6 +286,8 @@ Permette di controllare l'ombra del testo. L'impostazione "Contorno" ignora il colore dell'ombra. 文字への影を設定します。縁取りは設定された影の色を無視します。 문자의 그림자를 조절하는것을 가능케합니다. 외각선은 임의의 그림자색을 무시합니다. + 允许控制文字阴影. 轮廓部分则会忽略自定义的阴影颜色 + 允許控制文字陰影. 輪廓部分則會忽略自定義的陰影顏色 Outline @@ -266,6 +302,8 @@ Contorno 縁取り 외각선 + 只显示轮廓 + 只顯示輪廓 Interaction menu background @@ -280,6 +318,8 @@ Sfondo Menù Interazioni インタラクション メニューの背景 상호작용 메뉴 배경 + 互动选单背景 + 互動選單背景 Blur the background while the interaction menu is open. @@ -294,6 +334,8 @@ Sfoca lo sfondo mentre il Menù Interazioni è aperto. インタラクション メニューを開いたとき、背景にボケを与えます。 상호작용 메뉴가 열릴시 배경을 흐릿하게 처리합니다. + 当互动选单开启时, 模糊背景画面 + 當互動選單開啟時, 模糊背景畫面 Blur screen @@ -308,6 +350,8 @@ Sfoca schermo ボケ画面 화면 흐리게 + 模糊画面 + 模糊畫面 Black @@ -322,6 +366,8 @@ Nero ブラック 까맣게 + 黑色 + 黑色 Show actions for buildings @@ -336,6 +382,8 @@ Mostra azioni per edifici 建物へ動作を表示 건물에 행동을 취함 + 显示建筑物可用的动作 + 顯示建築物可用的動作 Adds interaction actions for opening doors and mounting ladders on buildings. (Note: There is a performance cost when opening interaction menu, especially in towns) @@ -350,6 +398,8 @@ Aggiunge azioni interattive per l'apertura delle porte e piazzamento scale su edifici. (Nota: C'è un costo in performance quando si apre il Menù Interazioni, soprattutto in città) 建物にあるドアの開閉やラダーの昇降といった動作をインタラクションへ追加します。(街などでインタラクション メニューを開くとパフォーマンスが低下します) 건물의 문을 열거나 사다리에 오르는 상호작용 행동을 추가합니다. (주의: 상호작용 메뉴를 열경우 성능하락이 있을 수 있음, 특히 마을 내부에서) + 增加互动选单的功能在可开启的门与建筑物的梯子上. (注意: 此功能有可能会降低系统效能, 特别是在城镇区更明显) + 增加互動選單的功能在可開啟的門與建築物的梯子上. (注意: 此功能有可能會降低系統效能, 特別是在城鎮區更明顯) Interaction Menu @@ -363,6 +413,8 @@ Menu d'interaction インタラクション メニュー 상호작용 메뉴 + 互动选单 + 互動選單 Interaction Animation Speed @@ -376,6 +428,8 @@ Vitesse de l'aniamtion d'interaction インタラクションのアニメーション速度 상호작용 움직임 속도 + 互动选单动画速度 + 互動選單動畫速度 Makes menu animations faster and decreases the time needed to hover to show sub actions @@ -388,6 +442,8 @@ Hace la animación del menú más rápida, reduciendo el tiempo necesario para abrir sub-acciones. Rend les animations de menu plus rapide et réduit le temps nécessaire à l'affichage des sous menus d'action サブ動作が表示されるホバーをした時に、表示されるメニューのアニメーション速度を早くしたり遅くしたりできます + 使选单的动画速度更快, 并减少子选项显现出来的时间 + 使選單的動畫速度更快, 並減少子選項顯現出來的時間 diff --git a/addons/interaction/ACE_ZeusActions.hpp b/addons/interaction/ACE_ZeusActions.hpp index af29186895..44b7078f4b 100644 --- a/addons/interaction/ACE_ZeusActions.hpp +++ b/addons/interaction/ACE_ZeusActions.hpp @@ -3,6 +3,7 @@ class ACE_ZeusActions { class ZeusUnits { displayName = "$STR_A3_RscDisplayCurator_ModeUnits_tooltip"; icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeUnits_ca.paa"; + condition = QUOTE((count (curatorSelected select 0)) > 0); class stance { displayName = "$STR_A3_RscAttributeUnitPos_Title"; @@ -10,22 +11,22 @@ class ACE_ZeusActions { class prone { displayName = "$STR_Pos_Down"; icon = "\A3\UI_F\Data\IGUI\RscIngameUI\RscUnitInfo\SI_prone_ca.paa"; - statement = "{_x setUnitPos 'DOWN';} forEach (curatorSelected select 0);"; + statement = QUOTE([ARR_3(QQGVAR(zeusStance),[ARR_2('DOWN',curatorSelected select 0)],curatorSelected select 0)] call CBA_fnc_targetEvent;); }; class crouch { displayName = "$STR_Pos_Crouch"; icon = "\A3\UI_F\Data\IGUI\RscIngameUI\RscUnitInfo\SI_crouch_ca.paa"; - statement = "{_x setUnitPos 'MIDDLE';} forEach (curatorSelected select 0);"; + statement = QUOTE([ARR_3(QQGVAR(zeusStance),[ARR_2('MIDDLE',curatorSelected select 0)],curatorSelected select 0)] call CBA_fnc_targetEvent;); }; class stand { displayName = "$STR_Pos_Up"; icon = "\A3\UI_F\Data\IGUI\RscIngameUI\RscUnitInfo\SI_stand_ca.paa"; - statement = "{_x setUnitPos 'UP';} forEach (curatorSelected select 0);"; + statement = QUOTE([ARR_3(QQGVAR(zeusStance),[ARR_2('UP',curatorSelected select 0)],curatorSelected select 0)] call CBA_fnc_targetEvent;); }; class auto { displayName = "$STR_Pos_Automatic"; icon = "\A3\UI_F_Curator\Data\default_ca.paa"; - statement = "{_x setUnitPos 'AUTO';} forEach (curatorSelected select 0);"; + statement = QUOTE([ARR_3(QQGVAR(zeusStance),[ARR_2('AUTO',curatorSelected select 0)],curatorSelected select 0)] call CBA_fnc_targetEvent;); }; }; @@ -39,33 +40,34 @@ class ACE_ZeusActions { class ZeusGroups { displayName = "$STR_A3_RscDisplayCurator_ModeGroups_tooltip"; icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeGroups_ca.paa"; + condition = QUOTE((count (curatorSelected select 1)) > 0); class behaviour { displayName = "$STR_Combat_Mode"; class careless { displayName = "$STR_Combat_Careless"; - statement = "{ _x setBehaviour 'CARELESS'; } forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusBehaviour),[ARR_2('CARELESS',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; class safe { displayName = "$STR_Combat_Safe"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\safe_ca.paa"; - statement = "{ _x setBehaviour 'SAFE'; } forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusBehaviour),[ARR_2('CARELESS',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; class aware { displayName = "$STR_Combat_Aware"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\aware_ca.paa"; - statement = "{ _x setBehaviour 'AWARE'; } forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusBehaviour),[ARR_2('AWARE',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; class combat { displayName = "$STR_Combat_Combat"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\combat_ca.paa"; - statement = "{ _x setBehaviour 'COMBAT'; } forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusBehaviour),[ARR_2('COMBAT',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; class stealth { displayName = "$STR_Combat_Stealth"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\stealth_ca.paa"; - statement = "{ _x setBehaviour 'STEALTH'; } forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusBehaviour),[ARR_2('STEALTH',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; }; @@ -75,17 +77,17 @@ class ACE_ZeusActions { class limited { displayName = "$STR_Speed_Limited"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\limited_ca.paa"; - statement = "{_x setSpeedMode 'LIMITED';} forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusSpeed),[ARR_2('LIMITED',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; class normal { displayName = "$STR_Speed_Normal"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\normal_ca.paa"; - statement = "{_x setSpeedMode 'NORMAL';} forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusSpeed),[ARR_2('NORMAL',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; class full { displayName = "$STR_Speed_Full"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\full_ca.paa"; - statement = "{_x setSpeedMode 'FULL';} forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusSpeed),[ARR_2('FULL',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; }; @@ -95,47 +97,47 @@ class ACE_ZeusActions { class wedge { displayName = "$STR_Wedge"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\wedge_ca.paa"; - statement = "{_x setFormation 'WEDGE';} forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusFormation),[ARR_2('WEDGE',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; class vee { displayName = "$STR_Vee"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\vee_ca.paa"; - statement = "{_x setFormation 'VEE';} forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusFormation),[ARR_2('VEE',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; class line { displayName = "$STR_Line"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\line_ca.paa"; - statement = "{_x setFormation 'LINE';} forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusFormation),[ARR_2('LINE',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; class column { displayName = "$STR_Column"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\column_ca.paa"; - statement = "{_x setFormation 'COLUMN';} forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusFormation),[ARR_2('COLUMN',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; class file { displayName = "$STR_File"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\file_ca.paa"; - statement = "{_x setFormation 'FILE';} forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusFormation),[ARR_2('FILE',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; class stag_column { displayName = "$STR_Staggered"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\stag_column_ca.paa"; - statement = "{_x setFormation 'STAG COLUMN';} forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusFormation),[ARR_2('STAG COLUMN',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; class ech_left { displayName = "$STR_EchL"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\ech_left_ca.paa"; - statement = "{_x setFormation 'ECH LEFT';} forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusFormation),[ARR_2('ECH LEFT',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; class ech_right { displayName = "$STR_EchR"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\ech_right_ca.paa"; - statement = "{_x setFormation 'ECH RIGHT';} forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusFormation),[ARR_2('ECH RIGHT',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; class diamond { displayName = "$STR_Diamond"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\diamond_ca.paa"; - statement = "{_x setFormation 'DIAMOND';} forEach (curatorSelected select 1);"; + statement = QUOTE([ARR_3(QQGVAR(zeusFormation),[ARR_2('DIAMOND',curatorSelected select 1)],curatorSelected select 1)] call CBA_fnc_targetEvent;); }; }; }; @@ -143,33 +145,34 @@ class ACE_ZeusActions { class ZeusWaypoints { displayName = "Waypoints"; icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeRecent_ca.paa"; + condition = QUOTE((count (curatorSelected select 2)) > 0); class behaviour { displayName = "$STR_Combat_Mode"; class careless { displayName = "$STR_Combat_Careless"; - statement = "{ _x setWaypointBehaviour 'CARELESS'; } forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusBehaviour),[ARR_3('CARELESS',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; class safe { displayName = "$STR_Combat_Safe"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\safe_ca.paa"; - statement = "{ _x setWaypointBehaviour 'SAFE'; } forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusBehaviour),[ARR_3('SAFE',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; class aware { displayName = "$STR_Combat_Aware"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\aware_ca.paa"; - statement = "{ _x setWaypointBehaviour 'AWARE'; } forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusBehaviour),[ARR_3('AWARE',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; class combat { displayName = "$STR_Combat_Combat"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\combat_ca.paa"; - statement = "{ _x setWaypointBehaviour 'COMBAT'; } forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusBehaviour),[ARR_3('COMBAT',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; class stealth { displayName = "$STR_Combat_Stealth"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeBehaviour\stealth_ca.paa"; - statement = "{ _x setWaypointBehaviour 'STEALTH'; } forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusBehaviour),[ARR_3('STEALTH',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; }; @@ -179,17 +182,17 @@ class ACE_ZeusActions { class limited { displayName = "$STR_Speed_Limited"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\limited_ca.paa"; - statement = "{ _x setWaypointSpeed 'LIMITED'; } forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusSpeed),[ARR_3('LIMITED',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; class normal { displayName = "$STR_Speed_Normal"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\normal_ca.paa"; - statement = "{ _x setWaypointSpeed 'NORMAL'; } forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusSpeed),[ARR_3('NORMAL',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; class full { displayName = "$STR_Speed_Full"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeSpeedMode\full_ca.paa"; - statement = "{ _x setWaypointSpeed 'FULL'; } forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusSpeed),[ARR_3('FULL',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; }; @@ -199,47 +202,47 @@ class ACE_ZeusActions { class wedge { displayName = "$STR_Wedge"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\wedge_ca.paa"; - statement = "{_x setWaypointFormation 'WEDGE';} forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusFormation),[ARR_3('WEDGE',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; class vee { displayName = "$STR_Vee"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\vee_ca.paa"; - statement = "{_x setWaypointFormation 'VEE';} forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusFormation),[ARR_3('VEE',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; class line { displayName = "$STR_Line"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\line_ca.paa"; - statement = "{_x setWaypointFormation 'LINE';} forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusFormation),[ARR_3('LINE',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; class column { displayName = "$STR_Column"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\column_ca.paa"; - statement = "{_x setWaypointFormation 'COLUMN';} forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusFormation),[ARR_3('COLUMN',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; class file { displayName = "$STR_File"; icon = "\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\file_ca.paa"; - statement = "{_x setWaypointFormation 'FILE';} forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusFormation),[ARR_3('FILE',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; class stag_column { displayName = "$STR_Staggered"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\stag_column_ca.paa"; - statement = "{_x setWaypointFormation 'STAG COLUMN';} forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusFormation),[ARR_3('COLUMN',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; class ech_left { displayName = "$STR_EchL"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\ech_left_ca.paa"; - statement = "{_x setWaypointFormation 'ECH LEFT';} forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusFormation),[ARR_3('LEFT',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; class ech_right { displayName = "$STR_EchR"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\ech_right_ca.paa"; - statement = "{_x setWaypointFormation 'ECH RIGHT';} forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusFormation),[ARR_3('RIGHT',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; class diamond { displayName = "$STR_Diamond"; icon="\A3\UI_F_Curator\Data\RscCommon\RscAttributeFormation\diamond_ca.paa"; - statement = "{_x setWaypointFormation 'DIAMOND';} forEach (curatorSelected select 2);"; + statement = QUOTE([ARR_2(QQGVAR(zeusFormation),[ARR_3('DIAMOND',curatorSelected select 2,true)])] call CBA_fnc_serverEvent;); }; }; }; @@ -247,5 +250,6 @@ class ACE_ZeusActions { class ZeusMarkers { displayName = "$STR_A3_RscDisplayCurator_ModeMarkers_tooltip"; icon = "\A3\UI_F_Curator\Data\Displays\RscDisplayCurator\modeMarkers_ca.paa"; + condition = QUOTE((count (curatorSelected select 3)) > 0); }; }; diff --git a/addons/interaction/CfgVehicles.hpp b/addons/interaction/CfgVehicles.hpp index 5ee893e101..cc281247db 100644 --- a/addons/interaction/CfgVehicles.hpp +++ b/addons/interaction/CfgVehicles.hpp @@ -116,6 +116,7 @@ class CfgVehicles { displayName = CSTRING(JoinGroup); condition = QUOTE(GVAR(EnableTeamManagement) && {[ARR_2(_player,_target)] call DFUNC(canJoinGroup)}); statement = QUOTE([_player] joinSilent group _target); + modifierFunction = QUOTE(call FUNC(modifyJoinGroupAction)); showDisabled = 0; priority = 2.6; icon = QPATHTOF(UI\team\team_management_ca.paa); @@ -550,7 +551,7 @@ class CfgVehicles { class ACE_OpenBox { displayName = CSTRING(OpenBox); - condition = QUOTE(alive _target); + condition = QUOTE((alive _target) && {(getNumber (configFile >> 'CfgVehicles' >> (typeOf _target) >> 'disableInventory')) == 0}); statement = QUOTE(_player action [ARR_2(QUOTE(QUOTE(Gear)), _target)]); showDisabled = 0; priority = -1; @@ -561,6 +562,13 @@ class CfgVehicles { class ACE_SelfActions {}; }; class Slingload_base_F: ReammoBox_F {}; + class Slingload_01_Base_F: Slingload_base_F { + class ACE_Actions: ACE_Actions { + class ACE_MainActions: ACE_MainActions { + distance = 5; + }; + }; + }; class Pod_Heli_Transport_04_base_F: Slingload_base_F { class ACE_Actions: ACE_Actions { class ACE_MainActions: ACE_MainActions { diff --git a/addons/interaction/XEH_PREP.hpp b/addons/interaction/XEH_PREP.hpp index c8ceb66e8f..4f0ef58357 100644 --- a/addons/interaction/XEH_PREP.hpp +++ b/addons/interaction/XEH_PREP.hpp @@ -2,6 +2,7 @@ // interaction menu PREP(addPassengerActions); PREP(addPassengersActions); +PREP(getInteractionDistance); PREP(getVehiclePos); PREP(getVehiclePosComplex); PREP(getWeaponPos); @@ -16,6 +17,7 @@ PREP(canInteractWithCivilian); PREP(getDown); PREP(sendAway); PREP(canJoinGroup); +PREP(modifyJoinGroupAction); PREP(canJoinTeam); PREP(joinTeam); PREP(canPassMagazine); @@ -29,6 +31,7 @@ PREP(pardon); // interaction with doors PREP(getDoor); +PREP(getGlassDoor); PREP(getDoorAnimations); PREP(handleScrollWheel); PREP(openDoor); diff --git a/addons/interaction/XEH_postInit.sqf b/addons/interaction/XEH_postInit.sqf index 9aa9cfb157..bbbda80bfa 100644 --- a/addons/interaction/XEH_postInit.sqf +++ b/addons/interaction/XEH_postInit.sqf @@ -28,6 +28,36 @@ ACE_Modifier = 0; {_lamp setHit [_x select 0, (_x select 1) max _disabledLampDMG];nil} count _hitPointsDamage; }] call CBA_fnc_addEventHandler; +// Zeus action events +[QGVAR(zeusStance),{ + { _x setUnitPos (_this select 0); } forEach (_this select 1); +}] call CBA_fnc_addEventHandler; + +// The following 3 events handle both waypoints and groups +[QGVAR(zeusBehaviour),{ + if (param [2,false]) then { + { _x setWaypointBehaviour (_this select 0); } forEach (_this select 1); + } else { + { _x setBehaviour (_this select 0); } forEach (_this select 1); + }; +}] call CBA_fnc_addEventHandler; + +[QGVAR(zeusSpeed),{ + if (param [2,false]) then { + { _x setWaypointSpeed (_this select 0); } forEach (_this select 1); + } else { + { _x setSpeedMode (_this select 0); } forEach (_this select 1); + }; +}] call CBA_fnc_addEventHandler; + +[QGVAR(zeusFormation),{ + if (param [2,false]) then { + { _x setWaypointFormation (_this select 0); } forEach (_this select 1); + } else { + { _x setFormation (_this select 0); } forEach (_this select 1); + }; +}] call CBA_fnc_addEventHandler; + if (!hasInterface) exitWith {}; GVAR(isOpeningDoor) = false; @@ -60,7 +90,6 @@ GVAR(isOpeningDoor) = false; }, [57, [false, true, false]], false] call CBA_fnc_addKeybind; //Key CTRL+Space - ["ACE3 Common", QGVAR(tapShoulder), localize LSTRING(TapShoulder), { // Conditions: canInteract if !([ACE_player, objNull, []] call EFUNC(common,canInteractWith)) exitWith {false}; diff --git a/addons/interaction/functions/fnc_canJoinTeam.sqf b/addons/interaction/functions/fnc_canJoinTeam.sqf index 7732e164e7..ee99723d77 100644 --- a/addons/interaction/functions/fnc_canJoinTeam.sqf +++ b/addons/interaction/functions/fnc_canJoinTeam.sqf @@ -16,7 +16,7 @@ */ #include "script_component.hpp" -PARAMS_2(_unit,_target); +params ["_unit", "_target"]; alive _target && {!(_target getVariable ["ACE_isUnconscious", false])} diff --git a/addons/interaction/functions/fnc_canPardon.sqf b/addons/interaction/functions/fnc_canPardon.sqf index a377533018..892647640e 100644 --- a/addons/interaction/functions/fnc_canPardon.sqf +++ b/addons/interaction/functions/fnc_canPardon.sqf @@ -9,6 +9,9 @@ * Return Value: * Unit can pardon target * + * Example: + * [bob, kevin] call ACE_interaction_fnc_canPardon + * * Public: No */ #include "script_component.hpp" diff --git a/addons/interaction/functions/fnc_doBecomeLeader.sqf b/addons/interaction/functions/fnc_doBecomeLeader.sqf index 8c8663b03b..cc96de5611 100644 --- a/addons/interaction/functions/fnc_doBecomeLeader.sqf +++ b/addons/interaction/functions/fnc_doBecomeLeader.sqf @@ -1,4 +1,4 @@ - /* +/* * Author: PabstMirror * Become Leader of group. * @@ -13,6 +13,7 @@ * * Public: No */ + #include "script_component.hpp" params ["_unit"]; diff --git a/addons/interaction/functions/fnc_getDoor.sqf b/addons/interaction/functions/fnc_getDoor.sqf index 8261aa44f0..05793decc5 100644 --- a/addons/interaction/functions/fnc_getDoor.sqf +++ b/addons/interaction/functions/fnc_getDoor.sqf @@ -1,5 +1,5 @@ /* - * Author: commy2 + * Author: commy2, Phyma * Find door. * * Arguments: @@ -35,7 +35,14 @@ if (typeOf _house == "") exitWith {[objNull, ""]}; _intersections = [_house, "GEOM"] intersect [_position0, _position1]; -_door = _intersections select 0 select 0; +_door = toLower (_intersections select 0 select 0); + +if (isNil "_door") exitWith {[_house, ""]}; + +//Check if door is glass because then we need to find the proper location of the door so we can use it +if ((_door find "glass") != -1) then { + _door = [_distance, _house, _door] call FUNC(getGlassDoor); +}; if (isNil "_door") exitWith {[_house, ""]}; diff --git a/addons/interaction/functions/fnc_getDoorAnimations.sqf b/addons/interaction/functions/fnc_getDoorAnimations.sqf index a5c185d7d6..0d40d066be 100644 --- a/addons/interaction/functions/fnc_getDoorAnimations.sqf +++ b/addons/interaction/functions/fnc_getDoorAnimations.sqf @@ -1,6 +1,6 @@ /* - * Author: commy2 - * Get door animations. @todo rewrite for better custom building support + * Author: commy2, Phyma + * Get door animations. * * Arguments: * 0: House @@ -20,104 +20,19 @@ params ["_house", "_door"]; -private ["_index", "_animations", "_lockedVariable"]; +private _animate = animationNames _house; +private _animations = []; +private _lockedVariable = []; -_index = [ - "door_1", - "door_2", - "door_3", - "door_4", - "door_5", - "door_6", - "door_7", - "door_8", - "door_9", - "door_10", - "door_11", - "door_12", - "door_13", - "door_14", - "door_15", - "door_16", - "door_17", - "door_18", - "door_19", - "door_20", - "door_21", - "door_22", - - "hatch_1", - "hatch_2", - "hatch_3", - "hatch_4", - "hatch_5", - "hatch_6" -] find toLower _door; - -if (_index == -1) exitWith {[[],""]}; - -_animations = [ - ["Door_1_rot", "Door_Handle_1_rot_1", "Door_Handle_1_rot_2"], - ["Door_2_rot", "Door_Handle_2_rot_1", "Door_Handle_2_rot_2"], - ["Door_3_rot", "Door_Handle_3_rot_1", "Door_Handle_3_rot_2"], - ["Door_4_rot", "Door_Handle_4_rot_1", "Door_Handle_4_rot_2"], - ["Door_5_rot", "Door_Handle_5_rot_1", "Door_Handle_5_rot_2"], - ["Door_6_rot", "Door_Handle_6_rot_1", "Door_Handle_6_rot_2"], - ["Door_7_rot", "Door_Handle_7_rot_1", "Door_Handle_7_rot_2"], - ["Door_8_rot", "Door_Handle_8_rot_1", "Door_Handle_8_rot_2"], - ["Door_9_rot", "Door_Handle_9_rot_1", "Door_Handle_9_rot_2"], - ["Door_10_rot", "Door_Handle_10_rot_1", "Door_Handle_10_rot_2"], - ["Door_11_rot", "Door_Handle_11_rot_1", "Door_Handle_11_rot_2"], - ["Door_12_rot", "Door_Handle_12_rot_1", "Door_Handle_12_rot_2"], - ["Door_13_rot", "Door_Handle_13_rot_1", "Door_Handle_13_rot_2"], - ["Door_14_rot", "Door_Handle_14_rot_1", "Door_Handle_14_rot_2"], - ["Door_15_rot", "Door_Handle_15_rot_1", "Door_Handle_15_rot_2"], - ["Door_16_rot", "Door_Handle_16_rot_1", "Door_Handle_16_rot_2"], - ["Door_17_rot", "Door_Handle_17_rot_1", "Door_Handle_17_rot_2"], - ["Door_18_rot", "Door_Handle_18_rot_1", "Door_Handle_18_rot_2"], - ["Door_19_rot", "Door_Handle_19_rot_1", "Door_Handle_19_rot_2"], - ["Door_20_rot", "Door_Handle_20_rot_1", "Door_Handle_20_rot_2"], - ["Door_21_rot", "Door_Handle_21_rot_1", "Door_Handle_21_rot_2"], - ["Door_22_rot", "Door_Handle_22_rot_1", "Door_Handle_22_rot_2"], - - ["Hatch_1_rot"], - ["Hatch_2_rot"], - ["Hatch_3_rot"], - ["Hatch_4_rot"], - ["Hatch_5_rot"], - ["Hatch_6_rot"] -] select _index; - -_lockedVariable = [ - ["BIS_Disabled_Door_1", "Door_Handle_1_rot_1", "Door_Locked_1_rot"], - ["BIS_Disabled_Door_2", "Door_Handle_2_rot_1", "Door_Locked_2_rot"], - ["BIS_Disabled_Door_3", "Door_Handle_3_rot_1", "Door_Locked_3_rot"], - ["BIS_Disabled_Door_4", "Door_Handle_4_rot_1", "Door_Locked_4_rot"], - ["BIS_Disabled_Door_5", "Door_Handle_5_rot_1", "Door_Locked_5_rot"], - ["BIS_Disabled_Door_6", "Door_Handle_6_rot_1", "Door_Locked_6_rot"], - ["BIS_Disabled_Door_7", "Door_Handle_7_rot_1", "Door_Locked_7_rot"], - ["BIS_Disabled_Door_8", "Door_Handle_8_rot_1", "Door_Locked_8_rot"], - ["BIS_Disabled_Door_9", "Door_Handle_9_rot_1", "Door_Locked_9_rot"], - ["BIS_Disabled_Door_10", "Door_Handle_10_rot_1", "Door_Locked_10_rot"], - ["BIS_Disabled_Door_11", "Door_Handle_11_rot_1", "Door_Locked_11_rot"], - ["BIS_Disabled_Door_12", "Door_Handle_12_rot_1", "Door_Locked_12_rot"], - ["BIS_Disabled_Door_13", "Door_Handle_13_rot_1", "Door_Locked_13_rot"], - ["BIS_Disabled_Door_14", "Door_Handle_14_rot_1", "Door_Locked_14_rot"], - ["BIS_Disabled_Door_15", "Door_Handle_15_rot_1", "Door_Locked_15_rot"], - ["BIS_Disabled_Door_16", "Door_Handle_16_rot_1", "Door_Locked_16_rot"], - ["BIS_Disabled_Door_17", "Door_Handle_17_rot_1", "Door_Locked_17_rot"], - ["BIS_Disabled_Door_18", "Door_Handle_18_rot_1", "Door_Locked_18_rot"], - ["BIS_Disabled_Door_19", "Door_Handle_19_rot_1", "Door_Locked_19_rot"], - ["BIS_Disabled_Door_20", "Door_Handle_20_rot_1", "Door_Locked_20_rot"], - ["BIS_Disabled_Door_21", "Door_Handle_21_rot_1", "Door_Locked_21_rot"], - ["BIS_Disabled_Door_22", "Door_Handle_22_rot_1", "Door_Locked_22_rot"], - - ["", ""], - ["", ""], - ["", ""], - ["", ""], - ["", ""], - ["", ""] -] select _index; +{ + private _animName = toLower _x; + if ((_animName find (toLower _door)) != -1) then { + if (((_animName find "disabled") != -1) || ((_animName find "locked") != -1)) then { + _lockedVariable pushBack _animName; + } else { + _animations pushBack _animName; + }; + }; +} forEach _animate; [_animations, _lockedVariable] diff --git a/addons/interaction/functions/fnc_getGlassDoor.sqf b/addons/interaction/functions/fnc_getGlassDoor.sqf new file mode 100644 index 0000000000..2731f82888 --- /dev/null +++ b/addons/interaction/functions/fnc_getGlassDoor.sqf @@ -0,0 +1,67 @@ +/* + * Author: Phyma + * Find glass door. + * + * Arguments: + * 0: Distance + * 1: House + * 2: Door name + * + * Return Value: + * 0: Door Name + * + * Example: + * [player, target] call ace_interaction_fnc_getGlassDoor + * + * Public: No + */ +#include "script_component.hpp" + +params ["_distance", "_house", "_door"]; + +private _doorParts = []; +private _doorPos = []; +private _animate = animationNames _house; +private _glassDoor = _door splitString "_"; +private _glassPos = (_house selectionPosition [(_glassDoor select 0) + "_" + (_glassDoor select 1) + "_effects", "Memory"]); +// Calculate all animation names so we know what is there +{ + private _animName = toLower _x; + if (((_animName find "door") != -1) && ((_animName find "locked") == -1) && ((_animName find "disabled") == -1) && ((_animName find "handle") == -1)) then { + private _splitStr = _animName splitString "_"; + _doorParts pushBack ((_splitStr select 0) + "_" + (_splitStr select 1) + "_trigger"); + }; +} forEach _animate; + + +// Get the pos of all the door components and save the parts +{ + _doorPos pushBack (_house selectionPosition [_x, "Memory"]); +} forEach _doorParts; + +// Calculate what door that is closest to the glass door +private _lowestDistance = 0; +{ + private _objDist = _glassPos distance _x; + //Make sure we dont take another door by mistake + if (_objDist <= _distance) then { + //Need to set the value in the beginning + if (_lowestDistance == 0) then { + _lowestDistance = _objDist; + private _splitStr = (_doorParts select _forEachIndex) splitString "_"; + _door = (_splitStr select 0) + "_" + (_splitStr select 1); + } else { + if (_objDist < _lowestDistance) then { + _lowestDistance = _objDist; + private _splitStr = (_doorParts select _forEachIndex) splitString "_"; + _door = (_splitStr select 0) + "_" + (_splitStr select 1); + }; + }; + }; +} forEach _doorPos; + +// Check if we have a door or if it is the glass part +if ((isNil "_door") || ((_door find "glass") != -1)) exitWith {}; + +_door + diff --git a/addons/interaction/functions/fnc_getInteractionDistance.sqf b/addons/interaction/functions/fnc_getInteractionDistance.sqf new file mode 100644 index 0000000000..c731c6e7d1 --- /dev/null +++ b/addons/interaction/functions/fnc_getInteractionDistance.sqf @@ -0,0 +1,33 @@ +/* + * Author: PabstMirror + * Gets effective interaction distance (handles very large vehicles) + * + * Arguments: + * 0: Player + * 0: Target Vehicle + * + * Return Value: + * Distance to interaction point + * + * Example: + * [player, cursorObject] call ace_interaction_fnc_getInteractionDistance + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unit", "_target"]; +TRACE_3("getInteractionDistance",_unit,_target,typeOf _target); + +// Handle Man, Crate +if (!((_target isKindOf "Car") || {_target isKindOf "Tank"} || {_target isKindOf "Helicopter"} || {_target isKindOf "Plane"} || {_target isKindOf "Ship_F"})) exitWith { + _unit distance _target +}; + +private _unitEyeASL = eyePos _unit; +private _targetModelPos = [_target, _unitEyeASL] call FUNC(getVehiclePosComplex); +private _distance = _unitEyeASL distance (AGLtoASL (_target modelToWorld _targetModelPos)); + +TRACE_2("",_targetModelPos,_distance); + +_distance diff --git a/addons/interaction/functions/fnc_getVehiclePos.sqf b/addons/interaction/functions/fnc_getVehiclePos.sqf index 1544aea939..f66b071ecd 100644 --- a/addons/interaction/functions/fnc_getVehiclePos.sqf +++ b/addons/interaction/functions/fnc_getVehiclePos.sqf @@ -5,7 +5,7 @@ * Arguments: * None (uses local variable _target) * - * Return value: + * Return Value: * Children actions * * Example: diff --git a/addons/interaction/functions/fnc_getVehiclePosComplex.sqf b/addons/interaction/functions/fnc_getVehiclePosComplex.sqf index 886f7052c4..6907721aba 100644 --- a/addons/interaction/functions/fnc_getVehiclePosComplex.sqf +++ b/addons/interaction/functions/fnc_getVehiclePosComplex.sqf @@ -6,7 +6,7 @@ * 0: Target * 1: Player's Position ASL * - * Return value: + * Return Value: * Interaction point in model cords * * Example: diff --git a/addons/interaction/functions/fnc_handleScrollWheel.sqf b/addons/interaction/functions/fnc_handleScrollWheel.sqf index 793e78c1b3..48716a05c3 100644 --- a/addons/interaction/functions/fnc_handleScrollWheel.sqf +++ b/addons/interaction/functions/fnc_handleScrollWheel.sqf @@ -8,6 +8,9 @@ * Return Value: * handled * + * Example: + * [5] call ACE_interaction_fnc_handleScrollWheel + * * Public: No */ #include "script_component.hpp" diff --git a/addons/interaction/functions/fnc_modifyJoinGroupAction.sqf b/addons/interaction/functions/fnc_modifyJoinGroupAction.sqf new file mode 100644 index 0000000000..3ac493aa54 --- /dev/null +++ b/addons/interaction/functions/fnc_modifyJoinGroupAction.sqf @@ -0,0 +1,26 @@ +/* + * Author: PabstMirror + * Modifies the ACE_JoinGroup action to show group name. + * + * Arguments: + * 0: Target + * 1: Player + * 2: Args + * 3: Action Data + * + * Return Value: + * None + * + * Example: + * [cursorObject, player, [], []] call ace_interaction_fnc_modifyJoinGroupAction + * + * Public: No + */ +#include "script_component.hpp" + +params ["_target", "_player", "", "_actionData"]; + +private _actionText = format ["%1: %2", localize LSTRING(JoinGroup), groupID group _target]; +TRACE_3("",_target,group _target,_actionText); + +_actionData set [1, _actionText]; diff --git a/addons/interaction/functions/fnc_openDoor.sqf b/addons/interaction/functions/fnc_openDoor.sqf index b1c7789ec3..7d94a5c4a1 100644 --- a/addons/interaction/functions/fnc_openDoor.sqf +++ b/addons/interaction/functions/fnc_openDoor.sqf @@ -19,18 +19,26 @@ private _info = [MACRO_DOOR_REACH_DISTANCE] call FUNC(getDoor); _info params ["_house", "_door"]; +TRACE_2("openDoor",_house,_door); if (isNull _house) exitWith {}; private _getDoorAnimations = [_house, _door] call FUNC(getDoorAnimations); -_getDoorAnimations params ["_animations", "_lockedVariable"]; +_getDoorAnimations params ["_animations"]; if (_animations isEqualTo []) exitWith {}; -if (_house animationPhase (_animations select 0) <= 0 && {_house getVariable [_lockedVariable select 0, 0] == 1}) exitWith { - _lockedVariable set [0, _house]; - _lockedVariable call BIS_fnc_LockedDoorOpen; +private _lockedVariable = format ["bis_disabled_%1", _door]; + +//Check if the door can be locked aka have locked variable, otherwhise cant lock it +if ((_house animationPhase (_animations select 0) <= 0) && {_house getVariable [_lockedVariable, 0] == 1}) exitWith { + private _lockedAnimation = format ["%1_locked_source", _door]; + TRACE_3("locked",_house,_lockedAnimation,isClass (configfile >> "CfgVehicles" >> (typeOf _house) >> "AnimationSources" >> _lockedAnimation)); + if (isClass (configfile >> "CfgVehicles" >> (typeOf _house) >> "AnimationSources" >> _lockedAnimation)) then { + // from: a3\structures_f\scripts\fn_door.sqf: - wiggles the door handle (A3 buildings) + _house animateSource [_lockedAnimation, (1 - (_house animationSourcePhase _lockedAnimation))]; + }; }; playSound "ACE_Sound_Click"; // @todo replace with smth. more fitting @@ -62,7 +70,6 @@ GVAR(usedScrollWheel) = false; if (CBA_missionTime > _time && {diag_frameno > _frame}) then { GVAR(usedScrollWheel) = true; }; - // do incremental door opening {_house animate [_x, GVAR(doorTargetPhase)]; false} count _animations; }, 0.1, [_house, _animations, getPosASL ACE_player, CBA_missionTime + 0.2, diag_frameno + 2]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/interaction/functions/fnc_pardon.sqf b/addons/interaction/functions/fnc_pardon.sqf index e11a92e7db..7b6085bcf4 100644 --- a/addons/interaction/functions/fnc_pardon.sqf +++ b/addons/interaction/functions/fnc_pardon.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, kevin] call ACE_interaction_fnc_pardon + * * Public: No */ #include "script_component.hpp" diff --git a/addons/interaction/stringtable.xml b/addons/interaction/stringtable.xml index 2679f228aa..1e9367347e 100644 --- a/addons/interaction/stringtable.xml +++ b/addons/interaction/stringtable.xml @@ -14,6 +14,8 @@ Interaçãoes インタラクション 상호작용 + 互动 + 互動 Torso @@ -28,6 +30,8 @@ Torso 胴体 몸통 + 身体 + 身體 Head @@ -42,6 +46,8 @@ Cabeça 頭部 머리 + 头部 + 頭部 Left Arm @@ -56,6 +62,8 @@ Braço Esquerdo 左腕 왼쪽 팔 + 左手 + 左手 Right Arm @@ -70,6 +78,8 @@ Braço Direito 右腕 오른쪽 팔 + 右手 + 右手 Left Leg @@ -84,6 +94,8 @@ Perna Esquerda 左足 왼쪽 다리 + 左脚 + 左腳 Right Leg @@ -98,6 +110,8 @@ Perna Direita 右足 오른쪽 다리 + 右脚 + 右腳 Weapon @@ -112,6 +126,8 @@ Arma 武器 무기 + 武器 + 武器 Interaction Menu @@ -126,6 +142,8 @@ Menù interazione インタラクション メニュー 상호작용 메뉴 + 互动选单 + 互動選單 Interaction Menu (Self) @@ -140,6 +158,8 @@ Menù interazione (individuale) インタラクション メニュー (セルフ) 상호작용 메뉴(자신) + 互动选单 (自我) + 互動選單 (自我) Open / Close Door @@ -154,6 +174,8 @@ Apri / Chiudi la porta ドアの開け閉め 문 열기 / 닫기 + 打开/关上 门 + 打開/關上 門 Lock Door @@ -168,6 +190,8 @@ Zamknout dveře ドアの鍵を閉める 문 잠그기 + 锁门 + 鎖門 Unlock Door @@ -182,6 +206,8 @@ Odemknout dveře ドアの鍵を開ける 잠긴문 열기 + 解锁门 + 解鎖門 Locked Door @@ -196,6 +222,8 @@ Zamčené dveře ドアの鍵を締めた 잠긴 문 + 门已上锁 + 門已上鎖 Unlocked Door @@ -210,6 +238,8 @@ Odemčené dveře ドアの鍵を開けられた 열린 문 + 门未上锁 + 門未上鎖 Join group @@ -224,6 +254,8 @@ Unisciti alla squadra グループにはいる 그룹 참여 + 加入小队 + 加入小隊 Leave Group @@ -238,6 +270,8 @@ Lascia la squadra グループをぬける 그룹 나가기 + 离开小队 + 離開小隊 Become Leader @@ -252,6 +286,8 @@ Prendi il comando リーダーになる 리더 되기 + 成为队长 + 成為隊長 DANCE! @@ -266,6 +302,8 @@ DANZA! おどれ! 춤추기! + 跳舞 + 跳舞 Stop Dancing @@ -280,6 +318,8 @@ Smetti di ballare 踊るのをやめる 춤 멈추기 + 停止跳舞 + 停止跳舞 << Back @@ -294,6 +334,8 @@ << Indietro &lt;&lt; もどる <<뒤로 + <<返回 + <<返回 Put weapon on back @@ -308,6 +350,8 @@ Metti l'arma in spalla 武器を背負う 등에 무기 메기 + 将武器放到背后 + 將武器放到背後 Tap Shoulder @@ -322,6 +366,8 @@ Dai un colpetto 肩をたたく 어깨 두드리기 + 轻拍肩膀 + 輕拍肩膀 You were tapped on the RIGHT shoulder @@ -336,6 +382,8 @@ Ti è stato dato un colpetto sulla spalla destra 右肩を叩かれた 누군가 오른쪽 어깨를 쳤다 + 你的右肩膀被轻拍了一下 + 你的右肩膀被輕拍了一下 You were tapped on the LEFT shoulder. @@ -350,6 +398,8 @@ Ti è stato dato un colpetto sulla spalla sinistra 左肩を叩かれた 누군가 왼쪽 어깨를 쳤다 + 你的左肩膀被轻拍了一下 + 你的左肩膀被輕拍了一下 Cancel @@ -364,6 +414,8 @@ Mégse 中止 취소 + 取消 + 取消 Select @@ -378,6 +430,8 @@ Kiválaszt 選択 선택 + 选择 + 選擇 Go Away! @@ -392,6 +446,8 @@ Via di qui! うせろ! 저리 가! + 走开! + 走開! Get Down! @@ -406,6 +462,8 @@ A terra! ふせろ! 엎드려! + 趴下! + 趴下! Get Out @@ -418,6 +476,8 @@ Vystupte 降りる 나가 + 出去 + 出去 Team Management @@ -432,6 +492,8 @@ Csapat kezelése チーム管理 팀 설정 + 小队管理 + 小隊管理 Red @@ -446,6 +508,8 @@ Piros レッド 빨강 + 红色 + 紅色 Green @@ -460,6 +524,8 @@ Zöld グリーン 초록 + 绿色 + 綠色 Blue @@ -474,6 +540,8 @@ Kék ブルー 파랑 + 蓝色 + 藍色 Yellow @@ -488,6 +556,8 @@ Sárga イエロー 노랑 + 黄色 + 黃色 Assign Red @@ -502,6 +572,8 @@ Assegna al team rosso レッドにする 빨강에 등록 + 指派为红组 + 指派為紅組 Assign Green @@ -516,6 +588,8 @@ Assegna al team verde グリーンにする 초록에 등록 + 指派为绿组 + 指派為綠組 Assign Blue @@ -530,6 +604,8 @@ Assegna al team blu ブルーにする 파랑이 등록 + 指派为蓝组 + 指派為藍組 Assign Yellow @@ -544,6 +620,8 @@ Assegna al team giallo イエローにする 노랑에 등록 + 指派为黄组 + 指派為黃組 Join Red @@ -558,6 +636,8 @@ Unirsi al team rosso レッドに入る 빨강에 참여 + 加入红组 + 加入紅組 Join Green @@ -572,6 +652,8 @@ Unirsi al team verde グリーンに入る 초록에 참여 + 加入绿组 + 加入綠組 Join Blue @@ -586,6 +668,8 @@ Unirsi al team blu ブルーに入る 파랑에 참여 + 加入蓝组 + 加入藍組 Join Yellow @@ -600,6 +684,8 @@ Unirsi al team giallo イエローに入る 노랑에 참여 + 加入黄组 + 加入黃組 You joined Team %1 @@ -614,6 +700,8 @@ Csatlakoztál a %1 csapathoz チーム %1 に入った 당신은 %1팀에 참여했습니다 + 你已加入%1组 + 你已加入%1組 Leave Team @@ -628,6 +716,8 @@ Csapat elhagyása チームを抜ける 팀 나가기 + 离开小队 + 離開小隊 You left the Team @@ -642,6 +732,8 @@ Elhagytad a csapatot チームを抜けた 팀을 나갔습니다 + 你已离开小队 + 你已離開小隊 Pardon @@ -656,6 +748,8 @@ Megbocsátás 許す 허용 + 原谅 + 原諒 Scroll @@ -670,6 +764,8 @@ Posunout スクロール 스크롤 + 滚动 + 滾動 Modifier Key @@ -684,6 +780,8 @@ Modifikátor キーを割り当て 키 할당하기 + 编辑按键 + 編輯按鍵 Not in Range @@ -698,6 +796,8 @@ Fuori limite 範囲内にありません 범위 내에 없습니다 + 不在范围内 + 不在範圍內 Equipment @@ -712,6 +812,8 @@ Equipamento 装備 장비 + 装备 + 裝備 Push @@ -726,6 +828,8 @@ Spingere 押す 밀기 + + Interact @@ -740,6 +844,8 @@ Interagir インタラクト 상호작용 + 互动 + 互動 Passengers @@ -754,6 +860,8 @@ Passageiros 後部座席 승객 + 乘客 + 乘客 Open @@ -768,6 +876,8 @@ Öffnen 開く 열기 + 打开 + 打開 Interaction System @@ -782,6 +892,8 @@ Sistema Interazioni インタラクション システム 상호작용 시스템 + 互动系统 + 互動系統 Enable Team Management @@ -796,6 +908,8 @@ Abilità Management Squadra チーム管理をつかう 팀 설정 활성화 + 启用小队管理 + 啟用小隊管理 Should players be allowed to use the Team Management Menu? Default: Yes @@ -810,6 +924,8 @@ Possono i giocatori usare il Menù Managment Squadra? Default: Si プレイヤーがチーム管理メニューを使えるようにしますか?標準:はい 플레이어들이 팀 설정하는 것을 허락합니까? 기본설정: 예 + 允许玩家使用小队管理选单? 预设: 是 + 允許玩家使用小隊管理選單? 預設: 是 Team management allows color allocation for team members, taking team command and joining/leaving teams. @@ -824,6 +940,8 @@ Management Squadra permette l'assegnazione di colori per membri della squadra, prendere il comando ed entrare/uscire dalle squadre. チーム管理はチーム メンバーへ色の割り当てや指揮権を取ったり、チームの出入りを許可します。 팀 설정은 팀 멤버에게 색을 부여하거나 팀에 참여 혹은 나가게 할 수 있게 합니다. + 队伍管理系统允许将指定颜色分配到队伍成员上, 接管队长职位或加入/离开队伍. + 隊伍管理系統允許將指定顏色分配到隊伍成員上, 接管隊長職位或加入/離開隊伍. Turn on @@ -837,6 +955,8 @@ Включить 中に入る 켜기 + 开启 + 開啟 Turn off @@ -850,6 +970,8 @@ Выключить 外に出す 끄기 + 关闭 + 關閉 Pass magazine @@ -863,6 +985,8 @@ Passer un chargeur 弾倉をわたす 탄창 건네기 + 给予弹匣 + 給予彈匣 Primary magazine @@ -876,6 +1000,8 @@ Chargeur de l'arme principale プライマリ用弾倉 주무기 탄창 + 给予主武器弹匣 + 給予主武器彈匣 Pistol magazine @@ -889,6 +1015,8 @@ Chargeur de pistolet 拳銃の弾倉 부무기 탄창 + 给予手枪弹匣 + 給予手槍彈匣 %1 passed you a %2 magazine. @@ -902,6 +1030,8 @@ %1 vous a passé un chargeur de %2. %1 はあなたに %2 弾倉をわたした %1에게서 %2탄창을 받았다 + %1给你%2弹匣 + %1給你%2彈匣 Show "pass magazine" interaction @@ -915,6 +1045,8 @@ Montrer l'interaction "Passer un chargeur" "弾倉をわたす"をインタラクションに表示する '탄창 건네기'를 상호작용에서 보여줌 + 显示"给予弹匣"互动动作 + 顯示"給予彈匣"互動動作 diff --git a/addons/inventory/functions/fnc_addCustomFilter.sqf b/addons/inventory/functions/fnc_addCustomFilter.sqf index 44e43bdbf0..0dd80c2e74 100644 --- a/addons/inventory/functions/fnc_addCustomFilter.sqf +++ b/addons/inventory/functions/fnc_addCustomFilter.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * ["displayname", "filter"] call ACE_inventory_fnc_addCustomFilter + * * Public: No */ #include "script_component.hpp" diff --git a/addons/inventory/functions/fnc_currentItemListBox.sqf b/addons/inventory/functions/fnc_currentItemListBox.sqf index 1f1b528e93..670efeb044 100644 --- a/addons/inventory/functions/fnc_currentItemListBox.sqf +++ b/addons/inventory/functions/fnc_currentItemListBox.sqf @@ -10,6 +10,9 @@ * Return Value: * Currently selected item list box * + * Example: + * [DISPLAY] call ACE_inventory_fnc_currentItemListBox + * * Public: No */ #include "script_component.hpp" diff --git a/addons/inventory/functions/fnc_filterBackpacks.sqf b/addons/inventory/functions/fnc_filterBackpacks.sqf index 9b629de66f..082dbd6501 100644 --- a/addons/inventory/functions/fnc_filterBackpacks.sqf +++ b/addons/inventory/functions/fnc_filterBackpacks.sqf @@ -8,6 +8,9 @@ * Return Value: * Item should appear in this list? * + * Example: + * [CONFIG] call ACE_inventory_fnc_filterBackpacks + * * Public: No */ #include "script_component.hpp" diff --git a/addons/inventory/functions/fnc_filterGrenades.sqf b/addons/inventory/functions/fnc_filterGrenades.sqf index 0acfbcaa2c..6a869849fc 100644 --- a/addons/inventory/functions/fnc_filterGrenades.sqf +++ b/addons/inventory/functions/fnc_filterGrenades.sqf @@ -8,6 +8,9 @@ * Return Value: * Item should appear in this list? * + * Example: + * [CONFIG] call ACE_inventory_fnc_filterGrenades + * * Public: No */ #include "script_component.hpp" diff --git a/addons/inventory/functions/fnc_filterHeadgear.sqf b/addons/inventory/functions/fnc_filterHeadgear.sqf index 056406a3d1..ac787fc35a 100644 --- a/addons/inventory/functions/fnc_filterHeadgear.sqf +++ b/addons/inventory/functions/fnc_filterHeadgear.sqf @@ -8,6 +8,9 @@ * Return Value: * Item should appear in this list? * + * Example: + * [CONFIG] call ACE_inventory_fnc_filterHeadgear + * * Public: No */ #include "script_component.hpp" diff --git a/addons/inventory/functions/fnc_filterItems.sqf b/addons/inventory/functions/fnc_filterItems.sqf index b9bf9baeea..1aaba46497 100644 --- a/addons/inventory/functions/fnc_filterItems.sqf +++ b/addons/inventory/functions/fnc_filterItems.sqf @@ -8,6 +8,9 @@ * Return Value: * Item should appear in this list? * + * Example: + * [CONFIG] call ACE_inventory_fnc_filterItems + * * Public: No */ #include "script_component.hpp" diff --git a/addons/inventory/functions/fnc_filterMagazines.sqf b/addons/inventory/functions/fnc_filterMagazines.sqf index dfd357f61d..e0d67e3c7e 100644 --- a/addons/inventory/functions/fnc_filterMagazines.sqf +++ b/addons/inventory/functions/fnc_filterMagazines.sqf @@ -8,6 +8,9 @@ * Return Value: * Item should appear in this list? * + * Example: + * [CONFIG] call ACE_inventory_fnc_filterMagazines + * * Public: No */ #include "script_component.hpp" diff --git a/addons/inventory/functions/fnc_filterMedical.sqf b/addons/inventory/functions/fnc_filterMedical.sqf index 397be50f06..567aa528a3 100644 --- a/addons/inventory/functions/fnc_filterMedical.sqf +++ b/addons/inventory/functions/fnc_filterMedical.sqf @@ -8,6 +8,9 @@ * Return Value: * Item should appear in this list? * + * Example: + * [CONFIG] call ACE_inventory_fnc_filterMedical + * * Public: No */ #include "script_component.hpp" diff --git a/addons/inventory/functions/fnc_filterUniforms.sqf b/addons/inventory/functions/fnc_filterUniforms.sqf index 4c135dfa88..74773c3ad0 100644 --- a/addons/inventory/functions/fnc_filterUniforms.sqf +++ b/addons/inventory/functions/fnc_filterUniforms.sqf @@ -8,6 +8,9 @@ * Return Value: * Item should appear in this list? * + * Example: + * [CONFIG] call ACE_inventory_fnc_filterUniforms + * * Public: No */ #include "script_component.hpp" diff --git a/addons/inventory/functions/fnc_filterVests.sqf b/addons/inventory/functions/fnc_filterVests.sqf index 646e23d04d..a0ce281bda 100644 --- a/addons/inventory/functions/fnc_filterVests.sqf +++ b/addons/inventory/functions/fnc_filterVests.sqf @@ -8,6 +8,9 @@ * Return Value: * Item should appear in this list? * + * Example: + * [CONFIG] call ACE_inventory_fnc_filterVests + * * Public: No */ #include "script_component.hpp" diff --git a/addons/inventory/functions/fnc_filterWeapons.sqf b/addons/inventory/functions/fnc_filterWeapons.sqf index 94a92814ae..65b3d7cdea 100644 --- a/addons/inventory/functions/fnc_filterWeapons.sqf +++ b/addons/inventory/functions/fnc_filterWeapons.sqf @@ -8,6 +8,9 @@ * Return Value: * Item should appear in this list? * + * Example: + * [CONFIG] call ACE_inventory_fnc_filterWeapons + * * Public: No */ #include "script_component.hpp" diff --git a/addons/inventory/functions/fnc_forceItemListUpdate.sqf b/addons/inventory/functions/fnc_forceItemListUpdate.sqf index e5358212bb..03bf667504 100644 --- a/addons/inventory/functions/fnc_forceItemListUpdate.sqf +++ b/addons/inventory/functions/fnc_forceItemListUpdate.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [DISPLAY] call ACE_inventory_fnc_forceitemListUpdate + * * Public: No */ #include "script_component.hpp" diff --git a/addons/inventory/functions/fnc_inventoryDisplayLoad.sqf b/addons/inventory/functions/fnc_inventoryDisplayLoad.sqf index 0e1daa4a52..09d2b6fb9b 100644 --- a/addons/inventory/functions/fnc_inventoryDisplayLoad.sqf +++ b/addons/inventory/functions/fnc_inventoryDisplayLoad.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [DISPLAY] call ACE_inventory_fnc_inventoryDisplayLoad + * * Public: No */ #include "script_component.hpp" diff --git a/addons/inventory/functions/fnc_onLBSelChanged.sqf b/addons/inventory/functions/fnc_onLBSelChanged.sqf index 5ae49049fe..86ecfa0087 100644 --- a/addons/inventory/functions/fnc_onLBSelChanged.sqf +++ b/addons/inventory/functions/fnc_onLBSelChanged.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [CONTROL, 5] call ACE_inventory_fnc_onLBSelChanged + * * Public: No */ #include "script_component.hpp" diff --git a/addons/inventory/stringtable.xml b/addons/inventory/stringtable.xml index e730fc89ae..6009a3e479 100644 --- a/addons/inventory/stringtable.xml +++ b/addons/inventory/stringtable.xml @@ -14,6 +14,8 @@ Aumentar o Tamanho da Tela do Inventário インベントリ表示を大きくする 소지품 화면을 더 크게 합니다 + 使物品显示清单更大 + 使物品顯示清單更大 Normally inventory display is scaled by UI size. This allows scaling the Inventory UI size up, but doesn't increase font size allowing more rows displayed. @@ -28,6 +30,8 @@ Normalmente o tamanho da tela do inventário é ditada pelo tamanho da UI. Isso permite aumentar o tamanho da tela de inventário, mas não aumenta o tamanho da fonte, permitindo que mais linhas sejam visualizadas. 通常のインベントリは UI の大きさによって表示されます。これはインベントリ UI を大きくできますが、文字は大きくできません。 보통 소지품 화면은 사용자 인터페이스 크기에 비례합니다. 이 항목은 소지품의 사용자 인터페이스를 확대를 가능케하면서 글씨는 그대로 냅두게 해줍니다. + 一般来说, 物品清单尺寸是由使用者介面来决定的. 此选项能让你的物品显示清单更大但不会增加字体大小, 此举可增加更多能被显示的描述行数! + 一般來說, 物品清單尺寸是由使用者介面來決定的. 此選項能讓你的物品顯示清單更大但不會增加字體大小, 此舉可增加更多能被顯示的描述行數! Backpacks @@ -41,6 +45,8 @@ Рюкзаки バックパック 가방 + 背包 + 背包 Headgear @@ -49,11 +55,13 @@ Hełmy Copricapi Cascos - Couvre-chefs + Couvre-chefs Capacetes Головные уборы ヘッドギア 헬멧 + 头盔 + 頭盔 Glasses @@ -67,6 +75,8 @@ Очки メガネ 안경 + 眼镜 + 眼鏡 Uniforms @@ -80,6 +90,8 @@ Униформа 戦闘服 복장 + 服装 + 服裝 Vests @@ -93,6 +105,8 @@ Жилеты ベスト 조끼 + 背心 + 背心 Grenades @@ -106,6 +120,8 @@ Гранаты 手榴弾 수류탄 + 手榴弹 + 手榴彈 Medical @@ -119,6 +135,8 @@ Медицина 医療 의료 + 医疗 + 醫療 diff --git a/addons/javelin/XEH_PREP.hpp b/addons/javelin/XEH_PREP.hpp index cce2482932..76d658d90d 100644 --- a/addons/javelin/XEH_PREP.hpp +++ b/addons/javelin/XEH_PREP.hpp @@ -1,5 +1,4 @@ -PREP(cycleFireMode); PREP(getTarget); PREP(mapHelperDraw); PREP(onOpticDraw); diff --git a/addons/javelin/functions/fnc_cycleFireMode.sqf b/addons/javelin/functions/fnc_cycleFireMode.sqf deleted file mode 100644 index 5eeb4dd9b3..0000000000 --- a/addons/javelin/functions/fnc_cycleFireMode.sqf +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Author: jaynus - * Cycles fire mode (top/dir) - * - * Arguments: - * None - * - * Return Value: - * None - * - * Example: - * [] call ace_javelin_fnc_cycleFireMode - * - * Public: No - */ -// #define DEBUG_MODE_FULL -#include "script_component.hpp" - -TRACE_1("cycle fire mode", _this); - -private _currentShooter = if (ACE_player call CBA_fnc_canUseWeapon) then {ACE_player} else {vehicle ACE_player}; -private _currentFireMode = _currentShooter getVariable ["ace_missileguidance_attackProfile", "JAV_TOP"]; - -if (_currentFireMode == "JAV_DIR") then { - _currentFireMode = "JAV_TOP"; -} else { - _currentFireMode = "JAV_DIR"; -}; -_currentShooter setVariable ["ace_missileguidance_attackProfile", _currentFireMode, false]; -TRACE_2("set",_currentFireMode,_currentShooter); diff --git a/addons/javelin/functions/fnc_getTarget.sqf b/addons/javelin/functions/fnc_getTarget.sqf index 04d9c76ef0..49748e2883 100644 --- a/addons/javelin/functions/fnc_getTarget.sqf +++ b/addons/javelin/functions/fnc_getTarget.sqf @@ -4,13 +4,13 @@ * * Arguments: * 0: Last Target (seeds the scan) - * 1: Max Range (meters) * * Return Value: * Target * * Example: - * [] call ace_javelin_fnc_getTarget + * [bob, 5] call ace_javelin_fnc_getTarget * * Public: No */ @@ -27,12 +27,12 @@ private _viewDir = _viewASL vectorFromTo (AGLtoASL positionCameraToWorld [0,0,1] // Attempt to lock onto current target if it is still valid if (!isNull _lastTarget) then { private _aimASL = aimPos _lastTarget; - + if ((_viewASL vectorDistance _aimASL) > _maxRange) exitWith {}; - if ((acos ((_viewASL vectorFromTo _aimASL) vectorDotProduct _viewDir)) > 0.6) exitWith {}; - + if ((acos ((_viewASL vectorFromTo _aimASL) vectorDotProduct _viewDir)) > 0.6) exitWith {}; + private _relAngle = (_lastTarget getRelDir _viewASL); - + for "_xOffset" from -2.5 to 2.5 step 0.5 do { for "_yOffset" from -2 to 1 step 0.5 do { // Find test points in the model based on the angle that we are viewing it from (not true 3d projection, but not bad) diff --git a/addons/javelin/initKeybinds.sqf b/addons/javelin/initKeybinds.sqf index ec5c9a27ac..7652f2fd57 100644 --- a/addons/javelin/initKeybinds.sqf +++ b/addons/javelin/initKeybinds.sqf @@ -18,11 +18,3 @@ false }, [15, [false, false, false]], false] call CBA_fnc_addKeybind; //Tab Key - -["ACE3 Weapons", QGVAR(cycleFireMode), localize LSTRING(CycleFireMode), -{ false }, -{ - [ACE_player] call FUNC(cycleFireMode); - false -}, -[15, [false, true, false]], false] call CBA_fnc_addKeybind; //Ctrl+Tab Key diff --git a/addons/javelin/stringtable.xml b/addons/javelin/stringtable.xml index 4e5614e106..96dc8d33ee 100644 --- a/addons/javelin/stringtable.xml +++ b/addons/javelin/stringtable.xml @@ -9,25 +9,13 @@ Namierz cel (przytrzymaj) Verrouiller la cible (maintenir) Célpontra állás (Lenyomva tartott) - Aggangia il bersagio + Aggangia il bersaglio Fijar objetivo (Mantener) Travar Alvo(Segurar) 目標を捕捉 (押しっぱ) 표적 획득 (누르기) - - - Cycle Fire Mode - Wechsle Feuermodus - Переключение режимов огня - Přepínání režimů palby - Przełącz tryb ognia - Cycle mode de tir - Tüzelési mód váltása - Alterna le modalità di fuoco - Cambiar modo de disparo - Alterar Modo de Disparo - 発射モード切り替え - 발사 방식 순환 + 锁定目标 (按住) + 鎖定目標 (按住) diff --git a/addons/kestrel4500/functions/fnc_generateOutputData.sqf b/addons/kestrel4500/functions/fnc_generateOutputData.sqf index ccc2ab57e3..039da0e213 100644 --- a/addons/kestrel4500/functions/fnc_generateOutputData.sqf +++ b/addons/kestrel4500/functions/fnc_generateOutputData.sqf @@ -143,7 +143,7 @@ if (GVAR(referenceHeadingMenu) == 0) then { } else { _textCenterLine1Left = "Max"; _textCenterLine2Left = "Avg"; - switch (GVAR(MinAvgMax)Mode) do { + switch (GVAR(MinAvgMaxMode)) do { case 0: { _textCenterLine1Right = "--. -"; _textCenterLine2Right = "--. -"; @@ -175,7 +175,7 @@ if (GVAR(referenceHeadingMenu) == 0) then { } else { _textCenterLine1Left = "Max"; _textCenterLine2Left = "Avg"; - switch (GVAR(MinAvgMax)Mode) do { + switch (GVAR(MinAvgMaxMode)) do { case 0: { _textCenterLine1Right = "--. -"; _textCenterLine2Right = "--. -"; diff --git a/addons/kestrel4500/stringtable.xml b/addons/kestrel4500/stringtable.xml index c129b1e019..bb65f22191 100644 --- a/addons/kestrel4500/stringtable.xml +++ b/addons/kestrel4500/stringtable.xml @@ -14,6 +14,8 @@ Kestrel 4500NV Kestrel 4500NV Kestrel 4500NV + 猎隼4500测风仪 + 獵隼4500測風儀 Kestrel 4500 Pocket Weather Tracker @@ -28,6 +30,8 @@ Příruční meteostanice Kestrel 4500 Kestrel 4500 携帯型風速計 Kestrel 4500 휴대형 기상 관측기 + 猎隼4500掌上型天气追踪仪 + 獵隼4500掌上型天氣追蹤儀 Open Kestrel 4500 @@ -42,6 +46,8 @@ Otevřít Kestrel 4500 Kestrel 4500 を開く Kestrel 4500 열기 + 开启猎隼4500测风仪 + 開啟獵隼4500測風儀 Show Kestrel 4500 @@ -56,6 +62,8 @@ Mostrar Kestrel 4500 Kestrel 4500 を見る Kestrel 4500 보이기 + 显示猎隼4500测风仪 + 顯示獵隼4500測風儀 Hide Kestrel 4500 @@ -70,6 +78,8 @@ Ocultar Kestrel 4500 Kestrel 4500 を隠す Kestrel 4500 숨기기 + 隐藏猎隼4500测风仪 + 隱藏獵隼4500測風儀 Open Kestrel 4500 @@ -84,6 +94,8 @@ Abrir Kestrel 4500 Kestrel 4500 を開く Kestrel 4500 열기 + 开启猎隼4500测风仪 + 開啟獵隼4500測風儀 Show Kestrel 4500 @@ -98,6 +110,8 @@ Mostrar Kestrel 4500 Kestrel 4500 を見る Kestrel 4500 숨기기 + 显示猎隼4500测风仪 + 顯示獵隼4500測風儀 diff --git a/addons/laser/functions/fnc_addLaserTarget.sqf b/addons/laser/functions/fnc_addLaserTarget.sqf index 1635b4e37f..9addb8ed93 100644 --- a/addons/laser/functions/fnc_addLaserTarget.sqf +++ b/addons/laser/functions/fnc_addLaserTarget.sqf @@ -6,7 +6,7 @@ * 0: TargetObject (vanilla laser) * 1: Vehicle * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/laser/functions/fnc_dev_drawVisibleLaserTargets.sqf b/addons/laser/functions/fnc_dev_drawVisibleLaserTargets.sqf index 7598bf8f46..42931db29d 100644 --- a/addons/laser/functions/fnc_dev_drawVisibleLaserTargets.sqf +++ b/addons/laser/functions/fnc_dev_drawVisibleLaserTargets.sqf @@ -1,3 +1,20 @@ +/* + * Author: ACE-Team + * + * + * Argument: + * None + * + * Return Value: + * None + * + * Example: + * call ace_laser_fnc_dev_drawVisibleLaserTargets + * + * Public: No + */ + + // Dev Debug Function // Displays lasers and attempts to lock on to codes 1111 and 1112 from a target vehicle's view // On Screen Debug: @@ -26,6 +43,7 @@ private _testSeekerDir = vectorDirVisual _seekerVehicle; // Draw all lasers [GVAR(laserEmitters), { + //IGNORE_PRIVATE_WARNING ["_key", "_value"]; // TRACE_2("",_key,_value); _value params ["_obj", "_owner", "_laserMethod", "_waveLength", "_laserCode", "_beamSpread"]; diff --git a/addons/laser/functions/fnc_findLaserSource.sqf b/addons/laser/functions/fnc_findLaserSource.sqf index 3577bc1c32..585faf3023 100644 --- a/addons/laser/functions/fnc_findLaserSource.sqf +++ b/addons/laser/functions/fnc_findLaserSource.sqf @@ -2,13 +2,13 @@ * Author: esteldunedain * Handler function for finding position and direction of a vanilla laser. * - * Argument: + * Arguments: * 0: Vehicle (shooter of laser) * 6: Method Args - * 0: Laser Source selection on Vehicle + * 0: Laser Source selection on Vehicle * - * Return value: - * [position, direction] + * Return Value: + * [position, direction] * * Example: * [player, x,x,x,x,x, ["pilot"]] call ace_laser_fnc_findLaserSource; diff --git a/addons/laser/functions/fnc_handleLaserTargetCreation.sqf b/addons/laser/functions/fnc_handleLaserTargetCreation.sqf index 24a2502169..482a733b41 100644 --- a/addons/laser/functions/fnc_handleLaserTargetCreation.sqf +++ b/addons/laser/functions/fnc_handleLaserTargetCreation.sqf @@ -5,10 +5,7 @@ * Argument: * 0: Vanilla Laser (base type LaserTarget) * - * Return value: - * None - * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/laser/functions/fnc_keyLaserCodeChange.sqf b/addons/laser/functions/fnc_keyLaserCodeChange.sqf index f4f485bcd0..c5140709e0 100644 --- a/addons/laser/functions/fnc_keyLaserCodeChange.sqf +++ b/addons/laser/functions/fnc_keyLaserCodeChange.sqf @@ -5,7 +5,7 @@ * Argument: * 0: Change in code * - * Return value: + * Return Value: * Key Handled * Example: @@ -29,12 +29,13 @@ if (ACE_player call CBA_fnc_canUseWeapon) then { _currentWeapon = currentWeapon ACE_player; } else { _currentShooter = vehicle ACE_player; - private _turret = [ACE_player] call ace_common_fnc_getTurretIndex; - _currentWeapon = _currentShooter currentWeaponTurret _turret; + private _turretPath = if (ACE_player == (driver _currentShooter)) then {[-1]} else {ACE_player call CBA_fnc_turretPath}; + _currentWeapon = _currentShooter currentWeaponTurret _turretPath; }; TRACE_2("",_currentShooter,_currentWeapon); -if ((getNumber (configFile >> "CfgWeapons" >> _currentWeapon >> "laser")) == 0) exitWith {false}; +if (((getNumber (configFile >> "CfgWeapons" >> _currentWeapon >> "laser")) == 0) && + {(getNumber (configFile >> "CfgWeapons" >> _currentWeapon >> QGVAR(canSelect))) == 0}) exitWith {false}; private _oldLaserCode = _currentShooter getVariable [QGVAR(code), ACE_DEFAULT_LASER_CODE]; private _newLaserCode = _oldLaserCode; @@ -52,7 +53,7 @@ if (((_codeChange < 0) && {_oldLaserCode > ACE_DEFAULT_LASER_CODE}) || {(_codeCh TRACE_2("",_oldLaserCode,_newLaserCode); if (_oldLaserCode != _newLaserCode) then { - _currentShooter setVariable [QGVAR(code), _newLaserCode, false]; + _currentShooter setVariable [QGVAR(code), _newLaserCode, true]; }; [format ["%1: %2", localize LSTRING(laserCode), _newLaserCode]] call EFUNC(common,displayTextStructured); diff --git a/addons/laser/functions/fnc_laserOff.sqf b/addons/laser/functions/fnc_laserOff.sqf index fcfc669d45..64188a62f1 100644 --- a/addons/laser/functions/fnc_laserOff.sqf +++ b/addons/laser/functions/fnc_laserOff.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: UUID (from laserOn) * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/laser/functions/fnc_laserOn.sqf b/addons/laser/functions/fnc_laserOn.sqf index a80f69b945..cd300af083 100644 --- a/addons/laser/functions/fnc_laserOn.sqf +++ b/addons/laser/functions/fnc_laserOn.sqf @@ -12,7 +12,7 @@ * 6: Method Args * * Return Value: - * UUID for sending to laserOff function. + * UUID for sending to laserOff function. * * Example: * [hmg, hmg, [[0,0,1], "HMG_static"], 1550, 1111, 1] call ace_laser_fnc_laserOn; diff --git a/addons/laser/functions/fnc_laserTargetPFH.sqf b/addons/laser/functions/fnc_laserTargetPFH.sqf index fb81d9da60..8ee3396d94 100644 --- a/addons/laser/functions/fnc_laserTargetPFH.sqf +++ b/addons/laser/functions/fnc_laserTargetPFH.sqf @@ -5,7 +5,7 @@ * Argument: * PFEH Args * - * Return value: + * Return Value: * None * * Example: diff --git a/addons/laser/functions/fnc_rotateVectLine.sqf b/addons/laser/functions/fnc_rotateVectLine.sqf index dde211c7c4..17b771debe 100644 --- a/addons/laser/functions/fnc_rotateVectLine.sqf +++ b/addons/laser/functions/fnc_rotateVectLine.sqf @@ -1,3 +1,19 @@ +/* + * Author: ACE-Team + * + * + * Argument: + * None + * + * Return Value: + * None + * + * Example: + * call ace_laser_fnc_rotateVectline + * + * Public: No + */ + #include "script_component.hpp" params ["_map", "_theta"]; diff --git a/addons/laser/functions/fnc_rotateVectLineGetMap.sqf b/addons/laser/functions/fnc_rotateVectLineGetMap.sqf index e6ab81c7f4..8d7f0a7f2e 100644 --- a/addons/laser/functions/fnc_rotateVectLineGetMap.sqf +++ b/addons/laser/functions/fnc_rotateVectLineGetMap.sqf @@ -1,3 +1,19 @@ +/* + * Author: ACE-Team + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_laser_fnc_rotateVectLineGetMap + * + * Public: No + */ + #include "script_component.hpp" params ["_p", "_p1", "_p2"]; diff --git a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf index 612cc17fe5..460add1c74 100644 --- a/addons/laser/functions/fnc_seekerFindLaserSpot.sqf +++ b/addons/laser/functions/fnc_seekerFindLaserSpot.sqf @@ -13,7 +13,7 @@ * 6: Ignore 1 (e.g. Player's vehicle) * * Return Value: - * Array, [Strongest compatible laser spot ASL pos, owner object] Nil array values if nothing found. + * [Strongest compatible laser spot ASL pos, owner object] Nil array values if nothing found. * * Example: * [getPosASL player, [0,1,0], 90, [1500, 1500], 1111, player] call ace_laser_fnc_seekerFindLaserSpot; @@ -76,7 +76,7 @@ private _finalOwner = objNull; // Shoot a cone with dispersion ([_laserPos, _laserDir, _divergence, GVAR(dispersionCount), _obj] call FUNC(shootCone)) params ["", "", "_resultPositions"]; { - _testPoint = _x select 0; + private _testPoint = _x select 0; private _testPointVector = _posASL vectorFromTo _testPoint; private _testDotProduct = _dir vectorDotProduct _testPointVector; if ((_testDotProduct > _seekerCos) && {(_testPoint vectorDistanceSqr _posASL) < _seekerMaxDistSq}) then { @@ -90,7 +90,7 @@ private _finalOwner = objNull; if (_distance > 0) then { private _testPointVector = _posASL vectorFromTo _resultPos; private _testDotProduct = _dir vectorDotProduct _testPointVector; - if ((_testDotProduct > _seekerCos) && {(_testPoint vectorDistanceSqr _posASL) < _seekerMaxDistSq}) then { + if ((_testDotProduct > _seekerCos) && {(_resultPos vectorDistanceSqr _posASL) < _seekerMaxDistSq}) then { _spots pushBack [_resultPos, _owner]; }; }; @@ -178,6 +178,7 @@ if ((count _spots) > 0) then { private _maxOwnerCount = -1; [_ownersHash, { + //IGNORE_PRIVATE_WARNING ["_key", "_value"]; if (_value > _maxOwnerCount) then { _finalOwner = _key; }; @@ -189,9 +190,9 @@ END_COUNTER(seekerFindLaserSpot); #ifdef DRAW_LASER_INFO if (isNil "_finalPos") then { - drawIcon3D ["\A3\ui_f\data\map\vehicleicons\iconMan_ca.paa", [0.9,1,0,1], (ASLtoAGL _posASL), 1, 1, 0, format ["Seeker: %1", _code], 0.5, 0.025, "TahomaB"]; + drawIcon3D ["\A3\ui_f\data\map\vehicleicons\iconMan_ca.paa", [0.9,1,0,1], (ASLtoAGL _posASL), 1, 1, 0, format ["Seeker: %1", _seekerCode], 0.5, 0.025, "TahomaB"]; } else { - drawIcon3D ["\A3\ui_f\data\map\vehicleicons\iconManAT_ca.paa", [0.5,1,0,1], (ASLtoAGL _posASL), 1, 1, 0, format ["Seeker: %1", _code], 0.5, 0.025, "TahomaB"]; + drawIcon3D ["\A3\ui_f\data\map\vehicleicons\iconManAT_ca.paa", [0.5,1,0,1], (ASLtoAGL _posASL), 1, 1, 0, format ["Seeker: %1", _seekerCode], 0.5, 0.025, "TahomaB"]; drawLine3D [ASLtoAGL _posASL, ASLtoAGL _finalPos, [0.5,1,0,1]]; }; #endif diff --git a/addons/laser/functions/fnc_shootCone.sqf b/addons/laser/functions/fnc_shootCone.sqf index e249d4d6e9..ceb45ba24b 100644 --- a/addons/laser/functions/fnc_shootCone.sqf +++ b/addons/laser/functions/fnc_shootCone.sqf @@ -9,8 +9,8 @@ * 3: Count at each divergence level * 4: Ignore vehicle 1 (e.g. Player's vehicle) * - * Return value: - * [_longestReturn, _shortestReturn, _resultPositions] + * Return Value: + * [_longestReturn, _shortestReturn, _resultPositions] * * Example: * [getPosASL player, [0,1,0]] call ace_laser_fnc_shootCone; @@ -53,7 +53,7 @@ private _pos2 = _pos vectorAdd (_vec vectorMultiply 1000); for "_i" from 1 to ceil(_count*_x) do { // Will always do at least 1 private _offset = [_vecRotateMap, (((360/_count)*_i)+_radOffset) mod 360] call FUNC(rotateVectLine); private _offsetPos = _pos2 vectorAdd (_offset vectorMultiply (_divergence*_x)); - + private _offsetVector = _pos vectorFromTo _offsetPos; _result = [_pos, _offsetVector, _ignoreObj1] call FUNC(shootRay); _resultPos = _result select 0; diff --git a/addons/laser/functions/fnc_shootRay.sqf b/addons/laser/functions/fnc_shootRay.sqf index e379026779..ceae27fe77 100644 --- a/addons/laser/functions/fnc_shootRay.sqf +++ b/addons/laser/functions/fnc_shootRay.sqf @@ -8,8 +8,8 @@ * 2: Ignore 1 (e.g. Player's vehicle) * 2: Ignore 2 (e.g. Player's vehicle) * - * Return value: - * [posASL, distance] - pos will be nil if no intersection + * Return Value: + * [posASL, distance] - pos will be nil if no intersection * * Example: * [getPosASL player, [0,1,0], player] call ace_laser_fnc_shootRay; diff --git a/addons/laser/stringtable.xml b/addons/laser/stringtable.xml index 786cb6ec55..aa09f5de0e 100644 --- a/addons/laser/stringtable.xml +++ b/addons/laser/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -7,6 +7,10 @@ Laserstreuung-Simulationszähler 레이저 분산 시뮬레이션 수 Wskaźnik poziomu rozproszenia wiązki lasera + Compte de la simulation de la dispersion du laser + Contatore Simulazione Dispersione Laser + 雷射散射模拟计算 + 雷射散射模擬計算 Laser Code @@ -21,6 +25,8 @@ Codice laser レーザ コード 레이저 코드 + 雷射码 + 雷射碼 Laser - Cycle Code Up @@ -35,6 +41,8 @@ Codice laser + レーザ - コードの数値を増やす 레이저 - 코드 순환 위 + 雷射 - 循环切换雷射码 上 + 雷射 - 循環切換雷射碼 上 Laser - Cycle Code Down @@ -49,6 +57,8 @@ Codice laser - レーザ - コードの数値を減らす 레이저 - 코드 순환 아래 + 雷射 - 循环切换雷射码 下 + 雷射 - 循環切換雷射碼 下 - \ No newline at end of file + diff --git a/addons/laserpointer/CfgEventHandlers.hpp b/addons/laserpointer/CfgEventHandlers.hpp index becf395052..0d3301d6e0 100644 --- a/addons/laserpointer/CfgEventHandlers.hpp +++ b/addons/laserpointer/CfgEventHandlers.hpp @@ -1,4 +1,3 @@ - class Extended_PreStart_EventHandlers { class ADDON { init = QUOTE(call COMPILE_FILE(XEH_preStart)); diff --git a/addons/laserpointer/CfgWeapons.hpp b/addons/laserpointer/CfgWeapons.hpp index 608d025a01..c86887e1c3 100644 --- a/addons/laserpointer/CfgWeapons.hpp +++ b/addons/laserpointer/CfgWeapons.hpp @@ -9,16 +9,18 @@ class CfgWeapons { class InventoryFlashLightItem_Base_F; class acc_pointer_IR: ItemCore { - ACE_nextModeClass = "ACE_acc_pointer_red"; - ACE_modeDescription = CSTRING(IRLaser); + MRT_SwitchItemNextClass = "ACE_acc_pointer_red"; + MRT_SwitchItemPrevClass = "ACE_acc_pointer_red"; + MRT_switchItemHintText = CSTRING(IRLaser); displayName = CSTRING(red); descriptionUse = CSTRING(useLaser); }; class ACE_acc_pointer_red: ItemCore { - ACE_nextModeClass = "acc_pointer_IR"; - ACE_modeDescription = CSTRING(Laser); + MRT_SwitchItemNextClass = "acc_pointer_IR"; + MRT_SwitchItemPrevClass = "acc_pointer_IR"; + MRT_switchItemHintText = CSTRING(Laser); ACE_laserpointer = 1; @@ -68,8 +70,9 @@ class CfgWeapons { }; class ACE_acc_pointer_green_IR: acc_pointer_IR { - ACE_nextModeClass = "ACE_acc_pointer_green"; - ACE_modeDescription = CSTRING(IRLaser); + MRT_SwitchItemNextClass = "ACE_acc_pointer_green"; + MRT_SwitchItemPrevClass = "ACE_acc_pointer_green"; + MRT_switchItemHintText = CSTRING(IRLaser); author = ECSTRING(common,ACETeam); _generalMacro = "ACE_acc_pointer_green"; @@ -78,8 +81,9 @@ class CfgWeapons { }; class ACE_acc_pointer_green: ACE_acc_pointer_red { - ACE_nextModeClass = "ACE_acc_pointer_green_IR"; - ACE_modeDescription = CSTRING(Laser); + MRT_SwitchItemNextClass = "ACE_acc_pointer_green_IR"; + MRT_SwitchItemPrevClass = "ACE_acc_pointer_green_IR"; + MRT_switchItemHintText = CSTRING(Laser); ACE_laserpointer = 2; diff --git a/addons/laserpointer/XEH_PREP.hpp b/addons/laserpointer/XEH_PREP.hpp index c5dcd74a75..59a28bb4cc 100644 --- a/addons/laserpointer/XEH_PREP.hpp +++ b/addons/laserpointer/XEH_PREP.hpp @@ -1,4 +1,3 @@ - PREP(drawLaserpoint); +PREP(getNearUnits); PREP(onDraw); -PREP(switchLaserLightMode); diff --git a/addons/laserpointer/XEH_postInit.sqf b/addons/laserpointer/XEH_postInit.sqf index bfc617965d..7e90e29259 100644 --- a/addons/laserpointer/XEH_postInit.sqf +++ b/addons/laserpointer/XEH_postInit.sqf @@ -2,37 +2,90 @@ #include "script_component.hpp" // fixes laser when being captured. Needed, because the selectionPosition of the right hand is used -[QEGVAR(captives,setHandcuffed), {if (_this select 1) then {(_this select 0) action ["ace_gunLightOff", _this select 0]};}] call CBA_fnc_addEventHandler; +[QEGVAR(captives,setHandcuffed), {if (_this select 1) then {(_this select 0) action ["GunLightOff", _this select 0]};}] call CBA_fnc_addEventHandler; if (!hasInterface) exitWith {}; GVAR(nearUnits) = []; - -#include "initKeybinds.sqf" +GVAR(index) = -1; +GVAR(laserClassesCache) = [] call CBA_fnc_createNamespace; +GVAR(redLaserUnits) = []; +GVAR(greenLaserUnits) = []; ["ace_settingsInitialized", { - //If not enabled, dont't add draw eventhandler or PFEH (for performance) - if (!GVAR(enabled)) exitWith {}; - - // @todo. Maybe move to common? - [{ - // handle RHS / bugged vehicle slots - private _camPosAGL = positionCameraToWorld [0,0,0]; - if !((_camPosAGL select 0) isEqualType 0) exitWith {}; - - private _nearUnits = []; - { - _nearUnits append crew _x; - if (count _nearUnits > 10) exitWith { - _nearUnits resize 10; + // If not enabled, dont't add draw eventhandler or PFEH (for performance) + if (!GVAR(enabled)) exitWith { + ["CBA_attachmentSwitched", { + params ["_unit", "_prevItem", "_newItem", "_currWeaponType"]; + TRACE_4("CBA_attachmentSwitched eh",_unit,_prevItem,_newItem,_currWeaponType); + if ((getNumber (configFile >> "CfgWeapons" >> _newItem >> "ACE_laserpointer")) > 0) then { + TRACE_1("removing ACE_laserpointer",getNumber (configFile >> "CfgWeapons" >> _newItem >> "ACE_laserpointer")); + [1, "prev"] call CBA_accessory_fnc_switchAttachment; }; - } forEach nearestObjects [_camPosAGL, ["AllVehicles"], 50]; // when moving this, search also for units inside vehicles. currently breaks the laser in FFV + }] call CBA_fnc_addEventHandler; + }; - GVAR(nearUnits) = _nearUnits; + [{ + private _oldNearUnits = GVAR(nearUnits); + GVAR(nearUnits) = call FUNC(getNearUnits); - } , 5, []] call CBA_fnc_addPerFrameHandler; + // remove units that moved away + { + GVAR(redLaserUnits) deleteAt (GVAR(redLaserUnits) find _x); + GVAR(greenLaserUnits) deleteAt (GVAR(greenLaserUnits) find _x); + } forEach (_oldNearUnits - GVAR(nearUnits)); + }, 5, []] call CBA_fnc_addPerFrameHandler; - addMissionEventHandler ["Draw3D", { - call FUNC(onDraw); - }]; + + private _fnc_processUnit = { + params ["_unit"]; + + private _weapon = currentWeapon _unit; + if (!(_unit isFlashlightOn _weapon)) exitWith { + GVAR(redLaserUnits) deleteAt (GVAR(redLaserUnits) find _unit); + GVAR(greenLaserUnits) deleteAt (GVAR(greenLaserUnits) find _unit); + }; + + private _laser = [(_unit weaponAccessories _weapon) select 1] param [0, ""]; + if (_laser isEqualTo "") exitWith { + GVAR(redLaserUnits) deleteAt (GVAR(redLaserUnits) find _unit); + GVAR(greenLaserUnits) deleteAt (GVAR(greenLaserUnits) find _unit); + }; + + private _laserID = GVAR(laserClassesCache) getVariable _laser; + + if (isNil "_laserID") then { + _laserID = getNumber (configFile >> "CfgWeapons" >> _laser >> "ACE_laserpointer"); + GVAR(laserClassesCache) setVariable [_laser, _laserID]; + }; + TRACE_3("",_weapon,_laser,_laserID); + + if (_laserID isEqualTo 1) exitWith { + GVAR(redLaserUnits) pushBackUnique _unit; + GVAR(greenLaserUnits) deleteAt (GVAR(greenLaserUnits) find _unit); + }; + + if (_laserID isEqualTo 2) exitWith { + GVAR(greenLaserUnits) pushBackUnique _unit; + GVAR(redLaserUnits) deleteAt (GVAR(redLaserUnits) find _unit); + }; + }; + + // custom scheduler + [{ + params ["_fnc_processUnit"]; + + ACE_player call _fnc_processUnit; + + GVAR(index) = GVAR(index) + 1; + private _unit = GVAR(nearUnits) param [GVAR(index), objNull]; + + if (isNull _unit) exitWith { + GVAR(index) = -1; + }; + + _unit call _fnc_processUnit; + }, 0.1, _fnc_processUnit] call CBA_fnc_addPerFrameHandler; + + addMissionEventHandler ["Draw3D", {call FUNC(onDraw)}]; }] call CBA_fnc_addEventHandler; diff --git a/addons/laserpointer/XEH_preInit.sqf b/addons/laserpointer/XEH_preInit.sqf index b47cf6628d..d2efe43e9c 100644 --- a/addons/laserpointer/XEH_preInit.sqf +++ b/addons/laserpointer/XEH_preInit.sqf @@ -6,4 +6,11 @@ PREP_RECOMPILE_START; #include "XEH_PREP.hpp" PREP_RECOMPILE_END; +["visionMode", { + params ["", "_visionMode"]; + + GVAR(isIR) = _visionMode isEqualTo 1; + GVAR(isTI) = _visionMode isEqualTo 2; +}] call CBA_fnc_addPlayerEventHandler; + ADDON = true; diff --git a/addons/laserpointer/functions/fnc_getNearUnits.sqf b/addons/laserpointer/functions/fnc_getNearUnits.sqf new file mode 100644 index 0000000000..baeb07c86e --- /dev/null +++ b/addons/laserpointer/functions/fnc_getNearUnits.sqf @@ -0,0 +1,29 @@ +/* + * Author: commy2 + * Reports near units. + * + * Arguments: + * None + * + * Return Value: + * Near Units + * + * Example: + * call ACE_laserpointer_fnc_getNearUnits + * + * Public: No + */ +#include "script_component.hpp" + +private _camPosAGL = positionCameraToWorld [0, 0, 0]; + +// handle RHS / bugged vehicle slots +if !((_camPosAGL select 0) isEqualType 0) exitWith { [] }; + +private _nearUnits = []; + +{ + _nearUnits append crew _x; +} forEach nearestObjects [_camPosAGL, ["AllVehicles"], MAX_LASER_RANGE]; + +_nearUnits diff --git a/addons/laserpointer/functions/fnc_onDraw.sqf b/addons/laserpointer/functions/fnc_onDraw.sqf index 1945dcf2b7..06c601869c 100644 --- a/addons/laserpointer/functions/fnc_onDraw.sqf +++ b/addons/laserpointer/functions/fnc_onDraw.sqf @@ -8,34 +8,24 @@ * Return Value: * None * + * Example: + * call ACE_laserpointer_fnc_onDraw + * * Public: No */ #include "script_component.hpp" -private _isIR = currentVisionMode ACE_player; +// no lasers in thermal mode +if !(GVAR(isTI)) then { + private _brightness = 2 - call EFUNC(common,ambientBrightness); -if (_isIR == 2) exitWith {}; + { + // red laser. draw green dot anyway in IR mode + [_x, 100, GVAR(isIR), _brightness] call FUNC(drawLaserpoint); + } count GVAR(redLaserUnits); -_isIR = _isIR == 1; - -private _brightness = 2 - call EFUNC(common,ambientBrightness); - -{ - private _weapon = currentWeapon _x; - private _laser = (_x weaponAccessories _weapon) select 1; - - if (_laser != "") then { - private _cacheName = format [QGVAR(laser_%1), _laser]; - private _laserID = missionNamespace getVariable [_cacheName, -1]; - - if (missionNamespace getVariable [_cacheName, -1] == -1) then { - _laserID = getNumber (configFile >> "CfgWeapons" >> _laser >> "ACE_laserpointer"); - missionNamespace setVariable [_cacheName, _laserID]; - }; - - if (_laserID > 0 && {_x isFlashlightOn _weapon}) then { - [_x, 100, (_laserID == 2 || _isIR), _brightness] call FUNC(drawLaserpoint); - }; - }; - false -} count GVAR(nearUnits); + { + // green laser + [_x, 100, true, _brightness] call FUNC(drawLaserpoint); + } count GVAR(greenLaserUnits); +}; diff --git a/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf b/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf deleted file mode 100644 index 2469f64352..0000000000 --- a/addons/laserpointer/functions/fnc_switchLaserLightMode.sqf +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Author: Commy2 - * Switch between laser modes. - * - * Arguments: - * 0: Unit - * 1: Weapon - * - * Return Value: - * None - * - * Public: No - */ -#include "script_component.hpp" - -params ["_unit", "_weapon"]; - -private _pointer = (_unit weaponAccessories _weapon) select 1; - -if (_pointer == "") exitWith {}; - -private _config = configFile >> "CfgWeapons" >> _pointer; - -private _nextPointer = getText (_config >> "ACE_nextModeClass"); - -if (_nextPointer == "") exitWith {}; - -//If system disabled, don't switch to a laser: -private _nextPointerIsLaser = getNumber (configFile >> "CfgWeapons" >> _nextPointer >> "ACE_laserpointer"); -if ((!GVAR(enabled)) && {_nextPointerIsLaser == 1}) exitWith {}; - -// disable inheritance for this entry, because addons claim this as a base class for convenience -if !((_config >> "ACE_nextModeClass") in configProperties [_config, "true", false]) exitWith {}; - -_unit addWeaponItem [_weapon, _nextPointer]; - -private _error = false; - -if ((_unit weaponAccessories _weapon) select 1 != _nextPointer) then { - ERROR("NextPointer not compatible"); - _unit addWeaponItem [_weapon, _pointer]; - _error = true; -}; - -if (!_error) then { - private _description = getText (configFile >> "CfgWeapons" >> _nextPointer >> "ACE_modeDescription"); - private _picture = getText (configFile >> "CfgWeapons" >> _nextPointer >> "picture"); - - [_description, _picture] call EFUNC(common,displayTextPicture); -} else { - ERROR_3("Failed to add %1 to %2 - reverting to %3",_nextPointer,_weapon,_pointer); -}; - -playSound "ACE_Sound_Click"; diff --git a/addons/laserpointer/initKeybinds.sqf b/addons/laserpointer/initKeybinds.sqf deleted file mode 100644 index 2251ddfb71..0000000000 --- a/addons/laserpointer/initKeybinds.sqf +++ /dev/null @@ -1,13 +0,0 @@ -// by commy2 - -["ACE3 Weapons", QGVAR(switchLaserLightMode), localize LSTRING(switchLaserLight), -{ - // Conditions: canInteract - if !([ACE_player, objNull, ["isNotInside", "isNotSitting"]] call EFUNC(common,canInteractWith)) exitWith {false}; - // Conditions: specific - if !([ACE_player] call CBA_fnc_canUseWeapon) exitWith {false}; - - [ACE_player, currentWeapon ACE_player] call FUNC(switchLaserLightMode); - true -}, -{false}, [38, [false, true, false]], false] call CBA_fnc_addKeybind; diff --git a/addons/laserpointer/script_component.hpp b/addons/laserpointer/script_component.hpp index b6323308fd..4b7b2e0d39 100644 --- a/addons/laserpointer/script_component.hpp +++ b/addons/laserpointer/script_component.hpp @@ -15,3 +15,5 @@ #endif #include "\z\ace\addons\main\script_macros.hpp" + +#define MAX_LASER_RANGE 50 diff --git a/addons/laserpointer/stringtable.xml b/addons/laserpointer/stringtable.xml index fb9fc9b3ed..88228dc289 100644 --- a/addons/laserpointer/stringtable.xml +++ b/addons/laserpointer/stringtable.xml @@ -14,6 +14,8 @@ Laser (vermelho) レーザ ポインタ (赤) 레이저 지시기 (빨강) + 雷射指示器 (红色) + 雷射指示器 (紅色) Laser Pointer (green) @@ -28,6 +30,8 @@ Laser (verde) レーザ ポインタ (緑) 레이저 지시기 (초록) + 雷射指示器 (绿色) + 雷射指示器 (綠色) Emits visible light. @@ -42,6 +46,8 @@ Emite luz visível. 可視光をだします。 밝은 곳에서도 보임 + 发射出可见光 + 發射出可見光 <t color='#9cf953'>Use: </t>Turn Laser ON/OFF @@ -54,8 +60,10 @@ <t color='#9cf953'>Использовать: </t>ВКЛ/ВЫКЛ лазер <t color='#9cf953'>Usar: </t>Encender/Apagar láser <t color='#9cf953'>Használat: </t>Lézer BE/KI kapcsolása - &lt;t color='#9cf953'&gt;つかう: &lt;/t&gt;レーザの起動/停止 + <t color='#9cf953'>つかう: </t>レーザの起動/停止 <t color='#9cf953'>사용키: </t>레이저 켜기/끄기 + <t color='#9cf953'>使用: </t>雷射开启/关闭 + <t color='#9cf953'>使用: </t>雷射開啟/關閉 Laser @@ -70,6 +78,8 @@ Laser レーザ 레이저 + 雷射 + 雷射 IR Laser @@ -84,6 +94,8 @@ Laser IV 赤外線レーザ 적외선 레이저 + 红外线雷射 + 紅外線雷射 Switch Laser / IR Laser @@ -98,6 +110,8 @@ Alternar entre Laser / Laser IV レーザ/赤外線レーザを切り替える 레이저 / 적외선 레이저 전환 + 切换雷射/红外线雷射 + 切換雷射/紅外線雷射 diff --git a/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf b/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf index 2bf617478d..2e83043d00 100644 --- a/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf +++ b/addons/logistics_uavbattery/functions/fnc_refuelUAV.sqf @@ -7,7 +7,7 @@ * 1: UAV * * Return Value: - * Nothing + * None * * Example: * [player, theUAV] call ace_logistics_uavbattery_fnc_refuelUAV diff --git a/addons/logistics_uavbattery/stringtable.xml b/addons/logistics_uavbattery/stringtable.xml index af9bbace05..97c709d8dd 100644 --- a/addons/logistics_uavbattery/stringtable.xml +++ b/addons/logistics_uavbattery/stringtable.xml @@ -14,6 +14,8 @@ БПЛА полностью заряжен ドローンは充電完了 드론 충전완료 + 无人载具电池已充满 + 無人載具電池已充滿 You need a UAV Battery @@ -28,6 +30,8 @@ Требуется аккумулятор для БПЛА UAV バッテリが必要です UAV 배터리가 필요합니다 + 你需要一个无人载具电池 + 你需要一個無人載具電池 Recharge @@ -42,6 +46,8 @@ Зарядить 充電 재충전 + 充电 + 充電 UAV Battery @@ -56,6 +62,8 @@ Аккумулятор БПЛА UAV バッテリ UAV 배터리 + 无人载具电池 + 無人載具電池 Used to refuel Carried UAV's @@ -70,6 +78,8 @@ Используется для зарядки переносных БПЛА 運んでいる UAV を充電に使う UAV를 재충전 할때 씁니다. + 对可携式无人载具进行充电 + 對可攜式無人載具進行充電 Recharging... @@ -83,6 +93,8 @@ In ricarica... Заряжается... 充電中 + 充电中... + 充電中... diff --git a/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf b/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf index 2bf807975f..61d8a254c5 100644 --- a/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf +++ b/addons/logistics_wirecutter/functions/fnc_cutDownFence.sqf @@ -7,7 +7,7 @@ * 1: Fence * * Return Value: - * Nothing + * None * * Example: * [player, berlinWall] call ace_logistics_wirecutter_fnc_cutDownFence diff --git a/addons/logistics_wirecutter/functions/fnc_interactEH.sqf b/addons/logistics_wirecutter/functions/fnc_interactEH.sqf index bf0f5d3bc9..302e4b0975 100644 --- a/addons/logistics_wirecutter/functions/fnc_interactEH.sqf +++ b/addons/logistics_wirecutter/functions/fnc_interactEH.sqf @@ -6,7 +6,7 @@ * Interact Menu Type (0 - world, 1 - self) * * Return Value: - * Nothing + * None * * Example: * [0] call ace_logistics_wirecutter_fnc_interactEH diff --git a/addons/logistics_wirecutter/stringtable.xml b/addons/logistics_wirecutter/stringtable.xml index f13cd9a288..53c5e21b14 100644 --- a/addons/logistics_wirecutter/stringtable.xml +++ b/addons/logistics_wirecutter/stringtable.xml @@ -14,6 +14,8 @@ Cortador de Arame ワイヤーカッター 절단기 + 剪铁丝网钳 + 剪鐵絲網鉗 Wirecutter @@ -24,10 +26,12 @@ Służą do cięcia drutu i płotów Pince coupante Drótok, huzalok, és kábelek vágására alkalmas olló. - Trancia da ferro + Tronchese Cortador de Arame ワイヤーカッター 절단기 + 剪铁丝网钳 + 剪鐵絲網鉗 Cut Fence @@ -42,6 +46,8 @@ Разрезать забор フェンスを切断する 철조망 자르기 + 剪断护栏 + 剪斷護欄 Cutting Fences / Wires... @@ -56,6 +62,8 @@ Разрезаем забор / провода... フェンス/ワイヤを切断中・・・ 철망/철조망 자르는중... + 剪断护栏/刺网中... + 剪斷護欄/刺網中... Fence cut @@ -70,6 +78,8 @@ Забор разрезан フェンスを切断した 절단됨 + 护栏已被剪断 + 護欄已被剪斷 diff --git a/addons/magazinerepack/functions/fnc_magazineRepackProgress.sqf b/addons/magazinerepack/functions/fnc_magazineRepackProgress.sqf index 3808df4cdc..ddc7ca4fa8 100644 --- a/addons/magazinerepack/functions/fnc_magazineRepackProgress.sqf +++ b/addons/magazinerepack/functions/fnc_magazineRepackProgress.sqf @@ -18,7 +18,7 @@ */ #include "script_component.hpp" -params ["_ars", "_elapsedTime", "_totalTime"]; +params ["_args", "_elapsedTime", "_totalTime"]; _args params ["_magazineClassname", "_lastAmmoCount", "_simEvents"]; if !((_simEvents select 0) params ["_nextEventTime", "_nextEventIsBullet", "_nextEventMags"]) exitWith { ERROR("No Event"); false }; diff --git a/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf b/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf index 09c04de26e..a96fa2dead 100644 --- a/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf +++ b/addons/magazinerepack/functions/fnc_simulateRepackEvents.sqf @@ -26,6 +26,7 @@ _arrayOfAmmoCounts = +_arrayOfAmmoCounts; _arrayOfAmmoCounts sort true; private _fnc_newMag = { + //IGNORE_PRIVATE_WARNING ["_time", "_events"]; _time = _time + GVAR(TimePerMagazine); _events pushBack [_time, false, +_arrayOfAmmoCounts]; }; diff --git a/addons/magazinerepack/functions/fnc_startRepackingMagazine.sqf b/addons/magazinerepack/functions/fnc_startRepackingMagazine.sqf index 32ce65d188..d3cd621305 100644 --- a/addons/magazinerepack/functions/fnc_startRepackingMagazine.sqf +++ b/addons/magazinerepack/functions/fnc_startRepackingMagazine.sqf @@ -10,7 +10,7 @@ * 2: Magazine Classname * * Return Value: - * Nothing + * None * * Example: * [player, player, "30Rnd_65x39_caseless_mag"] call ace_magazinerepack_fnc_startRepackingMagazine diff --git a/addons/magazinerepack/stringtable.xml b/addons/magazinerepack/stringtable.xml index f25f6f9810..f82280961e 100644 --- a/addons/magazinerepack/stringtable.xml +++ b/addons/magazinerepack/stringtable.xml @@ -14,6 +14,8 @@ Перепаковать магазины 弾倉を詰め替え 탄창 다시 채우기 + 重新整理弹匣 + 重新整理彈匣 Select Magazine Menu @@ -28,6 +30,8 @@ Меню выбора магазинов 弾倉メニューから選ぶ 탄창 메뉴 고르기 + 选择弹匣清单 + 選擇彈匣清單 Select Mag @@ -42,6 +46,8 @@ Выбрать магазин 弾倉を選択 탄창 고르기 + 选择弹匣 + 選擇彈匣 Repacking Magazines... @@ -56,6 +62,8 @@ Перепаковка магазинов... 弾倉を詰め替え中・・・ 다시 채우는중... + 重新整理弹匣中 ... + 重新整理彈匣中 ... Repacked Magazines @@ -70,6 +78,8 @@ Магазины перепакованы 弾倉の詰め替えが終わった 탄창 채워짐 + 弹匣已重新整理 + 彈匣已重新整理 %1 full mag(s) and %2 extra round(s) @@ -84,6 +94,8 @@ %1 полных магазина(ов) и %2 патрона(ов) %1 個の満杯な弾倉と入りきらなかった %2 個の弾倉 %1개의 꽉찬 탄창과 %2발의 총알이 남았다 + %1个满的弹匣与%2发额外子弹 + %1個滿的彈匣與%2發額外子彈 Repacking Finished @@ -98,6 +110,8 @@ Reorganização Terminada 詰め替えが完了 탄창 채우기 끝남 + 重整完成 + 重整完成 Repacking Interrupted @@ -112,6 +126,8 @@ Reorganização Interrompida 詰め替えを中断した 탄창 채우기 방해받음 + 重整被中断 + 重整被中斷 %1 Full and %2 Partial @@ -126,6 +142,8 @@ %1 Total e %2 Parcial %1 個の満杯で、 %2 の余分数 %1 꽉찼고 %2 부분참 + %1个满的与%2个部分的 + %1個滿的與%2個部分的 diff --git a/addons/main/CfgSettings.hpp b/addons/main/CfgSettings.hpp index 58cb824a6f..dcb78ffb60 100644 --- a/addons/main/CfgSettings.hpp +++ b/addons/main/CfgSettings.hpp @@ -10,6 +10,7 @@ class CfgSettings { //Warnings for missing RHS compat pbos compat_rhs_afrf3[] = {"ace_compat_rhs_afrf3", {VERSION_AR}, "isClass (configFile >> 'CfgPatches' >> 'rhs_main')"}; compat_rhs_usf3[] = {"ace_compat_rhs_usf3", {VERSION_AR}, "isClass (configFile >> 'CfgPatches' >> 'rhsusf_main')"}; + compat_rhs_gref3[] = {"ace_compat_rhs_gref3", {VERSION_AR}, "isClass (configFile >> 'CfgPatches' >> 'rhsgref_main')"}; }; }; }; diff --git a/addons/main/config.cpp b/addons/main/config.cpp index 5d485b6fd9..cf38747148 100644 --- a/addons/main/config.cpp +++ b/addons/main/config.cpp @@ -7,6 +7,19 @@ class CfgPatches { weapons[] = {}; requiredVersion = REQUIRED_VERSION; requiredAddons[] = { + "A3_Data_F_Loadorder", + "A3_Data_F_Curator_Loadorder", + "A3_Data_F_Kart_Loadorder", + "A3_Data_F_Bootcamp_Loadorder", + "A3_Data_F_Heli_Loadorder", + "A3_Data_F_Mark_Loadorder", + "A3_Data_F_Exp_A_Loadorder", + "A3_Data_F_Exp_B_Loadorder", + "A3_Data_F_Exp_Loadorder", + "A3_Data_F_Jets_Loadorder", + "A3_Data_F_Argo_Loadorder", + "A3_Data_F_Patrol_Loadorder", + // Vanilla "a3_3den", "a3_3den_language", diff --git a/addons/main/script_mod.hpp b/addons/main/script_mod.hpp index 78fcc0c665..7b2f6a92cd 100644 --- a/addons/main/script_mod.hpp +++ b/addons/main/script_mod.hpp @@ -9,8 +9,8 @@ #define VERSION_AR MAJOR,MINOR,PATCHLVL,BUILD // MINIMAL required version for the Mod. Components can specify others.. -#define REQUIRED_VERSION 1.64 -#define REQUIRED_CBA_VERSION {3,1,1} +#define REQUIRED_VERSION 1.72 +#define REQUIRED_CBA_VERSION {3,3,1} #ifdef COMPONENT_BEAUTIFIED #define COMPONENT_NAME QUOTE(ACE3 - COMPONENT_BEAUTIFIED) diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 68fa060a97..d10bb0eaf4 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -1,4 +1,4 @@ #define MAJOR 3 -#define MINOR 8 -#define PATCHLVL 3 -#define BUILD 14 +#define MINOR 10 +#define PATCHLVL 2 +#define BUILD 22 diff --git a/addons/main/stringtable.xml b/addons/main/stringtable.xml index 0442d4e9fb..d312264cf6 100644 --- a/addons/main/stringtable.xml +++ b/addons/main/stringtable.xml @@ -12,6 +12,8 @@ Logistica ACE ACE Logistique ACE ロジスティクス + ACE 后勤 + ACE 後勤 http://ace3mod.com/ @@ -25,6 +27,8 @@ http://ace3mod.com/ http://ace3mod.com/ http://ace3mod.com/ + http://ace3mod.com/ + http://ace3mod.com/ diff --git a/addons/map/XEH_postInitClient.sqf b/addons/map/XEH_postInitClient.sqf index 110d07ee0c..f022e2c81e 100644 --- a/addons/map/XEH_postInitClient.sqf +++ b/addons/map/XEH_postInitClient.sqf @@ -116,12 +116,13 @@ call FUNC(determineZoom); GVAR(hasWatch) = true; ["loadout", { - if (isNull (_this select 0)) exitWith { + params ["_unit"]; + if (isNull _unit) exitWith { GVAR(hasWatch) = true; }; GVAR(hasWatch) = false; { if (_x isKindOf ["ItemWatch", configFile >> "CfgWeapons"]) exitWith {GVAR(hasWatch) = true;}; false - } count (assignedItems ACE_player); -}] call CBA_fnc_addPlayerEventHandler; + } count (assignedItems _unit); +}, true] call CBA_fnc_addPlayerEventHandler; diff --git a/addons/map/functions/fnc_blueForceTrackingModule.sqf b/addons/map/functions/fnc_blueForceTrackingModule.sqf index f31386b204..a892bf72cd 100644 --- a/addons/map/functions/fnc_blueForceTrackingModule.sqf +++ b/addons/map/functions/fnc_blueForceTrackingModule.sqf @@ -1,13 +1,18 @@ /* -* Author: KoffeinFlummi -* Initializes the blue force tracking module. -* -* Arguments: -* Whatever the module provides. (I dunno.) -* -* Return Value: -* None -*/ + * Author: KoffeinFlummi + * Initializes the blue force tracking module. + * + * Arguments: + * Whatever the module provides. (I dunno.) + * + * Return Value: + * None + * + * Example: + * call ACE_map_fnc_blueForceTrackingModule + * + * Public: No + */ #include "script_component.hpp" diff --git a/addons/map/functions/fnc_blueForceTrackingUpdate.sqf b/addons/map/functions/fnc_blueForceTrackingUpdate.sqf index 9f37252331..46e7833cc1 100644 --- a/addons/map/functions/fnc_blueForceTrackingUpdate.sqf +++ b/addons/map/functions/fnc_blueForceTrackingUpdate.sqf @@ -1,3 +1,20 @@ +/* + * Author: ACE-Team + * Update the blue force tracking. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ACE_map_fnc_blueForceTrackingUpdate + * + * Public: No + */ + + // #define ENABLE_PERFORMANCE_COUNTERS #include "script_component.hpp" // BEGIN_COUNTER(blueForceTrackingUpdate); diff --git a/addons/map/functions/fnc_compileFlashlightMenu.sqf b/addons/map/functions/fnc_compileFlashlightMenu.sqf index fb33b59682..f271cd723f 100644 --- a/addons/map/functions/fnc_compileFlashlightMenu.sqf +++ b/addons/map/functions/fnc_compileFlashlightMenu.sqf @@ -39,7 +39,7 @@ _unitLight params ["_flashlight", ""]; {[_player, _this select 2] call FUNC(switchFlashlight)} }; - _action = [_x, _displayName, _icon, _statement, {true}, {}, _x] call EFUNC(interact_menu,createAction); + private _action = [_x, _displayName, _icon, _statement, {true}, {}, _x] call EFUNC(interact_menu,createAction); _actions pushBack [_action, [], _player]; } forEach _flashlightItems; diff --git a/addons/map/functions/fnc_determineMapLight.sqf b/addons/map/functions/fnc_determineMapLight.sqf index 3269c5a056..89a2f6f606 100644 --- a/addons/map/functions/fnc_determineMapLight.sqf +++ b/addons/map/functions/fnc_determineMapLight.sqf @@ -9,6 +9,9 @@ * 0: Does the map needs shading? * 1: Color of the overlay * + * Example: + * call ACE_map_fnc_determineMapLight + * * Public: No */ diff --git a/addons/map/functions/fnc_determineZoom.sqf b/addons/map/functions/fnc_determineZoom.sqf index efe20a0e52..fd9cc24264 100644 --- a/addons/map/functions/fnc_determineZoom.sqf +++ b/addons/map/functions/fnc_determineZoom.sqf @@ -1,15 +1,19 @@ /* -* Author: Rocko -* Calculate the maximum zoom level allowed for the current map -* -* Arguments: -* None -* -* Return Value: -* None -* -* Public: No -*/ + * Author: Rocko + * Calculate the maximum zoom level allowed for the current map + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ACE_map_fnc_determineZoom + * + * Public: No + */ + #include "script_component.hpp" private _grids = (configFile >> "CfgWorlds" >> worldName >> "Grid"); diff --git a/addons/map/functions/fnc_moduleMap.sqf b/addons/map/functions/fnc_moduleMap.sqf index fa64cacb82..3dead784ca 100644 --- a/addons/map/functions/fnc_moduleMap.sqf +++ b/addons/map/functions/fnc_moduleMap.sqf @@ -3,10 +3,15 @@ * Initializes the Map module. * * Arguments: - * Whatever the module provides. (I dunno.) + * Whatever the module provides. (I dunno.) * * Return Value: * None + * + * Example: + * call ACE_map_fnc_moduleMap + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/map/functions/fnc_onDrawMap.sqf b/addons/map/functions/fnc_onDrawMap.sqf index 37ec5a7000..dff79d694a 100644 --- a/addons/map/functions/fnc_onDrawMap.sqf +++ b/addons/map/functions/fnc_onDrawMap.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * Something + * + * Return Value: + * None + * + * Example: + * call ACE_map_fnc_onDrawMap + * + * Public: No + */ + #include "script_component.hpp" ((_this select 0) displayCtrl 1016) ctrlShow GVAR(mapShowCursorCoordinates); diff --git a/addons/map/functions/fnc_simulateMapLight.sqf b/addons/map/functions/fnc_simulateMapLight.sqf index ba03c421a7..94c0853b23 100644 --- a/addons/map/functions/fnc_simulateMapLight.sqf +++ b/addons/map/functions/fnc_simulateMapLight.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * [CONTROL, 5, [5, 4, 6], []] call ACE_map_fnc_simulateMapLights + * * Public: No */ diff --git a/addons/map/functions/fnc_updateMapEffects.sqf b/addons/map/functions/fnc_updateMapEffects.sqf index 23e97114a8..e8ebcbd884 100644 --- a/addons/map/functions/fnc_updateMapEffects.sqf +++ b/addons/map/functions/fnc_updateMapEffects.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * call ACE_map_fnc_updateMapEffects + * * Public: No */ diff --git a/addons/map/stringtable.xml b/addons/map/stringtable.xml index 2c0349dc0d..9108f088bf 100644 --- a/addons/map/stringtable.xml +++ b/addons/map/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -14,6 +14,8 @@ Mappa 地図 지도 + 地图 + 地圖 Map illumination? @@ -28,6 +30,8 @@ Illuminazione Mappa? 地図に照明? 지도에 조명? + 地图照明? + 地圖照明? Simulate map lighting based on ambient lighting and player's items? @@ -41,6 +45,8 @@ Simula illuminazione della mappa in base alla luce ambientale e agli oggetti del giocatore? 環境光やプレイヤーのアイテムにより、地図へ光のシミュレーションをおこないますか? 주변 환경및 플레이어 조명에 의한 빛 변화를 지도에 반영할까요? + 透过环境光与玩家的物品来决定地图亮度? + 透過環境光與玩家的物品來決定地圖亮度? Map flashlight glow? @@ -54,6 +60,8 @@ Lumière de la lampe de carte ? 地図をフラッシュライトで照らしますか? 지도 조명이 빛이 납니까? + 增加地图亮度? + 增加地圖亮度? Add external glow to players who use flashlight on map? @@ -67,6 +75,8 @@ Aggiungi luce esterna a giocatori che usano la torcia in mappa? プレイヤが地図上でフラッシュライトを使うと、照らすようにしますか? 지도에 불빛을 비치는 플레이어를 조금 더 밝게 합니까? + 当玩家拥有手电筒时, 增加地图亮度? + 當玩家擁有手電筒時, 增加地圖亮度? Map shake? @@ -81,6 +91,8 @@ Scuoti la mappa? 地図を揺らしますか? 지도 흔들림? + 地图震动? + 地圖震動? Make map shake when walking? @@ -95,6 +107,8 @@ Far scuotere la mappa mentre cammini? 歩いているときは地図を揺らしますか? 걸을때 지도보면 흔들리게 합니까? + 走路时让地图有震动的感觉? + 走路時讓地圖有震動的感覺? Limit map zoom? @@ -109,6 +123,8 @@ Limita lo zoom in mappa? 地図の拡大を制限しますか? 지도 확대 제한? + 限制地图缩放倍率? + 限制地圖縮放倍率? Limit the amount of zoom available for the map? @@ -123,6 +139,8 @@ Limita l'ammontare di zoom disponibile per la mappa? 地図上で利用できる拡大倍率を制限しますか? 지도 확대에 제한을 둡니까? + 限制地图上可允许缩放的倍率? + 限制地圖上可允許縮放的倍率? Show cursor coordinates? @@ -137,6 +155,8 @@ Mostra coordinate sul cursore? カーソル先で座標を表示しますか? 커서에 좌표를 보이게 합니까? + 显示游标的座标? + 顯示游標的座標? Show the grid coordinates on the mouse pointer? @@ -151,6 +171,8 @@ Mostra la griglia coordinate sul cursore mouse? カーソルに合わせた先の地図座標を表示しますか? 지도에서 커서 옆에 좌표가 뜨게 합니까? + 显示滑鼠游标所在的网格座标? + 顯示滑鼠游標所在的網格座標? This module allows you to customize the map screen. @@ -165,6 +187,8 @@ Questo modulo ti permette di customizzare lo schermo della mappa. モジュールは地図画面をカスタマイズできます。 이 모듈은 지도 화면을 임의로 설정할 수 있게 해줍니다. + 此模块允许自定地图的相关效果. + 此模塊允許自定地圖的相關效果. Blue Force Tracking @@ -179,6 +203,8 @@ Blue Force Tracking ブルー フォース トラッキング GPS피아식별기 + 显示蓝方踪迹 + 顯示藍方蹤跡 BFT Enable @@ -193,6 +219,8 @@ Abilita BFT BFT を有効化 GPS피아식별기 켜기 + 蓝方踪迹启用 + 藍方蹤跡啟用 Enable Blue Force Tracking. Default: No @@ -207,6 +235,8 @@ Abilita Blue Force Tracking. Default: No ブルー フォース トラッキングを有効化します。標準:無効 GPS피아식별기 켭니다. 기본설정: 아니요 + 启用显示蓝方踪迹. 预设: 否 + 啟用顯示藍方蹤跡. 預設: 否 Interval @@ -221,6 +251,8 @@ Intervallo 間隔 간격 + 间隔 + 間隔 How often the markers should be refreshed (in seconds) @@ -235,6 +267,8 @@ Quanto spesso vengono aggiornati i marker (in secondi) マーカが再描画される間隔を設定できます(秒) 몇 초마다 마커를 새로 갱신합니까? + 设定每多少时间重新标示出单位位置 (秒) + 設定每多少時間重新標示出單位位置 (秒) Hide AI groups? @@ -249,6 +283,8 @@ Nascondere gruppi IA? AI グループを非表示にしますか? 인공지능 그룹을 숨깁니까? + 隐藏AI小队? + 隱藏AI小隊? Hide markers for 'AI only' groups? @@ -263,6 +299,8 @@ Nascondi markers per gruppi di sole IA? 'AI のみ'グループのマーカを隠しますか? 인공지능만 있는 그룹의 마커를 숨깁니까? + 隐藏'AI小队'的踪迹? + 隱藏'AI小隊'的蹤跡? Show player names? @@ -277,6 +315,8 @@ Mostra i nomi dei giocatori? プレイヤ名を表示しますか? 플레이어 이름을 표시합니까? + 显示玩家名称? + 顯示玩家名稱? Show individual player names? @@ -291,6 +331,8 @@ Mostra i nomi dei giocatori singoli? プレイヤの名前を表示しますか? 각 플레이어의 이름을 표시합니까? + 显示玩家的个别名称? + 顯示玩家的個別名稱? This module allows the tracking of allied units with BFT map markers. @@ -305,6 +347,8 @@ Questo modulo permette il tracciamento di unità alleate con i marker BFT in mappa モジュールは BFT マップ マーカとともに、同勢力ユニットの追跡を許可します。 이 모듈은 아군을 지도상에서 추적할 수 있게 해줍니다. + 此模块将使你能在地图上看见友方单位的踪迹. + 此模塊將使你能在地圖上看見友方單位的蹤跡. Flashlights @@ -318,6 +362,8 @@ Torcia フラッシュライト 손전등 + 手电筒 + 手電筒 NVG @@ -331,6 +377,8 @@ NVG 夜間暗視装置 야투경 + 夜视镜 + 夜視鏡 On @@ -344,6 +392,8 @@ Acceso 起動 켜기 + 开启 + 開啟 Off @@ -357,6 +407,8 @@ Spento 停止 끄기 + 关闭 + 關閉 Increase Brightness @@ -370,6 +422,8 @@ Aumenta Luminosità 感度を上げる 밝기 올리기 + 增加亮度 + 增加亮度 Decrease Brightness @@ -383,6 +437,8 @@ Diminuisci Luminosità 感度を下げる 밝기 내리기 + 降低亮度 + 降低亮度 Turn On %1 @@ -397,6 +453,8 @@ Активировать %1 %1 を点ける %1 켜기 + 开启%1 + 開啟%1 Turn Off %1 @@ -411,6 +469,8 @@ Деактивировать %1 %1 を消す %1 끄기 + 关闭%1 + 關閉%1 Set Channel At Start @@ -424,6 +484,8 @@ Mettre un canal par défaut 開始時のチャンネルを決定 시작시 채널 + 设定游戏开始时的聊天频道 + 設定遊戲開始時的聊天頻道 Change the starting marker channel at mission start @@ -437,6 +499,8 @@ Change le canal de communication par défaut au début de la mission. ミッション開始時にあらかじめ設定されているマーカ チャンネルを変更します 미션시작시 마커채널을 변경합니다 + 更改任务启动时的聊天频道 + 更改任務啟動時的聊天頻道 Disable BFT @@ -444,6 +508,10 @@ BFTを無効化 GPS피아식별기 끄기 Wyłącz BFT + Désactive le BFT + Disablita BFT + 关闭友军踪迹 + 關閉友軍蹤跡 Always disable Blue Force Tracking for this group. @@ -451,6 +519,10 @@ このグループへのブルー フォース トラッキングを常に無効化します。 이 그룹에 한해 GPS피아식별기를 항상 끕니다. Zawsze wyłączaj Blue Force Tracking dla tej grupy. + Désactive en permanence le Blue Force Tracking pour ce groupe. + Disabilita sempre il Blue Force Tracking per questo gruppo. + 对此小队永远关闭友军踪迹显示. + 對此小隊永遠關閉友軍蹤跡顯示. - \ No newline at end of file + diff --git a/addons/map_gestures/functions/fnc_addGroupColorMapping.sqf b/addons/map_gestures/functions/fnc_addGroupColorMapping.sqf index 949aa60da1..e02403b323 100644 --- a/addons/map_gestures/functions/fnc_addGroupColorMapping.sqf +++ b/addons/map_gestures/functions/fnc_addGroupColorMapping.sqf @@ -24,6 +24,7 @@ TRACE_3("params",_group,_leadColor,_unitColor); if (_group isEqualType grpNull) then {_group = groupID _group}; +if (_group == "") exitWith {ERROR("Group ID is blank, which is not valid.")}; if (!([_leadColor] call FUNC(isValidColorArray))) exitWith {ERROR("leadColor is not a valid color array.")}; if (!([_unitColor] call FUNC(isValidColorArray))) exitWith {ERROR("color is not a valid color array.")}; diff --git a/addons/map_gestures/functions/fnc_receiverInit.sqf b/addons/map_gestures/functions/fnc_receiverInit.sqf index b132dad1d7..9386523340 100644 --- a/addons/map_gestures/functions/fnc_receiverInit.sqf +++ b/addons/map_gestures/functions/fnc_receiverInit.sqf @@ -22,4 +22,4 @@ if (!isNil QGVAR(DrawMapHandlerID)) then { (findDisplay 12 displayCtrl 51) ctrlRemoveEventHandler ["Draw", GVAR(DrawMapHandlerID)]; GVAR(DrawMapHandlerID) = nil; }; -GVAR(DrawMapHandlerID) = findDisplay 12 displayCtrl 51 ctrlAddEventHandler ["Draw", FUNC(drawMapGestures)]; +GVAR(DrawMapHandlerID) = findDisplay 12 displayCtrl 51 ctrlAddEventHandler ["Draw", {call FUNC(drawMapGestures)}]; diff --git a/addons/map_gestures/functions/fnc_transmitterInit.sqf b/addons/map_gestures/functions/fnc_transmitterInit.sqf index a75ebb6e34..3c363d6f04 100644 --- a/addons/map_gestures/functions/fnc_transmitterInit.sqf +++ b/addons/map_gestures/functions/fnc_transmitterInit.sqf @@ -26,7 +26,7 @@ if (!isNil QGVAR(MouseMoveHandlerID)) then { }; GVAR(MouseMoveHandlerID) = _mapCtrl ctrlAddEventHandler ["MouseMoving", { // Don't transmit any data if we're using the map tools - if (!GVAR(EnableTransmit) || EGVAR(maptools,mapTool_isDragging) || EGVAR(maptools,mapTool_isRotating)) exitWith {}; + if (!GVAR(EnableTransmit) || {(["ace_maptools"] call EFUNC(common,isModLoaded)) && {EGVAR(maptools,mapTool_isDragging) || EGVAR(maptools,mapTool_isRotating)}}) exitWith {}; params ["_control", "_posX", "_posY"]; diff --git a/addons/map_gestures/stringtable.xml b/addons/map_gestures/stringtable.xml index fc543116eb..feebdb7a08 100644 --- a/addons/map_gestures/stringtable.xml +++ b/addons/map_gestures/stringtable.xml @@ -13,6 +13,8 @@ Gestes de carte マップ ジェスチャ 지도 신호 + 地图指示器 + 地圖指示器 Enabled @@ -26,6 +28,8 @@ Activer 有効化 켜기 + 启用 + 啟用 Map Gesture Max Range @@ -39,6 +43,8 @@ Distance max. des gestes de carte マップ ジェスチャの最大範囲 지도 신호 최대 거리 + 地图指示器最大范围 + 地圖指示器最大範圍 Max range between players to show the map gesture indicator [default: 7 meters] @@ -52,6 +58,8 @@ Distance max. entre les joueurs pour montrer le pointage sur carte. (Défaut : 7m) プレイヤのマップ ジェスチャによる表示範囲を設定します [標準:7 メートル] 플레이어간에 지도 신호 표시거리를 설정합니다. [기본: 7 미터] + 设定地图指示器显示的最大范围距离 [预设: 7公尺] + 設定地圖指示器顯示的最大範圍距離 [預設: 7公尺] Lead Default Color @@ -65,6 +73,8 @@ Couleur principale de commandement. リーダー用標準の色 리더 기본 색상 + 队长预设颜色 + 隊長預設顏色 Fallback Color value for group leaders when there is no group setting. [Module: leave blank to not force on clients] @@ -77,6 +87,8 @@ Couleur par défaut pour les chefs de groupe quand il n'y a pas de réglage pour le groupe. (Module : laisser vide pour ne pas forcer chez les clients) グループ設定が存在しない場合に、グループ リーダーへ設定される色の値を設定します。[モジュール:空の場合はクライアントへ強制しません] 그룹 설정이 없는 경우 리더의 예비 색상 값입니다. [모듈: 클라이언트에서 강체치 않기 위해 공백으로 비워둘것] + 当没有设定小队颜色时, 此功能会定义队长的指示器颜色. [模块: 此栏留空来保持预设颜色] + 當沒有設定小隊顏色時, 此功能會定義隊長的指示器顏色. [模塊: 此欄留空來保持預設顏色] Default Color @@ -90,6 +102,8 @@ Couleur par défaut 標準色 기본 색상 + 预设颜色 + 預設顏色 Fallback Color value when there is no group setting. [Module: leave blank to not force on clients] @@ -102,6 +116,8 @@ Couleur par défaut quand il n'y a pas de réglage pour le groupe. (Module : laisser vide pour ne pas forcer chez les clients) グループ設定が存在しない場合に、グループ リーダーへ設定される色の値を設定します。[モジュール:空の場合はクライアントへ強制しません] 그룹 설정이 없을 경우의 예비 색상입니다. [모듈: 클라이언트에서 강체치 않기 위해 공백으로 비워둘것] + 当没有设定小队颜色时, 此功能会定义玩家的指示器颜色. [模块: 此栏留空来保持预设颜色] + 當沒有設定小隊顏色時, 此功能會定義玩家的指示器顏色. [模塊: 此欄留空來保持預設顏色] Lead Color @@ -115,6 +131,8 @@ Couleur de commandement リーダー用の色 리더 색상 + 队长颜色 + 隊長顏色 Color value for group leaders of groups synced with this module. @@ -127,6 +145,8 @@ Couleur pour les chefs de groupe des groupes synchronisés avec le module. モジュールで同期されたグループのリーダー用に色の値を決定します。 그룹이 이 모듈에 동기화 됐을때의 리더 색상입니다. + 改变与此同步小队队长的指示器颜色. + 改變與此同步小隊隊長的指示器顏色. Color @@ -140,6 +160,8 @@ Couleur 색상 + 颜色 + 顏色 Color value for group members of groups synced with this module. @@ -152,6 +174,8 @@ Couleur pour les membres du groupe synchronisé avec ce module. モジュールで同期されたグループのメンバ用に色の値を決定します。 그룹이 이 모듈에 동기화 됐을때의 멤버 색상입니다. + 改变与此同步小队队员的指示器颜色 + 改變與此同步小隊隊員的指示器顏色 Map Gestures - Group Settings @@ -165,6 +189,8 @@ Gestes de carte - réglages de groupe マップ ジェスチャ - グループ設定 지도 신호 - 그룹 설정 + 地图指示器 - 队伍设定 + 地圖指示器 - 隊伍設定 Update Interval @@ -178,6 +204,8 @@ Intervalle de mise à jour 更新間隔 갱신 간격 + 更新间隔 + 更新間隔 Time between data updates. @@ -191,6 +219,8 @@ Temps entre les actualisations de données データの更新間隔 데이터 갱신 간격 + 定义每次更新数据的时间. + 定義每次更新數據的時間. Enables the Map Gestures. @@ -204,6 +234,8 @@ Activer les gestes de carte マップ ジェスチャを有効化 지도 신호 활성화 + 启用地图指示器 + 啟用地圖指示器 Name Text Color @@ -217,6 +249,8 @@ Couleur du texte du nom 名前への色 글 색상 명칭 + 名称文字颜色 + 名稱文字顏色 Color of the name tag text besides the map gestures mark. @@ -229,6 +263,8 @@ Couleur des tags de nom à côté de marqueur de pointage sur carte. マップ ジェスチャに表示される、名前の色を決定します。 지도 색상에 표시되는 이름의 색상을 결정합니다. + 定义名称文字颜色. 使其与地图指示器颜色有所区别. + 定義名稱文字顏色. 使其與地圖指示器顏色有所區別. Map Gestures @@ -242,6 +278,8 @@ Gestes de carte マップ ジェスチャ 지도 신호 + 地图指示器 + 地圖指示器 diff --git a/addons/maptools/MapGpsUI.hpp b/addons/maptools/MapGpsUI.hpp index c5b230f163..cd0a418465 100644 --- a/addons/maptools/MapGpsUI.hpp +++ b/addons/maptools/MapGpsUI.hpp @@ -40,7 +40,8 @@ class RscTitles { colorBackground[] = {0,0,0,0}; colorText[] = {0.247,0.251,0.157,1}; shadowColo[] = {0,0,0,0}; - font = "EtelkaNarrowMediumPro"; + // EtelkaNarrowMediumPro broke with 1.72 hotfix, can revert back to that font if fixed (following 3 uses of PuristaSemibold) + font = "PuristaSemibold"; shadow = 0; sizeEx = 0.042; }; @@ -55,7 +56,7 @@ class RscTitles { colorBackground[] = {0,0,0,0}; colorText[] = {0.247,0.251,0.157,1}; shadowColo[] = {0,0,0,0}; - font = "EtelkaNarrowMediumPro"; + font = "PuristaSemibold"; shadow = 0; sizeEx = 0.042; }; @@ -70,7 +71,7 @@ class RscTitles { colorBackground[] = {0,0,0,0}; colorText[] = {0.247,0.251,0.157,1}; shadowColo[] = {0,0,0,0}; - font = "EtelkaNarrowMediumPro"; + font = "PuristaSemibold"; shadow = 0; sizeEx = 0.1; }; diff --git a/addons/maptools/functions/fnc_calculateMapScale.sqf b/addons/maptools/functions/fnc_calculateMapScale.sqf index 926ed558fe..d5148893d5 100644 --- a/addons/maptools/functions/fnc_calculateMapScale.sqf +++ b/addons/maptools/functions/fnc_calculateMapScale.sqf @@ -6,7 +6,10 @@ * None * * Return Value: - * No + * None + * + * Example: + * call ACE_maptools_fnc_calculateMapScale * * Public: No */ diff --git a/addons/maptools/functions/fnc_canUseMapGPS.sqf b/addons/maptools/functions/fnc_canUseMapGPS.sqf index a327c2bc8d..7333c1f9e0 100644 --- a/addons/maptools/functions/fnc_canUseMapGPS.sqf +++ b/addons/maptools/functions/fnc_canUseMapGPS.sqf @@ -6,7 +6,10 @@ * None * * Return Value: - * + * Boolean + * + * Example: + * call ACE_map_fnc_canUseMapGPS * * Public: No */ diff --git a/addons/maptools/functions/fnc_canUseMapTools.sqf b/addons/maptools/functions/fnc_canUseMapTools.sqf index 8c16425082..bc3c7fbb8a 100644 --- a/addons/maptools/functions/fnc_canUseMapTools.sqf +++ b/addons/maptools/functions/fnc_canUseMapTools.sqf @@ -6,7 +6,10 @@ * None * * Return Value: - * + * Boolean + * + * Example: + * call ACE_maptools_fnc_canUseMapTools * * Public: No */ diff --git a/addons/maptools/functions/fnc_drawLinesOnRoamer.sqf b/addons/maptools/functions/fnc_drawLinesOnRoamer.sqf index 6a900c335b..ba9363c68f 100644 --- a/addons/maptools/functions/fnc_drawLinesOnRoamer.sqf +++ b/addons/maptools/functions/fnc_drawLinesOnRoamer.sqf @@ -7,7 +7,7 @@ * 1: Roamer Width * * Return Value: - * Nothing + * None * * Example: * [map, 300] call ace_maptools_fnc_drawLinesOnRoamer diff --git a/addons/maptools/functions/fnc_handleMouseButton.sqf b/addons/maptools/functions/fnc_handleMouseButton.sqf index 7750ef0965..143289447e 100644 --- a/addons/maptools/functions/fnc_handleMouseButton.sqf +++ b/addons/maptools/functions/fnc_handleMouseButton.sqf @@ -3,12 +3,18 @@ * Handle mouse buttons. * * Arguments: - * 0: 1 if mouse down down, 0 if mouse button up (Number) - * 1: Parameters of the mouse button event + * 0: 1 if mouse down down, 0 if mouse button up + * 1: Parameters of the mouse button event * * Return Value: - * Boolean, true if event was handled + * true if event was handled + * + * Example: + * [0, [array]] call ACE_maptools_fnc_handleMouseButton + * + * Public: No */ + #include "script_component.hpp" params ["_dir", "_params"]; @@ -26,16 +32,16 @@ if ((_button == 0) && {GVAR(freedrawing) || _ctrlKey}) exitWith { private _markerName = allMapMarkers select (count allMapMarkers - 1); private _markerPos = getMarkerPos _markerName; private _distanceCheck = _markerPos distance2d GVAR(drawPosStart); - + TRACE_3("Line Drawn",_markerName,_markerPos,_distanceCheck); - + if (_distanceCheck > 1) exitWith {WARNING("Wrong Marker!");}; if ((count GVAR(freeDrawingData)) != 3) exitWith {TRACE_1("never touched roamer",GVAR(freeDrawingData));}; - + GVAR(freeDrawingData) params ["", "_startStraightPos", "_endStraightPos"]; _startStraightPos set [2, 0]; - _endStraightPos set [2, 0]; - + _endStraightPos set [2, 0]; + // Convert marker to rectangle and change it's pos/size/dir _markerName setMarkerShape "RECTANGLE"; diff --git a/addons/maptools/functions/fnc_handleMouseMove.sqf b/addons/maptools/functions/fnc_handleMouseMove.sqf index a52163ba32..a7c48cfed4 100644 --- a/addons/maptools/functions/fnc_handleMouseMove.sqf +++ b/addons/maptools/functions/fnc_handleMouseMove.sqf @@ -3,11 +3,16 @@ * Handle mouse movement over the map tool. * * Arguments: - * 0: Map Control - * 1: Mouse position on screen coordinates + * 0: Map Control + * 1: Mouse position on screen coordinates * * Return Value: - * Boolean, true if event was handled + * true if event was handled + * + * Example: + * [CONTROL, [0, 5, 1]] call ACE_maptools_fnc_handleMouseMove + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/maptools/functions/fnc_isInsideMapTool.sqf b/addons/maptools/functions/fnc_isInsideMapTool.sqf index 216a2a675a..c54f831e8f 100644 --- a/addons/maptools/functions/fnc_isInsideMapTool.sqf +++ b/addons/maptools/functions/fnc_isInsideMapTool.sqf @@ -7,8 +7,14 @@ * 1: y Position (in meters) * * Return Value: - * Boolean + * Boolean + * + * Example: + * [0, 5] call ACE_maptools_fnc_isInsideMapTool + * + * Public: No */ + #include "script_component.hpp" if (GVAR(mapTool_Shown) == 0) exitWith {false}; diff --git a/addons/maptools/functions/fnc_openMapGps.sqf b/addons/maptools/functions/fnc_openMapGps.sqf index c3e2a8bfee..7e8d923661 100644 --- a/addons/maptools/functions/fnc_openMapGps.sqf +++ b/addons/maptools/functions/fnc_openMapGps.sqf @@ -6,7 +6,10 @@ * 0: Open GPS? * * Return Value: - * Nothing + * None + * + * Example: + * [true] call ACE_maptools_fnc_openMapGps * * Public: No */ diff --git a/addons/maptools/functions/fnc_openMapGpsUpdate.sqf b/addons/maptools/functions/fnc_openMapGpsUpdate.sqf index 719bf37763..63ecae81ec 100644 --- a/addons/maptools/functions/fnc_openMapGpsUpdate.sqf +++ b/addons/maptools/functions/fnc_openMapGpsUpdate.sqf @@ -1,5 +1,18 @@ -//esteldunedain -//update gps display +/* + * Author: esteldunedain + * update gps display + * + * Arguments: + * Something + * + * Return Value: + * None + * + * Example: + * call ACE_maptools_fnc_openMapGpsUpdate + * + * Public: No + */ #include "script_component.hpp" diff --git a/addons/maptools/functions/fnc_updateMapToolMarkers.sqf b/addons/maptools/functions/fnc_updateMapToolMarkers.sqf index 864ef33844..026a4037d1 100644 --- a/addons/maptools/functions/fnc_updateMapToolMarkers.sqf +++ b/addons/maptools/functions/fnc_updateMapToolMarkers.sqf @@ -6,7 +6,10 @@ * 0: The Map * * Return Value: - * Nothing + * None + * + * Example: + * [CONTROL] call ACE_maptools_fnc_updateMapToolMarkers * * Public: No */ diff --git a/addons/maptools/stringtable.xml b/addons/maptools/stringtable.xml index f22d3b7ed4..20397d70eb 100644 --- a/addons/maptools/stringtable.xml +++ b/addons/maptools/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -14,6 +14,8 @@ Инструменты карты マップ ツール 독도용 도구 + 地图工具 + 地圖工具 The Map Tools allow you to measure distances and angles on the map. @@ -28,6 +30,8 @@ Картографические инструменты позволяют измерять расстояния и углы на карте. マップ ツールは地図上で距離や角度を測れます。 독도용 도구는 지도상에서 거리나 각도를 잴 수 있게 해줍니다. + 地图工具能够让你在地图上测量距离与角度 + 地圖工具能夠讓你在地圖上測量距離與角度 Map Tools @@ -42,6 +46,8 @@ Инструменты карты マップ ツール 독도용 도구 + 地图工具 + 地圖工具 Hide Map Tool @@ -56,6 +62,8 @@ Скрыть инструменты マップ ツールを隠す 독도용 도구 숨기기 + 隐藏地图工具 + 隱藏地圖工具 Show Normal Map Tool @@ -70,6 +78,8 @@ Показать инструменты (средн. размер) マップ ツールを表示する 보통 독도용 도구로 보기 + 显示地图工具 + 顯示地圖工具 Show Small Map Tool @@ -84,6 +94,8 @@ Показать инструменты (малый размер) 小さいマップ ツールを表示する 작은 독도용 도구로 보기 + 显示小的地图工具 + 顯示小的地圖工具 Align Map Tool to North @@ -98,6 +110,8 @@ Выровнять инструменты на север マップ ツールを北に合わせる 독도용 도구를 북쪽으로 정렬 + 地图工具对准北方 + 地圖工具對準北方 Align Map Tool to Compass @@ -112,6 +126,8 @@ Выровнять инструменты по компасу マップ ツールを方位磁石に合わせる 독도용 도구를 나침반에 정렬 + 地图工具对准指北针 + 地圖工具對準指北針 Show GPS on Map @@ -126,6 +142,8 @@ Показать GPS на карте 地図上に GPS を表示する GPS를 지도상에 꺼내기 + 在地图上显示GPS + 在地圖上顯示GPS Hide GPS on Map @@ -140,6 +158,8 @@ Скрыть GPS на карте 地図上から GPS を隠す GPS를 지도상에서 숨기기 + 在地图上隐藏GPS + 在地圖上隱藏GPS Direction: %1° @@ -154,6 +174,8 @@ Direção: %1 方位:%1° 방위: %1° + 方位: %1° + 方位: %1° Rotate Map Tools Key @@ -163,6 +185,9 @@ Klawisz obrotu narzędzi nawigacyjnych Taste zum Drehen des Kartenwerkzeugs 독도용 도구 돌리기 키 + Ruota Strumenti di Mappatura + 选转地图工具的按键 + 選轉地圖工具的按鍵 Modifier key to allow rotating map tools @@ -172,6 +197,9 @@ Modyfikator pozwalający na obracanie narzędzi nawigacyjnych Steuerungstaste, um Drehung des Kartenwerkzeugs zu ermöglichen. 독도용 도구를 돌리기 위한 키를 변경할 수 있습니다. + Tasto modifica per consentire strumenti di mappatura rotanti + 修改旋转地图工具的按键 + 修改旋轉地圖工具的按鍵 Draw straight lines with maptools @@ -179,6 +207,10 @@ Zeichne gerade Linien mit dem Kartenwerkzeug 독도용 도구로 직선 그리기 Rysuj proste linie przy użyciu narzędzi nawigacyjnych + Tracer des lignes droites + Disegna linee dritte con gli strumenti di mappatura + 使用地图工具来绘制直线 + 使用地圖工具來繪製直線 Draw on the edge of maptools to draw straight lines. Note: Must hover at midpoint to delete. @@ -186,6 +218,10 @@ Zeichne gerade Linien am Rand des Kartenwerkzeugs. Hinweis: zum Löschen über den Mittelpunkt der Linie fahren 독도용 도구 가장자리에 직선을 그립니다. 주의: 삭제하기 위해선 선의 중앙에 가져다 대십시요 Przeciągnij po krawędzi narzędzi nawigacyjnych by narysować prostą linię. Uwaga: aby usunąć linię - nalezy ustawić kursor nad jej środkiem. + Utiliser le bord des outils de navigation pour tracer des lignes droites. Note: l'on doit survoler le milieu du trait pour pouvoir le supprimer. + Disegna sul bordo degli strumenti di mappatura per disegnare linee dritte. Nota: Deve spostarsi al centro per essere cancellato. + 使用地图工具的边缘来绘制直线. 备注: 要删除直线时, 请把滑鼠移动到该线条的中央即可删除该线. + 使用地圖工具的邊緣來繪製直線. 備註: 要刪除直線時, 請把滑鼠移動到該線條的中央即可刪除該線. - \ No newline at end of file + diff --git a/addons/markers/functions/fnc_getEnabledChannels.sqf b/addons/markers/functions/fnc_getEnabledChannels.sqf index 9a64ff06d4..eb4bcfd5ce 100644 --- a/addons/markers/functions/fnc_getEnabledChannels.sqf +++ b/addons/markers/functions/fnc_getEnabledChannels.sqf @@ -8,6 +8,9 @@ * Return Value: * Enabled Channels * + * Example: + * [false] call ACE_markers_fnc_getEnabledChannels + * * Public: No */ #include "script_component.hpp" diff --git a/addons/markers/functions/fnc_onLBSelChangedChannel.sqf b/addons/markers/functions/fnc_onLBSelChangedChannel.sqf index f63c4e5cf4..8c7ac11046 100644 --- a/addons/markers/functions/fnc_onLBSelChangedChannel.sqf +++ b/addons/markers/functions/fnc_onLBSelChangedChannel.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [CONTROL, 5] call ACE_markers_fnc_onLBSelChangedChannel + * * Public: No */ #include "script_component.hpp" diff --git a/addons/markers/stringtable.xml b/addons/markers/stringtable.xml index f9d77f80ca..1c87546a5e 100644 --- a/addons/markers/stringtable.xml +++ b/addons/markers/stringtable.xml @@ -4,7 +4,7 @@ Direction: %1° Drehung: %1° - Direction: %1° + Direction : %1° Směr: %1° Kierunek: %1° Dirección: %1° @@ -14,6 +14,8 @@ Direção %1 方位:%1° 방위: %1° + 方位: %1° + 方位: %1° diff --git a/addons/medical/CfgEden.hpp b/addons/medical/CfgEden.hpp index 9579f29c61..bebfdb9549 100644 --- a/addons/medical/CfgEden.hpp +++ b/addons/medical/CfgEden.hpp @@ -9,8 +9,8 @@ class Cfg3DEN { }; }; class GVAR(isMedicControl): Title { - attributeLoad = "(_this controlsGroupCtrl 100) lbsetcursel (((_value + 1) min 3) max 0);"; - attributeSave = "(missionnamespace getvariable ['ace_isMedic_temp',0]) - 1;"; + attributeLoad = "(_this controlsGroupCtrl 100) lbSetCurSel (((_value + 1) min 3) max 0);"; + attributeSave = "(lbCurSel (_this controlsGroupCtrl 100)) - 1"; class Controls: Controls { class Title: Title{}; class Value: ctrlToolbox { @@ -22,7 +22,6 @@ class Cfg3DEN { rows = 1; columns = 4; strings[] = {"$STR_3DEN_Attributes_Lock_Default_text", CSTRING(AssignMedicRoles_role_none), CSTRING(AssignMedicRoles_role_medic), CSTRING(AssignMedicRoles_role_doctorShort)}; - onToolboxSelChanged = "missionnamespace setvariable ['ace_isMedic_temp',_this select 1];"; }; }; }; @@ -36,7 +35,7 @@ class Cfg3DEN { control = QGVAR(isMedicControl); displayName = CSTRING(AssignMedicRoles_role_DisplayName); tooltip = CSTRING(Attributes_isMedic_Description); - expression = QUOTE(if (_value != -1) then {_this setVariable [ARR_3(QUOTE(QGVAR(medicClass)),_value, true)];};); + expression = QUOTE(if (_value > -1) then {_this setVariable [ARR_3(QUOTE(QGVAR(medicClass)),_value, true)];};); typeName = "NUMBER"; condition = "objectBrain"; defaultValue = "-1"; diff --git a/addons/medical/XEH_preInit.sqf b/addons/medical/XEH_preInit.sqf index 45a2d2b6b7..6d09e9427c 100644 --- a/addons/medical/XEH_preInit.sqf +++ b/addons/medical/XEH_preInit.sqf @@ -50,6 +50,9 @@ addMissionEventHandler ["Loaded",{ TRACE_1("preload done",_this); }, [_x]] call CBA_fnc_waitUntilAndExecute; } forEach GVAR(fixedStatics); + + // Reload configs into extension (handle full game restart) + call FUNC(parseConfigForInjuries); }]; diff --git a/addons/medical/functions/fnc_actionCheckBloodPressure.sqf b/addons/medical/functions/fnc_actionCheckBloodPressure.sqf index 9e66eda263..207e2bb90d 100644 --- a/addons/medical/functions/fnc_actionCheckBloodPressure.sqf +++ b/addons/medical/functions/fnc_actionCheckBloodPressure.sqf @@ -1,16 +1,19 @@ /* -* Author: Glowbal -* Action for checking the blood pressure of the patient -* -* Arguments: -* 0: The medic -* 1: The patient -* -* Return Value: -* None -* -* Public: No -*/ + * Author: Glowbal + * Action for checking the blood pressure of the patient + * + * Arguments: + * 0: The medic + * 1: The patient + * + * Return Value: + * None + * + * Example: + * [bob, kevin] call ACE_medical_fnc_actionCheckBloodPressure + * + * Public: No + */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf b/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf index 184110265a..0497b559b8 100644 --- a/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf +++ b/addons/medical/functions/fnc_actionCheckBloodPressureLocal.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, kevin] call ACE_medical_fnc_actionCheckBloodPressureLocal + * * Public: No */ diff --git a/addons/medical/functions/fnc_actionCheckPulse.sqf b/addons/medical/functions/fnc_actionCheckPulse.sqf index 39f196a0a5..7654f24d78 100644 --- a/addons/medical/functions/fnc_actionCheckPulse.sqf +++ b/addons/medical/functions/fnc_actionCheckPulse.sqf @@ -1,16 +1,19 @@ /* -* Author: Glowbal -* Action for checking the pulse or heart rate of the patient -* -* Arguments: -* 0: The medic -* 1: The patient -* -* Return Value: -* None -* -* Public: No -*/ + * Author: Glowbal + * Action for checking the pulse or heart rate of the patient + * + * Arguments: + * 0: The medic + * 1: The patient + * + * Return Value: + * None + * + * Example: + * [bob, kevin] call ACE_medical_fnc_actionCheckPulse + * + * Public: No + */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_actionCheckPulseLocal.sqf b/addons/medical/functions/fnc_actionCheckPulseLocal.sqf index cf84df075e..7f4fe176da 100644 --- a/addons/medical/functions/fnc_actionCheckPulseLocal.sqf +++ b/addons/medical/functions/fnc_actionCheckPulseLocal.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, kevin] call ACE_medical_fnc_actionCheckPulseLocal + * * Public: No */ diff --git a/addons/medical/functions/fnc_actionCheckResponse.sqf b/addons/medical/functions/fnc_actionCheckResponse.sqf index c47dc5dd64..a56c8191c6 100644 --- a/addons/medical/functions/fnc_actionCheckResponse.sqf +++ b/addons/medical/functions/fnc_actionCheckResponse.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, kevin] call ACE_medical_fnc_actionCheckResponse + * * Public: No */ diff --git a/addons/medical/functions/fnc_actionDiagnose.sqf b/addons/medical/functions/fnc_actionDiagnose.sqf index d86d90db7d..81e73699a8 100644 --- a/addons/medical/functions/fnc_actionDiagnose.sqf +++ b/addons/medical/functions/fnc_actionDiagnose.sqf @@ -1,16 +1,19 @@ /* -* Author: Glowbal -* Action for diagnosing in basic medical -* -* Arguments: -* 0: The medic -* 1: The patient -* -* Return Value: -* None -* -* Public: No -*/ + * Author: Glowbal + * Action for diagnosing in basic medical + * + * Arguments: + * 0: The medic + * 1: The patient + * + * Return Value: + * None + * + * Example: + * [bob, kevin] call ACE_medical_fnc_actionDiagnose + * + * Public: No + */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_actionLoadUnit.sqf b/addons/medical/functions/fnc_actionLoadUnit.sqf index 55a7a9ba51..11a875bf2f 100644 --- a/addons/medical/functions/fnc_actionLoadUnit.sqf +++ b/addons/medical/functions/fnc_actionLoadUnit.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, kevin] call ACE_medical_fnc_actionLoadUnit + * * Public: No */ diff --git a/addons/medical/functions/fnc_actionRemoveTourniquet.sqf b/addons/medical/functions/fnc_actionRemoveTourniquet.sqf index bf0a3e5ae4..e32fd09f69 100644 --- a/addons/medical/functions/fnc_actionRemoveTourniquet.sqf +++ b/addons/medical/functions/fnc_actionRemoveTourniquet.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [bob, kevin, "selection"] call ace_medical_fnc_actionRemoveTourniquet + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_actionUnloadUnit.sqf b/addons/medical/functions/fnc_actionUnloadUnit.sqf index 75fe76bce9..061355fdc8 100644 --- a/addons/medical/functions/fnc_actionUnloadUnit.sqf +++ b/addons/medical/functions/fnc_actionUnloadUnit.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [bob, kevin, false] call ACE_medical_fnc_actionUnloadUnit + * * Public: No */ diff --git a/addons/medical/functions/fnc_addHeartRateAdjustment.sqf b/addons/medical/functions/fnc_addHeartRateAdjustment.sqf index a23ea45023..de3d2c4204 100644 --- a/addons/medical/functions/fnc_addHeartRateAdjustment.sqf +++ b/addons/medical/functions/fnc_addHeartRateAdjustment.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * [bob, 1, 5, {callback}] call ace_medical_fnc_addHeartRateAdjustment + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_addToInjuredCollection.sqf b/addons/medical/functions/fnc_addToInjuredCollection.sqf index 77d2378d0d..2da3ca34a1 100644 --- a/addons/medical/functions/fnc_addToInjuredCollection.sqf +++ b/addons/medical/functions/fnc_addToInjuredCollection.sqf @@ -1,15 +1,19 @@ /* * Author: Glowbal - * Enabled the vitals loop for a unit. + * Enabled the vitals loop for a unit. Deprecated! * * Arguments: * 0: The Unit * - * ReturnValue: + * Return Value: * None * - * Deprecated + * Example: + * [bob] call ACE_medical_fnc_addToInjuredCollection + * + * Public: No */ + #include "script_component.hpp" ACE_DEPRECATED("ace_medical_fnc_addToInjuredCollection","3.7.0","ace_medical_fnc_addVitalLoop"); diff --git a/addons/medical/functions/fnc_addToLog.sqf b/addons/medical/functions/fnc_addToLog.sqf index f0c6b9c622..2a5e77fd1b 100644 --- a/addons/medical/functions/fnc_addToLog.sqf +++ b/addons/medical/functions/fnc_addToLog.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * [bob, "type", "message", [_args]] call ace_medical_fnc_addToLog + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_addToTriageCard.sqf b/addons/medical/functions/fnc_addToTriageCard.sqf index 0e11f38f77..720a435d68 100644 --- a/addons/medical/functions/fnc_addToTriageCard.sqf +++ b/addons/medical/functions/fnc_addToTriageCard.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, "bandage"] call ace_medical_fnc_addToTriageCard + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_addUnconsciousCondition.sqf b/addons/medical/functions/fnc_addUnconsciousCondition.sqf index 195cd557d7..b3b7f7747b 100644 --- a/addons/medical/functions/fnc_addUnconsciousCondition.sqf +++ b/addons/medical/functions/fnc_addUnconsciousCondition.sqf @@ -5,9 +5,12 @@ * Arguments: * 0-N: Code, should return a boolean * - * ReturnValue: + * Return Value: * None * + * Example: + * [[{bob}]] call ace_medical_fnc_addUnconsciousCondition + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_addUnloadPatientActions.sqf b/addons/medical/functions/fnc_addUnloadPatientActions.sqf index 596a536de6..20399c67c1 100644 --- a/addons/medical/functions/fnc_addUnloadPatientActions.sqf +++ b/addons/medical/functions/fnc_addUnloadPatientActions.sqf @@ -10,6 +10,9 @@ * Return Value: * Children actions * + * Example: + * [car, kevin, [params]] call ACE_medical_fnc_addUnloadPatientActions + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_addVitalLoop.sqf b/addons/medical/functions/fnc_addVitalLoop.sqf index aa3d6608d0..4045c188f5 100644 --- a/addons/medical/functions/fnc_addVitalLoop.sqf +++ b/addons/medical/functions/fnc_addVitalLoop.sqf @@ -5,9 +5,12 @@ * Arguments: * 0: The Unit * - * ReturnValue: + * Return Value: * None * + * Example: + * [bob] call ace_medical_fnc_addVitalLoop + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_bodyCleanupLoop.sqf b/addons/medical/functions/fnc_bodyCleanupLoop.sqf index af17ffcd34..9f59f32a25 100644 --- a/addons/medical/functions/fnc_bodyCleanupLoop.sqf +++ b/addons/medical/functions/fnc_bodyCleanupLoop.sqf @@ -5,9 +5,12 @@ * Arguments: * None * - * ReturnValue: + * Return Value: * None * + * Example: + * call ACE_medical_fnc_bodyCleanupLoop + * * Public: No */ diff --git a/addons/medical/functions/fnc_canAccessMedicalEquipment.sqf b/addons/medical/functions/fnc_canAccessMedicalEquipment.sqf index 53707ae65c..d31c03db1d 100644 --- a/addons/medical/functions/fnc_canAccessMedicalEquipment.sqf +++ b/addons/medical/functions/fnc_canAccessMedicalEquipment.sqf @@ -6,9 +6,12 @@ * 0: The caller * 1: The target * - * ReturnValue: + * Return Value: * Can Treat * + * Example: + * [bob, target] call ace_medical_fnc_canAccessMedicalEquipment + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_canTreat.sqf b/addons/medical/functions/fnc_canTreat.sqf index 1c78eb1e43..765df301c7 100644 --- a/addons/medical/functions/fnc_canTreat.sqf +++ b/addons/medical/functions/fnc_canTreat.sqf @@ -8,7 +8,7 @@ * 2: Selection name * 3: ACE_Medical_Treatments Classname * - * ReturnValue: + * Return Value: * Can Treat * * Example: diff --git a/addons/medical/functions/fnc_canTreatCached.sqf b/addons/medical/functions/fnc_canTreatCached.sqf index 76d4897b74..dd7711936f 100644 --- a/addons/medical/functions/fnc_canTreatCached.sqf +++ b/addons/medical/functions/fnc_canTreatCached.sqf @@ -8,9 +8,12 @@ * 2: Selection name * 3: ACE_Medical_Treatments Classname * - * ReturnValue: + * Return Value: * Can Treat * + * Example: + * [bob, kevin, "selection", "classname"] call ACE_medical_fnc_canTreatCached + * * Public: No */ diff --git a/addons/medical/functions/fnc_copyDeadBody.sqf b/addons/medical/functions/fnc_copyDeadBody.sqf index af601d9f33..da7fb16cff 100644 --- a/addons/medical/functions/fnc_copyDeadBody.sqf +++ b/addons/medical/functions/fnc_copyDeadBody.sqf @@ -9,6 +9,9 @@ * Return Value: * Returns the copy of the unit. If no copy could be made, returns the oldBody * + * Example: + * [bob, kevin] call ACE_medical_fnc_copyDeadBody + * * Public: No */ diff --git a/addons/medical/functions/fnc_createLitter.sqf b/addons/medical/functions/fnc_createLitter.sqf index 2780642056..85e852d927 100644 --- a/addons/medical/functions/fnc_createLitter.sqf +++ b/addons/medical/functions/fnc_createLitter.sqf @@ -7,13 +7,16 @@ * 1: The target * 2: The treatment Selection Name * 3: The treatment classname - * 4: ? - * 5: Users of Items + * 4: ? + * 5: Users of Items * 6: Blood Loss on selection (previously called _previousDamage) * * Return Value: * None * + * Example: + * [bob, kevin, "selection", "classname", , , 5] call ACE_medical_fnc_createLitter + * * Public: No */ diff --git a/addons/medical/functions/fnc_determineIfFatal.sqf b/addons/medical/functions/fnc_determineIfFatal.sqf index 9dbbcce9a6..9d1940a80a 100644 --- a/addons/medical/functions/fnc_determineIfFatal.sqf +++ b/addons/medical/functions/fnc_determineIfFatal.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [bob, 2, 5] call ACE_medical_fnc_determineIfFatal + * * Public: No */ #include "script_component.hpp" @@ -30,7 +33,7 @@ if (_part < 0 || _part > 5) exitWith {false}; // Find the correct Damage threshold for unit. private _damageThreshold = [1,1,1]; -if ([_unit] call EFUNC(common,IsPlayer)) then { +if ([_unit, GVAR(remoteControlledAI)] call EFUNC(common,isPlayer)) then { _damageThreshold =_unit getVariable[QGVAR(unitDamageThreshold), [GVAR(playerDamageThreshold), GVAR(playerDamageThreshold), GVAR(playerDamageThreshold) * 1.7]]; } else { _damageThreshold =_unit getVariable[QGVAR(unitDamageThreshold), [GVAR(AIDamageThreshold), GVAR(AIDamageThreshold), GVAR(AIDamageThreshold) * 1.7]]; diff --git a/addons/medical/functions/fnc_displayPatientInformation.sqf b/addons/medical/functions/fnc_displayPatientInformation.sqf index 1489e27288..334db62613 100644 --- a/addons/medical/functions/fnc_displayPatientInformation.sqf +++ b/addons/medical/functions/fnc_displayPatientInformation.sqf @@ -7,9 +7,12 @@ * 1: Show (default: true) * 2: Selection (default: 0) * - * ReturnValue: + * Return Value: * None * + * Example: + * [bob, true, 2] call ACE_medical_fnc_displayPatientInformation + * * Public: No */ @@ -68,7 +71,7 @@ if (_show) then { }; private _totalIvVolume = 0; - private _bloodBags = _unit getVariable [QGVAR(ivBags), []]; + private _bloodBags = _target getVariable [QGVAR(ivBags), []]; { _x params ["_bagVolumeRemaining"]; _totalIvVolume = _totalIvVolume + _bagVolumeRemaining; diff --git a/addons/medical/functions/fnc_displayTriageCard.sqf b/addons/medical/functions/fnc_displayTriageCard.sqf index 1633853214..c273b1d0f0 100644 --- a/addons/medical/functions/fnc_displayTriageCard.sqf +++ b/addons/medical/functions/fnc_displayTriageCard.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, true] call ace_medical_fnc_displayTriageCard + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_dropDownTriageCard.sqf b/addons/medical/functions/fnc_dropDownTriageCard.sqf index c499283446..3e52d3efc5 100644 --- a/addons/medical/functions/fnc_dropDownTriageCard.sqf +++ b/addons/medical/functions/fnc_dropDownTriageCard.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [true] call ace_medical_fnc_dropDownTriageCard + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_getBloodLoss.sqf b/addons/medical/functions/fnc_getBloodLoss.sqf index 8f2f968e99..e584b4cd0d 100644 --- a/addons/medical/functions/fnc_getBloodLoss.sqf +++ b/addons/medical/functions/fnc_getBloodLoss.sqf @@ -5,9 +5,12 @@ * Arguments: * 0: The Unit * - * ReturnValue: + * Return Value: * Total blood loss of unit * + * Example: + * [bob] call ACE_medical_fnc_getBloodLoss + * * Public: No */ diff --git a/addons/medical/functions/fnc_getBloodPressure.sqf b/addons/medical/functions/fnc_getBloodPressure.sqf index 63908eecc7..076d42c286 100644 --- a/addons/medical/functions/fnc_getBloodPressure.sqf +++ b/addons/medical/functions/fnc_getBloodPressure.sqf @@ -5,10 +5,13 @@ * Arguments: * 0: The Unit * - * ReturnValue: + * Return Value: * 0: BloodPressure Low * 1: BloodPressure High * + * Example: + * [bob, kevin] call ACE_medical_fnc_getBloodPressure + * * Public: No */ diff --git a/addons/medical/functions/fnc_getBloodVolumeChange.sqf b/addons/medical/functions/fnc_getBloodVolumeChange.sqf index 396d058140..fcabcd53cf 100644 --- a/addons/medical/functions/fnc_getBloodVolumeChange.sqf +++ b/addons/medical/functions/fnc_getBloodVolumeChange.sqf @@ -6,9 +6,12 @@ * 0: The Unit * 1: Global Sync Values (bloodbags) * - * ReturnValue: + * Return Value: * Blood volume change (in % total) * + * Example: + * [bob, true] call ACE_medical_fnc_getBloodVolumeChange + * * Public: No */ diff --git a/addons/medical/functions/fnc_getCardiacOutput.sqf b/addons/medical/functions/fnc_getCardiacOutput.sqf index 74da98012b..ef6e75cde4 100644 --- a/addons/medical/functions/fnc_getCardiacOutput.sqf +++ b/addons/medical/functions/fnc_getCardiacOutput.sqf @@ -5,9 +5,12 @@ * Arguments: * 0: The Unit * - * ReturnValue: + * Return Value: * Current cardiac output * + * Example: + * [bob] call ACE_medical_fnc_getCardiacOutput + * * Public: No */ diff --git a/addons/medical/functions/fnc_getHeartRateChange.sqf b/addons/medical/functions/fnc_getHeartRateChange.sqf index 4f0b19f80c..ac659622b8 100644 --- a/addons/medical/functions/fnc_getHeartRateChange.sqf +++ b/addons/medical/functions/fnc_getHeartRateChange.sqf @@ -5,9 +5,12 @@ * Arguments: * 0: The Unit * - * ReturnValue: + * Return Value: * Change in heart Rate * + * Example: + * [bob] call ACE_medical_fnc_getHeartRateChange + * * Public: No */ diff --git a/addons/medical/functions/fnc_getTriageStatus.sqf b/addons/medical/functions/fnc_getTriageStatus.sqf index 79af660407..5174b92139 100644 --- a/addons/medical/functions/fnc_getTriageStatus.sqf +++ b/addons/medical/functions/fnc_getTriageStatus.sqf @@ -10,6 +10,9 @@ * 1: Status ID * 2: Color > * + * Example: + * [bob] call ace_medical_fnc_getTriageStatus + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_getTypeOfDamage.sqf b/addons/medical/functions/fnc_getTypeOfDamage.sqf index 56cb8f75ef..b026f41ded 100644 --- a/addons/medical/functions/fnc_getTypeOfDamage.sqf +++ b/addons/medical/functions/fnc_getTypeOfDamage.sqf @@ -5,9 +5,12 @@ * Arguments: * 0: The projectile classname or object * - * ReturnValue: + * Return Value: * Type of damage * + * Example: + * ["bullet"] call ACE_medical_fnc_getTypeOfDamage + * * Public: No */ diff --git a/addons/medical/functions/fnc_getUnconsciousCondition.sqf b/addons/medical/functions/fnc_getUnconsciousCondition.sqf index ad366b5ab2..f5cb4444bc 100644 --- a/addons/medical/functions/fnc_getUnconsciousCondition.sqf +++ b/addons/medical/functions/fnc_getUnconsciousCondition.sqf @@ -5,9 +5,12 @@ * Arguments: * 0: The Unit * - * ReturnValue: + * Return Value: * Should the unit stay unconscious? * + * Example: + * [bob] call ace_medical_fnc_getUnconsciousCondition + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_handleBandageOpening.sqf b/addons/medical/functions/fnc_handleBandageOpening.sqf index ed589e3fd6..6f8f0c05fe 100644 --- a/addons/medical/functions/fnc_handleBandageOpening.sqf +++ b/addons/medical/functions/fnc_handleBandageOpening.sqf @@ -13,6 +13,9 @@ * Return Value: * None * + * Example: + * [bob, 5, 5, 1, [injury], "bandage"] call ACE_medical_fnc_handleBandageOpening + * * Public: No */ diff --git a/addons/medical/functions/fnc_handleCollisionDamage.sqf b/addons/medical/functions/fnc_handleCollisionDamage.sqf index 191a91cb6a..a101f9b1f9 100644 --- a/addons/medical/functions/fnc_handleCollisionDamage.sqf +++ b/addons/medical/functions/fnc_handleCollisionDamage.sqf @@ -1,4 +1,20 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * 0: Unit + * 1: New Damage + * + * Return Value: + * None + * + * Example: + * [bob, 2] call ACE_medical_fnc_handleCollisionDamage + * + * Public: No + */ + #include "script_component.hpp" params ["_unit", "_newDamage"]; diff --git a/addons/medical/functions/fnc_handleCreateLitter.sqf b/addons/medical/functions/fnc_handleCreateLitter.sqf index 2c701a2917..45ea452782 100644 --- a/addons/medical/functions/fnc_handleCreateLitter.sqf +++ b/addons/medical/functions/fnc_handleCreateLitter.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * ["litter", [2, 5, 6], bob] call ACE_medical_fnc_handleCreateLitter + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_handleDamage.sqf b/addons/medical/functions/fnc_handleDamage.sqf index 4d3dc01e31..242b9a7997 100644 --- a/addons/medical/functions/fnc_handleDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage.sqf @@ -1,4 +1,4 @@ - /* +/* * Author: KoffeinFlummi, Glowbal, commy2 * Main HandleDamage EH function. * @@ -7,13 +7,16 @@ * 1: Name Of Hit Selection * 2: Amount Of Damage * 3: Shooter - * 4: Projectile + * 4: Projectile * 5: HitPointIndex (-1 for structural) * 6: Shooter * * Return Value: * Damage To Be Inflicted * + * Example: + * [bob, "leg", 2, kevin, "bullet", -1, kevin] call ACE_medical_fnc_handleDamage + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_handleDamage_advanced.sqf b/addons/medical/functions/fnc_handleDamage_advanced.sqf index 724958dfbc..77d78b94dd 100644 --- a/addons/medical/functions/fnc_handleDamage_advanced.sqf +++ b/addons/medical/functions/fnc_handleDamage_advanced.sqf @@ -15,6 +15,9 @@ * Return Value: * None * + * Example: + * [bob, "leg", 2, kevin, "bullet", 2, kevin, 2] call ACE_medical_fnc_handleDamage_advanced + * * Public: No */ @@ -27,10 +30,10 @@ params ["_unit", "_selectionName", "_amountOfDamage", "_sourceOfDamage", "_typeO if ((_typeOfProjectile == "") && {_newDamage < 0.15} && { _newDamage = _newDamage + (_unit getVariable [QGVAR(trivialDamage), 0]); - if (_newDamage > 0.15) then { + if (_newDamage > 0.15) then { // if the new sum is large enough, reset variable and continue with it added in _unit setVariable [QGVAR(trivialDamage), 0]; - false + false } else { // otherwise just save the new sum into the variable and exit _unit setVariable [QGVAR(trivialDamage), _newDamage]; diff --git a/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf b/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf index b18604f133..561a929133 100644 --- a/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf +++ b/addons/medical/functions/fnc_handleDamage_advancedSetDamage.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ACE_medical_fnc_handleDamage_advancedSetDamage + * * Public: No */ diff --git a/addons/medical/functions/fnc_handleDamage_airway.sqf b/addons/medical/functions/fnc_handleDamage_airway.sqf index fb4c9fe83c..7ff2610de3 100644 --- a/addons/medical/functions/fnc_handleDamage_airway.sqf +++ b/addons/medical/functions/fnc_handleDamage_airway.sqf @@ -12,6 +12,9 @@ * Return Value: * None * + * Example: + * [bob, "leg", 2, kevin, "shot"] call ACE_medical_fnc_airway + * * Public: No */ diff --git a/addons/medical/functions/fnc_handleDamage_caching.sqf b/addons/medical/functions/fnc_handleDamage_caching.sqf index 792f09e75d..c9499361a4 100644 --- a/addons/medical/functions/fnc_handleDamage_caching.sqf +++ b/addons/medical/functions/fnc_handleDamage_caching.sqf @@ -11,7 +11,10 @@ * 5: HitPointIndex (-1 for structural) * * Return Value: - * + * None + * + * Example: + * [bob, "leg", 2, kevin, "bullet", -1] call ACE_medical_fnc_handleDamage_caching * * Public: No */ diff --git a/addons/medical/functions/fnc_handleDamage_fractures.sqf b/addons/medical/functions/fnc_handleDamage_fractures.sqf index 5292781420..1681acbe6d 100644 --- a/addons/medical/functions/fnc_handleDamage_fractures.sqf +++ b/addons/medical/functions/fnc_handleDamage_fractures.sqf @@ -12,6 +12,9 @@ * Return Value: * None * + * Example: + * [bob, "leg", 2, kevin, "shot"] call ACE_medical_fnc_handleDamage_fractures + * * Public: No */ diff --git a/addons/medical/functions/fnc_handleDamage_internalInjuries.sqf b/addons/medical/functions/fnc_handleDamage_internalInjuries.sqf index 8e249eee8f..97499c53c6 100644 --- a/addons/medical/functions/fnc_handleDamage_internalInjuries.sqf +++ b/addons/medical/functions/fnc_handleDamage_internalInjuries.sqf @@ -12,6 +12,9 @@ * Return Value: * None * + * Example: + * [bob, "leg", 2, kevin, "shot"] call ACE_medical_fnc_handleDamage_internalInjuries + * * Public: No */ diff --git a/addons/medical/functions/fnc_handleDamage_wounds.sqf b/addons/medical/functions/fnc_handleDamage_wounds.sqf index 804c933b0e..1ab223d14a 100644 --- a/addons/medical/functions/fnc_handleDamage_wounds.sqf +++ b/addons/medical/functions/fnc_handleDamage_wounds.sqf @@ -12,6 +12,9 @@ * Return Value: * None * + * Example: + * [bob, "leg", 2, kevin, "shot"] call ACE_medical_fnc_handleDamage_wounds + * * Public: No */ diff --git a/addons/medical/functions/fnc_handleDamage_woundsOld.sqf b/addons/medical/functions/fnc_handleDamage_woundsOld.sqf index c6ccd1c2b5..18c4d76d19 100644 --- a/addons/medical/functions/fnc_handleDamage_woundsOld.sqf +++ b/addons/medical/functions/fnc_handleDamage_woundsOld.sqf @@ -12,6 +12,9 @@ * Return Value: * None * + * Example: + * [bob, "leg", 1, kevin, "shot"] call ACE_medical_fnc_handleDamage_woundsOld + * * Public: No */ diff --git a/addons/medical/functions/fnc_handleKilled.sqf b/addons/medical/functions/fnc_handleKilled.sqf index 6ca05a4228..52b79f8760 100644 --- a/addons/medical/functions/fnc_handleKilled.sqf +++ b/addons/medical/functions/fnc_handleKilled.sqf @@ -5,9 +5,12 @@ * Arguments: * 0: The Unit * - * ReturnValue: + * Return Value: * None * + * Example: + * [bob] call ACE_medical_fnc_handleKilled + * * Public: No */ diff --git a/addons/medical/functions/fnc_handleLocal.sqf b/addons/medical/functions/fnc_handleLocal.sqf index 8bf3cd5e69..b9282ef9ee 100644 --- a/addons/medical/functions/fnc_handleLocal.sqf +++ b/addons/medical/functions/fnc_handleLocal.sqf @@ -6,9 +6,12 @@ * 0: The Unit * 1: Is local * - * ReturnValue: + * Return Value: * None * + * Example: + * [bob, true] call ACE_medical_fnc_handleLocal + * * Public: No */ diff --git a/addons/medical/functions/fnc_handleUnitVitals.sqf b/addons/medical/functions/fnc_handleUnitVitals.sqf index 78c1cc9dfe..3bb40dd134 100644 --- a/addons/medical/functions/fnc_handleUnitVitals.sqf +++ b/addons/medical/functions/fnc_handleUnitVitals.sqf @@ -5,8 +5,11 @@ * Arguments: * 0: The Unit * - * ReturnValue: - * + * Return Value: + * None + * + * Example: + * [bob] call ACE_medical_fnc_handleUnitVitals * * Public: No */ diff --git a/addons/medical/functions/fnc_hasItem.sqf b/addons/medical/functions/fnc_hasItem.sqf index cebe02e6c6..c1b84a940a 100644 --- a/addons/medical/functions/fnc_hasItem.sqf +++ b/addons/medical/functions/fnc_hasItem.sqf @@ -7,8 +7,11 @@ * 1: Patient * 2: Item * - * ReturnValue: - * + * Return Value: + * None + * + * Example: + * [bob, patient, "bandage"] call ace_medical_fnc_hasItem * * Public: Yes */ diff --git a/addons/medical/functions/fnc_hasItems.sqf b/addons/medical/functions/fnc_hasItems.sqf index d3e79c0a54..e251f22174 100644 --- a/addons/medical/functions/fnc_hasItems.sqf +++ b/addons/medical/functions/fnc_hasItems.sqf @@ -7,9 +7,12 @@ * 1: Patient * 2: Items > * - * ReturnValue: + * Return Value: * Has the items * + * Example: + * [bob, patient, ["bandage", "morphine"]] call ace_medical_fnc_hasItems + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_hasMedicalEnabled.sqf b/addons/medical/functions/fnc_hasMedicalEnabled.sqf index 5cc5b60aa3..d6150e13a1 100644 --- a/addons/medical/functions/fnc_hasMedicalEnabled.sqf +++ b/addons/medical/functions/fnc_hasMedicalEnabled.sqf @@ -1,4 +1,3 @@ - /* * Author: Glowbal * Check if unit has CMS enabled @@ -14,6 +13,7 @@ * * Public: No */ + #include "script_component.hpp" params ["_unit"]; diff --git a/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf b/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf index abbe512d74..ba4aecefa3 100644 --- a/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf +++ b/addons/medical/functions/fnc_hasTourniquetAppliedTo.sqf @@ -6,9 +6,12 @@ * 0: The Unit * 1: SelectionName * - * ReturnValue: + * Return Value: * Has tourniquet applied * + * Example: + * [bob, "leg"] call ace_medical_fnc_hasTourniquetAppliedTo + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_init.sqf b/addons/medical/functions/fnc_init.sqf index d6db3db392..82b6b435e6 100644 --- a/addons/medical/functions/fnc_init.sqf +++ b/addons/medical/functions/fnc_init.sqf @@ -5,8 +5,11 @@ * Arguments: * 0: The Unit * - * ReturnValue: - * nil + * Return Value: + * None + * + * Example: + * [bob] call ACE_medical_fnc_init * * Public: No */ diff --git a/addons/medical/functions/fnc_isInMedicalFacility.sqf b/addons/medical/functions/fnc_isInMedicalFacility.sqf index 313ee8eca4..12e52ada19 100644 --- a/addons/medical/functions/fnc_isInMedicalFacility.sqf +++ b/addons/medical/functions/fnc_isInMedicalFacility.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: The Unit * - * ReturnValue: + * Return Value: * Is in medical facility * * Example: diff --git a/addons/medical/functions/fnc_isInStableCondition.sqf b/addons/medical/functions/fnc_isInStableCondition.sqf index a11e40dd31..078079e46e 100644 --- a/addons/medical/functions/fnc_isInStableCondition.sqf +++ b/addons/medical/functions/fnc_isInStableCondition.sqf @@ -1,15 +1,18 @@ /* -* Author: Glowbal -* Check if a unit is in a stable condition -* -* Arguments: -* 0: The patient -* -* Return Value: -* Is in stable condition -* -* Public: No -*/ + * Author: Glowbal + * Check if a unit is in a stable condition + * + * Arguments: + * 0: The patient + * + * Return Value: + * Is in stable condition + * + * Example: + * [bob] call ACE_medical_fnc_isInStableCondition + * + * Public: No + */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_isMedic.sqf b/addons/medical/functions/fnc_isMedic.sqf index ff5a1b24a9..f09fe88dbb 100644 --- a/addons/medical/functions/fnc_isMedic.sqf +++ b/addons/medical/functions/fnc_isMedic.sqf @@ -6,7 +6,7 @@ * 0: The Unit * 1: Class (default: 1) * - * ReturnValue: + * Return Value: * Is in of medic class * * Example: @@ -19,7 +19,7 @@ params ["_unit", ["_medicN", 1]]; -private _class = _unit getVariable [QGVAR(medicClass), getNumber (configFile >> "CfgVehicles" >> typeOf _unit >> "attendant")]; +private _class = _unit getVariable [QGVAR(medicClass), [0, 1] select (_unit getUnitTrait "medic")]; if (_class >= _medicN min GVAR(medicSetting)) exitWith {true}; if (!GVAR(increaseTrainingInLocations)) exitWith {false}; diff --git a/addons/medical/functions/fnc_isMedicalVehicle.sqf b/addons/medical/functions/fnc_isMedicalVehicle.sqf index 14499cb241..66ecf84a07 100644 --- a/addons/medical/functions/fnc_isMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_isMedicalVehicle.sqf @@ -5,11 +5,15 @@ * Arguments: * 0: The Vehicle * - * ReturnValue: + * Return Value: * Is in of medic class * + * Example: + * [car] call ace_medical_fnc_isMedicalVehicle + * * Public: Yes */ + #include "script_component.hpp" params ["_vehicle"]; diff --git a/addons/medical/functions/fnc_itemCheck.sqf b/addons/medical/functions/fnc_itemCheck.sqf index d49e04e774..6ab1e490c3 100644 --- a/addons/medical/functions/fnc_itemCheck.sqf +++ b/addons/medical/functions/fnc_itemCheck.sqf @@ -5,9 +5,12 @@ * Arguments: * 0: The unit * - * ReturnValue: + * Return Value: * None * + * Example: + * [bob] call ace_medical_fnc_itemCheck + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_litterCleanupLoop.sqf b/addons/medical/functions/fnc_litterCleanupLoop.sqf index 417144dd64..6f546b47ed 100644 --- a/addons/medical/functions/fnc_litterCleanupLoop.sqf +++ b/addons/medical/functions/fnc_litterCleanupLoop.sqf @@ -5,9 +5,12 @@ * Arguments: * None * - * ReturnValue: + * Return Value: * None * + * Example: + * call ACE_medical_fnc_litterCleanupLoop + * * Public: No */ diff --git a/addons/medical/functions/fnc_medicationEffectLoop.sqf b/addons/medical/functions/fnc_medicationEffectLoop.sqf index 00ef00a82c..c1690806fe 100644 --- a/addons/medical/functions/fnc_medicationEffectLoop.sqf +++ b/addons/medical/functions/fnc_medicationEffectLoop.sqf @@ -10,9 +10,12 @@ * 4: Viscosity adjustment rate * 5: Pain reduction rate * - * ReturnValue: + * Return Value: * None * + * Example: + * [bob, "leg", 1, 2, 3, 4] call ACE_medical_fnc_medicationEffectLoop + * * Public: No */ diff --git a/addons/medical/functions/fnc_modifyMedicalAction.sqf b/addons/medical/functions/fnc_modifyMedicalAction.sqf index 4d0db7af34..1da4ed20c0 100644 --- a/addons/medical/functions/fnc_modifyMedicalAction.sqf +++ b/addons/medical/functions/fnc_modifyMedicalAction.sqf @@ -9,9 +9,12 @@ * 2: Selection Number * 3: The action to modify * - * ReturnValue: + * Return Value: * None * + * Example: + * [bob, kevin, 2, "action"] call ACE_medical_fnc_modifyMedicalAction + * * Public: No */ diff --git a/addons/medical/functions/fnc_moduleAdvancedMedicalSettings.sqf b/addons/medical/functions/fnc_moduleAdvancedMedicalSettings.sqf index b54196d75f..b884e8b82d 100644 --- a/addons/medical/functions/fnc_moduleAdvancedMedicalSettings.sqf +++ b/addons/medical/functions/fnc_moduleAdvancedMedicalSettings.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ACE_medical_fnc_moduleAdvancedMedicalSettings + * * Public: No */ diff --git a/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf b/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf index 5bdaccff93..51a4be7461 100644 --- a/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf +++ b/addons/medical/functions/fnc_moduleAssignMedicRoles.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ACE_medical_fnc_moduleAssignMedicRoles + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_moduleAssignMedicalFacility.sqf b/addons/medical/functions/fnc_moduleAssignMedicalFacility.sqf index 368b065908..97dcc35a6b 100644 --- a/addons/medical/functions/fnc_moduleAssignMedicalFacility.sqf +++ b/addons/medical/functions/fnc_moduleAssignMedicalFacility.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [kevin, bob], true] call ACE_medical_fnc_moduleAssignMedicalFacility + * * Public: No */ diff --git a/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf b/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf index 60a46f8420..4d7576f2c2 100644 --- a/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf +++ b/addons/medical/functions/fnc_moduleAssignMedicalVehicle.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ACE_medical_fnc_moduleAssignMedicalVehicle + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_moduleBasicMedicalSettings.sqf b/addons/medical/functions/fnc_moduleBasicMedicalSettings.sqf index 08076878f2..c73d49458b 100644 --- a/addons/medical/functions/fnc_moduleBasicMedicalSettings.sqf +++ b/addons/medical/functions/fnc_moduleBasicMedicalSettings.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [Logic, [bob, kevin], true] call ACE_medical_fnc_moduleBasicMedicalSettings + * * Public: No */ diff --git a/addons/medical/functions/fnc_moduleMedicalSettings.sqf b/addons/medical/functions/fnc_moduleMedicalSettings.sqf index 29398bbc35..148183ea22 100644 --- a/addons/medical/functions/fnc_moduleMedicalSettings.sqf +++ b/addons/medical/functions/fnc_moduleMedicalSettings.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ACE_medical_fnc_moduleMedicalSettings + * * Public: No */ diff --git a/addons/medical/functions/fnc_moduleReviveSettings.sqf b/addons/medical/functions/fnc_moduleReviveSettings.sqf index 19aa9579dd..de9e53820c 100644 --- a/addons/medical/functions/fnc_moduleReviveSettings.sqf +++ b/addons/medical/functions/fnc_moduleReviveSettings.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ACE_medical_fnc_moduleReviveSettings + * * Public: No */ diff --git a/addons/medical/functions/fnc_onMedicationUsage.sqf b/addons/medical/functions/fnc_onMedicationUsage.sqf index 019abd094c..95e7d0bf5e 100644 --- a/addons/medical/functions/fnc_onMedicationUsage.sqf +++ b/addons/medical/functions/fnc_onMedicationUsage.sqf @@ -13,6 +13,9 @@ * Return Value: * None * + * Example: + * [bob, "classname", "varname", 5, 6, ["stuff"]] call ACE_medical_fnc_onMedicationUsage + * * Public: No */ diff --git a/addons/medical/functions/fnc_parseConfigForInjuries.sqf b/addons/medical/functions/fnc_parseConfigForInjuries.sqf index 42dd98dc1f..c3ef815e74 100644 --- a/addons/medical/functions/fnc_parseConfigForInjuries.sqf +++ b/addons/medical/functions/fnc_parseConfigForInjuries.sqf @@ -4,9 +4,13 @@ * * Arguments: * None - * ReturnValue: + * + * Return Value: * None * + * Example: + * call ACE_medical_fnc_parseConfigForInjuries + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_playInjuredSound.sqf b/addons/medical/functions/fnc_playInjuredSound.sqf index 2e5ec2ab5f..629b600d49 100644 --- a/addons/medical/functions/fnc_playInjuredSound.sqf +++ b/addons/medical/functions/fnc_playInjuredSound.sqf @@ -8,9 +8,12 @@ * 0: The Unit * 1: Amount of Pain * - * ReturnValue: + * Return Value: * None * + * Example: + * [bob, 5] call ACE_medical_fnc_playInjuredSound + * * Public: No */ diff --git a/addons/medical/functions/fnc_reviveStateLoop.sqf b/addons/medical/functions/fnc_reviveStateLoop.sqf index 5dcaad09c4..0ec5f78c85 100644 --- a/addons/medical/functions/fnc_reviveStateLoop.sqf +++ b/addons/medical/functions/fnc_reviveStateLoop.sqf @@ -5,9 +5,12 @@ * Arguments: * 0: Unit * - * ReturnValue: + * Return Value: * None * + * Example: + * [bob] call ACE_medical_fnc_reviveStateLoop + * * Public: No */ diff --git a/addons/medical/functions/fnc_selectionNameToNumber.sqf b/addons/medical/functions/fnc_selectionNameToNumber.sqf index 1e8d79183f..441f4bb31e 100644 --- a/addons/medical/functions/fnc_selectionNameToNumber.sqf +++ b/addons/medical/functions/fnc_selectionNameToNumber.sqf @@ -5,9 +5,12 @@ * Arguments: * 0: The selection name of a unit * - * ReturnValue: + * Return Value: * Number representation. -1 if invalid. * + * Example: + * ["head"] call ace_medical_fnc_selectionNameToNumber + * * Public: yes */ diff --git a/addons/medical/functions/fnc_serverRemoveBody.sqf b/addons/medical/functions/fnc_serverRemoveBody.sqf index f68ffd95cd..3c1bfe90a1 100644 --- a/addons/medical/functions/fnc_serverRemoveBody.sqf +++ b/addons/medical/functions/fnc_serverRemoveBody.sqf @@ -7,7 +7,7 @@ * 0: Mr Body * * Return Value: - * Nothing + * None * * Example: * [cursorTarget] call ace_medical_fnc_serverRemoveBody diff --git a/addons/medical/functions/fnc_setCardiacArrest.sqf b/addons/medical/functions/fnc_setCardiacArrest.sqf index 69bda192dd..5b97b3d50b 100644 --- a/addons/medical/functions/fnc_setCardiacArrest.sqf +++ b/addons/medical/functions/fnc_setCardiacArrest.sqf @@ -6,9 +6,12 @@ * Arguments: * 0: The unit that will be put in cardiac arrest state * - * ReturnValue: + * Return Value: * None * + * Example: + * [bob] call ace_medical_fnc_setCardiacArrest + * * Public: yes */ diff --git a/addons/medical/functions/fnc_setDead.sqf b/addons/medical/functions/fnc_setDead.sqf index 0e5fd884f4..fcc8b42235 100644 --- a/addons/medical/functions/fnc_setDead.sqf +++ b/addons/medical/functions/fnc_setDead.sqf @@ -4,12 +4,15 @@ * * Arguments: * 0: The unit that will be killed - * 1: Force Dead (ignore revive setting) - * 1: Delay setDamage for a frame + * 1: Force Dead (ignore revive setting) (default: false) + * 1: Delay setDamage for a frame (default: false) * - * ReturnValue: + * Return Value: * Did he died? * + * Example: + * [bob, false, false] call ace_medical_fnc_setDead + * * Public: yes */ diff --git a/addons/medical/functions/fnc_setHitPointDamage.sqf b/addons/medical/functions/fnc_setHitPointDamage.sqf index b1dfe59d29..16daee5e5d 100644 --- a/addons/medical/functions/fnc_setHitPointDamage.sqf +++ b/addons/medical/functions/fnc_setHitPointDamage.sqf @@ -12,6 +12,9 @@ * Return Value: * None * + * Example: + * [medic, "Leg", 2, false] call ace_medical_fnc_setHitPointDamage + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_setStructuralDamage.sqf b/addons/medical/functions/fnc_setStructuralDamage.sqf index ba30b08153..4f8c6e2613 100644 --- a/addons/medical/functions/fnc_setStructuralDamage.sqf +++ b/addons/medical/functions/fnc_setStructuralDamage.sqf @@ -5,8 +5,11 @@ * Arguments: * 0: The unit * - * ReturnValue: - * + * Return Value: + * None + * + * Example: + * [bob] call ACE_medical_fnc_setStructuralDamage * * Public: no? */ diff --git a/addons/medical/functions/fnc_setUnconscious.sqf b/addons/medical/functions/fnc_setUnconscious.sqf index 5bee0967ba..c2d503ceee 100644 --- a/addons/medical/functions/fnc_setUnconscious.sqf +++ b/addons/medical/functions/fnc_setUnconscious.sqf @@ -8,8 +8,8 @@ * 2: Minimum unconscious time (default: (round(random(10)+5))) * 3: Force AI Unconscious (skip random death chance) (default: false) * - * ReturnValue: - * nil + * Return Value: + * None * * Example: * [bob, true] call ace_medical_fnc_setUnconscious; diff --git a/addons/medical/functions/fnc_showBloodEffect.sqf b/addons/medical/functions/fnc_showBloodEffect.sqf index 8ed77714cb..2e2a282884 100644 --- a/addons/medical/functions/fnc_showBloodEffect.sqf +++ b/addons/medical/functions/fnc_showBloodEffect.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [2] call ace_medical_fnc_showBloodEffect + * * Public: Yes */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_treatment.sqf b/addons/medical/functions/fnc_treatment.sqf index 453d074f98..f5c0d6a1bb 100644 --- a/addons/medical/functions/fnc_treatment.sqf +++ b/addons/medical/functions/fnc_treatment.sqf @@ -11,6 +11,9 @@ * Return Value: * Succesful treatment started * + * Example: + * [medic, patient, "SelectionName","bandage"] call ace_medical_fnc_treatment + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_treatmentAdvanced_CPR.sqf b/addons/medical/functions/fnc_treatmentAdvanced_CPR.sqf index 0ce1f7d4d9..aedcffdb49 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_CPR.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_CPR.sqf @@ -11,6 +11,9 @@ * Return Value: * Succesful treatment started * + * Example: + * [medic, patient, "selectionName", "bandage"] call ace_medical_fnc_treatmentAdvanced_CPR + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_treatmentAdvanced_CPRLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_CPRLocal.sqf index fbc7aac601..a893feedef 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_CPRLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_CPRLocal.sqf @@ -9,6 +9,9 @@ * Return Value: * Succesful treatment started * + * Example: + * [medic, patient] call ace_medical_fnc_treatmentAdvanced_CPRLocal + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf b/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf index 0db3e641b3..0dd9742c08 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_bandage.sqf @@ -13,6 +13,9 @@ * Return Value: * Succesful treatment started * + * Example: + * [medic, patient, "Selectionname", "bandage", "bandage", -1] call ace_medical_fnc_treatmentAdvanced_bandage + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf index a9f26ca2fd..c581d4ddbe 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_bandageLocal.sqf @@ -10,6 +10,9 @@ * Return Value: * Succesful treatment started * + * Example: + * [bob, "classname"] call ACE_medical_fnc_treatmentAdvanced_bandageLocal + * * Public: No */ diff --git a/addons/medical/functions/fnc_treatmentAdvanced_fullHeal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_fullHeal.sqf index 18bd0468d2..5b20863338 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_fullHeal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_fullHeal.sqf @@ -1,11 +1,21 @@ -/** - * fn_heal.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * + * Arguments: + * 0: Caller + * 1: Target + * 2: SelectionName + * 3: ClassName + * 4: Item + * + * Return Value: + * Boolean + * + * Example: + * [bob, kevin, "selection", "classname", ] call ACE_medical_fnc_treatmentAdvanced_fullHeal + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf index 7517f235e7..bd31e58ba9 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_fullHealLocal.sqf @@ -1,11 +1,18 @@ -/** - * fn_healLocal.sqf - * @Descr: N/A - * @Author: Glowbal +/* + * Author: Glowbal * - * @Arguments: [] - * @Return: - * @PublicAPI: false + * + * Arguments: + * 0: Caller + * 1: Target + * + * Return Value: + * Boolean + * + * Example: + * [bob, kevin] call ACE_medical_fnc_treatmentAdvanced_fullHealLocal + * + * Public: No */ #include "script_component.hpp" @@ -47,7 +54,6 @@ if (alive _target) exitWith { _target setVariable [QGVAR(airwayCollapsed), false, true]; // generic medical admin - _target setVariable [QGVAR(addedToUnitLoop), false, true]; _target setVariable [QGVAR(inCardiacArrest), false, true]; _target setVariable [QGVAR(inReviveState), false, true]; _target setVariable ["ACE_isUnconscious", false, true]; diff --git a/addons/medical/functions/fnc_treatmentAdvanced_medication.sqf b/addons/medical/functions/fnc_treatmentAdvanced_medication.sqf index ceb788f571..a58ded3de3 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_medication.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_medication.sqf @@ -12,6 +12,9 @@ * Return Value: * Succesful treatment started * + * Example: + * [medic, patient, "selectionName", "bandage", 2] call ace_medical_fnc_treatmentAdvanced_medication + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf b/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf index 46a8b9c2a8..32b7e9d2c1 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_medicationLocal.sqf @@ -10,6 +10,9 @@ * Return Value: * Succesful treatment started * + * Example: + * [medic, "bandage", 2] call ace_medical_fnc_treatmentAdvanced_medicationLocal + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_treatmentAdvanced_surgicalKit_onProgress.sqf b/addons/medical/functions/fnc_treatmentAdvanced_surgicalKit_onProgress.sqf index 0a1e48288f..a73661ac77 100644 --- a/addons/medical/functions/fnc_treatmentAdvanced_surgicalKit_onProgress.sqf +++ b/addons/medical/functions/fnc_treatmentAdvanced_surgicalKit_onProgress.sqf @@ -12,6 +12,9 @@ * Return Value: * Succesful treatment started * + * Example: + * [[bob, kevin], 5, 5] call ACE_medical_fnc_treatmentAdvanced_surgicalKit_onProgress + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf b/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf index 6989ac14b8..5ef368922d 100644 --- a/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_bloodbag.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * [bob, kevin, "selection", "classname"] call ACE_medical_fnc_treatmentBasic_bloodbag + * * Public: No */ diff --git a/addons/medical/functions/fnc_treatmentBasic_bloodbagLocal.sqf b/addons/medical/functions/fnc_treatmentBasic_bloodbagLocal.sqf index cb4dcf032c..1e56eb3d88 100644 --- a/addons/medical/functions/fnc_treatmentBasic_bloodbagLocal.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_bloodbagLocal.sqf @@ -7,7 +7,10 @@ * 1: Treatment Classname * * Return Value: - * nil + * None + * + * Example: + * [bob, "classname"] call ACE_medical_fnc_treatmentBasic_bloodbagLocal * * Public: No */ diff --git a/addons/medical/functions/fnc_treatmentBasic_epipen.sqf b/addons/medical/functions/fnc_treatmentBasic_epipen.sqf index 1abee1cd58..161626bb41 100644 --- a/addons/medical/functions/fnc_treatmentBasic_epipen.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_epipen.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * [bob, kevin, "selection", "classname"] call ACE_medical_fnc_treatmentBasic_epipen + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_treatmentBasic_morphine.sqf b/addons/medical/functions/fnc_treatmentBasic_morphine.sqf index f704a67042..f011ab41a2 100644 --- a/addons/medical/functions/fnc_treatmentBasic_morphine.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_morphine.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * [bob, kevin, "selection", "classname"] call ACE_medical_fnc_treatmentBasic_morphine + * * Public: No */ diff --git a/addons/medical/functions/fnc_treatmentBasic_morphineLocal.sqf b/addons/medical/functions/fnc_treatmentBasic_morphineLocal.sqf index bb670c75bd..f24719d352 100644 --- a/addons/medical/functions/fnc_treatmentBasic_morphineLocal.sqf +++ b/addons/medical/functions/fnc_treatmentBasic_morphineLocal.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, kevin] call ACE_medical_fnc_treatmentBasic_morphineLocal + * * Public: No */ diff --git a/addons/medical/functions/fnc_treatmentIV.sqf b/addons/medical/functions/fnc_treatmentIV.sqf index 7b16fad650..a393acbb13 100644 --- a/addons/medical/functions/fnc_treatmentIV.sqf +++ b/addons/medical/functions/fnc_treatmentIV.sqf @@ -11,6 +11,9 @@ * Return Value: * Succesful treatment started * + * Example: + * [medic, patient, "SelectionName", "bandage"] call ace_medical_fnc_treatmentIV + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_treatmentIVLocal.sqf b/addons/medical/functions/fnc_treatmentIVLocal.sqf index 1324d5aac2..63d8292b0f 100644 --- a/addons/medical/functions/fnc_treatmentIVLocal.sqf +++ b/addons/medical/functions/fnc_treatmentIVLocal.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [medic, "Classname"] call ace_medical_fnc_treatmentIVLocal + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_treatmentTourniquet.sqf b/addons/medical/functions/fnc_treatmentTourniquet.sqf index 3fa34a58aa..cb7e6d21d0 100644 --- a/addons/medical/functions/fnc_treatmentTourniquet.sqf +++ b/addons/medical/functions/fnc_treatmentTourniquet.sqf @@ -12,6 +12,9 @@ * Return Value: * Succesful treatment started * + * Example: + * [bob, kevin, "selection", "classname"] call ACE_medical_fnc_treatmentTourniquet + * * Public: No */ diff --git a/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf b/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf index ab24a94a23..e7e9ff7ca1 100644 --- a/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf +++ b/addons/medical/functions/fnc_treatmentTourniquetLocal.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, "classname"] call ACE_medical_fnc_treatmentTourniquetLocal + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical/functions/fnc_treatment_failure.sqf b/addons/medical/functions/fnc_treatment_failure.sqf index d81c576feb..8ddd8c5cf2 100644 --- a/addons/medical/functions/fnc_treatment_failure.sqf +++ b/addons/medical/functions/fnc_treatment_failure.sqf @@ -12,6 +12,9 @@ * Return Value: * None * + * Example: + * [bob, kevin, "selectionname", "classname", ["bandage"]] call ACE_medical_fnc_treatment_failure + * * Public: No */ @@ -41,14 +44,14 @@ _caller setVariable [QGVAR(treatmentPrevAnimCaller), nil]; private _weaponSelect = (_caller getVariable [QGVAR(selectedWeaponOnTreatment), []]); if ((_weaponSelect params [["_previousWeapon", ""]]) && {(_previousWeapon != "") && {_previousWeapon in (weapons _caller)}}) then { - for "_index" from 0 to 99 do { + for "_index" from 0 to 299 do { _caller action ["SwitchWeapon", _caller, _caller, _index]; //Just check weapon, muzzle and mode (ignore ammo in case they were reloading) if (((weaponState _caller) select [0,3]) isEqualTo (_weaponSelect select [0,3])) exitWith {TRACE_1("Restoring", (weaponState _caller));}; if ((weaponState _caller) isEqualTo ["","","","",0]) exitWith {ERROR("weaponState not found");}; }; } else { - _caller action ["SwitchWeapon", _caller, _caller, 99]; + _caller action ["SwitchWeapon", _caller, _caller, 299]; }; { diff --git a/addons/medical/functions/fnc_treatment_success.sqf b/addons/medical/functions/fnc_treatment_success.sqf index eb52d20e3c..3984606e5f 100644 --- a/addons/medical/functions/fnc_treatment_success.sqf +++ b/addons/medical/functions/fnc_treatment_success.sqf @@ -12,6 +12,9 @@ * Return Value: * None * + * Example: + * [bob, kevin, "selectionname", "classname", ["bandage"]] call ACE_medical_fnc_treatment_success + * * Public: No */ @@ -41,14 +44,14 @@ _caller setVariable [QGVAR(treatmentPrevAnimCaller), nil]; private _weaponSelect = (_caller getVariable [QGVAR(selectedWeaponOnTreatment), []]); if ((_weaponSelect params [["_previousWeapon", ""]]) && {(_previousWeapon != "") && {_previousWeapon in (weapons _caller)}}) then { - for "_index" from 0 to 99 do { + for "_index" from 0 to 299 do { _caller action ["SwitchWeapon", _caller, _caller, _index]; //Just check weapon, muzzle and mode (ignore ammo in case they were reloading) if (((weaponState _caller) select [0,3]) isEqualTo (_weaponSelect select [0,3])) exitWith {TRACE_1("Restoring", (weaponState _caller));}; if ((weaponState _caller) isEqualTo ["","","","",0]) exitWith {ERROR("weaponState not found");}; }; } else { - _caller action ["SwitchWeapon", _caller, _caller, 99]; + _caller action ["SwitchWeapon", _caller, _caller, 299]; }; // Record specific callback diff --git a/addons/medical/functions/fnc_unconsciousPFH.sqf b/addons/medical/functions/fnc_unconsciousPFH.sqf index 37d54a2ad6..3c5609d85a 100644 --- a/addons/medical/functions/fnc_unconsciousPFH.sqf +++ b/addons/medical/functions/fnc_unconsciousPFH.sqf @@ -3,7 +3,7 @@ * PFH logic for unconscious state * * Arguments: - * 0: PFEH - Args + * 0: PFEH - * 0: The unit that will be put in an unconscious state * 1: unitPos (stance) * 2: Starting Time @@ -12,11 +12,15 @@ * 5: Parachute Check * 1: PFEH ID * - * ReturnValue: + * Return Value: * None * + * Example: + * [[unit,"pos", 5, 5, true, false], 5], "classname"] call ace_medical_fnc_unconsciousPFH + * * Public: yes */ + #include "script_component.hpp" private ["_unit", "_minWaitingTime", "_slotInfo", "_hasMovedOut", "_parachuteCheck", "_args", "_originalPos", "_startingTime", "_awakeInVehicleAnimation", "_oldVehicleAnimation", "_vehicle"]; diff --git a/addons/medical/functions/fnc_useItem.sqf b/addons/medical/functions/fnc_useItem.sqf index 63b3f2a696..ec032a279f 100644 --- a/addons/medical/functions/fnc_useItem.sqf +++ b/addons/medical/functions/fnc_useItem.sqf @@ -7,10 +7,13 @@ * 1: Patient * 2: Item * - * ReturnValue: + * Return Value: * 0: success * 1: Unit * + * Example: + * [unit, patient, "bandage"] call ace_repair_fnc_useItem + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_useItems.sqf b/addons/medical/functions/fnc_useItems.sqf index aac7b0623a..f898ea72f5 100644 --- a/addons/medical/functions/fnc_useItems.sqf +++ b/addons/medical/functions/fnc_useItems.sqf @@ -7,9 +7,12 @@ * 1: Patient * 2: Items > * - * ReturnValue: + * Return Value: * None * + * Example: + * [unit, patient, ["bandage"]] call ace_medical_fnc_useItems + * * Public: Yes */ diff --git a/addons/medical/functions/fnc_vitalLoop.sqf b/addons/medical/functions/fnc_vitalLoop.sqf index 6e5bb7fb2b..a9efa81719 100644 --- a/addons/medical/functions/fnc_vitalLoop.sqf +++ b/addons/medical/functions/fnc_vitalLoop.sqf @@ -6,9 +6,12 @@ * 0: The Unit * 1: Time of last computation * - * ReturnValue: + * Return Value: * None * + * Example: + * [bob, 5] call ACE_medical_fnc_vitalLoop + * * Public: No */ diff --git a/addons/medical/stringtable.xml b/addons/medical/stringtable.xml index 8f372bef4b..d94fe3ae5a 100644 --- a/addons/medical/stringtable.xml +++ b/addons/medical/stringtable.xml @@ -14,20 +14,24 @@ FERIMENTOS 負傷 부상 + 受伤 + 受傷 No injuries on this bodypart... Körperteil nicht verletzt... Non ci sono lesioni in questa parte del corpo... Данная часть тела не повреждена... - Aucune blessures sur cette partie du corps... + Aucune blessure ici... Brak obrażeń na tej części ciała... Sin heridas en esta parte del cuerpo... Ezen a testrészen nincs sérülés... Žádné zranění na této části těla... Nenhum ferimento nesta parte do corpo... 怪我をしていない - 이쪽에는 부상이 없습니다... + 이 부위에는 부상이 없습니다... + 此身体部位没有受伤 + 此身體部位沒有受傷 Litter Simulation Detail @@ -42,6 +46,8 @@ Počet zobrazených předmětů po použití zdravotnického materiálu 医療廃棄物を再現する詳細度 의료폐기물 재현 상세도 + 医疗废弃物模拟细节 + 醫療廢棄物模擬細節 Litter simulation detail level sets the number of litter items which will be locally spawned in the client. Excessive amounts in local areas could cause FPS lag, so this is a client only setting. @@ -56,19 +62,23 @@ Počet zobrazených předmětů po použití zdravotnického materiálu ovlivňuje počet objektů, které budou zobrazeny klientovi v místě použití zdravotnického materiálu. Vyšší množství objektů může způsobovat poklesy FPS a proto je toto nastavení čistě na klientovi. 医療廃棄物再現度は各クライアントでローカルに作成される、医療廃棄物への詳細度を決定できます。ローカルで多くのアイテムがあると FPS の低下を引き起こすため、クライアント側のみの設定です。 의료폐기물 재현 상세도의 경우 얼마나 많은 수의 폐기물이 클라이언트 주변에 생성되는지를 정합니다. 매우 많은 수의 지역은 프레임드랍을 유발할 수 있습니다, 고로 이는 클라이언트 전용 설정입니다. + 设定医疗废弃物的最大产生数量, 过多的数量会导致画面更新率延迟, 因此这由用户端来设定 + 設定醫療廢棄物的最大產生數量, 過多的數量會導致畫面更新率延遲, 因此這由用戶端來設定 Inject Adenosine Adenosin injizieren Inyectar Adenosina Wstrzyknij adenozynę - Injecter de l'adénosine + Adénosine Inietta andenosina Aplikovat adenosine Injetar Adenosina Ввести аденозин アデノシンを投与 아데노신 주사 + 注射腺苷 + 注射腺苷 Inject Atropine @@ -76,13 +86,15 @@ Inyectar Atropina Aplikovat atropin Wstrzyknij atropinę - Injecter de l'atropine + Atropine Ввести атропин Atropin beadása Inietta atropina Injetar Atropina アトロピンを投与 아트로핀 주사 + 注射阿托品 + 注射阿托品 Inject Epinephrine @@ -90,13 +102,15 @@ Inyectar Epinefrina Wstrzyknij adrenalinę Aplikovat adrenalin - Injecter épinéphrine + Épinéphrine Ввести адреналин Epinefrin beadása Injetar Epinefrina Inietta adrenalina アドレナリンを投与 에피네프린 주사 + 注射肾上腺素 + 注射腎上腺素 Inject Morphine @@ -105,12 +119,14 @@ Wstrzyknij morfinę Aplikovat morfin Ввести морфин - Injecter morphine + Morphine Morfium beadása Injetar Morfina Inietta morfina モルヒネを投与 모르핀 주사 + 注射吗啡 + 注射嗎啡 Transfuse Blood @@ -119,12 +135,14 @@ Przetocz krew Transfúze krve Перелить кровь - Transfuser du sang + Transfuser (sang) Infúzió (vér) Transfundir Sangue Trasfusione di sangue 輸血する 혈액 수혈 + 输血液 + 輸血液 Transfuse Plasma @@ -132,13 +150,15 @@ Transfundir plasma Transfúze plazmy Przetocz osocze - Transfuser du Plasma + Transfuser (plasma) Перелить плазму Infúzió (vérplazma) Trasfusione di plasma Transfundir Plasma 血しょうを投与 혈장 수혈 + 输血浆 + 輸血漿 Transfuse Saline @@ -146,13 +166,15 @@ Transfundir salino Transfúze fyziologického roztoku Przetocz sól fizjologiczną - Transfuser de la solution saline + Transfuser (saline) Перелить физраствор Infúzió (sós víz) Trasfusione di soluzione salina Transfundir Soro 生理食塩水を投与 생리식염수 수혈 + 注射生理食盐水 + 注射生理食鹽水 Apply Tourniquet @@ -160,13 +182,15 @@ Aplicar torniquete Aplikovat škrtidlo Załóż stazę - Appliquer un garrot + Poser garrot Наложить жгут Applica laccio emostatico Aplicar Torniquete Érszorító alkalmazása 止血帯を巻く 지혈대 적용 + 使用军用止血带 + 使用軍用止血帶 Bandage @@ -181,6 +205,8 @@ Перевязать 包帯 붕대 + 绷带 + 繃帶 Bandage Head @@ -195,6 +221,8 @@ Benda la testa 包帯を頭へ 머리에 붕대감기 + 绷带包扎 头部 + 繃帶包紮 頭部 Bandage Torso @@ -209,6 +237,8 @@ Benda il torso 包帯を胴体へ 몸통에 붕대감기 + 绷带包扎 身体 + 繃帶包紮 身體 Bandage Left Arm @@ -223,6 +253,8 @@ Benda il braccio sinistro 包帯を左腕に 왼팔에 붕대감기 + 绷带包扎 左手 + 繃帶包紮 左手 Bandage Right Arm @@ -237,6 +269,8 @@ Benda il braccio destro 包帯を右腕に 오른팔에 붕대감기 + 绷带包扎 右手 + 繃帶包紮 右手 Bandage Left Leg @@ -251,6 +285,8 @@ Benda la gamba sinistra 包帯を左足へ 왼쪽 다리에 붕대감기 + 绷带包扎 左脚 + 繃帶包紮 左腳 Bandage Right Leg @@ -265,6 +301,8 @@ Benda la gamba destra 包帯を右足へ 오른쪽 다리에 붕대감기 + 绷带包扎 右脚 + 繃帶包紮 右腳 Injecting Morphine... @@ -273,12 +311,14 @@ Wstrzykiwanie morfiny... Aplikuji morfin... Введение морфина... - Injection de Morphine... + Injection (morphine)... Morfium beadása... Injetando Morfina... Inietto la morfina... モルヒネを投与中・・・ 모르핀 주사중... + 吗啡注射中... + 嗎啡注射中... Injecting Epinephrine... @@ -287,25 +327,29 @@ Wstrzykiwanie adrenaliny... Aplikuji adrenalin... Введение адреналина... - Injection d'Adrénaline... + Injection (épinéphrine)... Epinefrin beadása... Injetando Epinefrina... Inietto l'adrenalina... アドレナリンを投与中・・・ 에피네프린 주사중... + 肾上腺素注射中... + 腎上腺素注射中... Injecting Adenosine... Adenosin injizieren... Inyectando Adenosina... Wstrzykiwanie adenozyny... - Injection d'adénosine... + Injection (adénosine)... Inietto l'andenosina Aplikuji adenosine... Injetando Adenosina... Введение аденозина... アドネシンを投与中・・・ 아데노신 주사중... + 腺苷注射中... + 腺苷注射中... Injecting Atropine... @@ -313,13 +357,15 @@ Inyectando Atropina... Aplikuji atropin... Wstrzykiwanie atropiny... - Injection d'Atropine... + Injection (atropine)... Введение атропина... Atropin beadása... Inietto l'atropina... Injetando Atropina アトロピンを投与中・・・ 아트리핀 주사중... + 阿托品注射中 ... + 阿托品注射中 ... Transfusing Blood... @@ -328,12 +374,14 @@ Przetaczanie krwi... Probíhá transfúze krve... Переливание крови... - Transfusion Sanguine... + Transfusion (sang)... Infúzió vérrel... Transfundindo Sangue... Effettuo la trasfusione di sangue... 輸血中・・・ 혈액 수혈중... + 输血液中 ... + 輸血液中 ... Transfusing Saline... @@ -341,13 +389,15 @@ Transfusión de salino... Probíha transfúze fyziologického roztoku... Przetaczanie soli fizjologicznej... - Transfusion de saline... + Transfusion (solution saline)... Переливание физраствора... Infúzió sós vizzel... Effettuo la rasfusione di soluzione salina Transfundindo Soro... - 血しょうを投与中・・・ + 生理食塩水を投与中・・・ 생리식염수 수혈중... + 施打生理食盐水中 ... + 施打生理食鹽水中 ... Transfusing Plasma... @@ -355,13 +405,15 @@ Transfusión de plasma... Probíha transfúze plazmy... Przetaczanie osocza... - Transfusion de Plasma... + Transfusion (plasma)... Переливание плазмы... Infúzió vérplazmával... Effettu la trasfusione di plasma... Transfundindo Plasma... - 生理食塩水を投与中・・・ + 血しょうを投与中・・・ 혈장 수혈중... + 输血浆中 ... + 輸血漿中 ... Bandaging... @@ -376,6 +428,8 @@ Перевязывание... 包帯を巻いています・・・ 붕대감는중... + 绷带包扎中 ... + 繃帶包紮中 ... Applying Tourniquet... @@ -383,13 +437,15 @@ Aplicando torniquete... Aplikuji škrtidlo... Zakładanie stazy... - Mise en place du Garrot... + Pose du garrot... Наложение жгута... Érszorító felhelyezése... Sto applicando il laccio emostatico... Applicando Torniquete 止血帯を巻いています・・・ 지혈대 적용중... + 使用军用止血带中 ... + 使用軍用止血帶中 ... Medical @@ -404,6 +460,8 @@ Orvosi 治療 치료 + 医疗 + 醫療 Field Dressing @@ -412,12 +470,14 @@ Бинтовая повязка Obinadlo Bandaż jałowy - Bandage rapide + Pansement individuel Zárókötszer Bendaggio rapido Curativo de Campo - フィールド ドレッシング + 緊急圧迫包帯 필드 드레싱 + 基础绷带 + 基礎繃帶 Packing Bandage @@ -427,11 +487,13 @@ Bandaż uciskowy Nyomókötszer Bendaggio compressivo - Bandage gauze + Bande extensible Bandagem de Compressão Obvaz Tlakový - パッキング バンテージ + 弾性包帯 거즈 붕대 + 包扎绷带 + 包紮繃帶 Elastic Bandage @@ -440,12 +502,14 @@ Давящая повязка Obavaz Elastický Bandaż elastyczny - Pansement élastique + Bande compressive Rögzitő kötszer Bendaggio elastico Bandagem Elástica - エラスティック バンテージ + 伸縮包帯 압박 붕대 + 弹性绷带 + 彈性繃帶 QuikClot @@ -454,12 +518,14 @@ QuikClot Opatrunek QuikClot QuikClot - Hémostatique + Bandage hémostatique QuikClot QuikClot (polvere emostatica) QuikClot - クイック クロット + クイッククロット 퀵 클롯 + 止血粉 + 止血粉 Check Pulse @@ -468,12 +534,14 @@ Проверить пульс Zkontrolovat puls Sprawdź tętno - Vérifier le pouls + Prendre le pouls Pulzus ellenőrzése Controlla il polso Checar Pulso 心拍数をはかる 맥박 확인 + 检查脉搏 + 檢查脈搏 Check Blood Pressure @@ -482,12 +550,14 @@ Проверить давление Zkontrolovat krevní tlak Sprawdź ciśnienie krwi - Vérification de la tension + Prendre la tension Vérnyomás megmérése Controlla pressionsa sanguigna Chegar Pressão Sanguínea 血圧をはかる 혈압 확인 + 检查血压 + 檢查血壓 Triage Card @@ -496,19 +566,21 @@ Медкарта Karta segregacyjna Štítek - Carte de triage + Fiche de triage Orvosi lap Triage Card Cartão de Triagem トリアージ カード 부상자 분류 카드 + 检伤分类卡 + 檢傷分類卡 No entries on this triage card. Keine Einträge auf der Triagekarte Nessuna voce sulla Triage Card Нет записей. - Aucune entrée sur cette carte de triage + Fiche vide Brak wpisów w tej karcie segregacyjnej. Sin entradas en esta tarjeta de clasificación. Ez az orvosi lap nem tartalmaz bejegyzést. @@ -516,6 +588,8 @@ Nenhuma entrada neste cartão de triagem トリアージ カードには何も無い 부상자 분류 카드에 쓰여있는것이 없습니다. + 此检伤分类卡上没有任何资料 + 此檢傷分類卡上沒有任何資料 Tourniquet @@ -530,6 +604,8 @@ Torniquete 止血帯 지혈대 + 军用止血带 + 軍用止血帶 Remove Tourniquet @@ -538,12 +614,14 @@ Снять жгут Sundat škrtidlo Zdejmij stazę - Enlever le garrot + Enlever garrot Érszorító leszedése Rimuovi laccio emostatico Remover Torniquete 止血帯をはずす 지혈대 제거 + 移除军用止血带 + 移除軍用止血帶 Diagnose @@ -558,6 +636,8 @@ Diagnosticar 診断する 진단 + 诊断 + 診斷 Diagnosing... @@ -572,13 +652,15 @@ Diagnosticando... 診断中・・・ 진단중... + 诊断中... + 診斷中... CPR HLW RCP Сердечно-лёгочная реанимация - RPC + RCP RKO RCP Újraélesztés @@ -586,13 +668,15 @@ SBV 心肺蘇生 심폐소생술 + 心肺复苏术 + 心肺復甦術 Performing CPR... HLW durchführen... Eseguendo RCP... Сердечно-лёгочная реанимация... - RPC en cours + RCP en cours Przeprowadzanie RKO... Realizando RCP... Újraélesztés folyamatban... @@ -600,6 +684,8 @@ Realizando o SBV... 心肺蘇生を実行中・・・ 심폐소생중... + 进行心肺复苏术中... + 進行心肺復甦術中... Give Blood IV (1000ml) @@ -607,13 +693,15 @@ Dar Sangre IV (1000ml) Перелить пакет крови (1000 мл) Podaj krew IV (1000ml) - Administrer du sang en IV (1000ml) + Sang en IV (1000ml) Podat krev. transfúzi (1000ml) Vér adása intravénásan (1000ml) Effettua trasfusione sangue EV (1˙000ml) Administrar Sangue IV (1000ml) 血液 IV (1000ml) をあたえる IV 혈액 수혈 (1000ml) + 输血液 (1000ml) + 輸血液 (1000ml) Give Blood IV (500ml) @@ -621,13 +709,15 @@ Dar Sangre IV (500ml) Перелить пакет крови (500 мл) Podaj krew IV (500ml) - Administrer du sang en IV (500ml) - Podat krev. transfúzi (500ml) + Sang en IV (500ml) + Podat krev. transfúzi (500ml) Vér adása intravénásan (500ml) Effettua trasfusione sangue EV (500ml) Administrar Sangue IV (500ml) 血液 IV (500ml) をあたえる IV 혈액 수혈 (500ml) + 输血液 (500ml) + 輸血液 (500ml) Give Blood IV (250ml) @@ -635,13 +725,15 @@ Dar Sangre IV (250ml) Перелить пакет крови (250 мл) Podaj krew IV (250ml) - Administrer du sang en IV (250ml) + Sang en IV (250ml) Podat krev. transfúzi (250ml) Vér adása intravénásan (250ml) Effettua trasfusione sangue EV (250ml) Administrar Sangue IV (250ml) 血液 IV (250ml) をあたえる IV 혈액 수혈 (250ml) + 输血液 (250ml) + 輸血液 (250ml) Give Plasma IV (1000ml) @@ -649,13 +741,15 @@ Dar Plasma IV (1000ml) Перелить пакет плазмы (1000 мл) Podaj osocze IV (1000ml) - Administrer du plasma en IV (1000ml) + Plasma en IV (1000ml) Podat plazmu (1000ml) Vérplazma adása intravénásan (1000ml) Effettua trasfusione plasma EV (1˙000ml) Administrar Plasma IV (1000ml) 血しょう IV (1000ml) をあたえる IV 혈장 수혈 (1000ml) + 输血浆 (1000ml) + 輸血漿 (1000ml) Give Plasma IV (500ml) @@ -663,13 +757,15 @@ Dar Plasma IV (500ml) Перелить пакет плазмы (500 мл) Podaj osocze IV (500ml) - Administrer du plasma en IV (500ml) + Plasma en IV (500ml) Podat plazmu (500ml) Vérplazma adása intravénásan (500ml) Effettua trasfusione plasma EV (500ml) Administrar Plasma IV (500ml) 血しょう IV (500ml) をあたえる IV 혈장 수혈 (500ml) + 输血浆 (500ml) + 輸血漿 (500ml) Give Plasma IV (250ml) @@ -677,13 +773,15 @@ Dar Plasma IV (250ml) Перелить пакет плазмы (250 мл) Podaj osocze IV (250ml) - Administrer du plasma en IV (250ml) + Plasma en IV (250ml) Podat plazmu (250ml) Vérplazma adása intravénásan (250ml) Effettua trasfusione plasma EV (250ml) Administrar Plasma IV (250ml) 血しょう IV (250ml) をあたえる IV 혈장 수혈 (250ml) + 输血浆 (250ml) + 輸血漿 (250ml) Give Saline IV (1000ml) @@ -691,13 +789,15 @@ Dar Salino IV (1000ml) Перелить пакет физраствора (1000 мл) Podaj sól fizjologiczną IV (1000ml) - Administrer de la solution saline en IV (1000ml) + Solution saline en IV (1000ml) Podaz fyz. roztok (1000ml) Sós víz adása intravénásan (1000ml) Effettua trasfusione salina EV (1˙000ml) Administrar Soro IV (1000ml) - 血しょう IV (1000ml) をあたえる + 生理食塩水 IV (1000ml) をあたえる IV 생리식염수 수혈 (1000ml) + 注射生理食盐水 (1000ml) + 注射生理食鹽水 (1000ml) Give Saline IV (500ml) @@ -705,13 +805,15 @@ Dar Salino IV (500ml) Перелить пакет физраствора (500 мл) Podaj sól fizjologiczną IV (500ml) - Administrer de la solution saline en IV (500ml) + Solution saline en IV (500ml) Podaz fyz. roztok (500ml) Sós víz adása intravénásan (500ml) Effettua trasfusione salina EV (500ml) Administrar Soro IV (500ml) - 血しょう IV (500ml) をあたえる + 生理食塩水 IV (500ml) をあたえる IV 생리식염수 수혈 (500ml) + 注射生理食盐水 (500ml) + 注射生理食鹽水 (500ml) Give Saline IV (250ml) @@ -719,13 +821,15 @@ Dar Salino IV (250ml) Перелить пакет физраствора (250 мл) Podaj sól fizjologiczną IV (250ml) - Administrer de la solution saline en IV (250ml) + Solution saline en IV (250ml) Podaz fyz. roztok (250ml) Sós víz adása intravénásan (250ml) Effettua trasfusione salina EV (250ml) Administrar Soro IV (250ml) - 血しょう IV (250ml) をあたえる + 生理食塩水 IV (250ml) をあたえる IV 생리식염수 수혈 (250ml) + 注射生理食盐水 (250ml) + 注射生理食鹽水 (250ml) Minor @@ -733,20 +837,22 @@ Menor Несрочная помощь Normalny - Mineur + Traitement en attente Minimální Enyhe Minore Leve 保留群 경미 + 轻微 + 輕微 Delayed Retrasado Срочная помощь Opóźniony - Différé + Traitement urgent Verzögert Odložitelný Késleltetett @@ -754,13 +860,15 @@ Atrasado 待機的治療群 늦어짐 + 延后 + 延後 Immediate Inmediato Неотложная помощь Natychmiastowy - Urgence Immédiate + Traitement immédiat Sofort Okamžitý Azonnali @@ -768,6 +876,8 @@ Imediato 再優先治療群 긴급 + 紧急 + 緊急 Deceased @@ -782,13 +892,15 @@ Falecido 死亡群 사망 + 死亡 + 死亡 None Ninguno Отсутствует Brak - Aucun + Pas de fiche Keine Nic Semmi @@ -796,6 +908,8 @@ Nenhum なし 없음 + 未分类 + 未分類 Normal breathing @@ -810,13 +924,15 @@ Respiração normal 通常の呼吸 정상 호흡 + 呼吸正常 + 呼吸正常 No breathing Keine Atmung Дыхание отсутствует No respira - Aucune respiration + Pas de respiration Brak oddechu Nedýchá Nincs légzés @@ -824,12 +940,14 @@ Não respira 息をしていない 호흡 불가 + 没有呼吸 + 沒有呼吸 Difficult breathing Дыхание затруднено Dificultad para respirar - Difficultée respiratoire + Difficulté respiratoire Trudności z oddychaniem Schwere Atmung Dýchá s obtížemi @@ -838,6 +956,8 @@ Dificuldade para respirar 呼吸が苦しそうだ 호흡 곤란 + 呼吸困难 + 呼吸困難 Almost no breathing @@ -852,6 +972,8 @@ Quase não respira ほとんど呼吸をしていない 호흡이 없음 + 快要没呼吸 + 快要沒呼吸 Bleeding @@ -866,13 +988,15 @@ Sangrando 出血している 출혈 + 流血中 + 流血中 - In Pain + In pain Hat Schmerzen Испытывает боль Con dolor - Ressent de la douleur + Douleur moyenne W bólu V bolestech Fájdalom alatt @@ -880,6 +1004,8 @@ Com dor 痛みがある 고통 + 疼痛中 + 疼痛中 Lost a lot of Blood @@ -894,6 +1020,8 @@ Perdeu muito sangue 大量出血している 많은 양의 혈액을 잃음 + 大量失血中 + 大量失血中 Tourniquet [CAT] @@ -908,6 +1036,8 @@ Torniquete [CAT] 止血帯 [CAT] 지혈대 [CAT] + 军用止血带 + 軍用止血帶 Receiving IV [%1ml] @@ -915,27 +1045,31 @@ Recibiendo IV [%1ml] Принимается переливание [%1 мл] Otrzymywanie IV [pozostało %1ml] - Transfusion en IV [%1ml] + Transfusion : [%1ml] Přijímání transfúze [%1ml] Infúzióra kötve [%1ml] Ricevendo EV [%1ml] Recebendo IV [%1ml] IV [%1ml] を投与されている IV로 [%1ml] 수혈중 + 接收静脉注射液中 [%1ml] + 接收靜脈注射液中 [%1ml] Bandage (Basic) Bandage (Einfach) Повязка (обычная) Vendaje (Básico) - Bandage (Standard) + Pansement adhésif Bandaż (jałowy) Obvaz (Standartní) Kötszer (Általános) Bendaggio (base) Bandagem(Básico) - 包帯 (ベーシック) + 包帯 (緊急圧迫) 붕대 (기본) + 基础绷带 + 基礎繃帶 Used to cover a wound @@ -950,48 +1084,56 @@ Slouží k překrytí poranění 傷口をおおう 상처를 덮을때 씁니다 + 用于覆盖伤口 + 用於覆蓋傷口 A dressing, that is a particular material used to cover a wound, which is applied over the wound once bleeding has been stemmed. Ein Verband, der aus einem besonderen Material besteht um die Wunde zu schützen, nachdem die Blutung gestoppt wurde. Повязка, накладываемая поверх раны после остановки кровотечения. Un apósito, material específico utilizado para cubrir una herida, se aplica sobre la herida una vez ha dejado de sangrar. - Bandage fait d'un matériel spécial utilisé pour couvrir une blessure, qui peut etre appliqué dès que le saignement a été stoppé. + Pansement utilisé pour couvrir une blessure lorsque le saignement a été stoppé. Opatrunek materiałowy, używany do przykrywania ran, zakładany na ranę po zatamowaniu krwawienia. Egy különleges anyagú kötszer sebek betakarására, amelyet a vérzés elállítása után helyeznek fel. Una benda apposita, utilizzata per coprire una ferita, la quale viene applicata su di essa una volta fermata l'emorragia. Uma curativo, material específico para cobrir um ferimento que é aplicado assim que o sangramento é estancando. Obvaz je vhodným způsobem upravený sterilní materiál, určený k překrytí rány, případně k fixaci poranění. - ドレッシングは、傷口を血液凝固剤でおおうようにできていて、つかうと出血の原因を取りさります。 + 緊急圧迫包帯は、傷口を血液凝固剤でおおうようにできていて、つかうと出血の原因を取りさります。 드레싱, 출혈을 막고서 상처를 덮기위해 쓰는 물건입니다. + 用于覆盖伤口以防止出血, 透过敷料的止血剂来让出血慢慢停止. + 用於覆蓋傷口以防止出血, 透過敷料的止血劑來讓出血慢慢停止. Packing Bandage Mullbinde Тампонирующая повязка Vendaje compresivo - Bandage gauze + Bande extensible Bandaż (uciskowy) Nyomókötszer Bendaggio compressivo Bandagem de Compressão Obvaz (Tlakový) - パッキング バンテージ + 弾性包帯 거즈 붕대 + 包扎绷带 + 包紮繃帶 Used to pack medium to large wounds and stem the bleeding Wird verwendet, um mittlere bis große Wunden abzudecken und Blutungen zu stoppen Для тампонирования ран среднего и большого размера и остановки кровотечения. Se utiliza para vendar heridas medianas o grandes y detener el sangrado - Utilisé pour couvrir des blessures de taille moyenne à grande. Arrête l'hémorragie. + Utilisé pour couvrir des blessures moyennes et grandes, ralentit le saignement. Używany w celu opatrywania średnich i dużych ran oraz tamowania krwawienia. Dobrze radzi sobie z tamowaniem ran płatowych oraz postrzałowych. Közepestől nagyig terjedő sebek betakarására és vérzés elállítására használt kötszer Usato su ferite medie o larghe per fermare emorragie. Usado para o preenchimento de cavidades geradas por ferimentos médios e grandes e estancar o sangramento. Používá se k zastavení středních až silnějších krvácení - パッキングは粘着フィルム状で、普通から大きめなケガにつかい止血します。 + 弾性包帯は粘着フィルム状で、普通から大きめなケガにつかい止血します。 중형 또는 대형 상처를 채우고 출혈을 막기위해 쓰입니다 + 用于包扎中到大型伤口, 并防止出血 + 用於包紮中到大型傷口, 並防止出血 A bandage used to pack the wound to stem bleeding and facilitate wound healing. Packing a wound is an option in large polytrauma injuries. @@ -1006,34 +1148,40 @@ Tlakový obvaz se skládá se ze sterilní krycí vrstvy, na kterou je přiložena silná vrstva savého materiálu stlačující cévu v ráně a která je přitlačována k ráně a připevněna obinadlem. Slouží k zastavení silnějších krvácení. 包帯をつかうと出血の原因を取りのぞき、それを促進させます。また大きめな多発性外傷にたいしても使えます。 출혈을 막고 상처를 치유하기 위한 붕대. 다발성외상의 경우 상처를 채우는것도 한 가지 방법입니다. + 用于包扎中到大型伤口, 并防止出血, 为在大型多处性伤口的选项之一! + 用於包紮中到大型傷口, 並防止出血, 為在大型多處性傷口的選項之一! Bandage (Elastic) Bandage (Elastisch) Повязка (давящая) Vendaje (Elástico) - Bandage (Élastique) + Bande compressive Bandaż (elastyczny) Obvaz (Elastický) Rögzító kötszer Benda (elastica) Bandagem (Elástica) - 包帯 (エラスティック) + 包帯 (伸縮) 붕대 (압박) + 弹性绷带 + 彈性繃帶 Bandage kit, Elastic Elastische Binde (Kompressionsbinde) Давящая повязка Kit de vendaje (Elástico) - Bandage compressif élastique + Bande compressive Bandaż elastyczny służy do opatrywania ran ciętych oraz kłutych. Dobrze radzi sobie również ze zgniecieniami tkanek miękkich oraz rozerwaniami powierzchni skóry. Rugalmas kötszercsomag, "rögzítő" Kit di bendaggio, elastico Kit de Bandagem, Elástica Sada obvazů, Elastická - 包帯キット (エラスティック) + 包帯キット (伸縮) 붕대, 압박 + 弹性绷带 + 彈性繃帶 Allows an even compression and extra support to the injured area. @@ -1048,6 +1196,8 @@ Hodí se k fixačním účelům a to i v oblastech kloubů. 負傷部分へ最大の対応と止血を続けられます。 부상 부위를 골고루 압박해주면서 동시에 고정시켜 줍니다. + 可对伤口持续压迫并固定以防止伤口情况变严重. + 可對傷口持續壓迫並固定以防止傷口情況變嚴重. Tourniquet (CAT) @@ -1062,12 +1212,14 @@ Torniquete (CAT) 止血帯 (CAT) 지혈대 [CAT] + 军用止血带 + 軍用止血帶 Slows down blood loss when bleeding Замедляет кровопотерю при кровотечении Reduce la velocidad de pérdida de sangre - Ralentit le saignement + Ralentit l'hémorragie Zmniejsza ubytek krwi z kończyn w przypadku krwawienia. Nie może być noszony zbyt długo ze względu na narastający ból z kończyny. Verringert den Blutverlust Lelassítja a vérvesztést vérzés esetén @@ -1076,12 +1228,14 @@ Zpomaluje ztráty krve při krvácení 出血しているときに、流れ出る量をへらします。 출혈 시 혈액손실을 늦춰줍니다 + 减缓失血的速度 + 減緩失血的速度 A constricting device used to compress venous and arterial circulation in effect inhibiting or slowing blood flow and therefore decreasing loss of blood. Жгут используется для прижатия сосудов к костным выступам, которое приводит к остановке или значительному уменьшению кровотечения Dispositivo utilizado para eliminar el pulso distal y de ese modo controlar la pérdida de sangre - Un dispositif permettant de compresser les artères et veines afin de réduire la perte de sang. + Un dispositif permettant de compresser les artères et veines afin de ralentir l'hémorragie. Opaska uciskowa CAT służy do tamowanie krwotoków w sytuacji zranienia kończyn z masywnym krwawieniem tętniczym lub żylnym. Ein Hilfsmittel, das Druck auf Venen und Arterien ausübt und so den Blutfluss verringert. Egy szűkítőeszköz, mely a vénás és artériás nyomás keringés helyi összenyomására szolgál, ezzel lelassítva vagy megállítva az adott területen a vérkeringést. Ez csökkenti a vérvesztés mértékét. @@ -1090,13 +1244,15 @@ Zařízení používané ke stlačení venózního a arteriálního oběhu. V důsledku dochází ke zpomalení toku krve a tedy i snížení ztrát krve. 止血帯は静脈や動脈へ圧力をかけ、循環を遅らせることで血液の流れをおそくし、失血を防ぎます。 정맥과 동맥을 압축시키켜 혈액순환을 억제 혹은 늦추게하여 혈액손실을 줄이는 도구입니다. + 用于压迫静脉与动脉的血液流动, 达到减缓失血速度的目的. + 用於壓迫靜脈與動脈的血液流動, 達到減緩失血速度的目的. Morphine autoinjector Morphium-Autoinjektor Морфин в пневмошприце Morfina auto-inyectable - Auto-injecteur de Morphine + Auto-injecteur de morphine Autostrzykawka z morfiną Auto-morfin Morfium autoinjektor @@ -1104,6 +1260,8 @@ Auto-injetor de morfina モルヒネ 모르핀 자동주사기 + 吗啡自动注射器 + 嗎啡自動注射器 Used to combat moderate to severe pain experiences @@ -1118,6 +1276,8 @@ Slouží k tlumení středně těžkých a těžkých bolestí 戦闘が収まったとき、痛みにたいしてつかいます。 심한 통증을 완화하는데 쓰입니다 + 减低中度至重度的疼痛感 + 減低中度至重度的疼痛感 An analgesic used to combat moderate to severe pain experiences. @@ -1132,51 +1292,59 @@ Analgetikum slouží k tlumení středně těžkých a těžkých bolestí 戦闘が収まったとき、モルヒネを痛みにたいしてつかいます。 심한 통증을 완화하기 위해 쓰이는 진통제입니다. + 止痛药的一种, 用于减低中度至重度的疼痛感. + 止痛藥的一種, 用於減低中度至重度的疼痛感. Adenosine autoinjector Adenosin-Autoinjektor Asenosina auto-inyectable Autostrzykawka z adenozyną - Auto-injécteur d'adénosine + Auto-injecteur d'adénosine Autoiniettore di adenosina Auto-adenosine Auto-injetor de Adenosina Аденозин в пневмошприце アデノシン 아데노신 자동주사기 + 腺苷自动注射器 + 腺苷自動注射器 Used to counter effects of Epinephrine Wird verwendet um die Symptome von Epiniphrin zu lindern Utilizada para contrarrestar los effectos de la Epinefrina Adenozyna. Stosowana do zwalczania efektów działania adrenaliny. - Utilisé pour contrer les effets de l'adrénaline + Utilisé pour contrer les effets de l'épinéphrine Usato per contrastare l'effetto dell'epinefrina Slouží jako protiváha Adrenalinu Usado para combater os efeitos da Epinefrina Используется для купирования эффектов адреналина アドレナリンの反対の効果としてつかいます。 에피네프린 대응책으로 쓰입니다 + 用来对付肾上腺素的影响 + 用來對付腎上腺素的影響 A drug used to counter the effects of Epinephrine Ein Medikament, das die Symptome von Epiniphrin bekämpft. Medicamento usado para contrarrestar los efectos de la Epinefrina. Organiczny związek chemiczny z grupy nukleozydów. Skuteczna w leczeniu częstoskurczu komorowego. Działa rozszerzająco na naczynia krwionośne. - Un composé utilisé pour contrer les effets de l'adrénaline + Un composé utilisé pour contrer les effets de l'épinéphrine Medicamento usato per contrastare l'effetto dell'epinefrina Droga používaná k tlumení efektu Adrenalinu Uma droga usada para combater os efeitos da Epinefrina Препарат используется для купирования эффектов адреналина つかうと、アドレナリンと反対の効果がでます。 에피네프린에 대응용으로 쓰이는 약품 + 一种药物用于减低肾上腺素的效果 + 一種藥物用於減低腎上腺素的效果 Atropine autoinjector Атропин в пневмошприце Atropina auto-inyectable - Auto-injecteur d'Atropine + Auto-injecteur d'atropine Autostrzykawka AtroPen Atropin-Autoinjektor Auto-atropine @@ -1185,6 +1353,8 @@ Auto-injetor de Atropina アトロピン 아트로핀 자동주사기 + 阿托品自动注射器 + 阿托品自動注射器 Used in NBC scenarios @@ -1199,6 +1369,8 @@ Používá se v přítomnosti nervových plynů 核・生物・化学兵器がつかわれている条件下にてつかいます。 핵,생물,화학 상황에 쓰입니다 + 使用于核生化污染的情况 + 使用於核生化汙染的情況 A drug used by the Military in NBC scenarios. @@ -1213,6 +1385,8 @@ Atropin slouží jako protijed na otravu organofosfátovými insekticidy (diazinon) a nervovými plyny. 核・生物・化学兵器がつかわれている条件下にてつかいます。 핵,생물,화학 상황에 쓰이는 군용 약품 + 军用神经解毒针, 用来应付核生化污染的情况. + 軍用神經解毒針, 用來應付核生化汙染的情況. Epinephrine autoinjector @@ -1227,6 +1401,8 @@ Auto-injetor de epinefrina アドレナリン 에피네프린 자동주사기 + 肾上腺素自动注射器 + 腎上腺素自動注射器 Increase heart rate and counter effects given by allergic reactions @@ -1241,6 +1417,8 @@ Zvyšuje srdeční frekvenci a chrání před alergickými reakcemi 心拍数を増加させたり、アレルギー反応を収める効果もあります。 심박수를 높이며 알러지반응의 대응책입니다 + 增加心跳速率的一种药物 + 增加心跳速率的一種藥物 A drug that works on a sympathetic response to dilate the bronchi, increase heart rate and counter such effects given by allergic reactions (anaphylaxis). Used in sudden cardiac arrest scenarios with decreasing positive outcomes. @@ -1255,82 +1433,94 @@ Zúžení periferních cév díky působení na alfa receptory a následné kontrakci hladkých svalů, tím dochází k tzv. centralizaci oběhu, krev se soustřeďuje v životně důležitých centrálních orgánech (srdce, mozek, plíce), působí také pozitivně na srdeční činnost a dochází ke zvýšení krevního tlaku a tepu. Dále se používá při náhlé srdeční zástavě. 薬は気管支を拡張するよう交感神経を拡張させ、心拍数を増加させます。それにアレルギー反応を収める効果もあります(アナフィラキシー ショック)。得られる効果は少ないですが、心停止している場合などにつかわれます。 기관지를 확장시키는 교감 신경 반응을 이끌어내는 약물로써, 심박을 높이고 알러지 효과에 대응합니다(아나필락시스). 심폐가 정지하는 경우 호전이 되지않을때 사용합니다. + 俗称强心针, 为一种支气管扩张药物, 会增加心跳速率并减缓过敏反应(过敏性休克), 在心跳骤停时有恢复心跳的效果! + 俗稱強心針, 為一種支氣管擴張藥物, 會增加心跳速率並減緩過敏反應(過敏性休克), 在心跳驟停時有恢復心跳的效果! Plasma IV (1000ml) Плазма для в/в вливания (1000 мл) Plasma IV (1000ml) - Plasma Sanguin IV (1000ml) + Plasma IV (1000ml) Osocze IV (1000ml) Plasma IV (1000ml) Vérplazma-infúzió (1000ml) Plasma EV (1000ml) Plasma IV (1000ml) Krevní plazma (1000ml) - 生理食塩水 IV (1000ml) + 血しょう IV (1000ml) 혈장 IV (250ml) + 血浆 (1000ml) + 血漿 (1000ml) A volume-expanding blood supplement. Дополнительный препарат, применяемый при возмещении объема крови. Suplemento para expandir el volumen sanguíneo. - Supplément visant à remplacer les volumes sanguin + Supplément sanguin visant à remplacer les volumes perdus. Składnik krwi, używany do zwiększenia jej objętości. Egy térfogatnövelő vérkiegészítmény. Aiuta ad aumentare il volume sanguigno. Volumenerweiterungsmittel (künstliches Blutvolumen) Suplemento para expandir o volume sanguíneo. - Intravenózně podávaný doplněk k zvětšení objemu krve + Intravenózně podávaný doplněk k zvětšení objemu krve 血液量を増加させる補助です。 혈액량을 늘리기위한 보조수단 입니다. + 可快速得到血液补充 + 可快速得到血液補充 A volume-expanding blood supplement. Дополнительный препарат, применяемый при возмещении объема крови. Suplemento para expandir el volumen sanguíneo. - Supplément visant à remplacer le volume sanguin et remplace les plaquettes. + Supplément visant à remplacer le volume sanguin perdu et remplace les plaquettes. Składnik krwi, używany do zwiększenia jej objętości. Egy térfogatnövelő vérkiegészítmény. Aiuta ad aumentare il volume sanguigno. Volumenerweiterungsmittel (künstliches Blutvolumen) Suplemento para expandir o volume sanguíneo. - Intravenózně podávaný doplněk k zvětšení objemu krve + Intravenózně podávaný doplněk k zvětšení objemu krve 血液量を増加させる補助です。 혈액량을 늘리기위한 보조수단 입니다. + 可快速得到血液补充 + 可快速得到血液補充 Plasma IV (500ml) Плазма для в/в вливания (500 мл) Plasma IV (500ml) - Plasma sanguin IV (500ml) + Plasma IV (500ml) Osocze IV (500ml) Plasma IV (500ml) Vérplazma-infúzió (500ml) Plasma EV (500ml) Plasma IV (500ml) Krevní plazma (500ml) - 生理食塩水 IV (500ml) + 血しょう IV (500ml) 혈장 IV (500ml) + 血浆 (500ml) + 血漿 (500ml) Plasma IV (250ml) Плазма для в/в вливания (250 мл) Plasma IV (250ml) - Plasma sanguin (250ml) + Plasma (250ml) Osocze IV (250ml) Plasma IV (250ml) Vérplazma-infúzió (250ml) Plasma EV (250ml) Plasma IV (250ml) Krevní plazma (250ml) - 生理食塩水 IV (250ml) + 血しょう IV (250ml) 혈장 IV (250ml) + 血浆 (250ml) + 血漿 (250ml) Blood IV (1000ml) Кровь для переливания (1000 мл) Sangre IV (1000ml) - Cullot sanguin IV (1000ml) + Culot sanguin IV (1000ml) Krew IV (1000ml) Blut IV (1000ml) Vér-infúzió (1000ml) @@ -1339,12 +1529,14 @@ Krevní transfúze (1000ml) 血液 IV (1000ml) 혈액 IV (1000ml) + 血液 (1000ml) + 血液 (1000ml) Blood IV, for restoring a patients blood (keep cold) Пакет крови для возмещения объёма потерянной крови (хранить в холодильнике) Sangre intravenosa, para restarurar el volumen sanguíneo (mantener frío) - Cullot sanguin O-, utilisé seulement lors de perte sanguine majeure afin de remplacer le volume sanguin perdu. Habituelment utilisé lors du transport ou dans un etablisement de soins. + Culot sanguin O-, utilisé seulement lors de perte sanguine majeure afin de remplacer le volume sanguin perdu. Habituellement utilisé lors du transport ou dans un établissement de soins. Krew IV, używana do uzupełnienia krwi u pacjenta, trzymać w warunkach chłodniczych. Vér-infúzió, intravénás bejuttatásra egy páciensnek (hidegen tárolandó) Sangue usato per ripristinare pazienti in cui si è verificata una perdita di sangue (conservare al fresco) @@ -1353,6 +1545,8 @@ Krevní transfuze pro doplnění pacientovi krve (skladujte v chladu) 血液 IV は、患者へ血液を補給します。(要低温保存) 혈액 IV, 환자에게 혈액을 공급합니다. (차갑게 할것) + 血液, 用于补充伤者流失的血液 (需冷藏) + 血液, 用於補充傷者流失的血液 (需冷藏) O Negative infusion blood used in strict and rare events to replenish blood supply usually conducted in the transport phase of medical care. @@ -1360,19 +1554,21 @@ Krew 0 Rh-, używana w rzadkich i szczególnych przypadkach do uzupełnienia krwi u pacjenta, zazwyczaj w trakcie fazie transportu rannej osoby do szpitala. Utilice sólo durante gran pérdida de sangre para reemplazar el volumen de sangre perdida. Uso habitual durante el transporte de heridos. Sangue 0 negativo usato per ripristinare sangue in pazienti in cui si è verificata una perdita di sangue. - Cullot sanguin O- utilisé dans de rares et stricts cas pour compléter une perte de sang importante. Administré normalement lors d'un MEDEVAC. + Culot sanguin O- utilisé dans de rares et stricts cas pour compléter une perte de sang importante. Administré normalement lors d'un MEDEVAC. O Negative Blutinfusion wird nur in seltenen Fällen verwendet, um den Bluthaushalt des Patienten zu ergänzen. Wird in der Regel wärend der Transportphase durchgeführt. - Sangue O- , utilizado em casos raros para rapidamente repor o sangue. Uso habitual ocorre durante o transporte ou em estações de tratamento. + Sangue O- , utilizado em casos raros para rapidamente repor o sangue. Uso habitual ocorre durante o transporte ou em estações de tratamento. Nullás vércsoportú, Rh-negatív vér-infúzió, melyet kritikus és ritka helyzetekben vérutánpótlásra használnak, jellemzően az orvosi ellátás szállítási fázisa közben. 0 Rh negativní krev se používá v vzácných případech k doplnění pacientovy hladiny krve, obvykle při převozu zraněné osoby do nemocnice. O 型への輸血はまれで厳格であり、通常は治療のための輸送段階で輸血をおこないます。 O- 형 혈액 투여는 매우 엄격하고 드문 혈액보급의 경우에 쓰이는데 주로 치료의 운송단계에서 사용됩니다. + O型负值注射用血液, 在紧急情况时使用, 用于补充伤者流失的血液 + O型負值注射用血液, 在緊急情況時使用, 用於補充傷者流失的血液 Blood IV (500ml) Кровь для переливания (500 мл) Sangre IV (500ml) - Cullot sanguin IV (500ml) + Culot sanguin IV (500ml) Krew IV (500ml) Blut IV (500ml) Vér-infúzió (500ml) @@ -1381,12 +1577,14 @@ Krevní transfúze (500ml) 血液 IV (500ml) 혈액 IV (500ml) + 血液 (500ml) + 血液 (500ml) Blood IV (250ml) Кровь для переливания (250 мл) Sangre IV (250ml) - Cullot sanguin IV (250ml) + Culot sanguin IV (250ml) Krew IV (250ml) Blut IV (250ml) Vér-infúzió (250ml) @@ -1395,12 +1593,14 @@ Krevní transfúze (250ml) 血液 IV (250ml) 혈액 IV (250ml) + 血液 (250ml) + 血液 (250ml) Saline IV (1000ml) Физраствор для в/в вливания (1000 мл) Salino IV (1000ml) - Solution saline 0.9% IV (1000ml) + Solution saline IV (1000ml) Sól fizjologiczna IV (1000ml) Kochsalzlösung (1000ml) 0,9%-os sósvíz-infúzió (1000ml) @@ -1409,12 +1609,14 @@ Fyziologický roztok (1000ml) 生理食塩水 IV (1000ml) 생리식염수 IV (1000ml) + 生理食盐水 (1000ml) + 生理食鹽水 (1000ml) Saline IV, for restoring a patients blood Пакет физраствора для возмещения объёма потерянной крови Solución salina intravenosa, para restaurar el volumen sanguíneo - Solution saline 0.9% IV, pour rétablir temporairement la tension artérielle + Solution saline, pour rétablir temporairement la tension artérielle Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). 0,9%-os sósvíz-infúzió, a páciens vérmennyiségének helyreállítására Soluzione salina, usata per ripristinare sangue nei pazienti. @@ -1423,6 +1625,8 @@ Fyziologický roztok se aplikuje intravenózně a slouží k obnově pacientovi krve 生理食塩水 IV は、患者の血液量を補助します 생리식염수, 환자의 혈액량을 보충할때 쓰입니다 + 生理食盐水, 用于恢复伤者血液 + 生理食鹽水, 用於恢復傷者血液 A medical volume-replenishing agent introduced into the blood system through an IV infusion. @@ -1432,17 +1636,19 @@ Używany w medycynie w formie płynu infuzyjnego jako środek nawadniający i uzupełniający niedobór elektrolitów, podawany dożylnie (IV). Egy orvosi térfogat-helyreállító készítmény, melyet intravénás módon lehet a szervezetbe juttatni. Una soluzione medica per ripristinare il volume del sangue introdotta tramite trasfusione EV. - Ein medizinisches Volumenersatzmittel, dass durch einen intravenösen Zugang in den Blutkreislauf verabreicht wird. - Uma reposição temporaria para restaurar a pressão arterial perdida por perda de sangue. + Ein medizinisches Volumenersatzmittel, dass durch einen intravenösen Zugang in den Blutkreislauf verabreicht wird. + Uma reposição temporaria para restaurar a pressão arterial perdida por perda de sangue. Fyziologický roztok se využívá nejčastěji jako infuze při dehydrataci organismu. 生理食塩水 IV を静脈へ投与し、血液量を増加させることができます。 혈류에 IV로 투여되는 의료 용적 대체 요법 + 利用静脉注射进入人体血液系统, 帮助伤者血液恢复 + 利用靜脈注射進入人體血液系統, 幫助傷者血液恢復 Saline IV (500ml) Физраствор для в/в вливания (500 мл) Salino IV (500ml) - Solution saline 0.9% IV (500ml) + Solution saline IV (500ml) Sól fizjologiczna IV (500ml) Kochsalzlösung (500ml) 0,9%-os sósvíz-infúzió (500ml) @@ -1451,12 +1657,14 @@ Fyziologický roztok (500ml) 生理食塩水 IV (500ml) 생리식염수 IV (500ml) + 生理食盐水 (500ml) + 生理食鹽水 (500ml) Saline IV (250ml) Физраствор для в/в вливания (250 мл) Salino IV (250ml) - Solution saline 0.9% IV (250ml) + Solution saline IV (250ml) Sól fizjologiczna IV (250ml) Kochsalzlösung (250ml) 0,9%-os sósvíz-infúzió (250ml) @@ -1465,6 +1673,8 @@ Fyziologický roztok (250ml) 生理食塩水 IV (250ml) 생리식염수 IV (250ml) + 生理食盐水 (250ml) + 生理食鹽水 (250ml) Basic Field Dressing (QuikClot) @@ -1477,8 +1687,10 @@ Bendaggio emostatico (QuikClot) Bandagem básica (Coagulante) Hemostatický obvaz (QuikClot) - ベーシック フィールド ドレッシング(クイック クロット) + 緊急圧迫止血包帯 (クイッククロット) 필드 드레싱 (퀵 클롯) + 基本战地包扎 (止血粉) + 基本戰地包紮 (止血粉) QuikClot bandage @@ -1491,8 +1703,10 @@ Bendaggio emostatico (QuikClot) Bandagem com agente coagulante Hemostatický obvaz (QuikClot) - クイック クロット + クイッククロット 퀵 클롯 붕대 + 止血粉绷带 + 止血粉繃帶 Hemostatic bandage with coagulant that stops bleeding. @@ -1503,15 +1717,17 @@ Verband mit Gerinnungsmittel, um starke Blutung zu behandeln. Hemostatikus kötszer egy vérzésgátló anyaggal. Bendaggio emostatico con coagulante che permette di arrestare perdite di sangue - Bandagem Hemostática com coagulante que controla hemorragia médias e grandes com risco de vida. + Bandagem Hemostática com coagulante que controla hemorragia médias e grandes com risco de vida. Hemostatický obvaz určený k zástavě krvácení 血液凝固剤をふくむ包帯により、止血できます。 지혈시 사용하는 붕대로 혈액 응고제를 포함하고있습니다. + 包含止血粉成分的止血绷带, 可用于止血 + 包含止血粉成分的止血繃帶, 可用於止血 Personal Aid Kit Аптечка - Trousse de premiers soins + Trousse sanitaire Equipo de primeros auxilios Apteczka osobista Persönliches Erste-Hilfe-Set @@ -1521,40 +1737,46 @@ Osobní lékárnička (PAK) 応急処置キット 개인응급키트 + 个人急救包 + 個人急救包 Includes various treatment kit needed for stitching or advanced treatment Содержит различные материалы и инструменты для зашивания ран и оказания специальной медпомощи. Incluye material médico para tratamientos avanzados - Inclue du matériel medical pour les traitements avancés, tel les points de suture. + Inclut du matériel medical pour les traitements délicats, tel les points de suture. Zestaw środków medycznych do opatrywania ran i dodatkowego leczenia po-urazowego. Beinhaltet medizinisches Material für fortgeschrittene Behandlung und zum Nähen. Változatos segédfelszereléseket tartalmaz sebvarráshoz és haladó elsősegélynyújtáshoz Include vario materiale medico per trattamenti avanzati. Inclui vários tratamentos materiais para custura e tratamento avançado - Osobní lékárnička obsahuje zdravotnický materiál umožňující šití a pokročilejší ošetřování raněných + Osobní lékárnička obsahuje zdravotnický materiál umožňující šití a pokročilejší ošetřování raněných 縫合や高度な処置に必要とされる、さまざまな治療器具が含まれています。 봉합및 고급 조치에 필요한 다양한 치료 도구가 있습니다. + 包含各种医疗套件, 以及进阶伤口系统需要的缝合用品. + 包含各種醫療套件, 以及進階傷口系統需要的縫合用品. Personal Aid Kit for in field stitching or advanced treatment W znacznym stopniu poprawia stan pacjenta Полевая аптчека для продвинутого лечения и зашивания ран Persönliches Erste-Hilfe-Set zum ambulanten Nähen und fortgeschrittener Behandlung. - Trousse de premiers soins pour coudre sur le terrain et traitements avancés. + Inclut du matériel medical pour les traitements délicats, tel les points de suture. Equipo de primeros auxilios para sutura de campaña o tratamientos avanzados Elsősegélycsomag, terepen való sebvarráshoz és haladó ellátáshoz Kit de primeiros socorros para sutura ou tratamentos avançados - Osobní lékárnička obsahuje zdravotnický materiál umožňující šití a pokročilejší ošetřování raněných v poli + Osobní lékárnička obsahuje zdravotnický materiál umožňující šití a pokročilejší ošetřování raněných v poli Pronto soccorso personale da campo per mettersi i punti o per trattamenti avanzati. 戦場で縫合や高度な処置に必要とされる、さまざまな治療器具が含まれています。 야전에서 봉합및 고급 조치를 위한 개인응급키트 + 个人急救包可用于战地缝合手术或进阶伤口系统使用. + 個人急救包可用於戰地縫合手術或進階傷口系統使用. Use Personal Aid Kit Erste-Hilfe-Set benutzen Использовать аптечку - Utiliser la Trousse de premier soins + Utiliser la trousse sanitaire Użyj apteczki osobistej Usar equipo de primeros auxilios Elsősegélycsomag használata @@ -1562,7 +1784,9 @@ Použít osobní lékárničku (PAK) Usa il pronto soccorso personale 応急処置キットをつかう - 개 응급 키트사용하기 + 개인 응급 키트사용하기 + 使用个人急救包 + 使用個人急救包 Surgical Kit @@ -1577,6 +1801,8 @@ Chirurgická sada 縫合キット 봉합 키트 + 手术包 + 手術包 Surgical Kit for in field advanced medical treatment @@ -1591,6 +1817,8 @@ Chirurgická sada určená k pokročilejším zdravotnickým zákrokům v poli 縫合キットは戦場で高度な処置をするためにつかわれます。 야전 상황에서 고급 의료 처치를 위해 사용되는 봉합 키트 + 用于在战场上为伤口进行缝合(需要开启进阶伤口系统). + 用於在戰場上為傷口進行縫合(需要開啟進階傷口系統). Surgical Kit for in field advanced medical treatment @@ -1605,6 +1833,8 @@ Chirurgická sada určená k pokročilejším zdravotnickým zákrokům v poli 縫合キットは戦場で高度な処置をするためにつかわれます。 야전 상황에서 고급 의료 처치를 위해 사용되는 봉합 키트 + 用于在战场上为伤口进行缝合(需要开启进阶伤口系统). + 用於在戰場上為傷口進行縫合(需要開啟進階傷口系統). Use Surgical Kit @@ -1619,6 +1849,8 @@ Usar kit cirúrgico 縫合キットをつかう 봉합키트 사용하기 + 使用手术包 + 使用手術包 Bodybag @@ -1632,7 +1864,9 @@ Saco para cadáver Pytel na mrtvoly 死体袋 - 시체 운반 부대 + 시체 가방 + 尸袋 + 屍袋 A bodybag for dead bodies @@ -1646,7 +1880,9 @@ Um saco para corpos mortos Pytel na mrtvoly 死体袋は死体を入れるためにつかいます - 시체를 운반할때 쓰는 부대입니다 + 시체를 운반할때 쓰는 가방입니다 + 用来装尸体用 + 用來裝屍體用 A bodybag for dead bodies @@ -1660,7 +1896,9 @@ Um saco para corpos mortos. Pytel na mrtvoly 死体袋は死体を入れるためにつかいます - 시체를 운반할때 쓰는 부대입니다 + 시체를 운반할때 쓰는 가방입니다 + 用来装尸体用 + 用來裝屍體用 Blood Pressure @@ -1675,10 +1913,12 @@ Krevní tlak 血圧を測る 혈압 + 血压 + 血壓 Checking Blood Pressure.. - Mesure de la tension... + Prise de la tension... Проверка артериального давления... Comprobando presión arterial... Sprawdzanie ciśnienia krwi... @@ -1689,13 +1929,15 @@ Měřím krevní tlak... 血圧を測定中・・・ 혈압 측정증... + 检查血压中... + 檢查血壓中... %1 checked Blood Pressure: %2 %1 kontrollierte Blutdruck: %2 %1 controllata pressione sanguigna: %2 %1 проверил артериальное давление: %2 - %1 à vérifié la tension: %2 + %1 a mesuré la tension: %2 %1 sprawdził ciśnienie krwi: %2 %1 verificada la presión arterial: %2 %1 ellenőrizte a vérnyomást: %2 @@ -1703,10 +1945,12 @@ %1 verificou pressão arterial: %2 %1 が測った血圧は: %2 %1 (이)가 혈압을 측정했습니다: %2 + 已由%1确认血压: %2 + 已由%1確認血壓: %2 You checked %1 - Vous diagnostiquez %1 + Vous examinez %1 Вы осмотрели раненого %1 Examinando a %1 Zbadałeś %1 @@ -1717,10 +1961,12 @@ Zkontroloval jsi %1 自分の血圧は %1 나의 혈압은 %1 이다 + 你已经检查 %1 + 你已經檢查 %1 You find a blood pressure of %2/%3 - Vous avez trouvé une tension de %2/%3 + Vous avez mesuré une tension de %2/%3 Артериальное давление %2/%3 La Presión Arterial es %2/%3 A vérnyomás %2/%3 @@ -1731,6 +1977,8 @@ Naměřil si krevní tlak u %2/%3 血圧は %2/%3 혈압이 %2/%3 이다 + 血压为%2/%3 + 血壓為%2/%3 You find a low blood pressure @@ -1745,6 +1993,8 @@ Naměřil si nízký krevní tlak 血圧はかなり低い 혈압이 매우 낮다 + 发现到低血压 + 發現到低血壓 You find a normal blood pressure @@ -1759,10 +2009,12 @@ Naměřil si normální krevní tlak 血圧は通常 혈압이 정상이다 + 发现到正常血压 + 發現到正常血壓 You find a high blood pressure - Tension haute + Tension élevée Давление высокое La presión arterial es alta Wyczuwasz wysokie ciśnienie krwi @@ -1773,6 +2025,8 @@ Naměřil si vysoký krevní tlak 血圧はかなり高い 혈압이 매우 높다 + 发现到高血压 + 發現到高血壓 You find no blood pressure @@ -1787,6 +2041,8 @@ Nenaměřil si žádný krevní tlak 血圧は測れなかった 혈압이 잡히지 않는다 + 量不到血压 + 量不到血壓 You fail to find a blood pressure @@ -1801,13 +2057,15 @@ Nedokázal si změřit krevní tlak 血圧を測るのに失敗 혈압을 잡을 수 없었다 + 检查血压的动作失败 + 檢查血壓的動作失敗 Low Niedrig Bassa Низкое - Faible + basse Niskie Baja Alacsony @@ -1815,13 +2073,15 @@ Baixa 低い 낮음 + + Normal Normal Normale Нормальное - Normale + normale Normalne Normal Normális @@ -1829,13 +2089,15 @@ Normal 通常 보통 + 正常 + 正常 High Hoch Alta Высокое - Haute + élevée Wysokie Alta Magas @@ -1843,13 +2105,15 @@ Alta 高い 높음 + + No Blood Pressure Kein Blutdruck Nessuna Pressione Sanguigna Артериальное давление отсутствует - Aucune tension + pas de tension Brak ciśnienia krwi Sin presión arterial Nincs vérnyomás @@ -1857,6 +2121,8 @@ Sem pressão arterial 血圧なし 혈압 없음 + 无血压 + 無血壓 Pulse @@ -1871,10 +2137,12 @@ Puls 心拍数 맥박 + 脉搏 + 脈搏 Checking Heart Rate... - Vérification du rythme cardiaque... + Vérification du pouls... Проверка пульса... Comprobando ritmo cardíaco... Sprawdzanie tętna... @@ -1885,6 +2153,8 @@ Kontroluji srdeční tep... 心拍数を測定中・・・ 맥박 확인중... + 检查心跳中... + 檢查心跳中... You checked %1 @@ -1899,13 +2169,15 @@ Zkontroloval si %1 心拍数は %1 나의 맥박은 %1 이다 + 你已经检查 %1 + 你已經檢查 %1 %1 checked Heart Rate: %2 %1 kontrollierte Herzfrequenz: %2 %1 Controllata Frequenza Cardiaca: %2 %1 проверил пульс: %2 - %1 à vérifié le rythme cardiaque: %2 + %1 a vérifié le pouls de : %2 %1 sprawdził tętno: %2 %1 verificado el ritmo cardíaco: %2 %1 ellenőrizte a szívverés-számot: %2 @@ -1913,6 +2185,8 @@ %1 verificou a frequência cardíaca: %2 %1 が測った心拍数は: %2 %1 (이)가 맥박을 측정했습니다: %2 + 已由%1确认心跳: %2 + 已由%1確認心跳: %2 None @@ -1922,18 +2196,20 @@ Keine Žádný Nada - Aucun + aucun Nincs Niente なし 없음 + + Weak Schwach Lento Слабый - Faible + lent Słabe Débil Gyenge @@ -1941,13 +2217,15 @@ Fraca 弱い 약함 + 微弱 + 微弱 Normal Normal Normale Нормальный - Normal + normal Normalne Normal Normális @@ -1955,13 +2233,15 @@ Normal 通常 보통 + 正常 + 正常 Strong Stark Veloce Сильный - Fort + rapide Silne Fuerte Erős @@ -1969,10 +2249,12 @@ Forte 強い 강함 + 过快 + 過快 You find a Heart Rate of %2 - Rythme cardiaque de %2 + %2 battements par minute Пульс %2 уд./мин. El ritmo cardíaco es de %2 Wyczuwasz tętno o wartości %2 @@ -1983,10 +2265,12 @@ Nahmatal jsi srdeční tep u %2 心拍数は %2 맥박이 %2 이다 + 心跳为%2 + 心跳為%2 You find a weak Heart Rate - Rythme cardiaque faible + Poulslent Пульс слабый El ritmo cardíaco es débil Wyczuwasz słabe tętno @@ -1997,10 +2281,12 @@ Nahmatal si slabý srdeční puls 自分の心拍数は低い 약한 맥박이다 + 心跳微弱 + 心跳微弱 You find a strong Heart Rate - Rythme cardiaque élevé + pouls rapide Пульс учащенный El ritmo cardíaco está acelerado Wyczuwasz silne tętno @@ -2011,10 +2297,12 @@ Nahmatal si silný srdeční puls 自分の心拍数は強い 강한 맥박이다 + 心跳过快 + 心跳過快 You find a normal Heart Rate - Rythme cardiaque normal + pouls normal Пульс в норме El ritmo cardíaco es bueno Wyczuwasz normalne tętno @@ -2025,10 +2313,12 @@ Nahmatal si normální srdeční puls 自分の心拍数は通常 보통 맥박이다 + 心跳正常 + 心跳正常 You find no Heart Rate - Pas de rythme cardiaque + pas de pouls Пульс не прощупывается No tiene ritmo cardíaco Wyczuwasz brak tętna @@ -2039,10 +2329,12 @@ Žádný puls 心拍数を測れなかった 맥박을 찾을 수가 없다 + 量不到心跳 + 量不到心跳 Response - Etat de Conscience + Conscience Реакция Respuesta Przytomność @@ -2053,10 +2345,12 @@ Odezva 反応を見る 반응 + 反应 + 反應 You check response of patient - Vous vérifiez la réponse du patient + Vous évaluez l'état de conscience Вы проверяете реакцию раненого Compruebas si el paciente reacciona Sprawdzasz przytomność pacjenta @@ -2067,6 +2361,8 @@ Zkontroloval jsi reakci pacienta 患者からの反応をみる 대상의 반응 확인중 + 检查伤者的反应 + 檢查傷者的反應 %1 is responsive @@ -2081,6 +2377,8 @@ %1 odpovídá %1 は反応あり %1 은 반응이있다 + %1 有反应 + %1 有反應 %1 is not responsive @@ -2095,6 +2393,8 @@ %1 neodpovídá %1 の反応なし %1 은 반응이없다 + %1 没有反应 + %1 沒有反應 You checked %1 @@ -2109,6 +2409,8 @@ Zkontroloval jsi %1 %1 を見た %1 을 확인함 + 你已经检查 %1 + 你已經檢查 %1 Patient %1<br/>is %2.<br/>%3.<br/>%4 @@ -2121,8 +2423,10 @@ A páciens, %1,<br/>%2.<br/>%3.<br/>%4 Pacient %1<br/>je %2.<br/>%3.<br/>%4 Paciente %1<br/>é %2.<br/>%3.<br/>%4 - 痛みは %1&lt;br/&gt; %2.&lt;br/&gt;%3.&lt;br/&gt;%4 + 痛み %1<br/>は %2.<br/>%3.<br/>%4 환자 %1<br/>는 %2.<br/>%3.<br/>%4 + 伤者 %1<br/>is %2.<br/>%3.<br/>%4 + 傷者 %1<br/>is %2.<br/>%3.<br/>%4 alive @@ -2137,6 +2441,8 @@ vivo 生存 생존 + 活着 + 活著 dead @@ -2144,13 +2450,15 @@ мёртв muerto tot - mort + décédé martwy halott mrtev morto 死亡 사망 + 死亡 + 死亡 He's lost some blood @@ -2165,6 +2473,8 @@ Ele perdeu um pouco de sangue 彼は出血している 적은 양의 피를 잃었다 + 他流失一些血液 + 他流失一些血液 He's lost a lot of blood @@ -2179,6 +2489,8 @@ Ha perso molto sangue 彼は大量出血している 많은 양의 피를 잃었다 + 他流失大量血液 + 他流失大量血液 He hasn't lost blood @@ -2193,6 +2505,8 @@ Ele não perdeu sangue 彼は出血していない 피를 잃지 않았다 + 他并没有失血 + 他並沒有失血 He is in pain @@ -2206,7 +2520,9 @@ Je v bolestech Ele está com dor 彼には痛みがあるようだ - 고통스럽다 + 통증이 있다 + 他感到疼痛 + 他感到疼痛 He is not in pain @@ -2220,11 +2536,13 @@ Nemá žádné bolesti Ele não está com dor 彼には痛みがないようだ - 고통스럽지 않다 + 통증이 없다 + 他不会疼痛 + 他不會疼痛 Bandaged - Bandé + Pansé Повязка наложена Vendado Zabandażowano @@ -2235,10 +2553,12 @@ Obvázaný 包帯 붕대 감음 + 绷带 + 繃帶 You bandage %1 (%2) - Vous bandez %1 (%2) + Vous pansez %1 (%2) Вы перевязали раненого %1 (%2) Aplicas vendaje a %1 en %2 Bandażujesz %1 (%2) @@ -2249,10 +2569,12 @@ Obvazuješ %1 (%2) %1 (%2) 包帯をつかった %1 (%2) 붕대를 감았다 + 你正在对 %1 (%2) 包扎绷带中 + 你正在對 %1 (%2) 包紮繃帶中 %1 is bandaging you - %1 vous bande + %1 vous panse %1 перевязывает вас %1 te está vendando %1 bandażuje Ciebie @@ -2263,6 +2585,8 @@ %1 tě obvazuje %1 は自分に包帯を巻いている %1 (이)가 나에게 붕대를 감고있다 + %1 正在对你包扎绷带中 + %1 正在對你包紮繃帶中 You start stitching injuries from %1 (%2) @@ -2277,6 +2601,8 @@ Zašíváš rány %1 (%2) あなたは %1 (%2) の外傷へ縫合をはじめた 나는 %1(%2) 상처로부터 봉합을 시작했다 + 你正开始对 %1 (%2) 缝合伤口中 + 你正開始對 %1 (%2) 縫合傷口中 Stitching @@ -2291,6 +2617,8 @@ Šití 縫合 붕합중 + 缝合中 + 縫合中 You treat the airway of %1 @@ -2305,6 +2633,8 @@ Ošetřuješ dýchací cesty %1 %1 の気道を診断する %1의 기도를 확보했다 + 你治疗 %1 的呼吸道 + 你治療 %1 的呼吸道 Airway @@ -2319,6 +2649,8 @@ Dýchací cesty 気道 기도 + 呼吸道 + 呼吸道 %1 is treating your airway @@ -2333,6 +2665,8 @@ %1 ošetřuje tvoje dýchací cesty %1 はあなたの気道を見ている %1 (이)가 나의 기도를 확보중이다 + %1 正在治疗你的呼吸道 + %1 正在治療你的呼吸道 Drag @@ -2341,12 +2675,14 @@ Ciągnij Táhnout Тащить - Trainer + Traîner Húzás Arrastar Trascina 引きずる 끌다 + 拖拉 + 拖拉 Carry @@ -2361,6 +2697,8 @@ Trasporta 運ぶ 업다 + 背起 + 背起 Release @@ -2375,6 +2713,8 @@ Rrilascia 離す 내려놓기 + 放下 + 放下 Load Patient Into @@ -2389,6 +2729,8 @@ Carica paziente nel 患者を載せる 환자 싣기 + 将伤者放入 + 將傷者放入 Unload Patient @@ -2403,6 +2745,8 @@ Scarica il paziente 患者を降ろす 환자 내리기 + 将伤者背出 + 將傷者背出 Unload patient @@ -2410,13 +2754,15 @@ Выгрузить пациента Patient ausladen Wyładuj pacjenta - Débarquer le patient + Le patient débarque Sebesült kihúzása Scarica il paziente Descarregar Paciente Vyložit pacienta 患者を降ろす 환자 내리기 + 将伤者背出 + 將傷者背出 Load patient @@ -2431,6 +2777,8 @@ Naložit pacienta 患者を載せる 환자 싣기 + 将伤者放入 + 將傷者放入 Place body in bodybag @@ -2444,7 +2792,9 @@ Colocar corpo dentro do saco para cadáver Umístni tělo do pytle na mrtvoly 死体袋に入れる - 시체 운반 부대에 담기 + 시체 가방에 담기 + 将尸体放入尸袋 + 將屍體放入屍袋 Placing body in bodybag... @@ -2458,7 +2808,9 @@ Colocando corpo dentro do saco para cadáver... Umístňuji tělo do pytle na mrtvoly... 死体袋へ梱包中・・・ - 시체 운반 부대에 담는중... + 시체 가방에 담는중... + 将尸体放入尸袋中... + 將屍體放入屍袋中... %1 has bandaged patient @@ -2473,6 +2825,8 @@ %1 již obvázal pacienta %1 は包帯を巻いた %1 (이)가 붕대를 감아줬다 + %1 已包扎伤者 + %1 已包紮傷者 %1 performed CPR @@ -2483,9 +2837,11 @@ %1 realizou RCP %1 провел сердечно-легочную реанимацию %1 realicó RCP - %1 à fait une RPC + %1 à fait une RCP %1 は心肺蘇生をした %1 (이)가 심폐소생술을 실시했다 + %1 已执行心肺复苏术 + %1 已執行心肺復甦術 %1 used %2 @@ -2500,6 +2856,8 @@ %1 použil %2 %1 は %2 をつかった %1 (이)가 %2 을 썼다 + %1 已使用 %2 + %1 已使用 %2 %1 has given an IV @@ -2507,13 +2865,15 @@ %1 ha puesto una IV %1 hat eine Infusion verabreicht %1 podał IV - %1 a administré une IV + %1 a plaçé une IV %1 infúziót adott %1 ha somministrato una EV %1 aplicou um intravenoso %1 již aplikoval IV %1 は IV を与えた %1 (이)가 IV를 실시했다 + %1 已经给予静脉注射液 + %1 已經給予靜脈注射液 %1 applied a tourniquet @@ -2521,13 +2881,15 @@ %1 наложил жгут %1 hat ein Tourniquet angelegt %1 założył stazę - %1 a appliqué un garrot + %1 a plaçé un garrot %1 felhelyezett egy érszorítót %1 ha applicato un laccio emostatico %1 aplicou um torniquete %1 použil škrtidlo %1 は止血帯を巻いた %1 (이)가 지혈대를 적용했다 + %1 已经绑上止血带 + %1 已經綁上止血帶 %1 used Personal Aid Kit @@ -2538,9 +2900,11 @@ %1 использовал аптечку %1 ha usato Kit Pronto Soccorso Personale %1 usó Kit de Primeros Auxilios - %1 à utilisé un PAK + %1 a utilisé une trousse %1 は応急処置キットをつかった %1 (이)가 개인응급키트를 사용했다 + %1 已使用了个人急救包 + %1 已使用了個人急救包 Heavily wounded @@ -2549,12 +2913,14 @@ Тяжелые ранения Gravemente ferito Gravemente herido - Lourdement blessé + Gravement blessé Erősen sérült Těžce raněn Gravemente ferido 重傷 중상 + 重伤 + 重傷 Lightly wounded @@ -2569,6 +2935,8 @@ Levemente ferido 軽傷 경상 + 轻伤 + 輕傷 Very lightly wounded @@ -2582,7 +2950,9 @@ Velmi lehce raněn Muito levemente ferido かなり浅い傷 - 부상 + 매우 가벼운 부상 + 小伤 + 小傷 Head @@ -2597,6 +2967,8 @@ Cabeça 頭部 머리 + 头部 + 頭部 Torso @@ -2611,6 +2983,8 @@ Torso 胴体 몸통 + 身体 + 身體 Left Arm @@ -2619,12 +2993,14 @@ Левой руки Braccio sinistro Brazo izquierdo - Bras gouche + Bras gauche Bal kar Levá ruka Braço Esquerdo 左腕 왼쪽 팔 + 左手 + 左手 Right Arm @@ -2639,6 +3015,8 @@ Braço Direito 右腕 오른쪽 팔 + 右手 + 右手 Left Leg @@ -2653,6 +3031,8 @@ Perna Esquerda 左足 왼쪽 다리 + 左脚 + 左腳 Right Leg @@ -2667,6 +3047,8 @@ Perna Direita 右足 오른쪽 다리 + 右脚 + 右腳 Heal fully bandaged hitpoints @@ -2676,10 +3058,12 @@ Curar hitpoints totalmente enfaixados Heal fully bandaged hitpoints Cura hitpoints completamente bendati - Soigner les plaies entièrement bandées. + Soigner les plaies entièrement bandées Heilt vollständig bandagierte Trefferpunkte 包帯は体力を完全に回復する 붕대를 감은후 체력을 회복함 + 完全医疗包扎的部位至痊愈 + 完全醫療包紮的部位至痊癒 Pain is only temporarily suppressed @@ -2688,12 +3072,14 @@ Bolest je potlačena pouze dočasně El dolor se suprime solo temporalmente Dor é suprimida somente temporáriamente - La douleur est seulement supprimée temporairement + La douleur est temporairement calmée A fájdalom csak ideiglenesen csökken Боль приглушается только временно Dolore è soppresso solo temporaneamente 痛みは一時的な影響 고통은 일시적으로만 회복가능 + 疼痛只会暂时性压制 + 疼痛只會暫時性壓制 Pain Effect Type @@ -2708,6 +3094,8 @@ Typ bolesti - efekt 痛みの種類 고통 효과 종류 + 疼痛效果类型 + 疼痛效果類型 Colour Flashing @@ -2722,6 +3110,8 @@ Blikající barva 色の点滅 색 반짝임 + 闪烁颜色 + 閃爍顏色 Chromatic Aberration @@ -2736,11 +3126,13 @@ Aberração Cromática 色の収差 색수차 + 色差 + 色差 Style of menu (Medical) Styl menu medycznego - Style de menu (Médical) + Style de menu (médical) Menüstil (Medizin) Вид меню (медицина) Tipo de menú (Medico) @@ -2750,11 +3142,13 @@ Stile del menù (medico) メニューの表示形式 (治療) 메뉴의 스타일 (의료) + 选单样式 (医疗) + 選單樣式 (醫療) Select the type of menu you prefer; default 3d selections or radial. Wybierz rodzaj menu, który preferujesz: domyślne pozycje 3D lub radialne - Selctionne le type de menu préféré; par défaut la sélection 3D ou radiale + Sélectionne le type de menu préféré; par défaut la sélection 3D ou radiale Wähle den Menüstil: Standard 3D-Auswahl oder kreisförmig. Выберите тип меню: стандартный вариант (3D) или радиальный Selecciona el tipo de menú que prefieres: selecciones 3d por defecto o radial. @@ -2764,11 +3158,13 @@ Seleziona il tipo di menù che preferisci: selezione (3D), radiale o disabilitata. 好みに応じてメニューの表示形式を選んでください。標準では 3D 選択か円状です。 선호하는 종류의 메뉴를 고르세요; 기본 3d 선택형 혹은 다이얼형 + 选择你喜欢的选单样式; 预设为3D选项或放射状 + 選擇你喜歡的選單樣式; 預設為3D選項或放射狀 Selections (3d) Pozycje (3D) - sélections (3D) + Sélection (3D) 3D-Auswahl Стандартный (3D) Selecciones (3d) @@ -2778,11 +3174,13 @@ Selezione (3D) 選択 (3d) 선택 (3d) + 选择 (3D) + 選擇 (3D) Radial Radialne - Radiale + Radial Kreisförmig Радиальный Radial @@ -2792,62 +3190,72 @@ Radiale 円状 다이얼형 + 放射状 + 放射狀 Scrape Kratzer Scorticatura Ссадина - Eraflure + Abrasion Draśnięcie Arañazo Horzsolás Raspão Odřenina 擦り傷 - 긁힘 + 찰과상 + 擦伤 + 擦傷 Minor Scrape Kleiner Kratzer Minima Scorticatura Малая ссадина - Petite éraflure + Petite abrasion Pomniejsze draśnięcie Arañazo menor Kis horzsolás Raspão leve Malá odřenina 小さな擦り傷 - 조금 긁힘 + 소형 찰과상 + 小擦伤 + 小擦傷 Medium Scrape Mittlerer Kratzer Media Scorticatura Средняя ссадина - Moyenne éraflure + Moyenne abrasion Średnie draśnięcie Arañazo medio Közepes horzsolás Raspão médio Středně velká odřenina 中くらいの擦り傷 - 꽤 긁힘 + 중형 찰과상 + 中擦伤 + 中擦傷 Large Scrape Großer Kratzer Alta Scorticatura Большая ссадина - Grande éraflure + Grande abrasion Duże draśnięcie Arañazo severo Nagy horzsolás Raspão grave Velká odřenina 大きな擦り傷 - 심하게 긁힘 + 대형 찰과상 + 大擦伤 + 大擦傷 Avulsion @@ -2861,7 +3269,9 @@ Avulsão Avulze 剥離傷 - 떨어져나감 + 열상 + 撕脱伤 + 撕脫傷 Minor Avulsion @@ -2875,7 +3285,9 @@ Avulsão leve Malá avulze 小さな剥離傷 - 조금 떨어져나감 + 소형 열상 + 小撕脱伤 + 小撕脫傷 Medium Avulsion @@ -2889,7 +3301,9 @@ Avulsão média Střední avulze 中くらいの剥離傷 - 꽤 떨어져나감 + 중형 열상 + 中撕脱伤 + 中撕脫傷 Large Avulsion @@ -2903,119 +3317,137 @@ Avulsão grave Velká avulze 大きな剥離傷 - 크게 떨어져나감 + 대형 열상 + 大撕脱伤 + 大撕脫傷 Bruise Prellung Contusione Ушиб - Hématome + Contusion Stłuczenie Contusión Zúzódás Contusão Modřina 打ち傷 - + 타박상 + 挫伤 + 挫傷 Minor Bruise Kleine Prellung Minima Contusione Малый ушиб - Petit hématome + Petite contusion Pomniejsze stłuczenie Contusión menor Kis zúzódás Contusão leve Malá modřina 小さな打ち傷 - 조금 멍듬 + 소형 타박상 + 小挫伤 + 小挫傷 Medium Bruise Mittlere Prellung Media Contusione Средний ушиб - Hématome moyen + Moyenne contusion Średnie stłuczenie Contusión media Közepes zúzódás Contusão média Středně velká modřina 中くらいの打ち傷 - 꽤 멍듬 + 중형 타박상 + 中挫伤 + 中挫傷 Large Bruise Große Prellung Alta Contusione Большой ушиб - Hématome important + Grande contusion Duże stłuczenie Contusión severa Nagy zúzódás Contusão grave Velká modřina 大きな打撲傷 - 심하게 멍듬 + 대형 타박상 + 大挫伤 + 大挫傷 Crushed tissue Quetschverletzung Tessuto Schiacciato Компресионная травма - Tissu écrasé + Écrasement Zgniecienie tkanek miękkich Tejido triturado Zúzott szövet Tecido esmagado Zhmoždění měkkých tkání 圧挫傷 - 뭉개짐 + 좌상 + 撞伤 + 撞傷 Minor crushed tissue Kleine Quetschverletzung Minimo Tessuto Schiacciato Малая компрессионная травма - Tissu écrasé léger + Petit écrasement Pomniejsze zgniecienie tkanek miękkich Tejido triturado menor Kis zúzott szövet Tecido esmagado leve Malé zhmoždění měkkých tkání 小さな圧挫傷 - 조금 뭉개짐 + 소형 좌상 + 小撞伤 + 小撞傷 Medium crushed tissue Mittlere Quetschverletzung Medio Tessuto Schiacciato Средняя компрессионная травма - Tissu écrasé moyen + Moyen écrasement Średnie zgniecienie tkanek miękkich Tejido triturado medio Közepes zúzott szövet Tecido esmagado médio Střední zhmoždění měkkých tkání 中くらいの圧挫傷 - 꽤 뭉개짐 + 중형 좌상 + 中撞伤 + 中撞傷 Large crushed tissue Große Quetschverletzung Alto Tessuto Schiacciato Большая компрессионная травма - Tissu écrasé large + Grand écrasement Duże zgniecienie tkanek miękkich Tejido triturado severo Nagy zúzött szövet Tecido esmagado grave Velké zhmoždění měkkých tkání 大きな圧挫傷 - 심하게 뭉개짐 + 대형 좌상 + 大撞伤 + 大撞傷 Cut @@ -3029,7 +3461,9 @@ Corte Řezná rána 切り傷 - 베임 + 절상 + 割伤 + 割傷 Small Cut @@ -3043,7 +3477,9 @@ Corte leve Malá řezná rána 小さな切り傷 - 조금 베임 + 소형 절상 + 小割伤 + 小割傷 Medium Cut @@ -3057,7 +3493,9 @@ Corte médio Střední řezná rána 中くらいの切り傷 - 꽤 베임 + 중형 절상 + 中割伤 + 中割傷 Large Cut @@ -3067,11 +3505,13 @@ Duża rana cięta Corte severo Nagy vágás - Large coupure + Grande coupure Corte grave Velká řezná rána 大きな切り傷 - 심하게 베임 + 대형 절상 + 大割伤 + 大割傷 Tear @@ -3079,13 +3519,15 @@ Strappo Рваная рана Rozerwanie skóry - Déchirure + Lacération Desgarro Szakadás Ruptura Tržná rána 裂傷 - 찢어짐 + 창상 + 撕裂伤 + 撕裂傷 Small Tear @@ -3093,13 +3535,15 @@ Piccolo Strappo Малая рваная рана Pomniejsze rozerwanie skóry - Petite Déchirure + Petite lacération Desgarro menor Kis szakadás Ruptura leve Malá tržná rána 小さな裂傷 - 조금 찢어짐 + 소형 창상 + 小撕裂伤 + 小撕裂傷 Medium Tear @@ -3109,11 +3553,13 @@ Średnie rozerwanie skóry Desgarro medio Közepes szakadás - Moyenne déchirure + Moyenne lacération Ruptura média Střední tržná rána 中くらいの裂傷 - 꽤 찢어짐 + 중형 창상 + 中撕裂伤 + 中撕裂傷 Large Tear @@ -3123,11 +3569,13 @@ Duże rozerwanie skóry Desgarro severo Nagy szakadás - Large déchirure + Grande lacération Ruptura grave Velká tržná rána 大きな裂傷 - 심하게 찢어짐 + 대형 창상 + 大撕裂伤 + 大撕裂傷 Velocity Wound @@ -3135,13 +3583,15 @@ Velocità Ferita Огнестрельная рана Rana postrzałowa - Blessure de vélocité + Plaie pénétrante Herida de bala Lőtt seb Ferimento por projétil de arma de fogo Střelné poranění 銃創 총상 + 穿透伤 + 穿透傷 Small Velocity Wound @@ -3151,11 +3601,13 @@ Pomniejsza rana postrzałowa Herida de bala menor Kis lőtt seb - Petite blessure de vélocité + Petite plaie pénétrante Ferimento leve por projétil de arma de fogo Malé střelné poranění 小さな銃創 소형 총상 + 小穿透伤 + 小穿透傷 Medium Velocity Wound @@ -3165,11 +3617,13 @@ Średnia rana postrzałowa Herida de bala media Közepes lőtt seb - Moyenne blessure de vélocité + Moyenne plaie pénétrante Ferimento médio por projétil de arma de fogo Střední střelné poranění 中くらいの銃創 중형 총상 + 中穿透伤 + 中穿透傷 Large Velocity Wound @@ -3179,11 +3633,13 @@ Duża rana postrzałowa Herida de bala severa Nagy lőtt seb - Large blessure de vélocité + Grande plaie pénétrante Ferimento grave por projétil de arma de fogo Velké střelné poranění 大きな銃創 대형 총상 + 大穿透伤 + 大穿透傷 Puncture Wound @@ -3191,13 +3647,15 @@ Puntura Ferita Колотая рана Rana kłuta - Blessure de perforation + Perforation Herida punzante Szúrt seb Ferimento por perfuração Bodná rána 刺し傷 관통상 + 穿刺伤 + 穿刺傷 Minor Puncture Wound @@ -3207,11 +3665,13 @@ Pomniejsza rana kłuta Herida punzante menor Kis szúrt seb - Légère blessure de perforation + Petite perforation Ferimento leve por perfuração Malá bodná rána 小さな刺し傷 소형 관통상 + 小穿刺伤 + 小穿刺傷 Medium Puncture Wound @@ -3221,11 +3681,13 @@ Średnia rana kłuta Herida punzante media Közepes szúrt seb - Moyenne blessure de perforation + Moyenne perforation Ferimento médio por perfuração Střední bodná rána 中くらいの刺し傷 중형 관통상 + 中穿刺伤 + 中穿刺傷 Large Puncture Wound @@ -3235,11 +3697,13 @@ Duża rana kłuta Herida punzante severa Nagy szúrt seb - Large blessure de perforation + Grande perforation Ferimento grave por perfuração Velká bodná rána 大きな刺し傷 대형 관통상 + 大穿刺伤 + 大穿刺傷 Broken Femur @@ -3254,6 +3718,8 @@ Zlomená stehenní kost 大腿骨の骨折 대퇴골 골절 + 大腿骨骨折 + 大腿骨骨折 Treating... @@ -3268,6 +3734,8 @@ Curando... 治療中・・・ 치료중... + 治疗中... + 治療中... Removing Tourniquet... @@ -3282,6 +3750,8 @@ Togliendo il laccio emostatico... 止血帯を外している・・・ 지혈대 제거중... + 移除军用止血带中... + 移除軍用止血帶中... ACE Medical @@ -3296,6 +3766,8 @@ ACE Medical ACE 医療 ACE 의료 + ACE 医疗系统 + ACE 醫療系統 Medical Settings [ACE] @@ -3305,11 +3777,13 @@ Sanitätseinstellungen [ACE] Lékařské nastavení [ACE] Ajustes médicos [ACE] - Option médicale [ACE] + Options médicales [ACE] Orvosi beállítások [ACE] Impostazioni Mediche [ACE] 医療設定 [ACE] 의료 설정 [ACE] + 医疗设定 [ACE] + 醫療設定 [ACE] Medical Level @@ -3324,6 +3798,8 @@ Livello Medico 医療レベル 의료 수준 + 医疗等级 + 醫療等級 What is the medical simulation level? @@ -3333,11 +3809,13 @@ Wie hoch soll das medizinische Simulationslevel sein? Jaká je úroveň lékařské simulace? Qual o nível de simulação médica? - Quel niveau de simulation médicale choisissez vous? + Quel niveau de simulation médicale choisissez-vous? Milyen komplex legyen az orvosi szimuláció? Qual'è il livello di simulazione medica? 治療の再現度は? - 치료 시뮬레이션 정도? + 의료 시뮬레이션의 수준 + 选择需要的医疗模拟等级 + 選擇需要的醫療模擬等級 Basic @@ -3352,6 +3830,8 @@ Basico ベーシック 기본 + 基本 + 基本 Advanced @@ -3361,11 +3841,13 @@ Erweitert Pokročilé Avançada - Avancée + Avancé Fejlett Avanzato アドバンスド 고급 + 进阶 + 進階 Medics setting @@ -3375,11 +3857,13 @@ Sanitätseinstellungen Úroveň zdravotníků Configuração médica - Paramètre des infirmiers + Règlage des infirmiers Orvosok beállítása Parametri Medici 治療の設定 의료 설정 + 医护兵等级 + 醫護兵等級 What is the level of detail prefered for medics? @@ -3389,11 +3873,13 @@ ¿Cuál es el nivel de detalle preferido para los médicos? Jaká úroveň detailů je preferována pro zdravotníky? Qual o nível de detalhe preferido para os médicos? - Quel niveau de détail voullez vous pour les infirmier? + Quel niveau de détail voulez-vous pour les infirmiers? Mi a javasolt részletesség orvosok számára? Qual'è il livello di dettagli preferito per i medici? >衛生兵への再現度をどのくらいに設定しますか? 의무병의 시뮬레이션 정도? + 设定医护兵的预设医疗水平(医疗兵, 军医) + 設定醫護兵的預設醫療水平(醫療兵, 軍醫) Locations boost training @@ -3403,23 +3889,27 @@ Ubicación mejora entrenamiento. Miejsca zwiększają wyszkolenie Localização melhora treinamento - Locations boost l'entraînement de médecin + Le lieu améliore l'efficacité Места ускоренного обучения 衛生兵としての能力を与える場所 교육 증가 지역 + 受所在位置影响提升医疗能力 + 受所在位置影響提升醫療能力 Boost medic rating in medical vehicles or near medical facilities [untrained becomes medic, medic becomes doctor] - Zlepšit zkušenosti zdravotníka v medickém vozidle nebo poblíž zdravotního zařízení [nezkušení se stane zdravotníkem, zdravotník se stane doktorem] + Zlepšit zkušenosti zdravotníka v medickém vozidle nebo poblíž zdravotního zařízení [nezkušení se stane zdravotníkem, zdravotník se stane doktorem] Aumenta il rating medico in veicoli medici o vicino strutture mediche [non addestrato diventa medico, medico diventa dottore] Steigert die medizinische Einstufung eines Soldaten in Sanitätsfarhzeugen oder in der Nähe von Sanitätseinrichtungen [untrainiert wird zu Sanitäter, Sanitäter zu Doktor] Mejora el entrenamiento médico dentro de vehículos médicos o cerca de instalaciones médicas (no entrenados se convierten en médicos, médicos se convierten en doctores) Zwiększa poziom wyszkolenia medyków wewnątrz pojazdów medycznych lub w pobliżu budynków medycznych [niedoświadczony zostaje medykiem, medyk zostaje doktorem] Aumenta a classificação do médico dentro de veículos médicos ou perto de instalações médicas [sem treinamento vira médico, médico vira doutor] - Boost le rang médical dans les véhicules ou bâtiments médicaux [non entraînés deviennent médecins, médecins deviennent docteurs] + Améliore l'efficacité des soins dans les véhicules ou structures de soins [non formés deviennent médecins, médecins deviennent docteurs] Улучшает медицинскую подготовку в мед. транспорте и около мед. строений [нетренированные становятся медиками, медики становятся врачами] 医療車両や医療施設の近くは衛生兵としての能力を与える場所となり、衛生兵の訓練を受けていないのに衛生兵としてなる(未訓練は衛生兵に、衛生兵は医師に) 의무병의 수준이 주변의 차량이나 의료시설에 따라 증가합니다. [비교육자가 의무병이되고, 의무병이 의사가 됩니다] + 当人员在医疗载具或是医护设施旁进行医疗时, 该员医疗能力将会有所提升 (未受训人员提升为医疗兵, 医疗兵提升为军医) + 當人員在醫療載具或是醫護設施旁進行醫療時, 該員醫療能力將會有所提升 (未受訓人員提升為醫療兵, 醫療兵提升為軍醫) Disable medics @@ -3434,6 +3924,8 @@ Disabilita medici 衛生兵を無効化 의무병 비활성화 + 关闭医护兵 + 關閉醫護兵 Enable Litter @@ -3448,6 +3940,8 @@ Abilita Barella 医療廃棄物の表示を有効化 의료폐기물 활성화 + 启用医疗废弃物 + 啟用醫療廢棄物 Enable litter being created upon treatment @@ -3462,6 +3956,8 @@ Abilita la creazione della barella dopo trattamento 治療を始めると、医療廃棄物の作成を有効化する 의료폐기물이 치료중 주변에 생성되는것을 활성화 합니다 + 本功能启用后, 当每次医疗动作结束时, 地上会产生相应的医疗废弃物 + 本功能啟用後, 當每次醫療動作結束時, 地上會產生相應的醫療廢棄物 Life time of litter objects @@ -3476,6 +3972,8 @@ Tempo di vita delle barelle 医療廃棄物の作成限界数を設定 의료폐기물 시간제한 + 医疗废弃物存在时间 + 醫療廢棄物存在時間 How long should litter objects stay? In seconds. -1 is forever. @@ -3490,6 +3988,8 @@ Per quanto devono restare le barelle? In secondi. -1 è permanente 医療廃棄物オブジェクトが表示されつづける時間を設定しますか?-1 は永遠です。 얼마동안 폐기물이 존재합니까? 초 단위. -1 은 영구적. + 定义医疗废弃物存在时间, 以秒为单位, -1为永远存在. + 定義醫療廢棄物存在時間, 以秒為單位, -1為永遠存在. Enable Screams @@ -3504,9 +4004,11 @@ Abilita Grida 叫びを有効化 비명 활성화 + 启用尖叫 + 啟用尖叫 - Enable screaming by injuried units + Enable screaming by injured units Включить крики раненных бойцов Aktywuj wrzeszczenie z bólu przez ranne jednostki Activar gritos para unidades heridas @@ -3518,6 +4020,8 @@ Abilita Grida da parte delle unità ferite 負傷したユニットが叫ぶように 부상당한 인원이 소리지르는것을 활성화합니다 + 启用伤者的尖叫声 + 啟用傷者的尖叫聲 Player Damage @@ -3527,11 +4031,13 @@ Spielerschaden Poškození hráče Dano do jogador - Dégats des joueurs + Dégats du joueur Játékos sérülés Danno Giocatore プレイヤーへの損傷 플레이어 부상 + 玩家伤害 + 玩家傷害 What is the damage a player can take before being killed? @@ -3541,11 +4047,13 @@ Wie viel Schaden kann ein Spieler erleiden, bevor er getötet wird? Jaké poškození může hráč dostat než bude zabit? Qal é o dano que um jogador pode sofrer antes de morrer? - Quels dégats peut subir un joueur avant d'être tué + Quels dégâts peut subir un joueur avant d'être tué Mennyi sérülést szenvedhet el egy játékos, mielőtt meghal? Quanto è il danno che un giocatore può sostenere prima di essere ucciso? プレイヤーが死に始める前に損傷を受けるようにしますか? 얼마정도의 부상을 플레이어가 죽기 전까지 버틸 수 있습니까? + 玩家死亡前所能承受的伤害程度 + 玩家死亡前所能承受的傷害程度 AI Damage @@ -3555,11 +4063,13 @@ KI-Schaden Poškození AI Dano da IA - Dégats des IA + Dégâts des IA AI sérülés Danno AI AI への損傷 인공지능 부상 + AI伤害 + AI傷害 What is the damage an AI can take before being killed? @@ -3569,11 +4079,13 @@ Wie viel Schaden kann eine KI erleiden, bis sie getötet wird? Jaké poškození může AI dostat než bude zabito? Qual é o dano que uma IA pode sofrer antes de morrer? - Quels dégats peut subir une IA avant d'être tuée + Quels dégâts peut subir une IA avant d'être tuée Mennyi sérülést szenvedhet el egy AI, mielőtt meghal? Quanto è il danno che un'IA può sostenere prima di essere uccisa? AI が死に始める前に損傷を受けるようにしますか? 얼마정도의 부상을 인공지능이 죽기 전까지 버틸 수 있습니까? + AI 死亡前所能承受的伤害程度 + AI 死亡前所能承受的傷害程度 AI Unconsciousness @@ -3588,6 +4100,8 @@ Incoscienza IA AI の気絶 인공지능 기절 + AI无意识 + AI無意識 Allow AI to go unconscious @@ -3602,6 +4116,8 @@ Permetti alle IA di diventare incoscienti AI が気絶をするように 인공지능도 기절에 빠지게 합니다 + 允许AI进入无意识状态 + 允許AI進入無意識狀態 Remote Controlled AI @@ -3616,6 +4132,8 @@ IA Controllate in Remoto 遠隔操作された AI 인공지능 원격조종 + 遥控AI + 遙控AI Treat remote controlled units as AI not players? @@ -3630,6 +4148,8 @@ Considera le unità controllate in remoto come IA e non come giocatori? 遠隔操作された AI は、非プレイヤーとして扱いますか? 원격 조작하는 AI는 비 플레이어로 취급합니까? + 以医疗AI的方式医疗被遥控的单位 + 以醫療AI的方式醫療被遙控的單位 Prevent instant death @@ -3644,6 +4164,8 @@ Previeni morte istantanea 即死の防止 즉사 방지 + 防止当场死亡 + 防止當場死亡 Have a unit move to unconscious instead of death @@ -3658,6 +4180,8 @@ Imposta un'unità come incosciente invece di morta ユニットの即死を防止するために、気絶へ移行させます 인원의 즉사를 방지코자 즉사 대신 기절시킵니다 + 伤者最严重只会立即进入昏迷, 而非立即死亡 + 傷者最嚴重只會立即進入昏迷, 而非立即死亡 Bleeding coefficient @@ -3667,11 +4191,13 @@ Verblutungsmultiplikator Koeficient krvácení Coeficiente de sangramento - Coefficient de saignement + Coéfficient de saignement Vérzési koefficiens Coefficiente sanguinamento 出血の係数 출혈 계수 + 流血系数 + 流血係數 Coefficient to modify the bleeding speed @@ -3681,11 +4207,13 @@ Multiplikator um die Verblutungsgeschwindigkeit zu verändern Koeficient rychlosti krvácení Coeficiente para modificar a velocidade do sangramento - Coefficient modifiant la vitesse de saignement + Modifie le débit des saignements Egy szorzó a vérzés sebességének szabályozására Coefficiente che modifica la velocità di sanguinamento この係数では出血速度を変更できます 출혈의 속도를 계수만큼 변경합니다 + 修改流血速度 + 修改流血速度 Pain coefficient @@ -3695,11 +4223,13 @@ Schmerzmultiplikator Koeficient bolesti Coeficiente de dor - Coefficient de douleur + Coéfficient de douleur Fájdalmi koefficiens Coefficiente dolore 痛みの係数 고통 계수 + 疼痛系数 + 疼痛係數 Coefficient to modify the pain intensity @@ -3709,11 +4239,13 @@ Multiplikator um die Schmerzintensität zu verändern Koeficient intenzity bolesti Coeficiente para modificar a instensidade de dor - Coefficient modifiant l'intensité de la douleur + Modifie l'intensité de la douleur Egy szorzó a fájdalom erősségének szabályozására Coefficiente che modifica l'intensità del dolore この係数では痛みの強さを変更できます 고통의 정도를 계수만큼 변경합니다 + 修改疼痛强度的系数 + 修改疼痛強度的係數 Sync status @@ -3723,11 +4255,13 @@ Status synchronisieren Synchronizovat status Sincronizar estado - Status de la synchronisation + Synchronisation du status Szinkronizációs állapot Sincronizza stato 同期状態 상태 동기화 + 同步状态 + 同步狀態 Keep unit status synced. Recommended on. @@ -3737,11 +4271,13 @@ Status der Einheit synchron halten. Sollte aktiviert bleiben. Udržuje status jednotky synchronizovaný. Doporučeno zapnout. Mater o estado da unidade sincronizado. Recomendado ativado. - Garder l'unité synchronisée, Recommandé sur oui. + Garder l'unité synchronisée. Activation recommandée. Egységállapotok szinkronizálása. Javasolt a bekapcsolása. Mantieni lo stato delle unità sincronizzato. Consigliato attivo. ユニット状態の同期を続けます。有効化を推奨。 인원의 상태를 동기화합니다. 켜기를 권장합니다. + 保持单位状态同步, 建议启用! + 保持單位狀態同步, 建議啟用! Provides a medical system for both players and AI. @@ -3751,24 +4287,28 @@ Aktiviert ein Sanitätssystem für Spieler und KI. Poskytuje zdravotní systém pro hráče a AI. Proporciona o sistema médico para os jogadores e a IA. - Fourni un système médical pour les joueurs tout comme pour les IA. + Fourni un système médical pour les joueurs et les IA. Egy orvosi rendszert ad játékosok és AI-k számára. Fornisce un sistema medico sia per giocatori che IA. プレイヤーと AI の両方へ医療システムを提供します。 의료 시스템을 플레이어 및 인공지능에게 제공합니다. + 医疗系统将同时对玩家与AI发生作用 + 醫療系統將同時對玩家與AI發生作用 Basic Medical Settings [ACE] Standard Sanitätseinstellungen [ACE] Podstawowe ustawienia medyczne Ajustes médicos básicos [ACE] - Réglages du système médical basic [ACE] + Paramètres des soins basiques [ACE] Impostazioni Mediche Di Base [ACE] Základní zdravotnické nastavení [ACE] Ajustes médicos básicos [ACE] Настройки базовой медицины [ACE] ベーシック医療設定 [ACE] 기본 의료 설정 [ACE] + 基本医疗设定 [ACE] + 基本醫療設定 [ACE] Advanced Medical Settings [ACE] @@ -3783,6 +4323,8 @@ Impostazioni Mediche Avanzate [ACE] アドバンスド医療設定 [ACE] 고급 의료 설정 [ACE] + 进阶医疗设定 [ACE] + 進階醫療設定 [ACE] Enabled for @@ -3796,7 +4338,9 @@ Engedélyezve Abilitato per 次を有効化 - 다음을 활성화 + 활성 + 被启用给 + 被啟用給 Select what units the advanced medical system will be enabled for @@ -3806,11 +4350,13 @@ Wähle aus, welche Einheiten unter das erweiterte Sanitätssystem fallen Vyberte, pro jaké jednotky bude pokročilý zdravotní systém povolen Selecione quais unidades o sistema médico avançado será habilitado - Sélectionne pour quelle unité le système de soin avancé est activé + Sélectionne pour quelles unités les soins avancés seront activés Kiválasztható, mely egységek számára legyen engedélyezve a fejlett orvosi rendszer Seleziona per quali unità verrà abilitato i sistema medico avanzato 選択されたユニットが、アドバンスド医療が使えるようになります 어느 인원에게 고급 의료 시스템을 적용시킬지 선택하십시요. + 选择进阶医疗系统影响的对象 + 選擇進階醫療系統影響的對象 Players only @@ -3820,11 +4366,13 @@ Nur Spieler Pouze hráči Somente jogadores - Joueur uniquement + Joueurs uniquement Csak játékosok Solo giocatori プレイヤーのみ 플레이어만 + 只限玩家 + 只限玩家 Players and AI @@ -3834,11 +4382,13 @@ Spieler und KI Hráči a AI Jogadores e IA - Joueur et IA + Joueurs et IA Játékosok és AI Giocatori ed IA プレイヤーと AI 플레이어 및 인공지능 + 玩家与AI + 玩家與AI Enable Advanced wounds @@ -3848,11 +4398,13 @@ Aktiviere erweiterte Wunden Povolit pokročilé zranění Ativar ferimentos avançados - Activer les blessures avancées + Activer les plaies compliquées Komplex sebek engedélyezése Abilita ferite Avanzate アドバンスドな傷を有効化 고급 부상 활성화 + 启用进阶伤口系统 + 啟用進階傷口系統 Allow reopening of bandaged wounds? @@ -3862,11 +4414,13 @@ Erlaube das Öffnen von bandagierten Wunden? Umožnit znovuotevření zavázané rány? Permitr reabertura de ferimentos enfaixados? - Permettre la réouverture des bandages + Les plaies peuvent se rouvrir Visszanyílhatnak a bekötözött sebek? Permetti la riapertura di ferite bendate? 包帯で巻かれた傷を再び開くようにしますか? 붕대가 풀리는것을 활성화합니까? + 启用进阶伤口系统会使已被包扎的伤口有机率裂开 + 啟用進階傷口系統會使已被包紮的傷口有機率裂開 Vehicle Crashes @@ -3881,6 +4435,8 @@ Schianto Veicoli 車両の衝突 차량 사고 + 载具碰撞 + 載具碰撞 Do units take damage from a vehicle crash? @@ -3895,19 +4451,23 @@ Le unità sostengono danni da incidenti con veicoli? ユニットは車両の衝突による損傷を受けるようにしますか? 차량 사고시 인원들이 부상을 입습니까? + 设定人员是否会因为载具冲撞别的物件而产生伤害? + 設定人員是否會因為載具衝撞別的物件而產生傷害? Allow Epinephrine Erlaube Epiniphrin Permitir Epinefrina Ograniczenia adrenaliny - Autoriser l'adrénaline + Activer l'épinéphrine Permette epinefrina Povolit adrenalin Permitir Epinefrina Разрешить Адреналин アドレナリンの許可 에피네프린 활성화 + 允许使用肾上腺素 + 允許使用腎上腺素 Who can use Epinephrine for full heal? (Basic medical only) @@ -3921,6 +4481,8 @@ Кому разрешено использовать адреналин для полного излечения? (Только для базовой медицины) 完全に回復できるよう誰しもがアドレナリンを使えるようにしますか?(ベーシック医療のみ) 완전한 체력회복을 위해 어느 인원이 에피네프린을 쓸 수 있습니까? (기본 의료 전용) + 谁可以使用肾上腺素完整医治? (仅适用于基本医疗) + 誰可以使用腎上腺素完整醫治? (僅適用於基本醫療) Allow PAK @@ -3930,11 +4492,13 @@ Erlaube Erste-Hilfe-Set Povolit osobní lékárničky (PAK) Permitir Kit de Primeiros Socorros - Permettre le kit de premier secours + Activer la trousse sanitaire Elsősegélycsomag engedélyezése Consenti Kit di Pronto Soccorso 応急処置キットの許可 개인응급키트 활성화 + 允许使用个人急救包 + 允許使用個人急救包 Who can use the PAK for full heal? @@ -3944,11 +4508,13 @@ Wer kann das Erste-Hilfe-Set für eine Endheilung verwenden? Kdo může použít osobní lékárničku pro plné vyléčení? Quem pode usar o KPS para cura completa? - Qui peut utilier les kit de premier secours pour soigner + Qui peut utilier la trousse sanitaire pour des soins complets? Ki használhatja az elsősegélycsomagot teljes gyógyításra? Chi può usare il KPS per cura completa? 完全に回復できるよう誰しもが応急処置キットを使えるようにしますか? 완전한 체력회복을 위해 어느 인원이 개인응급키트을 쓸 수 있습니까? (기본 의료 전용) + 谁能够使用个人急救包来达到完整医疗? + 誰能夠使用個人急救包來達到完整醫療? Anyone @@ -3958,11 +4524,13 @@ Jeder Kdokoliv Qualquer um - Tout le monde + Tous Akárki Chiunque だれでも 모두 + 任何人 + 任何人 Medics only @@ -3972,11 +4540,13 @@ Nur Sanitäter Pouze zdravotník Somente médicos - Infirmier uniquement + Infirmiers uniquement Csak orvosok Solo medici 衛生兵のみ - 오직 의무병만 + 의무병만 + 只限医疗兵 + 只限醫療兵 Doctors only @@ -3986,11 +4556,13 @@ Nur Ärzte Pouze doktor Somente doutores - Médecin uniquement + Médecins uniquement Csak doktorok Solo dottori 医師のみ - 오직 의사만 + 의사만 + 只限军医 + 只限軍醫 Remove PAK on use @@ -4000,11 +4572,13 @@ Entf. Erste-Hilfe-Set bei Verwendung Odebrat osobní lékárničku po použití Remover o KPS depois do uso - Enlever le KPS à l'utilisation + Utilisation unique de la trousse sanitaire Elsősegélycsomag eltávolítása használatkor Rimuovi Kit Pronto Soccorso dopo l'uso 応急処置キットの削除 개인응급키트 사용후 사라짐 + 在使用后删除个人急救包 + 在使用後刪除個人急救包 Should PAK be removed on usage? @@ -4014,37 +4588,43 @@ Sollen Erste-Hilfe-Sets bei Verwendung entfernt werden? Má se osobní lékárnička odstranit po použití? Deve o KPS ser removido depois do uso? - Le Kit de Premier Secours doit il être enlevé à l'utilisation? + La trousse sanitaire doit être consommée à l'utilisation? Eltávolítódjon az elsősegélycsomag használatkor? Il Kit Pronto Soccorso dev'essere rimosso dopo l'utilizzo? 応急処置キットを使うと削除しますか? 개인응급키트를 사용하고 나서 제거합니까? + 要在使用后删除个人急救包吗? + 要在使用後刪除個人急救包嗎? Locations Epinephrine Orte für Epiniphrin Ubicaciones epinefrina Ograniczenia adrenaliny - Position des adrénalines + Utilisation de l'épinéphrine Ubicazione epinefrina Oblast k použití adrenalinu Localizações de Epinefrina Место использования адреналина アドレナリンをつかう場所 에피네프린 사용 장소 + 肾上腺素使用地点 + 腎上腺素使用地點 Where can the Epinephrine be used? (Basic Medical) Wo kann Epiniphrin verwendet werden? (Standard Sanitätseinstellungen) Configura donde puede usarse Epinefrina (Solo sistema médico básico) Gdzie można korzystać z adrenaliny? (Podstawowy system medyczny) - Où peuvent être utilisées les adrénalines ? (Médical basique) + Où peut être utilisé l'épinéphrine ? (Médical basique) Dove si può usare l'epinefrina? (Sistema medico di base) Kde může být použit adrenalin? (Pouze základní zdravotní systém) Onde pode-se usar a Epinefrina? (Somente sistema médico básico) Где может использоваться адреналин? (Базовая медицина) どこでもアドレナリンをつかえるようにしますか?(ベーシック医療のみ) 어디에서 에피네프린을 사용할 수 있습니까? (기본 의료) + 在哪里可以使用肾上腺素? (基本医疗) + 在哪裡可以使用腎上腺素? (基本醫療) Locations PAK @@ -4054,11 +4634,13 @@ Orte für Erste-Hilfe-Set Oblast k použití PAK Localizações do KPS - Lieu d'utilisation du KPS + Lieu d'utilisation da trousse sanitaire Elsősegélycsomag helyek Locazioni Kit Pronto Soccorso 応急処置キットをつかう場所 개인응급키트 사용 장소 + 个人急救包使用地点 + 個人急救包使用地點 Where can the PAK be used? @@ -4068,18 +4650,20 @@ Wo kann das Erste-Hilfe-Set verwendet werden? Kde může být použita osobní lékárnička (PAK)? Onde o kit de primeiros socorros pode ser utilizado? - Où le Kit de Premier Secour peut être utilisé + Où la trousse sanitaire peut être utilisée ? Hol lehet az elsősegélycsomagot használni? Dove può essere usato il Kit Pronto Soccorso? どこでも応急処置キットをつかえるようにしますか? 어디에서 개인응급키트를 사용할 수 있습니까? + 在哪里可以使用个人急救包? + 在哪裡可以使用個人急救包? Condition PAK Bedingungen für d. Erste-Hilfe-Set Podmínky pro použití osobní lékárničky Condición EPA - Condition d'utilisation du KPS + Condition d'utilisation de la trousse sanitaire Warunek apteczek Elsősegélycsomag állapot Condição do KPS @@ -4087,13 +4671,15 @@ Condizioni Kit Pronto Soccorso 応急処置キットの状態 개인응급키트 상태 + 个人急救包使用条件 + 個人急救包使用條件 When can the PAK be used? Wann kann das Erste-Hilfe-Set verwendet werden? Kdy může být použita osobní lékárnička? ¿Cuando se puede utilizar el Equipo de primeros auxilios? - Quand peut être utilisé le Kit de Premier Secours + Quand peut être utilisé la trousse sanitaire? Po spełnieniu jakich warunków apteczka osobista może zostać zastosowana na pacjencie? Mikor lehet az elsősegélycsomagot használni? Onde o kit de primeiros socorros pode ser utilizado? @@ -4101,6 +4687,8 @@ Quando può essere usato il Kit Pronto Soccorso? どこでも応急処置キットをつかえるようにしますか? 언제 개인응급키트를 사용할 수 있습니까? + 何时可以使用个人急救包? + 何時可以使用個人急救包? Anywhere @@ -4110,11 +4698,13 @@ Überall Kdekoliv Qualquer lugar - PArtout + Partout Akárhol Ovunque どこでも 어디서나 + 任何地方 + 任何地方 Medical vehicles @@ -4124,11 +4714,13 @@ Sanitätsfahrzeuge Zdravotnická vozidla Veículos médcos - Dans les véhicules médicals + Dans les véhicules sanitaires Orvosi járművek Veicoli medici 医療車両のみ 의료차량 + 医疗载具 + 醫療載具 Medical facility @@ -4138,11 +4730,13 @@ Medizinische Einrichtungen Zdravotnické zařízení Instalação médica - Dans les installations médicales + Dans les structures sanitaires Orvosi létesítmény Strutture mediche 医療施設でのみ 의료시설 + 医疗设施 + 醫療設施 Vehicles & facility @@ -4152,11 +4746,13 @@ Fahrzeuge & Einrichtungen Vozidla a zařízení Veículos e instalações - Dans les véhicules et les installations médicals + Dans les véhicules et les structures sanitaires Járművek & létesítmény Veicoli e Strutture - 車両 &amp; 施設 + 車両 & 施設 차량 및 시설 + 医疗载具 & 医疗设施 + 醫療載具 & 醫療設施 Allow Surgical Kit (Adv) @@ -4166,11 +4762,13 @@ Erlaube Operationskasten Povolit chirurgickou soupravu (Pokr.) Permite kit cirúrgico (avançado) - Permettre les kit de chirurgie (Avancé) + Permettre les trousses chirurgicales (Avancé) Sebészkészlet (Fejlett) engedélyezése Permetti Kit Chirurgico (Avanzato) - 縫合キットの許可 (Adv) + 縫合キットの許可 (アド) 봉합키트 활성화 (고급) + 允许使用手术包 (进阶伤口) + 允許使用手術包 (進階傷口) Who can use the Surgical Kit? @@ -4180,11 +4778,13 @@ Wer kann den Operationskasten verwenden? Kdo může použít chirurgickou soupravu? Quem pode usar o kit cirúrgico? - Qui peut utiliser les kit de chirurgie + Qui peut utiliser les trousses chirurgicales? Ki használhatja a sebészkészletet? Chi può usare il Kit Chirurgico? だれでも縫合キットをつかえるようにしますか? 어느 인원이 봉합키트를 사용할 수 있습니까? + 谁能够使用手术包? + 誰能夠使用手術包? Remove Surgical Kit (Adv) @@ -4194,11 +4794,13 @@ Entferne Operationskasten (erweitert) Odebrat chirurgickou soupravu (Pokr.) Remover kit cirúrgico (avançado) - Supprimer les kit de chirurgie (Avancé) + Consommer les trousses chirurgicales (Av.) Sebészkészlet (Fejlett) eltávolítása Rimuovi Kit Chirurgico (Avanzato) - 縫合キットを削除 (Adv) + 縫合キットを削除 (アド) 봉합키트 제거 (고급) + 在使用后删除手术包 (进阶伤口) + 在使用後刪除手術包 (進階傷口) Should Surgical kit be removed on usage? @@ -4208,11 +4810,13 @@ Entferne Operationskästen bei Verwendung? Odebrat chirurgickou soupravu po použití? Deve o kit cirúrgico ser removido após o uso? - Le kit de chirurgie doit il être supprimé à l'utilisation + La trousse chirurgicale doit être consommée à l'utilisation? Eltávolítódjon a sebészkészlet használatkor? Il Kit Chirurgico dev'essere rimosso dopo l'uso? 縫合キットをつかった後に削除しますか? 봉합키트를 사용하고 나서 제거합니까? + 手术包会在使用后被删除吗? + 手術包會在使用後被刪除嗎? Locations Surgical Kit (Adv) @@ -4222,11 +4826,13 @@ Orte für Operationskästen (erweitert) Lokace chirurgické soupravy (Pokr.) Localizações do kit cirúrgico (avançado) - Lieu d'utilisation du kit de chirurgie + Lieu d'utilisation des trousses chirurgicales Sebészkészlet (Fejlett) helyei Località Kit Chirurgico (Avanzato) - 縫合キットをつかう場所 (Adv) + 縫合キットをつかう場所 (アド) 봉합키트 사용 장소 (고급) + 手术包使用地点 (进阶伤口) + 手術包使用地點 (進階傷口) Where can the Surgical Kit be used? @@ -4236,32 +4842,36 @@ Wo kann der Operationskasten verwendet werden? Kde může být použita chirurgická souprava? Onde o kit cirúrgico pode ser utilizado? - Où peut être utilisé les kit de chirurgie + Où peut être utilisé les trousses chirurgicales? Hol lehet a sebészkészletet használni? Dove può essere usato il Kit Chirurgico? どこでも縫合キットをつかえるようにしますか? 어디에서 봉합키트를 사용할 수 있게 합니까? + 定义手术包可被使用的地方? + 定義手術包可被使用的地方? Condition Surgical Kit (Adv) Beding. für d. Operationskasten (erw.) Podmínka chirurgické soupravy (Pokr.) Condición de equipo quirúrgico (Av) - Conditions d'utilisation du kit de chirurgie + Conditions d'utilisation de la trousse chirurgicale (Av.) Warunek zestawu chirurgicznego Sebészkészlet állapot Condição do Kit Cirúrgico (Avançado) Условие использования хирургического набора (усл.) Condizioni Kit Chirurgico (Avanzato) - 縫合キットの状態 (Adv) + 縫合キットの状態 (アド) 봉합키트 상태 (고급) + 使用手术包的条件 (进阶伤口) + 使用手術包的條件 (進階傷口) When can the Surgical Kit be used? Wann kann der Operationskasten verwendet werden? Kde může být použita chirurgická souprava? ¿Cuando se puede utilizar el equipo quirúrgico? - Quand peut être utilisé les kit de chirurgie + Quand peut être utilisé la trousse chirurgicale Po spełnieniu jakich warunków zestaw chirurgiczny może zostać zastosowany na pacjencie? Mikor lehet a sebészkészletet használni? Onde o kit cirúrgico pode ser utilizado? @@ -4269,6 +4879,8 @@ Quando può essere usato il Kit Chirurgico? いつでも縫合キットをつかえるようにしますか? 언제 봉합키트를 사용할 수 있습니까? + 何时可以使用手术工具包? + 何時可以使用手術工具包? Heal hitpoints @@ -4279,9 +4891,11 @@ Curar hitpoints Léčit hitponty Cura Hitpoints - Soigner les dommages + Soigner les blessures ヒットポイントの回復 체력 회복 + 完整治疗 + 完整治療 Heal fully bandaged hitpoints @@ -4295,6 +4909,8 @@ Soigner les plaies entièrement bandées. 包帯によりヒットポイントを完全に回復する 붕대를 감아서 체력을 회복 + 完全医疗包扎的部位至痊愈 + 完全醫療包紮的部位至痊癒 Pain suppression @@ -4303,12 +4919,14 @@ Potlačení bolesti Supresión del dolor Supressão de dor - Suppression de la douleur + Traitement de la douleur Fájdalomcsillapítás Приглушение боли Soppressione dolore 痛みの継続 고통 억제 + 疼痛抑制 + 疼痛抑制 Pain is only temporarily suppressed, not removed @@ -4317,12 +4935,14 @@ Bolest je potlačena, ale jen dočastně El dolor se suprime solo temporalmente, no se elimina. Dor é somente temporáriamente suprimida, não removida - La douleur est temporairement supprimée, pas enlevée + La douleur est seulement temporairement calmée A fájdalom csak ideiglenesen csökken, nem távolítódik el Боль приглушается только временно Dolore è solo temporaneamente soppresso, non rimosso 痛みを一時的に継続させ、取り除かない 고통은 제거가 아닌 일시적으로 억제만 가능합니다. + 疼痛只会被暂时抑制, 而不能完全消除 + 疼痛只會被暫時抑制, 而不能完全消除 Configure the treatment settings from ACE Basic Medical @@ -4335,6 +4955,8 @@ Настройка лечения в базовой медицинской системе ACE ACE ベーシック医療による設定で、治療を設定する ACE 기본 의료에 대한 치료 설정 수정 + 设定ACE基本医疗的规则 + 設定ACE基本醫療的規則 Configure the treatment settings from ACE Advanced Medical @@ -4344,11 +4966,13 @@ Behandlungseinstellungen vom ACE-Medizin konfigurieren Konfigurace nastavení léčby ze zdravotnické systému ACE Configure as opções de tratamento do ACE Médico - Configure les paramètres de traitement du système de soin ACE + Configure les réglages de traitement dans dans ACE médical avancé Kezelési lehetőségek konfigurálása az ACE Orvosi rendszerből Configura le impostazioni trattamenti per ACE Medical ACE アドバンスド医療による設定で、治療を設定する ACE 고급 의료에 대한 치료 설정 수정 + 设定ACE进阶医疗的规则 + 設定ACE進階醫療的規則 Revive Settings [ACE] @@ -4363,6 +4987,8 @@ Impostazioni Revive [ACE] リバイブ設定 [ACE] 소생 설정 [ACE] + 复苏设定 [ACE] + 復甦設定 [ACE] Enable Revive @@ -4377,6 +5003,8 @@ Abilita Revive リバイブを有効化 소생 활성화 + 启用复苏 + 啟用復甦 Enable a basic revive system @@ -4386,11 +5014,13 @@ Aktiviere Standard-Wiederbelebungssystem Povolit základní systém oživení Habilitar um sistema básico de reavivamento - Active un sytème de revive basique + Active un système de revive basique Egy alap újraélesztési rendszer engedélyezése Abilita un sistema revive basico ベーシックなリバイブを有効化 기본 소생 시스템 활성화 + 启用基本复苏系统 + 啟用基本復甦系統 Max Revive time @@ -4400,11 +5030,13 @@ Maximale Wiederbelebungszeit Maximální čas pro oživení Tempo máximo de reavivamento - Temps maximum pour le revive + Délai maximum pour le revive Maximum újraélesztési idő Tempo massimo Revive 最大リバイブ時間 최대 소생 시간 + 最大复苏时间 + 最大復甦時間 Max amount of seconds a unit can spend in revive state @@ -4414,11 +5046,13 @@ Maximale Zeitspanne in Sekunden die eine Einheit im Wiederbelebungszustand verbringen kann Maximální doba v agónii v sekundách Quantidade máxima de segundos que uma unidade pode gastar em um estado de reavivamento - Nombre de seconde maximum qu'une unité peut être en attente d'un revive + Délai d'attente maximum pour un revive Maximum másodperc, amit egy egység újraélesztési állapotban tölthet Numero massimo di secondi che un'unità può spendere in stato revive ユニットがリバイブ状態になっている最大時間を設定できます 소생상태에서 인원이 버틸 수 있는 최대 시간을 초 단위로 정합니다 + 人员在等待复苏状态下能够等待的最大时间(秒) + 人員在等待復甦狀態下能夠等待的最大時間(秒) Max Revive lives @@ -4433,6 +5067,8 @@ Numero massimo Revives 最大リバイブ数 최대 소생 횟수 + 最大被救活次数 + 最大被救活次數 Max amount of lives a unit. 0 or -1 is disabled. @@ -4442,11 +5078,13 @@ Anzahl der Leben einer Einheit. 0 oder -1 bedeutet deaktiviert. Maximální počet životu pro jednotku. 0 nebo -1 je zakázáno. Quantidade máxima de vidas por unidade. 0 ou -1 é desativado. - Nombre de vie maximale d'une unité. 0 ou -1 désactive + Nombre de vie maximum d'une unité. 0 ou -1 désactive Egy egység maximum "életei". 0 vagy -1 letiltja. Numero massimo di vite di un'unità. 0 o -1 per disabilitare. ユニットの最大リバイブ数を設定できます。0 または -1 は無効化になります 소생 가능한 횟수입니다. 0 혹은 -1 로 비활성화 합니다 + 一个人员最大可被救活次数, 0或-1为关闭 (无限救活). + 一個人員最大可被救活次數, 0或-1為關閉 (無限救活). Provides a medical system for both players and AI. @@ -4456,11 +5094,13 @@ Aktiviert das Sanitätssystem für Spieler und KI. Poskytuje zdravotní systém pro hráče a AI. Proporciona um sistema médico para jogadores e IA. - Fourni un sytème médical pour les joueurs et les IAs + Fourni un sytème médical pour les joueurs et les IA. Egy orvosi rendszert ad játékosok és AI-k számára. Fornisce un sistema medico sia per giocatori che IA プレイヤーと AI の両方へ医療システムを提供します。 플레이어와 인공지능 모두에게 의료 시스템을 지원합니다. + 医疗系统将同时作用在玩家与AI + 醫療系統將同時作用在玩家與AI Set Medic Class [ACE] @@ -4470,11 +5110,13 @@ Setze Sanitäterklassen [ACE] Určit třídu medika [ACE] Definir classe médica [ACE] - Définir comme unité médicale [ACE] + Définir classe médicale [ACE] Orvos beállítása [ACE] Imposta Classe Medico [ACE] 衛生兵クラスとして設定 [ACE] 의무병 보직 설정 [ACE] + 设定医疗兵单位 [ACE] + 設定醫療兵單位 [ACE] List @@ -4489,6 +5131,8 @@ Lista 一覧 목록 + 列表 + 列表 List of unit names that will be classified as medic, separated by commas. @@ -4498,11 +5142,13 @@ Aufzählung von Einheiten, die als Sanitäter gelten. Werden durch Kommata getrennt. Seznam osob které budou klasifikovány jako zdravotník, oddělené čárkami. Lista dos nomes das unidades que se classificam como médicos, separados por vírgulas. - Liste d'unité qui seront listées comme infirmier, séparation par virgule + Liste d'unité qui seront qualifiés comme infirmier, séparation par virgule. Azon egységek nevei, melyek orvosként vannak meghatározva, vesszővel elválasztva. Lista di nomi unità che verranno classificati come medici, separati da virgole. 衛生兵として設定されるユニット名を一覧で指定でき、コンマで区切りを付けられます。 보직 이름 목록으로 의무병이 구분됩니다, 쉼표로 구분. + 列出的单位名字将被指派为医疗兵, 记得用逗号隔开! + 列出的單位名字將被指派為醫療兵, 記得用逗號隔開! Is Medic @@ -4517,6 +5163,8 @@ E' Medico 衛生兵として 의무병 + 是医疗兵 + 是醫療兵 This module allows you to assign the medic class to selected units. @@ -4531,6 +5179,8 @@ Questo modulo ti permette di assegnare la classe Medico alle unità selezionate. 選択されたユニットを衛生兵として指定します。 이 모듈은 선택한 보직이 의무병을 할 수 있게 해줍니다. + 本模块可让被同步的单位成为医疗兵. + 本模塊可讓被同步的單位成為醫療兵. None @@ -4545,6 +5195,8 @@ Nessuno なし 없음 + + Regular medic @@ -4554,11 +5206,13 @@ Normaler Sanitäter Řadový zdravotník Médico regular - Infirmier standard + Infirmier Hagyományos orvos Medico Regolare 通常の衛生兵 일반 의무병 + 普通医疗兵 + 普通醫療兵 Doctor (Only Advanced Medics) @@ -4571,8 +5225,10 @@ Médecin (traitements avancés uniquement) Doktor (csak fejlett orvosok) Dottore (Solo Medici Avanzati) - 医師 (アドバンスド医療でのみ) + 医師 (アドバンスド医療のみ) 의사 (오직 고급 의료에서만) + 军医 (只限进阶医疗系统) + 軍醫 (只限進階醫療系統) Doctor @@ -4587,6 +5243,8 @@ Dottore 医師 의사 + 军医 + 軍醫 Assigns the ACE medic class to a unit @@ -4601,6 +5259,8 @@ Assegna la classe medico ACE ad un'unità ユニットを ACE の衛生兵として割り当てる 인원에게 ACE 의무병 보직 선정 + 指派ACE医疗职位给该单位 + 指派ACE醫療職位給該單位 Set Medical Vehicle [ACE] @@ -4615,6 +5275,8 @@ Imposta Veicolo Medico [ACE] 医療車両を設定 [ACE] 의료 차랑 선정 [ACE] + 设定医疗载具 [ACE] + 設定醫療載具 [ACE] List @@ -4629,6 +5291,8 @@ Lista 一覧 목록 + 列表 + 列表 List of vehicles that will be classified as medical vehicle, separated by commas. @@ -4643,6 +5307,8 @@ Lista di veicoli che verranno classificati come veicoli medici, separati da virgole. 医療車両として設定されるクラス名を一覧で指定でき、コンマで区切りを付けられます 차량 명칭 목록으로 의료차량이 구분됩니다, 쉼표로 구분. + 列出的载具将被指定为医疗载具, 记得用逗号隔开! + 列出的載具將被指定為醫療載具, 記得用逗號隔開! Is Medical Vehicle @@ -4657,6 +5323,8 @@ E' Veicolo Medico 医療車両として 의료 차량 + 是医疗载具 + 是醫療載具 Whatever or not the objects in the list will be a medical vehicle. @@ -4671,6 +5339,8 @@ Gli oggetti nella lista verranno considerati veicoli medici o meno. どれでも、またはこの一覧にないオブジェクトを医療車両として割り当てる。 무엇이 되었던간에 이 목록에 있는 물체는 의료 차량이 됩니다. + 列表中的载具将会变成医疗载具 + 列表中的載具將會變成醫療載具 Assigns the ACE medic class to a unit @@ -4685,6 +5355,8 @@ Assegna la classe medico ACE ad un'unità ユニットを ACE の衛生兵として割り当てる 차량에 ACE 의무병 보직 선정 + 指派ACE医疗职位给该单位 + 指派ACE醫療職位給該單位 Set Medical Facility [ACE] @@ -4694,11 +5366,13 @@ Setze medizinische Einrichtung [ACE] Určit zdravotnické zařízení [ACE] Definir instalação médica [ACE] - Définir comme équipement médical [ACE] + Définir comme installation médical [ACE] Orvosi létesítmény beállítása [ACE] Imposta Struttura Medica [ACE] - 医療施設として設定 [ACE] + 医療施設を設定 [ACE] 의료시설 선정 [ACE] + 设定医疗设施 [ACE] + 設定醫療設施 [ACE] Is Medical Facility @@ -4708,11 +5382,13 @@ Ist eine medizinische Einrichtung Zdravotnické zařízení É uma instalação médica - Est un équipement médical + Est une installation médical Orvosi létesítmény-e E' Struttura Medica 医療施設として 의료시설 + 是医疗设施 + 是醫療設施 Registers an object as a medical facility @@ -4722,11 +5398,13 @@ Definiert ein Objekt als medizinische Einrichtung Registruje objekt jako zdravotnické zařízení Registra um objeto como instalacão médica - Enregistrer un objet comme un équipement médical + Enregistrer un objet comme une installation médical Egy objektum orvosi létesítményként való regisztrálása Registra un oggetto come struttura medica オブジェクトを医療施設として割り当てる 물체를 의료시설로 등록합니다 + 指定一个物件作为医疗设施 + 指定一個物件作為醫療設施 Defines an object as a medical facility. This allows for more advanced treatments. Can be used on buildings and vehicles. @@ -4736,11 +5414,13 @@ Definiert ein Objekt als medizinische Einrichtung. Hier werden weitere, tiefgreifende Behandlungen ermöglicht. Kann Fahrzeugen oder Gebäuden zugewiesen werden. Definuje objekt jako zdravotnické zařízení. To umožňuje více pokročilé léčení. Může být použito na budovy nebo na vozidla. Define um objeto como instalação médica. Isso permite tratamentos mais avançados. Pode ser utilizado em edifícios e veículos. - Définir un objet comme équipement médical. Cela permet les traitements avancés. Peut être utilisé sur les batiments et les véhicules + Définir un objet comme installation médical. Cela permet les traitements avancés. Peut être utilisé sur les batiments et les véhicules Egy objektumot orvosi létesítményként határoz meg. Ez fejlett ellátási lehetőségeket engedélyez. Használható járműveken és épületeken. Definisce un oggetto come struttura medica. Questo permette cure più avanzate. Può essere usato su edifici e veicoli. - オブジェクトを医療施設として割り当てます。割り当てられた場合、より高度な治療が可能になり、建物と車両へつかえます。 - 물체를 의료시설로 정의합니다. 건물 혹은 차량이 될 수 있습니다. 이는 고급 의료 조치를 할 수 있게해줍니다. + オブジェクトを医療施設として割り当てます。建物と車両へ割り当てられた場合、より高度な治療が可能になります。 + 물체를 의료시설로 정의합니다. 건물 혹은 차량이 될 수 있습니다. 이는 고급 의료 조치를 할 수 있게해줍니다. + 定义一个物件作为医疗设施, 此医疗设施将被允许使用更进阶的医疗方法. 此功能可用于建筑物或是载具上! + 定義一個物件作為醫療設施, 此醫療設施將被允許使用更進階的醫療方法. 此功能可用於建築物或是載具上! [ACE] Medical Supply Crate (Basic) @@ -4753,8 +5433,10 @@ [ACE] Caisse médicale (basique) [ACE] Orvosi láda (Alap) [ACE] Cassa Rifornimenti Medici (Basico) - [ACE] 医療箱 (ベーシック) + [ACE] 医療物資箱 (ベーシック) [ACE] 의료 물자 (기본) + [ACE] 医疗补给箱(基本) + [ACE] 醫療補給箱(基本) [ACE] Medical Supply Crate (Advanced) @@ -4767,8 +5449,10 @@ [ACE] Caisse médicale (avancée) [ACE] Orvosi láda (Fejlett) [ACE] Cassa Rifornimenti Medici (Avanzato) - [ACE] 医療箱 (アドバンスド) + [ACE] 医療物資箱 (アドバンスド) [ACE] 의료 물자 (고급) + [ACE] 医疗补给箱(进阶) + [ACE] 醫療補給箱(進階) Anytime @@ -4783,6 +5467,8 @@ Sempre いつでも 언제나 + 任何时间 + 任何時間 Stable @@ -4797,6 +5483,8 @@ Stabile 安定 안정된 + 稳定状态下 + 穩定狀態下 Medical @@ -4811,6 +5499,8 @@ Orvosi 治療 의료 + 医疗设定 + 醫療設定 Distance to %1 has become to far for treatment @@ -4824,6 +5514,8 @@ %1 est trop loin pour être soigné %1 は治療をできない所まで離れた %1 부터의 거리가 너무 멀어 치료할 수 없습니다 + 设定当距离超过%1将不能使用治疗动作 + 設定當距離超過%1將不能使用治療動作 This person (%1) is awake and cannot be loaded @@ -4834,9 +5526,11 @@ Esta pessoa (%1) está acordada e não pode ser carregada Tato osoba (%1) je vzhůru a nemůže být naložena Questa persona (%1) è sveglia e non può essere caricata. - Cette personne (%1) est consciente et ne peut être chargées. + %1 est conscient et ne peut être embarqué. 患者 (%1) は意識があり、積み込めない 이 사람 (%1) 은(는) 의식이 있어 태우지 못합니다 + 此人(%1)是清醒且不能被装载 + 此人(%1)是清醒且不能被裝載 There is no tourniquet on this body part! @@ -4850,6 +5544,8 @@ Il n'y a pas de garrot sur ce membre ! 身体には止血帯が無い! 이 부위에는 지혈대가 없습니다! + 这部位没有止血带! + 這部位沒有止血帶! Medical training @@ -4863,6 +5559,8 @@ Медицинская подготовка 治療の訓練 의료 훈련 + 医疗训练 + 醫療訓練 Whether or not the object will be a medical vehicle. @@ -4870,11 +5568,13 @@ L'oggetto in questione sarà un veicolo medico o meno. Legt fest, ob das Objekt ein Sanitätsfahrzeug ist. Es un vehículo médico? - Définit si le véhicule est un véhicule médical ou non. + Détermine si c'est un véhicule sanitaire. Se o objeto será ou não um veículo médico Будет ли объект считаться медицинским транспортом. どれでも、またはオブジェクトを医療車両として割り当てます。 무엇이 되었던간에 이 목록에 있는 물체는 의료 차량이 됩니다. + 是否使该载具为医疗载具? + 是否使該載具為醫療載具? Delay cease fire of AI while player is unconscious for medical reasons. @@ -4882,11 +5582,13 @@ Ritarda il cessate il fuoco dell'IA quando il giocatore è svenuto per motivi medici. Prodleva zastavení palby pro AI, pokud je hráč v bezvědomí ze zdravotních důvodů. Atraso durante cessar fogo da AI durante inconsciência médica - Délai de cessez le feu pour l'IA pendant que le joueur est inconscient pour des raisons médicales + Délai de cessez le feu pour l'IA pendant que le joueur est inconscient pour des raisons médicales. Задержка прекращения огня ботами, когда игрок теряет сознание по медицинским причинам. AI はプレイヤーが医療的な理由で気絶している場合にかぎり、撃つのをためらいます。 Opóźnij stan wstrzymania ognia u AI kiedy gracz jest nieprzytomny z powodów medycznych. 의료상의 이유로 플레이어가 기절할 경우 인공지능이 발사를 지연합니다. + 当玩家为无意识的状态时, 延长AI的停火时间 + 當玩家為無意識的狀態時, 延長AI的停火時間 Delay cease fire of AI for unconsciousness @@ -4900,6 +5602,8 @@ Задержка прекращения огня ботами при потере сознания AI は気絶している人へ、ためらってから射撃します 기절할 경우 인공지능이 발사를 지연합니다 + 延长AI对已无意识玩家的停火时间 + 延長AI對已無意識玩家的停火時間 diff --git a/addons/medical_ai/functions/fnc_canRequestMedic.sqf b/addons/medical_ai/functions/fnc_canRequestMedic.sqf index 75a4a0fb32..39a5063f24 100644 --- a/addons/medical_ai/functions/fnc_canRequestMedic.sqf +++ b/addons/medical_ai/functions/fnc_canRequestMedic.sqf @@ -8,6 +8,9 @@ * Return Value: * Can request medic * + * Example: + * call ACE_medical_ai_fnc_canRequestMedic + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical_ai/functions/fnc_healSelf.sqf b/addons/medical_ai/functions/fnc_healSelf.sqf index 3cf8ad75e9..253dcd2a45 100644 --- a/addons/medical_ai/functions/fnc_healSelf.sqf +++ b/addons/medical_ai/functions/fnc_healSelf.sqf @@ -6,7 +6,10 @@ * None * * Return Value: - * Nothing + * None + * + * Example: + * call ACE_medical_ai_fnc_healSelf * * Public: No */ diff --git a/addons/medical_ai/functions/fnc_healUnit.sqf b/addons/medical_ai/functions/fnc_healUnit.sqf index 6ebb0b2e4a..569d62f890 100644 --- a/addons/medical_ai/functions/fnc_healUnit.sqf +++ b/addons/medical_ai/functions/fnc_healUnit.sqf @@ -6,7 +6,10 @@ * None * * Return Value: - * Nothing + * None + * + * Example: + * call ACE_medical_ai_fnc_healUnit * * Public: No */ diff --git a/addons/medical_ai/functions/fnc_isInjured.sqf b/addons/medical_ai/functions/fnc_isInjured.sqf index 6852fc1c58..4c25ba72a1 100644 --- a/addons/medical_ai/functions/fnc_isInjured.sqf +++ b/addons/medical_ai/functions/fnc_isInjured.sqf @@ -8,6 +8,9 @@ * Return Value: * Does unit need treatment * + * Example: + * call ACE_medical_ai_fnc_isInjured + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical_ai/functions/fnc_isSafe.sqf b/addons/medical_ai/functions/fnc_isSafe.sqf index 92bbc60587..de7d9667cc 100644 --- a/addons/medical_ai/functions/fnc_isSafe.sqf +++ b/addons/medical_ai/functions/fnc_isSafe.sqf @@ -8,6 +8,9 @@ * Return Value: * Is unit safe enough * + * Example: + * call ACE_medical_ai_fnc_isSafe + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical_ai/functions/fnc_playTreatmentAnim.sqf b/addons/medical_ai/functions/fnc_playTreatmentAnim.sqf index f013486cc1..de2c0ee30e 100644 --- a/addons/medical_ai/functions/fnc_playTreatmentAnim.sqf +++ b/addons/medical_ai/functions/fnc_playTreatmentAnim.sqf @@ -8,7 +8,10 @@ * 2: Is self treatment * * Return Value: - * Nothing + * None + * + * Example: + * [bob, true, true] call ACE_medical_ai_fnc_playTreatmentAnim * * Public: No */ diff --git a/addons/medical_ai/functions/fnc_requestMedic.sqf b/addons/medical_ai/functions/fnc_requestMedic.sqf index f669b06975..6bb3229e9a 100644 --- a/addons/medical_ai/functions/fnc_requestMedic.sqf +++ b/addons/medical_ai/functions/fnc_requestMedic.sqf @@ -6,7 +6,10 @@ * None * * Return Value: - * Nothing + * None + * + * Example: + * call ACE_medical_ai_fnc_requestMedic * * Public: No */ diff --git a/addons/medical_ai/functions/fnc_wasRequested.sqf b/addons/medical_ai/functions/fnc_wasRequested.sqf index 2b86423be8..c340ff7b9e 100644 --- a/addons/medical_ai/functions/fnc_wasRequested.sqf +++ b/addons/medical_ai/functions/fnc_wasRequested.sqf @@ -8,6 +8,9 @@ * Return Value: * Was requested * + * Example: + * call ACE_medical_ai_fnc_wasRequested + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical_ai/stringtable.xml b/addons/medical_ai/stringtable.xml index b3dc75dce6..8a8068e7d6 100644 --- a/addons/medical_ai/stringtable.xml +++ b/addons/medical_ai/stringtable.xml @@ -8,6 +8,10 @@ Нур сервера унд HC サーバーと HC のみ Tylko serwer i HC + Seulement sur le server ou le HC + Solo Server e HC + 只在伺服器或无头客户端 + 只在伺服器或無頭客戶端 diff --git a/addons/medical_blood/functions/fnc_hit.sqf b/addons/medical_blood/functions/fnc_hit.sqf index 1572b2e5a1..3c0251a437 100644 --- a/addons/medical_blood/functions/fnc_hit.sqf +++ b/addons/medical_blood/functions/fnc_hit.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [bob, kevin, 5] call ACE_medical_blood_fnc_hit + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical_blood/stringtable.xml b/addons/medical_blood/stringtable.xml index a45dc29d90..1e61151d0d 100644 --- a/addons/medical_blood/stringtable.xml +++ b/addons/medical_blood/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -7,19 +7,31 @@ Nur Spieler 오직 플레이어만 Tylko gracze + Joueurs seulement + Solo Giocatori + 只有玩家 + 只有玩家 Enable Blood Drops - 血の滴下を有効化 + 血痕を有効化 Aktiviere Blutspritzer 피흘리기 활성화 Włącz ślady krwi na ziemi + Active les gouttes de sang + Abilita Perdite di Sangue + 开启血液滴落效果 + 開啟血液滴落效果 Enable or disable Blood Drops created on bleeding and taking damage - ダメージを受けたり、出血していると血が滴る様子の有効か無効化 + ダメージを受けたり、出血していると出る血痕の有効か無効化 Aktiviere oder deaktiviere Blutspritzer, die durch Blutungen oder bei Schadensnahme entstehen. Włącz lub wyłącz pozostawianie śladów krwi na ziemi kiedy postać odnosi obrażenia bądź krwawi + (Dés)active les gouttes de sang lors d'un saignement ou de blessure + Abilita o disabilita la Perdite di Sangue create sanguinando e prendendo danno + 开启后, 会让受伤时伤口有血液滴落的效果. + 開啟後, 會讓受傷時傷口有血液滴落的效果. - \ No newline at end of file + diff --git a/addons/medical_menu/functions/fnc_getTreatmentOptions.sqf b/addons/medical_menu/functions/fnc_getTreatmentOptions.sqf index 6fed994671..80b43bae3c 100644 --- a/addons/medical_menu/functions/fnc_getTreatmentOptions.sqf +++ b/addons/medical_menu/functions/fnc_getTreatmentOptions.sqf @@ -10,7 +10,7 @@ * Return Value: * Available actions * - * Exmaple: + * Example: * [ACE_player, poor_dude, "some category"] call ace_medical_menu_fnc_getTreatmentOptions * * Public: No diff --git a/addons/medical_menu/functions/fnc_module.sqf b/addons/medical_menu/functions/fnc_module.sqf index 666440e208..f056082743 100644 --- a/addons/medical_menu/functions/fnc_module.sqf +++ b/addons/medical_menu/functions/fnc_module.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ACE_medical_menu_fnc_module + * * Public: No */ diff --git a/addons/medical_menu/functions/fnc_setTriageStatus.sqf b/addons/medical_menu/functions/fnc_setTriageStatus.sqf index 8a85eeb950..66efd6ac0c 100644 --- a/addons/medical_menu/functions/fnc_setTriageStatus.sqf +++ b/addons/medical_menu/functions/fnc_setTriageStatus.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, 2] call ACE_medical_menu_fnc_setTriageStatus + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical_menu/functions/fnc_updateInformationLists.sqf b/addons/medical_menu/functions/fnc_updateInformationLists.sqf index 28818465bc..d6ff631df8 100644 --- a/addons/medical_menu/functions/fnc_updateInformationLists.sqf +++ b/addons/medical_menu/functions/fnc_updateInformationLists.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [DISPLAY, [messagecollection], [injurycollection]] call ACE_medical_menu_fnc_updateInformationLists + * * Public: No */ #include "script_component.hpp" diff --git a/addons/medical_menu/stringtable.xml b/addons/medical_menu/stringtable.xml index 36c5a6a182..20180d3b91 100644 --- a/addons/medical_menu/stringtable.xml +++ b/addons/medical_menu/stringtable.xml @@ -13,6 +13,8 @@ Menu médical 治療メニュー 의료 메뉴 + 医疗选单 + 醫療選單 Allow Medical Menu @@ -26,6 +28,8 @@ Autoriser le menu médical 治療メニューを有効化 의료 메뉴 활성화 + 允许医疗选单 + 允許醫療選單 Allow clients to use the medical menu @@ -39,6 +43,8 @@ Autoriser les clients à utiliser le menu médical すべてのクライアントが治療メニューをつかえるようにする 클라이언트가 의료 메뉴를 쓰는것을 허락합니다 + 允许客户端使用医疗选单 + 允許客戶端使用醫療選單 Use Medical menu @@ -52,6 +58,8 @@ Utiliser le menu médical 治療メニューをつかう 의료 메뉴 사용 + 使用医疗选单 + 使用醫療選單 If allowed by server, enable the option to use the Medical Menu through keybinding and interaction menu @@ -65,6 +73,8 @@ Si autorisé par le serveur, active l'option d'utiliser le menu médical à travers les raccourcis clavier et le menu d'interaction. サーバーが有効化を許可している場合は、オプションから有効化でき治療メニューはキー割り当てとインタラクション メニューを無視できます 서버 허가하에 단축키와 상호작용 메뉴로 의료 메뉴사용을 허가합니다 + 如果伺服器允许, 只需透过按键即可叫出医疗选单 + 如果伺服器允許, 只需透過按鍵即可叫出醫療選單 Re-open Medical menu @@ -78,6 +88,8 @@ Ré-ouvrir le menu médical 治療メニューを再びひらく 의료 메뉴 다시 열기 + 重新开启医疗选单 + 重新開啟醫療選單 Re-open the medical menu after succesful treatment @@ -91,6 +103,8 @@ Ré-ouvrir le menu médical après un traitement réussi 治療が終わったあと、再び治療メニューをひらく 성공적으로 치료한후에 의료 메뉴를 다시 엽니다 + 当治疗成功后重新打开医疗选单 + 當治療成功後重新打開醫療選單 Open Medical Menu @@ -104,6 +118,8 @@ Ouvir le menu médical 治療メニューをひらく 의료 메뉴 열기 + 开起医疗选单 + 開起醫療選單 Medical Menu Settings @@ -117,6 +133,8 @@ Réglages du menu médical 治療メニューの設定 의료 메뉴 설정 + 医疗选单设定 + 醫療選單設定 Configure the usage of the Medical Menu @@ -130,6 +148,8 @@ Configurer l'utilisation du menu médical 治療メニューを使うための設定 의료 메뉴 사용의 설정 + 设置医疗选单的使用 + 設置醫療選單的使用 EXAMINE & TREATMENT @@ -143,6 +163,8 @@ ESAMINA & TRATTA 診断 & 治療 검사 / 치료 + 检查 & 治疗 + 檢查 & 治療 STATUS @@ -156,6 +178,8 @@ STATO 状態 상태 + 状态 + 狀態 OVERVIEW @@ -169,6 +193,8 @@ PANORAMICA オーバービュー 개요 + 概述 + 概述 ACTIVITY LOG @@ -182,6 +208,8 @@ LOG ATTIVITA' 治療履歴 활동 로그 + 医疗纪录 + 醫療紀錄 QUICK VIEW @@ -195,6 +223,8 @@ VISTA RAPIDA クイック ビュー 퀵 뷰 + 快速检查 + 快速檢查 View triage Card @@ -208,6 +238,8 @@ Guarda Triage Card トリアージ カードを見る 부상자 카드 보기 + 查看诊断卡 + 查看診斷卡 Examine Patient @@ -221,6 +253,8 @@ Esamina Paziente 患者を調べる 환자 검사하기 + 检查伤者 + 檢查傷者 Bandage / Fractures @@ -234,6 +268,8 @@ Bendaggi/Fratture 包帯 / 骨折 붕대 / 골절 + 绷带 / 骨折 + 繃帶 / 骨折 Medication @@ -247,6 +283,8 @@ Medicazione 薬物による治療 약물 치료 + 药物 + 藥物 Airway Management @@ -260,6 +298,8 @@ Atemwegssicherung 気道を確保 기도 관리 + 呼吸道管理 + 呼吸道管理 Advanced Treatments @@ -273,6 +313,8 @@ Trattamenti Avanzati 高度な治療 고급 치료 + 进阶治疗 + 進階治療 Drag/Carry @@ -286,6 +328,8 @@ Trascina/Trasporta 引きずる / 運ぶ 끌기 / 들기 + 拖 / 背 + 拖 / 背 Toggle (Self) @@ -299,97 +343,113 @@ Attiva (Te Stesso) トグル (自分) 토글 (자신) + 切换 (自己) + 切換 (自己) Select triage status Setze Status auf der Triagekarte Сортировка Seleccionar estado de Triage - Selectioner l'état de triage + Sélectionner l'état de triage Wybierz priorytet Selecionar estado de triagem Vybrat prioritu Seleziona stato Triage トリアージによる状態を選択 부상 상태 고르기 + 选择分诊状态 + 選擇分診狀態 Select Head Wähle Kopf Выбрать голову Seleccionar Cabeza - Selectioner Tête + Sélectionner la tête Wybierz głowę Selecionar Cabeça Vybrat Hlavu Seleziona Testa 頭部を選ぶ 머리 선택 + 选择头部 + 選擇頭部 Select Torso Wähle Torso Выбрать торс Seleccionar Torso - Selectioner Torse + Sélectionner le torse Wybierz tors Selecionar Torso Vybrat Trup Seleziona Torso 胴体を選ぶ 몸통 선택 + 选择身体 + 選擇身體 Select Left Arm Wähle linken Arm Выбрать левую руку Seleccionar Brazo Izquierdo - Selectioner Bras Gauche + Sélectionner le bras gauche Wybierz lewą rękę Selecionar Braço Esquerdo Vybrat Levou ruku Seleziona Braccio Sinistro 左腕を選ぶ 왼쪽 팔 선택 + 选择左手 + 選擇左手 Select Right Arm Wähle rechten Arm Выбрать правую руку Seleccionar Brazo Derecho - Selectioner Bras Droit + Sélectionner le bras droit Wybierz prawą rękę Selecionar Braço Direito Vybrat Pravou ruku Seleziona Braccio Destro 右腕を選ぶ 오른쪽 팔 선택 + 选择右手 + 選擇右手 Select Left Leg Wähle linkes Bein Выбрать левую ногу Seleccionar Pierna Izquierda - Selectioner Jambe Gauche + Sélectionner la jambe gauche Wybierz lewą nogę Selecionar Perna Esquerda Vybrat Levou nohu Seleziona Gamba Sinistra 左足を選ぶ 왼쪽 다리 선택 + 选择左脚 + 選擇左腳 Select Right Leg Wähle rechtes Bein Выбрать правую ногу Seleccionar Pierna Derecha - Selectioner Jambe Droite + Sélectionner la jambe droite Wybierz prawą nogę Selecionar Perna Direita Vybrat Pravou nohu Seleziona Gamba Destra 右足を選ぶ 오른쪽 다리 선택 + 选择右脚 + 選擇右腳 Head @@ -403,6 +463,8 @@ Testa 頭部 머리 + 头部 + 頭部 Torso @@ -416,71 +478,83 @@ Torso 胴体 몸통 + 身体 + 身體 Left Arm Linker Arm Левая рука Brazo Izquierdo - Bras Gauche + Bras gauche Lewa ręka Braço Esquerdo Levá Ruka Braccio Sinistro 左腕 왼쪽 팔 + 左手 + 左手 Right Arm Rechter Arm Правая рука Brazo Derecho - Bras Droit + Bras droit Prawa ręka Braço Direito Pravá Ruka Braccio Destro 右腕 오른쪽 팔 + 右手 + 右手 Left Leg Linkes Bein Левая нога Pierna Izquierda - Jambe Gauche + Jambe gauche Lewa noga Perna Esquerda Levá Noha Gamba Sinistra 左足 왼쪽 다리 + 左脚 + 左腳 Right Leg Rechtes Bein Правая нога Pierna Derecha - Jambe Droite + Jambe droite Prawa noga Perna Direita Pravá Noha Gamba Destra 右足 오른쪽 다리 + 右脚 + 右腳 Body Part: %1 Körperteil: %1 Часть тела: %1 Parte del cuerpo: %1 - Partie du corps: %1 + Partie du corps : %1 Część ciała: %1 Parte do corpo: %1 Část těla: %1 Parte del Corpo: %1 身体の一部: %1 신체 부위: %1 + 身体部位: %1 + 身體部位: %1 Small @@ -494,6 +568,8 @@ Piccolo 小さい + + Medium @@ -507,6 +583,8 @@ Medio 中くらい + + Large @@ -520,19 +598,23 @@ Grande 大きい + + There are %2 %1 Open Wounds Er hat %2 offene Wunden (%1) %2 открытые раны %1 Hay %2 Heridas Abiertas %1 - Il y a %2 %1 Blessure(s) Ouverte(s) + Il y a %2 %1 blessure(s) ouverte(s) Widzisz otwarte rany w ilości %2 o %1 rozmiarze Existem %2 ferimentos abertos %1 Jsou zde %2 %1 otevřené rány Ci sono %2 %1 Ferite Aperte 開いている傷口が %2 %1 ほどあるようだ 여기 %2 %1 크기의 열린 상처가 있다 + 有 %2 %1 开放性伤口 + 有 %2 %1 開放性傷口 There is 1 %1 Open Wound @@ -546,58 +628,68 @@ C'è 1 %1 Ferita Aperta 1 つの空いている %1 傷口 여기 %1 크기의 열린 상처가 있다 + 有 1 %1 开放性伤口 + 有 1 %1 開放性傷口 There is a partial %1 Open wound Er hat eine zum Teil offene Wunde (%1) Частично открытая рана %1 Hay una herida parcial abierta %1 - Il y a une Blessure Patiellement Ouverte %1 + Il y a une blessure partiellement ouverte %1 Widzisz częściowo otwartą ranę o %1 rozmiarze Existe um ferimento parcial aberto %1 Je zde částečně %1 otevřená rána C'è 1 parziale %1 Ferita Aperta 部分的に開いている %1 の傷口がある 여기 부분적으로 %1 크기의 상처가 있다 + 有部分 %1 开放性伤口 + 有部分 %1 開放性傷口 There are %2 %1 Bandaged Wounds Er hat %2 verbundene Wunden (%1) %2 перевязанные раны %1 Hay %2 Heridas %1 Vendadas - Il y a %2 %1 Blessure(s) Bandée(s) + Il y a %2 %1 blessure(s) bandée(s) Widzisz %2 zabandażowanych ran o %1 rozmiarze Existem %2 ferimentos %1 tratados Jsou zde %2 %1 ovázané rány Ci sono %2 %1 Ferite Bendate ここには %2 %1 の処置された傷がある 여기에 붕대를 감은 %2 %1 크기의 상처가 있다 + 有 %2 %1 包扎过伤口 + 有 %2 %1 包紮過傷口 There is 1 %1 Bandaged Wound Er hat 1 verbundene Wunde (%1) 1 перевязанная рана %1 Hay 1 Herida Vendada %1 - Il y a 1 %1 Blessure Bandée + Il y a 1 %1 blessure bandée Widzisz 1 zabandażowaną ranę o %1 rozmiarze Existe 1 ferimento %1 tratado Je zde 1 %1 ovázaná rána C'è 1 %1 Ferita Bendata 1 つの包帯で巻かれている %1 傷 여기에 붕대를 감은 %1 크기의 상처가 있다 + 有 1 %1 包扎过伤口 + 有 1 %1 包紮過傷口 There is a partial %1 Bandaged wound Er hat eine zum Teil verbundene Wunde (%1) Частично перевязанная рана %1 Hay una Herida parcial %1 Vendada - Il y a %1 Blessure Partielment Bandée + Il y a %1 blessure partiellement bandée Widzisz 1 częściowo zabandażowaną ranę o %1 rozmiarze Existe um ferimento parcial tratado %1 Je zde částěčně %1 ovázaná rána C'è 1 parziale %1 Ferita Bendata 患者には %1 の包帯で処置された傷がある 여기 부분적으로 붕대질한 %1 크기의 상처가 있다 + 有部分 %1 包扎过伤口 + 有部分 %1 包紮過傷口 Normal breathing @@ -611,6 +703,8 @@ Respirazione Normale 通常の呼吸 정상 호흡 + 正常呼吸 + 正常呼吸 No breathing @@ -624,6 +718,8 @@ Nessuna Respirazione 息をしていない 호흡이 없음 + 没有呼吸 + 沒有呼吸 Difficult breathing @@ -637,6 +733,8 @@ Difficoltà Respiratorie 呼吸が難しそうだ 호흡 곤란 + 呼吸困难 + 呼吸困難 Almost no breathing @@ -650,6 +748,8 @@ Quasi nessuna Respirazione ほとんど呼吸していない 호흡이 거의 없음 + 几乎没有呼吸 + 幾乎沒有呼吸 Bleeding @@ -663,6 +763,8 @@ Sanguinamento 出血 출혈 + 出血中 + 出血中 in Pain @@ -676,19 +778,23 @@ in Dolore 痛みがある 고통 + 疼痛中 + 疼痛中 Lost a lot of Blood hat sehr viel Blut verloren Большая кровопотеря Mucha Sangre perdida - A Perdu Bcp de Sang + A perdu beaucoup de sang Stracił dużo krwi Perdeu muito sangue Ztratil hodně krve Perso molto Sangue 大量出血している 많은 피를 흘림 + 大量失血 + 大量失血 Tourniquet [CAT] @@ -702,6 +808,8 @@ Laccio Emostatico [CAT] 止血帯 [CAT] 지혈대 [CAT] + 军用止血带 + 軍用止血帶 Nasopharyngeal Tube [NPA] @@ -715,6 +823,8 @@ Tubo Nasofaringeo [NPA] 鼻咽頭チューブ [NPA] 비-인두 기도기 [NPA] + 鼻咽管 + 鼻咽管 diff --git a/addons/microdagr/CfgUIGrids.hpp b/addons/microdagr/CfgUIGrids.hpp new file mode 100644 index 0000000000..5d7b921800 --- /dev/null +++ b/addons/microdagr/CfgUIGrids.hpp @@ -0,0 +1,21 @@ +class CfgUIGrids { + class IGUI { + class Presets { + class Arma3 { + class Variables { + grid_ACE_microDagr[] = {{"(safezoneX + safezoneW - 11 * (((safezoneW / safezoneH) min 1.2) / 40))","(safezoneY + safezoneH - 15 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))","(10 * (((safezoneW / safezoneH) min 1.2) / 40))","(10 * ((((safezoneW / safezoneH) min 1.2) / 1.2) / 25))"},"(((safezoneW / safezoneH) min 1.2) / 40)","((((safezoneW / safezoneH) min 1.2) / 1.2) / 25)"}; + }; + }; + }; + + class Variables { + class grid_ACE_microDagr { + displayName = COMPONENT_NAME; + description = "ACE MicroDagr"; + preview = QPATHTOF(ui\IGUI_preview_ca.paa); + saveToProfile[] = {0,1,2,3}; + canResize = 1; + }; + }; + }; +}; diff --git a/addons/microdagr/UI/IGUI_preview_ca.paa b/addons/microdagr/UI/IGUI_preview_ca.paa new file mode 100644 index 0000000000..12cbdb5f9b Binary files /dev/null and b/addons/microdagr/UI/IGUI_preview_ca.paa differ diff --git a/addons/microdagr/config.cpp b/addons/microdagr/config.cpp index c3ca72b454..a138a194d5 100644 --- a/addons/microdagr/config.cpp +++ b/addons/microdagr/config.cpp @@ -18,4 +18,5 @@ class CfgPatches { #include "CfgWeapons.hpp" #include "CfgVehicles.hpp" #include "gui.hpp" +#include "CfgUIGrids.hpp" #include "ACE_Settings.hpp" diff --git a/addons/microdagr/gui.hpp b/addons/microdagr/gui.hpp index fe15bb7bb2..1404f6b81d 100644 --- a/addons/microdagr/gui.hpp +++ b/addons/microdagr/gui.hpp @@ -59,10 +59,10 @@ class GVAR(TheDialog) { //Redfine Scaling for the RscTitle -#define PROFILE_X (profilenamespace getVariable ['IGUI_GRID_GPS_X', 0]) -#define PROFILE_Y (profilenamespace getVariable ['IGUI_GRID_GPS_Y', 0]) -#define PROFILE_W (profilenamespace getVariable ['IGUI_GRID_GPS_W', 1]) -#define PROFILE_H ((16/9) * (profilenamespace getVariable ['IGUI_GRID_GPS_W', 1])) +#define PROFILE_X (profilenamespace getVariable ['IGUI_grid_ACE_microDagr_X', 0]) +#define PROFILE_Y (profilenamespace getVariable ['IGUI_grid_ACE_microDagr_Y', 0]) +#define PROFILE_W (profilenamespace getVariable ['IGUI_grid_ACE_microDagr_W', 1]) +#define PROFILE_H ((16/9) * (profilenamespace getVariable ['IGUI_grid_ACE_microDagr_W', 1])) //Need undef's for pboProject #undef X_PART diff --git a/addons/microdagr/stringtable.xml b/addons/microdagr/stringtable.xml index 5be5d853c3..af18c39c03 100644 --- a/addons/microdagr/stringtable.xml +++ b/addons/microdagr/stringtable.xml @@ -14,6 +14,8 @@ GPS MicroDAGR MicroDAGR GPS MicroDAGR GPS + 微型军用GPS接收器 + 微型軍用GPS接收器 MicroDAGR advanced GPS receiver @@ -28,6 +30,8 @@ Recepitor GPS avançado MicroDAGR MicroDAGR は改良された GPS 受信機です MicroDAGR 고급 위성항법 수신기 + 微型军用高级防御GPS接收器 + 微型軍用高級防禦GPS接收器 Angular Unit: @@ -42,6 +46,8 @@ Unidade Angular: 角度の種類: 각도의 단위: + 角密位: + 角密位: Mils @@ -56,6 +62,8 @@ Mils: ミリ ラジアン + 密位 + 密位 Show Waypoints On Map: @@ -70,6 +78,8 @@ Mostrar Waypoints no mapa: 地図へウェイポイントを表示: 웨이포인트를 지도에 보이기: + 显示路径点在地图上: + 顯示路徑點在地圖上: Degrees @@ -84,6 +94,8 @@ Graus 角度 각도 + + On @@ -98,6 +110,8 @@ Be 有効 켜기 + 开启 + 開啟 Off @@ -112,6 +126,8 @@ Ki 無効 끄기 + 关闭 + 關閉 Enter Grid Cords: @@ -126,6 +142,8 @@ Digite as Ccords. do Grid 座標を入力: 망 좌표 입력: + 输入网格座标: + 輸入網格座標: Name of [%1] @@ -140,6 +158,8 @@ Nome do [%1] [%1] の名前 [%1] 의 이름 + 名称 [%1] + 名稱 [%1] MGRS-New @@ -154,6 +174,8 @@ MGRS-Novo MGRS-New MGRS-새 것 + 军事网格座标系统-新型 + 軍事網格座標系統-新型 WGD @@ -168,6 +190,8 @@ WGD WGD WGD + 世界座标 + 世界座標 Range: @@ -182,6 +206,8 @@ Distância: 距離: 거리: + 范围: + 範圍: Compass Direction @@ -196,6 +222,8 @@ Direção na bússula 方位磁石での方位 방위 + 指北针方位 + 指北針方位 Mark @@ -210,6 +238,8 @@ Marca マーク 표시 + 标记 + 標記 Waypoints @@ -224,6 +254,8 @@ Waypoints ウェイポイント 웨이포인트 + 路径点 + 路徑點 Connect To @@ -238,6 +270,8 @@ Conectar à 次に接続 연결 + 连接到 + 連接到 Settings @@ -252,6 +286,8 @@ Opções 設定 설정 + 设定 + 設定 SetWP @@ -266,6 +302,8 @@ Definir WP ウェイポイント設定 웨이포인트 설정 + 设置路径点 + 設置路徑點 Add @@ -280,6 +318,8 @@ Adicionar 追加 더하기 + 新增 + 新增 Delete @@ -294,6 +334,8 @@ Törlés 削除 지우기 + 删除 + 刪除 Toggle MicroDAGR Display Mode @@ -308,6 +350,8 @@ Alternar Modo de Display do MicroDAGR MicroDAGR の表示モード MicroDAGR 화면 모드 토글 + 切换微型军用GPS接收器显示模式 + 切換微型軍用GPS接收器顯示模式 Show MicoDAGR @@ -322,6 +366,8 @@ Mostrar MicroDAGR MicoDAGR を表示 MicroDAGR 꺼내기 + 显示微型军用GPS接收器 + 顯示微型軍用GPS接收器 Configure MicroDAGR @@ -336,6 +382,8 @@ Configurar MicroDAGR MicroDAGR を設定 MicroDAGR 설정하기 + 设定微型军用GPS接收器 + 設定微型軍用GPS接收器 Close MicroDAGR @@ -350,6 +398,8 @@ Fechar MicroDAGR MicroDAGR を閉じる MicroDAGR 집어넣기 + 关闭微型军用GPS接收器 + 關閉微型軍用GPS接收器 MicroDAGR Map Fill @@ -364,6 +414,8 @@ Riempimento Mappa MicroDAGR MicroDAGR での地図情報 MicroDAGR - 지도채우기 + 微型军用GPS接收器地图资料 + 微型軍用GPS接收器地圖資料 MicroDAGR Map Fill @@ -378,6 +430,8 @@ Riempimento Mappa MicroDAGR MicroDAGR での地図情報 MicroDAGR - 지도채우기 + 微型军用GPS接收器地图资料 + 微型軍用GPS接收器地圖資料 How much map data is filled on MicroDAGR's @@ -392,6 +446,8 @@ Quanti dati sono trasferiti nella mappa del MicroDAGR MicroDAGR で表示する地図情報を決定します 얼마나 많은 데이터가 MicroDAGR에 있는지에 대한 정보 + 有多少地图数据会显示在微型军用GPS接收器 + 有多少地圖數據會顯示在微型軍用GPS接收器 Full Satellite + Buildings @@ -406,6 +462,8 @@ Satellite Completo + Edifici 完全な衛星画像と建物 위성 사진 + 건물 + 完整卫星画面 + 建筑物位置 + 完整衛星畫面 + 建築物位置 Topographical + Roads @@ -420,6 +478,8 @@ Topografico + Strade 地形と道路 지형학 도표 + 도로 + 地形 + 道路 + 地形 + 道路 None (Cannot use map view) @@ -434,6 +494,8 @@ Nessuno (Non puoi usare la vista mappa) なし(地図表示を使えません) 없음 (지도를 볼 수 없음) + 无 (无法检视地图) + 無 (無法檢視地圖) Controls how much data is filled on the microDAGR items. Less data restricts the map view to show less on the minimap. @@ -448,6 +510,8 @@ Controlla quanti dati sono presenti negli oggetti MicroDAGR. Meno dati costringono la vista mappa a mostrare meno informazioni nella minimappa. アイテム上で表示されるデータ量を決定します。設定を減らすと地図上での情報が少なくなります。 MicroDAGR에 얼마나 많은 데이터가 들어있는지 정합니다. 적을 수록 지도상에도 비춰지는게 적어집니다. + 设定有多少数据会显示在微型军用GPS接收器上. 这些资料的多寡会反映在迷你地图的显示上. + 設定有多少數據會顯示在微型軍用GPS接收器上. 這些資料的多寡會反映在迷你地圖的顯示上. diff --git a/addons/minedetector/CfgVehicles.hpp b/addons/minedetector/CfgVehicles.hpp index 14273b108c..ab6c06b4cb 100644 --- a/addons/minedetector/CfgVehicles.hpp +++ b/addons/minedetector/CfgVehicles.hpp @@ -1,9 +1,9 @@ class CfgVehicles { class Box_NATO_Support_F; class ACE_Box_Misc: Box_NATO_Support_F { - class TransportItems { - MACRO_ADDITEM(ACE_VMM3,4); - MACRO_ADDITEM(ACE_VMH3,4); + class TransportWeapons { + MACRO_ADDWEAPON(ACE_VMM3,4); + MACRO_ADDWEAPON(ACE_VMH3,4); }; }; diff --git a/addons/minedetector/XEH_postInit.sqf b/addons/minedetector/XEH_postInit.sqf index 4b842e3488..7ea04b5a5d 100644 --- a/addons/minedetector/XEH_postInit.sqf +++ b/addons/minedetector/XEH_postInit.sqf @@ -27,7 +27,7 @@ addMissionEventHandler ["Draw3D", { GVAR(debugDetector) params ["_detectorPointAGL", "_mines"]; drawIcon3D ["\A3\ui_f\data\map\markers\military\dot_CA.paa", [0,0,1,1], _detectorPointAGL, 1, 1, 0, "detector", 1, 0.02, "PuristaMedium"]; { - _name = format ["%1@%2", typeOf _x, (floor ((_x distance _detectorPointAGL) * 10)) / 10]; + private _name = format ["%1@%2", typeOf _x, (floor ((_x distance _detectorPointAGL) * 10)) / 10]; if ((getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> QGVAR(detectable))) == 1) then { drawIcon3D ["\A3\ui_f\data\map\markers\military\dot_CA.paa", [1,0,0,1], (ASLtoAGL (getPosASL _x)), 1, 1, 0, _name, 1, 0.02, "PuristaMedium"]; } else { diff --git a/addons/minedetector/functions/fnc_detectorLoop.sqf b/addons/minedetector/functions/fnc_detectorLoop.sqf index e5fd4d5bd3..ef05046881 100644 --- a/addons/minedetector/functions/fnc_detectorLoop.sqf +++ b/addons/minedetector/functions/fnc_detectorLoop.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [[args], 2] call ACE_minedetector_fnc_detectorLoop + * * Public: No */ diff --git a/addons/minedetector/stringtable.xml b/addons/minedetector/stringtable.xml index a9aa235f18..0e2e31e5a6 100644 --- a/addons/minedetector/stringtable.xml +++ b/addons/minedetector/stringtable.xml @@ -10,6 +10,9 @@ Wykrywacz metali Metalldetektor 지뢰탐지기 + Metal detector + 金属探测器 + 金屬探測器 Metal detector @@ -20,6 +23,9 @@ Wykrywacz metali Metalldetektor 지뢰탐지기 + Metal detector + 金属探测器 + 金屬探測器 Activate @@ -30,6 +36,9 @@ Aktywuj Aktivieren 작동 + Attiva + 启用探测器 + 啟用探測器 Deactivate @@ -40,6 +49,9 @@ Deaktywuj Deaktivieren 끄기 + Disattiva + 停用探测器 + 停用探測器 Connect Headphones @@ -49,6 +61,10 @@ Podłącz słuchawki Kopfhörer verbinden 헤드폰에 연결 + Connecter les écouteurs + Connetti Auricolari + 连接耳机 + 連接耳機 Disconnect Headphones @@ -58,6 +74,10 @@ Odłącz słuchawki Kopfhörer trennen 헤드폰 연결끊기 + Déconnecter les écouteurs + Disconnetti Auricolari + 断开耳机 + 斷開耳機 Headphones Connected @@ -67,6 +87,10 @@ Słuchawki podpięte Kopfhörer verbunden 헤드폰 연결됨 + Écouteurs connectés + Auricolari Connessi + 已连接耳机 + 已連接耳機 Headphones Disconnected @@ -76,6 +100,10 @@ Słuchawki odpięte Kopfhörer getrennt 헤드폰 연결끊김 + Écouteurs déconnectés + Auricolari Disconnessi + 已断开耳机 + 已斷開耳機 diff --git a/addons/missileguidance/CfgAmmo.hpp b/addons/missileguidance/CfgAmmo.hpp index e507de4910..7c2fb90d22 100644 --- a/addons/missileguidance/CfgAmmo.hpp +++ b/addons/missileguidance/CfgAmmo.hpp @@ -45,26 +45,6 @@ class CfgAmmo { }; }; - class ACE_Hellfire_AGM114K: ACE_Hydra70_DAGR { - displayName = CSTRING(Hellfire_AGM114K); - displayNameShort = CSTRING(Hellfire_AGM114K_Short); - - description = CSTRING(Hellfire_AGM114K_desc); - descriptionShort = CSTRING(Hellfire_AGM114K_desc); - - // @TODO: placeholder model to at least make it look different - model = "\A3\Weapons_F\Ammo\Missile_AT_03_fly_F"; - proxyShape = "\A3\Weapons_F\Ammo\Missile_AT_03_F"; - - hit = 1400; - indirectHit = 71; - indirectHitRange = 4.5; - effectsMissile = "missile2"; - - //Explicity add guidance config - class ADDON: ADDON {}; - }; - // Titan class M_Titan_AT: MissileBase {}; diff --git a/addons/missileguidance/CfgMagazines.hpp b/addons/missileguidance/CfgMagazines.hpp index e4a84862ae..7cc33b17a3 100644 --- a/addons/missileguidance/CfgMagazines.hpp +++ b/addons/missileguidance/CfgMagazines.hpp @@ -24,30 +24,4 @@ class CfgMagazines { descriptionShort = "24 Round DAGR"; weight = 72; }; - - // Hellfires - class 6Rnd_ACE_Hellfire_AGM114K : 12Rnd_PG_missiles { - count = 12; - ammo = "ACE_Hellfire_AGM114K"; - displayName = "6Rnd_ACE_Hellfire_AGM114K"; - displayNameShort = "6Rnd_ACE_Hellfire_AGM114K"; - descriptionShort = "6Rnd_ACE_Hellfire_AGM114K"; - weight = 36; - - }; - class 12Rnd_ACE_Hellfire_AGM114K : 6Rnd_ACE_Hydra70_DAGR { - count = 12; - displayName = "12Rnd_ACE_Hellfire_AGM114K"; - displayNameShort = "12Rnd_ACE_Hellfire_AGM114K"; - descriptionShort = "12Rnd_ACE_Hellfire_AGM114K"; - weight = 72; - }; - class 24Rnd_ACE_Hellfire_AGM114K : 6Rnd_ACE_Hydra70_DAGR { - count = 24; - displayName = "24Rnd_ACE_Hellfire_AGM114K"; - displayNameShort = "24Rnd_ACE_Hellfire_AGM114K"; - descriptionShort = "24Rnd_ACE_Hellfire_AGM114K"; - weight = 72; - }; - }; diff --git a/addons/missileguidance/CfgVehicles.hpp b/addons/missileguidance/CfgVehicles.hpp deleted file mode 100644 index 6aae81b316..0000000000 --- a/addons/missileguidance/CfgVehicles.hpp +++ /dev/null @@ -1,32 +0,0 @@ -class CfgVehicles { - class Air; - class Helicopter: Air { - class Turrets; - }; - class Helicopter_Base_F: Helicopter { - class Turrets: Turrets { - class MainTurret; - }; - }; - class Heli_Attack_01_base_F: Helicopter_Base_F { - class Turrets: Turrets { - class MainTurret: MainTurret {}; - }; - }; - class B_Heli_Attack_01_F: Heli_Attack_01_base_F {}; - class ACE_Comanche_Test : B_Heli_Attack_01_F { // Comanche testbed (Hidden: Scope=1) - scope = 1; - scopeCurator = 0; - displayName = "ACE_Comanche_Test"; - author = "ACE Team"; - class Library { - libTextDesc = "ACE_Comanche_Test"; - }; - class Turrets: Turrets { - class MainTurret: MainTurret { - weapons[] = {"gatling_20mm", "ace_missileguidance_dagr", "Laserdesignator_mounted"}; - magazines[] = {"ACE_500Rnd_20mm_shells_Comanche", "6Rnd_ACE_Hydra70_DAGR", "Laserbatteries"}; - }; - }; - }; -}; diff --git a/addons/missileguidance/XEH_PREP.hpp b/addons/missileguidance/XEH_PREP.hpp index 8d13e2b499..ee2b7328cb 100644 --- a/addons/missileguidance/XEH_PREP.hpp +++ b/addons/missileguidance/XEH_PREP.hpp @@ -1,3 +1,5 @@ +LOG("prep"); +PREP(cycleAttackProfileKeyDown); PREP(changeMissileDirection); diff --git a/addons/missileguidance/XEH_post_init.sqf b/addons/missileguidance/XEH_post_init.sqf index 282aac5503..cc09b1f0ac 100644 --- a/addons/missileguidance/XEH_post_init.sqf +++ b/addons/missileguidance/XEH_post_init.sqf @@ -1,3 +1,13 @@ #include "script_component.hpp" [QGVAR(handoff), {_this call FUNC(handleHandoff)}] call CBA_fnc_addEventHandler; + +["ACE3 Weapons", QGVAR(cycleFireMode), localize LSTRING(CycleFireMode), +{ + [] call FUNC(cycleAttackProfileKeyDown); + false +}, +{ + false +}, +[15, [false, true, false]], false] call CBA_fnc_addKeybind; //Ctrl+Tab Key diff --git a/addons/missileguidance/config.cpp b/addons/missileguidance/config.cpp index c97a542a7f..ce75e277b4 100644 --- a/addons/missileguidance/config.cpp +++ b/addons/missileguidance/config.cpp @@ -20,4 +20,3 @@ class CfgPatches { #include "CfgAmmo.hpp" #include "CfgMagazines.hpp" #include "CfgWeapons.hpp" -#include "CfgVehicles.hpp" diff --git a/addons/missileguidance/functions/fnc_cycleAttackProfileKeyDown.sqf b/addons/missileguidance/functions/fnc_cycleAttackProfileKeyDown.sqf new file mode 100644 index 0000000000..a878924ed5 --- /dev/null +++ b/addons/missileguidance/functions/fnc_cycleAttackProfileKeyDown.sqf @@ -0,0 +1,69 @@ +/* + * Author: PabstMirror + * Cycles fire mode for any missileGuidance enabled ammo that has multiple attack profiles + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_missileguidance_fnc_cycleAttackProfileKeyDown + * + * Public: No + */ + +// #define DEBUG_MODE_FULL +#include "script_component.hpp" + +TRACE_1("cycle fire mode",_this); + +if (!alive ACE_player) exitWith {}; +if (!([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith))) exitWith {}; + + +private ["_currentShooter", "_currentMagazine"]; +if (((vehicle ACE_player) == ACE_player) || {ACE_player call CBA_fnc_canUseWeapon}) then { + _currentShooter = ACE_player; + _currentMagazine = currentMagazine ACE_player; +} else { + _currentShooter = vehicle ACE_player; + private _turretPath = if (ACE_player == (driver _currentShooter)) then {[-1]} else {ACE_player call CBA_fnc_turretPath}; + _currentMagazine = _currentShooter currentMagazineTurret _turretPath; +}; +if (_currentMagazine == "") exitWith {TRACE_1("no magazine",_currentMagazine)}; + +private _ammo = getText (configFile >> "CfgMagazines" >> _currentMagazine >> "ammo"); + +TRACE_3("",_currentShooter,_currentMagazine,_ammo); + +// Bail if guidance is disabled for this ammo +if ((getNumber (configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON) >> "enabled")) != 1) exitWith {TRACE_1("not enabled",_ammo)}; + +// Verify ammo has explicity added guidance config (ignore inheritances) +private _configs = configProperties [(configFile >> "CfgAmmo" >> _ammo), QUOTE(configName _x == QUOTE(QUOTE(ADDON))), false]; +if ((count _configs) < 1) exitWith {TRACE_2("not explicity enabled",_ammo,_configs)}; + +private _attackProfiles = getArray (configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON) >> "attackProfiles"); +if ((count _attackProfiles) <= 1) exitWith {TRACE_1("no choices for attack profile",_attackProfiles)}; + +private _currentFireMode = _currentShooter getVariable [QGVAR(attackProfile), "#undefined"]; + +// Just like onFired, this is case sensitive! +private _index = _attackProfiles find _currentFireMode; +if (_index == -1) then { + _index = _attackProfiles find (getText (configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON) >> "defaultAttackProfile")); +}; +_index = (_index + 1) % (count _attackProfiles); +private _nextFireMode = _attackProfiles select _index; +TRACE_4("",_currentFireMode,_nextFireMode,_index,_attackProfiles); + +_currentShooter setVariable [QGVAR(attackProfile), _nextFireMode, false]; + +playSound "ACE_Sound_Click"; + +if ((getNumber (configFile >> "CfgAmmo" >> _ammo >> QUOTE(ADDON) >> "showHintOnCycle")) == 1) then { + private _localizedName = getText (configFile >> QGVAR(AttackProfiles) >> _nextFireMode >> "name"); + [_localizedName] call EFUNC(common,displayTextStructured); +}; diff --git a/addons/missileguidance/functions/fnc_doHandoff.sqf b/addons/missileguidance/functions/fnc_doHandoff.sqf index db722713e1..2145b4e585 100644 --- a/addons/missileguidance/functions/fnc_doHandoff.sqf +++ b/addons/missileguidance/functions/fnc_doHandoff.sqf @@ -1,4 +1,20 @@ -// Not currently used +/* + * Author: ACE + * Not currently used + * + * Arguments: + * 0: Target + * 1: Args + * + * Return Value: + * None + * + * Example: + * [target, [args]] call ace_missileguidance_fnc_doHandoff + * + * Public: No + */ + #include "script_component.hpp" PARAMS_2(_target,_args); diff --git a/addons/missileguidance/functions/fnc_guidancePFH.sqf b/addons/missileguidance/functions/fnc_guidancePFH.sqf index 45db7c536b..5ecb9c6dfe 100644 --- a/addons/missileguidance/functions/fnc_guidancePFH.sqf +++ b/addons/missileguidance/functions/fnc_guidancePFH.sqf @@ -7,7 +7,7 @@ * 1: PFID * * Return Value: - * Nothing + * None * * Example: * [[], 0] call ace_missileguidance_fnc_guidancePFH; @@ -54,7 +54,7 @@ private _seekerTargetPos = [[0,0,0], _args, _seekerStateParams, _lastKnownPosSta // Run attack profile function: private _profileAdjustedTargetPos = [_seekerTargetPos, _args, _attackProfileStateParams] call FUNC(doAttackProfile); - + // If we have no seeker target, then do not change anything if (!(_profileAdjustedTargetPos isEqualTo [0,0,0])) then { @@ -111,4 +111,4 @@ _PS setDropInterval 3.0; _stateParams set [0, diag_tickTime]; END_COUNTER(guidancePFH); - + diff --git a/addons/missileguidance/functions/fnc_handleHandoff.sqf b/addons/missileguidance/functions/fnc_handleHandoff.sqf index 25c01694eb..63af6d6901 100644 --- a/addons/missileguidance/functions/fnc_handleHandoff.sqf +++ b/addons/missileguidance/functions/fnc_handleHandoff.sqf @@ -1,4 +1,20 @@ -// Not currently used +/* + * Author: ACE-Team + * Not currently used + * + * Arguments: + * 0: TARGET + * 1: ARGS + * + * Return Value: + * Boolean + * + * Example: + * [bob, kevin] call ACE_missileguidance_fnc_handleHandoff + * + * Public: No + */ + #include "script_component.hpp" PARAMS_2(_target,_args); diff --git a/addons/missileguidance/functions/fnc_onFired.sqf b/addons/missileguidance/functions/fnc_onFired.sqf index 224cfb14ec..bf256cbba0 100644 --- a/addons/missileguidance/functions/fnc_onFired.sqf +++ b/addons/missileguidance/functions/fnc_onFired.sqf @@ -8,7 +8,7 @@ * 6: Projectile * * Return Value: - * Nothing + * None * * Example: * [player, "", "", "", "ACE_Javelin_FGM148", "", theMissile] call ace_missileguidance_fnc_onFired; @@ -115,6 +115,15 @@ private _args = [_this, [ diag_tickTime, [], [], _lastKnownPosState] ]; + +// Run the "onFired" function passing the full guidance args array +private _onFiredFunc = getText (_config >> "onFired"); +TRACE_1("",_onFiredFunc); +if (_onFiredFunc != "") then { + _args call (missionNamespace getVariable _onFiredFunc); +}; + + // Reverse: // _args params ["_firedEH", "_launchParams", "_flightParams", "_seekerParams", "_stateParams"]; // _firedEH params ["_shooter","","","","_ammo","","_projectile"]; diff --git a/addons/missileguidance/stringtable.xml b/addons/missileguidance/stringtable.xml index f1177ef36f..72de552422 100644 --- a/addons/missileguidance/stringtable.xml +++ b/addons/missileguidance/stringtable.xml @@ -14,6 +14,8 @@ Продвинутое наведение ракет 高度なミサイルの誘導 고급 미사일 유도 + 进阶飞弹制导 + 進階飛彈制導 Advanced missile guidance, or AMG, provides multiple enhancements to missile locking and firing. It is also a framework required for missile weapon types. @@ -28,6 +30,8 @@ Pokočilé navádění raket (AMG) poskytuje několik vylepšení pro lepší zaměření a následnou střelbu. Je to prvek vyžadovaný u typu zbraní jako jsou rakety. 高度なミサイルの誘導、または AMG はミサイルの捕捉と発射に複数の強化をあたえます。これはミサイルの種類によって、枠組みを必要とします。 고급 미사일 유도 혹은 AMG 는 표적 획득 및 발사를 위한 여러 기능을 제공합니다. 미사일 종류에따라 체계가 필요합니다. + 进阶飞弹制导增强了多种导弹锁定和射击的能力. 此系统适用于所有飞弹类型的武器. + 進階飛彈制導增強了多種導彈鎖定和射擊的能力. 此系統適用於所有飛彈類型的武器. Hydra-70 DAGR Missile @@ -42,6 +46,8 @@ Hydra-70 DAGR Hydra-70 DAGR ミサイル Hydra-70 DAGR 미사일 + 九头蛇-70 直接攻击导引飞弹 + 九頭蛇-70 直接攻擊導引飛彈 DAGR @@ -56,6 +62,8 @@ DAGR DAGR DAGR + 直接攻击导引飞弹 + 直接攻擊導引飛彈 Hydra-70 DAGR Laser Guided Missile @@ -70,6 +78,8 @@ Управляемая ракета лазерного наведения Hydra-70 DAGR Hydra-70 DAGR レーザ誘導ミサイル Hydra-70 DAGR 레이저 유도 미사일 + 九头蛇-70 直接攻击雷射导引飞弹e + 九頭蛇-70 直接攻擊雷射導引飛彈e Hellfire II AGM-114K Missile @@ -84,6 +94,8 @@ Hellfire II AGM-114K Hellfire II AGM-114K ミサイル Hellfire II AGM-114K 미사일 + 地狱火II型 AGM-114K 导弹 + 地獄火II型 AGM-114K 導彈 AGM-114K @@ -98,6 +110,8 @@ AGM-114K AGM-114K AGM-114K + AGM-114K + AGM-114K Hellfire II AGM-114K Laser Guided Missile @@ -112,6 +126,8 @@ Управляемая ракета лазерного наведения Hellfire II AGM-114K Hellfire II AGM-114K レーザ誘導ミサイル Hellfire II AGM-114K 레이저 유도 미사일 + 地狱火II型 AGM-114K 雷射导引飞弹 + 地獄火II型 AGM-114K 雷射導引飛彈 Off @@ -126,6 +142,8 @@ Spento 無効 끄기 + 关闭 + 關閉 Player Only @@ -140,6 +158,8 @@ Solo Giocatore プレイヤーのみ 오직 플레이어만 + 只有玩家 + 只有玩家 Player and AI @@ -153,6 +173,24 @@ Игрок и боты Giocatore ed IA プレイヤーと AI + 玩家和AI + 玩家和AI + + + Cycle Fire Mode + Wechsle Feuermodus + Переключение режимов огня + Přepínání režimů palby + Przełącz tryb ognia + Cycle mode de tir + Tüzelési mód váltása + Alterna le modalità di fuoco + Cambiar modo de disparo + Alterar Modo de Disparo + 発射モード切り替え + 발사 방식 순환 + 循环切换开火模式 + 循環切換開火模式 diff --git a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf index ddd0d4377e..dc6ca4c7b1 100644 --- a/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf +++ b/addons/missionmodules/functions/fnc_moduleAmbianceSound.sqf @@ -8,10 +8,10 @@ * 2: Activated * * Return Value: - * Nothing + * None * * Example: - * N/A + * [LOGIC, [bob, kevin], true] call ace_missionmodules_fnc_moduleAmbianceSound * * Public: No */ @@ -88,9 +88,9 @@ if (_activated && local _logic) then { private _newPosASL = if (_followPlayers) then { // Select a target unit at random. private _targetUnit = selectRandom _allUnits; - AGLtoASL (_targetUnit getPos [random 360, _minimalDistance + random (_maximalDistance - _minimalDistance)]); + AGLtoASL (_targetUnit getPos [_minimalDistance + random (_maximalDistance - _minimalDistance), random 360]); } else { - AGLtoASL (_logic getPos [random 360, _minimalDistance + random (_maximalDistance - _minimalDistance)]); + AGLtoASL (_logic getPos [_minimalDistance + random (_maximalDistance - _minimalDistance), random 360]); }; TRACE_1("",_newPosASL); diff --git a/addons/missionmodules/stringtable.xml b/addons/missionmodules/stringtable.xml index 2fe4264a37..f69fbad1ec 100644 --- a/addons/missionmodules/stringtable.xml +++ b/addons/missionmodules/stringtable.xml @@ -14,6 +14,8 @@ Moduli Missione ACE ACE ミッション モジュール ACE 미션 모듈 + ACE 任务模块 + ACE 任務模塊 Ambiance Sounds [ACE] @@ -28,6 +30,8 @@ Souni Ambientali [ACE] 環境音 [ACE] 환경 효과음 [ACE] + 环境声音 [ACE] + 環境聲音 [ACE] Sounds @@ -42,6 +46,8 @@ Suoni 効果音 효과음 + 声音 + 聲音 Class names of the ambiance sounds to be played. Seperated by ',' @@ -55,6 +61,8 @@ Nomi classi dei suoni ambientali da eseguire. Separati da ',' 再生する環境音のクラスネームを記載。','で複数指定できます。 재생되는 환경 효과음의 단위와 이름입니다. ','로 구분됩니다. + 输入想使用的环境声音classname. 每个classname用','做区隔 + 輸入想使用的環境聲音classname. 每個classname用','做區隔 Minimal Distance @@ -69,6 +77,8 @@ Distanza Minimale 最低距離 최소 거리 + 最小距离 + 最小距離 Used for calculating a random position and sets the minimal distance between the players and the played sound file(s) @@ -83,6 +93,8 @@ Usati per calcolare una posizione casuale ed impostare la distanza minima tra i giocatori ed il file suono eseguito 無作為な位置への計算や、プレイヤーと再生されるファイルの間へ最低距離を設定します 무작위 위치 계산에 사용되며 플레이어와 재생 된 사운드 파일 간의 최소 거리를 설정합니다. + 声音将随机产生在玩家附近, 此选项定义该声音最近会距离玩家多少公尺. + 聲音將隨機產生在玩家附近, 此選項定義該聲音最近會距離玩家多少公尺. Maximum Distance @@ -97,6 +109,8 @@ Distanza Massima 最大距離 최대 거리 + 最大距离 + 最大距離 Used for calculating a random position and sets the maximum distance between the players and the played sound file(s) @@ -111,6 +125,8 @@ Usato per calcolare una posizione casuale ed impostare la distanza massima tra giocatori e il file suono eseguito 無作為な位置への計算や、プレイヤーと再生されるファイルの間へ最大距離を設定します 무작위 위치 계산에 사용되며 플레이어와 재생 된 사운드 파일 간의 최대 거리를 설정합니다. + 声音将随机产生在玩家附近, 此选项定义该声音最远会距离玩家多少公尺. + 聲音將隨機產生在玩家附近, 此選項定義該聲音最遠會距離玩家多少公尺. Minimal Delay @@ -125,6 +141,8 @@ Pausa Minima 最低遅延 최소 지연 + 最小延迟 + 最小延遲 Minimal delay between sounds played @@ -139,6 +157,8 @@ Pausa Minima tra suoni eseguiti 再生されるまでの最低遅延 재생된 소리간 최소 지연시간 + 设定每个声音档案中间最少间隔多久再进行播放 + 設定每個聲音檔案中間最少間隔多久再進行播放 Maximum Delay @@ -153,6 +173,8 @@ Pausa Massima 最大遅延 최대 지연 + 最大延迟 + 最大延遲 Maximum delay between sounds played @@ -167,6 +189,8 @@ Pausa Massima tra suoni eseguiti 再生されるまでの最大遅延 재생된 소리간 최대 지연시간 + 设定每个声音档案中间最多间隔多久再进行播放 + 設定每個聲音檔案中間最多間隔多久再進行播放 Follow Players @@ -181,6 +205,8 @@ Segui Giocatori プレイヤーを追随 플레이어 따라가기 + 跟随玩家 + 跟隨玩家 Follow players. If set to false, loop will play sounds only nearby logic position. @@ -195,6 +221,8 @@ Segui Giocatori. Se impostato su falso, il ciclo eseguirà i suoni solo vicino ad una posizione logica. プレイヤーを追随します。False に設定するとロジックの近くで延々と再生します。 플레이어를 따라갑니다. 거짓으로 설정될경우 오직 한 자리에서만 반복해서 소리를 재생합니다. + 设定声音是否会在玩家的附近产生. 假如关闭此功能, 声音只会在模块的位置产生. + 設定聲音是否會在玩家的附近產生. 假如關閉此功能, 聲音只會在模塊的位置產生. Volume @@ -209,6 +237,8 @@ Volume 音量 볼륨 + 音量 + 音量 The volume of the sounds played @@ -223,6 +253,8 @@ Il volume dei suoni eseguiti 再生される音の大きさ 재생되는 소리의 볼륨 + 调整声音的音量 + 調整聲音的音量 Ambiance sounds loop (synced across MP) @@ -237,6 +269,8 @@ Ciclo Suoni Ambientali (sincronizzato in MP) 環境音の繰り返し (MP 間で同期させます) 환경 효과음 반복 (멀티플레이 전반적으로 동기화됨) + 循环的环境声音 (在多人游戏中会同步所有玩家的播放状态) + 循環的環境聲音 (在多人遊戲中會同步所有玩家的播放狀態) diff --git a/addons/mk6mortar/functions/fnc_dev_buildTable.sqf b/addons/mk6mortar/functions/fnc_dev_buildTable.sqf index 84184fcb51..1f648ead4a 100644 --- a/addons/mk6mortar/functions/fnc_dev_buildTable.sqf +++ b/addons/mk6mortar/functions/fnc_dev_buildTable.sqf @@ -7,7 +7,7 @@ * 1: Air Friction * * Return Value: - * + * None * * Example: * [100, -0.0001] spawn ace_mk6mortar_fnc_dev_buildTable; //spawn (scheduled) is slower @@ -84,4 +84,4 @@ _outputString = format ["case ((abs(_muzzleVelocity - %1) < 0.00001) && {(abs(_a copyToClipboard _outputString; rangeTableOutput = _outputString; -hint "done"; \ No newline at end of file +hint "done"; diff --git a/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf b/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf index f89c3a1b8f..3e70e0f917 100644 --- a/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf +++ b/addons/mk6mortar/functions/fnc_dev_formatNumber.sqf @@ -1,19 +1,19 @@ /* -Author: Pabst Mirror - -Description: -Converts numbers into nicely formated strings. - -Parameters: -0: NUMBER - Input number -1: STRING - Output type (see case statement) -2: BOOL - If output type is mil, convert input type from deg->mil - -Returns: -STRING - Formatted number - -Example: -[45, "mil4", true] call ace_mk6mortar_fnc_dev_formatNumber = "0800" + * Author: Pabst Mirror + * Converts numbers into nicely formated strings. + * + * Arguments: + * 0: Input number + * 1: Output type (see case statement) + * 2: If output type is mil, convert input type from deg->mil + * + * Return Value: + * Formatted number + * + * Example: + * [45, "mil4", true] call ace_mk6mortar_fnc_dev_formatNumber = "0800" + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf b/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf index d1e0a8dd05..8a9c6d1a98 100644 --- a/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf +++ b/addons/mk6mortar/functions/fnc_dev_simulateCalcRangeTableLine.sqf @@ -1,19 +1,19 @@ /* -Author: Pabst Mirror - -Description: -Builds a rangeTable line for a certian range, given muzzle velocity and air friction, returns [] if out of range. - -Parameters: -0: NUMBER - Muzzle Velocity -1: NUMBER - Air Friction -2: NUMBER - Range To Hit - -Returns: -ARRAY - Range Table Line Data (see return line) - -Example: -[300, -0.0001, 3000] call ace_mk6mortar_fnc_simulateCalcRangeTableLine + * Author: Pabst Mirror + * Builds a rangeTable line for a certian range, given muzzle velocity and air friction, returns [] if out of range. + * + * Arguments: + * 0: Muzzle Velocity + * 1: Air Friction + * 2: Range To Hit + * + * Return Value: + * Range Table Line Data (see return line) + * + * Example: + * [300, -0.0001, 3000] call ace_mk6mortar_fnc_simulateCalcRangeTableLine + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf b/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf index d302a40f40..29ac0c010a 100644 --- a/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf +++ b/addons/mk6mortar/functions/fnc_dev_simulateFindSolution.sqf @@ -3,14 +3,14 @@ * DEV to find a firing solution for a given range * * Arguments: - * 0: Range to Hit (Meters) - * 1: Height To Hit (Meters) - * 2: Muzzle Velocity (M/S) + * 0: Range to Hit (Meters) + * 1: Height To Hit (Meters) + * 2: Muzzle Velocity (M/S) * 3: Air Friction * 4: Time Step (seconds) (eg 1/50 will simulate 50 cycles per second) * * Return Value: - * ARRAY - [NUMBER - Elevation In Degrees, NUMBER - Shot Durration] + * [NUMBER - Elevation In Degrees, NUMBER - Shot Durration] * * Example: * [_rangeToHit, _heightToHit, _muzzleVelocity, _airFriction, TIME_STEP] call ace_mk6mortar_fnc_dev_simulateFindSolution; diff --git a/addons/mk6mortar/functions/fnc_handleFired.sqf b/addons/mk6mortar/functions/fnc_handleFired.sqf index 483a69d42b..98fa8eebdf 100644 --- a/addons/mk6mortar/functions/fnc_handleFired.sqf +++ b/addons/mk6mortar/functions/fnc_handleFired.sqf @@ -12,7 +12,7 @@ * 6: projectile - Object of the projectile that was shot * * Return Value: - * Nothing + * None * * Example: * [clientFiredBIS-XEH] call ace_mk6mortar_fnc_handleFired diff --git a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf index 3f2a8c1f0d..db56f71691 100644 --- a/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf +++ b/addons/mk6mortar/functions/fnc_handlePlayerVehicleChanged.sqf @@ -7,7 +7,7 @@ * 1: New Vehicle * * Return Value: - * No + * None * * Example: * [bob, mortar] call ace_mk6mortar_fnc_handlePlayerVehicleChanged; diff --git a/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf b/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf index 07e0536d24..0f237e1a37 100644 --- a/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTableOpen.sqf @@ -3,10 +3,10 @@ * Opens the rangetable and fills the charge listbox. * * Arguments: - * No + * None * * Return Value: - * No + * None * * Example: * [] call ace_mk6mortar_fnc_rangeTableOpen diff --git a/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf b/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf index c0cc40ccdc..1090967e5a 100644 --- a/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTablePageChange.sqf @@ -3,10 +3,10 @@ * Called when listbox selection changes. Updates the rangetable with new values. * * Arguments: - * No + * None * * Return Value: - * No + * None * * Example: * [] call ace_mk6mortar_fnc_rangeTablePageChange diff --git a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf index db87cb6000..d035959da4 100644 --- a/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf +++ b/addons/mk6mortar/functions/fnc_rangeTablePreCalculatedValues.sqf @@ -8,7 +8,7 @@ * 1: Air Friction * * Return Value: - * + * Array * * Example: * [200, 0] call ace_mk6mortar_fnc_rangeTablePreCalculatedValues @@ -268,4 +268,4 @@ case ((abs(_muzzleVelocity - 200) < 0.00001) && {(abs(_airFriction - 0) < 0.0000 ERROR("MuzzleVelocity not found in LUT"); [] }; -}; \ No newline at end of file +}; diff --git a/addons/mk6mortar/functions/fnc_toggleMils.sqf b/addons/mk6mortar/functions/fnc_toggleMils.sqf index 5c27bf64e4..075c7c3143 100644 --- a/addons/mk6mortar/functions/fnc_toggleMils.sqf +++ b/addons/mk6mortar/functions/fnc_toggleMils.sqf @@ -7,7 +7,7 @@ * 1: Player * * Return Value: - * No + * None * * Example: * [mortar,bob] call ace_mk6mortar_fnc_toggleMils; diff --git a/addons/mk6mortar/stringtable.xml b/addons/mk6mortar/stringtable.xml index 2b5e220753..58c0af47d6 100644 --- a/addons/mk6mortar/stringtable.xml +++ b/addons/mk6mortar/stringtable.xml @@ -14,6 +14,8 @@ Tavola di tiro 82mm 82mm 射表 82mm 사거리표 + 82mm迫击炮射表 + 82mm迫擊炮射表 Range Table for the Mk6 82mm Mortar @@ -28,6 +30,8 @@ Tavola di tiro per il mortaio calibro 82mm Mk6 Mk6 82mm 迫撃砲の射表 Mk6 82mm 박격포 사격을 위한 사거리표 + MK6 82mm迫击炮射表 + MK6 82mm迫擊炮射表 Open 82mm Rangetable @@ -42,6 +46,8 @@ Apri la tavola di tiro 82mm 82mm 射表を開く 82mm 사거리표 열기 + 开启82mm迫击炮射表 + 開啟82mm迫擊炮射表 Charge @@ -56,6 +62,8 @@ Carica 装薬 장약 + 装药 + 裝藥 Mk6 Settings @@ -70,6 +78,8 @@ Impostazioni Mk6 Mk6 設定 Mk6 설정 + MK6设定 + MK6設定 Air Resistance @@ -84,6 +94,8 @@ Resistenza dell'Aria 空気抵抗 공기저항 + 空气阻力 + 空氣阻力 For Player Shots, Model Air Resistance and Wind Effects @@ -98,6 +110,8 @@ Per Proiettili dei Giocatori, simula la Resistenza dell'Aria e gli Effetti del Vento プレイヤが射撃すると、空気抵抗モデルと風による影響をあたえます。 플레이어 사격시 공기저항과 바람에 영향을 받습니다 + 设定由玩家射击的迫击炮, 将会受到空气阻力与风力的影响 + 設定由玩家射擊的迫擊砲, 將會受到空氣阻力與風力的影響 Allow Mk6 Computer @@ -112,6 +126,8 @@ Consenti Computer Mk6 Mk6 コンピュータを許可 Mk6 탄도계산컴퓨터 허가 + 允许使用MK6射控电脑 + 允許使用MK6射控電腦 Show the Computer and Rangefinder (these NEED to be removed if you enable air resistance) @@ -126,6 +142,8 @@ Mostra il Computer e Distaziometro (questi DEVONO essere rimossi se vuoi abilitare la resistenza dell'aria) コンピュータと距離を表示します (空気抵抗を有効化している場合は必ず削除してください) 탄도계산컴퓨터와 거리측정기를 보여줍니다(공기저항을 활성화했을경우 이 항목은 비활성화 되어야만 합니다) + 显示射控电脑和测距仪 (如果有启用空气阻力功能时, 须停用此项功能) + 顯示射控電腦和測距儀 (如果有啟用空氣阻力功能時, 須停用此項功能) Allow Mk6 Compass @@ -140,6 +158,8 @@ Consenti Bussola Mk6 Mk6 への方位磁石を有効化 Mk6 나침반 허용 + 允许使用MK6指北针 + 允許使用MK6指北針 Show the Mk6 Digital Compass @@ -154,6 +174,8 @@ Mostra la Bussola Digitale Mk6 Mk6 のデジタル方位磁石を表示 Mk6 에서 전자 나침반을 보여줍니다 + 显示MK6的数位指北针 + 顯示MK6的數位指北針 This module allows you to setup Mk6 mortar settings. @@ -167,6 +189,8 @@ Este módulo permite configurar los parámetros del mortero Mk6. Mk6 迫撃砲への設定をできます。 이 모듈은 Mk6 설치 설정을 가능케 합니다. + 这个模块允许你设定MK6迫击炮的相关功能. + 這個模塊允許你設定MK6迫擊砲的相關功能. Use Ammunition handling @@ -179,6 +203,8 @@ Использовать манипуляции с боеприпасами 弾薬の取り扱い 탄약 관리 활성화 + 使用手动弹药装卸 + 使用手動彈藥裝卸 Removes mortar magazines, requiring individual rounds to be loaded by the gunner or loader. Does not affect AI mortars. @@ -191,6 +217,8 @@ Удаляет артиллерийские магазины, требует загрузку отдельных снарядов стрелком или заряжащим. Не влияет на артиллерию ИИ. 迫撃砲から弾薬を除去します。射手か装填手により予め装填されている必要があります。AI 迫撃砲へ影響を与えません。 박격포 탄창을 제거합니다, 사수나 장전수가 개별적으로 탄환을 넣어줘야만 합니다. 인공지능은 영향을 받지 않습니다. + 开启此功能时. 迫击炮的弹药需由炮手与装填手共同合作来进行装填. 此功能并不影响由AI射击的迫击炮. + 開啟此功能時. 迫擊砲的彈藥需由砲手與裝填手共同合作來進行裝填. 此功能並不影響由AI射擊的迫擊砲. Remove Round @@ -204,6 +232,8 @@ Извлечь снаряд 弾薬を除去 탄약 제거 + 卸除弹头 + 卸除彈頭 Load Mortar @@ -217,6 +247,8 @@ Зарядить миномет 弾薬を装填 탄약 장전 + 装载弹头 + 裝載彈頭 Unloading Round @@ -229,6 +261,8 @@ Извлечение снаряда 弾薬を除去しています 탄약 제거중 + 卸除弹头中 + 卸除彈頭中 Preparing Round @@ -242,6 +276,8 @@ Подготовка снаряда 事前に装填 탄약 준비중 + 准备弹头中 + 準備彈頭中 Load HE @@ -255,6 +291,8 @@ Зарядить фугасный りゅう弾を装填 고폭탄 장전 + 装载高爆弹 + 裝載高爆彈 Load Smoke @@ -268,6 +306,8 @@ Зарядить дымовой 煙幕弾を装填 연막탄 장전 + 装载烟雾弹 + 裝載煙霧彈 Load Illumination @@ -281,6 +321,8 @@ Зарядить осветительный 照明弾を装填 조명탄 장전 + 装载照明弹 + 裝載照明彈 Load Guided HE @@ -294,6 +336,8 @@ Зарядить фугасный управляемый 誘導りゅう弾を装填 유도 고폭탄 장전 + 装载导引高爆弹 + 裝載導引高爆彈 Load Laser Guided HE @@ -307,6 +351,8 @@ Зарядить фугасный управляемый по ЛЦУ レーザ誘導りゅう弾を装填 레이저 유도 고폭탄 장전 + 装载雷射导引高爆弹 + 裝載雷射導引高爆彈 82mm HE Round @@ -320,6 +366,8 @@ Фугасный снаряд 82мм 82mm りゅう弾 82mm 고폭탄 + 82mm高爆弹 + 82mm高爆彈 82mm Smoke Round @@ -333,6 +381,8 @@ Дымовой снаряд 82мм 82mm 煙幕弾 82mm 연막탄 + 82mm烟雾弹 + 82mm煙霧彈 82mm Illumination Round @@ -346,6 +396,8 @@ Осветительный снаряд 82мм 82mm 照明弾 82mm 조명탄 + 82mm照明弹 + 82mm照明彈 82mm Guided HE Round @@ -359,6 +411,8 @@ Фугасный снаряд управляемый 82мм 82mm 誘導りゅう弾 82mm 유도 고폭탄 + 82mm导引高爆弹 + 82mm導引高爆彈 82mm Laser Guided HE Round @@ -372,6 +426,8 @@ Фугасный снаряд управляемый по ЛЦУ 82мм 82mm レーザ誘導りゅう弾 82mm 레이저 유도 고폭탄 + 82mm雷射导引高爆弹 + 82mm雷射導引高爆彈 Used in Mk6 mortar @@ -385,6 +441,8 @@ Использовался в миномете Mk6 Mk6 mortar で使います Mk6 박격포에 사용됨 + 用于Mk6迫击炮 + 用於Mk6迫擊砲 [ACE] 82mm HE Rounds Box @@ -398,6 +456,8 @@ [ACE] Ящик фугасных снарядов 82мм [ACE] 82mm りゅう弾入り弾薬箱 [ACE] 82mm 고폭탄 상자 + [ACE] 82mm高爆弹药箱 + [ACE] 82mm高爆彈藥箱 [ACE] 82mm Smoke Rounds Box @@ -411,6 +471,8 @@ [ACE] Ящик дымовых снарядов 82мм [ACE] 82mm 煙幕弾入り弾薬箱 [ACE] 82mm 연막탄 상자 + [ACE] 82mm烟雾弹药箱 + [ACE] 82mm煙霧彈藥箱 [ACE] 82mm Illumination Rounds Box @@ -424,6 +486,8 @@ [ACE] Ящик осветительных снарядов 82мм [ACE] 82mm 照明弾入り弾薬箱 [ACE] 82mm 조명탄 상자 + [ACE] 82mm照明弹药箱 + [ACE] 82mm照明彈藥箱 [ACE] 82mm Default Loadout Box @@ -437,6 +501,8 @@ [ACE] Ящик снарядов 82мм (стандартный) [ACE] 82mm 梱包箱 [ACE] 82mm 기본 장비 상자 + [ACE] 82mm预设弹药箱 + [ACE] 82mm預設彈藥箱 diff --git a/addons/modules/config.cpp b/addons/modules/config.cpp index 662b1cb349..6475b90cf4 100644 --- a/addons/modules/config.cpp +++ b/addons/modules/config.cpp @@ -14,6 +14,7 @@ class CfgPatches { }; }; +class CBA_Extended_EventHandlers; class CfgVehicles { class Logic; class Module_F: Logic { @@ -23,6 +24,7 @@ class CfgVehicles { class ACE_Module: Module_F { class EventHandlers { init = QUOTE(_this call DFUNC(moduleInit)); + class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; }; }; }; diff --git a/addons/modules/functions/fnc_moduleInit.sqf b/addons/modules/functions/fnc_moduleInit.sqf index 5d42b4fa87..e4ab737db3 100644 --- a/addons/modules/functions/fnc_moduleInit.sqf +++ b/addons/modules/functions/fnc_moduleInit.sqf @@ -7,7 +7,10 @@ * * * Return Value: - * nil + * None + * + * Example: + * [LOGIC] call ace_modules_fnc_moduleInit * * Public: No */ diff --git a/addons/movement/functions/fnc_addLoadToUnitContainer.sqf b/addons/movement/functions/fnc_addLoadToUnitContainer.sqf index a79b2ab917..fa788c92a2 100644 --- a/addons/movement/functions/fnc_addLoadToUnitContainer.sqf +++ b/addons/movement/functions/fnc_addLoadToUnitContainer.sqf @@ -10,6 +10,9 @@ * Return Value: * Success? * + * Example: + * [bob, box, 5] call ace_movement_fnc_addLoadToUnitContainer + * * Public: No */ #include "script_component.hpp" diff --git a/addons/movement/functions/fnc_climb.sqf b/addons/movement/functions/fnc_climb.sqf index 57df4e5991..1f2ecf72f4 100644 --- a/addons/movement/functions/fnc_climb.sqf +++ b/addons/movement/functions/fnc_climb.sqf @@ -6,7 +6,7 @@ * 0: The Unit (usually the player) * * Return Value: - * Nothing + * None * * Example: * [player] call ace_movement_fnc_climb diff --git a/addons/movement/functions/fnc_handleClimb.sqf b/addons/movement/functions/fnc_handleClimb.sqf index e6d8fed12c..ed3ff93d7e 100644 --- a/addons/movement/functions/fnc_handleClimb.sqf +++ b/addons/movement/functions/fnc_handleClimb.sqf @@ -7,7 +7,7 @@ * 1: The finisehd animation * * Return Value: - * Nothing + * None * * Example: * [player, "ACE_climb"] call ace_movement_fnc_handleClimb diff --git a/addons/movement/functions/fnc_handleVirtualMass.sqf b/addons/movement/functions/fnc_handleVirtualMass.sqf index 8e33197089..814a0eeecb 100644 --- a/addons/movement/functions/fnc_handleVirtualMass.sqf +++ b/addons/movement/functions/fnc_handleVirtualMass.sqf @@ -6,7 +6,10 @@ * 0: The Unit (usually the player) * * Return Value: - * Nothing + * None + * + * Example: + * [bob] call ace_movement_fnc_handleVirtualMass * * Public: No */ @@ -28,6 +31,8 @@ private _virtualLoad = 0; backpackContainer _unit ]; +_unit setVariable [QGVAR(totalLoad), (loadAbs _unit + _virtualLoad)]; + // get absolute vanilla load private _absLoad = getNumber (configFile >> "CfgInventoryGlobalVariable" >> "maxSoldierLoad"); diff --git a/addons/movement/stringtable.xml b/addons/movement/stringtable.xml index a160b498c1..5bba66974a 100644 --- a/addons/movement/stringtable.xml +++ b/addons/movement/stringtable.xml @@ -14,12 +14,14 @@ Показывать вес в фунтах ポンドで重量を表示する 무게를 파운드(lb)로 보여줍니다 + 使用磅来显示重量 + 使用磅來顯示重量 Weight: Gewicht: Peso: - Poids: + Poids : Waga: Váha: Peso: @@ -28,6 +30,8 @@ Вес: 重量: 무게: + 重量: + 重量: Climb @@ -42,6 +46,8 @@ Subir 登る 오르기 + 攀爬 + 攀爬 Can't climb here @@ -55,6 +61,8 @@ Non puoi arrampicarti qui Não se pode subir aqui ここは登れない + 这里无法攀爬 + 這裡無法攀爬 diff --git a/addons/mx2a/CfgVehicles.hpp b/addons/mx2a/CfgVehicles.hpp index c450133ba7..51038b9625 100644 --- a/addons/mx2a/CfgVehicles.hpp +++ b/addons/mx2a/CfgVehicles.hpp @@ -6,15 +6,15 @@ class CfgVehicles { scopeCurator = 2; displayName = CSTRING(DisplayName); vehicleClass = "Items"; - class TransportWeapons { - MACRO_ADDWEAPON(ACE_MX2A,1); + class TransportItems { + MACRO_ADDITEM(ACE_MX2A,1); }; }; class Box_NATO_Support_F; class ACE_Box_Misc: Box_NATO_Support_F { - class TransportWeapons { - MACRO_ADDWEAPON(ACE_MX2A,6); + class TransportItems { + MACRO_ADDITEM(ACE_MX2A,6); }; }; }; diff --git a/addons/mx2a/stringtable.xml b/addons/mx2a/stringtable.xml index cc2b8beb85..3239aef1ed 100644 --- a/addons/mx2a/stringtable.xml +++ b/addons/mx2a/stringtable.xml @@ -14,6 +14,8 @@ MX-2A MX-2A MX-2A + MX-2A + MX-2A Thermal imaging device @@ -28,6 +30,8 @@ Dispositivo di visione termica サーマル画像表示双眼鏡 열영상 장치 + 热成像装置 + 熱成像裝置 diff --git a/addons/nametags/XEH_PREP.hpp b/addons/nametags/XEH_PREP.hpp index 5d99258d27..a27102a4e5 100644 --- a/addons/nametags/XEH_PREP.hpp +++ b/addons/nametags/XEH_PREP.hpp @@ -2,6 +2,7 @@ PREP(canShow); PREP(doShow); PREP(drawNameTagIcon); +PREP(getCachedFlags); PREP(getVehicleData); PREP(initIsSpeaking); PREP(moduleNameTags); diff --git a/addons/nametags/XEH_postInit.sqf b/addons/nametags/XEH_postInit.sqf index 594fe595ff..2df7565cd6 100644 --- a/addons/nametags/XEH_postInit.sqf +++ b/addons/nametags/XEH_postInit.sqf @@ -15,7 +15,7 @@ GVAR(showNamesTime) = -10; // Statement GVAR(showNamesTime) = CBA_missionTime; - if (call FUNC(canShow)) then{ call FUNC(doShow); }; + // if (call FUNC(canShow)) then{ call FUNC(doShow); }; // This code doesn't work (canShow has a nil / has never worked??) // Return false so it doesn't block other actions false }, @@ -34,6 +34,13 @@ GVAR(showNamesTime) = -10; if (_name == QGVAR(showPlayerNames)) then { call FUNC(updateSettings); }; + // Reset nametag flag cache on setting change: + ACE_player setVariable [QGVAR(flagsCache), nil]; +}] call CBA_fnc_addEventHandler; + +["cba_events_visionModeEvent", { + // Reset nametag flag cache on vision mode change: + ACE_player setVariable [QGVAR(flagsCache), nil]; }] call CBA_fnc_addEventHandler; // civilians don't use military ranks diff --git a/addons/nametags/functions/fnc_doShow.sqf b/addons/nametags/functions/fnc_doShow.sqf index 1f689704b9..c21d587c0b 100644 --- a/addons/nametags/functions/fnc_doShow.sqf +++ b/addons/nametags/functions/fnc_doShow.sqf @@ -14,7 +14,7 @@ * Public: No */ #include "script_component.hpp" -#include "common.hpp"; +#include "common.hpp" private ["_roleImages", "_player", "_vehicle", "_type", "_config", "_text", "_data", "_isAir", "_turretUnits", "_turretRoles", "_index", "_roleType", "_unit", "_toShow"]; diff --git a/addons/nametags/functions/fnc_getCachedFlags.sqf b/addons/nametags/functions/fnc_getCachedFlags.sqf new file mode 100644 index 0000000000..6e1223c8be --- /dev/null +++ b/addons/nametags/functions/fnc_getCachedFlags.sqf @@ -0,0 +1,56 @@ +/* + * Author: + * Get's flags used for onDraw3D that can be cached + * + * Arguments: + * None + * + * Return Value: + * [_drawName,_drawRank,_enabledTagsNearby,_enabledTagsCursor,_maxDistance] + * + * Example: + * call ace_nametags_fnc_getCachedFlags + * + * Public: No + */ +#include "script_component.hpp" + +// Determine flags from current settings +private _drawName = true; +private _enabledTagsNearby = false; +private _enabledTagsCursor = false; + +switch (GVAR(showPlayerNames)) do { + case 0: { + // Player names Disabled [Note: this should be unreachable as the drawEH will be removed] + _drawName = false; + _enabledTagsNearby = (GVAR(showSoundWaves) == 2); + }; + case 1: { + // Player names Enabled + _enabledTagsNearby = true; + }; + case 2: { + // Player names Only cursor + _enabledTagsNearby = (GVAR(showSoundWaves) == 2); + _enabledTagsCursor = true; + }; + case 3: { + // Player names Only Keypress + _enabledTagsNearby = GVAR(showSoundWaves) == 2; // non-cached: || _onKeyPressAlphaMax) > 0 + }; + case 4: { + // Player names Only Cursor and Keypress + _enabledTagsNearby = (GVAR(showSoundWaves) == 2); + // non-cached: _enabledTagsCursor = _onKeyPressAlphaMax > 0; + }; + case 5: { + // Fade on border + _enabledTagsNearby = true; + }; +}; + +private _ambientBrightness = ((([] call EFUNC(common,ambientBrightness)) + ([0, 0.4] select ((currentVisionMode ace_player) != 0))) min 1) max 0; +private _maxDistance = _ambientBrightness * GVAR(PlayerNamesViewDistance); + +[_drawName, GVAR(showPlayerRanks),_enabledTagsNearby,_enabledTagsCursor,_maxDistance] diff --git a/addons/nametags/functions/fnc_getVehicleData.sqf b/addons/nametags/functions/fnc_getVehicleData.sqf index 1c916f81aa..59f5284faf 100644 --- a/addons/nametags/functions/fnc_getVehicleData.sqf +++ b/addons/nametags/functions/fnc_getVehicleData.sqf @@ -18,7 +18,7 @@ * Public: No */ #include "script_component.hpp" -#include "common.hpp"; +#include "common.hpp" params ["_type"]; diff --git a/addons/nametags/functions/fnc_moduleNameTags.sqf b/addons/nametags/functions/fnc_moduleNameTags.sqf index ca513d0c1f..e1fa1a5dc7 100644 --- a/addons/nametags/functions/fnc_moduleNameTags.sqf +++ b/addons/nametags/functions/fnc_moduleNameTags.sqf @@ -7,6 +7,11 @@ * * Return Value: * None + * + * Example: + * [] call ace_nametags_fnc_moduleNameTags + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/nametags/functions/fnc_onDraw3d.sqf b/addons/nametags/functions/fnc_onDraw3d.sqf index dc4b130a52..f937b230b3 100644 --- a/addons/nametags/functions/fnc_onDraw3d.sqf +++ b/addons/nametags/functions/fnc_onDraw3d.sqf @@ -15,67 +15,33 @@ */ #include "script_component.hpp" -private ["_defaultIcon", "_distance", "_alpha", "_icon", "_targets", "_relPos", "_projDist", "_target"]; - BEGIN_COUNTER(GVAR(onDraw3d)); // Don't show nametags in spectator or if RscDisplayMPInterrupt is open if ((isNull ACE_player) || {!alive ACE_player} || {!isNull (findDisplay 49)}) exitWith {}; -// Determine flags from current settings -private _drawName = true; -private _drawRank = GVAR(showPlayerRanks); -private _enabledTagsNearby = false; -private _enabledTagsCursor = false; -private _onKeyPressAlphaMax = 1; -switch (GVAR(showPlayerNames)) do { - case 0: { - // Player names Disabled - _drawName = false; - _enabledTagsNearby = (GVAR(showSoundWaves) == 2); - _enabledTagsCursor = false; - }; - case 1: { - // Player names Enabled - _enabledTagsNearby = true; - _enabledTagsCursor = false; - }; - case 2: { - // Player names Only cursor - _enabledTagsNearby = (GVAR(showSoundWaves) == 2); - _enabledTagsCursor = true; - }; - case 3: { - // Player names Only Keypress - _onKeyPressAlphaMax = 2 + (GVAR(showNamesTime) - CBA_missionTime); - _enabledTagsNearby = (_onKeyPressAlphaMax) > 0 || (GVAR(showSoundWaves) == 2); - _enabledTagsCursor = false; - }; - case 4: { - // Player names Only Cursor and Keypress - _onKeyPressAlphaMax = 2 + (GVAR(showNamesTime) - CBA_missionTime); - _enabledTagsNearby = (GVAR(showSoundWaves) == 2); - _enabledTagsCursor = _onKeyPressAlphaMax > 0; - }; - case 5: { - // Fade on border - _enabledTagsNearby = true; - _enabledTagsCursor = false; - }; -}; +private _flags = [[], DFUNC(getCachedFlags), ACE_player, QGVAR(flagsCache), 2] call EFUNC(common,cachedCall); -private _ambientBrightness = ((([] call EFUNC(common,ambientBrightness)) + ([0, 0.4] select ((currentVisionMode ace_player) != 0))) min 1) max 0; -private _maxDistance = _ambientBrightness * GVAR(PlayerNamesViewDistance); +_flags params ["_drawName", "_drawRank", "_enabledTagsNearby", "_enabledTagsCursor", "_maxDistance"]; + +private _onKeyPressAlphaMax = 1; +if (GVAR(showPlayerNames) == 3) then { + _onKeyPressAlphaMax = 2 + (GVAR(showNamesTime) - CBA_missionTime); + _enabledTagsNearby = _enabledTagsNearby || {_onKeyPressAlphaMax > 0} +}; +if (GVAR(showPlayerNames) == 4) then { + _onKeyPressAlphaMax = 2 + (GVAR(showNamesTime) - CBA_missionTime); + _enabledTagsCursor = _onKeyPressAlphaMax > 0; +}; private _camPosAGL = positionCameraToWorld [0, 0, 0]; if !((_camPosAGL select 0) isEqualType 0) exitWith {}; // handle RHS / bugged vehicle slots private _camPosASL = AGLtoASL _camPosAGL; -private _vecy = (AGLtoASL positionCameraToWorld [0, 0, 1]) vectorDiff _camPosASL; // Show nametag for the unit behind the cursor or its commander if (_enabledTagsCursor) then { - _target = cursorTarget; + private _target = cursorTarget; if !(_target isKindOf "CAManBase") then { // When cursorTarget is on a vehicle show the nametag for the commander. if !(_target in allUnitsUAV) then { @@ -92,7 +58,7 @@ if (_enabledTagsCursor) then { {lineIntersectsSurfaces [_camPosASL, eyePos _target, ACE_player, _target] isEqualTo []} && {!isObjectHidden _target}) then { - _distance = ACE_player distance _target; + private _distance = ACE_player distance _target; private _drawSoundwave = (GVAR(showSoundWaves) > 0) && {[_target] call FUNC(isSpeaking)}; // Alpha: @@ -137,6 +103,9 @@ if (_enabledTagsNearby) then { private _target = _x; if !(isNull _target) then { + private _drawSoundwave = (GVAR(showSoundWaves) > 0) && {[_target] call FUNC(isSpeaking)}; + if (_enabledTagsCursor && {!_drawSoundwave}) exitWith {}; // (Cursor Only && showSoundWaves==2) - quick exit + private _relPos = (visiblePositionASL _target) vectorDiff _camPosASL; private _distance = vectorMagnitude _relPos; @@ -152,7 +121,6 @@ if (_enabledTagsNearby) then { }; }; - private _drawSoundwave = (GVAR(showSoundWaves) > 0) && {[_target] call FUNC(isSpeaking)}; private _alphaMax = _onKeyPressAlphaMax; if ((GVAR(showSoundWaves) == 2) && _drawSoundwave) then { _drawName = _drawSoundwave; diff --git a/addons/nametags/stringtable.xml b/addons/nametags/stringtable.xml index 68b3cec90b..fde54a8607 100644 --- a/addons/nametags/stringtable.xml +++ b/addons/nametags/stringtable.xml @@ -14,6 +14,8 @@ Mostrar nomes 名前の表示 이름 표시 + 显示名称 + 顯示名稱 Show player names @@ -28,6 +30,8 @@ Показывать имена игроков (включить имена) プレイヤ名を表示 플레이어 이름 표시 + 显示玩家名称 + 顯示玩家名稱 Show player name only on cursor (requires player names) @@ -42,6 +46,8 @@ Показать имена игроков только под курсором (при включенных именах) カーソルを合わせた時だけプレイヤ名を表示 (プレイヤ名が必要 커서로 지시할때만 플레이어 이름 표시(플레이어 이름 필요) + 仅在准心指到后显示玩家名称 (玩家必须有设定名称) + 僅在準心指到後顯示玩家名稱 (玩家必須有設定名稱) Show player name only on keypress (requires player names) @@ -56,6 +62,8 @@ Mostrar nomes somente ao pressionar teclar (requer nome de jogadores) キーを押した時だけプレイヤ名を表示 (プレイヤ名が必要) 키를 누를때만 플레이어 이름 표시(플레이어 이름 필요) + 仅在按按键后显示玩家名称 (玩家必须有设定名称) + 僅在按按鍵後顯示玩家名稱 (玩家必須有設定名稱) Show player ranks (requires player names) @@ -70,6 +78,8 @@ Показывать звания игроков (при вкл. именах) プレイヤの階級を表示 (プレイヤ名が必要) 플레이어 계급 표시 (플레이어 이름 필요) + 显示玩家军阶 (玩家必须有设定名称) + 顯示玩家軍階 (玩家必須有設定名稱) Show vehicle crew info @@ -84,6 +94,8 @@ Mostra l'elenco del personale a bordo 車両の乗員を表示 차량 승무원 정보 표시 + 显示载具成员信息 + 顯示載具成員信息 Show name tags for AI units @@ -98,6 +110,8 @@ Mostrar nomes para unidades de IA AI ユニットの名札を表示 인공지능 인원 이름 표시 + 显示AI单位名称 + 顯示AI單位名稱 Show SoundWaves (requires player names) @@ -112,6 +126,8 @@ Mostrar onda sonora (requer nome de jogadores) 音波形を表示 (プレイヤ名が必要) 음파 표시 (플레이어 이름 필요) + 当玩家讲话时, 显示声波图案 (玩家必须有设定名称) + 當玩家講話時, 顯示聲波圖案 (玩家必須有設定名稱) Default Nametag Color (Non Group Members) @@ -126,6 +142,8 @@ Cor padrão do nome (unidades fora do grupo) 標準の名札の色(グループ メンバ以外) 기본 이름표 색상 (비-그룹 멤버) + 预设名称颜色 (非同小队队友) + 預設名稱顏色 (非同小隊隊友) Name Tags @@ -140,6 +158,8 @@ Etichette Nomi 名札 이름표 + 玩家名称 + 玩家名稱 Player Names View Dist. @@ -154,6 +174,8 @@ Distanza Visiva Etichette Nomi プレイヤ名が見える範囲 플레이어 이름 표시 거리 + 玩家名称显示距离 + 玩家名稱顯示距離 Distance in meters at which player names are shown. Default: 5 @@ -168,6 +190,8 @@ Distanza in metri a cui sono visibili i nomi giocatori. Default: 5 プレイヤの周り何メートルまで名札を表示できます。標準:5 플레이어 이름이 표시되는 미터. 기본설정: 5 + 设定名称在多少距离以内显示. 预设:5公尺 + 設定名稱在多少距離以內顯示. 預設:5公尺 Show name tags for AI? @@ -182,6 +206,8 @@ Mostra etichette nomi per IA? AI の名札も表示しますか? 인공지능의 이름도 표시합니까? + 显示AI名称? + 顯示AI名稱? Show the name and rank tags for friendly AI units? Default: Do not force @@ -196,6 +222,8 @@ Mostra etichette nomi ed etichette gradi per unità IA alleate? Default: Non forzare 友軍の AI にも名前と階級を表示しますか?標準:強制しない 아군 인공지능의 계급을 표시합니까? 기본설정: 강제하지 않음 + 显示友军AI的名称和军阶? 预设: 不显示 + 顯示友軍AI的名稱和軍階? 預設: 不顯示 Force Hide @@ -210,6 +238,8 @@ Forza Nascosto 強制で非表示 강제로 숨기기 + 强迫隐藏 + 強迫隱藏 Force Show @@ -224,6 +254,8 @@ Forza Mostra 強制で表示 강제로 표시 + 强迫显示 + 強迫顯示 Show crew info? @@ -238,6 +270,8 @@ Mostra informazioni equipaggio? 乗員の情報を表示 승무원 정보 표시? + 显示载具成员讯息? + 顯示載具成員訊息? Show vehicle crew info, or by default allows players to choose it on their own. Default: Do Not Force @@ -252,6 +286,8 @@ Mostra informazioni sull'equipaggio del veicolo, oppure consenti di default di lasciare che siano i giocatori a scegliere. Default: Non Forzare 車両の乗員を表示します。標準ではプレイヤ各々が選べられます。標準:強制しない 승무원 정보를 표시하거나 플레이어가 직접 고르게 냅둡니다. 기본설정: 강제하지 않음 + 显示载具成员讯息. 在预设的情况下, 系统允许玩家自己决定开关此讯息. 预设: 不显示 + 顯示載具成員訊息. 在預設的情況下, 系統允許玩家自己決定開關此訊息. 預設: 不顯示 Show for Vehicles @@ -266,6 +302,8 @@ Mostra per Veicoli 車両への表示 차량 표시 + 显示给载具指挥官 + 顯示給載具指揮官 Show cursor NameTag for vehicle commander (only if client has name tags enabled) Default: No @@ -279,6 +317,8 @@ Mostra il nome sul cursore per il comandante del veicolo (solo se il client ha le Etichette Nomi attive) Default: No 車長の名札をカーソルを当てて表示します (クライアント側で名札を有効化する必要があります) 標準:無効 차량의 사령관의 이름표를 표시합니다 (오직 클라이언트가 이름표를 활성화 할시에만 보입니다) 기본설정: 아니요 + 使载具指挥官能透过准心指到别的单位来显示其名称 (仅当客户端的名称功能已启用). 预设: 关闭 + 使載具指揮官能透過準心指到別的單位來顯示其名稱 (僅當客戶端的名稱功能已啟用). 預設: 關閉 This module allows you to customize settings and range of Name Tags. @@ -293,6 +333,8 @@ Questo modulo ti consente di personalizzare le impostazioni ed il raggio delle Etichette Nomi このモジュールは名札の表示範囲と設定を変更できます。 이 모듈은 당신이 이름표의 범위를 임의로 수정할 수 있게 해줍니다. + 这个模块允许您设定名称和显示范围等设定. + 這個模塊允許您設定名稱和顯示範圍等設定. Only on Cursor @@ -307,6 +349,8 @@ Solo su Cursore カーソルでのみ 커서만 해당 + 只有准心指到时 + 只有準心指到時 Only on Keypress @@ -321,6 +365,8 @@ Solo quando Premi Tasto キー押下のみ 키를 누를경우만 + 只有按按键时 + 只有按按鍵時 Only on Cursor and Keypress @@ -335,6 +381,8 @@ Solo su Cursore e quando Premi Tasto カーソルとキー押下のみ 커서와 키를 누를경우만 + 只有在准心指到和按按键时 + 只有在準心指到和按按鍵時 Force Show Only on Cursor @@ -349,6 +397,8 @@ Forza Mostra solo su Cursore カーソルでのみに強制する 커서만 강제로 해당 + 强制仅显示在准心指到时 + 強制僅顯示在準心指到時 Force Show Only on Keypress @@ -363,6 +413,8 @@ Forza Mostra solo quando Premi Tasto キー押下のみに強制する 키를 누를경우만 강제로 해당 + 强制仅显示在按按键时 + 強制僅顯示在按按鍵時 Force Show Only on Cursor and Keypress @@ -377,6 +429,8 @@ Forza Mostra solo su Cursore e quando Premi Tasto カーソルとキー押下のみに強制する 커서와 키를 누를경우만 강제로 해당 + 强制显示在准心指到和按按键时 + 強制顯示在準心指到和按按鍵時 Use Nametag settings @@ -391,6 +445,8 @@ Usa impostazioni Etichette Nomi 名札の設定 이름표 설정 사용 + 玩家名称设定 + 玩家名稱設定 Always Show All @@ -405,6 +461,8 @@ Mostra Sempre Tutto 常に表示する 항상 모두 표시 + 永远显示全部 + 永遠顯示全部 Show player names and set their activation. Default: Enabled @@ -419,6 +477,8 @@ Mostra nomi giocatori ed imposta la loro attivazione. Default: Abilitato プレイヤ名の表示と設定を有効化します。標準:有効 플레이어 이름의 표시와 설정을 활성화합니다. 기본설정: 활성화 + 显示玩家的名称并设置其启动方式. 预设: 启用 + 顯示玩家的名稱並設置其啟動方式. 預設: 啟用 Effect of sound waves above the heads of speaking players after holding the PTT key. This option works with TFAR and ACRE2. @@ -433,6 +493,8 @@ Effetto delle onde sonore sopra la testa dei giocatori parlanti quando premono il tasto PTT. Questa opzione funziona con TFAR ed ACRE2 プレイヤーが PTT キーを押している間は、音波形を表示します。このオプションは TFAR と ACRE2 で動作します。 플레이어가 PTT로 말할시 머리위에 음파효과를 적용합니다. 이 옵션은 TFAR과 ACRE2가 있을때만 적용됩니다. + 当玩家使用按键发话时, 其头上的角色名称旁会显示声波的图案. 此功能可搭配TFAR、ACRE2等模组使用. + 當玩家使用按鍵發話時, 其頭上的角色名稱旁會顯示聲波的圖案. 此功能可搭配TFAR、ACRE2等模組使用. Nametags Size @@ -447,6 +509,8 @@ Dimensione Etichette Nome 名札の大きさ 이름표 크기 + 玩家名称标记大小 + 玩家名稱標記大小 Text and Icon Size Scaling @@ -461,6 +525,8 @@ Proporzione Dimensioni Testo ed Icone 文字とアイコンの大きさ 글자와 아이콘 크기 비례 + 文字和图示大小设定 + 文字和圖示大小設定 Fade on screen border @@ -468,6 +534,10 @@ 画面端では非表示 Ukryj na brzegach ekranu 화면 가장자리에서 사라짐 + Estomper sur les bords de l'écran + Sfocatura nei bordi dello schermo + 在荧幕边框旁淡出 + 在螢幕邊框旁淡出 diff --git a/addons/nightvision/functions/fnc_blending.sqf b/addons/nightvision/functions/fnc_blending.sqf index 2616cb83f5..4a858838d3 100644 --- a/addons/nightvision/functions/fnc_blending.sqf +++ b/addons/nightvision/functions/fnc_blending.sqf @@ -6,7 +6,7 @@ * None. Parameters inherited from EFUNC(common,firedEH) * * Return Value: - * Nothing + * Noneg * * Example: * [clientFiredBIS-XEH] call ace_nightvision_fnc_blending diff --git a/addons/nightvision/functions/fnc_changeNVGBrightness.sqf b/addons/nightvision/functions/fnc_changeNVGBrightness.sqf index 04cea0f214..5bb5d52721 100644 --- a/addons/nightvision/functions/fnc_changeNVGBrightness.sqf +++ b/addons/nightvision/functions/fnc_changeNVGBrightness.sqf @@ -7,7 +7,7 @@ * 1: Change in brightness (1 or -1) * * Return Value: - * Nothing + * None * * Example: * [player, 1] call ace_nightvision_fnc_changeNVGBrightness diff --git a/addons/nightvision/functions/fnc_updatePPEffects.sqf b/addons/nightvision/functions/fnc_updatePPEffects.sqf index 9bf8321353..7f4f660bd7 100644 --- a/addons/nightvision/functions/fnc_updatePPEffects.sqf +++ b/addons/nightvision/functions/fnc_updatePPEffects.sqf @@ -3,10 +3,10 @@ * Update the ppEffects everytime something changes * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * [someEvent] call ace_nightvision_fnc_updatePPEffects diff --git a/addons/nightvision/stringtable.xml b/addons/nightvision/stringtable.xml index 16f59aafdf..8e4e1fafde 100644 --- a/addons/nightvision/stringtable.xml +++ b/addons/nightvision/stringtable.xml @@ -14,6 +14,8 @@ Éjjellátó szemüveg (1. Gen.) 夜間暗視装置つきゴーグル (第1世代) 야투경 (1세대) + 夜视镜 (初代) + 夜視鏡 (初代) NV Goggles (Gen2) @@ -28,6 +30,8 @@ Éjjellátó szemüveg (2. Gen.) 夜間暗視装置つきゴーグル (第2世代) 야투경 (2세대) + 夜视镜 (二代) + 夜視鏡 (二代) NV Goggles (Gen3) @@ -42,6 +46,8 @@ Éjjellátó szemüveg (3. Gen.) 夜間暗視装置つきゴーグル (第3世代) 야투경 (3세대) + 夜视镜 (三代) + 夜視鏡 (三代) NV Goggles (Gen3, Brown) @@ -56,6 +62,8 @@ Éjjellátó szemüveg (3. Gen., barna) 夜間暗視装置つきゴーグル (第3世代、ブラウン) 야투경 (3세대, 갈색) + 夜视镜 (三代, 棕色) + 夜視鏡 (三代, 棕色) NV Goggles (Gen3, Green) @@ -70,6 +78,8 @@ Éjjellátó szemüveg (3. Gen., zöld) 夜間暗視装置つきゴーグル (第3世代、グリーン) 야투경 (3세대, 녹색) + 夜视镜 (三代, 绿色) + 夜視鏡 (三代, 綠色) NV Goggles (Gen3, Black) @@ -84,6 +94,8 @@ Éjjellátó szemüveg (3. Gen., fekete) 夜間暗視装置つきゴーグル (第3世代、ブラック) 야투경 (3세대, 검정색) + 夜视镜 (三代, 黑色) + 夜視鏡 (三代, 黑色) NV Goggles (Gen4) @@ -98,6 +110,8 @@ Éjjellátó szemüveg (4. Gen.) 夜間暗視装置つきゴーグル (第4世代) 야투경 (4세대) + 夜视镜 (四代) + 夜視鏡 (四代) NV Goggles (Wide) @@ -112,6 +126,8 @@ Occhiali notturni (Larghi) 夜間暗視装置つきゴーグル (ワイド) 야투경 (넓음) + 夜视镜 (宽版) + 夜視鏡 (寬版) Brightness: %1 @@ -126,6 +142,8 @@ Luminosità: %1 光度:%1 밝기: %1 + 亮度: %1 + 亮度: %1 Increase NVG Brightness @@ -140,6 +158,8 @@ Aumenta la luminosità dell'NVG 夜間暗視装置の光度を上げる 야투경 밝기 높이기 + 增加夜视镜亮度 + 增加夜視鏡亮度 Decrease NVG Brightness @@ -154,6 +174,8 @@ Riduci la luminosità dell'NVG 夜間暗視装置の光度を下げる 야투경 밝기 줄이기 + 减少夜视镜亮度 + 減少夜視鏡亮度 Nightvision @@ -167,6 +189,8 @@ Vision nocturne 夜間暗視装置 야간투시경 + 夜视 + 夜視 Settings for night vision. @@ -180,6 +204,8 @@ Réglage pour la vision nocturne 夜間暗視装置の設定。 야간투시경 설정 + 设定夜视选项. + 設定夜視選項. Disable NVGs in scope @@ -193,6 +219,8 @@ Desactiver les JVN dans les viseurs. スコープを覗くと夜間暗視装置を無効化 조준경 사용시 야투경 비활성화 + 使用瞄准镜时关闭夜视镜 + 使用瞄準鏡時關閉夜視鏡 Blocks the usage of night vision goggles whilst aiming down the sight. @@ -206,6 +234,8 @@ Bloque l'usage des JVN pendant la visée. スコープを使い狙いを付けると、夜間暗視装置を無効化します。 조준시 야투경의 사용을 제한합니다. + 此功能开启后, 当要使用瞄准镜时, 为避免夜视镜镜头碰撞到瞄准镜, 会先拿开夜视镜后再进行瞄准镜瞄准. + 此功能開啟後, 當要使用瞄準鏡時, 為避免夜視鏡鏡頭碰撞到瞄準鏡, 會先拿開夜視鏡後再進行瞄準鏡瞄準. diff --git a/addons/nlaw/$PBOPREFIX$ b/addons/nlaw/$PBOPREFIX$ new file mode 100644 index 0000000000..cbcdbb46de --- /dev/null +++ b/addons/nlaw/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\nlaw diff --git a/addons/nlaw/ACE_GuidanceConfig.hpp b/addons/nlaw/ACE_GuidanceConfig.hpp new file mode 100644 index 0000000000..e04753d681 --- /dev/null +++ b/addons/nlaw/ACE_GuidanceConfig.hpp @@ -0,0 +1,14 @@ +class EGVAR(missileguidance,AttackProfiles) { + class GVAR(directAttack) { + name = CSTRING(directAttack); + functionName = QFUNC(attackProfile); + }; + class GVAR(overflyTopAttack): GVAR(directAttack) { + name = CSTRING(overflyTopAttack); + }; +}; +class EGVAR(missileguidance,SeekerTypes) { + class GVAR(seeker) { + functionName = QFUNC(seeker); + }; +}; diff --git a/addons/nlaw/CfgAmmo.hpp b/addons/nlaw/CfgAmmo.hpp new file mode 100644 index 0000000000..f0649b2ba4 --- /dev/null +++ b/addons/nlaw/CfgAmmo.hpp @@ -0,0 +1,55 @@ +class CfgAmmo { + class M_NLAW_AT_F; + class ACE_NLAW: M_NLAW_AT_F { + hit = 400; // Default was 500 + indirectHit = 20; // Default was 15 + class ace_missileguidance { + enabled = 1; + + minDeflection = 0.0005; // Minium flap deflection for guidance + maxDeflection = 0.01; // Maximum flap deflection for guidance + incDeflection = 0.0005; // The incrmeent in which deflection adjusts. + + canVanillaLock = 0; // Can this default vanilla lock? Only applicable to non-cadet mode + + // Guidance type for munitions + defaultSeekerType = QGVAR(seeker); + seekerTypes[] = {QGVAR(seeker)}; + + defaultSeekerLockMode = "LOBL"; + seekerLockModes[] = {"LOBL"}; + + seekLastTargetPos = 0; // seek last target position [if seeker loses LOS of target, continue to last known pos] + seekerAngle = 45; // Angle in front of the missile which can be searched + seekerAccuracy = 1; // seeker accuracy multiplier + + seekerMinRange = 0; + seekerMaxRange = 10; // Range from the missile which the seeker can visually search + + // Attack profile type selection + defaultAttackProfile = QGVAR(directAttack); + attackProfiles[] = {QGVAR(directAttack), QGVAR(overflyTopAttack)}; + showHintOnCycle = 1; + + // Run once at fired event + onFired = QFUNC(onFired); + }; + }; + + // Sub ammos used in OTA mode (see fnc_seeker.sqf) + class ACE_NLAW_Explosion: ACE_NLAW { // Based on FCS-Airburst, will explode right away + timeToLive = 0; + model = ""; + }; + class ACE_NLAW_ShapedCharge: ACE_NLAW { // Shaped charge from rocket explosion, no effects + timeToLive = 1; + model = ""; + hit = 750; + indirectHit = 0; + indirectHitRange = 0; + explosionSoundEffect = ""; + explosionEffects = ""; + CraterEffects = ""; + muzzleEffect = ""; + }; +}; diff --git a/addons/nlaw/CfgEventhandlers.hpp b/addons/nlaw/CfgEventhandlers.hpp new file mode 100644 index 0000000000..0d3301d6e0 --- /dev/null +++ b/addons/nlaw/CfgEventhandlers.hpp @@ -0,0 +1,17 @@ +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preStart)); + }; +}; + +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_postInit)); + }; +}; diff --git a/addons/nlaw/CfgMagazines.hpp b/addons/nlaw/CfgMagazines.hpp new file mode 100644 index 0000000000..fe2e2ecf8d --- /dev/null +++ b/addons/nlaw/CfgMagazines.hpp @@ -0,0 +1,6 @@ +class CfgMagazines { + class CA_LauncherMagazine; + class NLAW_F: CA_LauncherMagazine { + ammo = "ACE_NLAW"; + }; +}; diff --git a/addons/nlaw/CfgWeapons.hpp b/addons/nlaw/CfgWeapons.hpp new file mode 100644 index 0000000000..35f5b17122 --- /dev/null +++ b/addons/nlaw/CfgWeapons.hpp @@ -0,0 +1,13 @@ +class CfgWeapons { + class Launcher_Base_F; + class launch_NLAW_F: Launcher_Base_F { + GVAR(enabled) = 1; + canLock = 1; + class OpticsModes { + class optic { + distanceZoomMin = 0; + distanceZoomMax = 0; + }; + }; + }; +}; diff --git a/addons/nlaw/README.md b/addons/nlaw/README.md new file mode 100644 index 0000000000..dd62b36014 --- /dev/null +++ b/addons/nlaw/README.md @@ -0,0 +1,10 @@ +ace_nlaw +=============== + +Adds Predicted Line Of Sight guidance to the NLAW. + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [PabstMirror](https://github.com/PabstMirror) diff --git a/addons/nlaw/XEH_PREP.hpp b/addons/nlaw/XEH_PREP.hpp new file mode 100644 index 0000000000..aad1e57efb --- /dev/null +++ b/addons/nlaw/XEH_PREP.hpp @@ -0,0 +1,6 @@ +LOG("prep"); + +PREP(attackProfile); +PREP(keyDown); +PREP(onFired); +PREP(seeker); diff --git a/addons/nlaw/XEH_postInit.sqf b/addons/nlaw/XEH_postInit.sqf new file mode 100644 index 0000000000..885e2d5e2f --- /dev/null +++ b/addons/nlaw/XEH_postInit.sqf @@ -0,0 +1,46 @@ +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +GVAR(isLockKeyDown) = false; + +// Degrees per second +GVAR(yawChange) = 0; +GVAR(pitchChange) = 0; + +// Add keybind +["ACE3 Weapons", QGVAR(trackTarget), localize LSTRING(trackTarget), { + call FUNC(keyDown); + false // Return false so it doesn't block the rest weapon action +}, { + TRACE_1("lock key up",GVAR(isLockKeyDown)); + GVAR(isLockKeyDown) = false; + false +}, [15, [false, false, false]], false] call CBA_fnc_addKeybind; //Tab Key + + + +// Visual debuging, idealy used with a moving vehicle called "testTarget" +#ifdef DRAW_NLAW_INFO +addMissionEventHandler ["Draw3d", { + // GREEN - Draw an object called "testTarget"'s aim pos and 1 sec aimpos predicted by velocity + if ((!isNil "testTarget") && {!isNull testTarget}) then { + { + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [0,1,0,1], ASLtoAGL ((aimPos testTarget) vectorAdd ((velocity testTarget) vectorMultiply _x)), 0.75, 0.75, 0, format ["%1", _x], 1, 0.025, "TahomaB"]; + } forEach [0, 1, 2, 3]; + }; + + // RED - If lock key is down, draw weapon dir and predicted path at various times + if (GVAR(yawChange) != 0) then { + { + private _viewASL = AGLtoASL positionCameraToWorld [0,0,0]; + private _viewDir = ACE_player weaponDirection (currentWeapon ACE_player); + (_viewDir call CBA_fnc_vect2Polar) params ["", "_yaw", "_pitch"]; + private _realYaw = _yaw + GVAR(yawChange) * _x; + private _realPitch = _pitch + GVAR(pitchChange) * _x; + private _returnTargetPos = _viewASL vectorAdd ([1000, _realYaw, _realPitch] call CBA_fnc_polar2vect); + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], ASLtoAGL _returnTargetPos, 0.75, 0.75, 0, format ["%1", _x], 1, 0.025, "TahomaB"]; + } forEach [0, 1, 2, 3]; + }; +}]; +#endif diff --git a/addons/nlaw/XEH_preInit.sqf b/addons/nlaw/XEH_preInit.sqf new file mode 100644 index 0000000000..b47cf6628d --- /dev/null +++ b/addons/nlaw/XEH_preInit.sqf @@ -0,0 +1,9 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP_RECOMPILE_START; +#include "XEH_PREP.hpp" +PREP_RECOMPILE_END; + +ADDON = true; diff --git a/addons/nlaw/XEH_preStart.sqf b/addons/nlaw/XEH_preStart.sqf new file mode 100644 index 0000000000..022888575e --- /dev/null +++ b/addons/nlaw/XEH_preStart.sqf @@ -0,0 +1,3 @@ +#include "script_component.hpp" + +#include "XEH_PREP.hpp" diff --git a/addons/nlaw/config.cpp b/addons/nlaw/config.cpp new file mode 100644 index 0000000000..7109459066 --- /dev/null +++ b/addons/nlaw/config.cpp @@ -0,0 +1,22 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_missileguidance"}; + author = ECSTRING(common,ACETeam); + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgEventhandlers.hpp" + +#include "CfgAmmo.hpp" +#include "CfgMagazines.hpp" +#include "CfgWeapons.hpp" + +#include "ACE_GuidanceConfig.hpp" diff --git a/addons/nlaw/functions/fnc_attackProfile.sqf b/addons/nlaw/functions/fnc_attackProfile.sqf new file mode 100644 index 0000000000..778a1924b3 --- /dev/null +++ b/addons/nlaw/functions/fnc_attackProfile.sqf @@ -0,0 +1,60 @@ +/* + * Author: PabstMirror + * NLAW missile guidance attack profile. + * + * Arguments: + * 0: Seeker Target PosASL + * 1: Guidance Arg Array + * 2: Attack Profile State + * + * Return Value: + * Missile Aim PosASL + * + * Example: + * [[1,2,3], [], []] call ace_nlaw_fnc_attackProfile + * + * Public: No + */ +#include "script_component.hpp" + +params ["_seekerTargetPos", "_args", "_attackProfileStateParams"]; +_args params ["_firedEH", "_launchParams"]; +_launchParams params ["","_targetLaunchParams", "", "_attackProfile"]; +_targetLaunchParams params ["", "", "_launchPos"]; +_firedEH params ["","","","","","","_projectile"]; + +// Use seeker (if terminal) +if (!(_seekerTargetPos isEqualTo [0,0,0])) exitWith {_seekerTargetPos}; + +_attackProfileStateParams params ["_startTime", "_startLOS", "_yawChange", "_pitchChange"]; +(_startLOS call CBA_fnc_vect2Polar) params ["", "_yaw", "_pitch"]; + +private _projectilePos = getPosASL _projectile; +private _distanceFromLaunch = (_launchPos distance _projectilePos) + 10; +private _flightTime = CBA_missionTime - _startTime; + +private _realYaw = _yaw + _yawChange * _flightTime; +private _realPitch = _pitch + _pitchChange * _flightTime; + +private _returnTargetPos = _launchPos vectorAdd ([_distanceFromLaunch, _realYaw, _realPitch] call CBA_fnc_polar2vect); + +if (_attackProfile == QGVAR(overflyTopAttack)) then { // Add 2m height in OTA attack mode + _returnTargetPos = _returnTargetPos vectorAdd [0,0,2]; +}; + + +#ifdef DRAW_NLAW_INFO +drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,1,1], ASLtoAGL _launchPos, 0.75, 0.75, 0, "LAUNCH", 1, 0.025, "TahomaB"]; +drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [0,1,1,1], ASLtoAGL (_launchPos vectorAdd (_startLOS vectorMultiply (_distanceFromLaunch + 50))), 0.75, 0.75, 0, "Original LOS", 1, 0.025, "TahomaB"]; +drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,1,0,1], ASLtoAGL (_launchPos vectorAdd ([_distanceFromLaunch + 50, _realYaw, _realPitch] call CBA_fnc_polar2vect)), 0.75, 0.75, 0, format ["Predicted @%1sec",(floor(_flightTime * 10)/10)], 1, 0.025, "TahomaB"]; +drawLine3D [ASLtoAGL _launchPos, ASLtoAGL (_launchPos vectorAdd (_startLOS vectorMultiply (_distanceFromLaunch + 50))), [1,0,0,1]]; +drawLine3D [ASLtoAGL _launchPos, ASLtoAGL (_launchPos vectorAdd ([_distanceFromLaunch + 50, _realYaw, _realPitch] call CBA_fnc_polar2vect)), [1,1,0,1]]; +private _test = lineIntersectsSurfaces [_launchPos, _launchPos vectorAdd (_startLOS vectorMultiply 3000), player, _projectile]; +if ((count _test) > 0) then { + private _posAGL = ASLtoAGL ((_test select 0) select 0); + drawIcon3D ["\a3\ui_f\data\IGUI\Cfg\Cursors\selectover_ca.paa", [1,0,0,1], _posAGL, 0.75, 0.75, 0, "Original Impact", 1, 0.025, "TahomaB"]; +}; +#endif + +// TRACE_1("Adjusted target position", _returnTargetPos); +_returnTargetPos; diff --git a/addons/nlaw/functions/fnc_keyDown.sqf b/addons/nlaw/functions/fnc_keyDown.sqf new file mode 100644 index 0000000000..82dfbbcc2e --- /dev/null +++ b/addons/nlaw/functions/fnc_keyDown.sqf @@ -0,0 +1,81 @@ +/* + * Author: PabstMirror + * Handles the track key being held down. + * Tracks change in direction of weapon and computes angle change per second. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_nlaw_fnc_keyDown + * + * Public: No + */ +// #define DEBUG_MODE_FULL +#include "script_component.hpp" + +TRACE_1("lock key down",GVAR(isLockKeyDown)); + +if (!alive ACE_player) exitWith {}; +if (!([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith))) exitWith {}; +if (!(ACE_player call CBA_fnc_canUseWeapon)) exitWith {}; +if ((getNumber (configFile >> "CfgWeapons" >> (currentWeapon ACE_player) >> QGVAR(enabled))) == 0) exitWith {}; +if (GVAR(isLockKeyDown)) exitWith {ERROR("already running?");}; + +GVAR(isLockKeyDown) = true; +playSound "ACE_Sound_Click"; + +// Get starting weapon dir +((ACE_player weaponDirection (currentWeapon ACE_player)) call CBA_fnc_vect2Polar) params ["", "_yaw", "_pitch"]; + +[{ + params ["_args", "_pfID"]; + _args params ["_lastTime", "_lastYaw", "_lastPitch", "_initPhase"]; + + if ((!alive ACE_player) || + {!([ACE_player, objNull, ["isNotInside"]] call EFUNC(common,canInteractWith))} || + {!GVAR(isLockKeyDown)} || + {!(ACE_player call CBA_fnc_canUseWeapon)} || + {(getNumber (configFile >> "CfgWeapons" >> (currentWeapon ACE_player) >> QGVAR(enabled))) == 0}) + exitWith { + TRACE_1("ending track",_pfID); + [_pfID] call CBA_fnc_removePerFrameHandler; + playSound "ACE_Sound_Click"; + + [{ // reset gvars after a short delay + TRACE_1("reset vars",_this); + GVAR(yawChange) = 0; + GVAR(pitchChange) = 0; + }, [], 0.5] call CBA_fnc_waitAndExecute; + }; + + private _deltaT = CBA_missionTime - _lastTime; + if (_deltaT == 0) exitWith {}; + if (_initPhase && {_deltaT < 0.75}) exitWith {}; + + ((ACE_player weaponDirection (currentWeapon ACE_player)) call CBA_fnc_vect2Polar) params ["", "_yaw", "_pitch"]; + private _yawChange = ([_yaw - _lastYaw] call CBA_fnc_simplifyAngle180) / _deltaT; + private _pitchChange = ([_pitch - _lastPitch] call CBA_fnc_simplifyAngle180) / _deltaT; + + if (_initPhase) then { // initial value will use first 0.75 seconds of input + GVAR(yawChange) = _yawChange; + GVAR(pitchChange) = _pitchChange; + _args set [3, false]; + } else { + // smoothing factor alpha - higher values will be more responsive to change, but also spike higher on jerky mouse movmeent + private _alpha = _deltaT / 3; + GVAR(yawChange) = (_yawChange * _alpha) + GVAR(yawChange) * (1 - _alpha); + GVAR(pitchChange) = (_pitchChange * _alpha) + GVAR(pitchChange) * (1 - _alpha); + }; + + _args set [0, CBA_missionTime]; + _args set [1, _yaw]; + _args set [2, _pitch]; + + #ifdef DEBUG_MODE_FULL + hintSilent format ["Instantaneous\nYaw: %1\n Pitch: %2\nGVAR\nYaw: %3\nPitch: %4", _yawChange, _pitchChange, GVAR(yawChange), GVAR(pitchChange)]; + #endif +}, .25, [CBA_missionTime, _yaw, _pitch, true]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/nlaw/functions/fnc_onFired.sqf b/addons/nlaw/functions/fnc_onFired.sqf new file mode 100644 index 0000000000..7049dfb918 --- /dev/null +++ b/addons/nlaw/functions/fnc_onFired.sqf @@ -0,0 +1,62 @@ +/* + * Author: PabstMirror + * Sets up missile guidance state arrays (called from missileGuidance's onFired). + * + * Arguments: + * Guidance Arg Array + * + * Return Value: + * None + * + * Example: + * [] call ace_nlaw_fnc_onFired + * + * Public: No + */ +#include "script_component.hpp" + +params ["_firedEH", "_launchParams", "_flightParams", "_seekerParams", "_stateParams"]; +_firedEH params ["_shooter","","","","","","_projectile"]; +_launchParams params ["","_targetLaunchParams","","_attackProfile"]; +_targetLaunchParams params ["_target"]; +_stateParams params ["", "", "_attackProfileStateParams"]; + +// Reset _launchPos origin as projectile's height instead of player's foot +_targetLaunchParams set [2, getPosASL _projectile]; + +// Get state params: +TRACE_3("start of attack profile",_attackProfile,_shooter,vectorDir _projectile); + +private _firedLOS = _shooter weaponDirection (currentWeapon _shooter); +private _yawChange = 0; +private _pitchChange = 0; + +if (_shooter == ACE_player) then { + TRACE_2("isPlayer",GVAR(yawChange),GVAR(pitchChange)); + _yawChange = GVAR(yawChange); + _pitchChange = GVAR(pitchChange); + TRACE_1("los check",_firedLOS call CBA_fnc_vect2Polar); +} else { + if ((!isNil "_target") && {!isNull _target}) then { + _firedLOS = (getPosASL _projectile) vectorFromTo (aimPos _target); + (((eyePos _shooter) vectorFromTo (aimPos _target)) call CBA_fnc_vect2Polar) params ["", "_startYaw", "_startPitch"]; + // Add some random error to AI's velocity prediction: + private _random = random [(_shooter skillFinal "aimingAccuracy") min 0.9, 1, 2-((_shooter skillFinal "aimingAccuracy") min 0.9)]; + (((eyePos _shooter) vectorFromTo ((aimPos _target) vectorAdd ((velocity _target) vectorMultiply (_random)))) call CBA_fnc_vect2Polar) params ["", "_predictedYaw", "_predictedPitch"]; + _yawChange = ([_predictedYaw - _startYaw] call CBA_fnc_simplifyAngle180); + _pitchChange = ([_predictedPitch - _startPitch] call CBA_fnc_simplifyAngle180); + TRACE_1("AI",_target); + } else { + TRACE_1("AI - no target",_target); + }; +}; + +// Limit Max Deflection +_yawChange = -10 max _yawChange min 10; +_pitchChange = -10 max _pitchChange min 10; + +TRACE_3("attackProfileStateParams",_firedLOS,_yawChange,_pitchChange); +_attackProfileStateParams set [0, CBA_missionTime]; +_attackProfileStateParams set [1, _firedLOS]; +_attackProfileStateParams set [2, _yawChange]; +_attackProfileStateParams set [3, _pitchChange]; diff --git a/addons/nlaw/functions/fnc_seeker.sqf b/addons/nlaw/functions/fnc_seeker.sqf new file mode 100644 index 0000000000..850c966f56 --- /dev/null +++ b/addons/nlaw/functions/fnc_seeker.sqf @@ -0,0 +1,94 @@ +/* + * Author: PabstMirror + * Handles the top down attack seeker for missile guidance. + * Has a very short range (IR/Magnetic?) seeker that will trigger the shaped charge midair above the target. + * + * Arguments: + * 1: Guidance Arg Array + * 2: Seeker State + * + * Return Value: + * Seeker Pos + * + * Example: + * [] call ace_nlaw_fnc_seeker + * + * Public: No + */ +// #define DEBUG_MODE_FULL +#include "script_component.hpp" + +params ["", "_args", "_seekerStateParams"]; +_args params ["_firedEH", "_launchParams", "", "_seekerParams", "_stateParams"]; +_firedEH params ["","","","","","","_projectile"]; +_launchParams params ["", "_targetLaunchParams", "", "_attackProfile"]; +_targetLaunchParams params ["", "", "_launchPos"]; + +if (_attackProfile == QGVAR(directAttack)) exitWith {[0,0,0]}; + +private _projPos = getPosASL _projectile; + +// Arm seeker after 20 meters +if ((_projPos distance _launchPos) >= 20) then { + scopeName "targetScan"; + BEGIN_COUNTER(targetScan); + + if (_seekerStateParams isEqualTo []) then { + TRACE_2("Seeker Armed",_projPos distance _launchPos,diag_fps); + _seekerStateParams set [0, _projPos]; // Set _lastPos to current position + }; + + _seekerStateParams params ["_lastPos", "_terminal"]; + if (_terminal) exitWith {}; + + private _vectorDir = _lastPos vectorFromTo _projPos; + private _frameDistance = _lastPos vectorDistance _projPos; + + // Distance traveled depends on velocity and FPS - at 60fps it will be ~4m + // Step size will effect accuracy and performance costs + for "_stepSize" from 0 to _frameDistance step 0.5 do { + // This represents a position that the missile was at between the last frame and now + private _virtualPos = _lastPos vectorAdd (_vectorDir vectorMultiply _stepSize); + #ifdef DRAW_NLAW_INFO + drawLine3D [ASLtoAGL _virtualPos, ASLtoAGL (_virtualPos vectorAdd [0,0,-5]), [1,0,_stepSize/(_frameDistance max 0.1),1]]; + #endif + + // Limit scan to 5 meters directly down (shaped charge jet has a very limited range) + private _res = lineIntersectsSurfaces [_virtualPos, (_virtualPos vectorAdd [0,0,-5]), _projectile]; + if (!(_res isEqualTo [])) then { + (_res select 0) params ["_targetPos", "", "_target"]; + if ((_target isKindOf "Tank") || {_target isKindOf "Car"} || {_target isKindOf "Air"}) exitWith { + TRACE_3("Firing shaped charge down",_target,_targetPos distance _virtualPos,_frameDistance); + TRACE_2("",_target worldToModel (ASLtoAGL _virtualPos),boundingBoxReal _target); + _virtualPos = _virtualPos vectorAdd (_vectorDir vectorMultiply 1.25); + + deleteVehicle _projectile; + + // Damage and effects of missile exploding (timeToLive is 0 so should happen next frame) + private _explosion = "ACE_NLAW_Explosion" createVehicle _virtualPos; + _explosion setPosASL _virtualPos; + + // Just damage from shaped charge + private _shapedCharage = "ACE_NLAW_ShapedCharge" createVehicle _virtualPos; + _shapedCharage setPosASL _virtualPos; + _shapedCharage setVectorDirAndUp [[0,0,-1], [1,0,0]]; + _shapedCharage setVelocity [0,0,-300]; + + _seekerStateParams set [1, true]; + + END_COUNTER(targetScan); + breakOut "targetScan"; + }; + }; + }; + _seekerStateParams set [0, _projPos]; + END_COUNTER(targetScan); +}; + +// Exploded, return dummy value +if (_seekerStateParams param [1, false]) exitWith { + [0,0,1] +}; + +// return: +[0,0,0] diff --git a/addons/nlaw/functions/script_component.hpp b/addons/nlaw/functions/script_component.hpp new file mode 100644 index 0000000000..50d8cac4c1 --- /dev/null +++ b/addons/nlaw/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\nlaw\script_component.hpp" diff --git a/addons/nlaw/script_component.hpp b/addons/nlaw/script_component.hpp new file mode 100644 index 0000000000..2cabaf7e47 --- /dev/null +++ b/addons/nlaw/script_component.hpp @@ -0,0 +1,18 @@ +#define COMPONENT nlaw +#define COMPONENT_BEAUTIFIED NLAW +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DRAW_NLAW_INFO +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_NLAW + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_NLAW + #define DEBUG_SETTINGS DEBUG_SETTINGS_NLAW +#endif + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/addons/nlaw/stringtable.xml b/addons/nlaw/stringtable.xml new file mode 100644 index 0000000000..74de6d21d8 --- /dev/null +++ b/addons/nlaw/stringtable.xml @@ -0,0 +1,26 @@ + + + + + NLAW Track Target (Hold) + NLAW Traccia Bersaglio (Mantieni) + NALW 目標の追跡 (押しっぱ) + 次世代轻型反坦克导弹发射器追踪目标 (按住) + 次世代輕型反坦克導彈發射器追蹤目標 (按住) + + + Direct Attack + Attacco Diretto + ダイレクト アタック + 直射模式 + 直射模式 + + + Overfly Top Attack + Attacco dall'alto + オーバーフライ トップ アタック + 攻顶模式 + 攻頂模式 + + + diff --git a/addons/optics/functions/fnc_handleFired.sqf b/addons/optics/functions/fnc_handleFired.sqf index f1216fb15d..10b21b5042 100644 --- a/addons/optics/functions/fnc_handleFired.sqf +++ b/addons/optics/functions/fnc_handleFired.sqf @@ -1,5 +1,5 @@ /* - * Original Author: Taosenai + * Author: Taosenai * Adapted By: KoffeinFlummi, commy2 * * Animates the scope when firing. Called from the unified fired EH only for the local player. @@ -9,7 +9,13 @@ * * Return Value: * None + * + * Example: + * call ace_optics_fnc_handleFired + * + * Public: No */ + #include "script_component.hpp" //IGNORE_PRIVATE_WARNING ["_unit", "_weapon", "_muzzle", "_mode", "_ammo", "_magazine", "_projectile", "_vehicle", "_gunner", "_turret"]; diff --git a/addons/optics/functions/fnc_onDrawScope.sqf b/addons/optics/functions/fnc_onDrawScope.sqf index fd899b5a02..e3114c8c84 100644 --- a/addons/optics/functions/fnc_onDrawScope.sqf +++ b/addons/optics/functions/fnc_onDrawScope.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * 0: Display + * + * Return Value: + * None + * + * Example: + * [DISPLAY] call ace_optics_fnc_onDrawScope + * + * Public: No + */ + #include "script_component.hpp" disableSerialization; diff --git a/addons/optics/functions/fnc_onDrawScope2D.sqf b/addons/optics/functions/fnc_onDrawScope2D.sqf index e8b26dca65..c429740de0 100644 --- a/addons/optics/functions/fnc_onDrawScope2D.sqf +++ b/addons/optics/functions/fnc_onDrawScope2D.sqf @@ -7,7 +7,7 @@ * 0: Display (RscInGameUI for a weapon) * * Return Value: - * Nothing + * None * * Example: * [ACE_RscWeapon_Arco's Display] call ace_optics_fnc_onDrawScope2D diff --git a/addons/optics/stringtable.xml b/addons/optics/stringtable.xml index 465bfa6aec..377cca28bc 100644 --- a/addons/optics/stringtable.xml +++ b/addons/optics/stringtable.xml @@ -14,6 +14,8 @@ RCO (2D) RCO (2D) RCO (2D) + 步枪战斗光学瞄准镜(2D) + 步槍戰鬥光學瞄準鏡(2D) RCO (PIP) @@ -28,6 +30,8 @@ RCO (PIP) RCO (PIP) RCO (PIP) + 步枪战斗光学瞄准镜(拟真版) + 步槍戰鬥光學瞄準鏡(擬真版) ARCO (2D) @@ -42,6 +46,8 @@ ARCO (2D) ARCO (2D) ARCO (2D) + 先进步枪战斗光学瞄准镜(2D) + 先進步槍戰鬥光學瞄準鏡(2D) ARCO (PIP) @@ -56,6 +62,8 @@ ARCO (PIP) ARCO (PIP) ARCO (PIP) + 先进步枪战斗光学瞄准镜(拟真版) + 先進步槍戰鬥光學瞄準鏡(擬真版) MRCO (2D) @@ -70,6 +78,8 @@ MRCO (2D) MRCO (2D) MRCO (2D) + 多距离战斗瞄准镜(2D) + 多距離戰鬥瞄準鏡(2D) MRCO (PIP) @@ -84,6 +94,8 @@ MRCO (PIP) MRCO (PIP) MRCO (PIP) + 多距离战斗瞄准镜(拟真版) + 多距離戰鬥瞄準鏡(擬真版) MOS (2D) @@ -98,6 +110,8 @@ MOS (2D) MOS (2D) MOS (2D) + 精准光学瞄准镜(2D) + 精準光學瞄準鏡(2D) MOS (PIP) @@ -112,6 +126,8 @@ MOS (PIP) MOS (PIP) MOS (PIP) + 精准光学瞄准镜(拟真版) + 精準光學瞄準鏡(擬真版) LRPS (2D) @@ -126,6 +142,8 @@ LRPS (2D) LRPS (2D) LRPS (2D) + 长距离精确瞄准镜(2D) + 長距離精確瞄準鏡(2D) LRPS (PIP) @@ -140,6 +158,8 @@ LRPS (PIP) LRPS (PIP) LRPS (PIP) + 长距离精确瞄准镜(拟真版) + 長距離精確瞄準鏡(擬真版) diff --git a/addons/optionsmenu/config.cpp b/addons/optionsmenu/config.cpp index a239e55498..650f9eb74a 100644 --- a/addons/optionsmenu/config.cpp +++ b/addons/optionsmenu/config.cpp @@ -22,7 +22,6 @@ class CfgAddons { }; }; - #include "CfgEventHandlers.hpp" #include "gui\define.hpp" #include "gui\settingsMenu.hpp" @@ -35,9 +34,8 @@ class ACE_Extensions { extensions[] += {"ace_clipboard"}; }; - class CfgCommands { allowedHTMLLoadURIs[] += { - "http://ace3mod.com/version.html" + "https://ace3mod.com/version.html" }; }; diff --git a/addons/optionsmenu/functions/fnc_moduleAllowConfigExport.sqf b/addons/optionsmenu/functions/fnc_moduleAllowConfigExport.sqf index 633a9aa162..2426bb2f26 100644 --- a/addons/optionsmenu/functions/fnc_moduleAllowConfigExport.sqf +++ b/addons/optionsmenu/functions/fnc_moduleAllowConfigExport.sqf @@ -3,11 +3,14 @@ * * * Arguments: - * none + * None * * Return Value: * None * + * Example: + * call ace_optionsmenu_fnc_moduleAllowConfigExport + * * Public: No */ diff --git a/addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf b/addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf index 8fd52d8d72..2256620cf6 100644 --- a/addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf +++ b/addons/optionsmenu/functions/fnc_toggleIncludeClientSettings.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * call ace_optionsmenu_fnc_toggleIncludeClientSettings + * * Public: No */ diff --git a/addons/optionsmenu/gui/pauseMenu.hpp b/addons/optionsmenu/gui/pauseMenu.hpp index 79aed168de..304cd7e8d1 100644 --- a/addons/optionsmenu/gui/pauseMenu.hpp +++ b/addons/optionsmenu/gui/pauseMenu.hpp @@ -45,7 +45,7 @@ class ACE_Open_SettingsMenu_BtnBase : ACE_gui_buttonBase { colorDisabled[] = {1,1,1,0.25}; colorFocused[] = {0,0,0,1}; colorText[] = {1,1,1,1}; - default = 0; + //default = 0; font = "RobotoCondensed"; idc = -1; period = 1.2; @@ -77,69 +77,63 @@ class ACE_Open_SettingsMenu_BtnBase : ACE_gui_buttonBase { class RscStandardDisplay; class RscDisplayMPInterrupt: RscStandardDisplay { class controls { - class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase {}; + class ACE_Open_settingsMenu_Btn: ACE_Open_SettingsMenu_BtnBase {}; }; }; + class RscDisplayInterruptEditorPreview: RscStandardDisplay { class controls { - class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase {}; + class ACE_Open_settingsMenu_Btn: ACE_Open_SettingsMenu_BtnBase {}; }; }; + class RscDisplayInterrupt: RscStandardDisplay { class controls { - class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase {}; + class ACE_Open_settingsMenu_Btn: ACE_Open_SettingsMenu_BtnBase {}; }; }; + class RscDisplayInterruptEditor3D: RscStandardDisplay { class controls { - class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase {}; + class ACE_Open_settingsMenu_Btn: ACE_Open_SettingsMenu_BtnBase {}; }; }; + class RscDisplayMovieInterrupt: RscStandardDisplay { class controls { - class ACE_Open_settingsMenu_Btn : ACE_Open_SettingsMenu_BtnBase {}; + class ACE_Open_settingsMenu_Btn: ACE_Open_SettingsMenu_BtnBase {}; }; }; + class RscDisplayMain: RscStandardDisplay { class controls { - class ACE_news_apex: RscControlsGroupNoHScrollbars { - idc = 80090; - x = "safezoneX + safezoneW - 10 * (pixelW * pixelGrid * 2) - (4 * pixelH)"; - y = "safezoneY + safezoneH - (3 * 2 + 1) * (pixelH * pixelGrid * 2) - 3 * (4 * pixelH)"; - w = "10 * (pixelW * pixelGrid * 2)"; - h = "2 * (pixelH * pixelGrid * 2)"; - class Controls { - class Background: RscPicture { - idc = 80091; - text = "\a3\Ui_f\data\GUI\Rsc\RscDisplayMain\gradientMods_ca.paa"; - colorText[] = {0,0,0,0.75}; - x = "(10 - 4 * 2) * (pixelW * pixelGrid * 2)"; - y = 0; - w = "4 * 2 * (pixelW * pixelGrid * 2)"; - h = "2 * (pixelH * pixelGrid * 2)"; - angle = 180; - }; - class BackgroundIcon: RscPicture { - idc = 80092; - text = "\a3\Ui_f\data\GUI\Rsc\RscDisplayMain\backgroundModsIcon_ca.paa"; - colorText[] = {0,0,0,0.75}; - x = "(10 - 2 * 2) * (pixelW * pixelGrid * 2)"; - y = 0; - w = "2 * 2 * (pixelW * pixelGrid * 2)"; - h = "2 * (pixelH * pixelGrid * 2)"; - angle = 180; - }; - class Icon: RscPicture { - idc = 80093; + class InfoMods: RscControlsGroupNoHScrollbars { + class Controls; + }; + + class InfoNews: InfoMods { + class Controls: Controls { + class Background; + class BackgroundIcon; + class Icon; + class News; + class Notification; + class Button; + }; + }; + + class ACE_news_apex: InfoNews { + idc = IDC_MAIN_INFO; + y = "safezoneY + safezoneH - (3 * 2 + 1) * (pixelH * pixelGrid * 2) - 4 * (4 * pixelH)"; + + class Controls: Controls { + class Background: Background {}; + class BackgroundIcon: BackgroundIcon {}; + class Icon: Icon { text = QPATHTOF(gui\aceMenuIcon_ca.paa); - colorText[] = {1,1,1,0.5}; - x = "(10 - 2) * (pixelW * pixelGrid * 2)"; - y = 0; - w = "2 * (pixelW * pixelGrid * 2)"; - h = "2 * (pixelH * pixelGrid * 2)"; }; class CurrentVersionInfo: RscText { - idc = 80094; + idc = IDC_MAIN_INFO_CURRENT_VERSION_INFO; style = 1; text = ""; sizeEx = "(pixelH * pixelGrid * 1.5)"; @@ -149,12 +143,13 @@ class RscDisplayMain: RscStandardDisplay { x = 0; y = 0; w = "(10 - 1.25 * 2) * (pixelW * pixelGrid * 2)"; - h = "2 * (pixelH * pixelGrid * 1)"; + h = "1 * (pixelH * pixelGrid * 2)"; onLoad = "(_this select 0) ctrlenable false;"; }; class HTTPVersionInfo: RscHTML { - idc = 80095; + idc = IDC_MAIN_INFO_NEWEST_VERSION_INFO; shadow = 0; + class H1 { sizeEx = "(pixelH * pixelGrid * 1.5)"; font = "RobotoCondensedLight"; @@ -167,24 +162,16 @@ class RscDisplayMain: RscStandardDisplay { class P: H1 { sizeEx = "(pixelH * pixelGrid * 1.5)"; }; + x = 0; - y = "2 * (pixelH * pixelGrid * 1)"; + y = "1 * (pixelH * pixelGrid * 2)"; w = "(10 - 1.25 * 2) * (pixelW * pixelGrid * 2)"; - h = "2 * (pixelH * pixelGrid * 1)"; + h = "1 * (pixelH * pixelGrid * 2)"; onLoad = "(_this select 0) ctrlenable false;"; }; - class Button: RscButtonMenu { - idc = 80096; - colorBackground[] = {0,0,0,0}; - colorBackgroundFocused[] = {0,0,0,0}; - colorBackground2[] = {0,0,0,0}; - x = 0; - y = 0; - w = "10 * (pixelW * pixelGrid * 2)"; - h = "2 * (pixelH * pixelGrid * 2)"; - + class Button: Button { tooltip = "Download latest and report issues:"; - url = "https://github.com/acemod/ACE3"; + url = "https://github.com/acemod/ACE3/releases"; }; }; }; diff --git a/addons/optionsmenu/init_loadMainMenuBox.sqf b/addons/optionsmenu/init_loadMainMenuBox.sqf index a9b8f5a02a..894bd45124 100644 --- a/addons/optionsmenu/init_loadMainMenuBox.sqf +++ b/addons/optionsmenu/init_loadMainMenuBox.sqf @@ -13,17 +13,47 @@ * * Public: No */ +#include "\a3\ui_f\hpp\defineResinclDesign.inc" #include "script_component.hpp" +params ["_display"]; +private _controlsGroup = _display displayCtrl IDC_MAIN_INFO; + //Need to load from profileNamespace because ace_settings might not be init if world = empty if (profileNamespace getVariable [QGVAR(showNewsOnMainMenu), true]) then { - ((_this select 0) displayCtrl 80090) ctrlShow true; + _controlsGroup ctrlShow true; - private _ace3VersionStr = (getText (configFile >> "CfgPatches" >> "ace_main" >> "versionStr")) select [0,5]; - ((_this select 0) displayCtrl 80094) ctrlSetText format ["Version: %1", _ace3VersionStr]; - ((_this select 0) displayCtrl 80095) htmlLoad "http://ace3mod.com/version.html"; + private _fnc_onSetFocus = { + params ["_control"]; + private _controlsGroup = ctrlParentControlsGroup _control; + + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BACKGROUND) ctrlSetTextColor [1,1,1,1]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BACKGROUND_ICON) ctrlSetTextColor [1,1,1,1]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_ICON) ctrlSetTextColor [0,0,0,1]; + }; + + private _fnc_onKillFocus = { + params ["_control"]; + private _controlsGroup = ctrlParentControlsGroup _control; + + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BACKGROUND) ctrlSetTextColor [0,0,0,0.75]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BACKGROUND_ICON) ctrlSetTextColor [0,0,0,0.75]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_ICON) ctrlSetTextColor [1,1,1,0.5]; + }; + + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BUTTON) ctrlAddEventHandler ["MouseEnter", _fnc_onSetFocus]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BUTTON) ctrlAddEventHandler ["SetFocus", _fnc_onSetFocus]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BUTTON) ctrlAddEventHandler ["MouseExit", _fnc_onKillFocus]; + (_controlsGroup controlsGroupCtrl IDC_MAIN_INFO_BUTTON) ctrlAddEventHandler ["KillFocus", _fnc_onKillFocus]; + + private _versionStr = getText (configFile >> "CfgPatches" >> "ace_main" >> "versionStr") splitString "."; + _versionStr resize 3; // MAJOR, MINOR, PATCH + _versionStr = _versionStr joinString "."; + + (_display displayCtrl IDC_MAIN_INFO_CURRENT_VERSION_INFO) ctrlSetText format ["Version: %1", _versionStr]; + (_display displayCtrl IDC_MAIN_INFO_NEWEST_VERSION_INFO) htmlLoad "https://ace3mod.com/version.html"; } else { - ((_this select 0) displayCtrl 80090) ctrlShow false; + _controlsGroup ctrlShow false; }; /* diff --git a/addons/optionsmenu/script_component.hpp b/addons/optionsmenu/script_component.hpp index 8fac89ba9a..c13e915702 100644 --- a/addons/optionsmenu/script_component.hpp +++ b/addons/optionsmenu/script_component.hpp @@ -17,6 +17,10 @@ #include "\z\ace\addons\main\script_macros.hpp" +#define IDC_MAIN_INFO 80090 +#define IDC_MAIN_INFO_CURRENT_VERSION_INFO 80091 +#define IDC_MAIN_INFO_NEWEST_VERSION_INFO 80092 + #define MENU_TAB_OPTIONS 0 #define MENU_TAB_COLORS 1 diff --git a/addons/optionsmenu/stringtable.xml b/addons/optionsmenu/stringtable.xml index 6d5b70baa7..5b43574561 100644 --- a/addons/optionsmenu/stringtable.xml +++ b/addons/optionsmenu/stringtable.xml @@ -14,6 +14,8 @@ Opzioni ACE ACE オプション ACE 옵션 + ACE 设定 + ACE 設定 Fix Animation @@ -24,10 +26,12 @@ Napraw animację Corriger animation Animációk kijavítása - Fixa l'animazione + Sistema l'animazione Arrumar Animação アニメーションを修正 동작 고정 + 修复动作BUG + 修復動作BUG Reset All @@ -42,6 +46,8 @@ Resetar Tudo すべて初期化 모두 초기화 + 重置为预设值 + 重置為預設值 Colors @@ -56,6 +62,8 @@ Cores 색상 + 颜色 + 顏色 Options @@ -70,6 +78,8 @@ Opzioni オプション 옵션 + 中文化由[MR]Diss制作 + 設定 Values @@ -84,6 +94,8 @@ Valores + 数值 + 數值 Setting: @@ -98,6 +110,8 @@ Opção: 設定: 설정: + 设定: + 設定: Export @@ -112,6 +126,8 @@ Exportar 出力 내보내기 + 输出 + 輸出 Open Export Menu @@ -126,6 +142,8 @@ Abrir menu de exportação 出力メニューを開く 내보내기 메뉴 열기 + 开启输出选单 + 開啟輸出選單 String input. @@ -140,6 +158,8 @@ Input de String 文字列の入力 문자열 입력 + 输入数值 + 輸入數值 Array. Seperate elements by using ,. @@ -150,10 +170,12 @@ Tableau. Séparation par ,. Tabulka. Odděl elementy použitím ,. Array. Válasszad el az elemeket vesszővel. - Array. Separa gli elementi usando ,. + Vettor. Separa gli elementi usando ,. Vetor. Separe elementos usando *,*. アライ。,を使うことで区別できます。 배열. 요소를 ,. 로 나눔 + 阵列. 使用','来做每个值的区隔. + 陣列. 使用','來做每個值的區隔. Number @@ -168,6 +190,8 @@ Número 숫자 + 数字 + 數字 Uknown input type @@ -182,6 +206,8 @@ Tipo desonhecido de input 不明な入力です 불분명한 입력입니다 + 未知输入类型 + 未知輸入類型 Save input @@ -196,6 +222,8 @@ Salvar input 入力を保存 입력 저장 + 储存输入 + 儲存輸入 Include Client Settings @@ -210,6 +238,8 @@ Incluir opções do cliente クライアント設定を含む 클라이언트 설정 포함 + 包含客户端设定 + 包含客戶端設定 Exclude Client Settings @@ -224,6 +254,8 @@ Excluir opções do cliente クライアント設定を実行する 클라이언트 설정 제외 + 不包含客户端设定 + 不包含客戶端設定 Settings exported to clipboard @@ -238,6 +270,8 @@ Opções exportadas para o clipboard. クリップボードに設定を出力する 클립보드로 설정 내보내기 + 设定输出至剪贴簿 + 設定輸出至剪貼簿 Option Menu UI Scaling @@ -252,6 +286,8 @@ Proporzioni della interfaccia utente オプション メニューにあるユーザ インタフェイスの大きさ 옵션메뉴 UI 비례도 + 调整设定选单视窗大小 + 調整設定選單視窗大小 Allow Config Export [ACE] @@ -266,6 +302,8 @@ Consenti Esportazione del Config [ACE] 設定の出力を許可 [ACE] 설정 내보내기 허가 [ACE] + 允许配置导出 [ACE] + 允許配置導出 [ACE] Allow @@ -280,6 +318,8 @@ Consenti 許可 허가 + 允许 + 允許 Allow export of all settings to a server config formatted. @@ -294,6 +334,8 @@ Consenti esportazione di tutti i parametri ad config formato per server. 全ての設定をサーバ用設定の形式へと出力できるようにします。 모든 설정을 서버 설정 형식으로 내보내는것을 허락합니다. + 允许导出所有设定成伺服器配置格式的档案. + 允許導出所有設定成伺服器配置格式的檔案. When allowed, you have access to the settings modification and export in SP. Clicking export will place the formated config on your clipboard. @@ -308,6 +350,8 @@ Quando consentito, hai accesso alle modifiche delle impostazioni ed esportazione in SP. Cliccando Esporta piazzera il config formattato sul tuo Blocco Note. 許可の場合、あなたは設定の変更と出力をシングルプレイで可能です。出力をクリックすると、サーバ用設定の形式となっている設定がクリップボードに保存されます。 허락하는 경우 싱글플레이에서 설정의 변경과 내보내기가 가능해집니다. 내보내기를 눌러서 서버 형성의 설정을 클립보드로 보냅니다. + 当本功能开启时, 你将能在单人模式中调整并输出设定. 点击输出按钮后将会让相关设定参数复制到剪贴簿上. + 當本功能開啟時, 你將能在單人模式中調整並輸出設定. 點擊輸出按鈕後將會讓相關設定參數複製到剪貼簿上. Hide @@ -322,6 +366,8 @@ Nascondi 非表示 숨기기 + 隐藏 + 隱藏 Top right, downwards @@ -336,6 +382,8 @@ In Alto a Destra, verso il Basso 右上、下側 오른쪽 위에서 아래로 + 右上角, 向下 + 右上角, 向下 Top right, to the left @@ -350,6 +398,8 @@ In Alto a Destra, verso Sinistra 右上、左詰 오른쪽 위에서 왼쪽으로 + 右上角, 向左 + 右上角, 向左 Top left, downwards @@ -364,6 +414,8 @@ In Alto a Sinistra, verso il Basso 左上、下側 왼쪽 위에서 아래로 + 左上角, 向下 + 左上角, 向下 Top left, to the right @@ -378,6 +430,8 @@ In Alto a Sinistra, verso Destra 右上、右詰 왼쪽 위에서 오른쪽으로 + 左上角, 向右 + 左上角, 向右 Top @@ -392,6 +446,8 @@ Alto 上側 상단 + 上方 + 上方 Bottom @@ -406,6 +462,8 @@ Basso 下側 하단 + 下方 + 下方 Debug To Clipboard @@ -420,6 +478,8 @@ Debug su Blocco Note クリップボードへデバッグ 디버그를 클립보드로 + 复制除错讯息至剪贴簿 + 複製除錯訊息至剪貼簿 Sends debug information to RPT and clipboard. @@ -434,6 +494,8 @@ Invia informazioni di debug all'RPT e al Blocco Note デバッグ情報の RPT とクリップボードに送ります。 디버그 정보를 보고하기 및 클립보드에 복사하기 위해 보냅니다. + 复制除错讯息至剪贴簿与RPT报告档中. + 複製除錯訊息至剪貼簿與RPT報告檔中. Headbug Fix @@ -445,9 +507,11 @@ Fix Headbug Fix Headbug Corregir error de cabeza (headbug) - Sistema Headbug + Sistema Bug della Testa ヘッドバグ修正 헤드버그 수정 + 修复动作BUG + 修復動作BUG Resets your animation state. @@ -462,6 +526,8 @@ Resetta il tuo stato animazione 現在のアニメーションの状況を初期化します。 자신의 동작 상태 초기화 + 当ACE发生动作BUG时, 点此修复. + 當ACE發生動作BUG時, 點此修復. ACE News @@ -473,9 +539,11 @@ Nouveautés ACE ACE hírek Новости ACE - News ACE + Novità ACE ACE からのお知らせ ACE 새소식 + ACE新闻 + ACE新聞 Show News on Main Menu @@ -490,6 +558,8 @@ Mostra News nel Menù Princinpale メイン メニュにお知らせを表示します 메인메뉴에 새소식을 표시합니다 + 显示新闻消息于主选单 + 顯示新聞消息於主選單 All Categories @@ -503,6 +573,8 @@ Toutes les catégories 全カテゴリ 모든 카테고리 + 全局设定 + 全局設定 Logistics @@ -516,6 +588,8 @@ Logistique ロジスティクス 보급 + 后勤设定 + 後勤設定 diff --git a/addons/overheating/CfgVehicles.hpp b/addons/overheating/CfgVehicles.hpp index a096754ce3..2d6a48b7b3 100644 --- a/addons/overheating/CfgVehicles.hpp +++ b/addons/overheating/CfgVehicles.hpp @@ -68,62 +68,62 @@ class CfgVehicles { class FIA_Box_Base_F; class Box_NATO_Support_F: NATO_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class B_supplyCrate_F: ReammoBox_F { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class Box_East_Support_F: EAST_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class O_supplyCrate_F: B_supplyCrate_F { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class Box_IND_Support_F: IND_Box_Base { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class Box_FIA_Support_F: FIA_Box_Base_F { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class I_supplyCrate_F: B_supplyCrate_F { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class IG_supplyCrate_F: ReammoBox_F { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class C_supplyCrate_F: ReammoBox_F { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,2); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,2); }; }; class ACE_Box_Misc: Box_NATO_Support_F { - class TransportItems { - MACRO_ADDITEM(ACE_SpareBarrel,6); + class TransportMagazines { + MACRO_ADDMAGAZINE(ACE_SpareBarrel,6); }; }; }; diff --git a/addons/overheating/functions/fnc_canCheckSpareBarrelsTemperatures.sqf b/addons/overheating/functions/fnc_canCheckSpareBarrelsTemperatures.sqf index 29c08275ef..ae0dc760d3 100644 --- a/addons/overheating/functions/fnc_canCheckSpareBarrelsTemperatures.sqf +++ b/addons/overheating/functions/fnc_canCheckSpareBarrelsTemperatures.sqf @@ -6,12 +6,16 @@ * 0: Player * * Return Value: - * Bool + * Bool + * + * Example: + * [bob] call ace_overheating_fnc_canCheckSpareBarrelsTemperatures * * Public: No */ #include "script_component.hpp" -params ["_unit"]; + +params ["_player"]; //Get the classname of the spare barrel for the weapon private _weaponBarrelClass = getText (configFile >> 'CfgWeapons' >> currentWeapon _player >> QGVAR(barrelClassname)); @@ -22,4 +26,4 @@ if(_weaponBarrelClass == "") then { //Check if the player has the barrel and the weapon can have its barrel swapped private _canCheckTemperature = GVAR(enabled) && {_weaponBarrelClass in magazines _player}; -_canCheckTemperature; \ No newline at end of file +_canCheckTemperature; diff --git a/addons/overheating/functions/fnc_canSwapBarrel.sqf b/addons/overheating/functions/fnc_canSwapBarrel.sqf index e183490439..560183e382 100644 --- a/addons/overheating/functions/fnc_canSwapBarrel.sqf +++ b/addons/overheating/functions/fnc_canSwapBarrel.sqf @@ -5,8 +5,12 @@ * Arguments: * 0: Player * 1: Weapon + * * Return Value: - * Bool + * Bool + * + * Example: + * [bob, "weapon"] call ace_overheating_fnc_canSwapBarrel * * Public: No */ @@ -23,4 +27,4 @@ if(_weaponBarrelClass == "") then { _weaponBarrelClass = "ACE_SpareBarrel"; }; //If the player has the spare barrel then it can be swapped -(_weaponBarrelClass in magazines _unit) \ No newline at end of file +(_weaponBarrelClass in magazines _unit) diff --git a/addons/overheating/functions/fnc_canUnjam.sqf b/addons/overheating/functions/fnc_canUnjam.sqf index 610fa9ca22..f2ab7e8cc6 100644 --- a/addons/overheating/functions/fnc_canUnjam.sqf +++ b/addons/overheating/functions/fnc_canUnjam.sqf @@ -6,7 +6,10 @@ * 0: Player * * Return Value: - * Bool + * Bool + * + * Example: + * [bob] call ace_overheating_fnc_canUnjam * * Public: No */ diff --git a/addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf b/addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf index 8a634409ee..a0c0ba12de 100644 --- a/addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf +++ b/addons/overheating/functions/fnc_checkSpareBarrelsTemperatures.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_overheating_fnc_checkSpareBarrelsTemperature + * * * Public: No */ diff --git a/addons/overheating/functions/fnc_firedEH.sqf b/addons/overheating/functions/fnc_firedEH.sqf index d641e82d07..d690b85aa7 100644 --- a/addons/overheating/functions/fnc_firedEH.sqf +++ b/addons/overheating/functions/fnc_firedEH.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * call ace_overheating_fnc_firedEH + * * Public: No */ #include "script_component.hpp" @@ -94,7 +97,7 @@ if (GVAR(showParticleEffects) && {(CBA_missionTime > ((_unit getVariable [QGVAR( // Only compute jamming for the local player if (_unit != ACE_player) exitWith {END_COUNTER(firedEH);}; -_jamChance = _jamChance * ([[0.5, 1.5, 15, 150], 3 * _scaledTemperature] call EFUNC(common,interpolateFromArray)); +_jamChance = _jamChance * ([[0.5, 1, 2, 8, 20, 150], 5 * _scaledTemperature] call EFUNC(common,interpolateFromArray)); // increase jam chance on dusty grounds if prone (and at ground level) if ((stance _unit == "PRONE") && {((getPosATL _unit) select 2) < 1}) then { diff --git a/addons/overheating/functions/fnc_getWeaponData.sqf b/addons/overheating/functions/fnc_getWeaponData.sqf index b1525f0f41..21f6f156b8 100644 --- a/addons/overheating/functions/fnc_getWeaponData.sqf +++ b/addons/overheating/functions/fnc_getWeaponData.sqf @@ -10,10 +10,15 @@ * 1: slowdownFactor * 2: jamChance * + * Example: + * ["gun"] call ace_overheating_fnc_getWeaponData + * * Public: No */ #include "script_component.hpp" +params ["_weapon"]; + // Look in the cache first private _weaponData = GVAR(cacheWeaponData) getVariable _weapon; if (!isNil "_weaponData") exitWith {_weaponData}; diff --git a/addons/overheating/functions/fnc_handleTakeEH.sqf b/addons/overheating/functions/fnc_handleTakeEH.sqf index b4eecbf236..0196629a45 100644 --- a/addons/overheating/functions/fnc_handleTakeEH.sqf +++ b/addons/overheating/functions/fnc_handleTakeEH.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * [bob, thing, "thing"] call ace_overheating_fnc_handleTakeEH + * * Public: No */ #include "script_component.hpp" diff --git a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf index fa5cdd1c43..6a155a29b7 100644 --- a/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf +++ b/addons/overheating/functions/fnc_loadCoolestSpareBarrel.sqf @@ -13,6 +13,9 @@ * Return Value: * None * + * Example: + * [bob, bob, "weapon",5, 2] call ace_overheating_fnc_loadCoolestSpareBarrel + * * * Public: No */ diff --git a/addons/overheating/functions/fnc_overheat.sqf b/addons/overheating/functions/fnc_overheat.sqf index 84ab7e152f..c29f2d5dd1 100644 --- a/addons/overheating/functions/fnc_overheat.sqf +++ b/addons/overheating/functions/fnc_overheat.sqf @@ -13,6 +13,9 @@ * Return Value: * None * + * Example: + * [bob, "weapon", "muzzle", "ammo", "magazine", bullet] call ace_overheating_fnc_overheat + * * Public: No */ #include "script_component.hpp" diff --git a/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf index 3855f96d3f..0486dd5208 100644 --- a/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf +++ b/addons/overheating/functions/fnc_sendSpareBarrelsTemperaturesHint.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [bob, "bob"] call ace_overheating_fnc_sendSpareBarrelsIsTemperaturesHint + * * * Public: No */ diff --git a/addons/overheating/functions/fnc_swapBarrelCallback.sqf b/addons/overheating/functions/fnc_swapBarrelCallback.sqf index 0e4326cfea..99cf8298f5 100644 --- a/addons/overheating/functions/fnc_swapBarrelCallback.sqf +++ b/addons/overheating/functions/fnc_swapBarrelCallback.sqf @@ -31,7 +31,7 @@ if (_assistant isEqualTo _gunner) then { [localize LSTRING(SwappedBarrel), QPATHTOF(UI\spare_barrel_ca.paa)] call EFUNC(common,displayTextPicture); private _temp = _gunner getVariable [format [QGVAR(%1_temp), _weapon], 0]; -private _barrelMass = 0.50 * (getNumber (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "mass") / 22.0) max 1.0; +private _barrelMass = METAL_MASS_RATIO * (getNumber (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "mass") / 22.0) max 1.0; // Instruct the server to load the coolest spare barrel into the weapon and // store the removed barrel with the former weapon temperature. The server diff --git a/addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf b/addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf index 0bb240533c..aaefe4f037 100644 --- a/addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf +++ b/addons/overheating/functions/fnc_updateSpareBarrelsTemperaturesThread.sqf @@ -18,7 +18,10 @@ private _pairs = []; TRACE_1("updateSpareBarrelsTemperaturesThread1",GVAR(storedSpareBarrels)); -[GVAR(storedSpareBarrels), {_pairs pushBack [_key, _value];}] call CBA_fnc_hashEachPair; +[GVAR(storedSpareBarrels), { + //IGNORE_PRIVATE_WARNING ["_key", "_value"]; + _pairs pushBack [_key, _value]; +}] call CBA_fnc_hashEachPair; TRACE_1("updateSpareBarrelsTemperaturesThread2",_pairs); { _x params ["_barrelMagazineID","_value"]; diff --git a/addons/overheating/functions/fnc_updateTemperature.sqf b/addons/overheating/functions/fnc_updateTemperature.sqf index 51b4b13ae3..f56fc05e92 100644 --- a/addons/overheating/functions/fnc_updateTemperature.sqf +++ b/addons/overheating/functions/fnc_updateTemperature.sqf @@ -27,7 +27,7 @@ private _timeVarName = format [QGVAR(%1_time), _weapon]; private _temperature = _unit getVariable [_tempVarName, 0]; private _lastTime = _unit getVariable [_timeVarName, 0]; -private _barrelMass = 0.50 * (getNumber (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "mass") / 22.0) max 1.0; +private _barrelMass = METAL_MASS_RATIO * (getNumber (configFile >> "CfgWeapons" >> _weapon >> "WeaponSlotsInfo" >> "mass") / 22.0) max 1.0; // Calculate cooling _temperature = [_temperature, _barrelMass, CBA_missionTime - _lastTime] call FUNC(calculateCooling); diff --git a/addons/overheating/script_component.hpp b/addons/overheating/script_component.hpp index 2eef9e2309..d7dde59da2 100644 --- a/addons/overheating/script_component.hpp +++ b/addons/overheating/script_component.hpp @@ -17,6 +17,7 @@ #include "\z\ace\addons\main\script_macros.hpp" #define TEMP_TOLERANCE 50 +#define METAL_MASS_RATIO 0.55 #ifdef DEBUG_MODE_FULL #define TRACE_PROJECTILE_INFO(BULLET) _vdir = vectorNormalized velocity BULLET; _dir = (_vdir select 0) atan2 (_vdir select 1); _up = asin (_vdir select 2); _mv = vectorMagnitude velocity BULLET; TRACE_3("adjusted projectile",_dir,_up,_mv); diff --git a/addons/overheating/stringtable.xml b/addons/overheating/stringtable.xml index 8c2eef1732..37e40c2dc1 100644 --- a/addons/overheating/stringtable.xml +++ b/addons/overheating/stringtable.xml @@ -14,6 +14,8 @@ Visualizza testo in caso di inceppamento 弾詰りを文章で表示 탄걸림의 경우 화면에 표시 + 在卡弹时显示提示讯息 + 在卡彈時顯示提示訊息 Display a notification whenever your weapon gets jammed @@ -28,6 +30,8 @@ Visualizza una notifica in caso la tua arma si inceppasse 持っている武器が弾詰りをすると、通知を表示します 총알이 무기에 걸릴경우 화면에 알림을 띄웁니다 + 当武器卡弹时显示提示讯息 + 當武器卡彈時顯示提示訊息 Overheating Particle Effects @@ -41,6 +45,8 @@ Эффект частиц при перегреве 過熱の視覚効果 과열 입자 효과 + 枪管过热特效 + 槍管過熱特效 Show particle effects when weapon overheats @@ -54,6 +60,8 @@ Zobrazit částicové efekty když se zbraň přehřije 武器を過熱すると視覚表現を表示します 무기가 과열되면 입자 효과를 보여줍니다 + 显示枪管过热特效 + 顯示槍管過熱特效 Overheating Particle Effects for everyone @@ -67,6 +75,8 @@ Эффект частиц при перегреве для всех 過熱の視覚表現を全体に与えます 모두에게 과열 입자 효과 적용 + 显示其他玩家的枪管过热特效 + 顯示其他玩家的槍管過熱特效 Show particle effects when other players weapon overheats @@ -80,6 +90,8 @@ Zobrazit částicové efekty když se zbraň přehřije jinému hráči 他のプレイヤの過熱の視覚表現を表示します 모든 인원이 무기가 과열될시 입자 효과가 나타납니다. + 当其他玩家的武器过热时显示特效 + 當其他玩家的武器過熱時顯示特效 Overheating Dispersion @@ -93,6 +105,8 @@ Důsledky přehřátí zbraně 過熱による精度の低下 과열 명중률 저하 + 过热散射 + 過熱散射 Overheated weapons will be less accurate and have decreased muzzle velocity. Applys for all players. @@ -106,6 +120,8 @@ Přehřátá zbraň bude méně přesná a bude mít menší úsťovou rychlost. Platí pro všechny hráče. 過熱は精度を減少させたり、初速を低下させます、これは全プレイヤに適用します。 무기 과열시 무기의 명중률이 저하되고 총구속도가 감소합니다. 이는 모든 플레이어에게 적용됩니다. + 过热的武器将会有打不准和减少射击初速的情况. 适用于所有玩家 + 過熱的武器將會有打不準和減少射擊初速的情況. 適用於所有玩家 Unjam weapon on reload @@ -119,6 +135,8 @@ Исправлять клин при перезарядке 再装填による弾詰りの解消 재장전시 탄걸림 해결 + 重装弹匣以解决卡弹 + 重裝彈匣以解決卡彈 Reloading clears a weapon jam. @@ -132,6 +150,8 @@ Перезарядка устраняет заклинивание оружия. 再装填により、弾詰りを除去します。 탄걸림이 재장전시 해결됩니다. + 利用重装弹匣来解决卡弹 + 利用重裝彈匣來解決卡彈 Chance of unjam failing @@ -145,6 +165,8 @@ Шанс неудачи при устранении клина 弾詰りの除去を失敗する可能性 탄걸림 해결 시도 실패확률 + 解决卡弹失败机率 + 解決卡彈失敗機率 Probability that an unjam action might fail, requiring to be repeated. @@ -158,6 +180,8 @@ Pravděpodobnost, že uvolnění zbraně selže, je proto nutné tuto akci opakovat. 弾詰りの除去を失敗する可能性が生まれ、もう一度動作を行う必要があります。 탄걸림 해결 시도시 실패할 확률이 있습니다. 이는 다시 탄걸림 해결을 시도해야함을 의미합니다. + 清除卡弹时有可能会失败, 需要反覆进行清枪 + 清除卡彈時有可能會失敗, 需要反覆進行清槍 Spare barrel @@ -172,6 +196,8 @@ Canna di ricambio 予備銃身 예비 총열 + 备用枪管 + 備用槍管 Use to swap barrel. @@ -186,6 +212,8 @@ Usata per cambiare la canna. 予備銃身に交換する。 총열을 바꿀때 사용합니다. + 用来更换枪管 + 用來更換槍管 Weapon jammed! @@ -200,6 +228,8 @@ Arma inceppata! 武器が詰まった! 탄걸림! + 武器卡弹! + 武器卡彈! Clear jam @@ -214,6 +244,8 @@ Ripulisci l'arma 弾詰りを除去する 탄걸림 해결 + 清除卡弹 + 清除卡彈 Jam cleared @@ -228,6 +260,8 @@ Arma pronta al fuoco 弾詰りが除去された 탄걸림 해결됨 + 卡弹已清除 + 卡彈已清除 Jam failed to clear @@ -241,6 +275,8 @@ Не удалось исправить клин 弾詰りの除去に失敗した 탄걸림 해결 실패 + 卡弹未能清除 + 卡彈未能清除 Swap barrel @@ -255,6 +291,8 @@ Sostiuisci la canna 銃身を交換 총열 교체 + 换枪管 + 換槍管 Swapping barrel... @@ -266,9 +304,11 @@ Смена ствола... Cső kicserélése folyamatban... Substituindo cano... - Sto sostituendo la canna... + Sostituendo la canna... 銃身を交換中・・・ 총열 교체중... + 换枪管中... + 換槍管中... Swapped barrel @@ -283,6 +323,8 @@ Canna sostituita 銃身を交換した 교체된 총열 + 完成换枪管 + 完成換槍管 Check weapon temperature @@ -297,6 +339,8 @@ Проверить температуру оружия 武器の温度を測る 무기 온도 확인 + 检查枪管温度 + 檢查槍管溫度 Check weapon temperature @@ -311,6 +355,8 @@ Controlla la temperatura della canna 武器の温度を測る 무기 온도 확인 + 检查枪管温度 + 檢查槍管溫度 Checking temperature... @@ -321,10 +367,12 @@ Hőmérséklet ellenőrzése... Zjišťuju teplotu... Conferindo temperatura... - Sto controllando la temperatura... + Controllando la temperatura... Проверка температуры... 温度を測っている・・・ 무기 온도 확인중... + 检查枪管温度中... + 檢查槍管溫度中... Check spare barrels temperatures @@ -336,6 +384,9 @@ Sprawdź temperaturę zapasowych luf Temperatur der Wechselläufe prüfen 총열 온도 확인 + Controlla la temperatura della canna di ricambio + 检查备用枪管温度 + 檢查備用槍管溫度 Checking spare barrels temperatures... @@ -347,6 +398,9 @@ Sprawdzanie temperatury zapasowych luf... Prüfe Temperatur der Wechselläufe ... 총열 온도 확인중... + Controllando la temperatura della canna di ricambio... + 检查枪管温度中... + 檢查槍管溫度中... Temperature @@ -361,6 +415,8 @@ Температура 温度 온도 + 温度 + 溫度 Cool Spare Barrel/s @@ -372,6 +428,9 @@ Zimne zapasowe lufy Kalte Wechselläufe 차가운 예비 총열 + Canna/e di Ricambio Fredda + 备用枪管温度正常 + 備用槍管溫度正常 Warm Spare Barrel/s @@ -383,6 +442,9 @@ Ciepłe zapasowe lufy Warme Wechselläufe 따뜻한 예비 총열 + Canna/e di Ricambio Calda + 备用枪管温度偏温 + 備用槍管溫度偏溫 Hot Spare Barrel/s @@ -394,6 +456,9 @@ Gorące zapasowe lufy Heiße Wechselläufe 뜨거운 예비 총열 + Canna/e di Ricambio Molto Calda + 备用枪管温度偏热 + 備用槍管溫度偏熱 Very Hot Spare Barrel/s @@ -405,6 +470,9 @@ Bardzo gorące zapasowe lufy Sehr heiße Wechselläufe 매우 뜨거운 예비 총열 + Canna/e di Ricambio Estremamente Calda + 备用枪管温度过热 + 備用槍管溫度過熱 Extremely Hot Spare Barrel/s @@ -416,6 +484,9 @@ Ekstremalnie gorące zapasowe lufy Extrem heiße Wechselläufe 엄청나게 뜨거운 예비 총열 + Canna/e di Ricambio Rovente + 备用枪管温度超级热 + 備用槍管溫度超級熱 Overheating Enabled @@ -428,6 +499,9 @@ 過熱を有効化 Przegrzewanie włączone 과열 활성화 + Surriscaldamento Abilitato + 启用过热 + 啟用過熱 Master enable for the overheating/jamming module @@ -438,6 +512,9 @@ Główny włącznik modułu przegrzewania/zacinania się broni Hauptschalter, um die Überhitzung-/Ladehemmung-Module zu aktivieren 과열/탄걸림 최종 활성화 + Abilitazione master per il modulo di surriscaldamento / inceppamento + 启用枪管过热/干扰模块 + 啟用槍管過熱/干擾模塊 diff --git a/addons/overpressure/functions/fnc_getDistance.sqf b/addons/overpressure/functions/fnc_getDistance.sqf index febb4ea747..5f76c12d1a 100644 --- a/addons/overpressure/functions/fnc_getDistance.sqf +++ b/addons/overpressure/functions/fnc_getDistance.sqf @@ -3,9 +3,9 @@ * Calculate the distance to the first intersection of a line * * Arguments: - * 0: Pos ASL of origin (ARRAY> + * 0: Pos ASL of origin * 1: Direction - * 2: Max distance to search + * 2: Max distance to search * 3: Shooter * * Return Value: @@ -38,7 +38,7 @@ private _distance = 999; if (isNull _intersectObject) then { //Terrain: // Calculate the angle between the terrain and the back blast direction - _angle = 90 - acos (- (_surfaceNormal vectorDotProduct _direction)); + private _angle = 90 - acos (- (_surfaceNormal vectorDotProduct _direction)); TRACE_3("Terrain Intersect",_surfaceNormal,_direction,_angle); // Angles is below 25deg, no backblast at all if (_angle < 25) exitWith {_distance = 999}; diff --git a/addons/overpressure/stringtable.xml b/addons/overpressure/stringtable.xml index 420c732b8d..7a9edc06e5 100644 --- a/addons/overpressure/stringtable.xml +++ b/addons/overpressure/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -6,12 +6,20 @@ 過圧の距離係数 초과압력 거리 계수 Mnożnik dystansu nadciśnienia + Coéfficient de distance pour la surpression + Coefficente Distanza Sovrapressione + 高压影响距离系数 + 高壓影響距離係數 Scales the overpressure effect [Default: 1] 過圧効果の範囲 [標準: 1] 초과압력의 효과 크기 [기본설정: 1] Skaluje efekt nadciśnienia [Domyślne: 1] + Échelonne les effets de la surpression [Par défaut : 1] + Scala l'effetto di sovrapressione [Predefinito: 1] + 高压影响的范围 [预设: 1] + 高壓影響的範圍 [預設: 1] - \ No newline at end of file + diff --git a/addons/parachute/functions/fnc_checkCutParachute.sqf b/addons/parachute/functions/fnc_checkCutParachute.sqf index 94137ed67c..67fd842f92 100644 --- a/addons/parachute/functions/fnc_checkCutParachute.sqf +++ b/addons/parachute/functions/fnc_checkCutParachute.sqf @@ -3,10 +3,10 @@ * Reset the parachute system. * * Arguments: - * 0: Object + * 0: Object * * Return Value: - * Boolean + * Boolean * * Example: * [player] call FUNC(checkCutParachute); @@ -15,4 +15,4 @@ */ #include "script_component.hpp" params ["_unit"]; -(vehicle _unit isKindOf 'ParachuteBase' && !(_unit getVariable [QGVAR(chuteIsCut),false]) && (_unit getVariable [QGVAR(hasReserve),false])) \ No newline at end of file +(vehicle _unit isKindOf 'ParachuteBase' && !(_unit getVariable [QGVAR(chuteIsCut),false]) && (_unit getVariable [QGVAR(hasReserve),false])) diff --git a/addons/parachute/functions/fnc_cutParachute.sqf b/addons/parachute/functions/fnc_cutParachute.sqf index f7aa86991b..34b808d9d8 100644 --- a/addons/parachute/functions/fnc_cutParachute.sqf +++ b/addons/parachute/functions/fnc_cutParachute.sqf @@ -3,10 +3,10 @@ * Cut Parachute and delete Old * * Arguments: - * 0: Object + * 0: Object * * Return Value: - * Nothing + * None * * Example: * [player] call FUNC(cutParachute); diff --git a/addons/parachute/functions/fnc_handleInfoDisplayChanged.sqf b/addons/parachute/functions/fnc_handleInfoDisplayChanged.sqf index b27849a0c8..7bb500912e 100644 --- a/addons/parachute/functions/fnc_handleInfoDisplayChanged.sqf +++ b/addons/parachute/functions/fnc_handleInfoDisplayChanged.sqf @@ -3,11 +3,14 @@ * Hides the height and velocity display while freefalling or parachuting on higher difficulties. * * Arguments: - * Stuff from infoDisplayChanged eventhandler. + * Stuff from infoDisplayChanged eventhandler. * * Return Value: * None * + * Example: + * [?] call ACE_parachute_fnc_handleInfoDisplayChanged + * * Public: No */ #include "script_component.hpp" diff --git a/addons/parachute/functions/fnc_storeParachute.sqf b/addons/parachute/functions/fnc_storeParachute.sqf index 8980a8ff82..adc513fbf9 100644 --- a/addons/parachute/functions/fnc_storeParachute.sqf +++ b/addons/parachute/functions/fnc_storeParachute.sqf @@ -1,18 +1,19 @@ /* - * Author: joko // Jonas - * Add the Reserve Parachute to Units or Save Backpack if is a Parachute in Unit - * - * Arguments: - * None - * - * Return Value: - * 0: Unit - * - * Example: - * None - * - * Public: No - */ + * Author: joko // Jonas + * Add the Reserve Parachute to Units or Save Backpack if is a Parachute in Unit + * + * Arguments: + * None + * + * Return Value: + * 0: Unit + * + * Example: + * call ace_parachute_fnc_storeParachute + * + * Public: No + */ + #include "script_component.hpp" params ["_unit"]; diff --git a/addons/parachute/stringtable.xml b/addons/parachute/stringtable.xml index c8482eeda7..c57f50b54f 100644 --- a/addons/parachute/stringtable.xml +++ b/addons/parachute/stringtable.xml @@ -14,6 +14,8 @@ Altímetro 高度計 고도계 + 高度计 + 高度計 Altimeter Watch @@ -28,6 +30,8 @@ Relógio Altímetro 時計型高度計 고도계 시계 + 高度计手表 + 高度計手錶 Used to show height, descent rate and the time. @@ -42,6 +46,8 @@ Usado para mostrar altura, taxa de descida e o tempo. 高度や降下率、時間を見るのに使います。 높이와, 하강속도 그리고 시간을 보여줍니다. + 用于显示高度, 下降率和时间. + 用於顯示高度, 下降率和時間. Non-Steerable Parachute @@ -56,6 +62,8 @@ Para-querdas não controlável 非操作型パラシュート 비-조종 낙하산 + 非可操控降落伞 + 非可操控降落傘 Cut Parachute @@ -70,6 +78,8 @@ Taglia Paracadute パラシュートを切断 낙하산 자르기 + 剪断降落伞 + 剪斷降落傘 Reserve Parachute @@ -84,6 +94,8 @@ Paracadute di Riserva 予備パラシュート 예비 낙하산 + 备用降落伞 + 備用降落傘 diff --git a/addons/quickmount/$PBOPREFIX$ b/addons/quickmount/$PBOPREFIX$ new file mode 100644 index 0000000000..2251bc0b6e --- /dev/null +++ b/addons/quickmount/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\quickmount diff --git a/addons/quickmount/ACE_Settings.hpp b/addons/quickmount/ACE_Settings.hpp new file mode 100644 index 0000000000..bcb45f8c43 --- /dev/null +++ b/addons/quickmount/ACE_Settings.hpp @@ -0,0 +1,41 @@ +class ACE_Settings { + class GVAR(enabled) { + value = 0; + typeName = "BOOL"; + category = CSTRING(Category); + displayName = ECSTRING(common,Enabled); + description = CSTRING(KeybindDescription); + isClientSettable = 1; + force = 0; + }; + class GVAR(distance) { + value = DEFAULT_DISTANCE; + typeName = "SCALAR"; + category = CSTRING(Category); + displayName = CSTRING(Distance); + description = CSTRING(DistanceDescription); + isClientSettable = 0; + force = 0; + values[] = {"0m", "1m", "2m", "3m", "4m", "5m", "6m", "7m", "8m", "9m", "10m"}; + }; + class GVAR(speed) { + value = DEFAULT_SPEED; + typeName = "SCALAR"; + category = CSTRING(Category); + displayName = CSTRING(Speed); + description = CSTRING(SpeedDescription); + isClientSettable = 0; + force = 0; + values[] = {"0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"}; + }; + class GVAR(priority) { + value = DEFAULT_PRIORITY; + typeName = "SCALAR"; + category = CSTRING(Category); + displayName = CSTRING(Priority); + description = CSTRING(PriorityDescription); + isClientSettable = 1; + force = 0; + values[] = {"Driver", "Gunner", "Commander", "Passenger"}; + }; +}; diff --git a/addons/quickmount/CfgEventHandlers.hpp b/addons/quickmount/CfgEventHandlers.hpp new file mode 100644 index 0000000000..9426fa861e --- /dev/null +++ b/addons/quickmount/CfgEventHandlers.hpp @@ -0,0 +1,17 @@ +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preStart)); + }; +}; + +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + clientInit = QUOTE(call COMPILE_FILE(XEH_postInitClient)); + }; +}; diff --git a/addons/quickmount/CfgVehicles.hpp b/addons/quickmount/CfgVehicles.hpp new file mode 100644 index 0000000000..758e462900 --- /dev/null +++ b/addons/quickmount/CfgVehicles.hpp @@ -0,0 +1,37 @@ +class CfgVehicles { + class ACE_Module; + class GVAR(module): ACE_Module { + author = ECSTRING(common,ACETeam); + category = "ACE"; + displayName = CSTRING(Category); + function = QFUNC(moduleInit); + scope = 2; + isGlobal = 1; + isTriggerActivated = 0; + isDisposable = 0; + icon = QPATHTOF(UI\Icon_Module_QuickMount_ca.paa); + class Arguments { + class enabled { + displayName = ECSTRING(common,Enabled); + description = CSTRING(KeybindDescription); + typeName = "BOOL"; + defaultValue = 1; + }; + class distance { + displayName = CSTRING(Distance); + description = CSTRING(DistanceDescription); + typeName = "NUMBER"; + defaultValue = DEFAULT_DISTANCE; + }; + class speed { + displayName = CSTRING(Speed); + description = CSTRING(SpeedDescription); + typeName = "NUMBER"; + defaultValue = DEFAULT_SPEED; + }; + }; + class ModuleDescription { + description = CSTRING(KeybindDescription); + }; + }; +}; diff --git a/addons/quickmount/README.md b/addons/quickmount/README.md new file mode 100644 index 0000000000..6e11fc8ae4 --- /dev/null +++ b/addons/quickmount/README.md @@ -0,0 +1,9 @@ +ace_quickmount +============ +Adds a keybind to quickly enter the vehicle you are directly looking at. + +## Maintainers + +The people responsible for merging changes to this component or answering potential questions. + +- [Kingsley](https://github.com/jameslkingsley) diff --git a/addons/quickmount/UI/Icon_Module_QuickMount_ca.paa b/addons/quickmount/UI/Icon_Module_QuickMount_ca.paa new file mode 100644 index 0000000000..425f744a47 Binary files /dev/null and b/addons/quickmount/UI/Icon_Module_QuickMount_ca.paa differ diff --git a/addons/quickmount/XEH_PREP.hpp b/addons/quickmount/XEH_PREP.hpp new file mode 100644 index 0000000000..eba2f68296 --- /dev/null +++ b/addons/quickmount/XEH_PREP.hpp @@ -0,0 +1,2 @@ +PREP(getInNearest); +PREP(moduleInit); diff --git a/addons/quickmount/XEH_postInitClient.sqf b/addons/quickmount/XEH_postInitClient.sqf new file mode 100644 index 0000000000..718c08b843 --- /dev/null +++ b/addons/quickmount/XEH_postInitClient.sqf @@ -0,0 +1,10 @@ +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; + +["ACE3 Movement", QGVAR(mount), [localize LSTRING(KeybindName), localize LSTRING(KeybindDescription)], "", { + if (!dialog) then { + call FUNC(getInNearest); + }; + false +}] call CBA_fnc_addKeybind; diff --git a/addons/quickmount/XEH_preInit.sqf b/addons/quickmount/XEH_preInit.sqf new file mode 100644 index 0000000000..b47cf6628d --- /dev/null +++ b/addons/quickmount/XEH_preInit.sqf @@ -0,0 +1,9 @@ +#include "script_component.hpp" + +ADDON = false; + +PREP_RECOMPILE_START; +#include "XEH_PREP.hpp" +PREP_RECOMPILE_END; + +ADDON = true; diff --git a/addons/quickmount/XEH_preStart.sqf b/addons/quickmount/XEH_preStart.sqf new file mode 100644 index 0000000000..022888575e --- /dev/null +++ b/addons/quickmount/XEH_preStart.sqf @@ -0,0 +1,3 @@ +#include "script_component.hpp" + +#include "XEH_PREP.hpp" diff --git a/addons/quickmount/config.cpp b/addons/quickmount/config.cpp new file mode 100644 index 0000000000..063897aebc --- /dev/null +++ b/addons/quickmount/config.cpp @@ -0,0 +1,18 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"ace_common"}; + author = ECSTRING(common,ACETeam); + authors[] = {"Kingsley"}; + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" +#include "ACE_Settings.hpp" +#include "CfgVehicles.hpp" diff --git a/addons/quickmount/functions/fnc_getInNearest.sqf b/addons/quickmount/functions/fnc_getInNearest.sqf new file mode 100644 index 0000000000..43e66e648c --- /dev/null +++ b/addons/quickmount/functions/fnc_getInNearest.sqf @@ -0,0 +1,98 @@ +/* + * Author: Kingsley + * Mount the player in the vehicle they are directly looking at based on their distance. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * [] call ace_quickmount_fnc_getInNearest; + * + * Public: No + */ +#include "script_component.hpp" + +if (!GVAR(enabled) || + {isNull ACE_player} || + {vehicle ACE_player != ACE_player} || + {!alive ACE_player} || + {ACE_player getVariable ["ace_unconscious", false]} +) exitWith {}; + +private _start = AGLtoASL (ACE_player modelToWorldVisual (ACE_player selectionPosition "pilot")); +private _end = (_start vectorAdd (getCameraViewDirection ACE_player vectorMultiply GVAR(distance))); +private _objects = lineIntersectsSurfaces [_start, _end, ACE_player]; +private _target = (_objects param [0, []]) param [2, objNull]; + +if (locked _target in [2,3]) exitWith { + [localize LSTRING(VehicleLocked)] call EFUNC(common,displayTextStructured); + true +}; + +TRACE_1("",_target); + +if (!isNull _target && + {alive _target} && + {{_target isKindOf _x} count ["Air","LandVehicle","Ship","StaticMortar"] > 0} && + {([ACE_player, _target] call EFUNC(common,canInteractWith))} && + {speed _target <= GVAR(speed)} + ) then { + + + if (GVAR(priority) > 3 || GVAR(priority) < 0) then { + GVAR(priority) = 0; + }; + + private _seats = ["Driver", "Gunner", "Commander", "Cargo"]; + private _sortedSeats = [_seats select GVAR(priority)]; + _seats deleteAt GVAR(priority); + _sortedSeats append _seats; + + + private _hasAction = false; + scopeName "SearchForSeat"; + { + private _desiredRole = _x; + { + _x params ["_unit", "_role", "_cargoIndex", "_turretPath"]; + if ((isNull _unit) || {!alive _unit}) then { + private _effectiveRole = toLower _role; + + if ((_effectiveRole in ["driver", "gunner"]) && {unitIsUAV _target}) exitWith {}; // Ignoring UAV Driver/Gunner + if ((_effectiveRole == "driver") && {(getNumber (([_target] call CBA_fnc_getObjectConfig) >> "hasDriver")) == 0}) exitWith {}; // Ignoring Non Driver (static weapons) + if (_effectiveRole == "turret") then { + if ((getNumber (([_target, _turretPath] call CBA_fnc_getTurret) >> "isCopilot")) == 1) exitWith { + _effectiveRole = "driver"; + }; + if (_cargoIndex < 0) exitWith { + _effectiveRole = "gunner"; // door gunners / 2nd turret + }; + _effectiveRole = "cargo"; // probably a FFV + }; + TRACE_2("",_effectiveRole,_x); + if (_effectiveRole != _desiredRole) exitWith {}; + + if (_role == "Turret") then { + ACE_player action ["GetIn" + _role, _target, _turretPath]; + TRACE_3("Geting In",_x,_role,_turretPath); + } else { + ACE_player action ["GetIn" + _role, _target]; + TRACE_3("Geting In",_x,_role); + }; + + _hasAction = true; + breakTo "SearchForSeat"; + }; + } forEach (fullCrew [_target, "", true]); + } forEach _sortedSeats; + + if (!_hasAction) then { + TRACE_1("no empty seats",_hasAction); + [localize LSTRING(VehicleFull)] call EFUNC(common,displayTextStructured); + }; +}; + +true diff --git a/addons/quickmount/functions/fnc_moduleInit.sqf b/addons/quickmount/functions/fnc_moduleInit.sqf new file mode 100644 index 0000000000..92df787737 --- /dev/null +++ b/addons/quickmount/functions/fnc_moduleInit.sqf @@ -0,0 +1,25 @@ +/* + * Author: Kingsley + * Initializes the quick-mount module. + * + * Arguments: + * 0: The module logic + * 1: Units (Unused) + * 2: Activated + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +if (!isServer) exitWith {}; + +params ["_logic", "", "_activated"]; + +if (!_activated) exitWith {}; + +[_logic, QGVAR(enabled), "enabled"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(distance), "distance"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(speed), "speed"] call EFUNC(common,readSettingFromModule); diff --git a/addons/quickmount/functions/script_component.hpp b/addons/quickmount/functions/script_component.hpp new file mode 100644 index 0000000000..a91c3e1665 --- /dev/null +++ b/addons/quickmount/functions/script_component.hpp @@ -0,0 +1 @@ +#include "\z\ace\addons\quickmount\script_component.hpp" diff --git a/addons/quickmount/script_component.hpp b/addons/quickmount/script_component.hpp new file mode 100644 index 0000000000..a0ec1debd0 --- /dev/null +++ b/addons/quickmount/script_component.hpp @@ -0,0 +1,21 @@ +#define COMPONENT quickmount +#define COMPONENT_BEAUTIFIED Quick Mount +#include "\z\ace\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE +// #define ENABLE_PERFORMANCE_COUNTERS + +#ifdef DEBUG_ENABLED_QUICKMOUNT + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_QUICKMOUNT + #define DEBUG_SETTINGS DEBUG_SETTINGS_QUICKMOUNT +#endif + +#include "\z\ace\addons\main\script_macros.hpp" + +#define DEFAULT_DISTANCE 3 +#define DEFAULT_SPEED 18 +#define DEFAULT_PRIORITY 0 diff --git a/addons/quickmount/stringtable.xml b/addons/quickmount/stringtable.xml new file mode 100644 index 0000000000..057e6482a7 --- /dev/null +++ b/addons/quickmount/stringtable.xml @@ -0,0 +1,84 @@ + + + + + Quick Mount + Entrata Rapida + クイック マウント + 快速搭乘 + 快速搭乘 + + + Vehicle quick mount + Fahrzeug schnell montieren + Pojazd szybkie mocowanie + Entrata rapida veicolo + 車両クイック マウント + 快速搭乘载具 + 快速搭乘載具 + + + Quickly enter the vehicle you are directly looking at. + Entra velocemente nel veicolo che stai guardando. + 直接見ている車両へ迅速に搭乗します。 + 快速进入你正在看的载具之中. + 快速進入你正在看的載具之中. + + + Vehicle Full + Veicolo Pieno + 車両は満員 + 载具已满 + 載具已滿 + + + Distance + Distanza + 距離 + 距离 + 距離 + + + Maximum distance to check for vehicles. + Distanza massima per controllare i veicoli. + 車両を確認できる最大距離 + 最大可检查载具的距离. + 最大可檢查載具的距離. + + + Vehicle Locked + Veicolo Bloccato. + 車両は施錠されている + 载具已上锁 + 載具已上鎖 + + + Maximum Speed (km/h) + Velocità Massima (km/h) + 最高速度 (km/h) + 最高速度 (公里/小时) + 最高速度 (公里/小時) + + + Maximum vehicle speed (km/h) allowed for player entry + Velocità massima del veicolo (km/h) consentita per far salire un giocatore + プレイヤーが搭乗できる限界速度 (km/h) + 设置玩家能在最高多少的速度之下进入载具. + 設置玩家能在最高多少的速度之下進入載具. + + + Prioritize Seat + Priorità Sedile + 優先席 + 优先座位 + 優先座位 + + + Seat priority on entry + Priorità del sedile in entrata + 搭乗の際の優先順位 + 优先想进入哪个座位. + 優先想進入哪個座位. + + + diff --git a/addons/rangecard/functions/fnc_calculateRangeCard.sqf b/addons/rangecard/functions/fnc_calculateRangeCard.sqf index 2cdcb391f5..67952f27f4 100644 --- a/addons/rangecard/functions/fnc_calculateRangeCard.sqf +++ b/addons/rangecard/functions/fnc_calculateRangeCard.sqf @@ -22,10 +22,10 @@ * 16: Use advanced ballistics config? * * Return Value: - * Nothing + * None * * Example: - * call ace_rangecard_fnc_calculateRangeCard + * [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ,14, 15, 16, true] call ace_rangecard_fnc_calculateRangeCard * * Public: No */ @@ -115,7 +115,7 @@ while {_TOF < 6 && (_bulletPos select 1) < _targetRange} do { _bulletPos = _bulletPos vectorAdd (_bulletVelocity vectorMultiply (_deltaT * 0.5)); _bulletVelocity = _bulletVelocity vectorAdd (_bulletAccel vectorMultiply _deltaT); _bulletPos = _bulletPos vectorAdd (_bulletVelocity vectorMultiply (_deltaT * 0.5)); - + if (atan((_bulletPos select 2) / (abs(_bulletPos select 1) + 1)) < -2.254) exitWith {}; _TOF = _TOF + _deltaT; diff --git a/addons/rangecard/functions/fnc_canCopy.sqf b/addons/rangecard/functions/fnc_canCopy.sqf index c9e0a05d0e..8984192669 100644 --- a/addons/rangecard/functions/fnc_canCopy.sqf +++ b/addons/rangecard/functions/fnc_canCopy.sqf @@ -6,10 +6,10 @@ * unit * * Return Value: - * canShow (bool) + * canShow * * Example: - * [] call ace_rangecard_fnc_canCopy + * [bob] call ace_rangecard_fnc_canCopy * * Public: No */ diff --git a/addons/rangecard/functions/fnc_canShow.sqf b/addons/rangecard/functions/fnc_canShow.sqf index 330788ee7c..d81bba9485 100644 --- a/addons/rangecard/functions/fnc_canShow.sqf +++ b/addons/rangecard/functions/fnc_canShow.sqf @@ -6,7 +6,7 @@ * Nothing * * Return Value: - * canShow (bool) + * canShow * * Example: * [] call ace_rangecard_fnc_canShow diff --git a/addons/rangecard/functions/fnc_canShowCopy.sqf b/addons/rangecard/functions/fnc_canShowCopy.sqf index e78c64cc89..b6e2d8d68d 100644 --- a/addons/rangecard/functions/fnc_canShowCopy.sqf +++ b/addons/rangecard/functions/fnc_canShowCopy.sqf @@ -6,7 +6,7 @@ * Nothing * * Return Value: - * canShow (bool) + * canShow * * Example: * [] call ace_rangecard_fnc_canShowCopy diff --git a/addons/rangecard/functions/fnc_onCloseDialog.sqf b/addons/rangecard/functions/fnc_onCloseDialog.sqf index f5d971f22f..68d12c8c84 100644 --- a/addons/rangecard/functions/fnc_onCloseDialog.sqf +++ b/addons/rangecard/functions/fnc_onCloseDialog.sqf @@ -1,3 +1,19 @@ +/* + * Author: joko // Jonas + * Add the Reserve Parachute to Units or Save Backpack if is a Parachute in Unit + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * None + * + * Public: No + */ + #include "script_component.hpp" uiNamespace setVariable ['RangleCard_Display', nil]; diff --git a/addons/rangecard/functions/fnc_openRangeCard.sqf b/addons/rangecard/functions/fnc_openRangeCard.sqf index 4a9945e513..5801b594be 100644 --- a/addons/rangecard/functions/fnc_openRangeCard.sqf +++ b/addons/rangecard/functions/fnc_openRangeCard.sqf @@ -6,10 +6,10 @@ * Open copy? * * Return Value: - * Nothing + * None * * Example: - * call ace_rangecard_fnc_openRangeCard + * [true] call ace_rangecard_fnc_openRangeCard * * Public: No */ diff --git a/addons/rangecard/functions/fnc_updateRangeCard.sqf b/addons/rangecard/functions/fnc_updateRangeCard.sqf index e62a5ee418..3328600dc3 100644 --- a/addons/rangecard/functions/fnc_updateRangeCard.sqf +++ b/addons/rangecard/functions/fnc_updateRangeCard.sqf @@ -10,10 +10,10 @@ * 4: weapon class * * Return Value: - * Nothing + * None * * Example: - * [mode] call ace_rangecard_fnc_openRangeCard + * [1, 2, "ammo", "magazine", "weapon"] call ace_rangecard_fnc_openRangeCard * * Public: No */ @@ -174,7 +174,7 @@ if (isNil {_cacheEntry}) then { [_scopeBaseAngle,_boreHeight,_airFriction,_mv,_x,EGVAR(scopes,zeroReferenceBarometricPressure),EGVAR(scopes,zeroReferenceHumidity),100,4,1,GVAR(rangeCardEndRange),_bc,_dragModel,_atmosphereModel,_transonicStabilityCoef,_forEachIndex,_useABConfig] call FUNC(calculateRangeCard); } forEach [-15, -5, 5, 10, 15, 20, 25, 30, 35]; } else { - [_scopeBaseAngle,_boreHeight,_airFriction,_muzzleVelocity,15,EGVAR(scopes,zeroReferenceBarometricPressure),EGVAR(scopes,zeroReferenceHumidity),100,4,1,GVAR(rangeCardEndRange),_bc,_dragModel,_atmosphereModel,_transonicStabilityCoef,4,_useABConfig] call FUNC(calculateRangeCard); + [_scopeBaseAngle,_boreHeight,_airFriction,_muzzleVelocity,15,EGVAR(scopes,zeroReferenceBarometricPressure),EGVAR(scopes,zeroReferenceHumidity),100,4,1,GVAR(rangeCardEndRange),_bc,_dragModel,_atmosphereModel,_transonicStabilityCoef,3,_useABConfig] call FUNC(calculateRangeCard); }; for "_i" from 0 to 9 do { diff --git a/addons/rangecard/stringtable.xml b/addons/rangecard/stringtable.xml index 33b0994567..5862981e16 100644 --- a/addons/rangecard/stringtable.xml +++ b/addons/rangecard/stringtable.xml @@ -14,6 +14,8 @@ Tavola Balistica 射表 사거리표 + 弹道射表 + 彈道射表 50 METER increments -- MRAD/MRAD (reticle/turrets) @@ -28,6 +30,8 @@ Incrementi per 50 METRI - MRAD/MRAD (reticolo/torrette) 50 メートル増やす -- MRAD/MRAD (照準線/砲塔) 50 미터 늘리기 -- MRAD/MRAD (조준선/포탑) + 50公尺增量 -- 毫弧度/毫弧度 (瞄镜分划线/调整纽) + 50公尺增量 -- 毫弧度/毫弧度 (瞄鏡分劃線/調整紐) Open Range Card @@ -42,6 +46,8 @@ Apri Tavola Balistica 射表を開く 사거리표 열기 + 开启弹道射表 + 開啟彈道射表 Open Range Card Copy @@ -56,6 +62,8 @@ Apri Copia Tavola Balistica 複製された射表を開く 복제 사거리표 열기 + 开启弹道射表副本 + 開啟彈道射表副本 Open Range Card @@ -70,6 +78,8 @@ Apri Tavola Balistica 射表を開く 사거리표 열기 + 开启弹道射表 + 開啟彈道射表 Open Range Card Copy @@ -84,6 +94,8 @@ Apri Copia Tavola Balistica 複製された射表を開く 복제 사거리표 열기 + 开启弹道射表副本 + 開啟彈道射表副本 Copy Range Card @@ -98,6 +110,8 @@ Copia Tavola Balistica 射表を複製する 사거리표 복제 + 复制弹道射表 + 複製彈道射表 diff --git a/addons/realisticnames/CfgMagazines.hpp b/addons/realisticnames/CfgMagazines.hpp index a6a64a4a15..d32ee3ec2c 100644 --- a/addons/realisticnames/CfgMagazines.hpp +++ b/addons/realisticnames/CfgMagazines.hpp @@ -417,4 +417,65 @@ class CfgMagazines { class SmokeShellYellow: SmokeShell { displayName = CSTRING(SmokeShellYellow_Name); }; + + + // 1.70 Pylon Magazines (Should Match Weapon Name) + class 2Rnd_Missile_AA_04_F; + class PylonRack_1Rnd_Missile_AA_04_F: 2Rnd_Missile_AA_04_F { + displayName = "AIM-9 Sidewinder"; // [vanilla: Falchion-22 - Missile_AA_04_Plane_CAS_01_F] + }; + class 4Rnd_AAA_missiles; + class PylonRack_1Rnd_AAA_missiles: 4Rnd_AAA_missiles { + displayName = "AIM-132 ASRAAM"; // [vanilla: ASRAAM - missiles_ASRAAM] + }; + class 4Rnd_GAA_missiles; + class PylonRack_1Rnd_GAA_missiles: 4Rnd_GAA_missiles { + displayName = "AIM-120A AMRAAM"; // [vanilla: Zephyr - missiles_Zephyr] + }; + class 6Rnd_Missile_AGM_02_F; + class PylonRack_1Rnd_Missile_AGM_02_F: 6Rnd_Missile_AGM_02_F { + displayName = "AGM-65 Maverick"; // [vanilla: Macer - Missile_AGM_02_Plane_CAS_01_F] + }; + class PylonRack_3Rnd_Missile_AGM_02_F: PylonRack_1Rnd_Missile_AGM_02_F { + displayName = "AGM-65 Maverick 3x"; // [vanilla: Macer 3x - Missile_AGM_02_Plane_CAS_01_F] + }; + class 2Rnd_LG_scalpel; + class PylonRack_1Rnd_LG_scalpel: 2Rnd_LG_scalpel { + displayName = "9K121 Vikhr"; // [vanilla: Scalpel - missiles_SCALPEL] + }; + class PylonRack_3Rnd_LG_scalpel: PylonRack_1Rnd_LG_scalpel { + displayName = "9K121 Vikhr 3x"; // [vanilla: Scalpel 3x - missiles_SCALPEL] + }; + class PylonRack_4Rnd_LG_scalpel: PylonRack_1Rnd_LG_scalpel { + displayName = "9K121 Vikhr 4x"; // [vanilla: Scalpel 4x - missiles_SCALPEL] + }; + class PylonRack_7Rnd_Rocket_04_HE_F: 7Rnd_Rocket_04_HE_F { + displayName = "Hydra 70 7x HE"; // [vanilla: Shrieker 7x HE - Rocket_04_HE_Plane_CAS_01_F] + }; + class PylonRack_7Rnd_Rocket_04_AP_F: 7Rnd_Rocket_04_AP_F { + displayName = "Hydra 70 7x AP"; // [vanilla: Shrieker 7x AP - Rocket_04_AP_Plane_CAS_01_F] + }; + class 12Rnd_missiles; + class PylonRack_12Rnd_missiles: 12Rnd_missiles { + displayName = "Hydra 70"; // [vanilla: DAR - missiles_DAR] + }; + class PylonRack_20Rnd_Rocket_03_HE_F: 20Rnd_Rocket_03_HE_F { + displayName = "S-8 20x HE"; // [vanilla: Tratnyr 20x HE - Rocket_03_HE_Plane_CAS_02_F] + }; + class PylonRack_20Rnd_Rocket_03_AP_F: 20Rnd_Rocket_03_AP_F { + displayName = "S-8 20x AP"; // [vanilla: Tratnyr 20x AP - Rocket_03_AP_Plane_CAS_02_F] + }; + class 2Rnd_Missile_AA_03_F; + class PylonRack_1Rnd_Missile_AA_03_F: 2Rnd_Missile_AA_03_F { + displayName = "Wympel R-73"; // [vanilla: Sahr-3 - Missile_AA_03_Plane_CAS_02_F] + }; + class 4Rnd_Missile_AGM_01_F; + class PylonRack_1Rnd_Missile_AGM_01_F: 4Rnd_Missile_AGM_01_F { + displayName = "Kh-25MTP"; // [vanilla: Sharur - Missile_AGM_01_Plane_CAS_02_F] + }; + class 2Rnd_Bomb_03_F; + class PylonMissile_1Rnd_Bomb_03_F: 2Rnd_Bomb_03_F { + displayName = "FAB-250M-54"; // [vanilla: LOM-250G - Bomb_03_Plane_CAS_02_F] + }; + }; diff --git a/addons/realisticnames/CfgVehicles.hpp b/addons/realisticnames/CfgVehicles.hpp index f31b7ffeac..3d217164e5 100644 --- a/addons/realisticnames/CfgVehicles.hpp +++ b/addons/realisticnames/CfgVehicles.hpp @@ -293,18 +293,27 @@ class CfgVehicles { displayName = CSTRING(Heli_Attack_01_Name); }; + class Heli_Attack_01_dynamicLoadout_base_F; + class B_Heli_Attack_01_dynamicLoadout_F: Heli_Attack_01_dynamicLoadout_base_F { + displayName = CSTRING(Heli_Attack_01_Name); + }; + class Heli_Light_01_unarmed_base_F; class B_Heli_Light_01_F: Heli_Light_01_unarmed_base_F { displayName = CSTRING(Heli_Light_01_Name); }; + class Heli_Light_01_civil_base_F: Heli_Light_01_unarmed_base_F { + displayName = CSTRING(Heli_Light_01_civil_Name); + }; class Heli_Light_01_armed_base_F; class B_Heli_Light_01_armed_F: Heli_Light_01_armed_base_F { displayName = CSTRING(Heli_Light_01_armed_Name); }; - class Heli_Light_01_civil_base_F: Heli_Light_01_unarmed_base_F { - displayName = CSTRING(Heli_Light_01_civil_Name); + class Heli_Light_01_dynamicLoadout_base_F; + class B_Heli_Light_01_dynamicLoadout_F: Heli_Light_01_dynamicLoadout_base_F { + displayName = CSTRING(Heli_Light_01_armed_Name); }; class Heli_Transport_03_base_F; @@ -328,6 +337,11 @@ class CfgVehicles { displayName = CSTRING(Heli_Light_02_unarmed_Name); }; + class Heli_Light_02_dynamicLoadout_base_F; + class O_Heli_Light_02_dynamicLoadout_F: Heli_Light_02_dynamicLoadout_base_F { + displayName = CSTRING(Heli_Light_02_Name); + }; + class Heli_light_03_base_F; class I_Heli_light_03_F: Heli_light_03_base_F { displayName = CSTRING(Heli_light_03_Name); @@ -338,6 +352,11 @@ class CfgVehicles { displayName = CSTRING(Heli_light_03_unarmed_Name); }; + class Heli_light_03_dynamicLoadout_base_F; + class I_Heli_light_03_dynamicLoadout_F: Heli_light_03_dynamicLoadout_base_F { + displayName = CSTRING(Heli_light_03_Name); + }; + class Heli_Transport_02_base_F; class I_Heli_Transport_02_F: Heli_Transport_02_base_F { displayName = CSTRING(Heli_Transport_02_Name); @@ -349,11 +368,21 @@ class CfgVehicles { displayName = CSTRING(Plane_CAS_01_Name); }; + class Plane_CAS_01_dynamicLoadout_base_F; + class B_Plane_CAS_01_dynamicLoadout_F: Plane_CAS_01_dynamicLoadout_base_F { + displayName = CSTRING(Plane_CAS_01_Name); + }; + class Plane_CAS_02_base_F; class O_Plane_CAS_02_F: Plane_CAS_02_base_F { displayName = CSTRING(Plane_CAS_02_Name); }; + class Plane_CAS_02_dynamicLoadout_base_F; + class O_Plane_CAS_02_dynamicLoadout_F: Plane_CAS_02_dynamicLoadout_base_F { + displayName = CSTRING(Plane_CAS_02_Name); + }; + class Plane_Fighter_03_base_F; class I_Plane_Fighter_03_CAS_F: Plane_Fighter_03_base_F { displayName = CSTRING(Plane_Fighter_03_CAS_Name); @@ -363,6 +392,11 @@ class CfgVehicles { displayName = CSTRING(Plane_Fighter_03_AA_Name); }; + class Plane_Fighter_03_dynamicLoadout_base_F; + class I_Plane_Fighter_03_dynamicLoadout_F: Plane_Fighter_03_dynamicLoadout_base_F { + displayName = CSTRING(Plane_Fighter_03_Name); + }; + // uavs class UAV_02_base_F; class B_UAV_02_F: UAV_02_base_F { @@ -375,7 +409,7 @@ class CfgVehicles { displayName = CSTRING(UAV_02_Name); }; - class UAV_02_CAS_base_F: UAV_02_base_F {}; + class UAV_02_CAS_base_F; class B_UAV_02_CAS_F: UAV_02_CAS_base_F { displayName = CSTRING(UAV_02_CAS_Name); }; @@ -386,6 +420,17 @@ class CfgVehicles { displayName = CSTRING(UAV_02_CAS_Name); }; + class UAV_02_dynamicLoadout_base_F; + class B_UAV_02_dynamicLoadout_F: UAV_02_dynamicLoadout_base_F { + displayName = CSTRING(UAV_02_Name); + }; + class O_UAV_02_dynamicLoadout_F: UAV_02_dynamicLoadout_base_F { + displayName = CSTRING(UAV_02_Name); + }; + class I_UAV_02_dynamicLoadout_F: UAV_02_dynamicLoadout_base_F { + displayName = CSTRING(UAV_02_Name); + }; + // pistols class Pistol_Base_F; class Weapon_hgun_P07_F: Pistol_Base_F { @@ -525,11 +570,11 @@ class CfgVehicles { class Weapon_SMG_02_F: Weapon_Base_F { displayName = CSTRING(SMG_02_Name); }; - + class Weapon_SMG_05_F: Weapon_Base_F { displayName = CSTRING(SMG_05); }; - + class Weapon_hgun_PDW2000_F: Weapon_Base_F { displayName = CSTRING(hgun_PDW2000_Name); }; diff --git a/addons/realisticnames/CfgWeapons.hpp b/addons/realisticnames/CfgWeapons.hpp index 3bc97b14ab..6aa3c7c3c8 100644 --- a/addons/realisticnames/CfgWeapons.hpp +++ b/addons/realisticnames/CfgWeapons.hpp @@ -319,7 +319,7 @@ class CfgWeapons { }; }; - class gatling_30mm: CannonCore { // This is a fictional veresion of the GSh-6-30, with 3 barrels + class gatling_30mm_base: CannonCore { // This is a fictional version of the GSh-6-30, with 3 barrels displayName = "GSh-3-30"; class LowROF: Mode_FullAuto { displayName = "GSh-3-30"; @@ -602,7 +602,7 @@ class CfgWeapons { class arifle_CTAR_GL_hex_F: arifle_CTAR_GL_base_F { displayName = CSTRING(arifle_CTAR_GL_hex); }; - + class arifle_CTARS_base_F; class arifle_CTARS_blk_F: arifle_CTARS_base_F { displayName = CSTRING(arifle_CTARS_blk); diff --git a/addons/realisticnames/dev_dumpPylon.sqf b/addons/realisticnames/dev_dumpPylon.sqf new file mode 100644 index 0000000000..df0d7ea4a5 --- /dev/null +++ b/addons/realisticnames/dev_dumpPylon.sqf @@ -0,0 +1,29 @@ +// [] execVM "z\ace\addons\realisticnames\dev_dumpPylon.sqf"; + +private _justLog = true; + +diag_log text format ["[Dumping Pylons] --------------------"]; +private _magazines = configProperties [configFile >> "CfgMagazines", "isClass _x", true]; +{ + private _pylonWeapon = getText (_x >> "pylonWeapon"); + if (_pylonWeapon != "") then { + private _weaponConfig = configFile >> "CfgWeapons" >> _pylonWeapon; + private _weaponName = getText (_weaponConfig >> "displayName"); + private _inherit = (configProperties [_x, "configName _x == 'displayName'", false]) isEqualTo []; + private _pylonMagName = getText (_x >> "displayName"); + if (_justLog) then { + if (!_inherit) then { + diag_log text format ["%1: [%2 vs %3]", configName _x, _pylonMagName, _weaponName]; + } else { + diag_log text format [" - %1: [%2 vs %3]", configName _x, _pylonMagName, _weaponName]; + }; + } else { + if (!_inherit) then { + diag_log text format ['class %1;', configName inheritsFrom _x]; + diag_log text format ['class %1: %2 {', configName _x, configName inheritsFrom _x]; + diag_log text format ['displayName = "%1"; [vanilla: %2 - %3]', _weaponName, _pylonMagName, _pylonWeapon]; + diag_log text format ['};', configName _x, configName inheritsFrom _x, _weaponName, _pylonMagName]; + }; + }; + }; +} forEach _magazines; diff --git a/addons/realisticnames/stringtable.xml b/addons/realisticnames/stringtable.xml index a490a78ab5..6ea746a671 100644 --- a/addons/realisticnames/stringtable.xml +++ b/addons/realisticnames/stringtable.xml @@ -14,6 +14,8 @@ XM312A XM312 XM312 + XM312重機槍 + XM312重机枪 XM312A @@ -28,6 +30,8 @@ XM312A XM312A XM312A + XM312A重機槍 + XM312A重机枪 XM312 (High) @@ -42,6 +46,8 @@ XM312 (Alta) XM312 (高) XM312 (높음) + XM312重機槍 (高射腳架) + XM312重机枪 (高射脚架) XM307 @@ -56,6 +62,8 @@ XM307 XM307 XM307 + XM307榴彈機槍 + XM307榴弹机枪 XM307A @@ -70,6 +78,8 @@ XM307A XM307A XM307A + XM307A榴彈機槍 + XM307A榴弹机枪 XM307 (High) @@ -84,6 +94,8 @@ XM307 (Alta) XM307 (高) XM307 (높음) + XM307榴彈機槍 (高射腳架) + XM307榴弹机枪 (高射脚架) Mini-Spike Launcher (AT) @@ -98,6 +110,8 @@ Lanciatore Mini-Spike (AC) ミニスパイク ランチャー (対戦) Mini-Spike Launcher (대전차) + "迷你長釘"導彈發射器 (反坦克) + "迷你长钉"导弹发射器 (反坦克) Mini-Spike Launcher (AA) @@ -112,6 +126,8 @@ Lanciatore Mini-Spike (AA) ミニスパイク ランチャー (対空) Mini-Spike Launcher (대공) + "迷你長釘"導彈發射器 (防空) + "迷你长钉"导弹发射器 (防空) YABHON-R3 @@ -126,6 +142,8 @@ YABHON-R3 YABHON-R3 YABHON-R3 + "亞伯罕-R3型"空中無人載具 + "亚伯罕-R3型"空中无人载具 YABHON-R3 (CAS) @@ -140,6 +158,8 @@ YABHON-R3 (CAS) YABHON-R3 (対地) YABHON-R3 (근접지원) + "亞伯罕-R3型"空中無人載具 (近空支援) + "亚伯罕-R3型"空中无人载具 (近空支援) M-ATV @@ -154,6 +174,8 @@ M-ATV M-ATV M-ATV + 防地雷反伏擊全地形車 + 防地雷反伏击全地形车 M-ATV (HMG) @@ -168,6 +190,8 @@ M-ATV (HMG) M-ATV (HMG) M-ATV (HMG) + 防地雷反伏擊全地形車 (重機槍) + 防地雷反伏击全地形车 (重机枪) M-ATV (GMG) @@ -182,6 +206,8 @@ M-ATV (GMG) M-ATV (GMG) M-ATV (GMG) + 防地雷反伏擊全地形車 (榴彈機槍) + 防地雷反伏击全地形车 (榴弹机枪) Merkava Mk IV M @@ -196,6 +222,8 @@ Merkava Mk IV M メルカバ Mk IV M Merkava Mk IV M + "梅卡瓦4代"主戰坦克 + "梅卡瓦4代"主战坦克 Merkava Mk IV LIC @@ -210,6 +238,8 @@ Merkava Mk IV LIC メルカバ Mk IV LIC Merkava Mk IV LIC + "梅卡瓦4代"主戰坦克 城市版 + "梅卡瓦4代"主战坦克 城市版 Sholef @@ -224,6 +254,8 @@ Sholef ショルフ Sholef + "神槍"自走炮 + "神枪"自走炮 Seara @@ -238,6 +270,8 @@ Seara シアラ Seara + "希拉"多管火箭車 + "希拉"多管火箭车 Namer @@ -252,6 +286,8 @@ Namer ネイマー Namer + "花豹"裝甲運兵車 + "花豹"装甲运兵车 Bardelas @@ -266,6 +302,8 @@ Bardelas バーラデラス Bardelas + "布萊德斯"防空車 + "布莱德斯"防空车 Badger IFV @@ -280,6 +318,8 @@ Badger IFV バッジ IFV Badger IFV + "蜜獾"步兵戰車 + "蜜獾"步兵战车 Nemmera @@ -294,6 +334,8 @@ Nemmera ネマラ Nemmera + "雌豹"戰鬥工程車 + "雌豹"战斗工程车 HEMTT Transport @@ -308,6 +350,8 @@ HEMTT da trasporto HEMTT 輸送型 HEMTT 수송 + 重型增程機動戰術卡車 (運輸) + 重型增程机动战术卡车 (运输) HEMTT Transport (covered) @@ -322,6 +366,8 @@ HEMTT da trasporto (coperto) HEMTT 輸送型 (幌) HEMTT 수송 (덮개) + 重型增程機動戰術卡車 (運輸, 棚布) + 重型增程机动战术卡车 (运输, 棚布) HEMTT @@ -336,6 +382,8 @@ HEMTT HEMTT HEMTT + 重型增程機動戰術卡車 + 重型增程机动战术卡车 HEMTT Container @@ -350,6 +398,8 @@ HEMTT portacontainer HEMTT コンテナ型 HEMTT 컨테이너 + 重型增程機動戰術卡車 (貨櫃) + 重型增程机动战术卡车 (货柜) HEMTT Medical @@ -364,6 +414,8 @@ HEMTT Medico HEMTT 救急車 HEMTT 의료 + 重型增程機動戰術卡車 (醫療) + 重型增程机动战术卡车 (医疗) HEMTT Ammo @@ -378,6 +430,8 @@ HEMTT di rifornimento munizioni HEMTT 弾薬給弾型 HEMTT 탄약 + 重型增程機動戰術卡車 (彈藥) + 重型增程机动战术卡车 (弹药) HEMTT Fuel @@ -392,6 +446,8 @@ HEMTT di rifornimento carburante HEMTT 燃料給油車 HEMTT 연료 + 重型增程機動戰術卡車 (燃油) + 重型增程机动战术卡车 (燃油) HEMTT Repair @@ -406,6 +462,8 @@ HEMTT Riparatore HEMTT 修理型 HEMTT 수리 + 重型增程機動戰術卡車 (維修) + 重型增程机动战术卡车 (维修) Fennek @@ -420,6 +478,8 @@ Fennek フェネック Fennek + "非洲小狐"防地雷反伏擊車 + "非洲小狐"防地雷反伏击车 Fennek (HMG) @@ -434,6 +494,8 @@ Fennek (HMG) フェネック (HMG) Fennek (HMG) + "非洲小狐"防地雷反伏擊車 (重機槍) + "非洲小狐"防地雷反伏击车 (重机枪) Fennek (GMG) @@ -448,6 +510,8 @@ Fennek (GMG) フェネック (GMG) Fennek (GMG) + "非洲小狐"防地雷反伏擊車 (榴彈機槍) + "非洲小狐"防地雷反伏击车 (榴弹机枪) Leopard 2SG @@ -462,6 +526,8 @@ Leopard 2SG レオパルド 2SG Leopard 2SG + "豹2型新加坡版"主戰坦克 + "豹2型新加坡版"主战坦克 FV510 Warrior @@ -476,6 +542,8 @@ FV510 Warrior FV510 ウォーリアー FV510 Warrior + FV510"戰士"步兵戰車 + FV510"战士"步兵战车 Pandur II @@ -490,6 +558,8 @@ Pandur II パンデュール II Pandur II + "潘德2型"裝甲運兵車 + "潘德2型"装甲运兵车 KamAZ Transport @@ -504,6 +574,8 @@ KamAZ da trasporto KamAZ 輸送型 KamAZ 수송 + "卡瑪斯"卡車 (運輸) + "卡玛斯"卡车 (运输) KamAZ Transport (covered) @@ -518,6 +590,8 @@ KamAZ da trasporto (coperto) KamAZ 輸送型 (幌) KamAZ 수송 (덮개) + "卡瑪斯"卡車 (運輸, 棚布) + "卡玛斯"卡车 (运输, 棚布) KamAZ Ammo @@ -532,6 +606,8 @@ KamAZ di rifornimento munizioni KamAZ 弾薬給弾型 KamAZ 탄약 + "卡瑪斯"卡車 (彈藥) + "卡玛斯"卡车 (弹药) KamAZ Fuel @@ -546,6 +622,8 @@ KamAZ di rifornimento carburante KamzAZ 燃料給油車 KamAZ 연료 + "卡瑪斯"卡車 (燃油) + "卡玛斯"卡车 (燃油) KamAZ Repair @@ -560,6 +638,8 @@ KamAZ riparatore KamzAZ 修理型 KamAZ 수리 + "卡瑪斯"卡車 (維修) + "卡玛斯"卡车 (维修) KamAZ Medical @@ -574,6 +654,8 @@ KamAZ Medico KamAZ 救急車 KamAZ 의료 + "卡瑪斯"卡車 (醫療) + "卡玛斯"卡车 (医疗) Punisher @@ -588,6 +670,8 @@ Punisher パニッシャー Punisher + "懲罰者"防地雷反伏擊車 + "惩罚者"防地雷反伏击车 Punisher (HMG) @@ -602,6 +686,8 @@ Punisher (HMG) パニッシャー (HMG) Punisher (HMG) + "懲罰者"防地雷反伏擊車 (重機槍) + "惩罚者"防地雷反伏击车 (重机枪) Punisher (GMG) @@ -616,6 +702,8 @@ Punisher (GMG) パニッシャー (GMG) Punisher (GMG) + "懲罰者"防地雷反伏擊車 (榴彈機槍) + "惩罚者"防地雷反伏击车 (榴弹机枪) T100 Black Eagle @@ -630,6 +718,8 @@ T100 Black Eagle T100 ブラック イーグル T100 Black Eagle + T100"黑鷹"主戰坦克 + T100"黑鹰"主战坦克 2S9 Sochor @@ -644,6 +734,8 @@ 2S9 Sochor 2S9 ソーカー 2S9 Sochor + 2S9"薩克爾"自走砲 + 2S9"萨克尔"自走炮 BM-2T Stalker @@ -658,6 +750,8 @@ BM-2T Stalker BM-2T ストーカー BM-2T Stalker + BM-2T"潛行者"步兵戰車 + BM-2T"潜行者"步兵战车 ZSU-35 Tigris @@ -672,6 +766,8 @@ ZSU-35 Tigris ZSU-35 ZSU-35 Tigris + ZSU-35"虎式"防空車 + ZSU-35"虎式"防空车 Otokar ARMA @@ -686,6 +782,8 @@ Otokar ARMA ティグリスOtokar アルマ Otokar ARMA + "奧托卡-阿爾默"裝甲運兵車 + "奥托卡-阿尔默"装甲运兵车 Typhoon Transport @@ -700,6 +798,8 @@ Typhoon da trasporto Typhoon 輸送型 Typhoon 수송 + "颱風"卡車 (運輸) + "台风"卡车 (运输) Typhoon Transport (covered) @@ -714,6 +814,8 @@ Typhoon da trasporto (coperto) Typhoon 輸送型 (幌) Typhoon 수송 (덮개) + "颱風"卡車 (運輸, 棚布) + "台风"卡车 (运输, 棚布) Typhoon Device @@ -728,6 +830,8 @@ Typhoon per dispositivo Typhoon デバイス型 Typhoon 장치 + "颱風"卡車 (精密設備) + "台风"卡车 (精密设备) Typhoon Ammo @@ -742,6 +846,8 @@ Typhoon di rifornimento munizioni Typhoon 弾薬給弾型 Typhoon 탄약 + "颱風"卡車 (彈藥) + "台风"卡车 (弹药) Typhoon Fuel @@ -756,6 +862,8 @@ Typhoon di rifornimento carburante Typhoon 燃料給油車 Typhoon 연료 + "颱風"卡車 (燃油) + "台风"卡车 (燃油) Typhoon Repair @@ -770,6 +878,8 @@ Typhoon riparatore Typhoon 修理型 Typhoon 수리 + "颱風"卡車 (維修) + "台风"卡车 (维修) Typhoon Medical @@ -784,6 +894,8 @@ Typhoon medico Typhoon 救急車 Typhoon 의료 + "颱風"卡車 (醫療) + "台风"卡车 (医疗) RAH-66 Comanche @@ -798,6 +910,8 @@ RAH-66 Comanche RAH-66 コマンチ RAH-66 Comanche + RAH-66"卡曼契"攻擊直升機 + RAH-66"卡曼契"攻击直升机 MH-6 Little Bird @@ -812,6 +926,8 @@ MH-6 Little Bird MH-6 リトル バード MH-6 Little Bird + MH-6"小鳥"運輸直升機 + MH-6"小鸟"运输直升机 AH-6 Little Bird @@ -826,6 +942,8 @@ AH-6 Little Bird AH-6 リトル バード AH-6 Little Bird + AH-6"小鳥"武裝直升機 + AH-6"小鸟"武装直升机 CH-47I Chinook @@ -840,6 +958,8 @@ CH-47I Chinook CH-47I チヌーク CH-47I Chinook + CH-47I"契努克"運輸直升機 + CH-47I"契努克"运输直升机 CH-47I Chinook (unarmed) @@ -854,6 +974,8 @@ CH-47I Chinook (desarmado) CH-47I チヌーク (非武装) CH-47I Chinook (비무장) + CH-47I"契努克"運輸直升機 (無武裝) + CH-47I"契努克"运输直升机 (无武装) A-10D Thunderbolt II @@ -868,6 +990,8 @@ A-10D Thunderbolt II A-10D サンダーボルト II A-10D Thunderbolt II + A-10D"雷霆二式"攻擊機 + A-10D"雷霆二式"攻击机 AW159 Wildcat @@ -882,6 +1006,8 @@ AW159 Wildcat AW159 ワイルドキャット AW159 Wildcat + AW159"野貓"直升機 + AW159"野猫"直升机 AW159 Wildcat (unarmed) @@ -896,6 +1022,8 @@ AW159 Wildcat (disarmato) AW159 ワイルドキャット (非武装) AW159 Wildcat (비무장) + AW159"野貓"直升機 (無武裝) + AW159"野猫"直升机 (无武装) AW101 Merlin @@ -910,6 +1038,24 @@ AW101 Merlin AW101 マーリン AW101 Merlin + AW101"灰背隼"運輸直升機 + AW101"灰背隼"运输直升机 + + + L-159 ALCA + L-159 ALCA + L-159 ALCA + L-159 ALCA + L-159 ALCA + L-159 ALCA + L-159 Альбатрос + L-159 ALCA + L-159 ALCA + L-159 ALCA + L-159 アルカ + L-159 ALCA + L-159先進輕型戰鬥機 + L-159先进轻型战斗机 L-159 ALCA (CAS) @@ -924,6 +1070,8 @@ L-159 ALCA (CAS) L-159 アルカ (対地) L-159 ALCA (근접지원) + L-159先進輕型戰鬥機 (近空支援) + L-159先进轻型战斗机 (近空支援) L-159 ALCA (AA) @@ -938,6 +1086,8 @@ L-159 ALCA (AA) L-159 アルカ (対空) L-159 ALCA (대공) + L-159先進輕型戰鬥機 (空對空) + L-159先进轻型战斗机 (空对空) Ka-60 Kasatka @@ -952,6 +1102,8 @@ Ka-60 Kasatka Ka-60 カサートカ Ka-60 Kasatka + Ka-60"逆戟鯨"直升機 + Ka-60"逆戟鲸"直升机 Ka-60 Kasatka (Black & White) @@ -965,6 +1117,8 @@ Ka-60 Kasatka (blanco y negro) Ka-60 カサートカ (黒&白) Ka-60 Kasatka (검정 및 하양) + Ka-60"逆戟鯨"直升機 (黑&白) + Ka-60"逆戟鲸"直升机 (黑&白) Ka-60 Kasatka (unarmed) @@ -979,6 +1133,8 @@ Ka-60 Kasatka (disarmato) Ka-60 カサートカ (非武装) Ka-60 Kasatka (비무장) + Ka-60"逆戟鯨"直升機 (無武裝) + Ka-60"逆戟鲸"直升机 (无武装) Yak-130 @@ -993,6 +1149,8 @@ Yak-130 Yak-130 ミトン Yak-130 + Yak-130"手套"攻擊機 + Yak-130"手套"攻击机 MD 500 @@ -1007,6 +1165,8 @@ MD 500 MD 500 MD 500 + MD 500"防衛者"直升機 + MD 500"防卫者"直升机 M4A1 SLAM @@ -1021,6 +1181,8 @@ M4A1 SLAM M4A1 SLAM M4A1 SLAM + M4A1指向性反裝甲地雷 + M4A1指向性反装甲地雷 M18A1 Claymore @@ -1035,6 +1197,8 @@ M18A1 Claymore Mina antiuomo M18A1 クレイモア M18A1 클레이모어 + M18A1"闊刀"地雷 + M18A1"阔刀"地雷 M183 Demolition Charge Assembly @@ -1049,6 +1213,8 @@ M183 Demolition Charge Assembly M183 梱包爆薬 M183 폭파 장약 조립 + M183炸藥包 + M183炸药包 M112 Demolition Block @@ -1063,6 +1229,8 @@ M112 Demolition Block M113 爆薬ブロック M112 폭파 블럭 + M112塑性炸藥 + M112塑性炸药 M67 Fragmentation Grenade @@ -1077,6 +1245,8 @@ M67 Granata a frammentazione M67 破片手榴弾 M67 세열 수류탄 + M67破片手榴彈 + M67破片手榴弹 M83 Smoke Grenade (White) @@ -1091,6 +1261,8 @@ M83 Granata fumogena (Bianco) M18 煙幕手榴弾 (白) M83 연막탄 (하양) + M83煙霧彈 (白色) + M83烟雾弹 (白色) M18 Smoke Grenade (Blue) @@ -1105,6 +1277,8 @@ M18 Granata fumogena (Blu) M18 煙幕手榴弾 (青) M18 연막탄 (파랑) + M18煙霧彈 (藍色) + M18烟雾弹 (蓝色) M18 Smoke Grenade (Green) @@ -1119,6 +1293,8 @@ M18 Granata fumogena (Verde) M18 煙幕手榴弾 (緑) M18 연막탄 (초록) + M18煙霧彈 (綠色) + M18烟雾弹 (绿色) M18 Smoke Grenade (Orange) @@ -1133,6 +1309,8 @@ M18 Granata fumogena (Arancione) M18 煙幕手榴弾 (橙) M18 연막탄 (주황) + M18煙霧彈 (橘色) + M18烟雾弹 (橘色) M18 Smoke Grenade (Purple) @@ -1147,6 +1325,8 @@ M18 Granata fumogena (Viola) M18 煙幕手榴弾 (紫) M18 연막탄 (보라) + M18煙霧彈 (紫色) + M18烟雾弹 (紫色) M18 Smoke Grenade (Red) @@ -1161,6 +1341,8 @@ M18 Granata fumogena (Rosso) M18 煙幕手榴弾 (赤) M18 연막탄 (빨강) + M18煙霧彈 (紅色) + M18烟雾弹 (红色) M18 Smoke Grenade (Yellow) @@ -1175,6 +1357,8 @@ M18 Granata fumogena (Giallo) M18 煙幕手榴弾 (黄) M18 연막탄 (노랑) + M18煙霧彈 (黃色) + M18烟雾弹 (黄色) M15 Anti-Tank Mine @@ -1189,6 +1373,8 @@ M15 Mine anticarro M15 対戦車地雷 M15 대전차지뢰 + M15反坦克地雷 + M15反坦克地雷 VS-50 Anti-Personnel Mine @@ -1203,6 +1389,8 @@ VS-50 Mine antiuomo VS-50 対人地雷 VS-50 대인지뢰 + VS-50反人員地雷 + VS-50反人员地雷 M26 Anti-Personnel Bounding Mine @@ -1217,6 +1405,8 @@ M26 Mine saltanti antiuomo M26 対人跳躍地雷 M26 대인도약지뢰 + M26反人員彈跳雷 + M26反人员弹跳雷 PMR-3 Anti-Personnel Tripwire Mine @@ -1231,6 +1421,8 @@ PMR-3 Mine antiuomo PMR-3 仕掛け型対人地雷 PMR-3 대인인계철선지뢰 + PMR-3反人員絆線雷 + PMR-3反人员绊线雷 P99 @@ -1245,6 +1437,8 @@ P99 P99 P99 + P99手槍 + P99手枪 MP-443 Grach @@ -1259,6 +1453,8 @@ MP-443 Grach MP-433 グラッチ MP-443 Grach + MP-443"烏鴉"手槍 + MP-443"乌鸦"手枪 Custom Covert II @@ -1273,6 +1469,8 @@ ACP-C2 カスタム コンバート II Custom Covert II + 特裝隱蔽Ⅱ型手槍 + 特装隐蔽Ⅱ型手枪 FNX-45 Tactical @@ -1287,6 +1485,8 @@ FNX-45 Tactical FNX-45 タクティカル FNX-45 Tactical + FNX-45戰術型手槍 + FNX-45战术型手枪 Chiappa Rhino 60DS @@ -1301,6 +1501,8 @@ Chiappa Rhino 6DS チアッパ ライノ 60DS Chiappa Rhino 60DS + 齊亞帕"犀牛"60DS左輪手槍 + 齐亚帕"犀牛"60DS左轮手枪 Taurus Judge @@ -1315,6 +1517,8 @@ Taurus Judge タウルス ジャッジ Taurus Judge + 金牛座"法官"信號槍 + 金牛座"法官"信号枪 NLAW @@ -1329,6 +1533,8 @@ NLAW NLAW NLAW + 次世代輕型反坦克導彈發射器 + 次世代轻型反坦克导弹发射器 RPG-32 @@ -1343,6 +1549,8 @@ RPG-32 RPG-32 RPG-32 + RPG-32"哈希姆"火箭發射器 + RPG-32"哈希姆"火箭发射器 Mini-Spike (AA) @@ -1357,6 +1565,8 @@ Mini-Spike (AA) ミニスパイク (対空) Mini-Spike (대공) + "迷你長釘"導彈發射器 (防空) + "迷你长钉"导弹发射器 (防空) Mini-Spike (AT) @@ -1371,6 +1581,8 @@ Mini-Spike (AT) ミニスパイク (対地) Mini-Spike (대전차) + "迷你長釘"導彈發射器 (反坦克) + "迷你长钉"导弹发射器 (反坦克) MX @@ -1385,6 +1597,8 @@ MX MX MX + MX突擊步槍 + MX突击步枪 MX (Black) @@ -1399,6 +1613,8 @@ MX (Nero) MX (黒) MX (검정) + MX突擊步槍 (黑色) + MX突击步枪 (黑色) MXC @@ -1413,6 +1629,8 @@ MXC MXC MXC + MXC卡賓步槍 + MXC卡宾步枪 MXC (Black) @@ -1427,6 +1645,8 @@ MXC (Nero) MXC (黒) MXC (검정) + MXC卡賓步槍 (黑色) + MXC卡宾步枪 (黑色) MX 3GL @@ -1441,6 +1661,8 @@ MX 3GL MX 3GL MX 3GL + MX突擊步槍 (3連裝榴彈) + MX突击步枪 (3连装榴弹) MX 3GL (Black) @@ -1455,6 +1677,8 @@ MX 3GL (Nero) MX 3GL (黒) MX 3GL (검정) + MX突擊步槍 (3連裝榴彈-黑色) + MX突击步枪 (3连装榴弹-黑色) MX LSW @@ -1469,6 +1693,8 @@ MX LSW MX LSW MX LSW + MX輕型機槍 + MX轻型机枪 MX LSW (Black) @@ -1483,6 +1709,8 @@ MX LSW (Nero) MX LSW (黒) MX LSW (검정) + MX輕型機槍 (黑色) + MX轻型机枪 (黑色) MXM @@ -1497,6 +1725,8 @@ MXM MXM MXM + MXM精準步槍 + MXM精准步枪 MXM (Black) @@ -1511,6 +1741,8 @@ MXM (Nero) MXM (黒) MXM (검정) + MXM精準步槍 (黑色) + MXM精准步枪 (黑色) KH2002 Sama @@ -1525,6 +1757,8 @@ KT2002 Katiba KH2002 サマ KH2002 Sama + KH2002"海白爾"突擊步槍 + KH2002"海白尔"突击步枪 KH2002C Sama @@ -1539,6 +1773,8 @@ KT2002C Katiba KH2002C サマ KH2002C Sama + KH2002C"海白爾"卡賓步槍 + KH2002C"海白尔"卡宾步枪 KH2002 Sama KGL @@ -1553,6 +1789,8 @@ KT2002 Katiba KGL KH2002 サマ KGL KH2002 Sama KGL + KH2002"海白爾"突擊步槍 (榴彈) + KH2002"海白尔"突击步枪 (榴弹) F2000 (Camo) @@ -1567,6 +1805,8 @@ F2000 (Camo) F2000 (迷彩) F2000 (위장) + F2000突擊步槍 (迷彩) + F2000突击步枪 (迷彩) F2000 @@ -1581,6 +1821,8 @@ F2000 F2000 F2000 + F2000突擊步槍 + F2000突击步枪 F2000 Tactical (Camo) @@ -1595,6 +1837,8 @@ F2000 Tactical (Camo) F2000 タクティカル (迷彩) F2000 Tactical (위장) + F2000戰術型突擊步槍 (迷彩) + F2000战术型突击步枪 (迷彩) F2000 Tactical @@ -1609,6 +1853,8 @@ F2000 Tactical F2000 タクティカル F2000 Tactical + F2000戰術型突擊步槍 + F2000战术型突击步枪 F2000 EGLM (Camo) @@ -1623,6 +1869,8 @@ F2000 EGLM (Camo) F2000 EGLM (迷彩) F2000 EGLM (위장) + F2000突擊步槍 (榴彈-迷彩) + F2000突击步枪 (榴弹-迷彩) F2000 EGLM @@ -1637,6 +1885,8 @@ F2000 EGLM F2000 EGLM F2000 EGLM + F2000突擊步槍 (榴彈) + F2000突击步枪 (榴弹) TAR-21 @@ -1651,6 +1901,8 @@ TAR-21 TAR-21 TAR-21 + TAR-21突擊步槍 + TAR-21突击步枪 CTAR-21 @@ -1665,6 +1917,8 @@ CTAR-21 CTAR-21 CTAR-21 + CTAR-21卡賓步槍 + CTAR-21卡宾步枪 TAR-21 EGLM @@ -1679,6 +1933,8 @@ TAR-21 EGLM TAR-21 EGLM TAR-21 EGLM + TAR-21突擊步槍 (榴彈) + TAR-21突击步枪 (榴弹) Vector SMG @@ -1693,6 +1949,8 @@ Vector SMG ベクター SMG Vector SMG + "維克特"衝鋒槍 + "维克特"冲锋枪 Scorpion Evo 3 A1 @@ -1707,6 +1965,8 @@ Scorpion Evo 3 A1 スコーピオン エボ 3 A1 Scorpion Evo 3 A1 + "蠍式"Evo 3 A1衝鋒槍 + "蝎式"Evo 3 A1冲锋枪 CPW @@ -1721,6 +1981,8 @@ CPW CPW CPW + 緊湊型個人衝鋒槍 + 紧凑型个人冲锋枪 RFB SDAR @@ -1735,6 +1997,8 @@ RFB SDAR RFB SDAR RFB SDAR + 犢牛式水陸兩用步槍 + 犊牛式水陆两用步枪 Stoner 99 LMG @@ -1749,6 +2013,8 @@ Stoner 99 LMG ストーナー 99 LMG Stoner 99 LMG + 斯通納99輕機槍 + 斯通纳99轻机枪 Negev NG7 @@ -1763,6 +2029,8 @@ Negev NG7 ネゲフ NG7 Negev NG7 + 內蓋夫NG7機槍 + 内盖夫NG7机枪 Mk14 Mod 1 EBR @@ -1777,6 +2045,8 @@ Mk14 Mod 1 EBR Mk14 Mod 1 EBR Mk14 Mod 1 EBR + Mk14一型增強型戰鬥步槍 + Mk14一型增强型战斗步枪 GM6 Lynx @@ -1791,6 +2061,8 @@ GM6 Lynx GM6 リンクス GM6 Lynx + GM6"天貓"反器材狙擊步槍 + GM6"天猫"反器材狙击步枪 GM6 Lynx (Camo) @@ -1805,6 +2077,8 @@ GM6 Lynx (Camo) GM6 リンクス (迷彩) GM6 Lynx (위장) + GM6"天貓"反器材狙擊步槍 (迷彩) + GM6"天猫"反器材狙击步枪 (迷彩) M200 Intervention @@ -1819,6 +2093,8 @@ M200 Intervention M200 インターベンション M200 Intervention + M200干預型狙擊步槍 + M200干预型狙击步枪 M200 Intervention (Camo) @@ -1833,6 +2109,8 @@ M200 Intervention (Camo) M200 インターベンション (迷彩) M200 Intervention (위장) + M200干預型狙擊步槍 (迷彩) + M200干预型狙击步枪 (迷彩) VS-121 @@ -1847,6 +2125,8 @@ VS-121 VS-121 VS-121 + VS-121狙擊步槍 + VS-121狙击步枪 Noreen "Bad News" ULR @@ -1861,6 +2141,8 @@ Noreen "Bad News" ULR ノレーン "バッド ニュース" ULR Noreen "Bad News" ULR + 諾琳"壞消息"極距狙擊步槍 + 诺琳"坏消息"极距狙击步枪 Noreen "Bad News" ULR (Black) @@ -1875,6 +2157,8 @@ Noreen "Bad News" ULR (Preto) ノレーン "バッド ニュース" ULR (黒) Noreen "Bad News" ULR (검정) + 諾琳"壞消息"極距狙擊步槍 (黑色) + 诺琳"坏消息"极距狙击步枪 (黑色) Noreen "Bad News" ULR (Camo) @@ -1889,6 +2173,8 @@ Noreen "Bad News" ULR (Camuflagem) ノレーン "バッド ニュース" ULR (迷彩) Noreen "Bad News" ULR (위장) + 諾琳"壞消息"極距狙擊步槍 (迷彩) + 诺琳"坏消息"极距狙击步枪 (迷彩) Noreen "Bad News" ULR (Sand) @@ -1903,6 +2189,8 @@ Noreen "Bad News" ULR (Deserto) ノレーン "バッド ニュース" ULR (砂地) Noreen "Bad News" ULR (모래) + 諾琳"壞消息"極距狙擊步槍 (沙色) + 诺琳"坏消息"极距狙击步枪 (沙色) SIG 556 @@ -1917,6 +2205,8 @@ SIG 556 SIG 556 SIG 556 + SIG 556精準步槍 + SIG 556精准步枪 SIG 556 (Black) @@ -1931,6 +2221,8 @@ SIG 556 (Preto) SIG 556 (黒) SIG 556 (검정) + SIG 556精準步槍 (黑色) + SIG 556精准步枪 (黑色) SIG 556 (Khaki) @@ -1945,6 +2237,8 @@ SIG 556 (Caqui) SIG 556 (土埃) SIG 556 (카키) + SIG 556精準步槍 (卡其色) + SIG 556精准步枪 (卡其色) SIG 556 (Sand) @@ -1959,6 +2253,8 @@ SIG 556 (Deserto) SIG 556 (砂地) SIG 556 (모래) + SIG 556精準步槍 (沙色) + SIG 556精准步枪 (沙色) SIG 556 (Camo) @@ -1973,6 +2269,8 @@ SIG 556 (Camuflagem) SIG 556 (迷彩) SIG 556 (위장) + SIG 556精準步槍 (迷彩) + SIG 556精准步枪 (迷彩) SIG 556 (Woodland) @@ -1987,6 +2285,8 @@ SIG 556 (Floresta) SIG 556 (森林) SIG 556 (우드랜드) + SIG 556精準步槍 (森林迷彩) + SIG 556精准步枪 (森林迷彩) SIG 556 (provisional) spotter @@ -2001,6 +2301,8 @@ SIG 556 (provisional) observador SIG 556 (仮) スポッター SIG 556 (임시) spotter + SIG 556精準步槍 (暫定) 觀測手 + SIG 556精准步枪 (暂定) 观测手 ASP-1 Kir @@ -2015,6 +2317,8 @@ ASP-1 Kir ASP-1 Kir ASP-1 Kir + ASP-1"基爾"消音狙擊步槍 + ASP-1"基尔"消音狙击步枪 ASP-1 Kir (Black) @@ -2029,6 +2333,8 @@ ASP-1 Kir (Preto) ASP-1 Kir (黒) ASP-1 Kir (검정) + ASP-1"基爾"消音狙擊步槍 (黑色) + ASP-1"基尔"消音狙击步枪 (黑色) ASP-1 Kir (Tan) @@ -2043,6 +2349,8 @@ ASP-1 Kir (Deserto) ASP-1 Kir (黄褐) ASP-1 Kir (황갈) + ASP-1"基爾"消音狙擊步槍 (黃褐色) + ASP-1"基尔"消音狙击步枪 (黄褐色) Cyrus @@ -2057,6 +2365,8 @@ Cyrus サイラス Cyrus + "居鲁士"狙擊步槍 + "居鲁士"狙击步枪 Cyrus (Black) @@ -2071,6 +2381,8 @@ Cyrus (Preto) サイラス (黒) Cyrus (검정) + "居鲁士"狙擊步槍 (黑色) + "居鲁士"狙击步枪 (黑色) Cyrus (Hex) @@ -2085,6 +2397,8 @@ Cyrus (Hex) サイラス (蜂巣) Cyrus (육각) + "居鲁士"狙擊步槍 (數位蜂巢迷彩) + "居鲁士"狙击步枪 (数位蜂巢迷彩) Cyrus (Tan) @@ -2099,6 +2413,8 @@ Cyrus (Deserto) サイラス (黄褐) Cyrus (황갈) + "居鲁士"狙擊步槍 (黃褐色) + "居鲁士"狙击步枪 (黄褐色) M14 @@ -2113,6 +2429,8 @@ M14 M14 M14 + M14精準步槍 + M14精准步枪 M14 (Camo) @@ -2127,6 +2445,8 @@ M14 (Camuflagem) M14 (迷彩) M14 (위장) + M14精準步槍 (迷彩) + M14精准步枪 (迷彩) M14 (Olive) @@ -2141,6 +2461,8 @@ M14 (Oliva) M14 (オリーブド ラブ) M14 (올리브) + M14精準步槍 (橄欖色) + M14精准步枪 (橄榄色) HK121 @@ -2155,6 +2477,8 @@ HK121 HK 121 HK121 + HK121中型機槍 + HK121中型机枪 HK121 (Hex) @@ -2169,6 +2493,8 @@ HK121 (Hex) HK 121 (蜂巣) HK121 (육각) + HK121中型機槍 (數位蜂巢迷彩) + HK121中型机枪 (数位蜂巢迷彩) HK121 (Tan) @@ -2183,6 +2509,8 @@ HK121 (Deserto) HK 121 (黄褐) HK121 (황갈) + HK121機槍 (黃褐色) + HK121机枪 (黄褐色) LWMMG @@ -2197,6 +2525,8 @@ LWMMG LWMMG LWMMG + 輕量化中型機槍 + 轻量化中型机枪 LWMMG (MTP) @@ -2211,6 +2541,8 @@ LWMMG (MTP) LWMMG (マルチカモ) LWMMG (MTP) + 輕量化中型機槍 (多地形迷彩) + 轻量化中型机枪 (多地形迷彩) LWMMG (Black) @@ -2225,6 +2557,8 @@ LWMMG (Preto) LWMMG (黒) LWMMG (검정) + 輕量化中型機槍 (黑色) + 轻量化中型机枪 (黑色) LWMMG (Sand) @@ -2239,6 +2573,8 @@ LWMMG (Deserto) LWMMG (砂地) LWMMG (모래) + 輕量化中型機槍 (沙色) + 轻量化中型机枪 (沙色) Jeep Wrangler @@ -2253,6 +2589,8 @@ Jeep Wrangler ジープ ラングラー Jeep Wrangler + "牧馬人"吉普車 + "牧马人"吉普车 Jeep Wrangler (Black) @@ -2267,6 +2605,8 @@ Jeep Wrangler (Preto) ジープ ラングラー (黒) Jeep Wrangler (검정) + "牧馬人"吉普車 (黑色) + "牧马人"吉普车 (黑色) Jeep Wrangler (Blue) @@ -2281,6 +2621,8 @@ Jeep Wrangler (Blu) ジープ ラングラー (青) Jeep Wrangler (파랑) + "牧馬人"吉普車 (藍色) + "牧马人"吉普车 (蓝色) Jeep Wrangler (Green) @@ -2295,6 +2637,8 @@ Jeep Wrangler (Verde) ジープ ラングラー (緑) Jeep Wrangler (초록) + "牧馬人"吉普車 (綠色) + "牧马人"吉普车 (绿色) Jeep Wrangler (Orange) @@ -2309,6 +2653,8 @@ Jeep Wrangler (Arancione) ジープ ラングラー (橙) Jeep Wrangler (주황) + "牧馬人"吉普車 (橘色) + "牧马人"吉普车 (橘色) Jeep Wrangler (Red) @@ -2323,6 +2669,8 @@ Jeep Wrangler (Rosso) ジープ ラングラー (赤) Jeep Wrangler (빨강) + "牧馬人"吉普車 (紅色) + "牧马人"吉普车 (红色) Jeep Wrangler (White) @@ -2337,6 +2685,8 @@ Jeep Wrangler (Bianco) ジープ ラングラー (白) Jeep Wrangler (하양) + "牧馬人"吉普車 (白色) + "牧马人"吉普车 (白色) Cessna TTx @@ -2351,6 +2701,8 @@ Cessna TTx セスナ TTx Cessna TTx + "賽斯納"TTx單引擎飛機 + "赛斯纳"TTx单引擎飞机 Cessna TTx (Racing) @@ -2365,6 +2717,8 @@ Cessna TTx (Racing) セスナ TTx (レース仕様) Cessna TTx (경주용) + "賽斯納"TTx單引擎飛機 (競速) + "赛斯纳"TTx单引擎飞机 (竞速) Burraq UCAV @@ -2379,6 +2733,8 @@ Burraq UCAV ブラーク UCAV Burraq UCAV + "柏拉格"空中無人戰鬥載具 + "柏拉格"空中无人战斗载具 QBZ-95-1 (Black) @@ -2393,6 +2749,8 @@ QBZ-95-1 (Preto) QBZ-95-1 (黒) QBZ-95-1 (검정) + QBZ-95-1式自動步槍 (黑色) + QBZ-95-1式自动步枪 (黑色) QBZ-95-1 (Green Hex) @@ -2407,6 +2765,8 @@ QBZ-95-1 (Hex Verde) QBZ-95-1 (緑蜂巣) QBZ-95-1 (초록육각) + QBZ-95-1式自動步槍 (綠色數位蜂巢迷彩) + QBZ-95-1式自动步枪 (绿色数位蜂巢迷彩) QBZ-95-1 (Hex) @@ -2421,6 +2781,8 @@ QBZ-95-1 (Hex) QBZ-95-1 (蜂巣) QBZ-95-1 (육각) + QBZ-95-1式自動步槍 (數位蜂巢迷彩) + QBZ-95-1式自动步枪 (数位蜂巢迷彩) QBZ-95-1 GL (Black) @@ -2435,6 +2797,8 @@ QBZ-95-1 GL (Preto) QBZ-95-1 GL (黒) QBZ-95-1 GL (검정) + QBZ-95-1式自動步槍 (榴彈-黑色) + QBZ-95-1式自动步枪 (榴弹-黑色) QBZ-95-1 GL (Green Hex) @@ -2449,6 +2813,8 @@ QBZ-95-1 GL (Hex Verde) QBZ-95-1 GL (緑蜂巣) QBZ-95-1 GL (초록육각) + QBZ-95-1式自動步槍 (榴彈-綠色數位蜂巢迷彩) + QBZ-95-1式自动步枪 (榴弹-绿色数位蜂巢迷彩) QBZ-95-1 GL (Hex) @@ -2463,6 +2829,8 @@ QBZ-95-1 GL (Hex) QBZ-95-1 GL (蜂巣) QBZ-95-1 GL (육각) + QBZ-95-1式自動步槍 (榴彈-數位蜂巢迷彩) + QBZ-95-1式自动步枪 (榴弹-数位蜂巢迷彩) QBZ-95-1 LSW (Black) @@ -2477,6 +2845,8 @@ QBZ-95-1 LSW (Preto) QBZ-95-1 LSW (黒) QBZ-95-1 LSW (검정) + QBZ-95-1式輕機槍 (黑色) + QBZ-95-1式轻机枪 (黑色) QBZ-95-1 LSW (Green Hex) @@ -2491,6 +2861,8 @@ QBZ-95-1 LSW (Hex Verde) QBZ-95-1 LSW (緑蜂巣) QBZ-95-1 LSW (초록육각) + QBZ-95-1式輕機槍 (綠色數位蜂巢迷彩) + QBZ-95-1式轻机枪 (绿色数位蜂巢迷彩) QBZ-95-1 LSW (Hex) @@ -2505,6 +2877,8 @@ QBZ-95-1 LSW (Hex) QBZ-95-1 LSW (蜂巣) QBZ-95-1 LSW (육각) + QBZ-95-1式輕機槍 (數位蜂巢迷彩) + QBZ-95-1式轻机枪 (数位蜂巢迷彩) QBU-88 (Black) @@ -2519,6 +2893,8 @@ QBU-88 (Preto) QBU-88 (黒) QBU-88 (검정) + QBU-88式狙擊步槍 (黑色) + QBU-88式狙击步枪 (黑色) QBU-88 (Green Hex) @@ -2533,6 +2909,8 @@ QBU-88 (Hex Verde) QBU-88 (緑蜂巣) QBU-88 (초록육각) + QBU-88式狙擊步槍 (綠色數位蜂巢迷彩) + QBU-88式狙击步枪 (绿色数位蜂巢迷彩) QBU-88 (Hex) @@ -2547,6 +2925,8 @@ QBU-88 (Hex) QBU-88 (蜂巣) QBU-88 (육각) + QBU-88式狙擊步槍 (數位蜂巢迷彩) + QBU-88式狙击步枪 (数位蜂巢迷彩) GM6 Lynx (Green Hex) @@ -2561,6 +2941,8 @@ GM6 Lynx (Hex Verde) GM6 リンクス (緑蜂巣) GM6 Lynx (초록육각) + GM6"天貓"反器材狙擊步槍 (綠色數位蜂巢迷彩) + GM6"天猫"反器材狙击步枪 (绿色数位蜂巢迷彩) M249 SPW @@ -2575,6 +2957,8 @@ M249 SPW M249 SPW M249 SPW + M249班用自動機槍 + M249班用自动机枪 M200 Intervention (Tropic) @@ -2589,6 +2973,8 @@ M200 Intervention (Tropico) M200 インターベンション (熱帯) M200 Intervention (열대) + M200干預型狙擊步槍 (熱帶迷彩) + M200干预型狙击步枪 (热带迷彩) MP5K @@ -2603,6 +2989,8 @@ MP5K MP5K MP5K + MP5K衝鋒槍 + MP5K冲锋枪 HK416A5 11" (Black) @@ -2617,6 +3005,8 @@ HK416A5 11" (Preto) HK416A5 11" (黒) HK416A5 11" (검정) + HK416A5 11"突擊步槍 (黑色) + HK416A5 11"突击步枪 (黑色) HK416A5 11" (Khaki) @@ -2631,6 +3021,8 @@ HK416A5 11" (Caqui) HK416A5 11" (土埃) HK416A5 11" (카키) + HK416A5 11"突擊步槍 (卡其色) + HK416A5 11"突击步枪 (卡其色) HK416A5 11" (Sand) @@ -2645,6 +3037,8 @@ HK416A5 11" (Deserto) HK416A5 11" (砂地) HK416A5 11" (모래) + HK416A5 11"突擊步槍 (沙色) + HK416A5 11"突击步枪 (沙色) HK416A5 11" GL (Black) @@ -2659,6 +3053,8 @@ HK416A5 11" GL (Preto) HK416A5 11" GL (黒) HK416A5 11" GL (검정) + HK416A5 11"突擊步槍 (榴彈-黑色) + HK416A5 11"突击步枪 (榴弹-黑色) HK416A5 11" GL (Khaki) @@ -2673,6 +3069,8 @@ HK416A5 11" GL (Caqui) HK416A5 11" GL (土埃) HK416A5 11" GL (카키) + HK416A5 11"突擊步槍 (榴彈-卡其色) + HK416A5 11"突击步枪 (榴弹-卡其色) HK416A5 11" GL (Sand) @@ -2687,6 +3085,8 @@ HK416A5 11" GL (Deserto) HK416A5 11" GL (砂地) HK416A5 11" GL (모래) + HK416A5 11"突擊步槍 (榴彈-沙色) + HK416A5 11"突击步枪 (榴弹-沙色) HK416A5 14.5" (Black) @@ -2701,6 +3101,8 @@ HK416A5 14.5" (Preto) HK416A5 14.5" (黒) HK416A5 14.5" (검정) + HK416A5 14.5"突擊步槍 (黑色) + HK416A5 14.5"突击步枪 (黑色) HK416A5 14.5" (Khaki) @@ -2715,6 +3117,8 @@ HK416A5 14.5" (Caqui) HK416A5 14.5" (土埃) HK416A5 14.5" (카키) + HK416A5 14.5"突擊步槍 (卡其色) + HK416A5 14.5"突击步枪 (卡其色) HK416A5 14.5" (Sand) @@ -2729,6 +3133,8 @@ HK416A5 14.5" (Deserto) HK416A5 14.5" (砂地) HK416A5 14.5" (모래) + HK416A5 14.5"突擊步槍 (沙色) + HK416A5 14.5"突击步枪 (沙色) HK417A2 20" (Black) @@ -2743,6 +3149,8 @@ HK417A2 20" (Preto) HK417A2 20" (黒) HK417A2 20" (검정) + HK417A2 20"突擊步槍 (黑色) + HK417A2 20"突击步枪 (黑色) HK417A2 20" (Khaki) @@ -2757,6 +3165,8 @@ HK417A2 20" (Caqui) HK417A2 20" (土埃) HK417A2 20" (카키) + HK417A2 20"突擊步槍 (卡其色) + HK417A2 20"突击步枪 (卡其色) HK417A2 20" (Sand) @@ -2771,6 +3181,8 @@ HK417A2 20" (Deserto) HK417A2 20" (砂地) HK417A2 20" (모래) + HK417A2 20"突擊步槍 (沙色) + HK417A2 20"突击步枪 (沙色) RPG-32 (Green Hex) @@ -2785,6 +3197,8 @@ RPG-32 (Hex Verde) RPG-32 (緑蜂巣) RPG-32 (초록육각) + RPG-32火箭發射器 (綠色數位蜂巢迷彩) + RPG-32火箭发射器 (绿色数位蜂巢迷彩) P99 (Khaki) @@ -2799,6 +3213,8 @@ P99 (Caqui) P99 (カーキ) P99 (카키) + P99半自動手槍 (卡其色) + P99半自动手枪 (卡其色) Makarov PM @@ -2813,6 +3229,8 @@ Makarov PM マカロフ PM Makarov PM + "馬卡洛夫"手槍 + "马卡洛夫"手枪 diff --git a/addons/rearm/ACE_Settings.hpp b/addons/rearm/ACE_Settings.hpp index 798bbd7650..2e0fae277f 100644 --- a/addons/rearm/ACE_Settings.hpp +++ b/addons/rearm/ACE_Settings.hpp @@ -7,4 +7,11 @@ class ACE_Settings { typeName = "SCALAR"; values[] = {CSTRING(RearmSettings_vehicle), CSTRING(RearmSettings_magazine), CSTRING(RearmSettings_caliber)}; }; + class GVAR(supply) { + displayName = CSTRING(RearmSettings_supply_DisplayName); + description = CSTRING(RearmSettings_supply_Description); + value = 0; + typeName = "SCALAR"; + values[] = {CSTRING(RearmSettings_unlimited), CSTRING(RearmSettings_limited), CSTRING(RearmSettings_magazineSupply)}; + }; }; diff --git a/addons/rearm/CfgVehicles.hpp b/addons/rearm/CfgVehicles.hpp index c60256dee4..de141c2837 100644 --- a/addons/rearm/CfgVehicles.hpp +++ b/addons/rearm/CfgVehicles.hpp @@ -1,41 +1,16 @@ - #define MACRO_REARM_ACTIONS \ - class ACE_Actions { \ - class ACE_MainActions { \ - class GVAR(Rearm) { \ - displayName = CSTRING(Rearm); \ - distance = REARM_ACTION_DISTANCE; \ - condition = QUOTE(_this call FUNC(canRearm)); \ - statement = QUOTE(_player call FUNC(rearm)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOF(ui\icon_rearm_interact.paa); \ - }; \ + class ACE_Actions { \ + class ACE_MainActions { \ + class GVAR(Rearm) { \ + displayName = CSTRING(Rearm); \ + distance = REARM_ACTION_DISTANCE; \ + condition = QUOTE(_this call FUNC(canRearm)); \ + statement = QUOTE(_this call FUNC(rearm)); \ + exceptions[] = {"isNotInside"}; \ + icon = QPATHTOF(ui\icon_rearm_interact.paa); \ }; \ - }; - -#define MACRO_REARM_TRUCK_ACTIONS \ - class ACE_Actions: ACE_Actions { \ - class ACE_MainActions: ACE_MainActions { \ - class GVAR(TakeAmmo) { \ - displayName = CSTRING(TakeAmmo); \ - distance = REARM_ACTION_DISTANCE; \ - condition = QUOTE(_this call FUNC(canTakeAmmo)); \ - insertChildren = QUOTE(_target call FUNC(addRearmActions)); \ - exceptions[] = {"isNotInside"}; \ - showDisabled = 0; \ - priority = 2; \ - icon = QPATHTOF(ui\icon_rearm_interact.paa); \ - }; \ - class GVAR(StoreAmmo) { \ - displayName = CSTRING(StoreAmmo); \ - distance = REARM_ACTION_DISTANCE; \ - condition = QUOTE(_this call FUNC(canStoreAmmo)); \ - statement = QUOTE(_this call FUNC(storeAmmo)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOF(ui\icon_rearm_interact.paa); \ - }; \ - }; \ - }; + }; \ + }; class CBA_Extended_EventHandlers; @@ -72,6 +47,26 @@ class CfgVehicles { }; }; }; + class supply { + displayName = CSTRING(RearmSettings_supply_DisplayName); + description = CSTRING(RearmSettings_supply_Description); + typeName = "NUMBER"; + class values { + class unlimited { + name = CSTRING(RearmSettings_unlimited); + value = 0; + default = 1; + }; + class magazine { + name = CSTRING(RearmSettings_limited); + value = 1; + }; + class caliber { + name = CSTRING(RearmSettings_magazineSupply); + value = 2; + }; + }; + }; }; class ModuleDescription { description = CSTRING(RearmSettings_Module_Description); @@ -105,81 +100,71 @@ class CfgVehicles { MACRO_REARM_ACTIONS }; - - // Ammo Vehicles (with full inheritance for granted ACE_Actions) - class Car_F: Car {}; - class Truck_F: Car_F {}; - - class Truck_03_base_F: Truck_F {}; + class Truck_03_base_F; class O_Truck_03_ammo_F: Truck_03_base_F { transportAmmo = 0; - MACRO_REARM_TRUCK_ACTIONS + GVAR(defaultSupply) = 1200; }; - class Truck_02_base_F: Truck_F {}; - class Truck_02_Ammo_base_F: Truck_02_base_F {}; + class Truck_02_Ammo_base_F; class I_Truck_02_ammo_F: Truck_02_Ammo_base_F { transportAmmo = 0; - MACRO_REARM_TRUCK_ACTIONS + GVAR(defaultSupply) = 1200; }; class O_Truck_02_Ammo_F: Truck_02_Ammo_base_F { transportAmmo = 0; - MACRO_REARM_TRUCK_ACTIONS + GVAR(defaultSupply) = 1200; }; - class Truck_01_base_F: Truck_F {}; - class B_Truck_01_transport_F: Truck_01_base_F {}; - class B_Truck_01_mover_F: B_Truck_01_transport_F {}; + class B_Truck_01_mover_F; class B_Truck_01_ammo_F: B_Truck_01_mover_F { transportAmmo = 0; - MACRO_REARM_TRUCK_ACTIONS + GVAR(defaultSupply) = 1200; }; - class Helicopter_Base_F: Helicopter {}; - class Helicopter_Base_H: Helicopter_Base_F {}; - class Heli_Transport_04_base_F: Helicopter_Base_H {}; + class B_APC_Tracked_01_base_F; + class B_APC_Tracked_01_CRV_F: B_APC_Tracked_01_base_F { + transportAmmo = 0; + GVAR(defaultSupply) = 1200; + }; + + class Heli_Transport_04_base_F; class O_Heli_Transport_04_ammo_F: Heli_Transport_04_base_F { transportAmmo = 0; - MACRO_REARM_TRUCK_ACTIONS + GVAR(defaultSupply) = 1200; }; - class ThingX; - class ReammoBox_F: ThingX { - class ACE_Actions { - class ACE_MainActions {}; - }; - }; - class Slingload_base_F: ReammoBox_F {}; - class Slingload_01_Base_F: Slingload_base_F {}; - - class Pod_Heli_Transport_04_base_F: Slingload_base_F {}; + class Pod_Heli_Transport_04_base_F; class Land_Pod_Heli_Transport_04_ammo_F: Pod_Heli_Transport_04_base_F { transportAmmo = 0; - MACRO_REARM_TRUCK_ACTIONS + GVAR(defaultSupply) = 1200; }; + class Slingload_01_Base_F; class B_Slingload_01_Ammo_F: Slingload_01_Base_F { transportAmmo = 0; - MACRO_REARM_TRUCK_ACTIONS + GVAR(defaultSupply) = 1200; }; + class ReammoBox_F; class NATO_Box_Base: ReammoBox_F{}; class Box_NATO_AmmoVeh_F: NATO_Box_Base { transportAmmo = 0; - MACRO_REARM_TRUCK_ACTIONS + GVAR(defaultSupply) = 1200; }; class EAST_Box_Base: ReammoBox_F{}; class Box_East_AmmoVeh_F: EAST_Box_Base { transportAmmo = 0; - MACRO_REARM_TRUCK_ACTIONS + GVAR(defaultSupply) = 1200; }; class IND_Box_Base: ReammoBox_F{}; class Box_IND_AmmoVeh_F: IND_Box_Base { transportAmmo = 0; - MACRO_REARM_TRUCK_ACTIONS + GVAR(defaultSupply) = 1200; }; // Dummy Vehicles + class ThingX; class GVAR(defaultCarriedObject): ThingX { class EventHandlers { class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; diff --git a/addons/rearm/XEH_PREP.hpp b/addons/rearm/XEH_PREP.hpp index 8e3c10cd2c..59a43b4b29 100644 --- a/addons/rearm/XEH_PREP.hpp +++ b/addons/rearm/XEH_PREP.hpp @@ -1,26 +1,37 @@ +PREP(addMagazineToSupply); PREP(addRearmActions); +PREP(addVehicleMagazinesToSupply); +PREP(canReadSupplyCounter); PREP(canRearm); PREP(canStoreAmmo); PREP(canTakeAmmo); PREP(createDummy); PREP(disable); PREP(dropAmmo); -PREP(getConfigMagazines); +PREP(getCaliber); +PREP(getHardpointMagazines); PREP(getMaxMagazines); PREP(getNeedRearmMagazines); +PREP(getSupplyCount); +PREP(getVehicleMagazines); PREP(grabAmmo); PREP(handleKilled); PREP(handleUnconscious); +PREP(hasEnoughSupply); +PREP(initSupplyVehicle); PREP(makeDummy); PREP(moduleRearmSettings); PREP(pickUpAmmo); +PREP(readSupplyCounter); PREP(rearm); PREP(rearmEntireVehicle); PREP(rearmEntireVehicleSuccess); PREP(rearmEntireVehicleSuccessLocal); PREP(rearmSuccess); PREP(rearmSuccessLocal); +PREP(removeMagazineFromSupply); +PREP(setSupplyCount); PREP(storeAmmo); PREP(takeAmmo); PREP(takeSuccess); diff --git a/addons/rearm/XEH_postInit.sqf b/addons/rearm/XEH_postInit.sqf index cfbbdf9d4d..59920be498 100644 --- a/addons/rearm/XEH_postInit.sqf +++ b/addons/rearm/XEH_postInit.sqf @@ -1,6 +1,14 @@ #include "script_component.hpp" -["ace_unconscious", {_this call FUNC(handleUnconscious)}] call CBA_fnc_addEventHandler; +GVAR(hardpointGroupsCache) = [] call CBA_fnc_createNamespace; +GVAR(configTypesAdded) = []; +["ace_settingsInitialized", { + TRACE_2("settingsInit",GVAR(level),GVAR(supply)); + ["LandVehicle", "Init", {_this call FUNC(initSupplyVehicle)}, true, ["StaticWeapon"], true] call CBA_fnc_addClassEventHandler; + ["ReammoBox_F", "Init", {_this call FUNC(initSupplyVehicle)}, true, [], true] call CBA_fnc_addClassEventHandler; +}] call CBA_fnc_addEventHandler; + +["ace_unconscious", LINKFUNC(handleUnconscious)] call CBA_fnc_addEventHandler; ["vehicle", { params ["_unit"]; [_unit] call FUNC(dropAmmo); @@ -10,6 +18,16 @@ if (isServer) then { addMissionEventHandler ["HandleDisconnect", {params ["_unit"]; [_unit] call FUNC(dropAmmo)}]; }; -[QGVAR(makeDummyEH), FUNC(makeDummy)] call CBA_fnc_addEventHandler; -[QGVAR(rearmEntireVehicleSuccessLocalEH), FUNC(rearmEntireVehicleSuccessLocal)] call CBA_fnc_addEventHandler; -[QGVAR(rearmSuccessLocalEH), FUNC(rearmSuccessLocal)] call CBA_fnc_addEventHandler; +[QGVAR(makeDummyEH), LINKFUNC(makeDummy)] call CBA_fnc_addEventHandler; +[QGVAR(rearmEntireVehicleSuccessEH), LINKFUNC(rearmEntireVehicleSuccess)] call CBA_fnc_addEventHandler; +[QGVAR(rearmEntireVehicleSuccessLocalEH), LINKFUNC(rearmEntireVehicleSuccessLocal)] call CBA_fnc_addEventHandler; +[QGVAR(rearmSuccessEH), LINKFUNC(rearmSuccess)] call CBA_fnc_addEventHandler; +[QGVAR(rearmSuccessLocalEH), LINKFUNC(rearmSuccessLocal)] call CBA_fnc_addEventHandler; + + +#ifdef DEBUG_MODE_FULL +INFO("Showing CfgVehicles with vanilla transportAmmo"); +{ + WARNING_2("Type [%1] needs config [transportAmmo: %2]", configName _x, getNumber (_x >> 'transportAmmo')); +} forEach (configProperties [configFile >> "CfgVehicles", "(isClass _x) && {(getNumber (_x >> 'transportAmmo')) > 0}", true]); +#endif diff --git a/addons/rearm/XEH_respawn.sqf b/addons/rearm/XEH_respawn.sqf index 33ac042e7c..5148894f98 100644 --- a/addons/rearm/XEH_respawn.sqf +++ b/addons/rearm/XEH_respawn.sqf @@ -10,4 +10,4 @@ if !(isNull _dummy) then { detach _dummy; deleteVehicle _dummy; }; -_unit setVariable [QGVAR(dummy), nil]; \ No newline at end of file +_unit setVariable [QGVAR(dummy), nil]; diff --git a/addons/rearm/functions/fnc_addMagazineToSupply.sqf b/addons/rearm/functions/fnc_addMagazineToSupply.sqf new file mode 100644 index 0000000000..0a3be574f8 --- /dev/null +++ b/addons/rearm/functions/fnc_addMagazineToSupply.sqf @@ -0,0 +1,72 @@ +/* + * Author: GitHawk + * Adds magazines to the supply. [Global Effects] + * + * Arguments: + * 0: Ammo Truck + * 1: Magazine Classname + * 2: Only partial (default: false) + * + * Return Value: + * None + * + * Example: + * [ammo_truck, "32Rnd_155mm_Mo_shells"] call ace_rearm_fnc_addMagazineToSupply + * + * Public: Yes + */ +#include "script_component.hpp" + +if !(EGVAR(common,settingsInitFinished)) exitWith { // only run this after the settings are initialized + EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(addMagazineToSupply), _this]; +}; + +params [["_truck", objNull, [objNull]], ["_magazineClass", "", [""]], ["_partial", false, [false]]]; +TRACE_3("addMagazineToSupply",_truck,_magazineClass,_partial); + +if (GVAR(supply) == 0) exitWith {WARNING("supply setting is set to unlimited");}; + +if (isNull _truck || {_magazineClass isEqualTo ""}) exitWith {}; + +([_magazineClass] call FUNC(getCaliber)) params ["_cal", "_idx"]; + +// With limited supply, we add the caliber to the supply count +if (GVAR(supply) == 1) then { + private _supply = [_truck] call FUNC(getSupplyCount); + private _amountToAdd = if (!_partial || {GVAR(level) == 1}) then { + _cal + } else { + private _magazinePart = ((REARM_COUNT select _idx) / (getNumber (configFile >> "CfgMagazines" >> _magazineClass >> "count"))) min 1; + _cal * _magazinePart + }; + TRACE_1("Adding",_amountToAdd); + [_truck, (_supply + _amountToAdd)] call FUNC(setSupplyCount); +}; + +// With magazine specific supply, we add or update the magazineSupply array +if (GVAR(supply) == 2) then { + private _magazineSupply = _truck getVariable [QGVAR(magazineSupply), []]; + private _magazineIdx = -1; + { + _x params ["_magazine", "_rounds"]; + if ((_magazine isEqualTo _magazineClass)) exitWith { + _magazineIdx = _forEachIndex; + }; + } forEach _magazineSupply; + + private _roundsPerTransaction = getNumber (configFile >> "CfgMagazines" >> _magazineClass >> "count"); + if (_partial) then { + _roundsPerTransaction = _roundsPerTransaction min (REARM_COUNT select _idx); + }; + if (_magazineIdx == -1) then { + if (_magazineSupply isEqualTo []) then { + _magazineSupply = [[_magazineClass, _roundsPerTransaction]]; + } else { + _magazineSupply append [[_magazineClass, _roundsPerTransaction]]; + } + } else { + (_magazineSupply select _magazineIdx) params ["", "_rounds"]; + _magazineSupply set [_magazineIdx, [_magazineClass, (_rounds + _roundsPerTransaction)]]; + }; + _truck setVariable [QGVAR(magazineSupply), _magazineSupply, true]; +}; diff --git a/addons/rearm/functions/fnc_addRearmActions.sqf b/addons/rearm/functions/fnc_addRearmActions.sqf index db92df470d..c017c93509 100644 --- a/addons/rearm/functions/fnc_addRearmActions.sqf +++ b/addons/rearm/functions/fnc_addRearmActions.sqf @@ -15,79 +15,102 @@ */ #include "script_component.hpp" -private ["_vehicleActions", "_actions", "_action", "_vehicles", "_vehicle", "_needToAdd", "_magazineHelper", "_turretPath", "_magazines", "_magazine", "_icon", "_cnt"]; -params [["_target", objNull, [objNull]]]; +params [["_truck", objNull, [objNull]]]; -_vehicles = nearestObjects [_target, ["AllVehicles"], 20]; -if (count _vehicles < 2) exitWith {false}; // Rearming needs at least 2 vehicles +private _vehicles = nearestObjects [_truck, ["AllVehicles"], 20]; +_vehicles = _vehicles select {(_x != _truck) && {!(_x isKindOf "CAManBase")} && {!(_x getVariable [QGVAR(disabled), false])}}; -_vehicleActions = []; +private _vehicleActions = []; { - _actions = []; - _vehicle = _x; - _needToAdd = false; - _action = []; - if !((_vehicle == _target) || (_vehicle isKindOf "CAManBase")) then { - _magazineHelper = []; + private _vehicle = _x; + private _magazineHelper = []; + { + private _turretPath = _x; + private _magazines = [_vehicle, _turretPath] call FUNC(getVehicleMagazines); { - _turretPath = _x; - _magazines = [_vehicle, _turretPath] call FUNC(getConfigMagazines); - { - _magazine = _x; - _currentMagazines = { _x == _magazine } count (_vehicle magazinesTurret _turretPath); - if ((_currentMagazines < ([_vehicle, _turretPath, _magazine] call FUNC(getMaxMagazines))) && !(_magazine in _magazineHelper)) then { - _action = [_magazine, - getText(configFile >> "CfgMagazines" >> _magazine >> "displayName"), - getText(configFile >> "CfgMagazines" >> _magazine >> "picture"), - {_this call FUNC(takeAmmo)}, - {true}, - {}, - [_magazine, _vehicle]] call EFUNC(interact_menu,createAction); - _actions pushBack [_action, [], _target]; + private _magazine = _x; + if (!(_magazine in _magazineHelper)) then { + private _currentMagazines = { _x == _magazine } count (_vehicle magazinesTurret _turretPath); + private _maxMagazines = [_vehicle, _turretPath, _magazine] call FUNC(getMaxMagazines); + + if ((_currentMagazines < _maxMagazines) || {(_vehicle magazineTurretAmmo [_magazine, _turretPath]) < getNumber (configFile >> "CfgMagazines" >> _magazine >> "count")}) then { _magazineHelper pushBack _magazine; - _needToAdd = true; - } else { - if (((_vehicle magazineTurretAmmo [_magazine, _turretPath]) < getNumber (configFile >> "CfgMagazines" >> _magazine >> "count")) && !(_magazine in _magazineHelper)) then { - _action = [_magazine, - getText(configFile >> "CfgMagazines" >> _magazine >> "displayName"), - getText(configFile >> "CfgMagazines" >> _magazine >> "picture"), - {_this call FUNC(takeAmmo)}, - {true}, - {}, - [_magazine, _vehicle]] call EFUNC(interact_menu,createAction); - _actions pushBack [_action, [], _target]; - _magazineHelper pushBack _magazine; - _needToAdd = true; - }; }; - } forEach _magazines; - } forEach REARM_TURRET_PATHS; - }; - if (_needToAdd && !(_vehicle getVariable [QGVAR(disabled), false])) then { - _icon = getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "Icon"); + }; + false + } count _magazines; + false + } count REARM_TURRET_PATHS; + + // 1.70 pylons + private _pylonConfigs = configProperties [configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "Components" >> "TransportPylonsComponent" >> "Pylons", "isClass _x"]; + { + private _pylonName = configName _x; + private _pylonAmmo = _vehicle ammoOnPylon _pylonName; + private _pylonMagazine = (getPylonMagazines _vehicle) select _forEachIndex; + TRACE_3("",_pylonName,_pylonAmmo,_pylonMagazine); + + if (_pylonAmmo > 0) then { + // Try to refill current pylon: + private _magAmmo = getNumber (configFile >> "CfgMagazines" >> _pylonMagazine >> "count"); + if ((!(_pylonMagazine in _magazineHelper)) && {_pylonAmmo < _magAmmo}) then { + _magazineHelper pushBack _pylonMagazine; + }; + } else { + // See what we magazines can add to the empty pylon: + private _hardpointMags = [_x] call FUNC(getHardpointMagazines); + { + if (!(_x in _magazineHelper)) then { + _magazineHelper pushBack _x; + }; + } forEach _hardpointMags; + }; + } forEach _pylonConfigs; + + _magazineHelper = _magazineHelper select {[_truck, _x] call FUNC(hasEnoughSupply)}; + TRACE_2("can add",_x,_magazineHelper); + + if (!(_magazineHelper isEqualTo [])) then { + private _icon = getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "Icon"); if !((_icon select [0, 1]) == "\") then { _icon = ""; }; if (GVAR(level) == 0) then { - _action = [_vehicle, - getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName"), - _icon, - {_this call FUNC(rearmEntireVehicle)}, + // [Level 0] adds a single action to rearm the entire vic + private _action = [_vehicle, + getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName"), + _icon, + {_this call FUNC(rearmEntireVehicle)}, + {true}, + {}, + _vehicle] call EFUNC(interact_menu,createAction); + _vehicleActions pushBack [_action, [], _truck]; + } else { + // [Level 1,2] - Add actions for each magazine + private _actions = []; + { + private _action = [_x, + getText(configFile >> "CfgMagazines" >> _x >> "displayName"), + getText(configFile >> "CfgMagazines" >> _x >> "picture"), + {_this call FUNC(takeAmmo)}, {true}, {}, - _vehicle] call EFUNC(interact_menu,createAction); - _vehicleActions pushBack [_action, [], _target]; - } else { - _action = [_vehicle, + [_x, _vehicle]] call EFUNC(interact_menu,createAction); + + _actions pushBack [_action, [], _truck]; + } forEach _magazineHelper; + + private _action = [_vehicle, getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName"), _icon, {}, {true}, {}, []] call EFUNC(interact_menu,createAction); - _vehicleActions pushBack [_action, _actions, _target]; + _vehicleActions pushBack [_action, _actions, _truck]; }; }; -} forEach _vehicles; + false +} count _vehicles; _vehicleActions diff --git a/addons/rearm/functions/fnc_addVehicleMagazinesToSupply.sqf b/addons/rearm/functions/fnc_addVehicleMagazinesToSupply.sqf new file mode 100644 index 0000000000..087ea7fddd --- /dev/null +++ b/addons/rearm/functions/fnc_addVehicleMagazinesToSupply.sqf @@ -0,0 +1,49 @@ +/* + * Author: GitHawk + * Adds all magazines of a vehicle to the supply. + * + * Arguments: + * 0: Ammo Truck + * 1: Vehicle object or Vehicle class + * + * Return Value: + * None + * + * Example: + * [ammo_truck, tank] call ace_rearm_fnc_addVehicleMagazinesToSupply + * [ammo_truck, "B_MBT_01_arty_F"] call ace_rearm_fnc_addVehicleMagazinesToSupply + * + * Public: Yes + */ +#include "script_component.hpp" + +if !(EGVAR(common,settingsInitFinished)) exitWith { // only run this after the settings are initialized + EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(addVehicleMagazinesToSupply), _this]; +}; + +params [["_truck", objNull, [objNull]], ["_vehicle", objNull, [objNull, ""]]]; +TRACE_2("addVehicleMagazinesToSupply",_truck,_vehicle); + +if (isNull _truck) exitWith {}; +if (_vehicle isEqualType objNull) then {_vehicle = typeOf _vehicle}; +if (_vehicle == "") exitWith { + ERROR_1("VehicleType [%1] is empty in ace_rearm_fnc_addVehicleMagazinesToSupply",_string); +}; +{ + private _turretPath = _x; + private _magazines = [_vehicle, _turretPath] call FUNC(getVehicleMagazines); + TRACE_2("",_turretPath,_magazines); + { + [_truck, _x] call FUNC(addMagazineToSupply); + false + } count _magazines; + false +} count REARM_TURRET_PATHS; + +// 1.70 pylons +private _pylonConfigs = configProperties [configFile >> "CfgVehicles" >> _vehicle >> "Components" >> "TransportPylonsComponent" >> "Pylons", "isClass _x"]; +{ + private _defaultMag = getText (_x >> "attachment"); + TRACE_3("",_defaultMag,configName _x,_forEachIndex); + [_truck, _defaultMag] call FUNC(addMagazineToSupply); +} forEach _pylonConfigs; diff --git a/addons/rearm/functions/fnc_canReadSupplyCounter.sqf b/addons/rearm/functions/fnc_canReadSupplyCounter.sqf new file mode 100644 index 0000000000..80b5d35cd7 --- /dev/null +++ b/addons/rearm/functions/fnc_canReadSupplyCounter.sqf @@ -0,0 +1,31 @@ +/* + * Author: GitHawk + * Checks if unit can read supply counter. [Only for GVAR(supply) > 0] + * + * Arguments: + * 0: Ammo Truck + * 1: Unit + * + * Return Value: + * Can read supply counter + * + * Example: + * [ammo_truck, player] call ace_rearm_fnc_canReadSupplyCounter + * + * Public: No + */ +#include "script_component.hpp" + +params [ + ["_truck", objNull, [objNull]], + ["_unit", objNull, [objNull]] +]; + +(alive _unit) +&& {_unit isKindOf "CAManBase"} +&& {local _unit} +&& {alive _truck} +&& {(_truck distance _unit) < REARM_ACTION_DISTANCE} +&& {GVAR(supply) > 0} +&& {[_unit, _truck, ["IsNotInside"]] call EFUNC(common,canInteractWith)} // manually added actions need this + diff --git a/addons/rearm/functions/fnc_canRearm.sqf b/addons/rearm/functions/fnc_canRearm.sqf index 202524dd10..ea41cae5a9 100644 --- a/addons/rearm/functions/fnc_canRearm.sqf +++ b/addons/rearm/functions/fnc_canRearm.sqf @@ -3,27 +3,30 @@ * Check if a unit can rearm. * * Arguments: - * 0: Target + * 0: Vehicle * 1: Unit * * Return Value: * Can Rearm * * Example: - * [player, tank] call ace_rearm_fnc_canRearm + * [tank, player] call ace_rearm_fnc_canRearm * * Public: No */ #include "script_component.hpp" -private ["_dummy","_magazineClass"]; -params [["_target", objNull, [objNull]], ["_unit", objNull, [objNull]]]; +params [ + ["_vehicle", objNull, [objNull]], + ["_unit", objNull, [objNull]] +]; -if (GVAR(level) == 0 || {isNull _unit} || {!(_unit isKindOf "CAManBase")} || {!local _unit} || {_target distance _unit > REARM_ACTION_DISTANCE} || {_target getVariable [QGVAR(disabled), false]}) exitWith {false}; +if (!alive _vehicle) exitWith {false}; +if (GVAR(level) == 0 || {isNull _unit} || {!(_unit isKindOf "CAManBase")} || {!local _unit} || {_vehicle distance _unit > REARM_ACTION_DISTANCE} || {_vehicle getVariable [QGVAR(disabled), false]}) exitWith {false}; -_dummy = _unit getVariable [QGVAR(dummy), objNull]; +private _dummy = _unit getVariable [QGVAR(dummy), objNull]; if (isNull _dummy) exitwith {false}; -_magazineClass = _dummy getVariable QGVAR(magazineClass); +private _magazineClass = _dummy getVariable QGVAR(magazineClass); if (isNil "_magazineClass") exitWith {false}; -([_target, _magazineClass] call FUNC(getNeedRearmMagazines)) select 0 +([_vehicle, _magazineClass] call FUNC(getNeedRearmMagazines)) select 0 diff --git a/addons/rearm/functions/fnc_canStoreAmmo.sqf b/addons/rearm/functions/fnc_canStoreAmmo.sqf index a3139d6f11..b303af372c 100644 --- a/addons/rearm/functions/fnc_canStoreAmmo.sqf +++ b/addons/rearm/functions/fnc_canStoreAmmo.sqf @@ -10,16 +10,21 @@ * Can Store Ammo * * Example: - * [player, tank] call ace_rearm_fnc_canStoreAmmo + * [ammo_truck, player] call ace_rearm_fnc_canStoreAmmo * * Public: No */ #include "script_component.hpp" -params [["_target", objNull, [objNull]], ["_unit", objNull, [objNull]]]; - -!(isNull _unit || - {!(_unit isKindOf "CAManBase")} || - {!local _unit} || - {(_target distance _unit) > REARM_ACTION_DISTANCE} || - {isNull (_unit getVariable [QGVAR(dummy), objNull])}) +params [ + ["_truck", objNull, [objNull]], + ["_unit", objNull, [objNull]] +]; + +(alive _unit) +&& {_unit isKindOf "CAManBase"} +&& {local _unit} +&& {!isNull (_unit getVariable [QGVAR(dummy), objNull])} +&& {alive _truck} +&& {(_truck distance _unit) < REARM_ACTION_DISTANCE} +&& {[_unit, _truck, ["IsNotInside"]] call EFUNC(common,canInteractWith)} // manually added actions need this diff --git a/addons/rearm/functions/fnc_canTakeAmmo.sqf b/addons/rearm/functions/fnc_canTakeAmmo.sqf index 496e7a12a4..6f15f46eb0 100644 --- a/addons/rearm/functions/fnc_canTakeAmmo.sqf +++ b/addons/rearm/functions/fnc_canTakeAmmo.sqf @@ -10,16 +10,21 @@ * Can Pick Up Ammo * * Example: - * [player, tank] call ace_rearm_fnc_canTakeAmmo + * [ammo_truck, player] call ace_rearm_fnc_canTakeAmmo * * Public: No */ #include "script_component.hpp" -params [["_target", objNull, [objNull]], ["_unit", objNull, [objNull]]]; +params [ + ["_truck", objNull, [objNull]], + ["_unit", objNull, [objNull]] +]; -!(isNull _unit || - {!(_unit isKindOf "CAManBase")} || - {!local _unit} || - {(_target distance _unit) > REARM_ACTION_DISTANCE} || - {!isNull (_unit getVariable [QGVAR(dummy), objNull])}) +(alive _unit) +&& {_unit isKindOf "CAManBase"} +&& {local _unit} +&& {alive _truck} +&& {(_truck distance _unit) < REARM_ACTION_DISTANCE} +&& {isNull (_unit getVariable [QGVAR(dummy), objNull])} +&& {[_unit, _truck, ["IsNotInside"]] call EFUNC(common,canInteractWith)} // manually added actions need this diff --git a/addons/rearm/functions/fnc_createDummy.sqf b/addons/rearm/functions/fnc_createDummy.sqf index 38955fb806..ecdaf9ff55 100644 --- a/addons/rearm/functions/fnc_createDummy.sqf +++ b/addons/rearm/functions/fnc_createDummy.sqf @@ -10,18 +10,20 @@ * Created Dummy * * Example: - * ["500Rnd_127x99_mag_Tracer_Red"] call ace_rearm_fnc_createDummy + * [player, "500Rnd_127x99_mag_Tracer_Red"] call ace_rearm_fnc_createDummy * * Public: No */ #include "script_component.hpp" -private ["_ammo", "_dummyName", "_dummy"]; -params [["_unit", objNull, [objNull]], ["_magazineClass", "", [""]]]; +params [ + ["_unit", objNull, [objNull]], + ["_magazineClass", "", [""]] +]; -_ammo = getText (configFile >> "CfgMagazines" >> _magazineClass >> "ammo"); -_dummyName = getText (configFile >> "CfgAmmo" >> _ammo >> QGVAR(dummy)); -_dummy = objNull; +private _ammo = getText (configFile >> "CfgMagazines" >> _magazineClass >> "ammo"); +private _dummyName = getText (configFile >> "CfgAmmo" >> _ammo >> QGVAR(dummy)); +private _dummy = objNull; if !(_dummyName == "") then { _dummy = _dummyName createVehicle (position _unit); } else { @@ -30,4 +32,6 @@ if !(_dummyName == "") then { _dummy allowDamage false; _dummy setVariable [QGVAR(magazineClass), _magazineClass, true]; +TRACE_4("createdDummy",_unit,_magazineClass,_dummyName,_dummy); + _dummy diff --git a/addons/rearm/functions/fnc_disable.sqf b/addons/rearm/functions/fnc_disable.sqf index b5e8b77d04..0bfe9f2b3d 100644 --- a/addons/rearm/functions/fnc_disable.sqf +++ b/addons/rearm/functions/fnc_disable.sqf @@ -1,10 +1,10 @@ /* * Author: GitHawk - * Disables rearm for a vehicle. + * Disables being able to rearm a vehicle's turrets. [Global Effects] * * Arguments: - * 0: Target - * 1: Disable + * 0: Vehicle + * 1: Disable (optional) * * Return Value: * None @@ -17,5 +17,9 @@ */ #include "script_component.hpp" -params [["_target", objNull, [objNull]], ["_disable", true, [true]]]; -_target setVariable [QGVAR(disabled), _disable, true]; +params [ + ["_vehicle", objNull, [objNull]], + ["_disable", true, [true]] +]; + +_vehicle setVariable [QGVAR(disabled), _disable, true]; diff --git a/addons/rearm/functions/fnc_dropAmmo.sqf b/addons/rearm/functions/fnc_dropAmmo.sqf index eafc8bee50..8c1336476d 100644 --- a/addons/rearm/functions/fnc_dropAmmo.sqf +++ b/addons/rearm/functions/fnc_dropAmmo.sqf @@ -4,8 +4,8 @@ * * Arguments: * 0: Unit - * 1: Delete dummy object (optional) - * 2: Unholster Weapon (optional) + * 1: Delete dummy object (optional) + * 2: Unholster Weapon (optional) * * Return Value: * None @@ -17,12 +17,13 @@ */ #include "script_component.hpp" -private ["_dummy", "_actionID"]; -params [["_unit", objNull, [objNull]], ["_delete", false, [false]], ["_unholster", true, [true]]]; +params [ + ["_unit", objNull, [objNull]], + ["_delete", false, [false]], + ["_unholster", true, [true]] +]; -if (isNull _unit) exitWith {}; - -_dummy = _unit getVariable [QGVAR(dummy), objNull]; +private _dummy = _unit getVariable [QGVAR(dummy), objNull]; if !(isNull _dummy) then { detach _dummy; if (_delete) then { @@ -31,9 +32,8 @@ if !(isNull _dummy) then { _dummy setVelocity [0,0,-0.1]; }; _unit setVariable [QGVAR(dummy), objNull]; - //_unit setVariable [QEGVAR(dragging,isCarrying), false, true]; // breaks things, since it hides interact menu on _target }; -_actionID = _unit getVariable [QGVAR(ReleaseActionID), -1]; +private _actionID = _unit getVariable [QGVAR(ReleaseActionID), -1]; if (_actionID != -1) then { _unit removeAction _actionID; _unit setVariable [QGVAR(ReleaseActionID), nil]; diff --git a/addons/rearm/functions/fnc_getCaliber.sqf b/addons/rearm/functions/fnc_getCaliber.sqf new file mode 100644 index 0000000000..7a07b9a1db --- /dev/null +++ b/addons/rearm/functions/fnc_getCaliber.sqf @@ -0,0 +1,50 @@ +/* + * Author: GitHawk + * Get the caliber of the ammo in a magazine and return its parameters. + * + * Arguments: + * 0: Magazine Classname + * + * Return Value: + * 0: Caliber information + * 0: Rounded caliber + * 1: Caliber index + * + * Example: + * ["500Rnd_127x99_mag_Tracer_Red"] call ace_rearm_fnc_getCaliber + * + * Public: No + */ +#include "script_component.hpp" + +params [ + ["_magazineClass", "", [""]] +]; + +if (_magazineClass isEqualTo "") exitWith {[8, 2]}; + +private _ammo = getText (configFile >> "CfgMagazines" >> _magazineClass >> "ammo"); +private _tmpCal = getNumber (configFile >> "CfgAmmo" >> _ammo >> "ace_caliber"); +private _cal = 8; +if (_tmpCal > 0) then { + _cal = _tmpCal; +} else { + _tmpCal = getNumber (configFile >> "CfgAmmo" >> _ammo >> QGVAR(caliber)); + if (_tmpCal > 0) then { + _cal = _tmpCal; + } else { + diag_log format ["[ACE] ERROR: Undefined Ammo [%1 : %2]", _ammo, inheritsFrom (configFile >> "CfgAmmo" >> _ammo)]; + if (_ammo isKindOf "BulletBase") then { + _cal = 8; + } else { + _cal = 100; + }; + }; +}; +_cal = round _cal; +private _idx = REARM_CALIBERS find _cal; +if (_idx == -1 ) then { + _idx = 2; +}; + +[_cal, _idx] diff --git a/addons/rearm/functions/fnc_getConfigMagazines.sqf b/addons/rearm/functions/fnc_getConfigMagazines.sqf deleted file mode 100644 index dce6c5da64..0000000000 --- a/addons/rearm/functions/fnc_getConfigMagazines.sqf +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Author: GitHawk, Jonpas - * Returns all magazines a turret can hold according to config. - * - * Arguments: - * 0: Target - * 1: Turret Path - * - * Return Value: - * Magazine classes in TurretPath - * - * Example: - * [vehicle, [0]] call ace_rearm_fnc_getConfigMagazines - * - * Public: No - */ -#include "script_component.hpp" - -params [["_target", objNull, [objNull]], ["_turretPath", [], [[]]]]; - -if (isNull _target) exitWith {[]}; - -_cfg = configFile >> "CfgVehicles" >> (typeOf _target) >> "Turrets"; - -if (count _turretPath == 1) then { - _turretPath params ["_subPath"]; - - if (_subPath == -1) exitWith { - _cfg = configFile >> "CfgVehicles" >> (typeOf _target); - }; - - if (count _cfg > _subPath) then { - _cfg = _cfg select _subPath; - } else { - _cfg = nil; - }; -} else { - _turretPath params ["", "_subPath"]; - if (count _cfg > 0) then { - _cfg = (_cfg select 0) >> "Turrets"; - if (count _cfg > _subPath) then { - _cfg = _cfg select _subPath; - } else { - _cfg = nil; - }; - } else { - _cfg = nil; - }; -}; - -if !(isClass _cfg) exitWith {[]}; - -getArray (_cfg >> "magazines") diff --git a/addons/rearm/functions/fnc_getHardpointMagazines.sqf b/addons/rearm/functions/fnc_getHardpointMagazines.sqf new file mode 100644 index 0000000000..2a00fa8eb6 --- /dev/null +++ b/addons/rearm/functions/fnc_getHardpointMagazines.sqf @@ -0,0 +1,39 @@ +/* + * Author: PabstMirror + * Gets possible magazines that can be added to a pylon. + * + * Arguments: + * 0: Pylon config + * + * Return Value: + * Magazines + * + * Example: + * [config] call ace_rearm_fnc_getHardpointMagazines + * + * Public: No + */ +#include "script_component.hpp" + +params ["_pylonConfig"]; + +private _return = GVAR(hardpointGroupsCache) getVariable (str _pylonConfig); +if (isNil "_return") then { + _return = []; + private _hardpoints = (getArray (_pylonConfig >> "hardpoints")) apply {toLower _x}; + private _maxWeight = if (isNumber (_pylonConfig >> "maxWeight")) then {getNumber (_pylonConfig >> "maxWeight")} else {1e5}; + private _mags = configProperties [configFile >> "CfgMagazines", "(isClass _x) && {isArray (_x >> 'hardpoints')}"]; + { + if ((getNumber (_x >> "mass")) < _maxWeight) then { + private _magHardpoints = (getArray (_x >> "hardpoints")) apply {toLower _x}; + if (!((_hardpoints arrayIntersect _magHardpoints) isEqualTo [])) then { + _return pushBack configName _x; + }; + }; + } forEach _mags; + if ((str _pylonConfig) != "") then { + GVAR(hardpointGroupsCache) setVariable [(str _pylonConfig), _return]; + }; +}; + +_return; diff --git a/addons/rearm/functions/fnc_getMaxMagazines.sqf b/addons/rearm/functions/fnc_getMaxMagazines.sqf index 4b92431ed9..c747714d86 100644 --- a/addons/rearm/functions/fnc_getMaxMagazines.sqf +++ b/addons/rearm/functions/fnc_getMaxMagazines.sqf @@ -3,7 +3,7 @@ * Calculates the maximum number of magazines a turret can hold according to config. * * Arguments: - * 0: Target + * 0: Vehicle * 1: Turret Path * 2: Magazine Classname * @@ -17,9 +17,13 @@ */ #include "script_component.hpp" -params [["_target", objNull, [objNull]], ["_turretPath", [], [[]]], ["_magazineClass", "", [""]]]; +params [ + ["_vehicle", objNull, [objNull]], + ["_turretPath", [], [[]]], + ["_magazineClass", "", [""]] +]; -if (isNull _target) exitWith {0}; +if (isNull _vehicle) exitWith {0}; -private _count = {_x == _magazineClass} count ([_target, _turretPath] call FUNC(getConfigMagazines)); +private _count = {_x == _magazineClass} count ([_vehicle, _turretPath] call FUNC(getVehicleMagazines)); _count diff --git a/addons/rearm/functions/fnc_getNeedRearmMagazines.sqf b/addons/rearm/functions/fnc_getNeedRearmMagazines.sqf index f56b437708..6b2620a99a 100644 --- a/addons/rearm/functions/fnc_getNeedRearmMagazines.sqf +++ b/addons/rearm/functions/fnc_getNeedRearmMagazines.sqf @@ -3,7 +3,7 @@ * Get rearm return value. * * Arguments: - * 0: Target + * 0: Vehicle * 1: Magazine Classname * * Return Value: @@ -11,34 +11,68 @@ * 0: Can Rearm * 1: TurretPath * 2: Number of current magazines in turret path + * 3: Pylon Index (-1 if not a pylon) * * Example: - * [tank, "mag"] call ace_rearm_fnc_getNeedRearmMagazines + * [tank, "500Rnd_127x99_mag_Tracer_Red"] call ace_rearm_fnc_getNeedRearmMagazines * * Public: No */ #include "script_component.hpp" -private ["_return", "_magazines", "_currentMagazines"]; -params ["_target", "_magazineClass"]; +params [["_vehicle", objNull, [objNull]], ["_magazineClass", "", [""]]]; -_return = [false, [], 0]; +private _return = [false, [], 0, -1]; { - _magazines = [_target, _x] call FUNC(getConfigMagazines); + private _magazines = [_vehicle, _x] call FUNC(getVehicleMagazines); if (_magazineClass in _magazines) then { - _currentMagazines = {_x == _magazineClass} count (_target magazinesTurret _x); + private _currentMagazines = {_x == _magazineClass} count (_vehicle magazinesTurret _x); - if ((_target magazineTurretAmmo [_magazineClass, _x]) < getNumber (configFile >> "CfgMagazines" >> _magazineClass >> "count")) exitWith { - _return = [true, _x, _currentMagazines]; + if ((_vehicle magazineTurretAmmo [_magazineClass, _x]) < getNumber (configFile >> "CfgMagazines" >> _magazineClass >> "count")) exitWith { + _return = [true, _x, _currentMagazines, -1]; }; - if (_currentMagazines < ([_target, _x, _magazineClass] call FUNC(getMaxMagazines))) exitWith { - _return = [true, _x, _currentMagazines]; + if (_currentMagazines < ([_vehicle, _x, _magazineClass] call FUNC(getMaxMagazines))) exitWith { + _return = [true, _x, _currentMagazines, -1]; }; }; if (_return select 0) exitWith {}; -} forEach REARM_TURRET_PATHS; + false +} count REARM_TURRET_PATHS; +if (!(_return select 0)) then { + // 1.70 pylons + private _pylonConfigs = configProperties [configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "Components" >> "TransportPylonsComponent" >> "Pylons", "isClass _x"]; + { + private _pylonName = configName _x; + private _pylonIndex = _forEachIndex + 1; // WTF BIS + private _pylonAmmo = _vehicle ammoOnPylon _pylonName; + private _pylonMagazine = (getPylonMagazines _vehicle) select _forEachIndex; + private _pylonTurret = getArray (_x >> "turret"); + if (_pylonTurret isEqualTo []) then {_pylonTurret = [-1];}; // convert to expected array for driver + TRACE_4("",_pylonName,_pylonAmmo,_pylonMagazine,_pylonTurret); + + if (_pylonAmmo > 0) then { + if (_magazineClass == _pylonMagazine) then { // Try to refill current pylon: + private _magAmmo = getNumber (configFile >> "CfgMagazines" >> _pylonMagazine >> "count"); + if (_pylonAmmo < _magAmmo) then { + _return = [true, _pylonTurret, 0, _pylonIndex]; + }; + }; + } else { + // See what we magazines can add to the empty pylon: + private _hardpointMags = [_x] call FUNC(getHardpointMagazines); + { + if (_x == _magazineClass) then { + _return = [true, _pylonTurret, 0, _pylonIndex]; + }; + } forEach _hardpointMags; + }; + if (_return select 0) exitWith {}; + } forEach _pylonConfigs; +}; + +TRACE_3("getNeedRearmMagazines",_vehicle,_magazineClass,_return); _return diff --git a/addons/rearm/functions/fnc_getSupplyCount.sqf b/addons/rearm/functions/fnc_getSupplyCount.sqf new file mode 100644 index 0000000000..082ad7ab5c --- /dev/null +++ b/addons/rearm/functions/fnc_getSupplyCount.sqf @@ -0,0 +1,38 @@ +/* + * Author: GitHawk + * Get the supply count. + * + * Arguments: + * 0: Ammo Truck + * + * Return Value: + * Supply count + * + * Example: + * [ammo_truck] call ace_rearm_fnc_getSupplyCount + * + * Public: Yes + */ +#include "script_component.hpp" + +params [["_truck", objNull, [objNull]]]; + +if (GVAR(supply) != 1) exitWith { + WARNING("supply setting is not set to limited"); // func shouldn't have been called + -1 +}; + +private _supply = _truck getVariable QGVAR(currentSupply); + +if (isNil "_supply") then { + if (isNumber (configFile >> "CfgVehicles" >> typeOf _truck >> QGVAR(defaultSupply))) then { + _supply = getNumber (configFile >> "CfgVehicles" >> typeOf _truck >> QGVAR(defaultSupply)); + } else { + _supply = 1200; + }; + if (_supply > 0) then { + _truck setVariable [QGVAR(currentSupply), _supply, true]; + }; +}; + +_supply diff --git a/addons/rearm/functions/fnc_getVehicleMagazines.sqf b/addons/rearm/functions/fnc_getVehicleMagazines.sqf new file mode 100644 index 0000000000..6a0932d908 --- /dev/null +++ b/addons/rearm/functions/fnc_getVehicleMagazines.sqf @@ -0,0 +1,19 @@ +/* + * Author: GitHawk, Jonpas + * Returns all magazines a turret of a vehicle object can hold according to config. + * + * Arguments: + * 0: Vehicle object or typeOf + * 1: Turret Path + * + * Return Value: + * Magazine classes in TurretPath + * + * Example: + * [vehicle, [0]] call ace_rearm_fnc_getVehicleMagazines + * + * Public: No + */ +#include "script_component.hpp" + +getArray ((_this call CBA_fnc_getTurret) >> "magazines") diff --git a/addons/rearm/functions/fnc_grabAmmo.sqf b/addons/rearm/functions/fnc_grabAmmo.sqf index 9573ac85a5..a77a17284b 100644 --- a/addons/rearm/functions/fnc_grabAmmo.sqf +++ b/addons/rearm/functions/fnc_grabAmmo.sqf @@ -16,15 +16,19 @@ */ #include "script_component.hpp" -params [["_dummy", objNull, [objNull]], ["_unit", objNull, [objNull]]]; +params [ + ["_dummy", objNull, [objNull]], + ["_unit", objNull, [objNull]] +]; -REARM_HOLSTER_WEAPON +REARM_HOLSTER_WEAPON; [_unit, "forceWalk", QGVAR(vehRearm), true] call EFUNC(common,statusEffect_set); [ - 5, + TIME_PROGRESSBAR(5), [_dummy, _unit], { + private ["_actionID"]; params ["_args"]; _args params ["_dummy", "_unit"]; [_dummy, _unit] call FUNC(pickUpAmmo); diff --git a/addons/rearm/functions/fnc_handleKilled.sqf b/addons/rearm/functions/fnc_handleKilled.sqf index 5f80246f52..3e39dc727e 100644 --- a/addons/rearm/functions/fnc_handleKilled.sqf +++ b/addons/rearm/functions/fnc_handleKilled.sqf @@ -15,7 +15,9 @@ */ #include "script_component.hpp" -params [["_unit", objNull, [objNull]]]; +params [ + ["_unit", objNull, [objNull]] +]; if (!local _unit) exitWith {}; diff --git a/addons/rearm/functions/fnc_handleUnconscious.sqf b/addons/rearm/functions/fnc_handleUnconscious.sqf index eab25fcf64..0fbf1b8f06 100644 --- a/addons/rearm/functions/fnc_handleUnconscious.sqf +++ b/addons/rearm/functions/fnc_handleUnconscious.sqf @@ -16,7 +16,10 @@ */ #include "script_component.hpp" -params [["_unit", objNull, [objNull]], ["_isUnconscious", false, [false]]]; +params [ + ["_unit", objNull, [objNull]], + ["_isUnconscious", false, [false]] +]; if (!local _unit || {!_isUnconscious}) exitWith {}; diff --git a/addons/rearm/functions/fnc_hasEnoughSupply.sqf b/addons/rearm/functions/fnc_hasEnoughSupply.sqf new file mode 100644 index 0000000000..a2944db014 --- /dev/null +++ b/addons/rearm/functions/fnc_hasEnoughSupply.sqf @@ -0,0 +1,52 @@ +/* +* Author: GitHawk +* Check whether enough supply is left to take the magazine. +* +* Arguments: +* 0: Ammo Truck +* 1: Magazine Classname +* +* Return Value: +* Enough supply +* +* Example: +* [ammo_truck, "500Rnd_127x99_mag_Tracer_Red"] call ace_rearm_fnc_hasEnoughSupply +* +* Public: No +*/ +#include "script_component.hpp" + +params [["_truck", objNull, [objNull]], ["_magazineClass", "", [""]]]; + +if (isNull _truck || {_magazineClass isEqualTo ""}) exitWith {false}; + +// With infinite supply, there is always enough +if (GVAR(supply) == 0) exitWith {true}; + + +// With limited supply, we need to check supply +if (GVAR(supply) == 1) exitWith { + private _supply = [_truck] call FUNC(getSupplyCount); + ([_magazineClass] call FUNC(getCaliber)) params ["_cal", "_idx"]; + + // With caliber based rearming, we only need partial supply + if (GVAR(level) == 2) exitWith { + // If REARM_COUNT is bigger than the magazine size, we might get a bigger number than 1 + private _magazinePart = ((REARM_COUNT select _idx) / (getNumber (configFile >> "CfgMagazines" >> _magazineClass >> "count"))) min 1; + (_cal * _magazinePart <= _supply) + }; + (_cal <= _supply) +}; + + +// With magazine specific supply, we need to check stored magazines +if (GVAR(supply) == 2) exitWith { + private _magazineSupply = _truck getVariable [QGVAR(magazineSupply), []]; + private _magazinePresent = false; + { + _x params ["_magazine", "_rounds"]; + if ((_magazine isEqualTo _magazineClass) && (_rounds > 0)) exitWith {_magazinePresent = true; }; + false + } count _magazineSupply; + _magazinePresent +}; diff --git a/addons/rearm/functions/fnc_initSupplyVehicle.sqf b/addons/rearm/functions/fnc_initSupplyVehicle.sqf new file mode 100644 index 0000000000..ad1b914328 --- /dev/null +++ b/addons/rearm/functions/fnc_initSupplyVehicle.sqf @@ -0,0 +1,76 @@ +/* + * Author: Githawk, PabstMirror + * Adds rearm supply actions to a vehicle or ammo container. + * + * Arguments: + * 0: Object + * + * Return Value: + * None + * + * Example: + * [ammoTruck] call ace_rearm_fnc_initSupplyVehicle; + * + * Public: No + */ +#include "script_component.hpp" + +if (!hasInterface) exitWith {}; // For now we just add actions, so no need non-clients + +params ["_vehicle"]; +private _typeOf = typeOf _vehicle; +TRACE_2("initSupplyVehicle",_vehicle,_typeOf); + +if (!alive _vehicle) exitWith {}; + +private _configSupply = getNumber (configFile >> "CfgVehicles" >> _typeOf >> QGVAR(defaultSupply)); +private _isSupplyVehicle = _vehicle getVariable [QGVAR(isSupplyVehicle), false]; +private _oldRearmConfig = isClass (configFile >> "CfgVehicles" >> _typeOf >> "ACE_Actions" >> "ACE_MainActions" >> QGVAR(takeAmmo)); +TRACE_3("",_configSupply,_isSupplyVehicle,_oldRearmConfig); + +if ((_configSupply <= 0) && {!_isSupplyVehicle} && {!_oldRearmConfig}) exitWith {}; // Ignore if not enabled +if ((_oldRearmConfig || {_configSupply > 0}) && {_typeOf in GVAR(configTypesAdded)}) exitWith {}; // Only add class actions once +if (_oldRearmConfig || {_configSupply > 0}) then {GVAR(configTypesAdded) pushBack _typeOf}; + + +private _actionReadSupplyCounter = [ // GVAR(supply) > 0 + QGVAR(ReadSupplyCounter), + localize LSTRING(ReadSupplyCounter), // Check remaining ammunition + QPATHTOF(ui\icon_rearm_interact.paa), + {_this call FUNC(readSupplyCounter)}, + {_this call FUNC(canReadSupplyCounter)} +] call EFUNC(interact_menu,createAction); + +private _actionTakeAmmo = [ + QGVAR(takeAmmo), + localize ([LSTRING(Rearm), LSTRING(TakeAmmo)] select (GVAR(level) > 0)), + QPATHTOF(ui\icon_rearm_interact.paa), + {}, + {_this call FUNC(canTakeAmmo)}, + {_this call FUNC(addRearmActions)} +] call EFUNC(interact_menu,createAction); + +private _actionStoreAmmo = [ + QGVAR(StoreAmmo), + localize LSTRING(StoreAmmo), // "Store ammo" + QPATHTOF(ui\icon_rearm_interact.paa), + {_this call FUNC(storeAmmo)}, + {_this call FUNC(canStoreAmmo)} +] call EFUNC(interact_menu,createAction); + +if (_oldRearmConfig || {_configSupply > 0}) then { + TRACE_1("Adding Class Actions",_typeOf); + [_typeOf, 0, ["ACE_MainActions"], _actionReadSupplyCounter] call EFUNC(interact_menu,addActionToClass); + if (!_oldRearmConfig) then { + [_typeOf, 0, ["ACE_MainActions"], _actionTakeAmmo] call EFUNC(interact_menu,addActionToClass); + [_typeOf, 0, ["ACE_MainActions"], _actionStoreAmmo] call EFUNC(interact_menu,addActionToClass); + } else { + WARNING_1("Actions already present on [%1]. Old Compat PBO?",_typeOf); + }; +} else { + TRACE_1("Adding Object Actions",_typeOf); + [_vehicle, 0, ["ACE_MainActions"], _actionReadSupplyCounter] call EFUNC(interact_menu,addActionToObject); + [_vehicle, 0, ["ACE_MainActions"], _actionTakeAmmo] call EFUNC(interact_menu,addActionToObject); + [_vehicle, 0, ["ACE_MainActions"], _actionStoreAmmo] call EFUNC(interact_menu,addActionToObject); +}; + diff --git a/addons/rearm/functions/fnc_makeDummy.sqf b/addons/rearm/functions/fnc_makeDummy.sqf index 5c19f8f12d..fbdd336a0d 100644 --- a/addons/rearm/functions/fnc_makeDummy.sqf +++ b/addons/rearm/functions/fnc_makeDummy.sqf @@ -16,7 +16,10 @@ */ #include "script_component.hpp" -params [["_obj", objNull, [objNull]], ["_dirAndUp", [[1,0,0],[0,0,1]], [[]]]]; +params [ + ["_obj", objNull, [objNull]], + ["_dirAndUp", [[1,0,0],[0,0,1]], [[]]] +]; _obj setVectorDirAndUp _dirAndUp; _obj allowDamage false; diff --git a/addons/rearm/functions/fnc_moduleRearmSettings.sqf b/addons/rearm/functions/fnc_moduleRearmSettings.sqf index af627862da..2d498c8b57 100644 --- a/addons/rearm/functions/fnc_moduleRearmSettings.sqf +++ b/addons/rearm/functions/fnc_moduleRearmSettings.sqf @@ -10,17 +10,22 @@ * Return Value: * None * - * Example; + * Example: * function = "ace_rearm_fnc_moduleRearmSettings" * * Public: No */ #include "script_component.hpp" -params ["_logic", "", ["_activated", false, [false]]]; +params [ + "_logic", + "", + ["_activated", false, [false]] +]; if (!_activated) exitWith {}; [_logic, QGVAR(level), "level"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(supply), "supply"] call EFUNC(common,readSettingFromModule); -diag_log text format ["[ACE]: Rearm Module Initialized on level: %1", GVAR(level)]; +INFO_2("Module Initialized [level: %1][supply: %2]", GVAR(level), GVAR(supply)); diff --git a/addons/rearm/functions/fnc_pickUpAmmo.sqf b/addons/rearm/functions/fnc_pickUpAmmo.sqf index 653c131586..ee2845336b 100644 --- a/addons/rearm/functions/fnc_pickUpAmmo.sqf +++ b/addons/rearm/functions/fnc_pickUpAmmo.sqf @@ -16,15 +16,18 @@ */ #include "script_component.hpp" -params [["_target", objNull, [objNull]], ["_unit", objNull, [objNull]]]; +params [ + ["_dummy", objNull, [objNull]], + ["_unit", objNull, [objNull]] +]; -_dummy = _unit getVariable [QGVAR(dummy), objNull]; -if !(isNull _dummy) exitWith {}; +private _attachedDummy = _unit getVariable [QGVAR(dummy), objNull]; +if !(isNull _attachedDummy) exitWith {}; -//_target attachTo [_unit, [0,0.7,0], "pelvis"]; -_target attachTo [_unit, [0,1,0], "pelvis"]; -{ - [QGVAR(makeDummyEH), [_dummy, [[-1,0,0],[0,0,1]]], _x] call CBA_fnc_targetEvent; -} count (position _unit nearObjects ["CAManBase", 100]); -_unit setVariable [QGVAR(dummy), _target]; -//_unit setVariable [QEGVAR(dragging,isCarrying), true, true]; // breaks things, since it hides interact menu on _target +_dummy attachTo [_unit, [0,1,0], "pelvis"]; + +private _nearUnits = _unit nearObjects ["CAManBase", 100]; +// disableCollisionWith damage with the nearby units: +[QGVAR(makeDummyEH), [_dummy, [[-1,0,0],[0,0,1]]], _nearUnits] call CBA_fnc_targetEvent; + +_unit setVariable [QGVAR(dummy), _dummy]; diff --git a/addons/rearm/functions/fnc_readSupplyCounter.sqf b/addons/rearm/functions/fnc_readSupplyCounter.sqf new file mode 100644 index 0000000000..cfcdb1b865 --- /dev/null +++ b/addons/rearm/functions/fnc_readSupplyCounter.sqf @@ -0,0 +1,76 @@ +/* + * Author: GitHawk + * Get the remaining ammunition amount. + * + * Arguments: + * 0: Ammo Truck + * 1: Unit + * + * Return Value: + * None + * + * Example: + * [ammo_truck, player] call ace_rearm_fnc_readSupplyCounter + * + * Public: No + */ +#include "script_component.hpp" + +params [["_truck", objNull, [objNull]],["_unit", objNull, [objNull]]]; +TRACE_2("readSupplyCounter",_truck,_unit); + +if (GVAR(supply) == 0) exitWith {WARNING("Supply is unlimited");}; + +if (GVAR(supply) == 1) then { + [ + TIME_PROGRESSBAR(5), + [_unit, _truck, [_truck] call FUNC(getSupplyCount)], + { + params ["_args"]; + _args params [["_unit", objNull, [objNull]], ["_truck", objNull, [objNull]], ["_supplyCount", 0, [0]]]; + if (_supplyCount > 0 ) then { + [[LSTRING(Hint_RemainingSupplyPoints), _supplyCount], 2, _unit] call EFUNC(common,displayTextStructured); + } else { + [LSTRING(Hint_EmptySupplyPoints), 2, _unit] call EFUNC(common,displayTextStructured); + }; + true + }, + {true}, + localize LSTRING(ReadSupplyCounterAction), + {true}, + ["isnotinside"] + ] call EFUNC(common,progressBar); +} else { + [ + TIME_PROGRESSBAR(5), + [_unit, _truck], + { + params ["_args"]; + _args params [["_unit", objNull, [objNull]], ["_truck", objNull, [objNull]]]; + private _supply = 1.5; + private _numChars = count (localize LSTRING(Hint_RemainingAmmo)); + private _text = ""; + private _magazines = _truck getVariable QGVAR(magazineSupply); + if !(isNil "_magazines") then { + { + _x params ["_magazineClass", "_rounds"]; + private _line = format ["%1: %2", getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"), _rounds]; + _numChars = _numChars max (count _line); + _text = format ["%1
%2", _text, _line]; + _supply = _supply + 0.5; + false + } count _magazines; + }; + if (_supply > 1.5) then { + [[LSTRING(Hint_RemainingAmmo), _text], _supply, _unit, (_numChars/2.9)] call EFUNC(common,displayTextStructured); + } else { + [LSTRING(Hint_Empty), 2, _unit] call EFUNC(common,displayTextStructured); + }; + true + }, + {true}, + localize LSTRING(ReadSupplyCounterAction), + {true}, + ["isnotinside"] + ] call EFUNC(common,progressBar); +}; diff --git a/addons/rearm/functions/fnc_rearm.sqf b/addons/rearm/functions/fnc_rearm.sqf index 61009b085d..363a4905c7 100644 --- a/addons/rearm/functions/fnc_rearm.sqf +++ b/addons/rearm/functions/fnc_rearm.sqf @@ -3,71 +3,46 @@ * Starts progress bar for rearming a vehicle. * * Arguments: - * 0: Unit + * 0: Target Vehicle + * 1: Unit * * Return Value: * None * * Example: - * [player] call ace_rearm_fnc_rearm + * [tank, player] call ace_rearm_fnc_rearm * * Public: No */ #include "script_component.hpp" -private ["_magazineClass", "_ammo", "_tmpCal", "_cal", "_idx", "_needRearmMags", "_magazineDisplayName"]; -params [["_unit", objNull, [objNull]]]; +params [["_target", objNull, [objNull]],["_unit", objNull, [objNull]]]; +TRACE_2("rearm",_target,_unit); -_dummy = _unit getVariable [QGVAR(dummy), objNull]; -if (isNull _dummy) exitwith {false}; -_magazineClass = _dummy getVariable QGVAR(magazineClass); -if (isNil "_magazineClass") exitWith {false}; +private _attachedDummy = _unit getVariable [QGVAR(dummy), objNull]; +if (isNull _attachedDummy) exitwith {ERROR_1("attachedDummy null",_attachedDummy);}; +private _magazineClass = _attachedDummy getVariable QGVAR(magazineClass); +if (isNil "_magazineClass") exitWith {ERROR_1("magazineClass nil",_attachedDummy);}; -_ammo = getText (configFile >> "CfgMagazines" >> _magazineClass >> "ammo"); -_tmpCal = getNumber (configFile >> "CfgAmmo" >> _ammo >> "ace_caliber"); -_cal = 8; -if (_tmpCal > 0) then { - _cal = _tmpCal; -} else { - _tmpCal = getNumber (configFile >> "CfgAmmo" >> _ammo >> QGVAR(caliber)); - if (_tmpCal > 0) then { - _cal = _tmpCal; - } else { - diag_log format ["[ACE] ERROR: Undefined Ammo [%1 : %2]", _ammo, inheritsFrom (configFile >> "CfgAmmo" >> _ammo)]; - if (_ammo isKindOf "BulletBase") then { - _cal = 8; - } else { - _cal = 100; - }; - }; -}; -_cal = round _cal; -_idx = REARM_CALIBERS find _cal; -if (_idx == -1) then { - _idx = 2; -}; +([_magazineClass] call FUNC(getCaliber)) params ["_cal", "_idx"]; // Get magazines that can be rearmed -_needRearmMags = [_target, _magazineClass] call FUNC(getNeedRearmMagazines); -_needRearmMags params ["_needRearm", "_turretPath", "_cnt"]; +private _needRearmMags = [_target, _magazineClass] call FUNC(getNeedRearmMagazines); +_needRearmMags params ["_needRearm", "_turretPath", "_cnt", "_pylon"]; // Exit if no magazines need rearming -if (!_needRearm) exitWith { - diag_log format ["[ACE] ERROR: Could not find turret for %1 in %2", _magazineClass, typeOf _target]; -}; +if (!_needRearm) exitWith {ERROR_2("Could not find turret for %1 in %2", _magazineClass, typeOf _target);}; -//hint format ["Magazine: %1\nAmmo: %2\nCaliber: %3\nIndex: %4\nTurretPath: %5\nREARM_DURATION_REARM: %6\nCount: %7", _magazine, _ammo, _cal, _idx, _turretPath, (REARM_DURATION_REARM select _idx), (REARM_COUNT select _idx)]; - -_magazineDisplayName = getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"); +private _magazineDisplayName = getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"); if (_magazineDisplayName == "") then { _magazineDisplayName = _magazineClass; - diag_log format ["[ACE] ERROR: Magazine is missing display name [%1]", _magazineClass]; + ERROR_1("Magazine is missing display name [%1]", _magazineClass); }; [ - (REARM_DURATION_REARM select _idx), - [_target, _unit, _turretPath, _cnt, _magazineClass, (REARM_COUNT select _idx)], - FUNC(rearmSuccess), + TIME_PROGRESSBAR(REARM_DURATION_REARM select _idx), + [_target, _unit, _turretPath, _cnt, _magazineClass, (REARM_COUNT select _idx), _pylon], + {(_this select 0) call FUNC(rearmSuccess)}, "", format [localize LSTRING(RearmAction), getText(configFile >> "CfgVehicles" >> (typeOf _target) >> "displayName"), _magazineDisplayName], {true}, diff --git a/addons/rearm/functions/fnc_rearmEntireVehicle.sqf b/addons/rearm/functions/fnc_rearmEntireVehicle.sqf index 27fd20c528..8fddb4ab85 100644 --- a/addons/rearm/functions/fnc_rearmEntireVehicle.sqf +++ b/addons/rearm/functions/fnc_rearmEntireVehicle.sqf @@ -16,11 +16,16 @@ * Public: No */ #include "script_component.hpp" -params [["_target", objNull, [objNull]], ["_unit", objNull, [objNull]], ["_vehicle", objNull, [objNull]]]; // _target is for future possible finite ammo, _unit placeholder + +params [ + ["_truck", objNull, [objNull]], + "", + ["_vehicle", objNull, [objNull]] +]; [ - 10, - _vehicle, + TIME_PROGRESSBAR(10), + [_truck, _vehicle], FUNC(rearmEntireVehicleSuccess), "", format [localize LSTRING(BasicRearmAction), getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")], diff --git a/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf b/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf index 2eb0b408f9..dda3ff9ca7 100644 --- a/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf +++ b/addons/rearm/functions/fnc_rearmEntireVehicleSuccess.sqf @@ -3,41 +3,34 @@ * Rearm an entire vehicle. * * Arguments: - * 0: Vehicle + * 0: Rearm information + * 0: Ammo Truck + * 1: Vehicle - * 1: TurretPath + * 0: Ammo Truck + * 1: Vehicle + * 2: TurretPath * * Return Value: * None * * Example: - * [tank, [0]] call ace_rearm_fnc_rearmEntireVehicleSuccessLocal + * [ammo_truck, tank, [0]] call ace_rearm_fnc_rearmEntireVehicleSuccessLocal * * Public: No */ #include "script_component.hpp" -private ["_magazines", "_magazine", "_currentMagazines", "_maxMagazines", "_maxRounds", "_currentRounds"]; -params [["_vehicle", objNull, [objNull]], ["_turretPath", [], [[]]]]; -TRACE_2("params",_vehicle,_turretPath); +params [["_truck", objNull, [objNull]], ["_vehicle", objNull, [objNull]], ["_turretPath", [], [[]]]]; +TRACE_3("rearmEntireVehicleSuccessLocal",_truck,_vehicle,_turretPath); -//ToDo: Cleanup with CBA_fnc_ownerEvent in CBA 2.4.2 -if (!(_vehicle turretLocal _turretPath)) exitWith {TRACE_1("not local turret",_turretPath);}; - -_magazines = [_vehicle, _turretPath] call FUNC(getConfigMagazines); +// 1.70 pylons +private _pylonConfigs = configProperties [configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "Components" >> "TransportPylonsComponent" >> "Pylons", "isClass _x"]; { - _magazine = _x; - _currentMagazines = { _x == _magazine } count (_vehicle magazinesTurret _turretPath); - _maxMagazines = [_vehicle, _turretPath, _magazine] call FUNC(getMaxMagazines); - _maxRounds = getNumber (configFile >> "CfgMagazines" >> _magazine >> "count"); - _currentRounds = _vehicle magazineTurretAmmo [_magazine, _turretPath]; + private _pylonTurret = getArray (_x >> "turret"); + if (_pylonTurret isEqualTo []) then {_pylonTurret = [-1];}; // convert to expected array for driver + if (_pylonTurret isEqualTo _turretPath) then { + private _pylonIndex = _forEachIndex + 1; // GJ BIS + private _pylonAmmo = _vehicle ammoOnPylon _pylonIndex; + private _pylonMagazine = (getPylonMagazines _vehicle) select _forEachIndex; + private _maxRounds = getNumber (configFile >> "CfgMagazines" >> _pylonMagazine >> "count"); + TRACE_4("",_pylonIndex,_pylonAmmo,_maxRounds,_pylonMagazine); + if (_pylonAmmo < _maxRounds) then { + if ((GVAR(supply) == 0) || {[_truck, _pylonMagazine, (_maxRounds - _pylonAmmo)] call FUNC(removeMagazineFromSupply)}) then { + TRACE_3("Adding Rounds",_vehicle,_pylonIndex,_maxRounds); + _vehicle setAmmoOnPylon [_pylonIndex, _maxRounds]; + }; + }; + }; +} forEach _pylonConfigs; + +private _magazines = [_vehicle, _turretPath] call FUNC(getVehicleMagazines); +if (isNil "_magazines") exitWith {}; +{ + private _magazine = _x; + private _currentMagazines = { _x == _magazine } count (_vehicle magazinesTurret _turretPath); + private _maxMagazines = [_vehicle, _turretPath, _magazine] call FUNC(getMaxMagazines); + private _maxRounds = getNumber (configFile >> "CfgMagazines" >> _magazine >> "count"); + private _currentRounds = _vehicle magazineTurretAmmo [_magazine, _turretPath]; TRACE_7("Rearmed Turret",_vehicle,_turretPath,_currentMagazines,_maxMagazines,_currentRounds,_maxRounds,_magazine); @@ -38,11 +56,21 @@ _magazines = [_vehicle, _turretPath] call FUNC(getConfigMagazines); _currentMagazines = _currentMagazines + 1; }; if (_currentMagazines < _maxMagazines) then { - _vehicle setMagazineTurretAmmo [_magazine, _maxRounds, _turretPath]; + private _success = true; + if ((GVAR(supply) == 0) || {[_truck, _magazine, (_maxRounds - _currentRounds)] call FUNC(removeMagazineFromSupply)}) then { + _vehicle setMagazineTurretAmmo [_magazine, _maxRounds, _turretPath]; + }; + for "_idx" from 1 to (_maxMagazines - _currentMagazines) do { - _vehicle addMagazineTurret [_magazine, _turretPath]; + if ((GVAR(supply) == 0) || {[_truck, _magazine, _maxRounds] call FUNC(removeMagazineFromSupply)}) then { + _vehicle addMagazineTurret [_magazine, _turretPath]; + }; }; } else { - _vehicle setMagazineTurretAmmo [_magazine, _maxRounds, _turretPath]; + if ((GVAR(supply) == 0) || {[_truck, _magazine, (_maxRounds - _currentRounds)] call FUNC(removeMagazineFromSupply)}) then { + _vehicle setMagazineTurretAmmo [_magazine, _maxRounds, _turretPath]; + }; }; -} foreach _magazines; + false +} count _magazines; + diff --git a/addons/rearm/functions/fnc_rearmSuccess.sqf b/addons/rearm/functions/fnc_rearmSuccess.sqf index 4a8e4972ed..c609117002 100644 --- a/addons/rearm/functions/fnc_rearmSuccess.sqf +++ b/addons/rearm/functions/fnc_rearmSuccess.sqf @@ -1,49 +1,42 @@ /* * Author: GitHawk - * Rearms a vehicle. + * Rearms a vehicle, after progress bar finishes, pass args to machine where turret is local. * * Arguments: - * 0: Params - * 0: Target - * 1: Unit - * 2: Turret Path - * 3: Number of magazines - * 4: Magazine Classname - * 5: Number of rounds + * 0: Vehicle + * 1: Unit + * 2: Turret Path + * 3: Number of magazines + * 4: Magazine Classname + * 5: Number of rounds + * 6: Pylon Index * * Return Value: * None * * Example: - * [[vehicle, player, [-1], 2, "5000Rnd_762x51_Belt", 500]] call ace_rearm_fnc_rearmSuccess + * [vehicle, player, [-1], 2, "5000Rnd_762x51_Belt", 500, -1] call ace_rearm_fnc_rearmSuccess * * Public: No */ #include "script_component.hpp" -private ["_dummy", "_weaponSelect", "_turretOwnerID"]; -params [["_args", [objNull, objNull, [], 0, "", 0], [[]], [6]]]; -_args params ["_target", "_unit", "_turretPath", "_numMagazines", "_magazineClass", "_numRounds"]; -TRACE_6("params",_target,_unit,_turretPath,_numMagazines,_magazineClass,_numRounds); - -//hint format ["Target: %1\nTurretPath: %2\nNumMagazines: %3\nMagazine: %4\nNumRounds: %5", _target, _turretPath, _numMagazines, _magazineClass, _numRounds]; +params [["_vehicle", objNull, [objNull]], ["_unit", objNull, [objNull]], "_turretPath", "_numMagazines", "_magazineClass", "_numRounds", "_pylon"]; +TRACE_7("rearmSuccess",_vehicle,_unit,_turretPath,_numMagazines,_magazineClass,_numRounds,_pylon); if (local _unit) then { [_unit, true, true] call FUNC(dropAmmo); }; -//ToDo: Cleanup with CBA_fnc_ownerEvent in CBA 2.4.2 -[QGVAR(rearmSuccessLocalEH), _this] call CBA_fnc_globalEvent; +if (!alive _vehicle) exitWith {WARNING("vehicle dead/null");}; -/* if (isServer) then { - _turretOwnerID = _target turretOwner _turretPath; + private _turretOwnerID = _vehicle turretOwner _turretPath; if (_turretOwnerID == 0) then { - [QGVAR(rearmSuccessLocalEH), _this, _vehicle] call CBA_fnc_targetEvent; + [QGVAR(rearmSuccessLocalEH), _this, [_vehicle]] call CBA_fnc_targetEvent; } else { - [QGVAR(rearmSuccessLocalEH), _this, _turretOwnerID] call CBA_fnc_targetEvent; + [QGVAR(rearmSuccessLocalEH), _this, _turretOwnerID] call CBA_fnc_ownerEvent; }; } else { - [QGVAR(rearmSuccessLocalEH), _this] call CBA_fnc_serverEvent; + [QGVAR(rearmSuccessEH), _this] call CBA_fnc_serverEvent; }; - */ \ No newline at end of file diff --git a/addons/rearm/functions/fnc_rearmSuccessLocal.sqf b/addons/rearm/functions/fnc_rearmSuccessLocal.sqf index dc4afbc886..5ba5492ad4 100644 --- a/addons/rearm/functions/fnc_rearmSuccessLocal.sqf +++ b/addons/rearm/functions/fnc_rearmSuccessLocal.sqf @@ -3,108 +3,96 @@ * Rearms a vehicle on the turret owner. * * Arguments: - * 0: Params - * 0: Target - * 1: Unit - * 2: Turret Path - * 3: Number of magazines - * 4: Magazine Classname - * 5: Number of rounds + * 0: Vehicle + * 1: Unit + * 2: Turret Path + * 3: Number of magazines + * 4: Magazine Classname + * 5: Number of rounds + * 6: Pylon Index * * Return Value: * None * * Example: - * [[vehicle, player, [-1], 2, "5000Rnd_762x51_Belt", 500]] call ace_rearm_fnc_rearmSuccess + * [vehicle, player, [-1], 2, "5000Rnd_762x51_Belt", 500, ""] call ace_rearm_fnc_rearmSuccessLocal * * Public: No */ #include "script_component.hpp" -private ["_rounds", "_currentRounds", "_maxMagazines", "_currentMagazines", "_dummy", "_weaponSelect"]; -params [["_args", [objNull, objNull, [], 0, "", 0], [[]], [6]]]; -_args params ["_target", "_unit", "_turretPath", "_numMagazines", "_magazineClass", "_numRounds"]; -TRACE_6("params",_target,_unit,_turretPath,_numMagazines,_magazineClass,_numRounds); +params ["_vehicle", "_unit", "_turretPath", "_numMagazines", "_magazineClass", "_numRounds", "_pylon"]; +TRACE_7("rearmSuccessLocal",_vehicle,_unit,_turretPath,_numMagazines,_magazineClass,_numRounds,_pylon); -//ToDo: Cleanup with CBA_fnc_ownerEvent in CBA 2.4.2 -if (!(_target turretLocal _turretPath)) exitWith {TRACE_1("not local turret",_turretPath);}; +private _rounds = getNumber (configFile >> "CfgMagazines" >> _magazineClass >> "count"); -//hint format ["Target: %1\nTurretPath: %2\nNumMagazines: %3\nMagazine: %4\nNumRounds: %5\nUnit: %6", _target, _turretPath, _numMagazines, _magazineClass, _numRounds, _unit]; +if (_pylon > 0) exitWith { + if (_turretPath isEqualTo [-1]) then {_turretPath = [];}; // Convert back to pylon turret format + private _currentCount = _vehicle ammoOnPylon _pylon; + private _newCount = ((_currentCount max 0) + _numRounds) min _rounds; + TRACE_2("",_pylon,_magazineClass,_newCount); + _vehicle setPylonLoadOut [_pylon, _magazineClass, false, _turretPath]; + _vehicle setAmmoOnPylon [_pylon, _newCount]; +}; -_rounds = getNumber (configFile >> "CfgMagazines" >> _magazineClass >> "count"); -_currentRounds = 0; +private _currentRounds = 0; +private _maxMagazines = [_vehicle, _turretPath, _magazineClass] call FUNC(getMaxMagazines); -_maxMagazines = [_target, _turretPath, _magazineClass] call FUNC(getMaxMagazines); if (_maxMagazines == 1) then { - _currentMagazines = { _x == _magazineClass } count (_target magazinesTurret _turretPath); + private _currentMagazines = { _x == _magazineClass } count (_vehicle magazinesTurret _turretPath); if (_currentMagazines == 0 && {!(_turretPath isEqualTo [-1])}) then { // Driver gun will always retain it's magazines - _target addMagazineTurret [_magazineClass, _turretPath]; + _vehicle addMagazineTurret [_magazineClass, _turretPath]; + _vehicle setMagazineTurretAmmo [_magazineClass, 0, _turretPath]; }; if (GVAR(level) == 1) then { // Fill magazine completely - _target setMagazineTurretAmmo [_magazineClass, _rounds, _turretPath]; - [QEGVAR(common,displayTextStructured), - [ - [LSTRING(Hint_RearmedTriple), _rounds, + _vehicle setMagazineTurretAmmo [_magazineClass, _rounds, _turretPath]; + [QEGVAR(common,displayTextStructured), [[LSTRING(Hint_RearmedTriple), _rounds, getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"), - getText(configFile >> "CfgVehicles" >> (typeOf _target) >> "displayName")], 3, _unit - ], - [_unit]] call CBA_fnc_targetEvent; + getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")], 3, _unit], [_unit]] call CBA_fnc_targetEvent; } else { // Fill only at most _numRounds - _target setMagazineTurretAmmo [_magazineClass, ((_target magazineTurretAmmo [_magazineClass, _turretPath]) + _numRounds) min _rounds, _turretPath]; - [QEGVAR(common,displayTextStructured), - [ - [LSTRING(Hint_RearmedTriple), _numRounds, + _vehicle setMagazineTurretAmmo [_magazineClass, ((_vehicle magazineTurretAmmo [_magazineClass, _turretPath]) + _numRounds) min _rounds, _turretPath]; + [QEGVAR(common,displayTextStructured), [[LSTRING(Hint_RearmedTriple), _numRounds, getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"), - getText(configFile >> "CfgVehicles" >> (typeOf _target) >> "displayName")], 3, _unit - ], - [_unit]] call CBA_fnc_targetEvent; + getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")], 3, _unit], [_unit]] call CBA_fnc_targetEvent; }; } else { for "_idx" from 1 to (_maxMagazines+1) do { - _currentRounds = _target magazineTurretAmmo [_magazineClass, _turretPath]; + _currentRounds = _vehicle magazineTurretAmmo [_magazineClass, _turretPath]; if (_currentRounds > 0 || {_idx == (_maxMagazines+1)}) exitWith { if (_idx == (_maxMagazines+1) && {!(_turretPath isEqualTo [-1])}) then { - _target addMagazineTurret [_magazineClass, _turretPath]; + _vehicle addMagazineTurret [_magazineClass, _turretPath]; }; if (GVAR(level) == 2) then { - //hint format ["Target: %1\nTurretPath: %2\nNumMagazines: %3\nMaxMagazines %4\nMagazine: %5\nNumRounds: %6\nMagazine: %7", _target, _turretPath, _numMagazines, _maxMagazines, _currentRounds, _numRounds, _magazineClass]; + //hint format ["Target: %1\nTurretPath: %2\nNumMagazines: %3\nMaxMagazines %4\nMagazine: %5\nNumRounds: %6\nMagazine: %7", _vehicle, _turretPath, _numMagazines, _maxMagazines, _currentRounds, _numRounds, _magazineClass]; // Fill only at most _numRounds if ((_currentRounds + _numRounds) > _rounds) then { - _target setMagazineTurretAmmo [_magazineClass, _rounds, _turretPath]; + _vehicle setMagazineTurretAmmo [_magazineClass, _rounds, _turretPath]; if (_numMagazines < _maxMagazines) then { - _target addMagazineTurret [_magazineClass, _turretPath]; - _target setMagazineTurretAmmo [_magazineClass, _currentRounds + _numRounds - _rounds, _turretPath]; + _vehicle addMagazineTurret [_magazineClass, _turretPath]; + _vehicle setMagazineTurretAmmo [_magazineClass, _currentRounds + _numRounds - _rounds, _turretPath]; }; } else { - _target setMagazineTurretAmmo [_magazineClass, _currentRounds + _numRounds, _turretPath]; + _vehicle setMagazineTurretAmmo [_magazineClass, _currentRounds + _numRounds, _turretPath]; }; - [QEGVAR(common,displayTextStructured), - [ - [LSTRING(Hint_RearmedTriple), _numRounds, + [QEGVAR(common,displayTextStructured), [[LSTRING(Hint_RearmedTriple), _numRounds, getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"), - getText(configFile >> "CfgVehicles" >> (typeOf _target) >> "displayName")], 3, _unit - ], - [_unit]] call CBA_fnc_targetEvent; + getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")], 3, _unit], [_unit]] call CBA_fnc_targetEvent; } else { // Fill current magazine completely and fill next magazine partially - _target setMagazineTurretAmmo [_magazineClass, _rounds, _turretPath]; + _vehicle setMagazineTurretAmmo [_magazineClass, _rounds, _turretPath]; if (_numMagazines < _maxMagazines) then { - _target addMagazineTurret [_magazineClass, _turretPath]; - _target setMagazineTurretAmmo [_magazineClass, _currentRounds, _turretPath]; + _vehicle addMagazineTurret [_magazineClass, _turretPath]; + _vehicle setMagazineTurretAmmo [_magazineClass, _currentRounds, _turretPath]; }; - [QEGVAR(common,displayTextStructured), - [ - [LSTRING(Hint_RearmedTriple), _rounds, + [QEGVAR(common,displayTextStructured), [[LSTRING(Hint_RearmedTriple), _rounds, getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"), - getText(configFile >> "CfgVehicles" >> (typeOf _target) >> "displayName")], 3, _unit - ], - [_unit]] call CBA_fnc_targetEvent; + getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")], 3, _unit], [_unit]] call CBA_fnc_targetEvent; }; }; - _target removeMagazineTurret [_magazineClass, _turretPath]; + _vehicle removeMagazineTurret [_magazineClass, _turretPath]; _numMagazines = _numMagazines - 1; }; }; diff --git a/addons/rearm/functions/fnc_removeMagazineFromSupply.sqf b/addons/rearm/functions/fnc_removeMagazineFromSupply.sqf new file mode 100644 index 0000000000..056ed26f48 --- /dev/null +++ b/addons/rearm/functions/fnc_removeMagazineFromSupply.sqf @@ -0,0 +1,92 @@ +/* + * Author: GitHawk + * Removes a magazine from the supply. + * + * Arguments: + * 0: Ammo Truck + * 1: Magazine Classname + * 2: Number of Rounds to withdraw (default: -1) + * + * Return Value: + * Magazine was removed + * + * Example: + * [ammo_truck, "500Rnd_127x99_mag_Tracer_Red"] call ace_rearm_fnc_removeMagazineFromSupply + * + * Public: Yes + */ +#include "script_component.hpp" + +params [["_truck", objNull, [objNull]], ["_magazineClass", "", [""]], ["_numRounds", -1, [0]]]; +TRACE_3("removeMagazineFromSupply",_truck,_magazineClass,_numRounds); + +if (isNull _truck || {_magazineClass isEqualTo ""}) exitWith {false}; + +private _return = false; +([_magazineClass] call FUNC(getCaliber)) params ["_cal", "_idx"]; + +if (GVAR(supply) == 0) then { + WARNING("supply setting is set to unlimited"); // func shouldn't have been called + _return = true; +}; + +if (GVAR(supply) == 1) then { + private _supply = [_truck] call FUNC(getSupplyCount); + if (GVAR(level) == 2) then { + // Remove partial magazine supply count + private _rearmAmount = (REARM_COUNT select _idx); + if (_numRounds > 0) then { + _rearmAmount = _numRounds; + }; + private _magazinePart = (_rearmAmount / (getNumber (configFile >> "CfgMagazines" >> _magazineClass >> "count"))) min 1; + if (_supply >= (_cal * _magazinePart)) then { + [_truck, (_supply - (_cal * _magazinePart))] call FUNC(setSupplyCount); + _return = true; + }; + } else { + // Remove entire magazine supply count + if (_supply >= _cal) then { + [_truck, (_supply - _cal)] call FUNC(setSupplyCount); + _return = true; + }; + }; +}; + +if (GVAR(supply) == 2) then { + private _magazineSupply = _truck getVariable [QGVAR(magazineSupply), []]; + private _magazineIdx = -1; + { + _x params ["_magazine"]; + if ((_magazine isEqualTo _magazineClass)) exitWith { + _magazineIdx = _forEachIndex; + }; + } forEach _magazineSupply; + if (_magazineIdx == -1) exitWith {false}; + + (_magazineSupply select _magazineIdx) params ["", "_rounds"]; + + private _configRounds = getNumber (configFile >> "CfgMagazines" >> _magazineClass >> "count"); + if (GVAR(level) == 2) then { + // With caliber based rearming, we need to remove the correct amount + private _rearmAmount = (REARM_COUNT select _idx); + if (_numRounds > 0) then { + if (_numRounds > _rearmAmount) then { + _rearmAmount = ceil (_numRounds / _rearmAmount); + }; + }; + private _roundsPerTransaction = _rearmAmount min _configRounds; + if (_rounds >= _roundsPerTransaction) then { + _magazineSupply set [_magazineIdx, [_magazineClass, (_rounds - _roundsPerTransaction)]]; + _truck setVariable [QGVAR(magazineSupply), _magazineSupply, true]; + _return = true; + }; + } else { + // Remove entire magazine + if (_rounds >= _configRounds) then { + _magazineSupply set [_magazineIdx, [_magazineClass, (_rounds - _configRounds)]]; + _truck setVariable [QGVAR(magazineSupply), _magazineSupply, true]; + _return = true; + }; + }; +}; +_return diff --git a/addons/rearm/functions/fnc_setSupplyCount.sqf b/addons/rearm/functions/fnc_setSupplyCount.sqf new file mode 100644 index 0000000000..d9d5194550 --- /dev/null +++ b/addons/rearm/functions/fnc_setSupplyCount.sqf @@ -0,0 +1,28 @@ +/* + * Author: GitHawk + * Sets the supply count. [Global Effects] + * + * Arguments: + * 0: Ammo Truck + * 1: Supply Count + * + * Return Value: + * None + * + * Example: + * [ammo_truck, 1000] call ace_rearm_fnc_setSupplyCount + * + * Public: Yes + */ +#include "script_component.hpp" + +if !(EGVAR(common,settingsInitFinished)) exitWith { // only run this after the settings are initialized + EGVAR(common,runAtSettingsInitialized) pushBack [FUNC(setSupplyCount), _this]; +}; + +params [["_truck", objNull, [objNull]], ["_supply", 0, [0]]]; + +if (GVAR(supply) != 1) exitWith {WARNING("supply setting is not set to limited");}; +if (isNull _truck) exitWith {WARNING_1("Truck is null [%1]", _truck);}; + +_truck setVariable [QGVAR(currentSupply), (_supply max 0), true]; diff --git a/addons/rearm/functions/fnc_storeAmmo.sqf b/addons/rearm/functions/fnc_storeAmmo.sqf index b94616652e..c056421bba 100644 --- a/addons/rearm/functions/fnc_storeAmmo.sqf +++ b/addons/rearm/functions/fnc_storeAmmo.sqf @@ -3,30 +3,38 @@ * Stores ammo in an ammo truck. * * Arguments: - * 0: Target + * 0: Ammo Truck * 1: Unit * * Return Value: * None * * Example: - * [player, dummy] call ace_rearm_fnc_storeAmmo + * [ammo_truck, player] call ace_rearm_fnc_storeAmmo * * Public: No */ #include "script_component.hpp" -params [["_target", objNull, [objNull]], ["_unit", objNull, [objNull]]]; +params [ + ["_truck", objNull, [objNull]], + ["_unit", objNull, [objNull]] +]; -private _dummy = _unit getVariable [QGVAR(dummy), objNull]; -if (isNull _dummy) exitwith {}; +private _attachedDummy = _unit getVariable [QGVAR(dummy), objNull]; +if (isNull _attachedDummy) exitwith {}; [ - 5, - _unit, - {params ["_unit"]; [_unit, true, true] call FUNC(dropAmmo)}, + TIME_PROGRESSBAR(5), + [_unit, _truck, _attachedDummy], + { + params ["_args"]; + _args params ["_unit", "_truck", "_attachedDummy"]; + [_truck, (_attachedDummy getVariable [QGVAR(magazineClass), ""]), true] call FUNC(addMagazineToSupply); + [_unit, true, true] call FUNC(dropAmmo); + }, "", - format [localize LSTRING(StoreAmmoAction), getText(configFile >> "CfgMagazines" >> (_dummy getVariable QGVAR(magazineClass)) >> "displayName"), getText(configFile >> "CfgVehicles" >> (typeOf _target) >> "displayName")], + format [localize LSTRING(StoreAmmoAction), getText(configFile >> "CfgMagazines" >> (_attachedDummy getVariable QGVAR(magazineClass)) >> "displayName"), getText(configFile >> "CfgVehicles" >> (typeOf _truck) >> "displayName")], {true}, ["isnotinside"] ] call EFUNC(common,progressBar); diff --git a/addons/rearm/functions/fnc_takeAmmo.sqf b/addons/rearm/functions/fnc_takeAmmo.sqf index d2de1e1b59..23f19fedf4 100644 --- a/addons/rearm/functions/fnc_takeAmmo.sqf +++ b/addons/rearm/functions/fnc_takeAmmo.sqf @@ -19,40 +19,21 @@ */ #include "script_component.hpp" -private ["_ammo", "_tmpCal", "_cal", "_idx"]; - -params [["_target", objNull, [objNull]], ["_unit", objNull, [objNull]], ["_args", ["", objNull], [[]]]]; +params [ + ["_truck", objNull, [objNull]], + ["_unit", objNull, [objNull]], + ["_args", ["", objNull], [[]]] +]; _args params ["_magazineClass", "_vehicle"]; +TRACE_5("takeAmmo",_truck,_unit,_args,_magazineClass,_vehicle); -_ammo = getText (configFile >> "CfgMagazines" >> _magazineClass >> "ammo"); -_tmpCal = getNumber (configFile >> "CfgAmmo" >> _ammo >> "ace_caliber"); -_cal = 8; -if (_tmpCal > 0) then { - _cal = _tmpCal; -} else { - _tmpCal = getNumber (configFile >> "CfgAmmo" >> _ammo >> QGVAR(caliber)); - if (_tmpCal > 0) then { - _cal = _tmpCal; - } else { - diag_log format ["[ACE] ERROR: Undefined Ammo [%1 : %2]", _ammo, inheritsFrom (configFile >> "CfgAmmo" >> _ammo)]; - if (_ammo isKindOf "BulletBase") then { - _cal = 8; - } else { - _cal = 100; - }; - }; -}; -_cal = round _cal; -_idx = REARM_CALIBERS find _cal; -if (_idx == -1 ) then { - _idx = 2; -}; +([_magazineClass] call FUNC(getCaliber)) params ["_cal", "_idx"]; -REARM_HOLSTER_WEAPON +REARM_HOLSTER_WEAPON; [ - (REARM_DURATION_TAKE select _idx), - [_unit, _magazineClass, _target], + TIME_PROGRESSBAR(REARM_DURATION_TAKE select _idx), + [_unit, _magazineClass, _truck], FUNC(takeSuccess), "", format [localize LSTRING(TakeAction), getText(configFile >> "CfgMagazines" >> _magazineClass >> "displayName"), getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")], diff --git a/addons/rearm/functions/fnc_takeSuccess.sqf b/addons/rearm/functions/fnc_takeSuccess.sqf index 6d5966c9f9..e458036176 100644 --- a/addons/rearm/functions/fnc_takeSuccess.sqf +++ b/addons/rearm/functions/fnc_takeSuccess.sqf @@ -18,15 +18,21 @@ */ #include "script_component.hpp" -private ["_ammo", "_dummyName", "_dummy", "_actionID"]; -params [["_args", [objNull, "", objNull], [[]]]]; -_args params ["_unit", "_magazineClass", "_target"]; // _target is for future possible finite ammo +params [["_args", [objNull, "", objNull], [[]], 3]]; +_args params ["_unit", "_magazineClass", "_truck"]; +TRACE_3("takeSuccess",_unit,_magazineClass,_truck); + +private _success = true; +if (GVAR(supply) > 0) then { + _success = [_truck, _magazineClass] call FUNC(removeMagazineFromSupply); +}; +if !(_success) exitWith {WARNING_2("takeSuccess failed to take [%1] from [%2]",_magazineClass,_truck);}; [_unit, "forceWalk", QGVAR(vehRearm), true] call EFUNC(common,statusEffect_set); -_dummy = [_unit, _magazineClass] call FUNC(createDummy); +private _dummy = [_unit, _magazineClass] call FUNC(createDummy); [_dummy, _unit] call FUNC(pickUpAmmo); -_actionID = _unit addAction [ +private _actionID = _unit addAction [ format ["%1", localize ELSTRING(dragging,Drop)], '(_this select 0) call FUNC(dropAmmo)', nil, diff --git a/addons/rearm/script_component.hpp b/addons/rearm/script_component.hpp index f04abacc49..3edfeda3f1 100644 --- a/addons/rearm/script_component.hpp +++ b/addons/rearm/script_component.hpp @@ -5,6 +5,7 @@ // #define DEBUG_MODE_FULL // #define DISABLE_COMPILE_CACHE // #define ENABLE_PERFORMANCE_COUNTERS +// #define FAST_PROGRESSBARS #ifdef DEBUG_ENABLED_REARM #define DEBUG_MODE_FULL @@ -28,12 +29,19 @@ #define REARM_HOLSTER_WEAPON \ _unit setVariable [QGVAR(selectedWeaponOnRearm), currentWeapon _unit]; \ - _unit action ["SwitchWeapon", _unit, _unit, 99]; + TRACE_2("REARM_HOLSTER_WEAPON",_unit,currentWeapon _unit); \ + _unit action ["SwitchWeapon", _unit, _unit, 299]; #define REARM_UNHOLSTER_WEAPON \ _weaponSelect = _unit getVariable QGVAR(selectedWeaponOnRearm); \ - TRACE_2("REARM_UNHOLSTER_WEAPON",_unit,_weaponSelect); \ if (!isNil "_weaponSelect") then { \ + TRACE_2("REARM_UNHOLSTER_WEAPON",_unit,_weaponSelect); \ _unit selectWeapon _weaponSelect; \ _unit setVariable [QGVAR(selectedWeaponOnRearm), nil]; \ }; + +#ifdef FAST_PROGRESSBARS + #define TIME_PROGRESSBAR(X) ((X) * 0.075) +#else + #define TIME_PROGRESSBAR(X) (X) +#endif diff --git a/addons/rearm/stringtable.xml b/addons/rearm/stringtable.xml index 7a84aa7a6b..05aecd1102 100644 --- a/addons/rearm/stringtable.xml +++ b/addons/rearm/stringtable.xml @@ -13,6 +13,8 @@ Options de réarmement 再武装設定 재보급 설정 + 整装设定 + 整裝設定 This module allows you to tweak rearm system settings. @@ -26,6 +28,8 @@ Ce module autorise l'amélioration du système de réarmement. 再武装システムの設定を微調整します。 이 모듈은 재보급시의 설정을 바꿀수 있게해줍니다. + 此模块允许你调整整装系统设定 + 此模塊允許你調整整裝系統設定 Rearm Amount @@ -37,8 +41,10 @@ Ammontare Riarmo Velocidad de rearme Quantité à réarmer - 再武装の度合い + 再武装できる量 재보급 양 + 整装所需时间 + 整裝所需時間 How fast should a vehicle be rearmed? @@ -52,6 +58,8 @@ A quelle vitesse devrait être réarmé un véhicule ? 車両を再武装する速さを設定しますか? 차량을 얼마나 빨리 재보급 시킵니까? + 载具多快会整装完毕? + 載具多快會整裝完畢? Entire Vehicle @@ -65,6 +73,8 @@ Véhicule entier 対象の車両 모든 차량 + 整个载具 + 整個載具 Entire Magazine @@ -78,6 +88,8 @@ Chargeur entier 対象の弾薬 모든 탄창 + 整个弹匣 + 整個彈匣 Amount based on caliber @@ -89,8 +101,90 @@ Ammontare basato sul calibro Cantidad basada en el calibre Quantité basée sur le calibre - 口径に基づいた度合い + 口径に基づいた量 구경에 따라 수량 설정 + 基于口径决定所耗时间 + 基於口徑決定所耗時間 + + + Ammunition supply + Munitionsvorat + Scorta munizioni + 弾薬の供給 + 弹药补给 + 彈藥補給 + + + How much ammunition does an ammo truck carry? + Wie viel Munition transportiert ein Munitionslaster? + Quante munizioni può trasportare un camion? + 弾薬トラックがどの位の弾薬を供給できるようにしますか? + 弹药卡车会携带多少的弹药? + 彈藥卡車會攜帶多少的彈藥? + + + Unlimited ammo supply + Unbegrenzter Munitionsvorat + Scorta munizioni infinita + 無制限供給 + 无限弹药 + 無限彈藥 + + + Limited ammo supply based on caliber + Begrenzter, kaliberabhängiger Munitionsvorat + Scorta munizioni limitata in base al calibro + 口径に基づいた限定的供給 + 基于口径限制弹药数量 + 基於口徑限制彈藥數量 + + + Only specific Magazines + Nur bestimmte Magazine + Solo specifici caricatori + 特定の弾薬のみ + 只有指定的弹药 + 只有指定的彈藥 + + + Check remaining ammunition + Verbleibende Munition prüfen + Controlla munizioni rimanenti + 残弾薬を確認 + 检查剩余的弹药 + 檢查剩餘的彈藥 + + + Checking remaining ammunition... + Überprüfe verbleibende Munition... + Controllando le munizioni rimanenti + 残弾薬を確認しています・・・ + 正在检查剩余的弹药中... + 正在檢查剩餘的彈藥中... + + + There is ammunition worth %1 points left. + Es ist noch Munition für %1 Punkte übrig. + E' presente una penalità delle munizioni %1 punti rimanenti. + この弾薬は%1残っている + 还剩下%1多的弹药. + 還剩下%1多的彈藥. + + + The following ammunition is left:%1 + Folgende Munition ist übrig:%1 + Mancano le seguenti:%1 + この弾薬の残りは:%1 + 以下剩余的弹药:%1 + 以下剩餘的彈藥:%1 + + + There is no ammunition left. + Es ist keine Munition übrig. + Non ci sono munizioni rimanenti. + 弾薬は残っていません。 + 已经没有剩余的弹药了. + 已經沒有剩餘的彈藥了. Rearm @@ -104,6 +198,8 @@ Réarmer 再武装 재보급 + 整装 + 整裝 Rearming %1 with %2... @@ -112,11 +208,13 @@ Перевооружается %1 снарядами %2... Rearmando %1 com %2... Přezbrojuji %1 za pomoci %2... - Sto Riarmando %1 con %2... + Riarmando %1 con %2... Rearmando %1 con %2... Réarmement de %1 avec %2... - %2により%1を再武装する。 + %1を%2により再武装する。 %2을 %1에 재보급중... + %2正整装到%1中... + %2正整裝到%1中... Rearming %1... @@ -130,6 +228,8 @@ Réarmement de %1... %1を再武装中・・・ %1 재보급중... + 整装%1中... + 整裝%1中... Taking %1 for %2... @@ -141,8 +241,10 @@ Sto prendendo %1 per %2... Tomando %1 para %2... Prend %1 pour %2... - %2のために%1を取得しています・・・ + %1を%2のために取得しています・・・ %2를 위해 %1 가져오는중... + 拿取%1给%2中... + 拿取%1給%2中... Take ammo @@ -156,6 +258,8 @@ Prendre la munition 弾薬をとる 탄약 가지기 + 取得弹药 + 取得彈藥 Pick up ammo @@ -169,6 +273,8 @@ Ramasser la munition 弾薬を拾う 탄약 줍기 + 捡起弹药 + 撿起彈藥 Store ammo @@ -182,6 +288,8 @@ Stocker la munition 弾薬を戻す 탄약 보관하기 + 储存弹药 + 儲存彈藥 Storing %1 in %2... @@ -193,8 +301,10 @@ Sto riponendo %1 in %2... Guardando %1 en %2... Stocke %1 dans %2... - %2へ%1を戻しています・・・ + %1を%2へ戻しています・・・ %2에 %1 보관중... + 储存%1到%2中... + 儲存%1到%2中... Picking up ammo... @@ -207,6 +317,8 @@ Ramassage des munitions... 弾薬を拾っている・・・ 탄약 줍는중... + 捡起弹药中... + 撿起彈藥中... Rearmed %1 rounds of %2 on %3 @@ -218,8 +330,10 @@ Riarmati %1 colpi di %2 su %3 Rearmadas %1 rondas de %2 en %3 %1 balles réarmées de %2 dans %3 - %3にある%2の%1弾頭を再武装した + %1発の%2を%3から装填した %3에 2%의 %1 탄약 재보급 + 整装了%1发%2到%3上 + 整裝了%1發%2到%3上 Smoke Screen @@ -233,6 +347,8 @@ Pantalla de humo 煙幕弾 연막 차장 + 烟幕弹 + 煙幕彈 Flares @@ -246,6 +362,8 @@ Bengalas フレア 기만체 + 热焰弹 + 熱焰彈 30mm HEI @@ -259,6 +377,8 @@ 30mm HEI 30mm 焼夷りゅう弾 30mm 고폭소이탄 + 30mm 高爆燃烧弹 + 30mm 高爆燃燒彈 30mm HEI-T @@ -272,6 +392,8 @@ 30mm HEI-T 30mm 焼夷曳光りゅう弾 30mm 고폭소이예광탄 + 30mm 高爆燃烧曳光弹 + 30mm 高爆燃燒曳光彈 AIM-9 Sidewinder @@ -285,6 +407,8 @@ AIM-9 Sidewinder AIM-9 サイドワインダー AIM-9 Sidewinder + AIM-9 响尾蛇 + AIM-9 響尾蛇 Wympel R-73 @@ -298,6 +422,8 @@ Wympel R-73 ヴィンペル R-73 Vympel R-73 + Wympel R-73 + Wympel R-73 AGM-65 Maverick @@ -311,6 +437,8 @@ AGM-65 Maverick AGM-65 マーベリック AGM-65 Maverick + AGM-65 小牛 + AGM-65 小牛 Kh-25MTP @@ -324,6 +452,8 @@ Kh-25MTP Kh-25MTP Kh-25MTP + Kh-25MTP + Kh-25MTP Hydra 70 HE @@ -337,6 +467,8 @@ Hydra 70 HE ハイドラ 70 りゅう弾 Hydra 70 고폭탄 + 九头蛇 70 高爆弹 + 九頭蛇 70 高爆彈 S-8 HE @@ -350,6 +482,8 @@ S-8 HE S-8 りゅう弾 S-8 고폭탄 + S-8 高爆弹 + S-8 高爆彈 Hydra 70 AP @@ -363,6 +497,8 @@ Hydra 70 AP ハイドラ 70 徹甲弾 Hydra 70 철갑탄 + 九头蛇 70 反人员弹 + 九頭蛇 70 反人員彈 S-8 AP @@ -376,6 +512,8 @@ S-8 AP S-8 徹甲弾 S-8 철갑탄 + S-8 反人员弹 + S-8 反人員彈 GBU-12 @@ -389,6 +527,8 @@ GBU-12 GBU-12 GBU-12 + GBU-12 + GBU-12 FAB-250M-54 @@ -402,6 +542,8 @@ FAB-250M-54 FAB-250M-54 FAB-250M-54 + FAB-250M-54 + FAB-250M-54 diff --git a/addons/recoil/functions/fnc_camshake.sqf b/addons/recoil/functions/fnc_camshake.sqf index deb454df71..8b600f41ae 100644 --- a/addons/recoil/functions/fnc_camshake.sqf +++ b/addons/recoil/functions/fnc_camshake.sqf @@ -7,7 +7,7 @@ * None. Parameters inherited from EFUNC(common,firedEH) * * Return Value: - * Nothing + * None * * Example: * [player, (currentWeapon player), (currentMuzzle player)] call ace_recoil_fnc_camShake; diff --git a/addons/refuel/ACE_Settings.hpp b/addons/refuel/ACE_Settings.hpp index b38a880641..a25c36a2ba 100644 --- a/addons/refuel/ACE_Settings.hpp +++ b/addons/refuel/ACE_Settings.hpp @@ -6,4 +6,10 @@ class ACE_Settings { value = 1; typeName = "SCALAR"; }; + class GVAR(hoseLength) { + category = ECSTRING(OptionsMenu,CategoryLogistics); + displayName = CSTRING(RefuelSettings_hoseLength_DisplayName); + value = 12; + typeName = "SCALAR"; + }; }; diff --git a/addons/refuel/CfgEventHandlers.hpp b/addons/refuel/CfgEventHandlers.hpp index c6f26efe1a..20f482c8ca 100644 --- a/addons/refuel/CfgEventHandlers.hpp +++ b/addons/refuel/CfgEventHandlers.hpp @@ -1,4 +1,3 @@ - class Extended_PreStart_EventHandlers { class ADDON { init = QUOTE(call COMPILE_FILE(XEH_preStart)); @@ -31,4 +30,12 @@ class Extended_Killed_EventHandlers { killed = QUOTE(_this call FUNC(handleKilled)); }; }; -}; \ No newline at end of file +}; + +class Extended_InitPost_EventHandlers { + class Land_CanisterFuel_F { + class ADDON { + init = QUOTE(_this call DFUNC(makeJerryCan)); + }; + }; +}; diff --git a/addons/refuel/CfgVehicles.hpp b/addons/refuel/CfgVehicles.hpp index 4859cd883f..de361a6816 100644 --- a/addons/refuel/CfgVehicles.hpp +++ b/addons/refuel/CfgVehicles.hpp @@ -5,7 +5,7 @@ class GVAR(Refuel) { \ displayName = CSTRING(Refuel); \ distance = REFUEL_ACTION_DISTANCE; \ - condition = "true"; \ + condition = "alive _target"; \ statement = ""; \ showDisabled = 0; \ priority = 2; \ @@ -119,6 +119,11 @@ class CfgVehicles { typeName = "NUMBER"; defaultValue = 10; }; + class hoseLength { + displayName = CSTRING(RefuelSettings_hoseLength_DisplayName); + typeName = "NUMBER"; + defaultValue = 12; + }; }; }; @@ -141,9 +146,7 @@ class CfgVehicles { class NonStrategic: Building {}; class HouseBase: NonStrategic {}; class House: HouseBase {}; - class House_F: House {}; - - class House_Small_F: House_F { + class House_F: House { class ACE_Actions { class ACE_MainActions { displayName = ECSTRING(interaction,MainAction); @@ -153,6 +156,7 @@ class CfgVehicles { }; }; }; + class House_Small_F: House_F {}; class AllVehicles: All { GVAR(flowRate) = 1; @@ -475,7 +479,7 @@ class CfgVehicles { GVAR(fuelCargo) = 10000; }; - + // Vanilla fuel objects class StorageBladder_base_F: NonStrategic { class ACE_Actions { class ACE_MainActions { @@ -491,12 +495,29 @@ class CfgVehicles { class CBA_Extended_EventHandlers: CBA_Extended_EventHandlers {}; }; - MACRO_REFUEL_ACTIONS transportFuel = 0; //60k + MACRO_REFUEL_ACTIONS GVAR(hooks)[] = {{-3.35,2.45,0.17}}; GVAR(fuelCargo) = 60000; }; + class FlexibleTank_base_F: ThingX { + class ACE_Actions { + class ACE_MainActions { + displayName = ECSTRING(interaction,MainAction); + position = "[0, 0, 0.5]"; + distance = 4; + condition = "true"; + }; + }; + }; + class Land_FlexibleTank_01_F: FlexibleTank_base_F { + transportFuel = 0; //300 + MACRO_REFUEL_ACTIONS + GVAR(hooks)[] = {{0, 0, 0.5}}; + GVAR(fuelCargo) = 300; + }; + // Vanilla buildings class Land_Fuelstation_Feed_F: House_Small_F { transportFuel = 0; //50k @@ -512,6 +533,35 @@ class CfgVehicles { GVAR(fuelCargo) = REFUEL_INFINITE_FUEL; }; + class Land_FuelStation_01_pump_F: House_F { + transportFuel = 0; //50k + MACRO_REFUEL_ACTIONS + GVAR(hooks)[] = {{0, 0.4, -0.5}, {0, -0.4, -0.5}}; + GVAR(fuelCargo) = REFUEL_INFINITE_FUEL; + }; + class Land_FuelStation_01_pump_malevil_F: House_F { + transportFuel = 0; //50k + MACRO_REFUEL_ACTIONS + GVAR(hooks)[] = {{0, 0.4, -0.5}, {0, -0.4, -0.5}}; + GVAR(fuelCargo) = REFUEL_INFINITE_FUEL; + }; + + // Helper object for non-AllVehicles objects + class GVAR(helper): Helicopter_Base_F { + scope = 1; + displayName = "Refuel Helper"; + model = "\A3\Weapons_f\empty"; + class ACE_Actions {}; + class ACE_SelfActions {}; + EGVAR(cargo,hasCargo) = 0; + EGVAR(cargo,space) = 0; + damageEffect = ""; + destrType = ""; + class HitPoints {}; + class Turrets {}; + class TransportItems {}; + }; + /* // Barrels found in config \ BarrelHelper: Misc_thing 100 BarrelBase: BarrelHelper 100 diff --git a/addons/refuel/XEH_postInit.sqf b/addons/refuel/XEH_postInit.sqf index 3f20e5d30d..5d56e388e9 100644 --- a/addons/refuel/XEH_postInit.sqf +++ b/addons/refuel/XEH_postInit.sqf @@ -37,3 +37,14 @@ private _fuelTrucks = configProperties [configFile >> "CfgVehicles", "(isClass _ }; } forEach _fuelTrucks; #endif + +#ifdef DRAW_HOOKS_POS +addMissionEventHandler ["Draw3D", { + private _target = cursorObject; + private _cfgPos = getArray (configFile >> "CfgVehicles" >> typeOf _target >> QGVAR(hooks)); + private _dynPos = _target getVariable [QGVAR(dev_hooks), []]; + { + drawIcon3D ["\a3\ui_f\data\gui\cfg\hints\icon_text\group_1_ca.paa", [1,1,1,1], _target modelToWorldVisual _x, 1, 1, 0, format ["Hook %1", _forEachIndex]]; + } forEach ([_dynPos, _cfgPos] select (_dynPos isEqualTo [])); +}]; +#endif diff --git a/addons/refuel/functions/fnc_canCheckFuel.sqf b/addons/refuel/functions/fnc_canCheckFuel.sqf index e0046dea3d..57514e4b8f 100644 --- a/addons/refuel/functions/fnc_canCheckFuel.sqf +++ b/addons/refuel/functions/fnc_canCheckFuel.sqf @@ -22,5 +22,5 @@ params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; {!(_unit isKindOf "CAManBase")} || {!local _unit} || {!alive _target} || - {(_target distance _unit) > REFUEL_ACTION_DISTANCE} || + {([_unit, _target] call EFUNC(interaction,getInteractionDistance)) > REFUEL_ACTION_DISTANCE} || {(_target call FUNC(getFuel) == REFUEL_INFINITE_FUEL)}) diff --git a/addons/refuel/functions/fnc_canConnectNozzle.sqf b/addons/refuel/functions/fnc_canConnectNozzle.sqf index adb4935bb2..03cd79d3c6 100644 --- a/addons/refuel/functions/fnc_canConnectNozzle.sqf +++ b/addons/refuel/functions/fnc_canConnectNozzle.sqf @@ -26,6 +26,7 @@ if (_target isKindOf "AllVehicles") then { }; !(isNull _nozzle || + {!alive _target} || {_engine} || - {(_target distance _unit) > REFUEL_ACTION_DISTANCE} || + {([_unit, _target] call EFUNC(interaction,getInteractionDistance)) > REFUEL_ACTION_DISTANCE} || {!isNull (_target getVariable [QGVAR(nozzle), objNull])}) diff --git a/addons/refuel/functions/fnc_canReturnNozzle.sqf b/addons/refuel/functions/fnc_canReturnNozzle.sqf index a0dbf64587..04849c5ca0 100644 --- a/addons/refuel/functions/fnc_canReturnNozzle.sqf +++ b/addons/refuel/functions/fnc_canReturnNozzle.sqf @@ -21,5 +21,5 @@ params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; private _nozzle = _unit getVariable [QGVAR(nozzle), objNull]; (!isNull _nozzle) && -{_target distance _unit < REFUEL_ACTION_DISTANCE} && +{([_unit, _target] call EFUNC(interaction,getInteractionDistance)) < REFUEL_ACTION_DISTANCE} && {_target == (_nozzle getVariable [QGVAR(source), objNull])} diff --git a/addons/refuel/functions/fnc_canTakeNozzle.sqf b/addons/refuel/functions/fnc_canTakeNozzle.sqf index 65016323b2..d3852a668c 100644 --- a/addons/refuel/functions/fnc_canTakeNozzle.sqf +++ b/addons/refuel/functions/fnc_canTakeNozzle.sqf @@ -23,6 +23,7 @@ if (isNull _unit || {!local _unit} || {!alive _target} || {!isNull (_unit getVariable [QGVAR(nozzle), objNull])} || - {(_target distance _unit) > REFUEL_ACTION_DISTANCE}) exitWith {false}; + {typeOf _target == QGVAR(fuelNozzle) && {!isNull (attachedTo _target)}} || // Not carried by someone else + {([_unit, _target] call EFUNC(interaction,getInteractionDistance)) > REFUEL_ACTION_DISTANCE}) exitWith {false}; !(_target getVariable [QGVAR(isConnected), false]) && {!(_unit getVariable [QGVAR(isRefueling), false])} diff --git a/addons/refuel/functions/fnc_checkFuel.sqf b/addons/refuel/functions/fnc_checkFuel.sqf index 49d62b1e44..081f344732 100644 --- a/addons/refuel/functions/fnc_checkFuel.sqf +++ b/addons/refuel/functions/fnc_checkFuel.sqf @@ -21,7 +21,7 @@ params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; private _fuel = [_target] call FUNC(getFuel); [ - 5, + TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION * 2), [_unit, _target, _fuel], { params ["_args"]; diff --git a/addons/refuel/functions/fnc_connectNozzle.sqf b/addons/refuel/functions/fnc_connectNozzle.sqf index a124a331d5..807960977e 100644 --- a/addons/refuel/functions/fnc_connectNozzle.sqf +++ b/addons/refuel/functions/fnc_connectNozzle.sqf @@ -41,7 +41,6 @@ private _actionID = _unit addAction [format ["%1", locali if (cameraView == "EXTERNAL") then { _virtualPosASL = _virtualPosASL vectorAdd ((positionCameraToWorld [0.3,0,0]) vectorDiff (positionCameraToWorld [0,0,0])); }; - private _virtualPos = _virtualPosASL call EFUNC(common,ASLToPosition); private _lineInterection = lineIntersects [eyePos ace_player, _virtualPosASL, ace_player]; //Don't allow placing in a bad position: @@ -57,7 +56,7 @@ private _actionID = _unit addAction [format ["%1", locali _unit removeAction _actionID; if (GVAR(placeAction) == PLACE_APPROVE) then { - [_unit, _target, _virtualPos, _nozzle] call FUNC(ConnectNozzleAction); + [_unit, _target, _virtualPosASL, _nozzle] call FUNC(ConnectNozzleAction); }; }; // TODO add model like in attach/functions/fnc_attach }, 0, [_unit, _target, _nozzle, _actionID] ] call cba_fnc_addPerFrameHandler; diff --git a/addons/refuel/functions/fnc_connectNozzleAction.sqf b/addons/refuel/functions/fnc_connectNozzleAction.sqf index 250da51e21..31ebe1bfdc 100644 --- a/addons/refuel/functions/fnc_connectNozzleAction.sqf +++ b/addons/refuel/functions/fnc_connectNozzleAction.sqf @@ -6,7 +6,7 @@ * Arguments: * 0: Unit * 1: Target - * 2: Visual Position + * 2: Visual Position ASL * 3: Nozzle * * Return Value: @@ -20,60 +20,55 @@ #include "script_component.hpp" private ["_closeInDistance", "_endPosTestOffset"]; -params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]], ["_startingPosition", [0,0,0], [[]], 3], ["_nozzle", objNull, [objNull]]]; -private _startingOffset = _target worldToModel _startingPosition; +params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]], ["_startingPosASL", [0,0,0], [[]], 3], ["_nozzle", objNull, [objNull]]]; -private _startDistanceFromCenter = vectorMagnitude _startingOffset; -private _closeInUnitVector = vectorNormalized (_startingOffset vectorFromTo [0,0,0]); -private _closeInMax = _startDistanceFromCenter; -private _closeInMin = 0; +private _bestPosASL = []; +private _bestPosDistance = 1e99; +private _viewPos = _startingPosASL vectorAdd (((positionCameraToWorld [0,0,0]) vectorFromTo (positionCameraToWorld [0,0,1])) vectorMultiply 3); +private _modelVector = _startingPosASL vectorFromTo (AGLtoASL (_target modelToWorld [0,0,0])); +private _modelVectorLow = _startingPosASL vectorFromTo (AGLtoASL (_target modelToWorld [0,0,-1])); -while {(_closeInMax - _closeInMin) > 0.01} do { - _closeInDistance = (_closeInMax + _closeInMin) / 2; - _endPosTestOffset = _startingOffset vectorAdd (_closeInUnitVector vectorMultiply _closeInDistance); - _endPosTestOffset set [2, (_startingOffset select 2)]; - private _endPosTest = _target modelToWorldVisual _endPosTestOffset; - - private _doesIntersect = false; +{ + private _endPosASL = _x; + // [_startingPosASL, _endPosASL, [1,0,0,1]] call EFUNC(common,addLineToDebugDraw); // Debug scan lines + private _intersections = lineIntersectsSurfaces [_startingPosASL, _endPosASL, _unit]; { - if (_doesIntersect) exitWith {}; - private _startingPosShifted = _startingPosition vectorAdd _x; - _startASL = if (surfaceIsWater _startingPosShifted) then {_startingPosShifted} else {ATLtoASL _startingPosShifted}; - { - _endPosShifted = _endPosTest vectorAdd _x; - private _endASL = if (surfaceIsWater _startingPosShifted) then {_endPosShifted} else {ATLtoASL _endPosShifted}; - - //Uncomment to see the lazor show, and see how the scanning works: - // drawLine3D [_startingPosShifted, _endPosShifted, [1,0,0,1]]; - if (_target in lineIntersectsWith [_startASL, _endASL, _unit]) exitWith {_doesIntersect = true}; - } forEach [[0,0,0.045], [0,0,-0.045], [0,0.045,0], [0,-0.045,0], [0.045,0,0], [-0.045,0,0]]; - } forEach [[0,0,0], [0,0,0.05], [0,0,-0.05]]; - - if (_doesIntersect) then { - _closeInMax = _closeInDistance; - } else { - _closeInMin = _closeInDistance; - }; -}; - -_closeInDistance = (_closeInMax + _closeInMin) / 2; + _x params ["_intersectPosASL", "", "_intersectObject"]; + if (_intersectObject == _target) then { + private _distance = _startingPosASL distance _intersectPosASL; + if (_distance < _bestPosDistance) then { + _bestPosDistance = _distance; + _bestPosASL = _intersectPosASL; + }; + }; + } forEach _intersections; +} forEach [ + // Shoot rays towards player's view angle and see which spot is closest + _startingPosASL vectorAdd (((positionCameraToWorld [0,0,0]) vectorFromTo (positionCameraToWorld [0,0,1])) vectorMultiply 3), + _startingPosASL vectorAdd (((positionCameraToWorld [0,0,0]) vectorFromTo (positionCameraToWorld [-0.25,0,1])) vectorMultiply 3), + _startingPosASL vectorAdd (((positionCameraToWorld [0,0,0]) vectorFromTo (positionCameraToWorld [0.25,0,1])) vectorMultiply 3), + _startingPosASL vectorAdd (((positionCameraToWorld [0,0,0]) vectorFromTo (positionCameraToWorld [0,-0.25,1])) vectorMultiply 3), + _startingPosASL vectorAdd (((positionCameraToWorld [0,0,0]) vectorFromTo (positionCameraToWorld [-0.25,-0.25,1])) vectorMultiply 3), + _startingPosASL vectorAdd (((positionCameraToWorld [0,0,0]) vectorFromTo (positionCameraToWorld [0.25,-0.25,1])) vectorMultiply 3), + AGLtoASL (_target modelToWorld [0,0,0]), // Try old method of just using model center + AGLtoASL (_target modelToWorld [0,0,-0.5]) +]; //Checks (too close to center or can't attach) -if ((_startDistanceFromCenter - _closeInDistance) < 0.1) exitWith { +if (_bestPosASL isEqualTo []) exitWith { TRACE_2("no valid spot found",_closeInDistance,_startDistanceFromCenter); [localize LSTRING(Failed)] call EFUNC(common,displayTextStructured); }; //Move it out slightly, for visibility sake (better to look a little funny than be embedded//sunk in the hull and be useless) -_closeInDistance = (_closeInDistance - 0.05); +_bestPosASL = _bestPosASL vectorAdd ((_bestPosASL vectorFromTo _startingPosASL) vectorMultiply 0.05); -_endPosTestOffset = _startingOffset vectorAdd (_closeInUnitVector vectorMultiply _closeInDistance); -_endPosTestOffset set [2, (_startingOffset select 2)]; +private _attachPosModel = _target worldToModel (ASLtoAGL _bestPosASL); [ - 2, - [_unit, _nozzle, _target, _endPosTestOffset], + TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), + [_unit, _nozzle, _target, _attachPosModel], { params ["_args"]; _args params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_target", objNull, [objNull]], ["_endPosTestOffset", [0,0,0], [[]], 3]]; diff --git a/addons/refuel/functions/fnc_dropNozzle.sqf b/addons/refuel/functions/fnc_dropNozzle.sqf index 575d318068..21b700a757 100644 --- a/addons/refuel/functions/fnc_dropNozzle.sqf +++ b/addons/refuel/functions/fnc_dropNozzle.sqf @@ -19,13 +19,26 @@ #include "script_component.hpp" params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]], ["_disconnectOnly", false, [false]]]; +TRACE_3("dropNozzle",_unit,_nozzle,_disconnectOnly); detach _nozzle; _nozzle setVariable [QGVAR(isRefueling), false, true]; if (_disconnectOnly) exitWith {}; _nozzle setVelocity [0, 0, 0]; -_nozzle setPosATL [(getPosATL _nozzle) select 0, (getPosATL _nozzle) select 1, 0.05]; + +private _groundPosition = getPosASL _nozzle; +private _posA = (getPosASL _nozzle) vectorAdd [0,0,0.05]; +private _posB = (getPosASL _nozzle) vectorAdd [0,0,-1000]; +private _intersections = lineIntersectsSurfaces [_posA, _posB, _unit, _nozzle, true, 1, "GEOM"]; +TRACE_1("",_intersections); +if (_intersections isEqualTo []) then { + _groundPosition set [2, (getTerrainHeightASL _groundPosition) + 0.005]; +} else { + _groundPosition = ((_intersections select 0) select 0) vectorAdd [0,0,0.005]; +}; +_nozzle setPosASL _groundPosition; +TRACE_1("finalPos",getPosATL _nozzle); if (isNull _unit) exitWith {}; _unit setVariable [QGVAR(isRefueling), false, true]; diff --git a/addons/refuel/functions/fnc_makeJerryCan.sqf b/addons/refuel/functions/fnc_makeJerryCan.sqf index 36c64a3055..f42808d40a 100644 --- a/addons/refuel/functions/fnc_makeJerryCan.sqf +++ b/addons/refuel/functions/fnc_makeJerryCan.sqf @@ -22,7 +22,9 @@ if (isNull _target || {_target isKindOf "AllVehicles"} || {_target getVariable [QGVAR(jerryCan), false]}) exitWith {}; -[_target, _fuelAmount] call FUNC(setFuel); +if (isServer) then { + [_target, _fuelAmount] call FUNC(setFuel); // has global effects +}; _target setVariable [QGVAR(jerryCan), true]; _target setVariable [QGVAR(source), _target]; @@ -36,7 +38,7 @@ private _action = [QGVAR(Refuel), [], [0, 0, 0], REFUEL_ACTION_DISTANCE] call EFUNC(interact_menu,createAction); -[_target, 0, [], _action] call EFUNC(interact_menu,addActionToObject); +[_target, 0, ["ACE_MainActions"], _action] call EFUNC(interact_menu,addActionToObject); // Add pickup _action = [QGVAR(PickUpNozzle), @@ -48,7 +50,7 @@ _action = [QGVAR(PickUpNozzle), [], [0, 0, 0], REFUEL_ACTION_DISTANCE] call EFUNC(interact_menu,createAction); -[_target, 0, [QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); +[_target, 0, ["ACE_MainActions", QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); // Add turnOn _action = [QGVAR(TurnOn), @@ -60,7 +62,7 @@ _action = [QGVAR(TurnOn), [], [0, 0, 0], REFUEL_ACTION_DISTANCE] call EFUNC(interact_menu,createAction); -[_target, 0, [QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); +[_target, 0, ["ACE_MainActions", QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); // Add turnOff _action = [QGVAR(TurnOff), @@ -72,7 +74,7 @@ _action = [QGVAR(TurnOff), [], [0, 0, 0], REFUEL_ACTION_DISTANCE] call EFUNC(interact_menu,createAction); -[_target, 0, [QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); +[_target, 0, ["ACE_MainActions", QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); // Add disconnect _action = [QGVAR(Disconnect), @@ -84,4 +86,4 @@ _action = [QGVAR(Disconnect), [], [0, 0, 0], REFUEL_ACTION_DISTANCE] call EFUNC(interact_menu,createAction); -[_target, 0, [QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); +[_target, 0, ["ACE_MainActions", QGVAR(Refuel)], _action] call EFUNC(interact_menu,addActionToObject); diff --git a/addons/refuel/functions/fnc_maxDistanceDropNozzle.sqf b/addons/refuel/functions/fnc_maxDistanceDropNozzle.sqf index 2a23b5eb99..0f83f48fbb 100644 --- a/addons/refuel/functions/fnc_maxDistanceDropNozzle.sqf +++ b/addons/refuel/functions/fnc_maxDistanceDropNozzle.sqf @@ -38,7 +38,8 @@ if (_nozzle getVariable [QGVAR(jerryCan), false]) exitWith {}; [_pfID] call CBA_fnc_removePerFrameHandler; }; - if (isNull _source || {_unit distance (_source modelToWorld _endPosOffset) > (REFUEL_HOSE_LENGTH - 2)} || {!alive _source}) exitWith { + private _hoseLength = _source getVariable [QGVAR(hoseLength), GVAR(hoseLength)]; + if (isNull _source || {_unit distance (_source modelToWorld _endPosOffset) > (_hoseLength - 2)} || {!alive _source}) exitWith { if !(isNull _nozzle) then { [_unit, _nozzle] call FUNC(dropNozzle); REFUEL_UNHOLSTER_WEAPON @@ -49,6 +50,10 @@ if (_nozzle getVariable [QGVAR(jerryCan), false]) exitWith {}; if !(isNull _rope) then { ropeDestroy _rope; }; + private _helper = _nozzle getVariable [QGVAR(helper), objNull]; + if !(isNull _helper) then { + deleteVehicle _helper; + }; deleteVehicle _nozzle; } else { [LSTRING(Hint_TooFar), 2, _unit] call EFUNC(common,displayTextStructured); diff --git a/addons/refuel/functions/fnc_moduleRefuelSettings.sqf b/addons/refuel/functions/fnc_moduleRefuelSettings.sqf index 4d8f89425e..9e3e953160 100644 --- a/addons/refuel/functions/fnc_moduleRefuelSettings.sqf +++ b/addons/refuel/functions/fnc_moduleRefuelSettings.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_refuel_fnc_moduleRefuelSettings + * * Public: No */ @@ -20,5 +23,6 @@ params ["_logic", "", ["_activated", false, [false]]]; if !(_activated) exitWith {}; [_logic, QGVAR(rate), "rate"] call EFUNC(common,readSettingFromModule); +[_logic, QGVAR(hoseLength), "hoseLength"] call EFUNC(common,readSettingFromModule); -diag_log text format ["[ACE]: Refuel Module Initialized with flow rate: %1", GVAR(rate)]; +INFO_2("Refuel Module Initialized with flow rate: %1 - hoseLength: %2",GVAR(rate), GVAR(hoseLength)) diff --git a/addons/refuel/functions/fnc_readFuelCounter.sqf b/addons/refuel/functions/fnc_readFuelCounter.sqf index 519b07897d..98393e69ea 100644 --- a/addons/refuel/functions/fnc_readFuelCounter.sqf +++ b/addons/refuel/functions/fnc_readFuelCounter.sqf @@ -19,7 +19,7 @@ params [["_unit", objNull, [objNull]], ["_target", objNull, [objNull]]]; [ - 2, + TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), [_unit, _target], { params ["_args"]; diff --git a/addons/refuel/functions/fnc_refuel.sqf b/addons/refuel/functions/fnc_refuel.sqf index 773d85e08d..15fef426d2 100644 --- a/addons/refuel/functions/fnc_refuel.sqf +++ b/addons/refuel/functions/fnc_refuel.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * [bob, kevin, nozzle, [2, 1, 5]] call ace_refuel_fnc_refuel + * * Public: No */ @@ -44,7 +47,8 @@ if (_maxFuel == 0) then { _sink setVariable [QGVAR(nozzle), objNull, true]; [_pfID] call CBA_fnc_removePerFrameHandler; }; - private _tooFar = ((_sink modelToWorld _connectToPoint) distance (_source modelToWorld _connectFromPoint)) > (REFUEL_HOSE_LENGTH - 2); + private _hoseLength = _source getVariable [QGVAR(hoseLength), GVAR(hoseLength)]; + private _tooFar = ((_sink modelToWorld _connectToPoint) distance (_source modelToWorld _connectFromPoint)) > (_hoseLength - 2); if (_tooFar && {!(_nozzle getVariable [QGVAR(jerryCan), false])}) exitWith { [LSTRING(Hint_TooFar), 2, _unit] call EFUNC(common,displayTextStructured); diff --git a/addons/refuel/functions/fnc_reset.sqf b/addons/refuel/functions/fnc_reset.sqf index d58f0a48ad..480beb6ca0 100644 --- a/addons/refuel/functions/fnc_reset.sqf +++ b/addons/refuel/functions/fnc_reset.sqf @@ -31,6 +31,10 @@ if !(isNil "_nozzle") then { if !(isNull _rope) then { ropeDestroy _rope; }; + private _helper = _nozzle getVariable [QGVAR(helper), objNull]; + if !(isNull _helper) then { + deleteVehicle _helper; + }; { [QGVAR(resetLocal), [_x, _nozzle], _x] call CBA_fnc_targetEvent; diff --git a/addons/refuel/functions/fnc_returnNozzle.sqf b/addons/refuel/functions/fnc_returnNozzle.sqf index 1bd364eafb..2b1ac64f8b 100644 --- a/addons/refuel/functions/fnc_returnNozzle.sqf +++ b/addons/refuel/functions/fnc_returnNozzle.sqf @@ -24,7 +24,7 @@ private _source = _nozzle getVariable QGVAR(source); if (isNull _nozzle || {_source != _target}) exitWith {false}; [ - 2, + TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), [_unit, _nozzle, _target], { params ["_args"]; @@ -46,6 +46,10 @@ if (isNull _nozzle || {_source != _target}) exitWith {false}; if !(isNull _rope) then { ropeDestroy _rope; }; + private _helper = _nozzle getVariable [QGVAR(helper), objNull]; + if !(isNull _helper) then { + deleteVehicle _helper; + }; deleteVehicle _nozzle; [_target, "blockEngine", "ACE_Refuel", false] call EFUNC(common,statusEffect_set); diff --git a/addons/refuel/functions/fnc_takeNozzle.sqf b/addons/refuel/functions/fnc_takeNozzle.sqf index 006c5e0942..1b0baac80c 100644 --- a/addons/refuel/functions/fnc_takeNozzle.sqf +++ b/addons/refuel/functions/fnc_takeNozzle.sqf @@ -39,7 +39,7 @@ if (isNull _nozzle) then { // func is called on fuel truck _endPosOffset = _endPosOffset select 0; }; [ - 2, + TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), [_unit, _target, _endPosOffset], { params ["_args"]; @@ -53,11 +53,23 @@ if (isNull _nozzle) then { // func is called on fuel truck _newNozzle attachTo [_unit, [-0.02,0.05,-0.12], "righthandmiddle1"]; _unit setVariable [QGVAR(nozzle), _newNozzle, true]; - if (_target isKindOf "AllVehicles") then { - // Currently ropeCreate requires its first parameter to be a real vehicle - private _rope = ropeCreate [_target, _endPosOffset, _newNozzle, [0, -0.20, 0.12], REFUEL_HOSE_LENGTH]; - _newNozzle setVariable [QGVAR(rope), _rope, true]; + private _ropeTarget = _target; + if (!(_target isKindOf "AllVehicles")) then { + private _helper = QGVAR(helper) createVehicle [0,0,0]; + [QEGVAR(common,hideObjectGlobal), [_helper, true]] call CBA_fnc_serverEvent; + if ((getText (configFile >> "CfgVehicles" >> typeOf _target >> "simulation")) isEqualTo "thingX") then { + _helper attachTo [_target, [0,0,0]]; + } else { + _helper setPosWorld (getPosWorld _target); + _helper setDir (getDir _target); + _helper setVectorUp (vectorUp _target); + }; + _newNozzle setVariable [QGVAR(helper), _helper, true]; + _ropeTarget = _helper; }; + private _hoseLength = _target getVariable [QGVAR(hoseLength), GVAR(hoseLength)]; + private _rope = ropeCreate [_ropeTarget, _endPosOffset, _newNozzle, [0, -0.20, 0.12], _hoseLength]; + _newNozzle setVariable [QGVAR(rope), _rope, true]; _newNozzle setVariable [QGVAR(attachPos), _endPosOffset, true]; _newNozzle setVariable [QGVAR(source), _target, true]; @@ -93,7 +105,7 @@ if (isNull _nozzle) then { // func is called on fuel truck ] call EFUNC(common,progressBar); } else { // func is called on muzzle either connected or on ground [ - 2, + TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), [_unit, _nozzle], { params ["_args"]; diff --git a/addons/refuel/functions/fnc_turnOff.sqf b/addons/refuel/functions/fnc_turnOff.sqf index 7ce3d9c874..2c2b8de158 100644 --- a/addons/refuel/functions/fnc_turnOff.sqf +++ b/addons/refuel/functions/fnc_turnOff.sqf @@ -19,7 +19,7 @@ params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]]]; [ - 2, + TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), [_unit, _nozzle], { params ["_args"]; diff --git a/addons/refuel/functions/fnc_turnOn.sqf b/addons/refuel/functions/fnc_turnOn.sqf index 7a69de9b6f..cf8656f558 100644 --- a/addons/refuel/functions/fnc_turnOn.sqf +++ b/addons/refuel/functions/fnc_turnOn.sqf @@ -19,7 +19,7 @@ params [["_unit", objNull, [objNull]], ["_nozzle", objNull, [objNull]]]; [ - 2, + TIME_PROGRESSBAR(REFUEL_PROGRESS_DURATION), [_unit, _nozzle], { params ["_args"]; diff --git a/addons/refuel/script_component.hpp b/addons/refuel/script_component.hpp index 37b9502510..a4d6f6df31 100644 --- a/addons/refuel/script_component.hpp +++ b/addons/refuel/script_component.hpp @@ -2,6 +2,8 @@ #define COMPONENT_BEAUTIFIED Refuel #include "\z\ace\addons\main\script_mod.hpp" +// #define FAST_PROGRESSBARS +// #define DRAW_HOOKS_POS // #define DEBUG_MODE_FULL // #define DISABLE_COMPILE_CACHE // #define ENABLE_PERFORMANCE_COUNTERS @@ -18,14 +20,20 @@ #define REFUEL_INFINITE_FUEL -10 #define REFUEL_ACTION_DISTANCE 7 -#define REFUEL_HOSE_LENGTH 12 +#define REFUEL_PROGRESS_DURATION 2 #define REFUEL_HOLSTER_WEAPON \ _unit setVariable [QGVAR(selectedWeaponOnRefuel), currentWeapon _unit]; \ _unit call EFUNC(common,fixLoweredRifleAnimation); \ - _unit action ["SwitchWeapon", _unit, _unit, 99]; + _unit action ["SwitchWeapon", _unit, _unit, 299]; #define REFUEL_UNHOLSTER_WEAPON \ _weaponSelect = _unit getVariable QGVAR(selectedWeaponOnRefuel); \ _unit selectWeapon _weaponSelect; \ _unit setVariable [QGVAR(selectedWeaponOnRefuel), nil]; + +#ifdef FAST_PROGRESSBARS + #define TIME_PROGRESSBAR(X) ((X) * 0.075) +#else + #define TIME_PROGRESSBAR(X) (X) +#endif diff --git a/addons/refuel/stringtable.xml b/addons/refuel/stringtable.xml index c685b520de..e2a4c45cd3 100644 --- a/addons/refuel/stringtable.xml +++ b/addons/refuel/stringtable.xml @@ -13,6 +13,8 @@ Réglages de ravitaillement 給油設定 재급유 설정 + 加油设定 + 加油設定 Flow Rate @@ -21,11 +23,13 @@ Скорость заправки Velocidade da vazão Rychlost tankování - Rateo Flusso + Portata Flusso Caudal de llenado Vitesse du ravitaillement 流量 주유량 + 油料流量 + 油料流量 How fast should a vehicle be refueled? @@ -39,6 +43,8 @@ A quelle vitesse devrait être ravitaillé un véhicule ? どのくらいの速さで車両へ給油しますか? 차량이 얼마나 빨리 재급유될 수 있습니까? + 载具多快会加油完毕? + 載具多快會加油完畢? Refuel @@ -52,6 +58,8 @@ Ravitaillement 給油 재급유 + 加油 + 加油 Take fuel nozzle @@ -60,11 +68,13 @@ Взять топливный шланг Pegar o bocal de combustível Vzít výdejní pistoli - Prenti manica benzina + Prendi manica benzina Tomar surtidor Prendre la pompe 給油ノズルを取る 주유기 획득 + 拿取燃料喷嘴 + 拿取燃料噴嘴 Taking fuel nozzle... @@ -73,11 +83,13 @@ Берем топливный шланг... Pegando o bocal de combustível... Beru výdejní pistoli... - Sto prendendo manica benzina... + Prendendo manicotto benzina... Tomando surtidor... Prise de la pompe... 給油ノズルを取っている・・・ 주유기 획득중... + 拿取燃料喷嘴中... + 拿取燃料噴嘴中... Connect fuel nozzle @@ -91,6 +103,8 @@ Connecter la pompe 給油ノズルを接続する 주유기 꼽기 + 连接燃料喷嘴 + 連接燃料噴嘴 Connecting fuel nozzle... @@ -99,11 +113,13 @@ Присоединяем топливный шланг... Conectando o bocal de combustível... Připojuji výdejní pistoli... - Sto collegando la manica benzina... + Collegando manicotto benzina... Conectando surtidor... Connection de la pompe... 給油ノズルを接続している・・・ 주유기 꼽는중... + 连结燃料喷嘴中... + 連結燃料噴嘴中... Disconnect fuel nozzle @@ -112,11 +128,13 @@ Отсоединить топливный шланг Desconectar o bocal de combustível Odpojit výdejní pistoli - Scollega manica benzina + Scollega manicotto benzina Desconectar surtidor Déconnecter la pompe 給油ノズルを外した 주유기 뽑기 + 断开燃料喷嘴 + 斷開燃料噴嘴 Connect @@ -130,6 +148,8 @@ Connecter 接続 꼽기 + 连结 + 連結 Check remaining fuel @@ -143,6 +163,8 @@ Vérifier le carburant restant 残燃料を見る 남은 연료 확인 + 检查剩余燃料 + 檢查剩餘燃料 Checking remaining fuel... @@ -151,11 +173,13 @@ Проверяем остаток топлива... Verificando combustível restante... Kontroluji zůstatek paliva... - Sto controllando la benzina rimanente... + Controllando la benzina rimanente... Verificando combustible remanente,,, Vérifie le carburant restant... 残燃料を見ている・・・ 남은 연료 확인중... + 检查剩余燃料中... + 檢查剩餘燃料中... There are %1 liters left. @@ -169,6 +193,8 @@ Il reste %1 litres. 後 %1 リットル残っている。 %1 리터 남음 + 剩下%1公升的燃料. + 剩下%1公升的燃料. There is no fuel left. @@ -182,6 +208,8 @@ Il n'y a plus de carburant. もう燃料は残っていない。 연료 없음. + 没有剩余的燃料 + 沒有剩餘的燃料 Cancel @@ -195,6 +223,8 @@ Annuler 中止 취소 + 取消 + 取消 Failed @@ -208,6 +238,8 @@ Echoué 失敗 실패 + 失败 + 失敗 Stop fueling @@ -221,6 +253,8 @@ Arrêter le ravitaillement 給油をやめる 그만 재급유하기 + 停止加油 + 停止加油 Stopping fueling... @@ -229,11 +263,13 @@ Останавливаем заправку... Parando reabastecimento... Zastavuji tankování... - Sto fermando il rifornimento... + Fermando il rifornimento... Deteniendo reabastecimiento... Arrête le ravitaillement... 給油をやめている・・・ 재급유 그만하는중... + 停止加油中... + 停止加油中... Start fueling @@ -247,6 +283,8 @@ Débute le ravitaillement 給油を始める 재급유 시작 + 开始加油 + 開始加油 Starting fueling... @@ -255,11 +293,13 @@ Начинаем заправку... Começando reabastecimento... Spouštím tankování... - Sto iniziando il rifornimento... + Iniziando il rifornimento... Comenzando reabastecimiento... Début du ravitaillement... 給油を始めている・・・ 재급유 시작중... + 开始加油中... + 開始加油中... %1 Liters fueled @@ -273,6 +313,8 @@ %1 litres ravitaillés %1 リッターを給油した %1 리터 재급유됨 + 已加入%1公升的燃料 + 已加入%1公升的燃料 The fuel source is empty. @@ -281,11 +323,13 @@ Источник топлива пустой. A fonte de combustível está vazia. Zdroj paliva je prázdný. - La fonte di benzina èvuota. + La fonte di benzina è vuota. La fuente de combustible está vacía. La source de carburant est vide. 給油元は空です。 재급유처가 비었음. + 燃料来源已空. + 燃料來源已空. Maximum fuel hose length reached. @@ -294,11 +338,13 @@ Достигнута максимальная длина шланга. Distância máxima da mangueira de combustível alcançada. Dosažena maximální délka hadice - Distanza massima della manica raggiunta. + Distanza massima della pompa raggiunta. Máxima longitud de manguera alcanzada. Tuyau tendu au maximum 給油ホースはもうこれ以上届かない。 주유기 호스 최대 거리에 도달함. + 已加满至最大油量. + 已加滿至最大油量. Fueling completed @@ -312,6 +358,8 @@ Ravitaillement terminé 給油完了 재급유 완료함 + 加油完毕 + 加油完畢 Fueling stopped @@ -325,6 +373,8 @@ Ravitaillement stoppé 給油を止めた 재급유 멈춤 + 已停止加油 + 已停止加油 Fueling started @@ -338,6 +388,8 @@ Ravitaillement débuté 給油を始めた 재급유 시작함 + 已开始加油 + 已開始加油 Return fuel nozzle @@ -346,11 +398,13 @@ Вернуть топливный шланг Retornar bocal de combustível Vrátit výdejní pistoli - Riponi manica benzina + Riponi manicotto benzina Devolver surtidor Retourner la pompe 給油ノズルを戻す 주유기 반환 + 放回燃料喷嘴 + 放回燃料噴嘴 Returning fuel nozzle... @@ -359,11 +413,13 @@ Возвращаем топливный шланг... Retornando bocal de combustível... Vracím výdejní pistoli... - Sto riponendo la manica della benzina... + Riponendo la manica della benzina... Devolviendo el surtidor... Retourne la pompe 給油ノズルを戻している・・・ 주유기 반환중 + 放回燃料喷嘴中... + 放回燃料噴嘴中... Check fuel counter @@ -377,6 +433,8 @@ Vérifier le compteur 燃料計を見る 연로카운터 확인 + 检查燃料表 + 檢查燃料表 Checking fuel counter... @@ -385,11 +443,13 @@ Проверяем счетчик топлива... Verificando contador de combustível... Konroluji palivoměr... - Sto controllando l'indicatore del livello benzina... + Controllando l'indicatore del livello benzina... Verificando el contador de combustible Vérification du compteur... 燃料計を見ている・・・ 연료카운터 확인중... + 检查燃料表中... + 檢查燃料表中... %1 liters have been fueled. @@ -403,6 +463,17 @@ %1 litres ont été écoulés. %1 リッターがある %1 리터가 재급유되었습니다. + 已加入%1公升. + 已加入%1公升. + + + Refuel hose length + Betankung Schlauchlänge + Reabastecer longitud de manguera + Rifiuta lungezza tubo + 給油ホースの長さ + 加油软管长度 + 加油軟管長度 diff --git a/addons/reload/ACE_UI.hpp b/addons/reload/ACE_UI.hpp index 8164d04b17..cfc2a26f9c 100644 --- a/addons/reload/ACE_UI.hpp +++ b/addons/reload/ACE_UI.hpp @@ -1,7 +1,7 @@ class ACE_UI { class ammoCount { class conditions { - ADDON = "(false)"; + ADDON = "cameraOn == (getConnectedUAV ACE_player)"; }; }; }; diff --git a/addons/reload/CfgVehicles.hpp b/addons/reload/CfgVehicles.hpp index a9fa4deadd..05ac18ea70 100644 --- a/addons/reload/CfgVehicles.hpp +++ b/addons/reload/CfgVehicles.hpp @@ -6,7 +6,7 @@ class CfgVehicles { class GVAR(LinkBelt) { displayName = CSTRING(LinkBelt); distance = 2.0; - condition = QUOTE([ARR_2(_player, _target)] call FUNC(canLinkBelt)); + condition = QUOTE(([ARR_2(_player, _target)] call FUNC(getAmmoToLinkBelt)) > 0); statement = QUOTE([ARR_2(_player, _target)] call FUNC(startLinkingBelt)); }; class GVAR(CheckAmmo) { diff --git a/addons/reload/XEH_PREP.hpp b/addons/reload/XEH_PREP.hpp index bfd89b098e..f2b386ac37 100644 --- a/addons/reload/XEH_PREP.hpp +++ b/addons/reload/XEH_PREP.hpp @@ -1,6 +1,6 @@ PREP(canCheckAmmo); -PREP(canLinkBelt); +PREP(getAmmoToLinkBelt); PREP(checkAmmo); PREP(displayAmmo); PREP(startLinkingBelt); diff --git a/addons/reload/functions/fnc_checkAmmo.sqf b/addons/reload/functions/fnc_checkAmmo.sqf index baa0754f80..90500b867f 100644 --- a/addons/reload/functions/fnc_checkAmmo.sqf +++ b/addons/reload/functions/fnc_checkAmmo.sqf @@ -7,7 +7,12 @@ * 1: Target. Optional, if not suplied the player counts his personal or static weapon ammo * * Return Value: - * Nothing + * None + * + * Example: + * [bob, kevin] call ace_reload_fnc_checkAmmo + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/reload/functions/fnc_displayAmmo.sqf b/addons/reload/functions/fnc_displayAmmo.sqf index 6aa8f013d9..f48bbb1e0a 100644 --- a/addons/reload/functions/fnc_displayAmmo.sqf +++ b/addons/reload/functions/fnc_displayAmmo.sqf @@ -6,8 +6,14 @@ * 0: Target * * Return Value: - * Nothing + * None + * + * Example: + * [bob] call ace_reload_fnc_displayAmmo + * + * Public: No */ + #include "script_component.hpp" #define COUNT_BARS 12 diff --git a/addons/reload/functions/fnc_canLinkBelt.sqf b/addons/reload/functions/fnc_getAmmoToLinkBelt.sqf similarity index 73% rename from addons/reload/functions/fnc_canLinkBelt.sqf rename to addons/reload/functions/fnc_getAmmoToLinkBelt.sqf index d29dc6efd6..decb922d80 100644 --- a/addons/reload/functions/fnc_canLinkBelt.sqf +++ b/addons/reload/functions/fnc_getAmmoToLinkBelt.sqf @@ -1,5 +1,5 @@ /* - * Author: esteldunedain + * Author: esteldunedain, phyma * Check if the target has an MG equiped with belt system that the player can link * * Arguments: @@ -7,10 +7,10 @@ * 1: Target * * Return Value: - * Can link belt + * Maximum ammo of magazine (-1 on error) * * Example: - * [player, cursorObject] call ace_reload_fnc_canLinkBelt; + * [player, cursorObject] call ace_reload_fnc_getAmmoToLinkBelt; * * Public: No */ @@ -18,18 +18,18 @@ params ["_player", "_target"]; -if (vehicle _target != _target) exitWith {false}; +if (vehicle _target != _target) exitWith {-1}; private _magazineType = currentMagazine _target; private _magazineCfg = configFile >> "CfgMagazines" >> _magazineType; -if (getNumber (_magazineCfg >> "ACE_isBelt") == 0) exitWith {false}; +if (getNumber (_magazineCfg >> "ACE_isBelt") == 0) exitWith {-1}; // Check if the ammo is not empty or full private _ammoCount = _target ammo currentWeapon _target; // Exit if the belt is full or empty -if (_ammoCount == 0 || getNumber (_magazineCfg >> "count") - _ammoCount == 0) exitWith {false}; +if (_ammoCount == 0 || getNumber (_magazineCfg >> "count") - _ammoCount == 0) exitWith {-1}; // Check if the player has any of the same magazines // Calculate max ammo @@ -39,4 +39,4 @@ private _maxAmmo = 0; _maxAmmo = _maxAmmo max (_x select 1); } forEach (magazinesAmmo _player select {_x select 0 == _magazineType}); -_maxAmmo > 0 +_maxAmmo diff --git a/addons/reload/functions/fnc_startLinkingBelt.sqf b/addons/reload/functions/fnc_startLinkingBelt.sqf index a1cc73635d..4e64bfc154 100644 --- a/addons/reload/functions/fnc_startLinkingBelt.sqf +++ b/addons/reload/functions/fnc_startLinkingBelt.sqf @@ -8,7 +8,13 @@ * * Return Value: * None + * + * Example: + * [bob, kevin] call ace_reload_fnc_startLinkingBelt + * + * Public: No */ + #include "script_component.hpp" params ["_player", "_target"]; @@ -16,25 +22,12 @@ params ["_player", "_target"]; if (vehicle _target != _target) exitWith {false}; private _magazineType = currentMagazine _target; -private _magazineCfg = configFile >> "CfgMagazines" >> _magazineType; -if (getNumber (_magazineCfg >> "ACE_isBelt") == 0) exitWith {false}; -// Check if the ammo is not empty or full -private _ammoCount = _target ammo currentWeapon _target; +private _maxAmmo = [_player, _target] call FUNC(getAmmoToLinkBelt); -// Exit if the belt is full or empty -if ((_ammoCount == 0) || (getNumber (_magazineCfg >> "count") - _ammoCount) == 0) exitWith {false}; - -// Check if the player has any of the same same magazines -// Calculate max ammo it can link -private _maxAmmo = 0; - -{ - _maxAmmo = _maxAmmo max (_x select 1); -} forEach (magazinesAmmo _player select {_x select 0 == _magazineType}); - -if (_maxAmmo == 0) exitWith {}; +//if _maxAmmo is below 0 we quit +if (_maxAmmo <= 0) exitWith {}; // Condition to call each frame private _condition = { diff --git a/addons/reload/stringtable.xml b/addons/reload/stringtable.xml index 10426344ed..5cdbe3e9ba 100644 --- a/addons/reload/stringtable.xml +++ b/addons/reload/stringtable.xml @@ -10,10 +10,12 @@ Sprawdź stan amunicji przy przeładowaniu broni Vérification des munitions au rechargement Lőszer ellenőrzése a fegyver újratöltésekor - Controlla le munizioni ricaricando + Controlla le munizioni durante il ricaricamento Conferir munição ao recarregar a arma 再装填された武器の弾薬を確認 재장전시 장탄수 확인 + 在重新装填时检查弹药 + 在重新裝填時檢查彈藥 Check the ammo in your new magazine on magazine reload. @@ -28,6 +30,8 @@ Confere a munição no seu novo carregador ao recarregar a arma あたらしく装填された弾倉の弾薬を確認します。 재장전시 새탄창에 있는 탄약을 확인합니다. + 在重新装填时检查新弹匣上的弹药. + 在重新裝填時檢查新彈匣上的彈藥. Check Ammo @@ -42,6 +46,8 @@ Проверить боеприпасы 弾薬を確認 장탄수 확인 + 检查弹药 + 檢查彈藥 Ammo @@ -56,6 +62,8 @@ Боеприпасы 弾薬 장탄수 + 弹药 + 彈藥 Link belt @@ -70,6 +78,8 @@ Ligar cintos de munição ベルト リンク 벨트 연결 + 连接弹链 + 連接彈鏈 Linking belt... @@ -80,10 +90,12 @@ Podłączanie taśmy... Gurt anhängen... Töltényheveder összekötése folyamatban... - Attacco la tracolla... + Attaccando la tracolla... Ligando cintos... ベルトをつなげている・・・ 벨트 연결중... + 连接弹链中... + 連接彈鏈中... diff --git a/addons/reloadlaunchers/functions/fnc_addMissileReloadActions.sqf b/addons/reloadlaunchers/functions/fnc_addMissileReloadActions.sqf index 6a9d779d02..1597654847 100644 --- a/addons/reloadlaunchers/functions/fnc_addMissileReloadActions.sqf +++ b/addons/reloadlaunchers/functions/fnc_addMissileReloadActions.sqf @@ -3,11 +3,14 @@ * Create one action per reloadable missile * * Arguments: - * 1: Target (Object) - * 0: Player (Object) + * 1: Target + * 0: Player * * Return Value: - * Children actions (Array) + * Children actions + * + * Example: + * [bob, kevin] call ace_reloadlaunchers_fnc_addMissileReloadActions * * Public: No * diff --git a/addons/reloadlaunchers/functions/fnc_canLoad.sqf b/addons/reloadlaunchers/functions/fnc_canLoad.sqf index 5072d44a48..9f76cab49a 100644 --- a/addons/reloadlaunchers/functions/fnc_canLoad.sqf +++ b/addons/reloadlaunchers/functions/fnc_canLoad.sqf @@ -3,13 +3,16 @@ * Check of the unit can reload the launcher of target unit. * * Arguments: - * 0: Unit to do the reloading (Object) - * 1: Unit eqipped with launcher (Object) - * 2: weapon name (String) - * 3: missile name (String) + * 0: Unit to do the reloading + * 1: Unit eqipped with launcher + * 2: weapon name + * 3: missile name * * Return Value: - * NONE + * None + * + * Example: + * [bob, kevin, "weapon", "missile"] call ace_reloadlaunchers_fnc_canLoad * * Public: No */ diff --git a/addons/reloadlaunchers/functions/fnc_getLoadableMissiles.sqf b/addons/reloadlaunchers/functions/fnc_getLoadableMissiles.sqf index 40766a5905..2dc8cf5925 100644 --- a/addons/reloadlaunchers/functions/fnc_getLoadableMissiles.sqf +++ b/addons/reloadlaunchers/functions/fnc_getLoadableMissiles.sqf @@ -3,11 +3,14 @@ * Return all magazine types from reloaders inventory that are compatible with given weapon. * * Arguments: - * 0: Unit to to the reload (Object) - * 1: A launcher (String) + * 0: Unit to to the reload + * 1: A launcher * * Return Value: - * Reloable magazines (Array) + * Reloable magazines + * + * Example: + * [bob, launcher] call ace_reloadlaunchers_fnc_getLoadableMissiles * * Public: No */ diff --git a/addons/reloadlaunchers/functions/fnc_load.sqf b/addons/reloadlaunchers/functions/fnc_load.sqf index 2f822bb6d7..8330b111b7 100644 --- a/addons/reloadlaunchers/functions/fnc_load.sqf +++ b/addons/reloadlaunchers/functions/fnc_load.sqf @@ -3,13 +3,16 @@ * Reload a launcher * * Arguments: - * 0: Unit with magazine (Object) - * 1: Unit with launcher (Object) - * 2: weapon name (String) - * 3: missile name (String) + * 0: Unit with magazine + * 1: Unit with launcher + * 2: weapon name + * 3: missile name * * Return Value: - * NONE + * None + * + * Example: + * [bob, kevin, "weapon", "missile"] call ace_reloadlaunchers_fnc_load * * Public: No */ diff --git a/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf b/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf index 96db7cdca5..cd2295d7d0 100644 --- a/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf +++ b/addons/reloadlaunchers/functions/fnc_reloadLauncher.sqf @@ -3,13 +3,16 @@ * Reload a launcher * * Arguments: - * 0: Unit to do the reloading (Object) - * 1: Target to rload (Object) - * 2: weapon name (String) - * 3: missile name (String) + * 0: Unit to do the reloading + * 1: Target to rload + * 2: weapon name + * 3: missile name * * Return Value: - * NONE + * None + * + * Example: + * [bob, kevin, "weapon", "missile"] call ace_reloadlaunchers_fnc_realoadLauncher * * Public: No */ @@ -24,4 +27,4 @@ if (currentWeapon _target != _weapon) exitWith {}; if (currentMagazine _target != "") exitWith {}; // command is wip, reload time for launchers is not intended. -_target addWeaponItem [_weapon, _magazine]; +_target addWeaponItem [_weapon, _magazine]; diff --git a/addons/reloadlaunchers/stringtable.xml b/addons/reloadlaunchers/stringtable.xml index cb9c610c56..ccbca809f0 100644 --- a/addons/reloadlaunchers/stringtable.xml +++ b/addons/reloadlaunchers/stringtable.xml @@ -14,6 +14,8 @@ Recarregar lançador ランチャーを装填 무기 재장전 + 装载发射器 + 裝載發射器 Loading launcher... @@ -24,10 +26,12 @@ Nabíjím odpalovač... Ładowanie wyrzutni... Kilövő betöltés alatt... - Carico il lanciamissili... + Caricando il lanciamissili... Recarregando lançador... ランチャーを装填している・・・ 무기 재장전중... + 装载发射器中... + 裝載發射器中... Launcher loaded @@ -42,6 +46,8 @@ Lançador Carregado ランチャーの装填完了 무기 재장전됨 + 发射器装载完毕 + 發射器裝載完畢 Load %1 @@ -56,6 +62,8 @@ Recarregar %1 %1 へ装填 %1 장전 + 装载%1 + 裝載%1 diff --git a/addons/repair/ACE_Settings.hpp b/addons/repair/ACE_Settings.hpp index 46228e2e44..0c05bc8459 100644 --- a/addons/repair/ACE_Settings.hpp +++ b/addons/repair/ACE_Settings.hpp @@ -12,7 +12,7 @@ class ACE_Settings { description = CSTRING(enginerSetting_Repair_description); typeName = "SCALAR"; value = 1; - values[] = {CSTRING(engineerSetting_anyone), CSTRING(engineerSetting_EngineerOnly), CSTRING(engineerSetting_RepairSpecialistOnly)}; + values[] = {CSTRING(engineerSetting_anyone), CSTRING(engineerSetting_EngineerOnly), CSTRING(engineerSetting_AdvancedOnly)}; category = ECSTRING(OptionsMenu,CategoryLogistics); }; class GVAR(engineerSetting_wheel) { @@ -20,7 +20,7 @@ class ACE_Settings { description = CSTRING(enginerSetting_Wheel_description); typeName = "SCALAR"; value = 0; - values[] = {CSTRING(engineerSetting_anyone), CSTRING(engineerSetting_EngineerOnly), CSTRING(engineerSetting_RepairSpecialistOnly)}; + values[] = {CSTRING(engineerSetting_anyone), CSTRING(engineerSetting_EngineerOnly), CSTRING(engineerSetting_AdvancedOnly)}; category = ECSTRING(OptionsMenu,CategoryLogistics); }; class GVAR(repairDamageThreshold) { @@ -58,7 +58,7 @@ class ACE_Settings { description = CSTRING(engineerSetting_fullRepair_description); typeName = "SCALAR"; value = 2; - values[] = {CSTRING(engineerSetting_anyone), CSTRING(engineerSetting_EngineerOnly), CSTRING(engineerSetting_RepairSpecialistOnly)}; + values[] = {CSTRING(engineerSetting_anyone), CSTRING(engineerSetting_EngineerOnly), CSTRING(engineerSetting_AdvancedOnly)}; category = ECSTRING(OptionsMenu,CategoryLogistics); }; class GVAR(addSpareParts) { diff --git a/addons/repair/CfgEden.hpp b/addons/repair/CfgEden.hpp index eb7933fee4..1c1263755b 100644 --- a/addons/repair/CfgEden.hpp +++ b/addons/repair/CfgEden.hpp @@ -9,8 +9,8 @@ class Cfg3DEN { }; }; class GVAR(isEngineerControl): Title { - attributeLoad = "(_this controlsGroupCtrl 100) lbsetcursel (((_value + 1) min 3) max 0);"; - attributeSave = "(missionnamespace getvariable ['ace_isEng_temp',0]) - 1;"; + attributeLoad = "(_this controlsGroupCtrl 100) lbSetCurSel (((_value + 1) min 3) max 0);"; + attributeSave = "(lbCurSel (_this controlsGroupCtrl 100)) - 1"; class Controls: Controls { class Title: Title{}; class Value: ctrlToolbox { @@ -21,8 +21,7 @@ class Cfg3DEN { h = "5 * (pixelH * pixelGrid * 0.50)"; rows = 1; columns = 4; - strings[] = {"$STR_3DEN_Attributes_Lock_Default_text", CSTRING(AssignEngineerRole_role_none), CSTRING(AssignEngineerRole_role_engineer), CSTRING(AssignEngineerRole_role_specialist)}; - onToolboxSelChanged = "missionnamespace setvariable ['ace_isEng_temp',_this select 1];"; + strings[] = {"$STR_3DEN_Attributes_Lock_Default_text", CSTRING(AssignEngineerRole_role_none), CSTRING(AssignEngineerRole_role_engineer), CSTRING(AssignEngineerRole_role_advanced)}; }; }; }; diff --git a/addons/repair/CfgEventHandlers.hpp b/addons/repair/CfgEventHandlers.hpp index 559d2d4d7e..3e47f9f96f 100644 --- a/addons/repair/CfgEventHandlers.hpp +++ b/addons/repair/CfgEventHandlers.hpp @@ -37,7 +37,7 @@ class Extended_InitPost_EventHandlers { class Helicopter { class ADDON { init = QUOTE(_this call DFUNC(addRepairActions)); - exclude[] = {QEGVAR(fastroping,helper), "ACE_friesBase"}; + exclude[] = {QEGVAR(fastroping,helper), "ACE_friesBase", QEGVAR(refuel,helper)}; }; }; class Plane { diff --git a/addons/repair/CfgVehicles.hpp b/addons/repair/CfgVehicles.hpp index 178e8ecb12..e06c18115b 100644 --- a/addons/repair/CfgVehicles.hpp +++ b/addons/repair/CfgVehicles.hpp @@ -38,7 +38,7 @@ class CfgVehicles { class values { class anyone { name = CSTRING(engineerSetting_anyone); value = 0; }; class Engineer { name = CSTRING(engineerSetting_EngineerOnly); value = 1; default = 1; }; - class Special { name = CSTRING(engineerSetting_RepairSpecialistOnly); value = 2; }; + class Advanced { name = CSTRING(engineerSetting_AdvancedOnly); value = 2; }; }; }; class engineerSetting_Wheel { @@ -48,7 +48,7 @@ class CfgVehicles { class values { class anyone { name = CSTRING(engineerSetting_anyone); value = 0; default = 1; }; class Engineer { name = CSTRING(engineerSetting_EngineerOnly); value = 1; }; - class Special { name = CSTRING(engineerSetting_RepairSpecialistOnly); value = 2; }; + class Advanced { name = CSTRING(engineerSetting_AdvancedOnly); value = 2; }; }; }; class repairDamageThreshold { @@ -91,7 +91,7 @@ class CfgVehicles { class values { class anyone { name = CSTRING(engineerSetting_anyone); value = 0; }; class Engineer { name = CSTRING(engineerSetting_EngineerOnly); value = 1; }; - class Special { name = CSTRING(engineerSetting_RepairSpecialistOnly); value = 2; default = 1;}; + class Advanced { name = CSTRING(engineerSetting_AdvancedOnly); value = 2; default = 1;}; }; }; class addSpareParts { @@ -150,7 +150,7 @@ class CfgVehicles { default = 1; }; class doctor { - name = CSTRING(AssignEngineerRole_role_specialist); + name = CSTRING(AssignEngineerRole_role_advanced); value = 2; }; }; diff --git a/addons/repair/dev/draw_showRepairInfo.sqf b/addons/repair/dev/draw_showRepairInfo.sqf new file mode 100644 index 0000000000..5701c172ea --- /dev/null +++ b/addons/repair/dev/draw_showRepairInfo.sqf @@ -0,0 +1,69 @@ +// PabstMirror +// [] execVM "\z\ace\addons\repair\dev\draw_showRepairInfo.sqf"; + +#include "\z\ace\addons\repair\script_component.hpp" + +addMissionEventHandler ["Draw3D", { + if !((cursorObject isKindOf "Car") || (cursorObject isKindOf "Tank") || (cursorObject isKindOf "Air")) exitWith {}; + private _config = configFile >> "CfgVehicles" >> (typeOf cursorObject); + + private _hitpointPositions = getArray (_config >> QGVAR(hitpointPositions)); + private _hitpointGroups = getArray (_config >> QGVAR(hitpointGroups)); + + (getAllHitPointsDamage cursorObject) params [["_hitPoints", []], ["_hitSelections", []]]; + ([cursorObject] call FUNC(getWheelHitPointsWithSelections)) params ["_wheelHitPoints", "_wheelHitSelections"]; + + private _output = []; + + { + private _selection = _x; + private _hitpoint = _hitPoints select _forEachIndex; + + if ((_selection != "") && {_hitPoint != ""}) then { + if (((toLower _hitPoint) find "glass") != -1) exitWith {}; + + private _info = ""; + private _color = [1,0,0,1]; + if (_selection in _wheelHitSelections) then { + _info = _info + "[Wheel]"; + _color = [0,1,0,1]; + }; + if (!((getText (_config>> "HitPoints" >> _hitpoint >> "depends")) in ["", "0"])) then { + _info = _info + format ["[depends: %1]", getText (_config>> "HitPoints" >> _hitpoint >> "depends")]; + _color = [0,0,1,1] + }; + + private _position = cursorObject selectionPosition [_selection, "HitPoints"]; + { + _x params ["_hit", "_pos"]; + if (_hitpoint == _hit) exitWith { + _info = _info + format ["[hitPos: %1]", _pos]; + if (_pos isEqualType []) exitWith { + _position = _pos; + }; + if (_pos isEqualType "") exitWith { + _position = cursorObject selectionPosition [_pos, "HitPoints"]; + }; + }; + } forEach _hitpointPositions; + + private _parentHitpoint = ""; + { + private _xParent = _x select 0; + { + if (_hitpoint == _x) exitWith { + _info = _info + format ["[Parent: %1]", _xParent]; + _parentHitpoint = _xParent; + }; + } forEach (_x select 1); + } forEach _hitpointGroups; + + if (_parentHitpoint == "") then { + drawIcon3D ["", _color, (cursorObject modelToWorld _position), 0.5, 0.5, 0, format ["%1 [%2]", _hitpoint, _selection], 0.5, 0.025, "TahomaB"]; + }; + _output pushBack format ["%1: %2[%3] = %4", _forEachIndex, _hitPoint, _selection, cursorObject getHitIndex _forEachIndex]; + _output pushBack format ["- %1 -",_info]; + }; + } forEach _hitPoints; + hintSilent (_output joinString "\n"); +}]; diff --git a/addons/repair/functions/fnc_addRepairActions.sqf b/addons/repair/functions/fnc_addRepairActions.sqf index 1dfc518d39..398083a080 100644 --- a/addons/repair/functions/fnc_addRepairActions.sqf +++ b/addons/repair/functions/fnc_addRepairActions.sqf @@ -56,7 +56,7 @@ _processedHitpoints = []; // An action to remove the wheel is required _name = format ["Remove_%1_%2", _forEachIndex, _hitpoint]; - _text = localize LSTRING(RemoveWheel); + private _text = localize LSTRING(RemoveWheel); _condition = {[_this select 1, _this select 0, _this select 2 select 0, "RemoveWheel"] call DFUNC(canRepair)}; _statement = {[_this select 1, _this select 0, _this select 2 select 0, "RemoveWheel"] call DFUNC(repair)}; _action = [_name, _text, _icon, _statement, _condition, {}, [_hitpoint], _position, 2] call EFUNC(interact_menu,createAction); @@ -79,7 +79,8 @@ _processedHitpoints = []; if (_selection isEqualTo "") exitWith { TRACE_3("Selection Empty",_hitpoint,_forEachIndex,_selection); }; if (_hitpoint isEqualTo "") exitWith { TRACE_3("Hitpoint Empty",_hitpoint,_forEachIndex,_selection); }; //Depends hitpoints shouldn't be modified directly (will be normalized) - if (isText (configFile >> "CfgVehicles" >> _type >> "HitPoints" >> _hitpoint >> "depends")) exitWith { + // Biki: Clearing 'depends' in case of inheritance cannot be an empty string (rpt warnings), but rather a "0" value. + if (!((getText (configFile >> "CfgVehicles" >> _type >> "HitPoints" >> _hitpoint >> "depends")) in ["", "0"])) exitWith { TRACE_3("Skip Depends",_hitpoint,_forEachIndex,_selection); }; diff --git a/addons/repair/functions/fnc_getHitPointString.sqf b/addons/repair/functions/fnc_getHitPointString.sqf index 6214b00df7..31e4ed400f 100644 --- a/addons/repair/functions/fnc_getHitPointString.sqf +++ b/addons/repair/functions/fnc_getHitPointString.sqf @@ -9,8 +9,8 @@ * 3: Track Added Hitpoints (default: false) * * Return Value: - * 0: Text - * 1: Added Hitpoint (default: []) + * 0: Text + * 1: Added Hitpoint (default: []) * * Example: * ["HitFuel", "Repairing %1 ...", "Repairing HitFuel"] call ace_repair_fnc_getHitPointString diff --git a/addons/repair/functions/fnc_getPostRepairDamage.sqf b/addons/repair/functions/fnc_getPostRepairDamage.sqf index 9388f4474d..22eaf7a5f9 100644 --- a/addons/repair/functions/fnc_getPostRepairDamage.sqf +++ b/addons/repair/functions/fnc_getPostRepairDamage.sqf @@ -22,7 +22,7 @@ TRACE_1("params",_unit); if (([_unit] call FUNC(isInRepairFacility) || {[_unit] call FUNC(isNearRepairVehicle)})) exitWith {0}; private _class = _unit getVariable ["ACE_IsEngineer", getNumber (configFile >> "CfgVehicles" >> typeOf _unit >> "engineer")]; -//If specialist or more qualified than min, then use engineer threshold: +//If advanced or more qualified than min, then use engineer threshold: if ((_class isEqualTo 2) || {[_unit, GVAR(engineerSetting_Repair) + 1] call FUNC(isEngineer)}) exitWith { (GVAR(repairDamageThreshold_Engineer) min GVAR(repairDamageThreshold)) }; diff --git a/addons/repair/functions/fnc_isEngineer.sqf b/addons/repair/functions/fnc_isEngineer.sqf index d07c12af64..d2ee71b913 100644 --- a/addons/repair/functions/fnc_isEngineer.sqf +++ b/addons/repair/functions/fnc_isEngineer.sqf @@ -20,7 +20,7 @@ params ["_unit", ["_engineerN", 1]]; TRACE_2("params",_unit,_engineerN); private ["_class"]; -_class = _unit getVariable ["ACE_IsEngineer", getNumber (configFile >> "CfgVehicles" >> typeOf _unit >> "engineer")]; +_class = _unit getVariable ["ACE_IsEngineer", _unit getUnitTrait "engineer"]; // This if statement is here for copmatability with the common variant of isEngineer, which requires a bool. // We cannot move this function to common because we require the GVAR(engineerSetting_Repair), which only makes sense to include in the repair module. diff --git a/addons/repair/functions/fnc_isNearRepairVehicle.sqf b/addons/repair/functions/fnc_isNearRepairVehicle.sqf index 463e281faa..b0bd4b3cd1 100644 --- a/addons/repair/functions/fnc_isNearRepairVehicle.sqf +++ b/addons/repair/functions/fnc_isNearRepairVehicle.sqf @@ -18,11 +18,9 @@ params ["_unit"]; TRACE_1("params",_unit); -private ["_nearObjects", "_return"]; +private _nearObjects = nearestObjects [_unit, ["Air", "LandVehicle", "Slingload_base_F"], 20]; -_nearObjects = nearestObjects [_unit, ["Air","LandVehicle"], 20]; - -_return = false; +private _return = false; { if ([_x] call FUNC(isRepairVehicle)) exitWith {_return = true;}; } forEach _nearObjects; diff --git a/addons/repair/functions/fnc_isRepairVehicle.sqf b/addons/repair/functions/fnc_isRepairVehicle.sqf index 2c0b5a1e21..f18ff0cd3e 100644 --- a/addons/repair/functions/fnc_isRepairVehicle.sqf +++ b/addons/repair/functions/fnc_isRepairVehicle.sqf @@ -5,7 +5,7 @@ * Arguments: * 0: Vehicle * - * ReturnValue: + * Return Value: * Is engineering vehicle * * Example: diff --git a/addons/repair/functions/fnc_modifyInteraction.sqf b/addons/repair/functions/fnc_modifyInteraction.sqf index cff0fbe6e8..f1956ee384 100644 --- a/addons/repair/functions/fnc_modifyInteraction.sqf +++ b/addons/repair/functions/fnc_modifyInteraction.sqf @@ -9,7 +9,7 @@ * 3: Action Data * * Return Value: - * Nothing + * None * * Example: * [cursorObject, player, [], []] call ace_repair_fnc_modifyInteraction; @@ -21,7 +21,7 @@ params ["_target", "_player", "_args", "_actionData"]; TRACE_4("params",_target,_player,_args,_actionData); -// Interaction dots numbered 0..8, white to red. +// Interaction dots numbered 0..8, white to red. // Convert damage to number (rounding up), so that even slight damage can bee seen private _fileName = format [QPATHTOF(ui\damage_%1_ca.paa), ceil (linearConversion [0, 1, damage _target, 0, 8, true])]; diff --git a/addons/repair/functions/fnc_normalizeHitPoints.sqf b/addons/repair/functions/fnc_normalizeHitPoints.sqf index 1f6004aa15..cb06eeaeae 100644 --- a/addons/repair/functions/fnc_normalizeHitPoints.sqf +++ b/addons/repair/functions/fnc_normalizeHitPoints.sqf @@ -33,7 +33,7 @@ private _dependentHitPointScripts = []; { if ((_x != "") && {isClass (_config >> _x)} && {!(_x in _realHitPoints)}) then { _realHitPoints pushBack _x; - if (isText (_config >> _x >> "depends")) then { + if (!((getText (_config >> _x >> "depends")) in ["", "0"])) then { _dependentHitPoints pushBack _x; _dependentHitPointScripts pushBack compile getText (_config >> _x >> "depends"); }; diff --git a/addons/repair/functions/fnc_repair.sqf b/addons/repair/functions/fnc_repair.sqf index d4f5412e6f..3ee6d4097f 100644 --- a/addons/repair/functions/fnc_repair.sqf +++ b/addons/repair/functions/fnc_repair.sqf @@ -177,23 +177,31 @@ if (vehicle _caller == _caller && {_callerAnim != ""}) then { [_caller, _callerAnim] call EFUNC(common,doAnimation); }; -//Get repair time -_repairTime = if (isNumber (_config >> "repairingTime")) then { - getNumber (_config >> "repairingTime"); -} else { - if (isText (_config >> "repairingTime")) exitWith { - _repairTimeConfig = getText(_config >> "repairingTime"); - if (isNil _repairTimeConfig) then { - _repairTimeConfig = compile _repairTimeConfig; - } else { - _repairTimeConfig = missionNamespace getVariable _repairTimeConfig; +// Get repair time +_repairTime = [ + configFile >> "CfgVehicles" >> typeOf _target >> QGVAR(repairTimes) >> configName _config, + "number", + -1 +] call CBA_fnc_getConfigEntry; + +if (_repairTime < 0) then { + _repairTime = if (isNumber (_config >> "repairingTime")) then { + getNumber (_config >> "repairingTime"); + } else { + if (isText (_config >> "repairingTime")) exitWith { + _repairTimeConfig = getText (_config >> "repairingTime"); + if (isNil _repairTimeConfig) then { + _repairTimeConfig = compile _repairTimeConfig; + } else { + _repairTimeConfig = missionNamespace getVariable _repairTimeConfig; + }; + if (_repairTimeConfig isEqualType 0) exitWith { + _repairTimeConfig; + }; + [_caller, _target, _hitPoint, _className] call _repairTimeConfig; }; - if (_repairTimeConfig isEqualType 0) exitWith { - _repairTimeConfig; - }; - [_caller, _target, _hitPoint, _className] call _repairTimeConfig; + 0; }; - 0; }; // Find localized string diff --git a/addons/repair/functions/fnc_repair_failure.sqf b/addons/repair/functions/fnc_repair_failure.sqf index 8616dd4808..db58c94448 100644 --- a/addons/repair/functions/fnc_repair_failure.sqf +++ b/addons/repair/functions/fnc_repair_failure.sqf @@ -40,7 +40,7 @@ _weaponSelect = (_caller getVariable [QGVAR(selectedWeaponOnrepair), ""]); if (_weaponSelect != "") then { _caller selectWeapon _weaponSelect; } else { - _caller action ["SwitchWeapon", _caller, _caller, 99]; + _caller action ["SwitchWeapon", _caller, _caller, 299]; }; { diff --git a/addons/repair/functions/fnc_repair_success.sqf b/addons/repair/functions/fnc_repair_success.sqf index c18116f862..5196075735 100644 --- a/addons/repair/functions/fnc_repair_success.sqf +++ b/addons/repair/functions/fnc_repair_success.sqf @@ -40,7 +40,7 @@ _weaponSelect = (_caller getVariable [QGVAR(selectedWeaponOnrepair), ""]); if (_weaponSelect != "") then { _caller selectWeapon _weaponSelect; } else { - _caller action ["SwitchWeapon", _caller, _caller, 99]; + _caller action ["SwitchWeapon", _caller, _caller, 299]; }; //Unclaim repair objects: diff --git a/addons/repair/functions/fnc_setHitPointDamage.sqf b/addons/repair/functions/fnc_setHitPointDamage.sqf index 6423df6938..57c65d1407 100644 --- a/addons/repair/functions/fnc_setHitPointDamage.sqf +++ b/addons/repair/functions/fnc_setHitPointDamage.sqf @@ -45,7 +45,7 @@ _hitPointDamageRepaired = 0; //positive for repairs : newSum = (oldSum - repaire if ((!isNil {_vehicle getHit _selectionName}) && {_x != ""}) then { _realHitpointCount = _realHitpointCount + 1; - if ((((toLower _x) find "glass") == -1) && {!isText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "HitPoints" >> _x >> "depends")}) then { + if ((((toLower _x) find "glass") == -1) && {(getText (configFile >> "CfgVehicles" >> typeOf _vehicle >> "HitPoints" >> _x >> "depends")) in ["", "0"]}) then { _hitPointDamageSumOld = _hitPointDamageSumOld + (_allHitPointDamages select _forEachIndex); if (_forEachIndex == _hitPointIndex) then { _hitPointDamageRepaired = (_allHitPointDamages select _forEachIndex) - _hitPointDamage; diff --git a/addons/repair/functions/fnc_useItem.sqf b/addons/repair/functions/fnc_useItem.sqf index 02daeed33e..de3950fa22 100644 --- a/addons/repair/functions/fnc_useItem.sqf +++ b/addons/repair/functions/fnc_useItem.sqf @@ -6,7 +6,7 @@ * 0: Unit * 1: Item classname * - * ReturnValue: + * Return Value: * [Had Item to Use , Unit ] * * Example: diff --git a/addons/repair/functions/fnc_useItems.sqf b/addons/repair/functions/fnc_useItems.sqf index 14dcb6223c..859115b68c 100644 --- a/addons/repair/functions/fnc_useItems.sqf +++ b/addons/repair/functions/fnc_useItems.sqf @@ -6,7 +6,7 @@ * 0: Unit * 1: Item classnames * - * ReturnValue: + * Return Value: * [Had Item to Use , Array of units that used the items ] * * Example: diff --git a/addons/repair/stringtable.xml b/addons/repair/stringtable.xml index bdfa2001ad..7ab7788778 100644 --- a/addons/repair/stringtable.xml +++ b/addons/repair/stringtable.xml @@ -14,6 +14,8 @@ Запасная гусеница 予備履帯 예비 궤도 + 备用履带 + 備用履帶 Spare Wheel @@ -28,6 +30,8 @@ Запасное колесо 予備タイヤ 예비 바퀴 + 备用轮胎 + 備用輪胎 Change Wheel @@ -42,6 +46,8 @@ Vyměnit kolo タイヤを変える 바퀴 교체 + 更换轮胎 + 更換輪胎 Replacing Wheel... @@ -51,10 +57,12 @@ Замена колеса... Měním kolo... Cambiando rueda... - Sto sostituendo la ruota... + Sostituendo la ruota... Remplacement de la roue... タイヤを交換中・・・ 바퀴 교체중... + 更换轮胎中... + 更換輪胎中... Wheel replaced @@ -68,6 +76,8 @@ Roue remplacée タイヤを履き替え 바퀴 교체됨 + 轮胎更换完毕 + 輪胎更換完畢 Remove Wheel @@ -82,6 +92,8 @@ Снять колесо タイヤを外す 바퀴 제거 + 卸下轮胎 + 卸下輪胎 Removing Wheel... @@ -91,10 +103,12 @@ Снятие колеса... Odstraňuji kolo... Quitando rueda... - Sto rimuovendo la ruota... + Rimuovendo la ruota... Démontage de la roue... タイヤを外している・・ 바퀴 제거중... + 卸下轮胎中... + 卸下輪胎中... Wheel removed @@ -108,6 +122,8 @@ Roue démontée タイヤを外した 바퀴 제거됨 + 轮胎卸下完毕 + 輪胎卸下完畢 Change Track @@ -121,6 +137,8 @@ Changer la chenille 履帯を変える 궤도 교체 + 更换履带 + 更換履帶 Replacing Track... @@ -130,10 +148,12 @@ Замена гусеницы... Měním pás... Cambiando oruga... - Sto sostituendo il cingolo... + Sostituendo il cingolo... Remplacement de la chenille... 履帯を交換中・・・ 궤도 교체중... + 更换履带中... + 更換履帶中... Track replaced @@ -147,6 +167,8 @@ Chenille remplacée 履帯を交換した 궤도 교체됨 + 履带更换完毕 + 履帶更換完畢 Remove Track @@ -160,6 +182,8 @@ Enlever la chenille 履帯を外す 궤도 제거 + 卸下履带 + 卸下履帶 Removing Track... @@ -169,10 +193,12 @@ Снятие гусеницы... Odstraňuji pás... Quitando oruga... - Sto rimuovendo il cingolo... + Rimuovendo il cingolo... Enlèvement de la chenille... 履帯を外している・・・ 궤도 제거중... + 卸下履带中... + 卸下履帶中... Track removed @@ -186,6 +212,8 @@ Chenille enlevée 履帯を外した 궤도 제거됨 + 履带卸下完毕 + 履帶卸下完畢 Full Repair @@ -199,6 +227,8 @@ Réparations complètes 完全に修理 완전수리 + 完整维修 + 完整維修 Repairing Vehicle... @@ -208,10 +238,12 @@ Ремонт транспорта... Opravuji vozidlo... Reparando vehículo... - Sto riparando il veicolo... + Riparando il veicolo... Réparation du véhicule... 車両を修理中・・・ 차량 수리중... + 维修载具中... + 維修載具中... Full Repair Locations @@ -225,6 +257,8 @@ Lieu de réparation complète 完全修理をできる場所 완전수리 구역 + 完整维修地点 + 完整維修地點 At what locations can a vehicle be fully repaired? @@ -238,6 +272,8 @@ Où peuvent être réparés complètement les véhicules ? どのような場所で車両の完全な修理を出来るようにしますか? 어느 구역에서 차량을 완전히 수리할 수 있게 합니까? + 什么位置可以完整维修载具? + 什麼位置可以完整維修載具? Allow Full Repair @@ -251,6 +287,8 @@ Autoriser les réparations complètes. 完全な修理をさせる 완전 수리 활성화 + 允许完整维修 + 允許完整維修 Who can perform a full repair on a vehicle? @@ -264,6 +302,8 @@ Qui peut faire une réparation complète ? 誰が車両の完全な修理を出来るようにしますか? 누가 완전 수리를 할 수 있습니까? + 谁可以完整维修载具? + 誰可以完整維修載具? Add Spare Parts @@ -277,6 +317,8 @@ Ajouter des pièces de rechange 予備部品を追加 예비 부품 더하기 + 添加备件 + 添加備件 Add spare parts to vehicles (requires Cargo component)? @@ -290,6 +332,8 @@ Ajouter des pièces de rechage aux véhicules ? (à besoin du système de cargaison) 車両へ予備部品を追加しますか(カーゴ コンポーネントが必要)? 차량에 예비 부품을 더합니까?(짐칸 요소 필요) + 添加载具备件 (需相关货物组件)? + 添加載具備件 (需相關貨物組件)? Repair @@ -304,6 +348,8 @@ Ремонт 修理 수리 + 维修 + 維修 Display text on repair @@ -317,6 +363,8 @@ Afficher du texte pendant la réparation 修理時に文章で通知する 수리시 화면에 글자 표시 + 显示维修文本 + 顯示維修文本 Display a notification whenever you repair a vehicle @@ -330,6 +378,8 @@ Afficher une notification lorsque l'on répare un véhicule あなたが車両の修理を始めると、画面に通知を出します 수리시 화면에 글자로 알림이 뜹니다 + 每当维修载具时显示通知 + 每當維修載具時顯示通知 Repairing... @@ -339,11 +389,13 @@ Naprawianie... Opravuji... Reparando... - Sto riparando... + Riparando... javítása... Ремонтируем... 修理中・・・ 수리중... + 维修中... + 維修中... Repairing %1... @@ -353,11 +405,13 @@ Naprawianie %1... Opravuji %1... Reparando %1... - Sto riparando %1... + Riparando %1... %1 javítása... Ремонтируем %1... %1 を修理中・・・ %1 수리중... + 维修%1中... + 維修%1中... Repaired %1 @@ -372,6 +426,8 @@ %1 отремонтирован %1 を修理した %1 수리됨 + 已维修%1 + 已維修%1 Fully repaired part @@ -385,6 +441,8 @@ Pièce entièrement réparée 部分的な完全な修理 부분 완벽히 수리됨 + 完整维修部分 + 完整維修部分 Partially repaired %1 @@ -398,6 +456,8 @@ %1 pratiquement réparée %1 を部分的に修理した %1 부분적으로 수리됨 + %1已完成部分维修 + %1已完成部分維修 Fully repaired %1 @@ -411,6 +471,8 @@ %1 entièrement réparée %1 を完全に修理した %1 완전히 수리됨 + %1已完整维修 + %1已完整維修 Partially repaired %1 @@ -424,6 +486,8 @@ %1 pratiquement réparée %1 を部分的に修理した %1 부분적으로 수리됨 + %1已完成部分维修 + %1已完成部分維修 Body @@ -438,6 +502,8 @@ Кузов 車体 몸체 + 车身 + 車身 Hull @@ -452,6 +518,8 @@ Корпус 機体 선체 + 车壳 + 車殼 Engine @@ -466,6 +534,8 @@ Двигатель エンジン 엔진 + 引擎 + 引擎 Left Horizontal Stabilizer @@ -479,6 +549,8 @@ Linkes Höhenleitwerk 左側の水平安定機 왼쪽 수평안정판 + 左侧悬挂稳定 + 左側懸掛穩定 Right Horizontal Stabilizer @@ -492,6 +564,8 @@ Rechtes Höhenleitwerk 右側の水平安定機 오른쪽 수평안정판 + 右侧悬挂稳定 + 右側懸掛穩定 Vertical Stabilizer @@ -505,6 +579,8 @@ Seitenleitwerk 車両安定器 수직 안정판 + 垂直稳定 + 垂直穩定 Fuel Tank @@ -519,6 +595,8 @@ Топливный бак 燃料タンク 연료 탱크 + 油箱 + 油箱 Transmission @@ -532,6 +610,8 @@ Instruments 変速機 변속기 + 变速箱 + 變速箱 Gear @@ -545,6 +625,8 @@ Trains d'attérissage ギア 기어 + 齿轮 + 齒輪 Starter @@ -558,6 +640,8 @@ Démarreur スターター 점화기 + 发动机 + 發動機 Tail @@ -571,6 +655,8 @@ Queue 尾翼 꼬리 + 尾翼 + 尾翼 Pitot Tube @@ -584,6 +670,8 @@ Sonde pitot ピトー管 동압관 + 空速管 + 空速管 Static Port @@ -597,6 +685,8 @@ Port statique スタティック ポート 정압공 + 静态端口 + 靜態端口 Ammo @@ -610,6 +700,8 @@ Munitions 弾薬 탄약 + 弹药 + 彈藥 Turret @@ -624,6 +716,8 @@ Башню 砲塔 포탑 + 炮塔 + 砲塔 Gun @@ -638,6 +732,8 @@ Пушку + + Missiles @@ -651,6 +747,8 @@ Missiles ミサイル 미사일 + 导弹 + 導彈 Left Track @@ -665,6 +763,8 @@ Левую гусеницу 左の履帯 왼쪽 궤도 + 左履带 + 左履帶 Right Track @@ -679,6 +779,8 @@ Правую гусеницу 右の履帯 오른쪽 궤도 + 右履带 + 右履帶 Left Front Wheel @@ -693,6 +795,8 @@ Левое переднее колесо 左の前輪 왼쪽 앞바퀴 + 左前轮 + 左前輪 Right Front Wheel @@ -707,6 +811,8 @@ Правое переднее колесо 右の前輪 오른쪽 앞바퀴 + 右前轮 + 右前輪 Second Left Front Wheel @@ -721,6 +827,8 @@ Второе переднее левое колесо 左の 2 つめの前輪 왼쪽 두번째 바퀴 + 第二左前轮 + 第二左前輪 Second Right Front Wheel @@ -735,6 +843,8 @@ Второе правое переднее колесо 右の 2 つめの前輪 오른쪽 두번째 바퀴 + 第二右前轮 + 第二右前輪 Left Middle Wheel @@ -749,6 +859,8 @@ Левое среднее колесо 左の中央の前輪 왼쪽 가운데 바퀴 + 左中轮 + 左中輪 Right Middle Wheel @@ -763,6 +875,8 @@ Правое среднее колесо 右の中央の前輪 오른족 가운데 바퀴 + 右中轮 + 右中輪 Left Rear Wheel @@ -777,6 +891,8 @@ Левое заднее колесо 左の後輪 왼쪽 뒤쪽 바퀴 + 左后轮 + 左後輪 Right Rear Wheel @@ -791,6 +907,8 @@ Правое заднее колесо 右の後 오른쪽 뒤쪽 바퀴 + 右后轮 + 右後輪 Avionics @@ -805,6 +923,8 @@ Авионику アビオニクス 항공 전자 + 航电系统 + 航電系統 Main Rotor @@ -819,6 +939,8 @@ Несущий винт 主翼 주 로터 + 主旋翼 + 主旋翼 Tail Rotor @@ -833,6 +955,8 @@ Рулевой винт 尾翼ローター 꼬리 로터 + 尾桨 + 尾槳 Winch @@ -846,6 +970,8 @@ Treuil ウィンチ 윈치 + 绞盘 + 絞盤 Glass (right) @@ -860,6 +986,8 @@ Стекло (справа) ガラス (右) 유리 (오른쪽) + 玻璃 (右) + 玻璃 (右) Glass (left) @@ -874,6 +1002,8 @@ Стекло (слава) ガラス (左) 유리 (왼쪽) + 玻璃 (左) + 玻璃 (左) Glass @@ -888,6 +1018,8 @@ Стекло ガラス 유리 + 玻璃 + 玻璃 ERA @@ -901,6 +1033,8 @@ ДЗ 爆発反応装甲 폭발반응장갑 + 爆炸式反应装甲 + 爆炸式反應裝甲 Repair Settings @@ -914,6 +1048,8 @@ Réglages de réparation 修理設定 수리 설정 + 修复设定 + 修復設定 Provides a repair system for all types of vehicles. @@ -927,6 +1063,8 @@ Fournit un système de réparation pour tous les types de véhicules. 車両の全種類に修理システムを適用しますか? 모든 차량에 대해 수리 시스템을 제공합니다. + 提供修复系统给所有载具. + 提供修復系統給所有載具. Anyone @@ -940,6 +1078,8 @@ Tout le monde だれでも 모두 + 任何人 + 任何人 Engineer only @@ -953,19 +1093,15 @@ Ingénieurs seulement 工兵のみ 오직 정비공만 + 只有工兵 + 只有工兵 - - Repair Specialist only - Nur Reparaturspezialist - Tylko inżynierowie - Somente especialista em reparos - Только ремонтные специалисты - Pouze specialista na opravování - Solo especialista en reparación - Solo Specialista Riparazioni - Spécialistes de réparation seulement - 専門兵のみ - 오직 정비 특기만 + + Advanced Engineer only + Solo Geniere avanzato + 上級工兵のみ + 只有维修专精兵 + 只有維修專精兵 Allow Wheel @@ -979,6 +1115,8 @@ Autoriser les roues タイヤを許可 바퀴 허가 + 允许轮胎 + 允許輪胎 Who can remove and replace wheels? @@ -992,6 +1130,8 @@ Qui peut enlever et remplacer les roues ? 誰がタイヤの除去と交換を出来るようにしますか? 누가 바퀴를 제거 및 교체할 수 있습니까? + 谁可维修轮胎? + 誰可維修輪胎? Allow Repair @@ -1005,6 +1145,8 @@ Autoriser les réparations 修理を許可 수리 허가 + 允许维修 + 允許維修 Who can perform repair actions? @@ -1016,8 +1158,10 @@ ¿Quién puede realizar reparaciones? Chi può eseguire riparazioni? Qui peut réparer ? - 誰が修理をおこなえるようにしますか? + 誰が修理を出来るようににしますか? 누가 수리를 할 수 있습니까? + 谁可以进行维修操作? + 誰可以進行維修操作? Repair Threshold @@ -1031,6 +1175,8 @@ Seuil de réparation 修理のしきい値 정비 한계치 + 维修门槛 + 維修門檻 What is the maximum damage that can be repaired with a toolkit? @@ -1044,6 +1190,8 @@ Quel est le maximum de dommages réparable par une trousse à outils ? ツールキットで修理できる、最大の損傷許容範囲を設定しますか? 어느정도의 피해까지 툴킷으로 수리가 가능합니까? + 工具包可以修复的最大损坏值? + 工具包可以修復的最大損壞值? Repair Threshold (Engineer) @@ -1057,6 +1205,8 @@ Seuil de réparatoin (ingénieur) 修理のしきい値 (工兵) 정비 한계치 (정비공) + 维修门槛 (工兵) + 維修門檻 (工兵) What is the maximum damage that can be repaired by an engineer? @@ -1070,6 +1220,8 @@ Quel est le maximum de dommages qui peuvent être réparés par un ingénieur ? 工兵が修理できる、最大の損傷許容範囲を設定しますか? 정비공은 어느정도의 피해까지 수리할 수 있습니까? + 工兵可以修复的最大损坏值? + 工兵可以修復的最大損壞值? Remove toolkit on use @@ -1083,6 +1235,8 @@ Enlever la trousse à outils après usage ツールキットを使うと削除 툴킷 사용후 제거 + 使用后删除工具包 + 使用後刪除工具包 Should the toolkit be removed on usage? @@ -1096,6 +1250,8 @@ La trousse à outils devrait-elle être enlevée après usage ? ツールキットを使うと削除しますか? 툴킷을 사용하면 제거를 합니까? + 要在使用后删除工具包吗? + 要在使用後刪除工具包嗎? Anywhere @@ -1109,6 +1265,8 @@ N'importe où だれでも 어디서나 + 任何地点 + 任何地點 Repair Vehicle only @@ -1122,6 +1280,8 @@ Véhicule de réparation seulement 修理車両のみ 오직 수리 차량만 + 维修载具旁 + 維修載具旁 Repair Facility only @@ -1135,6 +1295,8 @@ Installation de réparation seulement 修理施設のみ 오직 수리 시설만 + 维修设施旁 + 維修設施旁 Repair Facility or Vehicle @@ -1148,6 +1310,8 @@ Installations ou véhicule de réparation 修理施設または車両のみ 수리 시설혹은 차량 + 维修设施或载具旁 + 維修設施或載具旁 Assign Engineer @@ -1161,6 +1325,8 @@ Assigner le rôle d'ingénieur 工兵にする 정비공 등록 + 指派工兵 + 指派工兵 List @@ -1174,6 +1340,8 @@ Liste 一覧 목록 + 名单 + 名單 List of unit names that will be classified as engineer, separated by commas. @@ -1187,6 +1355,8 @@ Liste des noms d'unités qui seront considérées ingénieurs. Séparé par des virgules 一覧に記載されたユニット名を、工兵として指定します。コンマで複数を指定できます。 목록내 보직이름은 정비공으로 분류됩니다. 쉼표로 구분합니다. + 工兵名单, 把单位名称输入在这边即可定义其为工兵. 每个单位使用逗号以做区隔. + 工兵名單, 把單位名稱輸入在這邊即可定義其為工兵. 每個單位使用逗號以做區隔. Is Engineer @@ -1200,6 +1370,8 @@ Est ingénieur 工兵とする 은 정비공이다 + 是工兵 + 是工兵 Select the engineering skill level of the unit @@ -1213,6 +1385,8 @@ Sélectionner le niveau d'habilité en réparation de l'unité ユニットへの工兵スキルを選択 선택한 인원의 정비 실력을 고르십시요 + 选择工兵的技术水平 + 選擇工兵的技術水平 None @@ -1226,6 +1400,8 @@ Aucun 工兵 없음 + + Engineer @@ -1239,19 +1415,16 @@ Ingénieur 専門兵 정비공 + 工兵 + 工兵 - - Specialist - Reparaturspezialist - Inżynier - Especialista - Специалист - Specialista - Especialista - Specialista Riparazioni - Spécialiste - 工兵として単体、複数ユニットを割り当てます。 - 정비 특기 + + + Adv. Engineer + Adv. Geniere + 上級工兵 + 专精 + 專精 Assign one or multiple units as an engineer @@ -1265,6 +1438,8 @@ Assigner un ou plusieurs unités comme ingénieur 修理車両として指定 하나 혹은 여러 인원을 정비공으로 등록합니다 + 指定一个或多个单位为工兵 + 指定一個或多個單位為工兵 Assign Repair Vehicle @@ -1278,6 +1453,8 @@ Assigner en tant que véhicule de réparation 修理車両として指定 정비 차량 등록 + 指定维修载具 + 指定維修載具 List @@ -1291,6 +1468,8 @@ Liste 一覧 목록 + 名单 + 名單 List of vehicles that will be classified as repair vehicle, separated by commas. @@ -1304,6 +1483,8 @@ Liste de véhicules qui seront considérés comme véhicules de réparation. Séparé par des virgules. 一覧に記載されたユニット名を、修理車両として指定します。コンマで複数を指定できます。 목록내 차량은 정비 차량으로 분류됩니다. 쉼표로 구분합니다. + 载具名单, 把载具名称输入在这边即可定义其为维修载具. 每个载具使用逗号以做区隔. + 載具名單, 把載具名稱輸入在這邊即可定義其為維修載具. 每個載具使用逗號以做區隔. Is Repair Vehicle @@ -1317,6 +1498,8 @@ Est un véhicule de réparation 修理車両とする 은 정비 차량이다 + 是维修载具 + 是維修載具 Is the vehicle classified as a repair vehicle? @@ -1330,6 +1513,8 @@ Le véhicule est-il considéré comme un véhicule de réparation ? 車両を修理車両と指定しますか? 이 차량을 정비 차량으로 분류합니까? + 此载具是维修载具吗? + 此載具是維修載具嗎? Assign one or multiple vehicles as a repair vehicle @@ -1343,6 +1528,8 @@ Assigner un ou plusieurs véhicules en tant que véhicule de réparation 単体、または複数の車両を修理車両とします 하나 혹은 여러 차량을 정비 차량으로 등록합니다 + 指定一个或多个载具作为维修载具 + 指定一個或多個載具作為維修載具 Assign Repair Facility @@ -1356,6 +1543,8 @@ Assigner en tant qu'installation de réparation 修理施設とする 정비 시설 등록 + 指定维修设施 + 指定維修設施 List @@ -1369,6 +1558,8 @@ Liste 一覧 목록 + 名单 + 名單 List of objects that will be classified as repair Facility, separated by commas. @@ -1382,6 +1573,8 @@ Liste des objets considérés comme installations de réparation. Séparé par des virgules 一覧に記載されたユニット名を、修理施設として指定します。コンマで複数を指定できます。 목록내 시설은 정비 시설으로 분류됩니다. 쉼표로 구분합니다. + 设施名单, 把设施名称输入在这边即可定义其为维修设施. 每个设施使用逗号以做区隔. + 設施名單, 把設施名稱輸入在這邊即可定義其為維修設施. 每個設施使用逗號以做區隔. Is Repair Facility @@ -1395,6 +1588,8 @@ Est une installation de réparation 修理施設とする 은 정비 시설이다 + 是维修设施 + 是維修設施 Is the object classified as a repair Facility? @@ -1408,6 +1603,8 @@ L'objet est-il considéré comme une installation de réparation ? オブジェクトを修理施設として指定しますか? 이 시설을 정비 시설로 분류합니까? + 此设施是维修设施吗? + 此設施是維修設施嗎? Assign one or multiple objects as a repair Facility @@ -1421,6 +1618,8 @@ Assigner un ou plusieurs objets en tant que véhicule de réparation ひとつ、または複数オブジェクトに予備部品を追加 하나 혹은 여러 시설을 정비 시설로 등록합니다 + 指定一个或多个对象作为维修设施 + 指定一個或多個對象作為維修設施 Add Spare Parts @@ -1434,6 +1633,8 @@ Ajouter des pièces de rechange 予備部品を追加 예비 부품 더하기 + 添加备件 + 添加備件 Add spare parts to one or multiple objects @@ -1447,6 +1648,8 @@ Ajouter des pièces de rechange à un ou plusieurs objets 一覧に追加されたオブジェクトへ予備部品を与えます。コンマで複数を指定できます。 하나 혹은 여러 물체가 예비 부품을 더합니다 + 添加备件到一个或多个对象上 + 添加備件到一個或多個對象上 List @@ -1460,6 +1663,8 @@ Liste 一覧 목록 + 名单 + 名單 List of objects that will get spare parts added, separated by commas. @@ -1473,6 +1678,8 @@ Liste des objets qui recevront des pièces de réparation en plus. Séparé par des virgules 一覧に追加されたオブジェクトへ予備部品を与えます。コンマで複数を指定できます。 목록내 물체는 예비 부품을 받습니다, 쉼표로 구분합니다. + 添加备件到名单的载具上. 每个载具使用逗号以做区隔. + 添加備件到名單的載具上. 每個載具使用逗號以做區隔. Part @@ -1486,6 +1693,8 @@ Pièce 部品 부품 + 零件 + 零件 Spare part. @@ -1499,6 +1708,8 @@ Pièce de rechange 予備部品 예비 부품 + 备用零件 + 備用零件 Amount @@ -1512,6 +1723,8 @@ Quantité 수량 + 数量 + 數量 Number of selected spare parts. @@ -1525,6 +1738,8 @@ Nombre de pièces de rechange séléctionnées 選択された予備部品の数を選択します。 선택한 부품의 수 + 选择的备件数量 + 選擇的備件數量 Wheel repair requirements @@ -1538,6 +1753,8 @@ Exigences de réparation de roue タイヤの修理を必要 바퀴 교체 요구사항 + 维修轮胎限制 + 維修輪胎限制 Items required to remove/replace wheels @@ -1551,6 +1768,8 @@ Items exigés pour enlever/remplacer les roues タイヤの除去と交換にアイテムを必要としますか? 바퀴를 제거/교체하는데 필요한 물건 + 需要特定物品来移除/更换车轮 + 需要特定物品來移除/更換車輪 Engine must be off to repair @@ -1563,6 +1782,9 @@ 修理のためにエンジンを停止させる必要があります。 Silnik musi być wyłączony w celu naprawy 수리를 위해서는 엔진을 꺼야만 합니다 + Il motore deve essere spento per poter riparare + 引擎必须先关闭才能开始进行维修 + 引擎必須先關閉才能開始進行維修 diff --git a/addons/respawn/functions/fnc_handleInitPostServer.sqf b/addons/respawn/functions/fnc_handleInitPostServer.sqf index e8f4f1d110..107fbe444b 100644 --- a/addons/respawn/functions/fnc_handleInitPostServer.sqf +++ b/addons/respawn/functions/fnc_handleInitPostServer.sqf @@ -39,7 +39,9 @@ _leaderVarName = _groupUnit getVariable [QGVAR(leaderVarName), ""]; if (_leaderVarName != "") exitWith { // assign JIP unit as rallypoint leader if (str _unit == _leaderVarName) then { - _unit setVariable ["ACE_canMoveRallypoint", true, true]; + if (isNil {_unit getVariable "ACE_canMoveRallypoint"}) then { + _unit setVariable ["ACE_canMoveRallypoint", true, true]; + }; }; }; @@ -61,4 +63,6 @@ if (_leaderVarName == "") then { // prevent group from getting multiple leaders; use this to assign rallypoint moving ability on JIP _groupUnit setVariable [QGVAR(leaderVarName), _leaderVarName]; -_unit setVariable ["ACE_canMoveRallypoint", true, true]; +if (isNil {_unit getVariable "ACE_canMoveRallypoint"}) then { + _unit setVariable ["ACE_canMoveRallypoint", true, true]; +}; diff --git a/addons/respawn/functions/fnc_restoreGear.sqf b/addons/respawn/functions/fnc_restoreGear.sqf index a035bdd52d..1d234f16be 100644 --- a/addons/respawn/functions/fnc_restoreGear.sqf +++ b/addons/respawn/functions/fnc_restoreGear.sqf @@ -44,7 +44,7 @@ if (!isNil "_activeWeaponAndMuzzle") then { private _index = 0; while { - _index < 100 && {currentWeaponMode _unit != _activeWeaponMode} + _index < 299 && {currentWeaponMode _unit != _activeWeaponMode} } do { _unit action ["SwitchWeapon", _unit, _unit, _index]; _index = _index + 1; diff --git a/addons/respawn/stringtable.xml b/addons/respawn/stringtable.xml index 7a24936f65..d298ef804a 100644 --- a/addons/respawn/stringtable.xml +++ b/addons/respawn/stringtable.xml @@ -14,6 +14,8 @@ Será posicionado em 5 segundos... 設置まであと 5 秒・・・ 5초 후 재배치... + 5秒后完成布署... + 5秒後完成佈署... Rallypoint deployed @@ -28,6 +30,8 @@ Rallypoints posicionado ラリーポイントを設置した 집결지 배치됨 + 集合点布署完成 + 集合點佈署完成 Teleport to Base @@ -42,6 +46,8 @@ Teleporta alla base ベースへ移動 기지로 순간이동 + 传送至基地 + 傳送至基地 Teleport to Rallypoint @@ -56,6 +62,8 @@ Teleporta al rallypoint ラリーポイントへ移動 집결지로 순간이동 + 传送至集合点 + 傳送至集合點 Teleported to Base @@ -70,6 +78,8 @@ Teletransportado para a Base ベースへ移動した 기지로 순간이동함 + 已传送至基地 + 已傳送至基地 Teleported to Rallypoint @@ -84,6 +94,8 @@ Teletransportado para o Rallypoints ラリーポイントへ移動した 집결지로 순간이동함 + 已传送至集合点 + 已傳送至集合點 Rallypoint West (Base) @@ -98,6 +110,8 @@ Ponto de encontro Oeste (Base) ラリーポイント ウエスト (ベース) 서쪽 집결지 (기지) + 蓝方集合点 (基地) + 藍方集合點 (基地) Rallypoint East (Base) @@ -112,6 +126,8 @@ Ponto de encontro Lest (Base) ラリーポイント イースト (ベース) 동쪽 집결지 (기지) + 红方集合点 (基地) + 紅方集合點 (基地) Rallypoint Independent (Base) @@ -126,6 +142,8 @@ Ponto de encontro Independente (Base) ラリーポイント インデペンデント (ベース) 독립 집결지 (기지) + 独立方集合点 (基地) + 獨立方集合點 (基地) Rallypoint West @@ -140,6 +158,8 @@ Ponto de encontro Oeste ラリーポイント ウエスト 서쪽 집결지 + 蓝方集合点 + 藍方集合點 Rallypoint East @@ -154,6 +174,8 @@ Ponto de encontro Leste ラリーポイント イースト 동쪽 집결지 + 红方集合点 + 紅方集合點 Rallypoint Independent @@ -168,6 +190,8 @@ Ponto de encontro Independente ラリーポイント インデペンデント 독립 집결지 + 独立方集合点 + 獨立方集合點 Respawn System @@ -182,6 +206,8 @@ Sistema Respawn リスポン システム 재배치 시스템 + 重生系统 + 重生系統 Save Gear? @@ -196,6 +222,8 @@ Salva Equipaggiamento? 装備を保存? 장비를 저장합니까? + 储存装备? + 儲存裝備? Respawn with the gear a soldier had just before his death? @@ -210,6 +238,8 @@ Respawna con l'equipaggiamento che il soldato aveva appena prima di morire? ユニットが死ぬ前に持っていた装備でリスポンしますか? 죽기 전에 가지고 있던 장비로 재배치합니까? + 是否在重生时载入死亡前的装备? + 是否在重生時載入死亡前的裝備? Remove bodies? @@ -224,6 +254,8 @@ Rimuovi corpi? 死体を削除? 시체를 제거합니까? + 删除尸体? + 刪除屍體? Remove player bodies after disconnect? @@ -238,6 +270,8 @@ Rimuovi i corpi dei giocatori quando si disconnettono? 切断後はプレイヤーの死体を削除しますか? 접속이 끊긴 플레이어의 시체를 제거합니까? + 要删除已离线的玩家尸体吗? + 要刪除已離線的玩家屍體嗎? This module enables you to configure ACE functionality specific to respawns. @@ -251,6 +285,8 @@ Este módulo permite configurar parámetros relacionados con la reaparición あなたが設定した ACE 機能をリスポンへ設定できます。 이 모듈은 ACE 재배치의 자세한 설정을 변결할 수 있게 해줍니다. + 该模块使您可以设定ACE的重生功能. + 該模塊使您可以設定ACE的重生功能. Friendly Fire Messages @@ -265,6 +301,8 @@ Messaggi Fuoco Amico 友軍誤射の表示 아군사격 메세지 + 友军误击讯息 + 友軍誤擊訊息 Using this module in your mission will make it so any friendly fire kills will be displayed in form of a message in chat. @@ -278,6 +316,8 @@ El usar este módulo, todas las muertes por fuego amigo serán indicadas en el chat. もし友軍誤射による死者が出た場合は、チャットにてその旨を表示します。 이 모듈은 미션 중 아군사격으로 인한 사망자 발생시 채팅창에 메세지를 표시해줍니다. + 摆放此模块后, 当有发生友军误击致死的事件, 会显示提示讯息在聊天视窗中. + 擺放此模塊後, 當有發生友軍誤擊致死的事件, 會顯示提示訊息在聊天視窗中. Rallypoint System @@ -292,6 +332,8 @@ Sistema Punto di Raccolta ラリーポイント システム 집결지 시스템 + 集合点系统 + 集合點系統 This module allows you to use rally points in missions, to which you can quickly teleport from base flag. Requires placing special objects on map - base and flag. Both available in category Empty -> ACE Respawn. @@ -305,6 +347,8 @@ Ce module vous permet d'utiliser les "rally points" auxquels vous pouvez vous téléporter rapidement depuis un drapeau à la base. Il nécessite le placement d'objets spéciaux sur la carte - base et drapeau, disponibles dans la catégorie Vide -> ACE Respawn. ミッションでベースから素早く移動できるラリーポイントを使えるようにします。ゲーム内に専用オブジェクトとなるベースとフラッグを設置している必要があります。両オブジェクトは Empty 下の ACE リスポンから設置できます。 이 모듈은 미션 중에 기지 깃발에서 집결지로 빠르게 텔레포트 시켜주는 역활을 합니다. 지도 상에 기지 및 깃발이 필요합니다. 두 가지 모두 Empty->ACE Respawn 카테고리에서 찾을 수 있습니다. + 摆放此模块后, 你将能在任务中布署集合点, 使你可以快速往返基地与前线. 要使用本功能, 请记得放上空物件->ACE 重生里面的基地与旗帜. + 擺放此模塊後, 你將能在任務中佈署集合點, 使你可以快速往返基地與前線. 要使用本功能, 請記得放上空物件->ACE 重生裡面的基地與旗幟. Move Rallypoint @@ -319,6 +363,8 @@ Sposta Punto di Raccolta ラリーポイントを移動 집결지 이동 + 移动集合点 + 移動集合點 ACE Respawn @@ -330,9 +376,11 @@ ACE Respawn ACE Respawn ACE Возрождение - Respawn ACE + Rigenerazione ACE ACE リスポン ACE 재배치 + ACE 重生 + ACE 重生 diff --git a/addons/safemode/functions/fnc_unlockSafety.sqf b/addons/safemode/functions/fnc_unlockSafety.sqf index b1c2fda540..da93bfa671 100644 --- a/addons/safemode/functions/fnc_unlockSafety.sqf +++ b/addons/safemode/functions/fnc_unlockSafety.sqf @@ -56,7 +56,7 @@ if (inputAction "nextWeapon" > 0) then { // switch to last mode _index = 0; while { - _index < 100 && {currentMuzzle _unit != _weapon || {currentWeaponMode _unit != _mode}} + _index < 299 && {currentMuzzle _unit != _weapon || {currentWeaponMode _unit != _mode}} } do { _unit action ["SwitchWeapon", _unit, _unit, _index]; _index = _index + 1; diff --git a/addons/safemode/stringtable.xml b/addons/safemode/stringtable.xml index 29b84cb095..fa9b951908 100644 --- a/addons/safemode/stringtable.xml +++ b/addons/safemode/stringtable.xml @@ -10,10 +10,12 @@ Biztonságos mód Предохранитель Sécurité - Sicura inserita + Modalità Sicura Modo de segurança 安全装置 안전 모드 + 保险模式 + 保險模式 Take off Safety @@ -28,6 +30,8 @@ Tirar segurança 安全装置を外す 안전장치 해제 + 开保险 + 開保險 Put on Safety @@ -42,6 +46,8 @@ Colocar Segurança 安全装置を掛けた 안전장치 적용 + 关保险 + 關保險 Took off Safety @@ -56,6 +62,8 @@ Tirou Segurança 安全装置を外した 안전장치 해제됨 + 已开保险 + 已開保險 diff --git a/addons/sandbag/functions/fnc_canDeploy.sqf b/addons/sandbag/functions/fnc_canDeploy.sqf index b9bd025dff..426dde56f2 100644 --- a/addons/sandbag/functions/fnc_canDeploy.sqf +++ b/addons/sandbag/functions/fnc_canDeploy.sqf @@ -1,9 +1,9 @@ /* * Author: Ruthberg, commy2 - * Checks if the player can deploy a sandbag + * Checks if the player can deploy a sandbag. * * Arguments: - * None + * 0: Unit * * Return Value: * Can deploy @@ -15,15 +15,8 @@ */ #include "script_component.hpp" -#define SURFACE_BLACKLIST ["water", "concrete", "tarmac", "wood", "metal", "roof_tin", "roof_tiles", "wood_int", "concrete_int", "tiles_int", "metal_int", "stony", "rock", "int_concrete", "int_tiles", "int_wood", "tiling", "wavymetal", "int_metal"] - params ["_unit"]; if !("ACE_Sandbag_empty" in items _unit) exitWith {false}; -private ["_surfaceClass", "_surfaceType"]; - -_surfaceClass = (surfaceType getPosASL _unit) select [1]; -_surfaceType = getText (configFile >> "CfgSurfaces" >> _surfaceClass >> "soundEnviron"); - -!(_surfaceType in SURFACE_BLACKLIST) +_unit call EFUNC(common,canDig) diff --git a/addons/sandbag/functions/fnc_deployConfirm.sqf b/addons/sandbag/functions/fnc_deployConfirm.sqf index 47b74533a1..68328cca67 100644 --- a/addons/sandbag/functions/fnc_deployConfirm.sqf +++ b/addons/sandbag/functions/fnc_deployConfirm.sqf @@ -29,14 +29,12 @@ _unit removeItem "ACE_Sandbag_empty"; params ["_unit"]; - private ["_position", "_direction", "_sandBag"]; - - _position = getPosASL GVAR(sandBag); - _direction = getDir GVAR(sandBag); + private _position = getPosASL GVAR(sandBag); + private _direction = getDir GVAR(sandBag); deleteVehicle GVAR(sandBag); - _sandBag = createVehicle ["ACE_SandbagObject", [0, 0, 0], [], 0, "NONE"]; + private _sandBag = createVehicle ["ACE_SandbagObject", [0, 0, 0], [], 0, "NONE"]; _sandBag setPosASL _position; _sandBag setDir _direction; diff --git a/addons/sandbag/functions/fnc_handleInteractMenuOpened.sqf b/addons/sandbag/functions/fnc_handleInteractMenuOpened.sqf index f4ea5891c7..4aef8f7ec8 100644 --- a/addons/sandbag/functions/fnc_handleInteractMenuOpened.sqf +++ b/addons/sandbag/functions/fnc_handleInteractMenuOpened.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_sandbag_fnc_handleInteractMenuOpened + * * Public: No */ #include "script_component.hpp" diff --git a/addons/sandbag/functions/fnc_handleKilled.sqf b/addons/sandbag/functions/fnc_handleKilled.sqf index 63babd3f52..b991af1e4b 100644 --- a/addons/sandbag/functions/fnc_handleKilled.sqf +++ b/addons/sandbag/functions/fnc_handleKilled.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_sandbag_fnc_handleKilled + * * Public: No */ #include "script_component.hpp" diff --git a/addons/sandbag/functions/fnc_handlePlayerChanged.sqf b/addons/sandbag/functions/fnc_handlePlayerChanged.sqf index f27a295903..2828979bc1 100644 --- a/addons/sandbag/functions/fnc_handlePlayerChanged.sqf +++ b/addons/sandbag/functions/fnc_handlePlayerChanged.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, kevin] call ace_sandbag_fnc_handlePlayerChanged + * * Public: No */ #include "script_component.hpp" diff --git a/addons/sandbag/functions/fnc_handlePlayerInventoryChanged.sqf b/addons/sandbag/functions/fnc_handlePlayerInventoryChanged.sqf index 9f5920edd1..50d2fdede0 100644 --- a/addons/sandbag/functions/fnc_handlePlayerInventoryChanged.sqf +++ b/addons/sandbag/functions/fnc_handlePlayerInventoryChanged.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, "weapon"] call ace_sandbag_fnc_handlePlayerInventoryChanged + * * Public: No */ #include "script_component.hpp" diff --git a/addons/sandbag/functions/fnc_handleUnconscious.sqf b/addons/sandbag/functions/fnc_handleUnconscious.sqf index 7e0e257158..709e633377 100644 --- a/addons/sandbag/functions/fnc_handleUnconscious.sqf +++ b/addons/sandbag/functions/fnc_handleUnconscious.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_sandbag_fnc_handleUnconscious + * * Public: No */ #include "script_component.hpp" diff --git a/addons/sandbag/stringtable.xml b/addons/sandbag/stringtable.xml index 9a2b36e417..555dcab416 100644 --- a/addons/sandbag/stringtable.xml +++ b/addons/sandbag/stringtable.xml @@ -14,6 +14,8 @@ Saco de Areia 土のう 모래주머니 + 沙包 + 沙包 Sandbag (empty) @@ -28,6 +30,8 @@ Saco de Areia (vazio) 土のう (空) 모래주머니(비어있음) + 沙包 (空) + 沙包 (空) Cannot build here @@ -42,6 +46,8 @@ Não pode contruir aqui ここでは作れない 여기에 지을 수 없습니다 + 无法放置在此 + 無法放置在此 Pick up Sandbag @@ -56,6 +62,8 @@ Pegar saco de areia 土のうを拾う 모래주머니 줍기 + 捡起沙包 + 撿起沙包 Carry Sandbag @@ -70,6 +78,8 @@ Carregar saco de areia 土のうを運ぶ 모래주머니 옮기기 + 搬运沙包 + 搬運沙包 End Carrying @@ -84,6 +94,8 @@ Parar de carregar 下ろす 그만 옮기기 + 停止搬运 + 停止搬運 Drop Sandbag @@ -98,6 +110,8 @@ Derrubar saco de areia 土のうを落とす 여기에 놓기 + 放下沙包 + 放下沙包 Confirm Deployment @@ -112,6 +126,8 @@ Confirmar implantação ここで作る 설치 확인 + 确认布署 + 確認佈署 Cancel Deployment @@ -126,6 +142,8 @@ Cancelar implantação 作るのをやめる 설치 취소 + 取消布署 + 取消佈署 Deploy Sandbag @@ -140,6 +158,8 @@ Implantar saco de areia 土のうを設置 모래주머니 설치 + 布署沙包 + 佈署沙包 Sandbag Box @@ -154,6 +174,8 @@ Caixa de saco de areia 土のう入れ 모래주머니 상자 + 沙包箱 + 沙包箱 Here is no sand @@ -168,6 +190,8 @@ Aqui não tem areia ここに土は無い 흙이 없습니다 + 这里没有沙 + 這裡沒有沙 Rotate @@ -182,6 +206,8 @@ Bращать 回転 돌리기 + 旋转 + 旋轉 diff --git a/addons/scopes/functions/fnc_calculateZeroAngleCorrection.sqf b/addons/scopes/functions/fnc_calculateZeroAngleCorrection.sqf index bcf1779f84..5197a94e70 100644 --- a/addons/scopes/functions/fnc_calculateZeroAngleCorrection.sqf +++ b/addons/scopes/functions/fnc_calculateZeroAngleCorrection.sqf @@ -11,7 +11,10 @@ * 5: Advanced Ballistics enabled? * * Return Value: - * zeroAngleCorrection + * zeroAngleCorrection + * + * Example: + * [5, 6, gun, ammo, magazine, true] call ace_scopes_fnc_calculateZeroAngleCorrection * * Public: No */ diff --git a/addons/scopes/functions/fnc_firedEH.sqf b/addons/scopes/functions/fnc_firedEH.sqf index ebadb2f715..f83371ec13 100644 --- a/addons/scopes/functions/fnc_firedEH.sqf +++ b/addons/scopes/functions/fnc_firedEH.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * call ace_scopes_fnc_firedEH + * * Public: No */ #include "script_component.hpp" diff --git a/addons/scopes/functions/fnc_initModuleSettings.sqf b/addons/scopes/functions/fnc_initModuleSettings.sqf index a04433f11e..92742afd14 100644 --- a/addons/scopes/functions/fnc_initModuleSettings.sqf +++ b/addons/scopes/functions/fnc_initModuleSettings.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_scopes_fnc_initModuleSettings + * * Public: No */ #include "script_component.hpp" @@ -17,7 +20,7 @@ params ["_logic","_units", "_activated"]; if !(_activated) exitWith {}; - + [_logic, QGVAR(enabled), "enabled"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(forceUseOfAdjustmentTurrets), "forceUseOfAdjustmentTurrets"] call EFUNC(common,readSettingFromModule); [_logic, QGVAR(correctZeroing), "correctZeroing"] call EFUNC(common,readSettingFromModule); diff --git a/addons/scopes/functions/fnc_inventoryCheck.sqf b/addons/scopes/functions/fnc_inventoryCheck.sqf index 2af9c56ec0..817d301221 100644 --- a/addons/scopes/functions/fnc_inventoryCheck.sqf +++ b/addons/scopes/functions/fnc_inventoryCheck.sqf @@ -74,6 +74,7 @@ private _newGuns = [primaryWeapon _player, secondaryWeapon _player, handgunWeapo if ((_newOptics select _x) == "") then { // Check if the weapon comes with an integrated optic + private _weaponConfig = configFile >> "CfgWeapons" >> (_newGuns select _x); private _verticalIncrement = 0; if (isNumber (_weaponConfig >> "ACE_ScopeAdjust_VerticalIncrement")) then { _verticalIncrement = getNumber (_weaponConfig >> "ACE_ScopeAdjust_VerticalIncrement"); @@ -90,6 +91,7 @@ private _newGuns = [primaryWeapon _player, secondaryWeapon _player, handgunWeapo if (isArray (_weaponConfig >> "ACE_ScopeAdjust_Horizontal")) then { _maxHorizontal = getArray (_weaponConfig >> "ACE_ScopeAdjust_Horizontal"); }; + TRACE_5("",_newGuns select _x,_verticalIncrement,_horizontalIncrement,_maxVertical,_maxHorizontal); (GVAR(scopeAdjust) select _x) set [0, _maxVertical]; (GVAR(scopeAdjust) select _x) set [1, _verticalIncrement]; (GVAR(scopeAdjust) select _x) set [2, _maxHorizontal]; diff --git a/addons/scopes/stringtable.xml b/addons/scopes/stringtable.xml index 4a4a9094dc..16898757fd 100644 --- a/addons/scopes/stringtable.xml +++ b/addons/scopes/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -6,114 +6,190 @@ スコープ 조준경 Celowniki optyczne + Scopes + Mirini + 瞄准镜 + 瞄準鏡 Enable ACE Scope adjustment ACE スコープ調節を有効化 ACE 조준경 영점조작 활성화 Włącz ustawienia celowników optycznych ACE + Active ACE Scope adjustment + Abilita Regolazione mirino ACE + 开启ACE瞄准镜归零调节 + 開啟ACE瞄準鏡歸零調節 Enable adjustmet turrets on high powered scopes 高倍率スコープでACE スコープ調節を有効化 고성능 조준경 조절 나사 활성화 Włącz pokrętła regulacyjne + Permet de régler la hausse et la dérive sur les optiques de visée à fort grossissement + Abilita la regolazione delle torrette nei mirini a lunga gittata + 开启高倍率瞄准镜归零调节 + 開啟高倍率瞄準鏡歸零調節 Force adjustment turrets ACE スコープ調節を有効化 조절 나사 강제 Wymuś użycie pokręteł regulacyjnych + Impose le réglage de la hausse/dérive + Forza la regolazione delle torrette + 强制使用归零调节 + 強制使用歸零調節 Force usage of adjustmet turrets on high powered scopes 高倍率スコープで調整の使用を強制させます 고성능 조준경의 조절 나사 사용을 강제합니다 Wymuś użycie pokręteł regulacyjnych dla celowników o dużym powiększeniu + Impose le réglage de la hausse/dérive sur les optiques de visée à fort grossissement + Forza l'uso della regolazione nei mirini a lunga gittata + 强制为高倍率瞄准镜开启归零调节 + 強制為高倍率瞄準鏡開啟歸零調節 Correct zeroing ゼロイン調節 영점 고치기 Poprawka zerowania + Corrige le zérotage + Correggi azzeramento + 修正归零 + 修正歸零 Corrects the zeroing of all small arms sights 全ての小口径用照準器のゼロインを調節します 모든 소화기의 영점을 고칩니다 Poprawia zerowanie wszystkich celowników broni ręcznej + Corrige le zérotage des optiques de visée des petites armes + Corregge l'azzeramento di tutti i mirini di bassa portata + 为所有小口径武器修正归零 + 為所有小口徑武器修正歸零 Overwrite zero distance ゼロイン距離を上書き 영점거리 덮어쓰기 Nadpisuje ustawienie dla zerowego dystansu + Remplace la distance de zérotage + Sovrascrivi la distanza zero + 覆写归零距离 + 覆寫歸零距離 Uses the 'defaultZeroRange' setting to overwrite the zero range of high power scopes 'defaultZeroRange'設定を使う高倍率スコープのゼロイン距離を上書きします 기존 고성능 조준경의 영점거리에 '기본설정 영점거리' 를 덮어씌웁니다 Używa 'defaultZeroRange' zamiast ustawionej odległości zerowania dla celowników o duzym przybliżeniu + Utilise le paramètre 'defaultZeroRange' pour remplacer la distance de zérotage sur les optiques de visée à fort grossissement + Usa le impostazioni di "defaultZeroRange" (Portata Zero Predefinita) per sovrascrivere la portata zero dei mirini a lunga gittata + 使用'defaultZeroRange'来为高倍率瞄准镜覆写预设归零距离 + 使用'defaultZeroRange'來為高倍率瞄準鏡覆寫預設歸零距離 Default zero distance 標準のゼロイン距離 기본설정 영점거리 Domyślne zerowanie + Distance de zérotage par défaut + Distanza zero predefinita + 预设归零距离 + 預設歸零距離 High power scopes will be zeroed at this distance 高倍率スコープのゼロイン距離はこの設定になります 고성능 조준경이 정해진 수만큼 영점거리를 맞추게 됩니다. Celowniki o dużym powiększeniu będą zerowane dla tej odległości + Distance de zérotage par défaut des optiques de visée à fort grossissement + I mirini a lunga gittata verranno azzerrati a questa distanza + 高倍率瞄准镜将归零在这个距离上 + 高倍率瞄準鏡將歸零在這個距離上 Reference temperature 温度の参照 온도 기준 Referencyjna temperatura + Température de référence + Temperatura di riferimento + 参考温度 + 參考溫度 Temperature at which the scope was zeroed スコープがゼロインされる温度 조준경 영점조준시 온도 Temperatura, przy której celownik został wyzerowany + Température de référence pour le zérotage des optiques + Temperatura a cui è stato azzerato il mirino + 武器参考多少温度来进行归零. + 武器參考多少溫度來進行歸零. Reference barometric pressure 気圧の参照 기압 기준 Referencyjne ciśnienie barometryczne + Pression barométrique de référence + Pressione barometrica di riferimento + 参考大气压力 + 參考大氣壓力 Barometric pressure at which the scope was zeroed 気圧の参照 조준경 영점조준시 기압 Ciśnienie barometryczne, przy którym celownik został wyzerowany + Pression barométrique de référence pour le zérotage des optiques + Pressione barometrica a cui è stato azzerato il mirino + 武器参考多少大气压力来进行归零. + 武器參考多少大氣壓力來進行歸零. Reference humidity 湿度の参照 습도 기준 Referencyjna wilgotność + Humidité de référence + Umidità di riferimento + 参考湿度 + 參考濕度 Humidity at which the scope was zeroed スコープがゼロインされる湿度 조준경 영점조준시 습도 Wilgotność powietrza, przy której celownik został wyzerowany + Taux d'humidité de référence pour le zérotage des optiques + Umidità a cui è stato azzerato il mirino + 武器参考多少湿度来进行归零. + 武器參考多少濕度來進行歸零. Deduce pressure from altitude 高度により圧が減少 고도에 맞춰 기압 설정 Ciśnienie określone na podstawie wysokości + Pression selon l'altitude + Ricava la pressione dall'altitudine + 高度影响大气压力 + 高度影響大氣壓力 Deduce the barometric pressure from the terrain altitude 標高により気圧が減少されます 주변 고도에 맞춰 기압을 설정합니다 Określ ciśnienie barometryczne na podstawie wysokości terenu + Détermine la pression barométrique selon l'altitude du terrain + Ricava la pressione barometrica dall'altitudine del terreno + 在不同高度上会有不同的大气压力 + 在不同高度上會有不同的大氣壓力 Minor adjustment up @@ -128,6 +204,8 @@ Korekce nahoru (mírně) 僅かに上へ調節 위로 조절 + 向上微调 + 向上微調 Minor adjustment down @@ -142,6 +220,8 @@ Korekce dolů (mírně) 僅かに下へ調節 아래로 조절 + 向下微调 + 向下微調 Minor adjustment right @@ -156,6 +236,8 @@ Korekce doprava (mírně) 僅かに右へ調節 오론쪽으로 조절 + 向右微调 + 向右微調 Minor adjustment left @@ -170,6 +252,8 @@ Korekce doleva (mírně) 僅かに左へ調節 왼쪽으로 조절 + 向左微调 + 向左微調 Major adjustment up @@ -184,6 +268,8 @@ Korekce nahoru 大きく上へ調節 크게 위로 조절 + 向上调整 + 向上調整 Major adjustment down @@ -198,6 +284,8 @@ Korekce dolů 大きく下へ調節 크게 아래로 조절 + 向下调整 + 向下調整 Major adjustment right @@ -212,6 +300,8 @@ Korekce doprava 大きく右へ調節 크게 오른쪽으로 조절 + 向右调整 + 向右調整 Major adjustment left @@ -226,6 +316,8 @@ Korekce doleva 大きく左へ調節 크게 왼쪽으로 조절 + 向左调整 + 向左調整 Set zero adjustment @@ -240,12 +332,18 @@ Vynulovat korekci ゼロインを調節 영점 초기화 + 设定归零 + 設定歸零 This module adds windage and elevation adjustment turrets on high power rifle scopes. モジュールは高倍率ライフル スコープにおいて横風と仰角の調節ができます。 이 모듈은 고성능 조준경에 조준 나사를 이용한 편차 및 고도 조절 기능을 더해줍니다. Ten moduł włącza pokrętła kalibracyjne poprawki na wiatr oraz poprawki wysokości dla celowników o dużym powiększeniu. + Ce module ajoute les tambours de correction de la hausse et de dérive sur les optiques de visée à fort grossissement. + Questo modulo aggiunge lo spostamento dell'aria e la regolazione dell'elevazione delle torrette in mirini a lunga gittata + 此模块可为高倍率瞄准镜新增归零风偏, 距离用的调整纽. + 此模塊可為高倍率瞄準鏡新增歸零風偏, 距離用的調整紐. - \ No newline at end of file + diff --git a/addons/slideshow/CfgVehicles.hpp b/addons/slideshow/CfgVehicles.hpp index af3108eb59..6c11ba866c 100644 --- a/addons/slideshow/CfgVehicles.hpp +++ b/addons/slideshow/CfgVehicles.hpp @@ -35,6 +35,12 @@ class CfgVehicles { typeName = "STRING"; defaultValue = ""; }; + class SetName { + displayName = CSTRING(SetName_DisplayName); + description = CSTRING(SetName_Description); + typeName = "STRING"; + defaultValue = ""; + }; class Duration { displayName = CSTRING(Duration_DisplayName); description = CSTRING(Duration_Description); diff --git a/addons/slideshow/functions/fnc_createSlideshow.sqf b/addons/slideshow/functions/fnc_createSlideshow.sqf index 883ce2fa7d..5eefbd39bc 100644 --- a/addons/slideshow/functions/fnc_createSlideshow.sqf +++ b/addons/slideshow/functions/fnc_createSlideshow.sqf @@ -8,24 +8,25 @@ * 2: Image Paths * 3: Action Names * 4: Slide Duration (0 disables automatic transitions) + * 5: Set Name (default: localized "Slides") * * Return Value: * None * * Example: - * [[object1, object2, object3], [controller1], ["images\image1.paa", "images\image2.paa"], ["Action1", "Action2"], 5] call ace_slideshow_fnc_createSlideshow + * [[object1, object2, object3], [controller1], ["images\image1.paa", "images\image2.paa"], ["Action1", "Action2"], 5, "My Slides"] call ace_slideshow_fnc_createSlideshow * * Public: Yes */ #include "script_component.hpp" -private ["_currentSlideshow", "_slidesAction", "_varString"]; params [ ["_objects", [], [[]] ], ["_controllers", [], [[]] ], ["_images", [], [[]] ], ["_names", [], [[]] ], - ["_duration", 0, [0]] + ["_duration", 0, [0]], + ["_setName", localize LSTRING(Interaction), [""]] ]; // Verify data @@ -41,7 +42,7 @@ if (_controllers isEqualTo []) then { _controllers = _objects; }; -TRACE_4("Information",_objects,_controllers,_images,_names); +TRACE_5("Information",_objects,_controllers,_images,_names,_setName); if (isServer) then { // Default images on whiteboards (first image) @@ -53,7 +54,7 @@ if (isServer) then { GVAR(slideshows) = GVAR(slideshows) + 1; }; -_currentSlideshow = GVAR(slideshows); // Local variable in case GVAR gets changed during execution of below code +private _currentSlideshow = GVAR(slideshows); // Local variable in case GVAR gets changed during execution of below code // If interaction menu module is not present, set default duration value if !(["ace_interact_menu"] call EFUNC(common,isModLoaded)) then { @@ -64,8 +65,22 @@ if !(["ace_interact_menu"] call EFUNC(common,isModLoaded)) then { // Add interactions if automatic transitions are disabled, else setup automatic transitions if (_duration == 0) then { { + if (_setName == "") then { + _setName = localize LSTRING(Interaction); + }; + // Add Slides sub-action and populate with images - _slidesAction = [QGVAR(Slides), localize LSTRING(Interaction), "", {}, {true}, {(_this select 2) call FUNC(addSlideActions)}, [_objects, _images, _names, _x, _currentSlideshow], [0, 0, 0], 2] call EFUNC(interact_menu,createAction); + private _slidesAction = [ + format [QGVAR(slideshow%1), _currentSlideshow], + _setName, + "", + {}, + {true}, + {(_this select 2) call FUNC(addSlideActions)}, + [_objects, _images, _names, _x, _currentSlideshow], + [0, 0, 0], + 2 + ] call EFUNC(interact_menu,createAction); [_x, 0, ["ACE_MainActions"], _slidesAction] call EFUNC(interact_menu,addActionToObject); nil } count _controllers; @@ -73,7 +88,7 @@ if (_duration == 0) then { if !(isServer) exitWith {}; // Formatted GVAR string (multiple modules support) - _varString = format [QGVAR(slideshow%1), _currentSlideshow]; + private _varString = format [QGVAR(slideshow%1), _currentSlideshow]; TRACE_1("Current Slide",_varString); // Set formatted GVAR to first slide diff --git a/addons/slideshow/functions/fnc_moduleInit.sqf b/addons/slideshow/functions/fnc_moduleInit.sqf index bf27bae56b..caef4cb2d8 100644 --- a/addons/slideshow/functions/fnc_moduleInit.sqf +++ b/addons/slideshow/functions/fnc_moduleInit.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_slideshow_fnc_moduleInit + * * Public: No */ #include "script_component.hpp" @@ -17,18 +20,18 @@ // Exit on Headless Client if (!hasInterface && !isDedicated) exitWith {}; -private ["_objects", "_controllers", "_images", "_names", "_duration"]; params [["_logic", objNull, [objNull]], "_units", "_activated"]; if !(_activated) exitWith {}; if (isNull _logic) exitWith {}; // Extract variables from logic -_objects = [_logic getVariable ["Objects", ""], true, true] call EFUNC(common,parseList); -_controllers = [_logic getVariable ["Controllers", ""], true, true] call EFUNC(common,parseList); -_images = [_logic getVariable ["Images", ""], false, false] call EFUNC(common,parseList); -_names = [_logic getVariable ["Names", ""], false, false] call EFUNC(common,parseList); -_duration = _logic getVariable ["Duration", 0]; +private _objects = [_logic getVariable ["Objects", ""], true, true] call EFUNC(common,parseList); +private _controllers = [_logic getVariable ["Controllers", ""], true, true] call EFUNC(common,parseList); +private _images = [_logic getVariable ["Images", ""], false, false] call EFUNC(common,parseList); +private _names = [_logic getVariable ["Names", ""], false, false] call EFUNC(common,parseList); +private _setName = _logic getVariable ["SetName", ""]; +private _duration = _logic getVariable ["Duration", 0]; // Objects synced to the module { @@ -37,6 +40,6 @@ _duration = _logic getVariable ["Duration", 0]; } count (synchronizedObjects _logic); // Prepare with actions -[_objects, _controllers, _images, _names, _duration] call FUNC(createSlideshow); +[_objects, _controllers, _images, _names, _duration, _setName] call FUNC(createSlideshow); INFO_1("Slideshow Module Initialized on %1 Objects", count _objects); diff --git a/addons/slideshow/stringtable.xml b/addons/slideshow/stringtable.xml index 47ed8f5a3d..f563e62e53 100644 --- a/addons/slideshow/stringtable.xml +++ b/addons/slideshow/stringtable.xml @@ -14,6 +14,8 @@ Mostra Diapositive スライドショー 슬라이드 쇼 + 幻燈片 + 幻灯片 This module allows you to set up slide-shows on different objects. One module per image list. Only objects with hiddenSelection 0 are supported. @@ -28,6 +30,8 @@ Questo modulo ti permette di creare una presentazione con diapositive su vari oggetti. Un modulo per lista immagini. Solo oggetti con hiddenSelection 0 sono supportati. さまざまなオブジェクトへスライドショーを設定することができます。1つのモジュールは各画像リストになっています。オブジェクトが hiddenSelection 0へ対応している必要があります。 이 모듈은 다른 물체에 대해 슬라이드 쇼를 놓을 수 있게 해줍니다. 한 모듈당 한 이미지목록만 가능합니다. 또한 물체가 hiddenSelection 0 를 지원해야만합니다. + 此模塊可讓圖片以幻燈片的形式顯示在物件上. 每個模塊都能設定一串幻燈片清單. 被設定的物件不能有隱藏部位(hiddenSelection). + 此模块可让图片以幻灯片的形式显示在物件上. 每个模块都能设定一串幻灯片清单. 被设定的物件不能有隐藏部位(hiddenSelection). Objects @@ -42,25 +46,29 @@ Oggetti オブジェクト 물체 + 物件 + 物件 - Object names (can also be synchronized objects) slide-show will be displayed on, separated by commas if multiple. Reference INFO for object support. - Objektnamen (können auch synchronisierte Objekte sein) auf denen die Diavorführung abgepielt wird. Werden ggf. durch Kommata getrennt. Weiteres in der INFO für unterstützte Objekte. + Object names (can also be synchronized objects) slide-show will be displayed on, separated by commas if multiple. + Objektnamen (können auch synchronisierte Objekte sein) auf denen die Diavorführung abgepielt wird. Werden ggf. durch Kommata getrennt. Nom d'objets (peuvent aussi être des objets synchronisés) sur lesquels les diaporamas vont être affichées, séparation par virgule si plusieurs. - Nazwy obiektów (mogą to też być zsynchronizowane obiekty) na których pokaz slajdów zostanie pokazany, oddzielony przecinkiem jeżeli jest ich więcej niż 1. Sprawdź opis modułu aby dowiedzieć się jakie obiekty są wspierane przez moduł. - Objektum nevek (szinkronizált is lehet) amik a vetítésen megjelennek, több darab esetén vesszővel elválasztva. Objektumtámogatásért az INFO-t tekintsd meg. - Nomes dos objetos (também podem ser objetos sincronizados) em que a apresentação de slides será mostrada, separado por vírgulas se for mais de um. Referência INFO para suporte do objeto. - Имена объектов (так же могут использоваться синхронизированные объекты), на которых будет отображаться слайд-шоу, разделенные запятыми. Посмотрите описание, чтобы понять, какие объекты поддерживаются. - Los nombres de objetos (también pueden ser objetos sincronizados) de diapositivas se mostrarán en, separados por comas. Referencia INFO para el soporte del objeto. - Jména objektů (lze také použít synchronizované objekty) které se budou zobrazovat v prezentaci, oddělit čárkou pokud jich je více. Zkontrolujte POPIS abyste zjistili, zda je objekt podporován modulem. - Nomi di oggetti (possono anche essere oggetti sincronizzati) che verranno usati per la presentazione di diapositive, separato da virgole se più di uno. Fai riferimento ad INFO per gli oggetti supportati. + Nazwy obiektów (mogą to też być zsynchronizowane obiekty) na których pokaz slajdów zostanie pokazany, oddzielony przecinkiem jeżeli jest ich więcej niż 1. + Objektum nevek (szinkronizált is lehet) amik a vetítésen megjelennek, több darab esetén vesszővel elválasztva. + Nomes dos objetos (também podem ser objetos sincronizados) em que a apresentação de slides será mostrada, separado por vírgulas se for mais de um. + Имена объектов (так же могут использоваться синхронизированные объекты), на которых будет отображаться слайд-шоу, разделенные запятыми. + Los nombres de objetos (también pueden ser objetos sincronizados) de diapositivas se mostrarán en, separados por comas. + Jména objektů (lze také použít synchronizované objekty) které se budou zobrazovat v prezentaci, oddělit čárkou pokud jich je více. + Nomi di oggetti (possono anche essere oggetti sincronizzati) che verranno usati per la presentazione di diapositive, separato da virgole se più di uno. スライドショーを表示するオブジェクト名 (オブジェクトとの同期も可)。複数ある場合はコンマで区切れます - 슬라이드 쇼가 보여질 물체(동기화 되는 물체도 가능합니다) 명칭, 다수의 경우 쉼표로 구분합니다. 자세한 물체목록은 INFO에서 확인하십시요. + 슬라이드 쇼가 보여질 물체(동기화 되는 물체도 가능합니다) 명칭, 다수의 경우 쉼표로 구분합니다. + 物件名稱 (也可使用同步線來設定), 幻燈片將會顯示在該物件上, 如有多個物件, 請以逗號作區隔. + 物件名称 (也可使用同步线来设定), 幻灯片将会显示在该物件上, 如有多个物件, 请以逗号作区隔. Controllers Steuereinheit - Controleurs + Contrôleurs Kontroler Vezérlők Controles @@ -70,11 +78,13 @@ Controllori コントローラ 조종 장치 + 控制器 + 控制器 Controller object names, separated by commas if multiple. Objekte die als Steuereinheit fungieren. Werden ggf. durch Kommata getrennt. - Noms de controleur d'objets, séparation par virgule si plusieurs + Noms de contrôleur d'objets, séparation par virgule si plusieurs Nazwa obiektu - kontrolera, oddzielona przecinkami jeżeli jest ich więcej niż 1. Vezérlő objektum nevek, vesszővel elválasztva több darab esetén. Nome dos objetos de controle, separado por vírgula se mais de um. @@ -83,6 +93,8 @@ Nomi di oggetti controllori, separati da virgole se multipli. コントローラに指定するオブジェクト名を記入し、複数ある場合はコンマで区切れます。 조종 장치 물체 명칭, 다수의 경우 쉼표로 구분됩니다. + 指定是控制器的物件名稱, 如有多個物件, 請以逗號作區隔. + 指定是控制器的物件名称, 如有多个物件, 请以逗号作区隔. Images @@ -97,6 +109,8 @@ Immagini 画像 사진 + 圖片 + 图片 List of images that will be used for the slide-show, separated by commas, with full path correctly formatted (eg. images\image.paa). @@ -111,6 +125,8 @@ Lista di immagini che verranno usate durante la presentazione, separati da virgole, con il formato completo del percorso (es. images\image.paa) 完全なパスでスライドショーに使う画像一覧を入力してください。コンマで区別できます。(例: images\image.paa) 슬라이드 쇼에 쓰일 사진목록입니다, 쉼표로 구분됩니다, 경로설정을 정확히 하십시요. (예: 사진\사진.ppa) + 要做為幻燈片的圖片清單, 每個圖片請已逗號區隔, 並輸入完整路徑位址 (例如:images\image.paa). + 要做为幻灯片的图片清单, 每个图片请已逗号区隔, 并输入完整路径位址 (例如:images\image.paa). Interaction Names @@ -125,6 +141,8 @@ Interaktionsnamen インタラクション名 상호작용 명칭 + 互動鍵名稱 + 互动键名称 List of names that will be used for interaction entries, separated by commas, in order of images. @@ -138,10 +156,30 @@ Liste aller Namen, die für Interaktionseinträge genutzt werden. Mit Kommata getrennt, in Reihenfolge der Bilder. 画像を操作できるインタラクション エントリ名の一覧を入力してください。コンマで区切り複数を指定できます。 상호작용 메세지에 쓰일 명칭입니다, 쉼표로 구분합니다, 이미지의 순서입니다. + 設定互動鍵切換圖片時的按鈕名稱, 多個按鈕請以逗號做區隔, 有多少圖片就輸入多少個按鈕, 以利切換圖片. + 设定互动键切换图片时的按钮名称, 多个按钮请以逗号做区隔, 有多少图片就输入多少个按钮, 以利切换图片. + + + Set Name + Ustaw nazwę + 名前設定 + Définir le nom + Imposta Nome + 設定名稱 + 设定名称 + + + Name that will be used for main interaction entry (to distinguish multiple slideshows). Default: "Slides" + Nazwa, która będzie użyta w głównym menu interakcji (w celu rozróżnienia różnych slajdów). Domyślnie: "Slides" + メイン インタラクション エントリで使われる名前を設定します。(複数のスライドショーを区別するため)。標準: "Slides" + Un nom qui sera utilisé pour interagir avec plusieurs diaporamas. Par défaut : "Slides" + Nome che sarà utilizzato per le principali interazioni (per distinguere le multiple diapositive). Predefinito: "Slides" + 設定該幻燈片的標題名稱 (用來區分多個不同標題的幻燈片.) 預設名稱: "幻燈片" + 设定该幻灯片的标题名称 (用来区分多个不同标题的幻灯片.) 预设名称: "幻灯片" Slide Duration - Durée d'une diapositive + Durée d'un diaporama Czas trwania slajdów Dia időtartam Duração do Slide @@ -152,10 +190,12 @@ Länge der Diavorführung pro Bild スライドの持続時間 슬라이드 지속시간 + 幻燈片顯示時間 + 幻灯片显示时间 Duration of each slide. Default: 0 (Automatic Transitions Disabled) - Durée de chaque diapositive. Dafaut: 0 (transition automatique désactivée) + Durée de chaque diaporama. Défaut: 0 (transition automatique désactivée) Czas trwania poszczególnych slajdów. Domyślnie: 0 (Automatyczne przejścia wyłączone) A diák időtartama. Alapértelmezett: 0 (Automatikus váltás letiltva) Duração de cada slide. Padrão: 0 (Transição automática desabilitada) @@ -166,10 +206,12 @@ Länge der Diavorführung pro Bild. Standard: 0 (Automatischer Wechsel deaktiviert) 各スライドの持続時間。標準:0 (自動的な切り替えは無効) 매 슬라이드의 지속시간. 기본설정: 0 (자동 전환 비활성화) + 每張幻燈片顯示的時間. 預設:0 (自動換圖已禁用) + 每张幻灯片显示的时间. 预设:0 (自动换图已禁用) Slides - Diapositives + Diapo Slajdy Diák Slides @@ -180,6 +222,8 @@ Dias スライド 슬라이드 + 幻燈片 + 幻灯片 diff --git a/addons/spectator/UI/interface.hpp b/addons/spectator/UI/interface.hpp index 392cd9a43d..8c566844ee 100644 --- a/addons/spectator/UI/interface.hpp +++ b/addons/spectator/UI/interface.hpp @@ -190,7 +190,7 @@ class GVAR(interface) { 1 }; multiselectEnabled = 0; - maxHistoryDelay = 10e10; + disableKeyboardSearch = 1; onTreeDblClick = QUOTE([ARR_2('onTreeDblClick',_this)] call FUNC(handleInterface)); }; class unitFrame: RscFrame { diff --git a/addons/spectator/config.cpp b/addons/spectator/config.cpp index 4de0acae9f..934bfd5f63 100644 --- a/addons/spectator/config.cpp +++ b/addons/spectator/config.cpp @@ -21,7 +21,9 @@ class CfgPatches { class CfgRespawnTemplates { class ADDON { + displayName = CSTRING(DisplayName); onPlayerKilled = QFUNC(respawnTemplate); onPlayerRespawn = QFUNC(respawnTemplate); + respawnTypes[] = {2,3}; }; }; diff --git a/addons/spectator/functions/fnc_handleCamera.sqf b/addons/spectator/functions/fnc_handleCamera.sqf index ce384c496c..f21581ea58 100644 --- a/addons/spectator/functions/fnc_handleCamera.sqf +++ b/addons/spectator/functions/fnc_handleCamera.sqf @@ -64,7 +64,7 @@ if (GVAR(camMode) == 0) then { _vector = _vector vectorAdd [0,0,_distance*sin(-_tilt)]; // Update the position of the target camera (used for smooth unit tracking) - _target camSetPos ((_unit modelToWorldVisual [0,0,0]) vectorAdd [0,0,1.5]); + _target camSetPos ((ASLToAGL getPosASLVisual _unit) vectorAdd [0,0,1.5]); _target camCommit 0; // Update the relative position of the unit camera diff --git a/addons/spectator/functions/fnc_handleCompass.sqf b/addons/spectator/functions/fnc_handleCompass.sqf index a65cc9ddce..6f0f94b0ee 100644 --- a/addons/spectator/functions/fnc_handleCompass.sqf +++ b/addons/spectator/functions/fnc_handleCompass.sqf @@ -46,19 +46,12 @@ _positions = [ [_compassW + _offset, 0] ]; -_sequence = if (_heading < 90) then { - [_SW, _WN, _NE, _ES] -} else { - if (_heading < 180) then { - [_WN, _NE, _ES, _SW] - } else { - if (_heading < 270) then { - [_NE, _ES, _SW, _WN] - } else { - [_ES, _SW, _WN, _NE] - }; - }; -}; +_sequence = [ + [_SW, _WN, _NE, _ES], + [_WN, _NE, _ES, _SW], + [_NE, _ES, _SW, _WN], + [_ES, _SW, _WN, _NE] +] select floor(_heading/90); { diff --git a/addons/spectator/functions/fnc_handleIcons.sqf b/addons/spectator/functions/fnc_handleIcons.sqf index d1f83690ff..8f735c2a32 100644 --- a/addons/spectator/functions/fnc_handleIcons.sqf +++ b/addons/spectator/functions/fnc_handleIcons.sqf @@ -29,7 +29,7 @@ _drawVehicles = []; _color = GETVAR(_x,GVAR(gColor),[ARR_4(0,0,0,0)]); _txt = groupID _x; - drawIcon3D ["\A3\ui_f\data\map\markers\nato\b_inf.paa", _color, _leader modelToWorldVisual [0,0,30], 1, 1, 0, _txt, 2, 0.02]; + drawIcon3D ["\A3\ui_f\data\map\markers\nato\b_inf.paa", _color, (_leader modelToWorldVisual (_leader selectionPosition "Head")) vectorAdd [0,0,28.5], 1, 1, 0, _txt, 2, 0.02]; } else { _drawVehicles append (units _x); }; @@ -41,6 +41,6 @@ _drawVehicles = []; _color = GETVAR((group _x),GVAR(gColor),[ARR_4(0,0,0,0)]); _txt = ["", GETVAR(_x,GVAR(uName),"")] select (isPlayer _x); - drawIcon3D ["\A3\ui_f\data\map\markers\military\dot_CA.paa", _color, _x modelToWorldVisual [0,0,3], 0.7, 0.7, 0, _txt, 1, 0.02]; + drawIcon3D ["a3\Ui_f\data\GUI\Rsc\RscDisplayEGSpectator\UnitIcon_ca.paa", _color, (_x modelToWorldVisual (_x selectionPosition "Head")) vectorAdd [0,0,1.5], 0.7, 0.7, 0, _txt, 1, 0.02]; false } count (_drawVehicles arrayIntersect GVAR(unitList)); diff --git a/addons/spectator/functions/fnc_handleInterface.sqf b/addons/spectator/functions/fnc_handleInterface.sqf index e5bb7498e0..9ba64ec0f0 100644 --- a/addons/spectator/functions/fnc_handleInterface.sqf +++ b/addons/spectator/functions/fnc_handleInterface.sqf @@ -34,7 +34,7 @@ switch (toLower _mode) do { [FUNC(handleUnits), 9, _display] call CBA_fnc_addPerFrameHandler; // Handle 3D unit icons - GVAR(iconHandler) = addMissionEventHandler ["Draw3D",FUNC(handleIcons)]; + GVAR(iconHandler) = addMissionEventHandler ["Draw3D", {call FUNC(handleIcons)}]; // Populate the help window private _help = (_display displayCtrl IDC_HELP) controlsGroupCtrl IDC_HELP_LIST; diff --git a/addons/spectator/functions/fnc_moduleSpectatorSettings.sqf b/addons/spectator/functions/fnc_moduleSpectatorSettings.sqf index 52b6e5d8fa..8224c77e57 100644 --- a/addons/spectator/functions/fnc_moduleSpectatorSettings.sqf +++ b/addons/spectator/functions/fnc_moduleSpectatorSettings.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_spectator_fnc_moduleSpectatorSettings + * * Public: No */ diff --git a/addons/spectator/functions/fnc_respawnTemplate.sqf b/addons/spectator/functions/fnc_respawnTemplate.sqf index 1a36170202..59759d1371 100644 --- a/addons/spectator/functions/fnc_respawnTemplate.sqf +++ b/addons/spectator/functions/fnc_respawnTemplate.sqf @@ -13,6 +13,9 @@ * Return Value: * None * + * Example: + * [bob, kevin, 3, 6] call ace_spectator_fnc_respawnTemplate + * * Public: No */ diff --git a/addons/spectator/functions/fnc_toggleInterface.sqf b/addons/spectator/functions/fnc_toggleInterface.sqf index 31472702fc..4bf10fdbfe 100644 --- a/addons/spectator/functions/fnc_toggleInterface.sqf +++ b/addons/spectator/functions/fnc_toggleInterface.sqf @@ -3,7 +3,7 @@ * Correctly handles toggling of spectator interface elements for clean UX * * Arguments: - * 0: Display + * 0: Display * 1: Toogle compass * 2: Toogle help * 3: Toogle interface @@ -15,7 +15,7 @@ * None * * Example: - * [_dsiplay, nil, true] call ace_spectator_fnc_toggleInterface + * [_display, nil, true] call ace_spectator_fnc_toggleInterface * * Public: No */ diff --git a/addons/spectator/functions/fnc_updateCameraModes.sqf b/addons/spectator/functions/fnc_updateCameraModes.sqf index de1611823b..819636ee22 100644 --- a/addons/spectator/functions/fnc_updateCameraModes.sqf +++ b/addons/spectator/functions/fnc_updateCameraModes.sqf @@ -21,6 +21,10 @@ #include "script_component.hpp" +if !(EGVAR(common,settingsInitFinished)) exitWith { + EGVAR(common,runAtSettingsInitialized) pushBack [DFUNC(updateCameraModes),_this]; +}; + params [["_addModes",[],[[]]], ["_removeModes",[],[[]]]]; private ["_newModes","_currentModes"]; diff --git a/addons/spectator/functions/fnc_updateUnits.sqf b/addons/spectator/functions/fnc_updateUnits.sqf index e5b15b6bc1..418643be38 100644 --- a/addons/spectator/functions/fnc_updateUnits.sqf +++ b/addons/spectator/functions/fnc_updateUnits.sqf @@ -33,43 +33,37 @@ if !(_newUnits isEqualTo []) exitWith { }; }; -private ["_sides","_cond","_filteredUnits","_filteredGroups"]; - // Unit setting filter -_newUnits = [[],allPlayers,playableUnits,allUnits] select GVAR(filterUnits); +private _newUnits = [[],allPlayers,playableUnits,allUnits] select GVAR(filterUnits); // Side setting filter -_sides = []; -_cond = [{_this == (side group player)},{(_this getFriend (side group player)) >= 0.6},{(_this getFriend (side group player)) < 0.6},{true}] select GVAR(filterSides); -{ - if (_x call _cond) then { - _sides pushBack _x; - }; -} forEach GVAR(availableSides); +private _sideFilter = [ + {_x == (side group player)}, + {(_x getFriend (side group player)) >= 0.6}, + {(_x getFriend (side group player)) < 0.6}, + {true} +] select GVAR(filterSides); + +private _filteredSides = GVAR(availableSides) select _sideFilter; // Filter units and append to list -_filteredUnits = []; -{ - if ( - (alive _x) && - {(_x isKindOf "CAManBase")} && - {(side group _x) in _sides} && // Side filter - {simulationEnabled _x} && - {!(_x getVariable [QGVAR(isStaged), false])} // Who watches the watchmen? - ) then { - _filteredUnits pushBack _x; - }; -} forEach (_newUnits - GVAR(unitBlacklist)); +private _filteredUnits = (_newUnits - GVAR(unitBlacklist)) select { + (alive _x) && + {(_x isKindOf "CAManBase")} && + {(side group _x) in _filteredSides} && // Side filter + {simulationEnabled _x} && + {!(_x getVariable [QGVAR(isStaged), false])} // Who watches the watchmen? +}; _filteredUnits append GVAR(unitWhitelist); // Cache icons and colour for drawing -_filteredGroups = []; +private _filteredGroups = []; { // Intentionally re-applied to units in case their status changes [_x] call FUNC(cacheUnitInfo); - _filteredGroups pushBack (group _x); + _filteredGroups pushBackUnique (group _x); } forEach _filteredUnits; // Replace previous lists entirely (removes any no longer valid) +GVAR(groupList) = _filteredGroups; GVAR(unitList) = _filteredUnits arrayIntersect _filteredUnits; -GVAR(groupList) = _filteredGroups arrayIntersect _filteredGroups; diff --git a/addons/spectator/functions/fnc_updateVisionModes.sqf b/addons/spectator/functions/fnc_updateVisionModes.sqf index c2bbb09167..6db965af3e 100644 --- a/addons/spectator/functions/fnc_updateVisionModes.sqf +++ b/addons/spectator/functions/fnc_updateVisionModes.sqf @@ -29,6 +29,10 @@ #include "script_component.hpp" +if !(EGVAR(common,settingsInitFinished)) exitWith { + EGVAR(common,runAtSettingsInitialized) pushBack [DFUNC(updateVisionModes),_this]; +}; + params [["_addModes",[],[[]]], ["_removeModes",[],[[]]]]; private ["_newModes","_currentModes"]; diff --git a/addons/spectator/stringtable.xml b/addons/spectator/stringtable.xml index 4f18fdf08f..ae65487d23 100644 --- a/addons/spectator/stringtable.xml +++ b/addons/spectator/stringtable.xml @@ -1,6 +1,14 @@ + + ACE Spectator + ACE スペクテイター + Spettatore ACE + Spectateur ACE + ACE 旁观者 + ACE 旁觀者 + Spectator Settings Zuschauer Einstellungen @@ -13,6 +21,8 @@ Réglages de spectateur スペクテイター設定 관전자 설정 + 旁观者设定 + 旁觀者設定 Configure how the spectator system will operate by default. @@ -26,6 +36,8 @@ Configure comment le système de spectateurs opère par défaut. スペクテイター システムが標準でどのように動作するか設定できます。 어떻게 관전자 시스템이 기본적으로 작동되는지 설정합니다 + 设定旁观者系统相关配置. + 設定旁觀者系統相關配置. Unit filter @@ -39,6 +51,8 @@ Filtre d'unités ユニット フィルタ 인원 필터 + 单位过滤器 + 單位過濾器 Method of filtering spectatable units. @@ -52,6 +66,8 @@ Méthode de filtration des unités regardables. 観察できるユニットへのフィルタ設定ができます。 관전할 수 있는 인원을 고릅니다 + 过滤哪些单位可以使用旁观者系统. + 過濾哪些單位可以使用旁觀者系統. No units @@ -65,6 +81,8 @@ Pas d'unités ユニットなし 인원 없음 + 无单位 + 無單位 Only players @@ -78,6 +96,8 @@ Joueurs seulements プレイヤのみ 플레이어만 + 只有玩家 + 只有玩家 Playable Units @@ -91,6 +111,8 @@ Unités jouables プレイ可能なユニットのみ 플레이 가능한 인원 + 可扮演单位 + 可扮演單位 All units @@ -104,6 +126,8 @@ Toutes les unités 全てのユニット 모든 인원 + 所有单位 + 所有單位 Side filter @@ -117,6 +141,8 @@ Filtre de faction 勢力フィルタ 진영 필터 + 阵营过滤器 + 陣營過濾器 Method of filtering spectatable sides. @@ -130,6 +156,8 @@ Méthode de filtration des factions regardables 観察できる勢力へのフィルタ設定ができます。 관전할 수 있는 진영을 고릅니다 + 过滤可旁观的阵营. + 過濾可旁觀的陣營. Player side @@ -143,6 +171,8 @@ Faction du joueur プレイヤーと同じ勢力 플레이어 진영 + 玩家 + 玩家 Friendly sides @@ -156,6 +186,8 @@ Factions amies 友軍勢力 아군 진영 + 友军 + 友軍 Hostile sides @@ -169,6 +201,8 @@ Factions hostiles 敵対勢力 적군 진영 + 敌方 + 敵方 All sides @@ -182,6 +216,8 @@ Toutes les factions 全ての勢力 모든 진영 + 所有阵营 + 所有陣營 Camera modes @@ -195,6 +231,8 @@ Mode de caméra カメラ モード 카메라 모드 + 摄影机模式 + 攝影機模式 Camera modes that can be used. @@ -208,6 +246,8 @@ Modes de caméra qui peuvent être utilisés カメラ モードを使えます。 사용할 수 있는 카메라 모드들 입니다 + 设定可使用的摄影机模式. + 設定可使用的攝影機模式. All @@ -221,6 +261,8 @@ Tous 全て 모두 + 所有 + 所有 Free only @@ -234,15 +276,17 @@ Libre seulement 自由視点のみ 오직 자유만 + 只有自由模式 + 只有自由模式 Internal only Erste Person //Bitte überprüfen! - Tylko wewnętrznaSomente internaТолько внутренняяPouze pohled z první osobySolo internaSolo internaInterne seulement一人称視点のみ오직 내부만 + Tylko wewnętrznaSomente internaТолько внутренняяPouze pohled z první osobySolo internaSolo internaInterne seulement一人称視点のみ오직 내부만只有第一人称只有第一人稱 External only Dritte Person //Bitte überpfüfen! - Tylko zewnętrznaSomente externaТолько внешняяPouze pohled z třetí osobySolo externaSolo esternaExterne seulement三人称視点のみ오직 외부만 + Tylko zewnętrznaSomente externaТолько внешняяPouze pohled z třetí osobySolo externaSolo esternaExterne seulement三人称視点のみ오직 외부만只有第三人称只有第三人稱 Internal and external Erste und dritte Person @@ -255,6 +299,8 @@ Interne et externe 一人称と三人称視点 외부 및 내부 + 第一和第三人称 + 第一和第三人稱 Vision modes @@ -268,6 +314,8 @@ Modes de vision ビジョン モード 시야 모드 + 视觉模式 + 視覺模式 Vision modes that can be used. @@ -281,6 +329,8 @@ Modes de visions qui peuvent être utilisés ビジョン モードを使えます。 사용할 수 있는 시야 모드들 입니다 + 设定可使用的视觉模式. + 設定可使用的視覺模式. Night vision @@ -294,6 +344,8 @@ Vision nocturne 夜間暗視 야간투시경 + 夜视 + 夜視 Thermal imaging @@ -307,6 +359,8 @@ Vision thermique 熱源画像 열화상 + 热成像 + 熱成像 @@ -321,6 +375,8 @@ Unités spectatrices スペクテイター ユニット 관전 인원 + 旁观者单位 + 旁觀者單位 Spectator Controls @@ -334,6 +390,8 @@ Contrôles de spectateur スペクテイター操作 관전 조작 + 旁观者控制 + 旁觀者控制 Free @@ -347,15 +405,17 @@ Libre 自由視点 자유 + 自由模式 + 自由模式 Internal Erste Person //Bitte überprüfen! - WewnętrznaInternaВнутренняяPohled z první osobyInternaInternaInterne一人称視点내부 + WewnętrznaInternaВнутренняяPohled z první osobyInternaInternaInterne一人称視点내부第一人称第一人稱 External Dritte Person //Bitte überprüfen! - ZewnętrznaExternaВнешняяPohled z třetí osobyExternaEsternaExterne三人称視点외부 + ZewnętrznaExternaВнешняяPohled z třetí osobyExternaEsternaExterne三人称視点외부第三人称第三人稱 Normal Normal @@ -368,6 +428,8 @@ Normale 通常 정상 + 正常 + 正常 Night @@ -381,6 +443,8 @@ Nuit 暗視装置 야간 + 夜视 + 夜視 Thermal @@ -394,6 +458,8 @@ Thermique 熱源画像 열상 + 热成像 + 熱成像 @@ -408,6 +474,8 @@ Caméra libre 自由視点 자유 카메라 + 自由摄影机 + 自由攝影機 Camera Forward @@ -421,6 +489,8 @@ Caméra en avant カメラを前に 카메라 앞으로 + 摄影机往前 + 攝影機往前 Camera Backward @@ -434,6 +504,8 @@ Caméra en arrière カメラを後ろに 카메라 뒤로 + 摄影机往后 + 攝影機往後 Camera Left @@ -447,6 +519,8 @@ Caméra à gauche カメラを左に 카메라 왼쪽으로 + 摄影机往左 + 攝影機往左 Camera Right @@ -460,6 +534,8 @@ Caméra à droite カメラを右に 카메라 오른쪽으로 + 摄影机往右 + 攝影機往右 Camera Up @@ -473,6 +549,8 @@ Caméra en haut カメラを上に 카메라 위로 + 摄影机往上 + 攝影機往上 Camera Down @@ -486,6 +564,8 @@ Caméra en bas カメラを下に 카메라 아래로 + 摄影机往下 + 攝影機往下 Pan Camera @@ -499,6 +579,8 @@ Tourner la caméra カメラを振る 카메라 돌리기 + 平移摄影机 + 平移攝影機 Dolly Camera @@ -512,6 +594,8 @@ Bouger la caméra カメラを動かす 카메라 추적 + 移动摄影机 + 移動攝影機 Lock Camera to Target @@ -525,6 +609,8 @@ Verrouiller la caméra sur la cible カメラを目標に固定 목표에 카메라 고정 + 锁定摄影机观察单一目标 + 鎖定攝影機觀察單一目標 Speed Boost @@ -538,6 +624,8 @@ Boost de vitesse 速度の増加 속도 증가 + 速度提升 + 速度提升 Interface @@ -551,6 +639,8 @@ Interface インターフェイス 인터페이스 + 介面 + 介面 Toggle Interface @@ -564,6 +654,8 @@ Bascule de l'interface インターフェイスをトグル 인터페이스 토글 + 切换介面 + 切換介面 Toggle Unit Icons @@ -577,6 +669,8 @@ Bascule des icônes des unités ユニット アイコンをトグル 인원 아이콘 토글 + 切换单位图示 + 切換單位圖示 Toggle Unit List @@ -590,6 +684,8 @@ Bascule de la liste des unités ユニット一覧をトグル 인원 목록 토글 + 切换单位名单 + 切換單位名單 Toggle Toolbar @@ -603,6 +699,8 @@ Bascule de la barre d'outils ツールバーをトグル 툴바 토글 + 切换工具栏 + 切換工具欄 Toggle Compass @@ -616,6 +714,8 @@ Basculer le compas 方位磁石をトグル 나침반 토글 + 切换指北针 + 切換指北針 Toggle Map @@ -629,6 +729,8 @@ Basculer la carte 地図をトグル 지도 토글 + 切换地图 + 切換地圖 Toggle Help @@ -642,6 +744,8 @@ Basculer l'aide ヘルプをトグル 도움 토글 + 切换帮助 + 切換幫助 Camera Attributes @@ -655,6 +759,8 @@ Propriétés de la caméra カメラ高度 카메라 속성 + 摄影机属性 + 攝影機屬性 Next Camera @@ -668,6 +774,8 @@ Caméra suivante 次のカメラ 다음 카메라 + 下个镜头 + 下個鏡頭 Previous Camera @@ -681,6 +789,8 @@ Caméra précédente 前のカメラ 이전 카메라 + 上个镜头 + 上個鏡頭 Next Unit @@ -694,6 +804,8 @@ Unité suivante 次のユニット 다음 인원 + 下个单位 + 下個單位 Previous Unit @@ -707,6 +819,8 @@ Unité précédente 前のユニット 이전 인원 + 上个单位 + 上個單位 Next Vision Mode @@ -720,6 +834,8 @@ Mode de vision suivant 次のビジョン モード 다음 시야 모드 + 下个视觉模式 + 下個視覺模式 Previous Vision Mode @@ -733,6 +849,8 @@ Mode de vision précédent 前のビジョン モード 이전 시야 모드 + 上个视觉模式 + 上個視覺模式 Adjust Zoom @@ -746,6 +864,8 @@ Ajuster le zoom 拡大倍率を調節 줌 조절 + 调整倍率 + 調整倍率 Adjust Speed @@ -759,6 +879,8 @@ Ajuster la vitesse 速度を調節 속도 조절 + 调整速度 + 調整速度 Increment Zoom @@ -772,6 +894,8 @@ Augmenter le zoom 拡大倍率を増やす 줌 증가 + 增加放大 + 增加放大 Increment Speed @@ -785,6 +909,8 @@ Augmenter la vitesse 速度を増やす 속도 증가 + 增加速度 + 增加速度 Reset Zoom @@ -798,6 +924,8 @@ RAZ zoom 拡大倍率を初期化 줌 초기화 + 重置缩放 + 重置縮放 Reset Speed @@ -811,6 +939,8 @@ RAZ vitesse 速度を初期化 속도 초기화 + 重置速度 + 重置速度 diff --git a/addons/spottingscope/CfgVehicles.hpp b/addons/spottingscope/CfgVehicles.hpp index 84ce5f177f..fa2574cb8d 100644 --- a/addons/spottingscope/CfgVehicles.hpp +++ b/addons/spottingscope/CfgVehicles.hpp @@ -43,7 +43,7 @@ class CfgVehicles { class ACE_Actions: ACE_Actions{ class ACE_MainActions: ACE_MainActions { - selection = "main_gun"; + selection = "main_turret_axis"; class ACE_Pickup { selection = ""; displayName = CSTRING(PickUp); diff --git a/addons/spottingscope/data/ace_spottingscope.p3d b/addons/spottingscope/data/ace_spottingscope.p3d index 969d0b37f5..2298b9c8f9 100644 Binary files a/addons/spottingscope/data/ace_spottingscope.p3d and b/addons/spottingscope/data/ace_spottingscope.p3d differ diff --git a/addons/spottingscope/functions/fnc_animateReticle.sqf b/addons/spottingscope/functions/fnc_animateReticle.sqf index 10bbf9b564..7fbf71fe23 100644 --- a/addons/spottingscope/functions/fnc_animateReticle.sqf +++ b/addons/spottingscope/functions/fnc_animateReticle.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [DISPLAY] call ace_spottingscope_fnc_animateReticle + * * Public: No */ #include "script_component.hpp" @@ -15,7 +18,7 @@ disableSerialization; params ["_display"]; -uinamespace setVariable [QGVAR(dlgSpottingScope), _display]; +uinamespace setVariable [QGVAR(dlgSpottingScope), _display]; private _ctrlReticle = _display displayCtrl IDC_RETICLE; private _ctrlBody = _display displayCtrl IDC_BODY; diff --git a/addons/spottingscope/stringtable.xml b/addons/spottingscope/stringtable.xml index 00ba2e2eb9..fdf621a29e 100644 --- a/addons/spottingscope/stringtable.xml +++ b/addons/spottingscope/stringtable.xml @@ -14,6 +14,8 @@ Luneta de observador 観測用スコープ 감적 망원경 + 观测镜 + 觀測鏡 Pick up Spotting Scope @@ -28,6 +30,8 @@ Pegar luneta de observador 観測用スコープを拾う 감적 망원경 줍기 + 捡起观测镜 + 撿起觀測鏡 Place Spotting Scope @@ -42,6 +46,8 @@ Colocar luneta de observador 観測用スコープを置く 감적 망원경 배치 + 放置观测镜 + 放置觀測鏡 diff --git a/addons/switchunits/functions/fnc_handleMapClick.sqf b/addons/switchunits/functions/fnc_handleMapClick.sqf index b0984631d7..db016ac8f3 100644 --- a/addons/switchunits/functions/fnc_handleMapClick.sqf +++ b/addons/switchunits/functions/fnc_handleMapClick.sqf @@ -3,7 +3,7 @@ * Switches to a unit close to a clicked map position * * Arguments: - * 0: Faction + * 0: Faction * 0: unit * 1: sides * 1: Map Position diff --git a/addons/switchunits/stringtable.xml b/addons/switchunits/stringtable.xml index d079350a19..b601d7bd12 100644 --- a/addons/switchunits/stringtable.xml +++ b/addons/switchunits/stringtable.xml @@ -14,19 +14,23 @@ Trocado de unidade ユニットを切り替え 인원으로 전환 + 切换单位 + 切換單位 Trying to switch Versuche zu Wechseln Snažím se přehodit Próba zmiany - Sto provando a cambiare + Provando a cambiare Intentando cambiar Essaye de basculer Tentando trocar Попытка переключения 切り替えを試す 전환 시도중 + 尝试切换中 + 嘗試切換中 This unit is too close to the enemy. @@ -41,6 +45,8 @@ Essa unidade está muito perto do inimigo. このユニットは敵に近すぎます。 그 인원은 적과 너무 가깝습니다. + 这单位太接近敌人了. + 這單位太接近敵人了. SwitchUnits System @@ -55,6 +61,8 @@ Sistema Cambio Unità SwitchUnits システム 인원전환 시스템 + 切换单位系统 + 切換單位系統 Switch to West? @@ -69,6 +77,8 @@ Cambia per BLUFOR? ウエストへ切り替えますか? 서방으로 전환합니까? + 切换至蓝方? + 切換至藍方? Allow switching to west units? @@ -83,6 +93,8 @@ Consenti passaggio ad unità BLUFOR? ウエスト側ユニットへ切り替えられるようにしますか? 서방 인원으로 전환합니까? + 允许切换至蓝方? + 允許切換至藍方? Switch to East? @@ -97,6 +109,8 @@ Cambia per OPFOR? イースト側へ切り替えますか? 동방으로 전환합니까? + 切换至红方? + 切換至紅方? Allow switching to east units? @@ -111,6 +125,8 @@ Consenti passaggio ad unità OPFOR? イースト側ユニットへ切り替えられるようにしますか? 동방인원으로 전환합니까? + 允许切换至红方? + 允許切換至紅方? Switch to Independent? @@ -125,6 +141,8 @@ Cambia per INDFOR? インデペンデントへ切り替えますか? 중립으로 전환합니까? + 切换至独立方? + 切換至獨立方? Allow switching to independent units? @@ -139,6 +157,8 @@ Consenti passaggio ad unità INDFOR? インデペンデント側ユニットへ切り替えられるようにしますか? 중립 인원으로 전환합니까? + 允许切换至独立方? + 允許切換至獨立方? Switch to Civilian? @@ -153,6 +173,8 @@ Cambia per Civili? シビリアンへ切り替えますか? 민간인으로 전환합니까? + 切换至平民方? + 切換至平民方? Allow switching to civilian units? @@ -167,6 +189,8 @@ Consenti passaggio ad unità civili? シビリアン側ユニットへ切り替えられるようにしますか? 민간인으로 전환하는걸 허가합니까? + 允许切换至平民方? + 允許切換至平民方? Enable Safe Zone? @@ -181,6 +205,8 @@ Abilita Zona Sicura? 安全地帯を有効にしますか? 안전 지대 활성화? + 启用安全区? + 啟用安全區? Enable a safe zone around enemy units? Players can't switch to units inside of the safe zone. @@ -195,6 +221,8 @@ Abilita una zona sicura attorno ad unità nemiche? I giocatori non possono cambiare ad unità dentro la zona sicura. 敵ユニットから逃れる安全地帯を有効にしますか?プレイヤーは安全地帯内のユニットへ切り替えできません。 적 주위로 안전 지대를 활성화합니까? 안전 지대 내에서는 플레이어가 인원 전환을 할 수 없습니다. + 启用敌方周围安全地带? 玩家不能切换到安全区内的单位. + 啟用敵方周圍安全地帶? 玩家不能切換到安全區內的單位. Safe Zone Radius @@ -209,6 +237,8 @@ Raggio Zona Sicura 安全地帯の半径 안전 지대 반경 + 安全区半径 + 安全區半徑 The safe zone around players from a different team. Default: 200 @@ -223,6 +253,8 @@ La zona sicura attorno ai giocatori di un team diverso. Default: 200 別のチームへのプレイヤーの周囲にある安全地帯の範囲。標準:200 다른 진영으로 부터의 플레이어 안전 지대. 기본설정: 200 + 安全区的范围. 预设值:200 + 安全區的範圍. 預設值:200 Module allows you to switch side during the game. @@ -236,6 +268,8 @@ El módulo permite a las unidades cambiar de bando durante el juego. モジュールはゲームにおいて、陣営の切り替えを有効にします。 이 모듈은 당신을 게임 중에 진영을 바꿀 수 있게 해줍니다. + 此模块允许你在游戏中切换至另一方. + 此模塊允許你在遊戲中切換至另一方. diff --git a/addons/tacticalladder/functions/fnc_handleInteractMenuOpened.sqf b/addons/tacticalladder/functions/fnc_handleInteractMenuOpened.sqf index c7187acd55..4c46ea46c2 100644 --- a/addons/tacticalladder/functions/fnc_handleInteractMenuOpened.sqf +++ b/addons/tacticalladder/functions/fnc_handleInteractMenuOpened.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_tacticalladder_fnc_handleInteractMenuOpened + * * Public: No */ #include "script_component.hpp" diff --git a/addons/tacticalladder/functions/fnc_handleKilled.sqf b/addons/tacticalladder/functions/fnc_handleKilled.sqf index c5d6aa1314..742231900c 100644 --- a/addons/tacticalladder/functions/fnc_handleKilled.sqf +++ b/addons/tacticalladder/functions/fnc_handleKilled.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_tacticalladder_fnc_handleKilled + * * Public: No */ #include "script_component.hpp" diff --git a/addons/tacticalladder/functions/fnc_handlePlayerChanged.sqf b/addons/tacticalladder/functions/fnc_handlePlayerChanged.sqf index 07118acbaf..713c75df7f 100644 --- a/addons/tacticalladder/functions/fnc_handlePlayerChanged.sqf +++ b/addons/tacticalladder/functions/fnc_handlePlayerChanged.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, kevin] call ace_tacticalladder_fnc_handlePlayerChanged + * * Public: No */ #include "script_component.hpp" diff --git a/addons/tacticalladder/functions/fnc_handleUnconscious.sqf b/addons/tacticalladder/functions/fnc_handleUnconscious.sqf index e9ce28d524..152f014602 100644 --- a/addons/tacticalladder/functions/fnc_handleUnconscious.sqf +++ b/addons/tacticalladder/functions/fnc_handleUnconscious.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_tacticalladder_fnc_handleUnconscious + * * Public: No */ #include "script_component.hpp" diff --git a/addons/tacticalladder/stringtable.xml b/addons/tacticalladder/stringtable.xml index 18c817c7f2..e94a292bc1 100644 --- a/addons/tacticalladder/stringtable.xml +++ b/addons/tacticalladder/stringtable.xml @@ -14,6 +14,8 @@ Escada telescópica タクティカル ラダー 로프 사다리 + 伸缩梯子 + 伸縮梯子 Deploy ladder @@ -28,6 +30,8 @@ Implantar escada ラダーを設置 사다리 배치 + 布署梯子 + 佈署梯子 Drop ladder @@ -42,6 +46,8 @@ Derrubar escada ラダーを落とす 사다리 놓기 + 降下梯子 + 降下梯子 Extend @@ -55,6 +61,8 @@ Déployer 伸ばす 늘리기 + 伸长梯子 + 伸長梯子 +Ctrl tilt @@ -68,6 +76,8 @@ +Ctrl per inclinare +Ctrl で傾ける +컨트롤키 기울이기 + +Ctrl 倾斜 + +Ctrl 傾斜 Position ladder @@ -82,6 +92,8 @@ Posicionar escada ラダーの位置 사다리 위치 + 梯子位置 + 梯子位置 Pickup ladder @@ -96,6 +108,8 @@ Pegar escada ラダーを拾う 사다리 줍기 + 捡起梯子 + 撿起梯子 diff --git a/addons/tagging/XEH_postInit.sqf b/addons/tagging/XEH_postInit.sqf index ddac9b9ab9..1e7003281a 100644 --- a/addons/tagging/XEH_postInit.sqf +++ b/addons/tagging/XEH_postInit.sqf @@ -3,8 +3,7 @@ // Cache for static objects -GVAR(cacheStaticModels) = createLocation ["ACE_HashLocation", [-10000,-10000,-10000], 0, 0]; -GVAR(cacheStaticModels) setText QGVAR(cacheStaticModels); +GVAR(cacheStaticModels) = [false] call CBA_fnc_createNamespace; // Consider static everything vehicle that inherit from Static // This include houses (which we don't need), but also walls, that we do @@ -17,7 +16,7 @@ for "_index" from 0 to (_countOptions - 1) do { private _model = getText (_cfgClass >> "model"); if (_model != "") then { private _array = _model splitString "\"; - GVAR(cacheStaticModels) setVariable [toLower (_array select ((count _array) - 2)), _cfgClass]; + GVAR(cacheStaticModels) setVariable [(_array select ((count _array) - 1)), true]; }; }; }; @@ -33,7 +32,7 @@ for "_index" from 0 to (_countOptions - 1) do { private _model = getText (_cfgClass >> "model"); if (_model != "") then { private _array = _model splitString "\"; - GVAR(cacheStaticModels) setVariable [toLower (_array select ((count _array) - 2)), _cfgClass]; + GVAR(cacheStaticModels) setVariable [(_array select ((count _array) - 1)), true]; }; }; }; diff --git a/addons/tagging/functions/fnc_checkTaggable.sqf b/addons/tagging/functions/fnc_checkTaggable.sqf index d739bbfec5..e4328687a9 100644 --- a/addons/tagging/functions/fnc_checkTaggable.sqf +++ b/addons/tagging/functions/fnc_checkTaggable.sqf @@ -9,16 +9,14 @@ * Is surface taggable * * Example: - * [unit] call ace_tagging_fnc_checkTaggable + * [player] call ace_tagging_fnc_checkTaggable * * Public: No */ #include "script_component.hpp" -params ["_unit"]; - -[[_unit], { +[_this, { params ["_unit"]; // Exit if no required item in inventory @@ -45,15 +43,11 @@ params ["_unit"]; if (_object isKindOf "Static") exitWith {false}; // If the class is not categorized correctly search the cache - private _array = str(_object) splitString " "; - private _str = toLower (_array select 1); - TRACE_1("Object:",_str); - private _objClass = GVAR(cacheStaticModels) getVariable _str; + private _modelName = (getModelInfo _object) select 0; + private _isStatic = GVAR(cacheStaticModels) getVariable [_modelName, false]; + TRACE_2("Object:",_modelName,_isStatic); // If the class in not on the cache, exit - if (isNil "_objClass") exitWith { - false - }; - true + (!_isStatic) }) exitWith { TRACE_1("Pointed object is non static",_object); false diff --git a/addons/tagging/functions/fnc_createTag.sqf b/addons/tagging/functions/fnc_createTag.sqf index 87c9ff13f9..c579c6e05f 100644 --- a/addons/tagging/functions/fnc_createTag.sqf +++ b/addons/tagging/functions/fnc_createTag.sqf @@ -28,9 +28,8 @@ if (_texture == "") exitWith { false }; -private _tag = "UserTexture1m_F" createVehicle [0,0,0]; +private _tag = createSimpleObject ["UserTexture1m_F", _tagPosASL]; _tag setObjectTextureGlobal [0, _texture]; -_tag setPosASL _tagPosASL; _tag setVectorDirAndUp _vectorDirAndUp; // Throw a global event for mision makers diff --git a/addons/tagging/functions/fnc_moduleInit.sqf b/addons/tagging/functions/fnc_moduleInit.sqf index 235bd3a046..8b2d42a010 100644 --- a/addons/tagging/functions/fnc_moduleInit.sqf +++ b/addons/tagging/functions/fnc_moduleInit.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_tagging_fnc_moduleInit + * * Public: No */ #include "script_component.hpp" diff --git a/addons/tagging/functions/fnc_tag.sqf b/addons/tagging/functions/fnc_tag.sqf index 3aec5ec139..4893037117 100644 --- a/addons/tagging/functions/fnc_tag.sqf +++ b/addons/tagging/functions/fnc_tag.sqf @@ -49,15 +49,11 @@ if ((!isNull _object) && { if (_object isKindOf "Static") exitWith {false}; // If the class is not categorized correctly search the cache - private _array = str(_object) splitString " "; - private _str = toLower (_array select 1); - TRACE_1("Object:",_str); - private _objClass = GVAR(cacheStaticModels) getVariable _str; + private _modelName = (getModelInfo _object) select 0; + private _isStatic = GVAR(cacheStaticModels) getVariable [_modelName, false]; + TRACE_2("Object:",_modelName,_isStatic); // If the class in not on the cache, exit - if (isNil "_objClass") exitWith { - false - }; - true + (!_isStatic) }) exitWith { TRACE_1("Pointed object is non static",_object); false @@ -81,7 +77,7 @@ private _v3 = _v2 vectorCrossProduct _v1; TRACE_3("Reference:", _v1, _v2, _v3); -_fnc_isOk = { +private _fnc_isOk = { params ["_rx", "_ry"]; private _startPosASL2 = _touchingPoint vectorAdd (_v2 vectorMultiply _rx) vectorAdd (_v3 vectorMultiply _ry) vectorAdd (_v1 vectorMultiply (-0.06)); private _endPosASL2 = _startPosASL2 vectorAdd (_v1 vectorMultiply (0.12)); diff --git a/addons/tagging/stringtable.xml b/addons/tagging/stringtable.xml index dbccdfd355..4bf5707dcf 100644 --- a/addons/tagging/stringtable.xml +++ b/addons/tagging/stringtable.xml @@ -8,6 +8,10 @@ Tagowanie Markierungssystem 뿌리기 + Marquage + Marcamento + 喷漆 + 噴漆 Configure how the tagging system will operate by default. @@ -16,6 +20,10 @@ Skonfiguruj zachowanie systemu tagowania. Konfiguriert, wie das Markierungssystem standardmäßig funktioniert. 뿌리기 시스템의 기본사항을 설정합니다. + Configure le fonctionnement par défaut du système de marquage. + Configura quanto il sistema di marcamento agirà da se. + 定义喷漆系统预设设定. + 定義噴漆系統預設設定. Quick Tag @@ -24,6 +32,10 @@ Szybkie tagowanie Schnelle Markierung 빠른 뿌리기 + Marquage rapide + Marcamento Rapido + 快速喷漆 + 快速噴漆 Action performed on main tag interaction point. @@ -32,6 +44,10 @@ Akcja wykonywana na głównym punkcie interakcji tagu. Aktion, die am Haupt-Interaktionspunkt ausgeführt werden soll. 이 동작은 상호작용에서 뿌리기를 할 수 있게 해준다 + Action réalisé au point de marquage principal. + Azione eseguita sul punto di interazione dei tag principali. + 直接喷漆在互动选单瞄准的点上. + 直接噴漆在互動選單瞄準的點上. Last Used @@ -40,6 +56,10 @@ Ostatnio użyte Zuletzt benutzt 최근 사용 + Dernier utilisé + Ultimo Usato + 上次最后使用 + 上次最後使用 Random X @@ -48,6 +68,10 @@ Losowy X Zufällig X 무작위 X + Aléatoire X + Random X + 随机X标记 + 隨機X標記 Random @@ -56,19 +80,25 @@ Losowy Zufällig 무작위 + Aléatoire + Random + 随机 + 隨機 Tag Markieren Marcar - Taguj - Tag + Oznakuj Marca Označit Marcar Маркер タグ 뿌리기 + Tag + 喷漆 + 噴漆 X black @@ -82,6 +112,8 @@ Черный Х 黒の X印 검정 X + 黑色X标记 + 黑色X標記 X red @@ -95,6 +127,8 @@ Красный Х 赤の X印 빨간 X + 红色X标记 + 紅色X標記 X green @@ -108,6 +142,8 @@ Зеленый Х 緑の X印 초록 X + 绿色X标记 + 綠色X標記 X blue @@ -121,6 +157,8 @@ Синий Х 青の X印 파랑 X + 蓝色X标记 + 藍色X標記 Black spray paint @@ -134,6 +172,8 @@ Черный спрей 黒のスプレー缶 검정 스프레이 + 黑色喷漆 + 黑色噴漆 Red spray paint @@ -147,6 +187,8 @@ Красный спрей 赤のスプレー缶 빨강 스프레이 + 红色喷漆 + 紅色噴漆 Green spray paint @@ -160,6 +202,8 @@ Зеленый спрей 緑のスプレー缶 초록 스프레이 + 绿色喷漆 + 綠色噴漆 Blue spray paint @@ -173,19 +217,23 @@ Синий спрей 青のスプレー缶 파랑 스프레이 + 蓝色喷漆 + 藍色噴漆 A can of spray paint for tagging walls. Eine Farbsprühdose um Wände zu markieren. Lata de pintura en aerosol para marcar. Farba w sprayu, służy do oznakowywania terenu. - Un spray de peinture pour taguer les murs. + Un spray de peinture pour marquer les murs. Una bomboletta di spay per contrassegnare i muri. Plechovka se sprejem k vytváření značek. Uma lata de tinta spray para marcar paredes. Балончик спрея для рисования маркеров на стенах. スプレー缶は壁にタグ付できます。 벽에 뿌릴 수 있는 스프레이캔 입니다. + 喷漆可喷涂在墙壁上. + 噴漆可噴塗在牆壁上. diff --git a/addons/trenches/functions/fnc_canDigTrench.sqf b/addons/trenches/functions/fnc_canDigTrench.sqf index 0cbed2d9b7..a99c5c6b60 100644 --- a/addons/trenches/functions/fnc_canDigTrench.sqf +++ b/addons/trenches/functions/fnc_canDigTrench.sqf @@ -1,6 +1,6 @@ /* * Author: Ruthberg, commy2, esteldunedain - * Checks if a unit can dig a trench + * Checks if a unit can dig a trench. * * Arguments: * 0: Unit @@ -15,17 +15,8 @@ */ #include "script_component.hpp" -#define SURFACE_BLACKLIST ["water", "concrete", "tarmac", "wood", "metal", "roof_tin", "roof_tiles", "wood_int", "concrete_int", "tiles_int", "metal_int", "stony", "rock", "int_concrete", "int_tiles", "int_wood", "tiling", "wavymetal", "int_metal"] - params ["_unit"]; if !("ACE_EntrenchingTool" in items _unit) exitWith {false}; -// Can't dig trench if above ground level -if ((getPosATL _unit) select 2 > 0.05) exitWith {false}; - -private _surfaceClass = (surfaceType getPosASL _unit) select [1]; -private _surfaceType = getText (configFile >> "CfgSurfaces" >> _surfaceClass >> "soundEnviron"); -TRACE_1("",_surfaceType); - -!(_surfaceType in SURFACE_BLACKLIST) +_unit call EFUNC(common,canDig) diff --git a/addons/trenches/functions/fnc_handleInteractMenuOpened.sqf b/addons/trenches/functions/fnc_handleInteractMenuOpened.sqf index 91d6b0140b..5e68b6f60f 100644 --- a/addons/trenches/functions/fnc_handleInteractMenuOpened.sqf +++ b/addons/trenches/functions/fnc_handleInteractMenuOpened.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_trenches_fnc_handleInteractMenuOpened + * * Public: No */ #include "script_component.hpp" diff --git a/addons/trenches/functions/fnc_handleKilled.sqf b/addons/trenches/functions/fnc_handleKilled.sqf index e9f0353cb1..6b57e20c91 100644 --- a/addons/trenches/functions/fnc_handleKilled.sqf +++ b/addons/trenches/functions/fnc_handleKilled.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_trenches_fnc_handleKilled + * * Public: No */ #include "script_component.hpp" diff --git a/addons/trenches/functions/fnc_handlePlayerChanged.sqf b/addons/trenches/functions/fnc_handlePlayerChanged.sqf index 684ccc22ce..f4ebb8e2d5 100644 --- a/addons/trenches/functions/fnc_handlePlayerChanged.sqf +++ b/addons/trenches/functions/fnc_handlePlayerChanged.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, kevin] call ace_trenches_fnc_handlePlayerChanged + * * Public: No */ #include "script_component.hpp" diff --git a/addons/trenches/functions/fnc_handlePlayerInventoryChanged.sqf b/addons/trenches/functions/fnc_handlePlayerInventoryChanged.sqf index cbae02d07a..11bdef6072 100644 --- a/addons/trenches/functions/fnc_handlePlayerInventoryChanged.sqf +++ b/addons/trenches/functions/fnc_handlePlayerInventoryChanged.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob, "weapon"] call ace_trenches_fnc_handlePlayerInverntoryChanged + * * Public: No */ #include "script_component.hpp" diff --git a/addons/trenches/functions/fnc_handleUnconscious.sqf b/addons/trenches/functions/fnc_handleUnconscious.sqf index e4fc2814b2..3407a5a029 100644 --- a/addons/trenches/functions/fnc_handleUnconscious.sqf +++ b/addons/trenches/functions/fnc_handleUnconscious.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_trenches_fnc_handleUnconscious + * * Public: No */ #include "script_component.hpp" diff --git a/addons/trenches/stringtable.xml b/addons/trenches/stringtable.xml index 9203635d49..161e3eae39 100644 --- a/addons/trenches/stringtable.xml +++ b/addons/trenches/stringtable.xml @@ -13,6 +13,8 @@ Саперная лопата シャベル 야전삽 + 战备锹 + 戰備鍬 Entrenching Tool @@ -26,6 +28,8 @@ Саперная лопата シャベル 야전용 삽. 군인들의 영원한 친구 + 战备锹 + 戰備鍬 Envelope - Small @@ -38,6 +42,8 @@ Окоп - Малый 塹壕 - 小型 참호 - 소형 + 掩体 - 小 + 掩體 - 小 Small Personal Trench @@ -51,6 +57,8 @@ Малый персональный окоп 小型の個人用塹壕 소형 개인참호 + 小型个人掩体 + 小型個人掩體 Dig Small Trench @@ -64,6 +72,8 @@ Вырыть малый окоп 小型塹壕を掘る 소형참호 파기 + 盖小掩体 + 蓋小掩體 Envelope - Big @@ -76,6 +86,8 @@ Окоп - Большой 塹壕 - 大型 참호 - 대형 + 掩体 - 大 + 掩體 - 大 Large Personal Trench @@ -89,6 +101,8 @@ Большой персональный окоп 大型の塹壕を掘る 대형 참호 + 大型个人掩体 + 大型個人掩體 Dig Big Trench @@ -102,6 +116,8 @@ Вырыть большой окоп 大型の塹壕を掘る 대형참호 파기 + 盖大掩体 + 蓋大掩體 Confirm Dig @@ -115,6 +131,8 @@ Копать ここに掘る 여기에 파기 + 确认开工 + 確認開工 Cancel Dig @@ -128,6 +146,8 @@ Отменить копание 掘るのを中止 취소하기 + 取消动作 + 取消動作 Rotate @@ -142,12 +162,14 @@ Bращать 回転 돌리기 + 旋转 + 旋轉 Digging Trench Grabe Schützengraben Kopanie wnęki - Sto Scavando la Trincea + Scavando la Trincea Cavando trinchera Creuse la tranchée Vykopat zákop @@ -155,6 +177,8 @@ Копание окопа 塹壕を掘っている 참호 파는중 + 正在盖掩体中 + 正在蓋掩體中 Continue Digging Trench @@ -166,6 +190,9 @@ 塹壕を掘りつづける Graben fortsetzen 계속해서 참호파기 + Continua a Scavare la Trincea + 继续盖掩体 + 繼續蓋掩體 Remove Trench @@ -177,6 +204,9 @@ 塹壕を消す Schützengraben entfernen 참호 제거 + Rimuove Trincea + 移除掩体 + 移除掩體 Removing Trench @@ -188,6 +218,9 @@ 塹壕を消している Entferne Schützengraben 참호 제거중... + Rimuovendo la Trincea + 移除掩体中 + 移除掩體中 diff --git a/addons/tripod/functions/fnc_handleInteractMenuOpened.sqf b/addons/tripod/functions/fnc_handleInteractMenuOpened.sqf index 8c49359d96..014eed55d4 100644 --- a/addons/tripod/functions/fnc_handleInteractMenuOpened.sqf +++ b/addons/tripod/functions/fnc_handleInteractMenuOpened.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_tripod_fnc_handleInteractMenuOpened + * * Public: No */ #include "script_component.hpp" diff --git a/addons/tripod/functions/fnc_handleKilled.sqf b/addons/tripod/functions/fnc_handleKilled.sqf index ee28fc1f45..90dd388617 100644 --- a/addons/tripod/functions/fnc_handleKilled.sqf +++ b/addons/tripod/functions/fnc_handleKilled.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_tripod_fnc_handleKilled + * * Public: No */ #include "script_component.hpp" diff --git a/addons/tripod/functions/fnc_handlePlayerChanged.sqf b/addons/tripod/functions/fnc_handlePlayerChanged.sqf index dd0cad6533..3d37b7949f 100644 --- a/addons/tripod/functions/fnc_handlePlayerChanged.sqf +++ b/addons/tripod/functions/fnc_handlePlayerChanged.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_tripod_fnc_handlePlayerChanged + * * Public: No */ #include "script_component.hpp" diff --git a/addons/tripod/functions/fnc_handleUnconscious.sqf b/addons/tripod/functions/fnc_handleUnconscious.sqf index f81cecea58..0b43bd4b6b 100644 --- a/addons/tripod/functions/fnc_handleUnconscious.sqf +++ b/addons/tripod/functions/fnc_handleUnconscious.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [bob] call ace_tripod_fnc_handleUnconscious + * * Public: No */ #include "script_component.hpp" diff --git a/addons/tripod/stringtable.xml b/addons/tripod/stringtable.xml index 557900ee96..a63bda06b0 100644 --- a/addons/tripod/stringtable.xml +++ b/addons/tripod/stringtable.xml @@ -14,6 +14,8 @@ Kit SSWT SSWT キット SSWT 키트 + 狙击手专用三脚架 + 狙擊手專用三腳架 Place SSWT Kit @@ -28,6 +30,8 @@ Colocar kit SSWT SSWT キットを置く SSWT 키트 배치 + 放置狙击手专用三脚架 + 放置狙擊手專用三腳架 Pick up SSWT Kit @@ -42,6 +46,8 @@ Prendi Kit SSWT SSWT キットを拾う SSWT 키트 줍기 + 捡起狙击手专用三脚架 + 撿起狙擊手專用三腳架 Adjust SSWT Kit @@ -56,6 +62,8 @@ Aggiusta Kit SSWT SSWT キットを調節 SSWT 키트 조절 + 调整狙击手专用三脚架 + 調整狙擊手專用三腳架 Done @@ -70,6 +78,8 @@ Fatto 完了 완료 + 完成 + 完成 adjust @@ -84,6 +94,8 @@ aggiusta 調節 조절 + 调整 + 調整 diff --git a/addons/ui/functions/fnc_moduleInit.sqf b/addons/ui/functions/fnc_moduleInit.sqf index 79a9ef2d93..6a3e74aa67 100644 --- a/addons/ui/functions/fnc_moduleInit.sqf +++ b/addons/ui/functions/fnc_moduleInit.sqf @@ -9,6 +9,11 @@ * * Return Value: * None + * + * Example: + * [LOGIC, [bob, kevin], true] call ace_ui_fnc_moduleInit + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/ui/stringtable.xml b/addons/ui/stringtable.xml index f567ab8e9c..6f3a3ecc2d 100644 --- a/addons/ui/stringtable.xml +++ b/addons/ui/stringtable.xml @@ -11,6 +11,9 @@ Interfejs użytkownika Benutzeroberfläche 사용자 인터페이스 + Interfaccia Utente + 使用者介面 + 使用者介面 User Interface @@ -22,6 +25,9 @@ Interfejs użytkownika Benutzeroberfläche 사용자 인터페이스 + Interfaccia Utente + 使用者介面 + 使用者介面 This module allows toggling visible user interface parts. @@ -32,6 +38,9 @@ Moduł ten pozwala zmienić stan widoczności poszczególnych elementów UI. Dieses Modul erlaubt es, Teile der Benutzeroberfläche (UI) an- oder auszuschalten. 이 모듈은 사용자 인터페이스의 부분을 토글하는것을 가능케 해줍니다. + Questo modulo consente di commutare parti di interfaccia utente visibili. + 此模块允许你调整使用者介面的任何一个元件. + 此模塊允許你調整使用者介面的任何一個元件. Allow Selective UI @@ -43,6 +52,9 @@ Zezwól na selektywne UI Erlaube selektives UI 선택적 사용자 인터페이스 허가 + Permette l'UI Selettiva + 允许调整使用者介面 + 允許調整使用者介面 Allow client to modify their UI. @@ -54,6 +66,9 @@ Zezwól klientowi na modyfikację UI. Erlaube Clients, ihr UI zu modifizieren. 클라이언트가 선택적 사용자 인터페이스 사용하는것을 허가합니다 + Permette al client di modificare la propria UI. + 允许客户端自行调整使用者介面. + 允許客戶端自行調整使用者介面. Soldier/Vehicle/Weapon Information @@ -65,6 +80,9 @@ Informacje o żołnierzu/pojeździe/broni Soldat/Fahrzeug/Waffe Information 병사/차량/무기 정보 + Informazioni Soldato/Veicolo/Arma + 士兵/载具/武器资讯栏 + 士兵/載具/武器資訊欄 Vehicle Radar @@ -76,6 +94,9 @@ Radar w pojeździe Fahrzeugradar 차량 레이더 + Rada Veicolo + 载具雷达 + 載具雷達 Vehicle Compass @@ -87,6 +108,9 @@ Kompas w pojeździe Fahrzeugkompass 차량 나침반 + Bussola Veicolo + 载具指北针 + 載具指北針 Command Menu @@ -98,6 +122,9 @@ Menu dowodzenia Kommandomenü 지휘 메뉴 + Menù di Comando + 指挥选单 + 指揮選單 Group Bar @@ -109,6 +136,9 @@ Pasek grupy Gruppenleiste 그룹 막대 + Barra del Gruppo + 小队状态栏 + 小隊狀態欄 Weapon Name @@ -120,6 +150,9 @@ Nazwa broni Waffenname 무기 이름 + Nome Arma + 武器名称 + 武器名稱 Weapon Name Background @@ -131,6 +164,9 @@ Tło nazwy broni Waffenname Hintergrund 무기 이름 배경 + Nome Sfondo Arma + 武器名称背景 + 武器名稱背景 Firing Mode @@ -142,6 +178,9 @@ Tryb ognia Feuermodus 사격 모드 + Modalità di Fuoco + 射击模式 + 射擊模式 Ammo Type @@ -153,6 +192,9 @@ Typ amunicji Munitionstyp 탄종 + Tipo Munizioni + 弹药类型 + 彈藥類型 Ammo Count @@ -164,6 +206,9 @@ Ilość amunicji Munitionsanzahl 탄약수 + Contatore Munizioni + 弹药数量 + 彈藥數量 Magazine Count @@ -175,6 +220,9 @@ Ilość magazynków Magazinanzahl 탄창수 + Contatore Caricatore + 弹匣数量 + 彈匣數量 Throwable Type @@ -186,6 +234,9 @@ Typ granatu Wurfobjekt-Typ 투척물 종류 + Tipo Lanciabile + 投掷物类型 + 投擲物類型 Throwable Count @@ -197,6 +248,9 @@ Ilość granatów Wurfobjekt-Anzahl 투척물 개수 + Contatore Lanciabili + 投掷物数量 + 投擲物數量 Zeroing @@ -208,6 +262,9 @@ Wyzerowanie broni Nullung 영점 + Azzeramento + 归零距离 + 歸零距離 Weapon Lower Info Background @@ -218,6 +275,9 @@ Tło dolnej części informacji o broni Hintergrund der unteren Waffen-Info-Leiste 무기 상세 정보 배경 + Informazioni Sfondo Arma Bassa + 武器底部资讯栏背景 + 武器底部資訊欄背景 Stance @@ -229,6 +289,9 @@ Postura Haltung 자세 + Postura + 姿态 + 姿態 Stamina Bar @@ -240,6 +303,9 @@ Pasek staminy Ausdaueranzeige 체력 막대 + Barra Stamina + 体力栏 + 體力欄 Gunner Weapon Name @@ -250,6 +316,9 @@ Nazwa broni strzelca Richtschütze Waffenname 사수 무기 명칭 + Nome Arma Artigliere + 炮手武器名称 + 砲手武器名稱 Gunner Weapon Name Background @@ -260,6 +329,9 @@ Tło nazwy broni strzelca Richtschütze Waffenname Hintergrund 사수 무기 명칭 배경 + Nome Sfondo Arma Artigliere + 炮手武器名称背景 + 砲手武器名稱背景 Gunner Firing Mode @@ -270,6 +342,9 @@ Tryb ognia strzelca Richtschütze Feuermodus 사수 사격 모드 + Modalità di Fuoco Artigliere + 炮手射击模式 + 砲手射擊模式 Gunner Ammo Type @@ -280,6 +355,9 @@ Typ amunicji strzelca Richtschütze Munitionstyp 사수 탄종 + Tipo Munizioni Artigliere + 炮手弹药类型 + 砲手彈藥類型 Gunner Ammo Count @@ -290,6 +368,9 @@ Ilość amunicji strzelca Richtschütze Munitionsanzahl 사수 탄약 수량 + Contatore Munizioni Artigliere + 炮手弹药数量 + 砲手彈藥數量 Gunner Magazine Count @@ -300,6 +381,9 @@ Ilość magazynków strzelca Richtschütze Magazinanzahl 사수 탄창 수량 + Contatore Caricatore Artigliere + 炮手弹匣数量 + 砲手彈匣數量 Gunner Launchable Type @@ -310,6 +394,9 @@ Typ rakiet strzelca Richtschütze Raketentyp 사수 발사체 종류 + Tipo Lanciabile Artigliere + 炮手发射物类型 + 砲手發射物類型 Gunner Launchable Count @@ -320,6 +407,9 @@ Ilość rakiet strzelca Richtschütze Raketenanzahl 사수 발사체 수량 + Contatore Lanciabili Artigliere + 炮手发射物数量 + 砲手發射物數量 Gunner Zeroing @@ -330,6 +420,9 @@ Wyzerowanie broni strzelca Richtschütze Nullung 사수 영점 + Azzeramento Artigliere + 炮手归零距离 + 砲手歸零距離 Gunner Weapon Lower Info Background @@ -340,6 +433,9 @@ Tło dolnej części informacji o broni strzelca Hintergrund der unteren Waffen-Info-Leiste (Richtschütze) 사수 무기 상세 정보 배경 + Informazioni Sfondo Arma Artigliere Bassa + 炮手武器底部资讯栏背景 + 砲手武器底部資訊欄背景 Vehicle Name @@ -351,6 +447,9 @@ Nazwa pojazdu Fahrzeugname 차량 명칭 + Nome Veicolo + 载具名称 + 載具名稱 Vehicle Name Background @@ -362,6 +461,9 @@ Tło nazwy pojazdu Fahrzeugname Hintergrund 차량 명칭 배경 + Nome Sfondo Veicolo + 载具名称背景 + 載具名稱背景 Vehicle Fuel Bar @@ -373,6 +475,9 @@ Pasek paliwa Fahrzeug-Treibstoffleiste 차량 연료 막대 + Barra Carburante Veicolo + 载具燃料栏 + 載具燃料欄 Vehicle Speed @@ -384,6 +489,9 @@ Prędkościomierz Fahrzeuggeschwindigkeit 차량 속도 + Velocità Veicolo + 载具速度 + 載具速度 Vehicle Altitude @@ -395,6 +503,9 @@ Wysokościomierz radarowy Fahrzeughöhe 차량 고도 + Altitudine Veicolo + 载具高度 + 載具高度 Vehicle Damage @@ -406,6 +517,9 @@ Uszkodzenia pojazdu Fahrzeugschaden 차량 피해 + Danno Veicolo + 载具伤害 + 載具傷害 Vehicle Info Background @@ -417,6 +531,9 @@ Tło informacji o pojeździe Fahrzeug Info Hintergrund 차량 정보 배경 + Informazioni Sfondo Veicolo + 载具资讯栏背景 + 載具資訊欄背景 Requires Soldier/Vehicle/Weapon Information. @@ -428,6 +545,9 @@ Wymaga informacji o żołnierzu/pojeździe/broni. Benötigt Soldat/Fahrzeug/Waffe Information. 병사/차량/무기의 정보가 필요합니다. + Richiede informazione Soldato/Veicolo/Arma. + 需要士兵/载具/武器的资讯. + 需要士兵/載具/武器的資訊. Modifying User Interface is disabled. @@ -439,16 +559,22 @@ Modyfikacja interfejsu użytkownika jest wyłączona. Die Modifizierung des UI ist deaktiviert. 사용자 인터페이스 변경이 비활성화 되어있습니다. + La modifica dell'Interfaccia Utente è disabilitata. + 自定使用者介面功能已关闭. + 自定使用者介面功能已關閉. Cannot modify a forced User Interface element. Não é possível modificar um elemento forçado da interface do usuário. - Impossible de modifier un élément de l'interface utilisateur forcé + Impossible de modifier un élément de l'interface utilisateur forcé. Невозможно изменить зафиксированный элемент пользовательского интерфейса. ユーザー インタフェイス要素は変更できません。 Nie można modyfikować wymuszonego elementu interfejsu użytkownika. Gesperrte UI-Elemente können nicht modifiziert werden. 강제 사용자 인터페이스는 변경하실 수 없습니다. + Impossibile modificare un elemento forzato d' Interfaccia Utente. + 无法编辑已被锁定的使用者介面元件. + 無法編輯已被鎖定的使用者介面元件. diff --git a/addons/vector/CfgVehicles.hpp b/addons/vector/CfgVehicles.hpp index f06f79aa12..23aa8d7412 100644 --- a/addons/vector/CfgVehicles.hpp +++ b/addons/vector/CfgVehicles.hpp @@ -6,15 +6,15 @@ class CfgVehicles { scopeCurator = 2; displayName = CSTRING(VectorName); vehicleClass = "Items"; - class TransportWeapons { - MACRO_ADDWEAPON(ACE_Vector,1); + class TransportItems { + MACRO_ADDITEM(ACE_Vector,1); }; }; class Box_NATO_Support_F; class ACE_Box_Misc: Box_NATO_Support_F { - class TransportWeapons { - MACRO_ADDWEAPON(ACE_Vector,6); + class TransportItems { + MACRO_ADDITEM(ACE_Vector,6); }; }; }; diff --git a/addons/vector/functions/fnc_adjustBrightness.sqf b/addons/vector/functions/fnc_adjustBrightness.sqf index da951322af..b31cc5361c 100644 --- a/addons/vector/functions/fnc_adjustBrightness.sqf +++ b/addons/vector/functions/fnc_adjustBrightness.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * 0: Number + * + * Return Value: + * None + * + * Example: + * [5] call ace_vector_fnc_adjustBrigthness + * + * Public: No + */ + #include "script_component.hpp" disableSerialization; diff --git a/addons/vector/functions/fnc_clearDisplay.sqf b/addons/vector/functions/fnc_clearDisplay.sqf index 73ef7dfcc6..3ec3ef7eb6 100644 --- a/addons/vector/functions/fnc_clearDisplay.sqf +++ b/addons/vector/functions/fnc_clearDisplay.sqf @@ -1,10 +1,19 @@ /* + * Author: commy2 + * Clears the vectors control items. + * + * Arguments: + * 0: String + * + * Return Value: + * None + * + * Example: + * [5] call ace_vector_fnc_clearDisplay + * + * Public: No + */ -by commy2 - -Clears the vectors control items. - -*/ #include "script_component.hpp" disableSerialization; diff --git a/addons/vector/functions/fnc_convertToTexturesDegree.sqf b/addons/vector/functions/fnc_convertToTexturesDegree.sqf index 7e04cfccd2..a7c81fe669 100644 --- a/addons/vector/functions/fnc_convertToTexturesDegree.sqf +++ b/addons/vector/functions/fnc_convertToTexturesDegree.sqf @@ -1,8 +1,18 @@ -/* by commy2 - -converts azimuth into array of textures for the vectors scripted info control - -*/ +/* + * Author: commy2 + * converts azimuth into array of textures for the vectors scripted info control + * + * Arguments: + * 0: Number + * + * Return Value: + * None + * + * Example: + * [5] call ace_vector_fnc_convertToTexturesDegree + * + * Public: No + */ #include "script_component.hpp" diff --git a/addons/vector/functions/fnc_convertToTexturesDistance.sqf b/addons/vector/functions/fnc_convertToTexturesDistance.sqf index eb39febfe8..5bad048022 100644 --- a/addons/vector/functions/fnc_convertToTexturesDistance.sqf +++ b/addons/vector/functions/fnc_convertToTexturesDistance.sqf @@ -1,8 +1,19 @@ -/* by commy2 +/* + * Author: commy2 + * converts rangefinder distance into array of textures for the vectors scripted info control + * + * Arguments: + * 0: Number + * + * Return Value: + * Array + * + * Example: + * [5] call ace_vector_fnc_convertToTexturesDistance + * + * Public: No + */ -converts rangefinder distance into array of textures for the vectors scripted info control - -*/ #include "script_component.hpp" diff --git a/addons/vector/functions/fnc_convertToTexturesFOS.sqf b/addons/vector/functions/fnc_convertToTexturesFOS.sqf index 7a77a3aab8..3f5dd9a8da 100644 --- a/addons/vector/functions/fnc_convertToTexturesFOS.sqf +++ b/addons/vector/functions/fnc_convertToTexturesFOS.sqf @@ -1,8 +1,19 @@ -/* by commy2 - -converts rangefinder distance into array of textures for the vectors scripted info control - -*/ +/* + * Author: commy2 + * converts rangefinder distance into array of textures for the vectors scripted info control + * + * Arguments: + * 0: Number + * 1: Number + * + * Return Value: + * Array + * + * Example: + * [5, 6] call ace_vector_fnc_convertToTexturesFOS + * + * Public: No + */ #include "script_component.hpp" diff --git a/addons/vector/functions/fnc_dataTransfer.sqf b/addons/vector/functions/fnc_dataTransfer.sqf index f99490f04c..06eab8803a 100644 --- a/addons/vector/functions/fnc_dataTransfer.sqf +++ b/addons/vector/functions/fnc_dataTransfer.sqf @@ -3,10 +3,10 @@ * Data transfer over a connected cable. Based on page 14 of pdf. * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * [] call ace_vector_fnc_dataTransfer diff --git a/addons/vector/functions/fnc_getDirection.sqf b/addons/vector/functions/fnc_getDirection.sqf index c34826e218..4b67cfed28 100644 --- a/addons/vector/functions/fnc_getDirection.sqf +++ b/addons/vector/functions/fnc_getDirection.sqf @@ -1,3 +1,19 @@ +/* + * Author: commy2 + * + * + * Arguments: + * None + * + * Return Value: + * Array + * + * Example: + * call ace_vector_fnc_getDirection + * + * Public: No + */ + // by commy2 #include "script_component.hpp" diff --git a/addons/vector/functions/fnc_getDistance.sqf b/addons/vector/functions/fnc_getDistance.sqf index f1312be511..d8e5d441df 100644 --- a/addons/vector/functions/fnc_getDistance.sqf +++ b/addons/vector/functions/fnc_getDistance.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * None + * + * Return Value: + * Array + * + * Example: + * call ace_vector_fnc_getDistance + * + * Public: No + */ + #include "script_component.hpp" #define MIN_DISTANCE 10 diff --git a/addons/vector/functions/fnc_getFallOfShot.sqf b/addons/vector/functions/fnc_getFallOfShot.sqf index 365a41518e..5a0af98a77 100644 --- a/addons/vector/functions/fnc_getFallOfShot.sqf +++ b/addons/vector/functions/fnc_getFallOfShot.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * None + * + * Return Value: + * Array + * + * Example: + * call ace_vector_fnc_getFallOfShot + * + * Public: No + */ + #include "script_component.hpp" private ["_distanceP1", "_directionP1", "_azimuthP1", "_inclinationP1", "_distanceP2", "_directionP2", "_azimuthP2", "_inclinationP2"]; diff --git a/addons/vector/functions/fnc_getHeightDistance.sqf b/addons/vector/functions/fnc_getHeightDistance.sqf index 9ec0919917..acae881928 100644 --- a/addons/vector/functions/fnc_getHeightDistance.sqf +++ b/addons/vector/functions/fnc_getHeightDistance.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * None + * + * Return Value: + * Array + * + * Example: + * call ace_vector_fnc_getHeightDistance + * + * Public: No + */ + #include "script_component.hpp" private ["_distance", "_direction", "_azimuth", "_inclination"]; diff --git a/addons/vector/functions/fnc_getRelativeAzimuthDistance.sqf b/addons/vector/functions/fnc_getRelativeAzimuthDistance.sqf index 765d3d6ec4..a613e2e3ad 100644 --- a/addons/vector/functions/fnc_getRelativeAzimuthDistance.sqf +++ b/addons/vector/functions/fnc_getRelativeAzimuthDistance.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * None + * + * Return Value: + * Array + * + * Example: + * call ace_vector_fnc_getRelativeAzimuthDistance + * + * Public: No + */ + #include "script_component.hpp" private ["_distanceP1", "_directionP1", "_azimuthP1", "_inclinationP1", "_distanceP2", "_directionP2", "_azimuthP2", "_inclinationP2"]; diff --git a/addons/vector/functions/fnc_getRelativeDistance.sqf b/addons/vector/functions/fnc_getRelativeDistance.sqf index 9c6dc38943..802a325848 100644 --- a/addons/vector/functions/fnc_getRelativeDistance.sqf +++ b/addons/vector/functions/fnc_getRelativeDistance.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * None + * + * Return Value: + * Number + * + * Example: + * call ace_vector_fnc_getRelativeDistance + * + * Public: No + */ + #include "script_component.hpp" private ["_distanceP1", "_directionP1", "_azimuthP1", "_inclinationP1", "_distanceP2", "_directionP2", "_azimuthP2", "_inclinationP2"]; diff --git a/addons/vector/functions/fnc_getRelativeHeightLength.sqf b/addons/vector/functions/fnc_getRelativeHeightLength.sqf index 319b11b6a6..3471fce2ca 100644 --- a/addons/vector/functions/fnc_getRelativeHeightLength.sqf +++ b/addons/vector/functions/fnc_getRelativeHeightLength.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * None + * + * Return Value: + * Array + * + * Example: + * call ace_vector_fnc_getRelativeHeightLength + * + * Public: No + */ + #include "script_component.hpp" private ["_distanceP1", "_directionP1", "_azimuthP1", "_inclinationP1", "_distanceP2", "_directionP2", "_azimuthP2", "_inclinationP2"]; diff --git a/addons/vector/functions/fnc_illuminate.sqf b/addons/vector/functions/fnc_illuminate.sqf index 03508aae9e..8ecc10690f 100644 --- a/addons/vector/functions/fnc_illuminate.sqf +++ b/addons/vector/functions/fnc_illuminate.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * 0: String + * + * Return Value: + * None + * + * Example: + * ["5"] call ace_vector_fnc_illuminate + * + * Public: No + */ + #include "script_component.hpp" disableSerialization; diff --git a/addons/vector/functions/fnc_nextMode.sqf b/addons/vector/functions/fnc_nextMode.sqf index 53054e85e6..8e6d596f58 100644 --- a/addons/vector/functions/fnc_nextMode.sqf +++ b/addons/vector/functions/fnc_nextMode.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * 0: String + * + * Return Value: + * Array + * + * Example: + * ["5"] call ace_vector_fnc_nextMode + * + * Public: No + */ + #include "script_component.hpp" switch (_this select 0) do { diff --git a/addons/vector/functions/fnc_onKeyDown.sqf b/addons/vector/functions/fnc_onKeyDown.sqf index 830fb3c3c5..194a3b74af 100644 --- a/addons/vector/functions/fnc_onKeyDown.sqf +++ b/addons/vector/functions/fnc_onKeyDown.sqf @@ -1,10 +1,19 @@ /* + * Author: commy2 + * Handles pressing the special vector keys. + * + * Arguments: + * 0: String + * + * Return Value: + * None + * + * Example: + * ["5"] call ace_vector_fnc_onKeyDown + * + * Public: No + */ -by commy2 - -Handles pressing the special vector keys. - -*/ #include "script_component.hpp" // set vector config settings diff --git a/addons/vector/functions/fnc_onKeyHold.sqf b/addons/vector/functions/fnc_onKeyHold.sqf index 3fdd637b61..fdfa22d2b5 100644 --- a/addons/vector/functions/fnc_onKeyHold.sqf +++ b/addons/vector/functions/fnc_onKeyHold.sqf @@ -1,10 +1,20 @@ /* + * Author: commy2 + * PFH executed while holding a vector key down. + * + * Arguments: + * 0: String + * 1: Number + * + * Return Value: + * None + * + * Example: + * ["5", 5] call ace_vector_fnc_onKeyHold + * + * Public: No + */ -by commy2 - -PFH executed while holding a vector key down. - -*/ #include "script_component.hpp" if (!((currentWeapon ACE_player) isKindOf ["ACE_Vector", configFile >> "CfgWeapons"])) exitWith { diff --git a/addons/vector/functions/fnc_onKeyUp.sqf b/addons/vector/functions/fnc_onKeyUp.sqf index fc3d17700e..6896026b50 100644 --- a/addons/vector/functions/fnc_onKeyUp.sqf +++ b/addons/vector/functions/fnc_onKeyUp.sqf @@ -1,10 +1,19 @@ /* + * Author: commy2 + * Handles releasing the special vector keys. + * + * Arguments: + * 0: String + * + * Return Value: + * None + * + * Example: + * ["5"] call ace_vector_fnc_onKeyUp + * + * Public: No + */ -by commy2 - -Handles releasing the special vector keys. - -*/ #include "script_component.hpp" private _fnc_setPFH = { diff --git a/addons/vector/functions/fnc_showAzimuth.sqf b/addons/vector/functions/fnc_showAzimuth.sqf index 2bedd4bf52..59166e1f4c 100644 --- a/addons/vector/functions/fnc_showAzimuth.sqf +++ b/addons/vector/functions/fnc_showAzimuth.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_vector_fnc_showAzimuth + * + * Public: No + */ + #include "script_component.hpp" disableSerialization; diff --git a/addons/vector/functions/fnc_showAzimuthInclination.sqf b/addons/vector/functions/fnc_showAzimuthInclination.sqf index b00c035890..d6b8740e2a 100644 --- a/addons/vector/functions/fnc_showAzimuthInclination.sqf +++ b/addons/vector/functions/fnc_showAzimuthInclination.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_vector_fnc_showAzimuthInclination + * + * Public: No + */ + #include "script_component.hpp" disableSerialization; diff --git a/addons/vector/functions/fnc_showCenter.sqf b/addons/vector/functions/fnc_showCenter.sqf index 4870b10a69..8142a2c3be 100644 --- a/addons/vector/functions/fnc_showCenter.sqf +++ b/addons/vector/functions/fnc_showCenter.sqf @@ -1,10 +1,19 @@ /* + * Author: commy2 + * Shows or hides the vectors center square thingy. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_vector_fnc_showCenter + * + * Public: No + */ -by commy2 - -Shows or hides the vectors center square thingy. - -*/ #include "script_component.hpp" ((GETUVAR(ACE_dlgVector,displayNull)) displayCtrl 1301) ctrlSetText (["", QPATHTOF(rsc\vector_center.paa)] select (_this select 0)); diff --git a/addons/vector/functions/fnc_showDistance.sqf b/addons/vector/functions/fnc_showDistance.sqf index 380f784bbc..ffabeb9824 100644 --- a/addons/vector/functions/fnc_showDistance.sqf +++ b/addons/vector/functions/fnc_showDistance.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_vector_fnc_showDistance + * + * Public: No + */ + #include "script_component.hpp" disableSerialization; diff --git a/addons/vector/functions/fnc_showFallOfShot.sqf b/addons/vector/functions/fnc_showFallOfShot.sqf index b7bed77a0b..459f1dcaed 100644 --- a/addons/vector/functions/fnc_showFallOfShot.sqf +++ b/addons/vector/functions/fnc_showFallOfShot.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * 0: Unknown + * + * Return Value: + * None + * + * Example: + * [?] call ace_vector_fnc_showFallOfShot + * + * Public: No + */ + #include "script_component.hpp" GVAR(FOSState) = _this select 0; diff --git a/addons/vector/functions/fnc_showHeightDistance.sqf b/addons/vector/functions/fnc_showHeightDistance.sqf index b34e8111bc..cbe0b7b86d 100644 --- a/addons/vector/functions/fnc_showHeightDistance.sqf +++ b/addons/vector/functions/fnc_showHeightDistance.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_vector_fnc_showHeightDistance + * + * Public: No + */ + #include "script_component.hpp" disableSerialization; diff --git a/addons/vector/functions/fnc_showP1.sqf b/addons/vector/functions/fnc_showP1.sqf index 8d509d575f..3975399bcb 100644 --- a/addons/vector/functions/fnc_showP1.sqf +++ b/addons/vector/functions/fnc_showP1.sqf @@ -1,10 +1,19 @@ /* + * Author: commy2 + * Shows or hides the 1-P text line. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_vector_fnc_showP1 + * + * Public: No + */ -by commy2 - -Shows or hides the 1-P text line. - -*/ #include "script_component.hpp" disableSerialization; diff --git a/addons/vector/functions/fnc_showRelativeAzimuthDistance.sqf b/addons/vector/functions/fnc_showRelativeAzimuthDistance.sqf index 95797b9d6c..a9426be05c 100644 --- a/addons/vector/functions/fnc_showRelativeAzimuthDistance.sqf +++ b/addons/vector/functions/fnc_showRelativeAzimuthDistance.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_vector_fnc_showRelativeAzimuthDistance + * + * Public: No + */ + #include "script_component.hpp" disableSerialization; diff --git a/addons/vector/functions/fnc_showRelativeDistance.sqf b/addons/vector/functions/fnc_showRelativeDistance.sqf index 74b778d8bf..e0853efa03 100644 --- a/addons/vector/functions/fnc_showRelativeDistance.sqf +++ b/addons/vector/functions/fnc_showRelativeDistance.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_vector_fnc_showRelativeDistance + * + * Public: No + */ + #include "script_component.hpp" disableSerialization; diff --git a/addons/vector/functions/fnc_showRelativeHeightLength.sqf b/addons/vector/functions/fnc_showRelativeHeightLength.sqf index 0b9f5c1928..13bd8061e1 100644 --- a/addons/vector/functions/fnc_showRelativeHeightLength.sqf +++ b/addons/vector/functions/fnc_showRelativeHeightLength.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_vector_fnc_showRelativeHeightLength + * + * Public: No + */ + #include "script_component.hpp" disableSerialization; diff --git a/addons/vector/functions/fnc_showReticle.sqf b/addons/vector/functions/fnc_showReticle.sqf index bcd565774f..aeecfc5ef3 100644 --- a/addons/vector/functions/fnc_showReticle.sqf +++ b/addons/vector/functions/fnc_showReticle.sqf @@ -1,10 +1,19 @@ /* + * Author: commy2 + * Shows or hides the electronic reticle. + * + * Arguments: + * None + * + * Return Value: + * None + * + * Example: + * call ace_vector_fnc_showReticle + * + * Public: No + */ -by commy2 - -Shows or hides the electronic reticle. - -*/ #include "script_component.hpp" ((GETUVAR(ACE_dlgVector,displayNull)) displayCtrl 1302) ctrlSetText (["", QPATHTOF(rsc\vector_crosshair.paa)] select (_this select 0)); diff --git a/addons/vector/functions/fnc_showText.sqf b/addons/vector/functions/fnc_showText.sqf index b578269115..66628d8d44 100644 --- a/addons/vector/functions/fnc_showText.sqf +++ b/addons/vector/functions/fnc_showText.sqf @@ -1,4 +1,19 @@ -// by commy2 +/* + * Author: commy2 + * + * + * Arguments: + * 0: String + * + * Return Value: + * None + * + * Example: + * ["5"] call ace_vector_fnc_showText + * + * Public: No + */ + #include "script_component.hpp" disableSerialization; diff --git a/addons/vector/stringtable.xml b/addons/vector/stringtable.xml index 9fbed7c6bf..76feaa2b5c 100644 --- a/addons/vector/stringtable.xml +++ b/addons/vector/stringtable.xml @@ -14,6 +14,8 @@ Vector 21 Nite ベクター 21 ナイト Vector 21 Nite + Vector 21 Nite + Vector 21 Nite Vector 21 @@ -28,6 +30,8 @@ Vector 21 ベクター 21 Vector 21 + Vector 21 + Vector 21 Rangefinder @@ -42,6 +46,8 @@ Дальномер 測距機器 거리측정기 + 测距仪 + 測距儀 Vector - Azimuth Key @@ -56,6 +62,8 @@ Vector – Азимут ベクター - 方位角キー Vector - 방위각 키 + Vector - 方位按键 + Vector - 方位按鍵 Vector - Distance Key @@ -70,6 +78,8 @@ Vector – Расстояние ベクター - 距離キー Vector - 거리 키 + Vector - 距离按键 + Vector - 距離按鍵 diff --git a/addons/vehiclelock/functions/fnc_lockpick.sqf b/addons/vehiclelock/functions/fnc_lockpick.sqf index 3ac7385a04..2ce856dd37 100644 --- a/addons/vehiclelock/functions/fnc_lockpick.sqf +++ b/addons/vehiclelock/functions/fnc_lockpick.sqf @@ -51,9 +51,11 @@ if (!([[_unit, _veh]] call _condition)) exitWith {false}; _returnValue = _funcType in ["canLockpick", "startLockpick", "finishLockpick"]; switch (_funcType) do { - case "canLockpick": {}; + case "canLockpick": { + _returnValue = !([_unit, _veh] call FUNC(hasKeyForVehicle)) && {(locked _veh) in [2, 3]}; + }; case "startLockpick": { - [_vehLockpickStrenth, [_unit, _veh, "finishLockpick"], {(_this select 0) call FUNC(lockpick)}, {}, (localize LSTRING(Action_LockpickInUse)), _condition] call EFUNC(common,progressBar); + [_vehLockpickStrenth, [_unit, _veh, "finishLockpick"], {(_this select 0) call FUNC(lockpick)}, {}, (localize LSTRING(Action_LockpickInUse)), _condition, ["isNotInside"]] call EFUNC(common,progressBar); }; case "finishLockpick": { [QGVAR(setVehicleLock), [_veh, false], [_veh]] call CBA_fnc_targetEvent; diff --git a/addons/vehiclelock/stringtable.xml b/addons/vehiclelock/stringtable.xml index 3fe5958533..7b39b616de 100644 --- a/addons/vehiclelock/stringtable.xml +++ b/addons/vehiclelock/stringtable.xml @@ -14,6 +14,8 @@ Destravar veículo 車両の鍵を開ける 차량 잠금열기 + 载具解锁 + 載具解鎖 Lock Vehicle @@ -28,6 +30,8 @@ Travar Veículo 車両を施錠 차량 잠그기 + 载具上锁 + 載具上鎖 Lockpick Vehicle @@ -42,6 +46,8 @@ Usar mixa no Veículo 鍵をこじ開ける 차량 문따기 + 解锁载具 + 解鎖載具 Picking Lock... @@ -56,6 +62,8 @@ Usando Mixa... 鍵をこじ開けている・・・ 문따는중... + 解锁中... + 解鎖中... A custom key that will open a specific vehicle. @@ -70,6 +78,8 @@ Uma chave específica que abre um veículo específico. カスタム キーは特定車両を開けられます。 특정 차량을 여는 특수 열쇠 + 使用指定的钥匙来开启特定的载具. + 使用指定的鑰匙來開啟特定的載具. A Master Key will open any lock, no matter what! @@ -84,6 +94,8 @@ Uma chave mestre irá abrir qualquer fechadura, não importa qual! マスター キーは全ての鍵を開けられます。 어떤 차량도 열 수 있는 마스터키 입니다! + 万用解锁钥匙, 能解锁任何载具. + 萬用解鎖鑰匙, 能解鎖任何載具. A lockpick set that can pick the locks of most vehicles. @@ -98,6 +110,8 @@ Um set de chave mixas que pode abrir a maioria dos veículos. ピッキング ツールでは多くの車両をこじ開けられます。 거의 모든 차량을 열 수 있게 해주는 해정도구 모음입니다. + 一组解锁钥匙 (可解锁大部份载具). + 一組解鎖鑰匙 (可解鎖大部份載具). A key that should open most WEST vehicles. @@ -112,6 +126,8 @@ Uma chave que abre a maioria dos veículos ocidentais このキーは多くの WEST 車両を開けられます。 거의 모든 서방진영 차량을 여는 열쇠입니다. + 一组解锁钥匙 (可解锁大部份蓝方载具). + 一組解鎖鑰匙 (可解鎖大部份藍方載具). A key that should open most EAST vehicle. @@ -126,6 +142,8 @@ Uma chave que abre a maioria dos veículos orientais このキーは多くの EAST 車両を開けられます。 거의 모든 동방진영 차량을 여는 열쇠입니다. + 一组解锁钥匙 (可解锁大部份红方载具). + 一組解鎖鑰匙 (可解鎖大部份紅方載具). A key that should open most INDEP vehicle. @@ -140,6 +158,8 @@ Uma chave que abre a maioria dos veículos independentes このキーは多くの INDEP 車両を開けられます。 거의 모든 중립진영 차량을 여는 열쇠입니다. + 一组解锁钥匙 (可解锁大部份独立方载具). + 一組解鎖鑰匙 (可解鎖大部份獨立方載具). A key that should open most CIV vehicle. @@ -154,6 +174,8 @@ Uma chave que abre a maioria dos veículos civis. このキーは多くの CIV 車両を開けられます。 거의 모든 민간인 차량을 여는 열쇠입니다 + 一组解锁钥匙 (可解锁大部份平民载具). + 一組解鎖鑰匙 (可解鎖大部份平民載具). Vehicle Lock Setup @@ -168,6 +190,8 @@ Impostazioni Blocco Veicolo 車両の施錠の設定 차량 잠금 설정 + 载具上锁设置 + 載具上鎖設置 Lock Vehicle Inventory @@ -182,6 +206,8 @@ Blocca Inventario Veicolo 施錠されている車両のインベントリ 차량 소지품 잠금 + 上锁载具的车箱 + 上鎖載具的車箱 Locks the inventory of locked vehicles @@ -196,6 +222,8 @@ Blocca l'inventario di un veicolo bloccato 施錠されている車両の、開けないインベントリ 잠긴 차량의 소지품을 뒤지지못하게 합니다. + 上锁载具的车箱, 使玩家不能拿取/查看载具内的装备 + 上鎖載具的車箱, 使玩家不能拿取/查看載具內的裝備 Vehicle Starting Lock State @@ -210,6 +238,8 @@ Stato Iniziale del Blocco per Veicoli 開始時における車両の鍵の状態 시작시 차량 잠금 상태 + 载具初始上锁状态 + 載具初始上鎖狀態 Set lock state for all vehicles (removes ambiguous lock states) @@ -224,6 +254,8 @@ Imposta lo stato di blocco per tutti i veicoli (rimuove stati di blocco ambigui) 全車両への鍵の状態を設定します。(あいまいな鍵の状態を削除) 모든 차량의 잠금 상태를 정합니다. (애매한 잠금 상태는 모두 없앱니다.) + 设定所有载具的初始上锁状态 (移除不明确的锁定状态) + 設定所有載具的初始上鎖狀態 (移除不明確的鎖定狀態) As Is @@ -238,6 +270,8 @@ Com'è そのまま 그대로 + 无变化 + 無變化 Locked @@ -252,6 +286,8 @@ Bloccato 施錠ずみ 잠김 + 上锁 + 上鎖 Unlocked @@ -266,6 +302,8 @@ Sbloccato 開錠ずみ 열림 + 解锁 + 解鎖 Default Lockpick Strength @@ -280,6 +318,8 @@ Durabilità Default del Grimaldello ピッキング ツールの標準の有効度 기본 해정도구 설정 + 预设开锁能力 + 預設開鎖能力 Default Time to lockpick (in seconds). Default: 10 @@ -294,6 +334,8 @@ Tempo Default richiesto per forzare serrature (in secondi). Default: 10 ピッキング ツールに標準の時間を設定。(秒) 標準:10 해정을 위해 들이는 기본시간입니다(초 단위). 기본설정: 10 + 开锁时间(秒). 预设:10 + 開鎖時間(秒). 預設:10 Settings for lockpick strength and initial vehicle lock state. Removes ambiguous lock states. @@ -308,6 +350,8 @@ Impostazioni per resistenza iniziale delle serrature e stato di blocco dei veicoli. Rimuove stati di blocco ambigui. ピッキング ツールの強さと車両の鍵の初期状態を設定できます。あいまいな鍵の状態を削除します。 해정도구 설정과 시작시 차량의 잠금 상태 그리고 애매한 잠금 상태를 지우는 설정입니다. + 设定开锁能力和初始载具上锁状态. 移除不明确的锁定状态. + 設定開鎖能力和初始載具上鎖狀態. 移除不明確的鎖定狀態. Vehicle Key Assign @@ -322,6 +366,8 @@ Assegna Chiavi Veicoli 車両の鍵を割り当て 차량 열쇠 등록 + 指定载具钥匙 + 指定載具鑰匙 Sync with vehicles and players. Will handout custom keys to players for every synced vehicle. Only valid for objects present at mission start. @@ -336,6 +382,8 @@ Sincronizza con veicoli e giocatori. Distribuirà chiavi ai giocatori per ogni veicolo sincronizzato. Valido solo per oggetti presenti ad inizio missione. 車両とプレイヤへ同期します。プレイヤへ同期された車両のカスタム キーを作ります。これはミッション開始時に作成されたオブジェクトでのみ有効です。 차량과 플레이어에게 동기화됩니다. 동기화된 차량은 플레이어에게 열쇠를 지급합니다. 오직 미션 시작시에 생긴 물체들만 유효합니다. + 可同步在载具与玩家身上. 将使被同步的玩家掌握其他被同步载具的钥匙. 此模块只会在任务刚开始时触发. + 可同步在載具與玩家身上. 將使被同步的玩家掌握其他被同步載具的鑰匙. 此模塊只會在任務剛開始時觸發. diff --git a/addons/vehicles/CfgWeapons.hpp b/addons/vehicles/CfgWeapons.hpp index c4d28c3e31..78a82abccf 100644 --- a/addons/vehicles/CfgWeapons.hpp +++ b/addons/vehicles/CfgWeapons.hpp @@ -27,7 +27,7 @@ class CfgWeapons { }; class LMG_Minigun: LMG_RCWS { - magazines[] = {"1000Rnd_65x39_Belt","1000Rnd_65x39_Belt_Green","1000Rnd_65x39_Belt_Tracer_Green","1000Rnd_65x39_Belt_Tracer_Red","1000Rnd_65x39_Belt_Tracer_Yellow","1000Rnd_65x39_Belt_Yellow","2000Rnd_65x39_Belt","2000Rnd_65x39_Belt_Green","2000Rnd_65x39_Belt_Tracer_Green","2000Rnd_65x39_Belt_Tracer_Green_Splash","2000Rnd_65x39_Belt_Tracer_Red","2000Rnd_65x39_Belt_Tracer_Yellow","2000Rnd_65x39_Belt_Tracer_Yellow_Splash","2000Rnd_65x39_Belt_Yellow","2000Rnd_762x51_Belt_T_Green","2000Rnd_762x51_Belt_T_Red","2000Rnd_762x51_Belt_T_Yellow","200Rnd_65x39_Belt","200Rnd_65x39_Belt_Tracer_Green","200Rnd_65x39_Belt_Tracer_Red","200Rnd_65x39_Belt_Tracer_Yellow","5000Rnd_762x51_Belt","5000Rnd_762x51_Yellow_Belt","500Rnd_65x39_Belt","500Rnd_65x39_Belt_Tracer_Red_Splash","500Rnd_65x39_Belt_Tracer_Green_Splash","500Rnd_65x39_Belt_Tracer_Yellow_Splash"}; + magazines[] = {"PylonWeapon_2000Rnd_65x39_belt", "1000Rnd_65x39_Belt","1000Rnd_65x39_Belt_Green","1000Rnd_65x39_Belt_Tracer_Green","1000Rnd_65x39_Belt_Tracer_Red","1000Rnd_65x39_Belt_Tracer_Yellow","1000Rnd_65x39_Belt_Yellow","2000Rnd_65x39_Belt","2000Rnd_65x39_Belt_Green","2000Rnd_65x39_Belt_Tracer_Green","2000Rnd_65x39_Belt_Tracer_Green_Splash","2000Rnd_65x39_Belt_Tracer_Red","2000Rnd_65x39_Belt_Tracer_Yellow","2000Rnd_65x39_Belt_Tracer_Yellow_Splash","2000Rnd_65x39_Belt_Yellow","2000Rnd_762x51_Belt_T_Green","2000Rnd_762x51_Belt_T_Red","2000Rnd_762x51_Belt_T_Yellow","200Rnd_65x39_Belt","200Rnd_65x39_Belt_Tracer_Green","200Rnd_65x39_Belt_Tracer_Red","200Rnd_65x39_Belt_Tracer_Yellow","5000Rnd_762x51_Belt","5000Rnd_762x51_Yellow_Belt","500Rnd_65x39_Belt","500Rnd_65x39_Belt_Tracer_Red_Splash","500Rnd_65x39_Belt_Tracer_Green_Splash","500Rnd_65x39_Belt_Tracer_Yellow_Splash"}; }; class HMG_127: LMG_RCWS { diff --git a/addons/vehicles/functions/fnc_speedLimiter.sqf b/addons/vehicles/functions/fnc_speedLimiter.sqf index 2d445be3c8..d84bdfff9f 100644 --- a/addons/vehicles/functions/fnc_speedLimiter.sqf +++ b/addons/vehicles/functions/fnc_speedLimiter.sqf @@ -28,7 +28,7 @@ if (GVAR(isSpeedLimiter)) exitWith { playSound "ACE_Sound_Click"; GVAR(isSpeedLimiter) = true; -private _maxSpeed = speed _vehicle max 10; +private _maxSpeed = speed _vehicle max 5; [{ params ["_args", "_idPFH"]; diff --git a/addons/vehicles/stringtable.xml b/addons/vehicles/stringtable.xml index 77eb0f4fc5..36ff7f99e6 100644 --- a/addons/vehicles/stringtable.xml +++ b/addons/vehicles/stringtable.xml @@ -14,6 +14,8 @@ Limitatore Attivo 速度制限を有効化 속도 제한기 켜짐 + 启用速度限制 + 啟用速度限制 Speed Limiter off @@ -28,6 +30,8 @@ Limitatore Non Attivo 速度制限を無効化 속도 제한기 꺼짐 + 停用速度限制 + 停用速度限制 Speed Limiter @@ -42,6 +46,8 @@ Limitatore di Velocità 速度制限 속도 제한기 + 速度限制器 + 速度限制器 diff --git a/addons/viewdistance/functions/fnc_initModule.sqf b/addons/viewdistance/functions/fnc_initModule.sqf index cc73e71395..3afd3ccd6a 100644 --- a/addons/viewdistance/functions/fnc_initModule.sqf +++ b/addons/viewdistance/functions/fnc_initModule.sqf @@ -9,6 +9,11 @@ * * Return Value: * None + * + * Example: + * [LOGIC; [bob, kevin], true] call ace_viewdistance_fnc_initModule + * + * Public: No */ #include "script_component.hpp" diff --git a/addons/viewdistance/stringtable.xml b/addons/viewdistance/stringtable.xml index 0102653f24..9985707422 100644 --- a/addons/viewdistance/stringtable.xml +++ b/addons/viewdistance/stringtable.xml @@ -14,6 +14,8 @@ Limitatore Distanza Visiva 視界距離の制限 시야 제한기 + 视野距离限制器 + 視野距離限制器 Allows limiting maximum view distance that can be set by players. @@ -28,6 +30,8 @@ Consente di limitare la distanza visiva massima che può essere impostata dai giocatori. プレイヤーへ最大の視界距離を制限できます。 플레이어가 볼 수 있는 최대 시야를 제한합니다. + 允许玩家最大的可视距离. + 允許玩家最大的可視距離. Enable ACE viewdistance @@ -42,6 +46,8 @@ Abilita distanza visiva ACE ACE 視界距離を有効化 ACE 시야 활성화 + 启用ACE视距 + 啟用ACE視距 Enables ACE viewdistance @@ -56,6 +62,8 @@ Abilita distanza visiva ACE ACE 視界距離を有効化 ACE 시야 활성화 + 启用ACE视距 + 啟用ACE視距 View Distance Limit @@ -70,6 +78,8 @@ Limite Distanza Visiva 視界距離の制限 시야 제한기 + 视野距离限制 + 視野距離限制 Sets the limit for how high clients can raise their view distance (up to 10000) @@ -84,6 +94,8 @@ Imposta il limite massimo a cui i client possono alzare la propria distanza visiva (massimo 10000) 各クライアントが最大まで設定できる視界距離を設定します。(最大 10000) 클라이언트가 최대 얼마나 멀리 볼 수 있는지 제한을 둡니다 (10000 까지 가능) + 设定客户端最高可显示的视野距离 (最高至10000) + 設定客戶端最高可顯示的視野距離 (最高至10000) Limit for client's view distance set here and can overridden by module @@ -98,6 +110,8 @@ Limite per la distanza visiva del client impostato qui e può essere scavalcato dal modulo クライアントへの視界距離の設定や、それをモジュールにより上書きできます 클라이언트의 시야를 이 모듈로 치환할 수 있습니다. + 玩家的视距限制可在此设定, 也可透过模块改写 + 玩家的視距限制可在此設定, 也可透過模塊改寫 Client View Distance (On Foot) @@ -112,6 +126,8 @@ Distanza Visiva Client (a Piedi) クライアント側視界距離 (地上) 클라이언트 시야 (보병) + 客户端视野距离 (步行) + 客戶端視野距離 (步行) Changes in game view distance when the player is on foot. @@ -126,6 +142,8 @@ Cambia la distanza visiva in gioco quando il giocatore è a piedi. プレイヤーが地上にいる時の視界距離を変更します。 플레이어가 보병일 경우의 시야를 바꿀 수 있습니다. + 改变玩家步行时的视野距离. + 改變玩家步行時的視野距離. Client View Distance (Land Vehicle) @@ -140,6 +158,8 @@ Distanza Visiva Client (Veicolo Terrestre) クライアント側視界距離 (車両) 클라이언트 시야 (차량) + 客户端视野距离 (地面载具) + 客戶端視野距離 (地面載具) Changes in game view distance when the player is in a land vehicle. @@ -154,6 +174,8 @@ Cambia la distanza visiva in gioco quando il giocatore è in un veicolo terrestre. プレイヤーが車両の時の視界距離を変更します。 플레이어가 차량 내부일 경우의 시야를 바꿀 수 있습니다. + 改变玩家于地面载具内时的视野距离. + 改變玩家於地面載具內時的視野距離. Client View Distance (Air Vehicle) @@ -168,6 +190,8 @@ Distanza Visiva Client (Veicoli d'Aria) クライアント側視界距離 (航空機) 클라이언트 시야 (항공기) + 客户端视野距离 (空中载具) + 客戶端視野距離 (空中載具) Changes in game view distance when the player is in an air vehicle. @@ -182,6 +206,8 @@ Cambia la distanza visiva in gioco quando il giocatore è in un mezzo aereo. プレイヤーが航空機に乗っている時の視界距離を変更します。 플레이어가 항공기 내부일 경우의 시야를 바꿀 수 있습니다. + 改变玩家于空中载具内时的视野距离. + 改變玩家於空中載具內時的視野距離. Dynamic Object View Distance @@ -196,6 +222,8 @@ Distanza Visiva Oggetti Dinamica 動的なオブジェクトの描画距離 동적 물체 시야 + 动态物件的视野距离 + 動態物件的視野距離 Sets the object view distance as a coefficient of the view distance or based on field of view. FoV Based's lowest and highest value is the value which is set when enabling the option. @@ -210,6 +238,8 @@ Imposta la distanza visiva degli oggetti come un coefficiente basato sulla distanza visiva oppure basato sul campo visivo. 視野角を元にするか、視界距離によるオブジェクト描画距離を決定します。視野角を元にするオプションを有効化した場合、視野角により最低と最高値が変動します。 설정된 시야 혹은 시계(FoV)에 계수를 적용해 물체 시야를 적용합니다. 시계를 바탕으로 하는 옵션을 활성화할 경우 시계에 의한 최저와 최고치가 변동됩니다. + 设定物件可被观察的距离, 透过视野距离或是视野角度来决定. + 設定物件可被觀察的距離, 透過視野距離或是視野角度來決定. Off @@ -224,6 +254,8 @@ Disabilitato 無効 끄기 + 关闭 + 關閉 Very Low @@ -238,6 +270,8 @@ Molto Basso 最低 매우 낮음 + 非常低 + 非常低 Low @@ -252,6 +286,8 @@ Basso 낮음 + + Medium @@ -266,6 +302,8 @@ Medio 通常 중간 + + High @@ -280,6 +318,8 @@ Alto 높음 + + Very High @@ -294,6 +334,8 @@ Molto Alto 最高 매우 높음 + 非常高 + 非常高 FoV Based @@ -307,6 +349,8 @@ Champ de vision basé 視野角を元にする 시계(FoV) + 由视野角度决定 + 由視野角度決定 View Distance: @@ -321,6 +365,8 @@ Distanza Visiva: 視界距離: 시야: + 视野距离: + 視野距離: Object View Distance is @@ -335,6 +381,8 @@ Distanza Visiva Oggetti è オブジェクト描画距離は 동적 물체 시야는 + 物件视野距离为 + 物件視野距離為 That option is invalid! The limit is @@ -349,6 +397,8 @@ Questa opzione è invalida! Il limite è このオプションは無効です!制限は 이 옵션은 불가능합니다! 제한은 + 该选项是无效的! 限制是 + 該選項是無效的! 限制是 Video Settings @@ -363,6 +413,8 @@ Impostazioni Video 映像設定 영상 설정 + 影像设定 + 影像設定 diff --git a/addons/weaponselect/functions/fnc_putWeaponAway.sqf b/addons/weaponselect/functions/fnc_putWeaponAway.sqf index d2747bf23f..0d7e93a429 100644 --- a/addons/weaponselect/functions/fnc_putWeaponAway.sqf +++ b/addons/weaponselect/functions/fnc_putWeaponAway.sqf @@ -19,4 +19,4 @@ params ["_unit"]; _unit call EFUNC(common,fixLoweredRifleAnimation); -_unit action ["SwitchWeapon", _unit, _unit, 99]; +_unit action ["SwitchWeapon", _unit, _unit, 299]; diff --git a/addons/weaponselect/functions/fnc_selectWeaponMode.sqf b/addons/weaponselect/functions/fnc_selectWeaponMode.sqf index 80784778de..c0a5f00a8a 100644 --- a/addons/weaponselect/functions/fnc_selectWeaponMode.sqf +++ b/addons/weaponselect/functions/fnc_selectWeaponMode.sqf @@ -42,7 +42,7 @@ private _mode = _modes select _index; _index = 0; while { - _index < 100 && {currentMuzzle _unit != _muzzle || {currentWeaponMode _unit != _mode}} + _index < 299 && {currentMuzzle _unit != _muzzle || {currentWeaponMode _unit != _mode}} } do { _unit action ["SwitchWeapon", _unit, _unit, _index]; _index = _index + 1; diff --git a/addons/weaponselect/functions/fnc_selectWeaponMuzzle.sqf b/addons/weaponselect/functions/fnc_selectWeaponMuzzle.sqf index 973d34f7c8..3d7f05e954 100644 --- a/addons/weaponselect/functions/fnc_selectWeaponMuzzle.sqf +++ b/addons/weaponselect/functions/fnc_selectWeaponMuzzle.sqf @@ -42,7 +42,7 @@ private _muzzle = _muzzles select _index; _index = 0; while { - _index < 100 && {currentMuzzle _unit != _muzzle} + _index < 299 && {currentMuzzle _unit != _muzzle} } do { _unit action ["SwitchWeapon", _unit, _unit, _index]; _index = _index + 1; diff --git a/addons/weaponselect/functions/fnc_selectWeaponVehicle.sqf b/addons/weaponselect/functions/fnc_selectWeaponVehicle.sqf index 7435dd30d8..883588ee4b 100644 --- a/addons/weaponselect/functions/fnc_selectWeaponVehicle.sqf +++ b/addons/weaponselect/functions/fnc_selectWeaponVehicle.sqf @@ -31,7 +31,7 @@ if (_turret isEqualTo [] && {_unit == driver _vehicle}) then { _index = 0; while { - _index < 100 && {currentWeapon _vehicle != _weapon} + _index < 299 && {currentWeapon _vehicle != _weapon} } do { _unit action ["SwitchWeapon", _vehicle, _unit, _index]; _index = _index + 1; @@ -46,7 +46,7 @@ if (_turret isEqualTo [] && {_unit == driver _vehicle}) then { _index = 0; while { - _index < 100 && {_vehicle currentWeaponTurret _turret != _weapon} + _index < 299 && {_vehicle currentWeaponTurret _turret != _weapon} } do { _unit action ["SwitchWeapon", _vehicle, _unit, _index]; _index = _index + 1; diff --git a/addons/weaponselect/functions/fnc_throwGrenade.sqf b/addons/weaponselect/functions/fnc_throwGrenade.sqf index 3f55e02f51..10a730f504 100644 --- a/addons/weaponselect/functions/fnc_throwGrenade.sqf +++ b/addons/weaponselect/functions/fnc_throwGrenade.sqf @@ -20,7 +20,7 @@ TRACE_10("firedEH:",_unit, _weapon, _muzzle, _mode, _ammo, _magazine, _projectil if (_weapon != "Throw") exitWith {}; -private _count = {_x == _magazine} count magazines _unit; +private _count = ({_x == _magazine} count uniformItems _unit) + ({_x == _magazine} count vestItems _unit) + ({_x == _magazine} count backpackItems _unit); [_magazine, _count] call FUNC(displayGrenadeTypeAndNumber); diff --git a/addons/weaponselect/stringtable.xml b/addons/weaponselect/stringtable.xml index a98ae5922c..94f80158f9 100644 --- a/addons/weaponselect/stringtable.xml +++ b/addons/weaponselect/stringtable.xml @@ -14,6 +14,8 @@ Mostrat texto ao lançar granada 手榴弾を投げるときに通知 수류탄 투척시 화면에 문자 표시 + 投掷手榴弹时显示提示讯息 + 投擲手榴彈時顯示提示訊息 Display a hint or text on grenade throw. @@ -28,6 +30,8 @@ Mostra um hint ou texto ao lançar uma granada 手榴弾を投げるときに、ヒントか文で通知します。 수류탄 투척시 화면에 문자나 힌트를 표시합니다. + 投掷手榴弹时显示提示讯息. + 投擲手榴彈時顯示提示訊息. Select Pistol @@ -42,6 +46,8 @@ Seleziona la Pistola 拳銃を選択 권총 선택 + 选择手枪 + 選擇手槍 Select Rifle @@ -56,6 +62,8 @@ Seleziona il fucile 小銃を選択 소총 선택 + 选择步枪 + 選擇步槍 Select Launcher @@ -70,6 +78,8 @@ Seleziona il lanciamissili ランチャーを選択 발사기 선택 + 选择发射器 + 選擇發射器 Select Grenade Launcher @@ -84,6 +94,8 @@ Seleziona il lanciagranate グレネード ランチャーを選択 유탄발사기 선택 + 选择榴弹发射器 + 選擇榴彈發射器 Select Binoculars @@ -98,6 +110,8 @@ Seleziona il Binocolo 双眼鏡を選択 망원경 선택 + 选择望远镜 + 選擇望遠鏡 Holster Weapon @@ -112,6 +126,8 @@ Nascondi l'arma 武器をしまう 무기 집어넣기 + 武器套 + 武器套 Engine on @@ -126,6 +142,8 @@ Включить двигатель エンジン始動 엔진 켜기 + 引擎发动 + 引擎發動 Engine off @@ -140,6 +158,8 @@ Выключить двигатель エンジン停止 엔진 끄기 + 引擎熄火 + 引擎熄火 Select Main Gun @@ -154,6 +174,8 @@ Выбрать основное оружие 主砲を選択 주포 선택 + 选择主武器 + 選擇主武器 Select Machine Gun @@ -168,6 +190,8 @@ Выбрать пулемёт 機関砲を選択 기관총 선택 + 选择机枪 + 選擇機槍 Select Missiles @@ -182,6 +206,8 @@ Выбрать ракеты ミサイルを選択 미사일 선택 + 选择导弹 + 選擇導彈 Grenade %1 @@ -196,6 +222,8 @@ Granada %1 %1 手榴弾 %1 수류탄 + 手榴弹 %1 + 手榴彈 %1 Ready Grenade @@ -210,6 +238,8 @@ Granada pronta 投てきよし 투척물 준비 + 准备手榴弹 + 準備手榴彈 Select Frag Grenade @@ -224,6 +254,8 @@ Выбрать осколочную гранату 破片手榴弾を選択 살상 투척물 선택 + 选择破片手榴弹 + 選擇破片手榴彈 Select Non-Frag Grenade @@ -238,6 +270,8 @@ Выбрать гранату その他の手榴弾を選択 비살상 투척물 선택 + 选择非破片手榴弹 + 選擇非破片手榴彈 Throw Selected Grenade @@ -252,6 +286,8 @@ Бросить выбранную гранату 選択された手榴弾を投げる 선택된 투척물 투척 + 投掷选择的手榴弹 + 投擲選擇的手榴彈 No grenades left @@ -266,6 +302,8 @@ Sem mais granadas もう手榴弾は無い 투척물 없음 + 已无手榴弹 + 已無手榴彈 No frags left @@ -280,6 +318,8 @@ Осколочных гранат нет もう破片手榴弾は無い 세열 수류탄 없음 + 已无破片手榴弹 + 已無破片手榴彈 No misc. grenades left @@ -294,6 +334,8 @@ Нелетальные гранаты закончились もうその他の手榴弾は無い 기타 투척물 없음 + 已无其他手榴弹 + 已無其他手榴彈 No grenade selected @@ -308,6 +350,8 @@ Нет выбранной гранаты 手榴弾は選択されていない 선택된 수류탄 없음 + 未选择手榴弹 + 未選擇手榴彈 Fire Smoke Launcher @@ -322,6 +366,8 @@ Lançador de fumaça 煙幕発射機を発射 연막발사기 박사 + 发射烟雾发射器 + 發射煙霧發射器 diff --git a/addons/weather/XEH_postInit.sqf b/addons/weather/XEH_postInit.sqf index 569dd87dc4..d2c6f3b7df 100644 --- a/addons/weather/XEH_postInit.sqf +++ b/addons/weather/XEH_postInit.sqf @@ -62,11 +62,9 @@ simulWeatherSync; ["ace_settingsInitialized",{ TRACE_1("ace_settingsInitialized eh",GVAR(syncRain)); - //Create a 0 sec delay PFEH to update rain every frame: + // update rain every frame: if (GVAR(syncRain)) then { - [{ - 0 setRain GVAR(ACE_rain); - }, 0, []] call CBA_fnc_addPerFrameHandler; + addMissionEventHandler ["EachFrame", {0 setRain GVAR(ACE_rain)}]; }; //Create a 1 sec delay PFEH to update wind/rain/temp/humidity: diff --git a/addons/weather/functions/fnc_calculateAirDensity.sqf b/addons/weather/functions/fnc_calculateAirDensity.sqf index bda8410ddd..61d18d7201 100644 --- a/addons/weather/functions/fnc_calculateAirDensity.sqf +++ b/addons/weather/functions/fnc_calculateAirDensity.sqf @@ -23,7 +23,8 @@ _pressure = _pressure * 100; // hPa to Pa if (_relativeHumidity > 0) then { // Saturation vapor pressure calculated according to: http://wahiduddin.net/calc/density_algorithms.htm - private _pSat = 6.1078 * 10 ^ ((7.5 * _temperature) / (_temperature + 237.3)); + // 610.78 gives pressure in Pa - https://en.wikipedia.org/wiki/Density_of_air + private _pSat = 610.78 * 10 ^ ((7.5 * _temperature) / (_temperature + 237.3)); private _vaporPressure = _relativeHumidity * _pSat; private _partialPressure = _pressure - _vaporPressure; diff --git a/addons/weather/functions/fnc_updateHumidity.sqf b/addons/weather/functions/fnc_updateHumidity.sqf index acd103615b..79569e7367 100644 --- a/addons/weather/functions/fnc_updateHumidity.sqf +++ b/addons/weather/functions/fnc_updateHumidity.sqf @@ -3,10 +3,10 @@ * Updates GVAR(currentHumidity) * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * [] call ace_weather_fnc_updateHumidity diff --git a/addons/weather/functions/fnc_updateRain.sqf b/addons/weather/functions/fnc_updateRain.sqf index b073a6a24c..eefa72cd99 100644 --- a/addons/weather/functions/fnc_updateRain.sqf +++ b/addons/weather/functions/fnc_updateRain.sqf @@ -3,10 +3,10 @@ * Updates rain based on ACE_RAIN_PARAMS * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * [] call ace_weather_fnc_updateRain diff --git a/addons/weather/functions/fnc_updateTemperature.sqf b/addons/weather/functions/fnc_updateTemperature.sqf index 6f2d911c15..879e061574 100644 --- a/addons/weather/functions/fnc_updateTemperature.sqf +++ b/addons/weather/functions/fnc_updateTemperature.sqf @@ -3,10 +3,10 @@ * Updates GVAR(currentTemperature) based on the map data * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * [] call ace_weather_fnc_updateTemperature diff --git a/addons/weather/functions/fnc_updateWind.sqf b/addons/weather/functions/fnc_updateWind.sqf index 72ae0470ba..a179c98dda 100644 --- a/addons/weather/functions/fnc_updateWind.sqf +++ b/addons/weather/functions/fnc_updateWind.sqf @@ -3,10 +3,10 @@ * Updates wind, gusts and waves based on ACE_wind * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: * [] call ace_weather_fnc_updateWind diff --git a/addons/weather/stringtable.xml b/addons/weather/stringtable.xml index 9c91d2ed8c..3849a49b07 100644 --- a/addons/weather/stringtable.xml +++ b/addons/weather/stringtable.xml @@ -14,6 +14,8 @@ Mostrar informação do vento 風速を表示 바람 정보 표시 + 显示风力资讯 + 顯示風力資訊 Show Wind Info (Toggle) @@ -28,6 +30,8 @@ Mostrar informação do vento (alternar) 風速を表示 (トグル) 바람 정보 표시 (토글) + 显示风力资讯(切换) + 顯示風力資訊(切換) Weather @@ -42,6 +46,8 @@ Meteo 天候 기후 + 天气 + 天氣 Multiplayer synchronized ACE weather module @@ -56,6 +62,8 @@ Modulo Sincronizzazione Meteo ACE Multiplayer ACE 天候モジュールではマルチプレイで同期します。 ACE 기후 모듈과 멀티플레이가 동기화됩니다. + 使用ACE天气模块来同步所有客户端的天气状态(多人游戏) + 使用ACE天氣模塊來同步所有客戶端的天氣狀態(多人遊戲) Weather propagation @@ -70,6 +78,8 @@ Propagazione Meteo 天候の統一 기후 전파 + 天气状态广播 + 天氣狀態廣播 Enables server side weather propagation @@ -84,6 +94,8 @@ Abilita propagazione meteo lato server サーバ側による天候の統一を有効化 서버의 기후를 전파합니다 + 启用伺服器的天气状态广播 + 啟用伺服器的天氣狀態廣播 ACE Weather @@ -98,6 +110,8 @@ Meteo ACE ACE 天候 ACE 기후 + ACE 天气 + ACE 天氣 Overrides the default weather (editor, mission settings) with ACE weather (map based) @@ -112,6 +126,8 @@ Scavalca il meteo default (editor, parametri missione) con il meteo ACE (basato su mappa) ACE 天候 (マップを元) による標準の天候 (エディタやミッション設定) を上書きします。 기존의 기후(에디터, 임무 설정)를 ACE 기후로 치환합니다. (지도에 따라) + 使ACE天气覆盖预设的天气 (编辑任务设置) + 使ACE天氣覆蓋預設的天氣 (編輯任務設置) Sync Rain @@ -126,6 +142,8 @@ Sincronizza Pioggia 降雨の同期 비 동기화 + 同步雨 + 同步雨 Synchronizes rain @@ -140,6 +158,8 @@ Sincronizza Pioggia 降雨の同期 비를 동기화 합니다 + 同步雨 + 同步雨 Sync Wind @@ -154,6 +174,8 @@ Sincronizza Vento 風を同期 바람 동기화 + 同步风 + 同步風 Synchronizes wind @@ -168,6 +190,8 @@ Sincronizza Vento 風を同期 바람을 동기화 합니다 + 同步风 + 同步風 Sync Misc @@ -182,6 +206,8 @@ Sincronizza Misto その他を同期 기타 동기화 + 同步杂项 + 同步雜項 Synchronizes lightnings, rainbow, fog,... @@ -196,6 +222,8 @@ Sincronizza lampi, arcobaleni, nebbia,... ライティングや虹、霧などを同期 번개라던가, 무지개, 안개등을 동기화 합니다 + 同步闪电, 彩虹, 雾等等... + 同步閃電, 彩虹, 霧等等... Update Interval @@ -210,6 +238,8 @@ Intervallo Aggiornamenti 更新間隔 갱신 간격 + 更新间隔 + 更新間隔 Defines the interval (seconds) between weather updates @@ -224,6 +254,8 @@ Definisce l'intervallo (in secondi) tra aggiornamenti del meteo 天候を更新する間隔を定義します。(秒) 기후를 갱신 하는 간격을 초 단위로 정합니다. + 设定天气更新的时间间隔(秒) + 設定天氣更新的時間間隔(秒) diff --git a/addons/winddeflection/functions/fnc_handleFired.sqf b/addons/winddeflection/functions/fnc_handleFired.sqf index e78620471d..2411c608d4 100644 --- a/addons/winddeflection/functions/fnc_handleFired.sqf +++ b/addons/winddeflection/functions/fnc_handleFired.sqf @@ -6,7 +6,7 @@ * None. Parameters inherited from EFUNC(common,firedEH) * * Return Value: - * Nothing + * None * * Example: * [clientFiredBIS-XEH] call ace_advanced_ballistics_fnc_handleFired diff --git a/addons/winddeflection/functions/fnc_initModuleSettings.sqf b/addons/winddeflection/functions/fnc_initModuleSettings.sqf index 037ce15c47..52847d15ee 100644 --- a/addons/winddeflection/functions/fnc_initModuleSettings.sqf +++ b/addons/winddeflection/functions/fnc_initModuleSettings.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_winddeflection_fnc_initModuelSettings + * * Public: No */ diff --git a/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf b/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf index 358a434dfa..5920bbb3e4 100644 --- a/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf +++ b/addons/winddeflection/functions/fnc_updateTrajectoryPFH.sqf @@ -7,9 +7,10 @@ * 1: airFriction - air friction of the bullet * * Return Value: - * Nothing + * None * * Example: + * [bullet, 2] call ace_winddeflection_fnc_updateTrajectoryPFH * * Public: No */ diff --git a/addons/winddeflection/stringtable.xml b/addons/winddeflection/stringtable.xml index 86622d0558..a9290c8ab0 100644 --- a/addons/winddeflection/stringtable.xml +++ b/addons/winddeflection/stringtable.xml @@ -14,6 +14,8 @@ Informação do vento 風の情報 바람 정보 + 风力资讯 + 風力資訊 Direction: %1 @@ -28,6 +30,8 @@ Direção: %1 風向: %1 방향: %1 + 风向: %1 + 風向: %1 Speed: %1 m/s @@ -42,6 +46,8 @@ Velocidade: %1 m/s 風速: %1 m/s 풍속: %1 m/s + 风速: %1 m/s + 風速: %1 m/s Weather Information @@ -56,6 +62,8 @@ Informação Meteorológica 天候の情報 기상 정보 + 天气资讯 + 天氣資訊 Humidity: %1% @@ -70,6 +78,8 @@ Humidade: %1% 湿度: %1% 습도: %1% + 湿度: %1% + 濕度: %1% Wind Deflection @@ -84,6 +94,8 @@ Deviazione del Vento 風向による変化 풍향 변화 + 风偏 + 風偏 Wind Deflection @@ -98,6 +110,8 @@ Deviazione del Vento 風向による変化 풍향 변화 + 风偏 + 風偏 Enables wind deflection @@ -112,6 +126,8 @@ Abilita deviazione del vento 風向による変化を有効化 풍향 변화를 적용합니다 + 开启风偏效果 + 開啟風偏效果 Vehicle Enabled @@ -126,6 +142,8 @@ Abilita per Veicoli 車両へ有効化 차량 적용 + 启用风偏给载具 + 啟用風偏給載具 Enables wind deflection for static/vehicle gunners @@ -140,6 +158,8 @@ Abilita deviazione del vento per artiglieri di statiche/veicoli 重火器や車両へ、風による変化を有効化 차량이나 거치식 무기 사수에게 풍향 변화를 적용합니다 + 使风偏作用在固定式武器与载具炮手身上 + 使風偏作用在固定式武器與載具砲手身上 Simulation Interval @@ -154,6 +174,8 @@ Intervallo Simulazione シミュレーションの間隔 재현 간격 + 模拟间隔 + 模擬間隔 Defines the interval between every calculation step @@ -168,6 +190,8 @@ Definisce l'intervallo tra ogni passaggio di calcolo 各計算に適用させる間隔を定義します 매 계산마다의 간격을 정의합니다 + 定义每个计算之间的时间间隔 + 定義每個計算之間的時間間隔 Simulation Radius @@ -182,6 +206,8 @@ Raggio Simulazione シミュレーション半径 재현 범위 + 模拟半径 + 模擬半徑 Defines the radius around the player (in meters) at which projectiles are wind deflected @@ -196,6 +222,8 @@ Definisce il raggio attorno al giocatore (in metri) dove viene applicata la deviazione del vento ai proiettili プレイヤーの周囲に適用させる風による弾道の変化の半径を定義します (メートル) 플레이어 주위로 발사체가 풍향 변화의 영향을 받는 범위를 정합니다 (미터) + 定义玩家多少半径范围内(单位公尺)子弹会受到风偏的引响 + 定義玩家多少半徑範圍內(單位公尺)子彈會受到風偏的引響 Wind influence on projectiles trajectory @@ -210,6 +238,8 @@ Influenza del vento sulla traiettoria dei proiettili 風が弾道へ影響させます 발사체의 궤도에 풍향 변화를 줍니다. + 风力的大小会引响到弹道的轨迹 + 風力的大小會引響到彈道的軌跡 diff --git a/addons/yardage450/CfgVehicles.hpp b/addons/yardage450/CfgVehicles.hpp index d8f2ccabe3..2dc52de68a 100644 --- a/addons/yardage450/CfgVehicles.hpp +++ b/addons/yardage450/CfgVehicles.hpp @@ -6,15 +6,15 @@ class CfgVehicles { scopeCurator = 2; displayName = CSTRING(DisplayName); vehicleClass = "Items"; - class TransportWeapons { - MACRO_ADDWEAPON(ACE_Yardage450,1); + class TransportItems { + MACRO_ADDITEM(ACE_Yardage450,1); }; }; class Box_NATO_Support_F; class ACE_Box_Misc: Box_NATO_Support_F { - class TransportWeapons { - MACRO_ADDWEAPON(ACE_Yardage450,4); + class TransportItems { + MACRO_ADDITEM(ACE_Yardage450,4); }; }; }; diff --git a/addons/yardage450/functions/fnc_acquireTarget.sqf b/addons/yardage450/functions/fnc_acquireTarget.sqf index 2b04900171..d3709186c9 100644 --- a/addons/yardage450/functions/fnc_acquireTarget.sqf +++ b/addons/yardage450/functions/fnc_acquireTarget.sqf @@ -3,12 +3,13 @@ * Fires the laser to acquire the target * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: + * call ace_yardage450_fnc_acquireTarget * * Public: No */ diff --git a/addons/yardage450/functions/fnc_turnOn.sqf b/addons/yardage450/functions/fnc_turnOn.sqf index a56bddb016..28e9c1da2d 100644 --- a/addons/yardage450/functions/fnc_turnOn.sqf +++ b/addons/yardage450/functions/fnc_turnOn.sqf @@ -3,12 +3,13 @@ * Shows the Yardage 450 screen elements * * Arguments: - * Nothing + * None * * Return Value: - * Nothing + * None * * Example: + * call ace_yardage450_fnc_acquireTarget * * Public: No */ diff --git a/addons/yardage450/stringtable.xml b/addons/yardage450/stringtable.xml index 9b364d212d..6ab95aff7f 100644 --- a/addons/yardage450/stringtable.xml +++ b/addons/yardage450/stringtable.xml @@ -14,6 +14,8 @@ Yardage 450 ヤードエイジ 450 Yardage 450 + Yardage 450 + Yardage 450 Laser Rangefinder @@ -28,6 +30,8 @@ Télémètre laser レーザー測距機 레이저 거리측정기 + 雷射测距仪 + 雷射測距儀 Yardage 450 - Power Button @@ -42,6 +46,8 @@ Yardage 450 - bouton d'alimentation ヤードエイジ 450 - 起動ボタン Yardage 450 - 전원 버튼 + Yardage 450 - 电源按钮 + Yardage 450 - 電源按鈕 diff --git a/addons/zeus/CfgVehicles.hpp b/addons/zeus/CfgVehicles.hpp index c7111e42bc..9918764462 100644 --- a/addons/zeus/CfgVehicles.hpp +++ b/addons/zeus/CfgVehicles.hpp @@ -86,6 +86,7 @@ class CfgVehicles { class GVAR(moduleBase): Module_F { author = ECSTRING(common,ACETeam); category = "ACE"; + function = QEFUNC(common,dummy); functionPriority = 1; isGlobal = 1; isTriggerActivated = 0; @@ -160,6 +161,12 @@ class CfgVehicles { displayName = CSTRING(ModuleSearchNearby_DisplayName); function = QFUNC(moduleSearchNearby); }; + class GVAR(moduleSuppressiveFire): GVAR(moduleBase) { + curatorCanAttach = 1; + category = QGVAR(AI); + displayName = CSTRING(ModuleSuppressiveFire_DisplayName); + function = QFUNC(moduleSuppressiveFire); + }; class GVAR(moduleSetMedic): GVAR(moduleBase) { curatorCanAttach = 1; category = QGVAR(Medical); @@ -207,4 +214,16 @@ class CfgVehicles { function = QFUNC(moduleUnconscious); icon = QPATHTOF(UI\Icon_Module_Zeus_Unconscious_ca.paa); }; + class GVAR(AddFullArsenal): GVAR(moduleBase) { + curatorCanAttach = 1; + category = QGVAR(Utility); + displayName = CSTRING(moduleAddFullArsenal_displayName); + function = QFUNC(moduleAddArsenal); + }; + class GVAR(RemoveFullArsenal): GVAR(moduleBase) { + curatorCanAttach = 1; + category = QGVAR(Utility); + displayName = CSTRING(moduleRemoveArsenal_displayName); + function = QFUNC(moduleRemoveArsenal); + }; }; diff --git a/addons/zeus/XEH_PREP.hpp b/addons/zeus/XEH_PREP.hpp index a04b0a6d2c..a3f269f638 100644 --- a/addons/zeus/XEH_PREP.hpp +++ b/addons/zeus/XEH_PREP.hpp @@ -4,22 +4,28 @@ PREP(bi_moduleCurator); PREP(bi_moduleMine); PREP(bi_moduleProjectile); PREP(bi_moduleRemoteControl); +PREP(getModuleDestination); PREP(handleZeusUnitAssigned); +PREP(moduleAddArsenal); PREP(moduleAddSpareTrack); PREP(moduleAddSpareWheel); PREP(moduleAddOrRemoveFRIES); PREP(moduleCaptive); PREP(moduleGlobalSetSkill); PREP(moduleGroupSide); +PREP(moduleRemoveArsenal); PREP(moduleSearchNearby); PREP(moduleSetMedic); PREP(moduleSetMedicalVehicle); PREP(moduleSetMedicalFacility); PREP(moduleSimulation); +PREP(moduleSuppressiveFire); +PREP(moduleSuppressiveFireLocal); PREP(moduleSurrender); PREP(moduleTeleportPlayers); PREP(moduleUnconscious); PREP(moduleZeusSettings); +PREP(showMessage); PREP(ui_attributeCargo); //PREP(ui_attributePosition); PREP(ui_attributeRadius); diff --git a/addons/zeus/XEH_postInit.sqf b/addons/zeus/XEH_postInit.sqf index 44bd406552..adf3d75a9b 100644 --- a/addons/zeus/XEH_postInit.sqf +++ b/addons/zeus/XEH_postInit.sqf @@ -10,10 +10,12 @@ // Global skill module PVs values for persistence, just listen for the PV QGVAR(GlobalSkillAI) addPublicVariableEventHandler FUNC(moduleGlobalSetSkill); +[QGVAR(moveToRespawnPosition), BIS_fnc_moveToRespawnPosition] call CBA_fnc_addEventHandler; [QGVAR(moduleDefendArea), CBA_fnc_taskDefend] call CBA_fnc_addEventHandler; [QGVAR(modulePatrolArea), CBA_fnc_taskPatrol] call CBA_fnc_addEventHandler; [QGVAR(moduleSearchNearby), CBA_fnc_searchNearby] call CBA_fnc_addEventHandler; [QGVAR(moduleSearchArea), CBA_fnc_taskSearchArea] call CBA_fnc_addEventHandler; +[QGVAR(suppressiveFire), LINKFUNC(moduleSuppressiveFireLocal)] call CBA_fnc_addEventHandler; // Editable object commands must be ran on server, this events are used in the respective module if (isServer) then { diff --git a/addons/zeus/config.cpp b/addons/zeus/config.cpp index 248d2af71c..d81ac5c074 100644 --- a/addons/zeus/config.cpp +++ b/addons/zeus/config.cpp @@ -12,6 +12,9 @@ class CfgPatches { QGVAR(moduleSearchArea), QGVAR(moduleSearchNearby), QGVAR(moduleSimulation), + QGVAR(moduleSuppressiveFire), + QGVAR(AddFullArsenal), + QGVAR(RemoveFullArsenal), QGVAR(moduleTeleportPlayers) }; weapons[] = {}; diff --git a/addons/zeus/functions/fnc_addObjectToCurator.sqf b/addons/zeus/functions/fnc_addObjectToCurator.sqf index cab5b3da6f..230f035eb3 100644 --- a/addons/zeus/functions/fnc_addObjectToCurator.sqf +++ b/addons/zeus/functions/fnc_addObjectToCurator.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [object] call ace_zeus_fnc_addObjectToCurator + * * Public: No */ diff --git a/addons/zeus/functions/fnc_bi_moduleCurator.sqf b/addons/zeus/functions/fnc_bi_moduleCurator.sqf index 66395fbb0c..b556b08197 100644 --- a/addons/zeus/functions/fnc_bi_moduleCurator.sqf +++ b/addons/zeus/functions/fnc_bi_moduleCurator.sqf @@ -12,6 +12,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_bi_moduleCurator + * * Public: No */ diff --git a/addons/zeus/functions/fnc_bi_moduleMine.sqf b/addons/zeus/functions/fnc_bi_moduleMine.sqf index 940dd94f38..434130ffe6 100644 --- a/addons/zeus/functions/fnc_bi_moduleMine.sqf +++ b/addons/zeus/functions/fnc_bi_moduleMine.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_bi_moduleMine + * * Public: No */ diff --git a/addons/zeus/functions/fnc_bi_moduleProjectile.sqf b/addons/zeus/functions/fnc_bi_moduleProjectile.sqf index 70002cc215..eaad90c6d6 100644 --- a/addons/zeus/functions/fnc_bi_moduleProjectile.sqf +++ b/addons/zeus/functions/fnc_bi_moduleProjectile.sqf @@ -12,6 +12,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_bi_moduleProjectile + * * Public: No */ diff --git a/addons/zeus/functions/fnc_bi_moduleRemoteControl.sqf b/addons/zeus/functions/fnc_bi_moduleRemoteControl.sqf index 79cd35477f..6d2d3fd950 100644 --- a/addons/zeus/functions/fnc_bi_moduleRemoteControl.sqf +++ b/addons/zeus/functions/fnc_bi_moduleRemoteControl.sqf @@ -11,6 +11,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_bi_moduleRemoteControl + * * Public: No */ diff --git a/addons/zeus/functions/fnc_getModuleDestination.sqf b/addons/zeus/functions/fnc_getModuleDestination.sqf new file mode 100644 index 0000000000..d6a19d69b1 --- /dev/null +++ b/addons/zeus/functions/fnc_getModuleDestination.sqf @@ -0,0 +1,79 @@ +/* + * Author: PabstMirror + * Allows zeus to click to indicate a 3d position. + * + * Arguments: + * 0: The souce object + * 1: Code to run when position is ready + * - Code is passed [0: Successful , 1: Object , 2: Position ASL ] + * 2: Text + * 3: Icon image file + * 4: Icon color + * + * Return Value: + * None + * + * Example: + * [player, {systemChat format ["Done %1", _this]}] call ace_zeus_fnc_getModuleDestination + * + * Public: No + */ +#include "script_component.hpp" + +params ["_object", "_code", ["_text", ""], ["_icon", "\a3\ui_f\data\IGUI\Cfg\Cursors\select_target_ca.paa"], ["_color", [1,0,0,1]]]; + +if (missionNamespace getVariable [QGVAR(moduleDestination_running), false]) exitWith { + [false, _object, [0,0,0]] call _code; + ERROR("getModuleDestination already running"); +}; + +GVAR(moduleDestination_running) = true; + +// Add mouse button eh for the zeus display (triggered from 2d or 3d) +GVAR(moduleDestination_displayEH) = [(findDisplay 312), "mouseButtonDown", { + params ["", "_mouseButton"]; + if (_mouseButton != 0) exitWith {}; // Only watch for LMB + _thisArgs params ["_object", "_code"]; + private _mousePosASL = if (ctrlShown ((findDisplay 312) displayCtrl 50)) then { + private _pos2d = (((findDisplay 312) displayCtrl 50) ctrlMapScreenToWorld getMousePosition); + _pos2d set [2, getTerrainHeightASL _pos2d]; + _pos2d + } else { + AGLToASL (screenToWorld getMousePosition); + }; + TRACE_2("placed",_object,_mousePosASL); + [true, _object, _mousePosASL] call _code; + GVAR(moduleDestination_running) = false; +}, [_object, _code]] call CBA_fnc_addBISEventHandler; + +// Add draw eh for the zeus map - draws the 2d icon and line +GVAR(moduleDestination_mapDrawEH) = [((findDisplay 312) displayCtrl 50), "draw", { + params ["_mapCtrl"]; + _thisArgs params ["_object", "_text", "_icon", "_color"]; + + private _pos2d = (((findDisplay 312) displayCtrl 50) ctrlMapScreenToWorld getMousePosition); + _mapCtrl drawIcon [_icon, _color, _pos2d, 24, 24, 45, _text, 1, 0.03, "TahomaB", "right"]; + _mapCtrl drawLine [getPos _object, _pos2d, _color]; +}, [_object, _text, _icon, _color]] call CBA_fnc_addBISEventHandler; + +[{ + (_this select 0) params ["_object", "_code", "_text", "_icon", "_color"]; + if ((isNull _object) || {isNull findDisplay 312} || {!isNull findDisplay 49}) then { + TRACE_3("null-exit",isNull _object,isNull findDisplay 312,isNull findDisplay 49); + GVAR(moduleDestination_running) = false; + [false, _object, [0,0,0]] call _code; + }; + if (GVAR(moduleDestination_running)) then { + // Draw the 3d icon and line + private _mousePosAGL = screenToWorld getMousePosition; + drawIcon3D [_icon, _color, _mousePosAGL, 1.5, 1.5, 45, _text]; + drawLine3D [_mousePosAGL, ASLtoAGL (getPosASL _object), _color];; + } else { + TRACE_3("cleaning up",_this select 1, GVAR(moduleDestination_displayEH), GVAR(moduleDestination_mapDrawEH)); + (_this select 1) call CBA_fnc_removePerFrameHandler; + (findDisplay 312) displayRemoveEventHandler ["mouseButtonDown", GVAR(moduleDestination_displayEH)]; + ((findDisplay 312) displayCtrl 50) ctrlRemoveEventHandler ["draw", GVAR(moduleDestination_mapDrawEH)]; + GVAR(moduleDestination_displayEH) = nil; + GVAR(moduleDestination_mapDrawEH) = nil; + }; +}, 0, [_object, _code, _text, _icon, _color]] call CBA_fnc_addPerFrameHandler; diff --git a/addons/zeus/functions/fnc_handleZeusUnitAssigned.sqf b/addons/zeus/functions/fnc_handleZeusUnitAssigned.sqf index fada3f1e32..8c0c4370d2 100644 --- a/addons/zeus/functions/fnc_handleZeusUnitAssigned.sqf +++ b/addons/zeus/functions/fnc_handleZeusUnitAssigned.sqf @@ -14,6 +14,9 @@ * Return Value: * None * + * Example: + * [LOGIC, bob] call ace_zeus_fnc_handleZeusUnitAssigned + * * Public: No */ diff --git a/addons/zeus/functions/fnc_moduleAddArsenal.sqf b/addons/zeus/functions/fnc_moduleAddArsenal.sqf new file mode 100644 index 0000000000..b8eed64d76 --- /dev/null +++ b/addons/zeus/functions/fnc_moduleAddArsenal.sqf @@ -0,0 +1,38 @@ +/* + * Author: alganthe + * Add a full arsenal to an object + * + * Arguments: + * 0: The module logic + * + * Return Value: + * None + * + * Public: No + */ +#include "script_component.hpp" + +params ["_logic"]; +if (!local _logic) exitWith {}; + +private _object = attachedTo _logic; +TRACE_3("moduleAddArsenal",_logic,_object,typeOf _object); + +switch (true) do { + case (isNull _object): { + [LSTRING(NothingSelected)] call FUNC(showMessage); + }; + case (isPlayer _object): { + ["str_a3_cfgvehicles_moduleremotecontrol_f_errorPlayer"] call FUNC(showMessage); + }; + case (!alive _object): { + [LSTRING(OnlyAlive)] call FUNC(showMessage); + }; + default { + TRACE_1("BIS_fnc_arsenal: AmmoboxInit",_object); + // Global Effects: "Action to access the Arsenal will be added automatically on all clients." + ["AmmoboxInit", [_object, true]] call BIS_fnc_arsenal; + }; +}; + +deleteVehicle _logic; diff --git a/addons/zeus/functions/fnc_moduleAddOrRemoveFRIES.sqf b/addons/zeus/functions/fnc_moduleAddOrRemoveFRIES.sqf index 5c8998b767..5b05d256f4 100644 --- a/addons/zeus/functions/fnc_moduleAddOrRemoveFRIES.sqf +++ b/addons/zeus/functions/fnc_moduleAddOrRemoveFRIES.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_moduleAddOrRemoveFRIES + * * Public: No */ #include "script_component.hpp" @@ -19,27 +22,27 @@ params ["_logic", "_units", "_activated"]; if !(_activated && {local _logic}) exitWith {}; if !(["ace_fastroping"] call EFUNC(common,isModLoaded)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { (GETMVAR(BIS_fnc_curatorObjectPlaced_mouseOver,[""])) params ["_mouseOverType", "_mouseOverUnit"]; if (_mouseOverType != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { if !(alive _mouseOverUnit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { private _config = configFile >> "CfgVehicles" >> typeOf _mouseOverUnit; private _displayName = getText (_config >> "displayName"); if !(isNumber (_config >> QEGVAR(fastroping,enabled))) then { - [[LSTRING(NotFastRopeCompatible), _displayName]] call EFUNC(common,displayTextStructured); + [LSTRING(NotFastRopeCompatible), _displayName] call FUNC(showMessage); } else { private _fries = GETVAR(_mouseOverUnit,EGVAR(fastroping,FRIES),objNull); if (isNull _fries) then { [QGVAR(equipFries), [_mouseOverUnit]] call CBA_fnc_serverEvent; } else { if ([_mouseOverUnit] call EFUNC(fastroping,canCutRopes)) then { - [[LSTRING(CantRemoveFRIES), _displayName]] call EFUNC(common,displayTextStructured); + [LSTRING(CantRemoveFRIES), _displayName] call FUNC(showMessage); } else { [_mouseOverUnit] call EFUNC(fastroping,cutRopes); deleteVehicle _fries; diff --git a/addons/zeus/functions/fnc_moduleAddSpareTrack.sqf b/addons/zeus/functions/fnc_moduleAddSpareTrack.sqf index 2926fafcf9..56d3dca9d9 100644 --- a/addons/zeus/functions/fnc_moduleAddSpareTrack.sqf +++ b/addons/zeus/functions/fnc_moduleAddSpareTrack.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_moduleAddSpareTrack + * * Public: No */ #include "script_component.hpp" @@ -19,18 +22,18 @@ params ["_logic", "_units", "_activated"]; if !(_activated && local _logic) exitWith {}; if !(["ace_cargo"] call EFUNC(common,isModLoaded) && ["ace_repair"] call EFUNC(common,isModLoaded)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { (GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""])) params ["_mouseOverType", "_mouseOverUnit"]; if (_mouseOverType != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { if !(alive _mouseOverUnit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { if (getNumber (configFile >> "CfgVehicles" >> "ACE_Track" >> QEGVAR(cargo,size)) > [_mouseOverUnit] call EFUNC(cargo,getCargoSpaceLeft)) then { - [LSTRING(OnlyEnoughCargoSpace)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyEnoughCargoSpace)] call FUNC(showMessage); } else { ["ace_addCargo", ["ACE_Track", _mouseOverUnit, 1, true]] call CBA_fnc_localEvent; }; diff --git a/addons/zeus/functions/fnc_moduleAddSpareWheel.sqf b/addons/zeus/functions/fnc_moduleAddSpareWheel.sqf index 2c051c94b6..da9327af7a 100644 --- a/addons/zeus/functions/fnc_moduleAddSpareWheel.sqf +++ b/addons/zeus/functions/fnc_moduleAddSpareWheel.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_moduleAddSpareWheel + * * Public: No */ #include "script_component.hpp" @@ -19,18 +22,18 @@ params ["_logic", "_units", "_activated"]; if !(_activated && local _logic) exitWith {}; if !(["ace_cargo"] call EFUNC(common,isModLoaded) && ["ace_repair"] call EFUNC(common,isModLoaded)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { (GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""])) params ["_mouseOverType", "_mouseOverUnit"]; if (_mouseOverType != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { if !(alive _mouseOverUnit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { if (getNumber (configFile >> "CfgVehicles" >> "ACE_Wheel" >> QEGVAR(cargo,size)) > [_mouseOverUnit] call EFUNC(cargo,getCargoSpaceLeft)) then { - [LSTRING(OnlyEnoughCargoSpace)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyEnoughCargoSpace)] call FUNC(showMessage); } else { ["ace_addCargo", ["ACE_Wheel", _mouseOverUnit, 1, true]] call CBA_fnc_localEvent; }; diff --git a/addons/zeus/functions/fnc_moduleCaptive.sqf b/addons/zeus/functions/fnc_moduleCaptive.sqf index 732c165fa4..dc216e6289 100644 --- a/addons/zeus/functions/fnc_moduleCaptive.sqf +++ b/addons/zeus/functions/fnc_moduleCaptive.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_moduleCaptive + * * Public: No */ @@ -21,20 +24,20 @@ private ["_mouseOver", "_unit", "_captive"]; if !(_activated && local _logic) exitWith {}; if (isNil QEFUNC(captives,setHandcuffed)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { _mouseOver = GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""]); if ((_mouseOver select 0) != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { _unit = effectivecommander (_mouseOver select 1); if !(_unit isKindOf "CAManBase") then { - [LSTRING(OnlyInfantry)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyInfantry)] call FUNC(showMessage); } else { if !(alive _unit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { _captive = GETVAR(_unit,EGVAR(captives,isHandcuffed),false); // Event initalized by ACE_Captives diff --git a/addons/zeus/functions/fnc_moduleGlobalSetSkill.sqf b/addons/zeus/functions/fnc_moduleGlobalSetSkill.sqf index 58e7ad19c5..ce864e85b0 100644 --- a/addons/zeus/functions/fnc_moduleGlobalSetSkill.sqf +++ b/addons/zeus/functions/fnc_moduleGlobalSetSkill.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_moduleGlobalSetSkill + * * Public: No */ diff --git a/addons/zeus/functions/fnc_moduleRemoveArsenal.sqf b/addons/zeus/functions/fnc_moduleRemoveArsenal.sqf new file mode 100644 index 0000000000..9e267e4cf5 --- /dev/null +++ b/addons/zeus/functions/fnc_moduleRemoveArsenal.sqf @@ -0,0 +1,41 @@ +/* + * Author: alganthe + * Remove arsenal from an object + * + * Arguments: + * 0: The module logic + * + * Return Value: + * None + * + * Public: No +*/ + +#include "script_component.hpp" + +params ["_logic"]; +if (!local _logic) exitWith {}; + +private _object = attachedTo _logic; +TRACE_3("moduleRemoveArsenal",_logic,_object,typeOf _object); + +switch (true) do { + case (isNull _object): { + [LSTRING(NothingSelected)] call FUNC(showMessage); + }; + case (isPlayer _object): { + ["str_a3_cfgvehicles_moduleremotecontrol_f_errorPlayer"] call FUNC(showMessage); + }; + case (!alive _object): { + [LSTRING(OnlyAlive)] call FUNC(showMessage); + }; + default { + TRACE_1("Calling removeVirtualXXXCargo functions",_object); + [_object, (_object call BIS_fnc_getVirtualItemCargo), true] call BIS_fnc_removeVirtualItemCargo; + [_object, (_object call BIS_fnc_getVirtualWeaponCargo), true] call BIS_fnc_removeVirtualWeaponCargo; + [_object, (_object call BIS_fnc_getVirtualMagazineCargo), true] call BIS_fnc_removeVirtualMagazineCargo; + [_object, (_object call BIS_fnc_getVirtualBackpackCargo), true] call BIS_fnc_removeVirtualBackpackCargo; + }; +}; + +deleteVehicle _logic; diff --git a/addons/zeus/functions/fnc_moduleSearchNearby.sqf b/addons/zeus/functions/fnc_moduleSearchNearby.sqf index 76f77c489e..30d545e6d9 100644 --- a/addons/zeus/functions/fnc_moduleSearchNearby.sqf +++ b/addons/zeus/functions/fnc_moduleSearchNearby.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_moduleSearchNearby + * * Public: No */ @@ -27,7 +30,7 @@ scopeName "Main"; private _fnc_errorAndClose = { params ["_msg"]; deleteVehicle _logic; - [_msg] call EFUNC(common,displayTextStructured); + [_msg] call FUNC(showMessage); breakOut "Main"; }; diff --git a/addons/zeus/functions/fnc_moduleSetMedic.sqf b/addons/zeus/functions/fnc_moduleSetMedic.sqf index 14dfca4f6f..c9dba36e40 100644 --- a/addons/zeus/functions/fnc_moduleSetMedic.sqf +++ b/addons/zeus/functions/fnc_moduleSetMedic.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_moduleSetMedic + * * Public: No */ @@ -21,23 +24,23 @@ private ["_mouseOver", "_unit", "_medicN"]; if !(_activated && local _logic) exitWith {}; if !(["ACE_Medical"] call EFUNC(common,isModLoaded)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { _mouseOver = GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""]); if ((_mouseOver select 0) != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { _unit = effectivecommander (_mouseOver select 1); if !(_unit isKindOf "CAManBase") then { - [LSTRING(OnlyInfantry)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyInfantry)] call FUNC(showMessage); } else { if !(alive _unit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { if (GETVAR(_unit,EGVAR(captives,isHandcuffed),false)) then { - [LSTRING(OnlyNonCaptive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyNonCaptive)] call FUNC(showMessage); } else { _medicN = GETVAR(_unit,EGVAR(medical,medicClass),0); if (_medicN < 1) then { diff --git a/addons/zeus/functions/fnc_moduleSetMedicalFacility.sqf b/addons/zeus/functions/fnc_moduleSetMedicalFacility.sqf index 4c26ccdd71..479cfad803 100644 --- a/addons/zeus/functions/fnc_moduleSetMedicalFacility.sqf +++ b/addons/zeus/functions/fnc_moduleSetMedicalFacility.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_moduleSetMedicalFacility + * * Public: No */ @@ -21,23 +24,23 @@ private ["_mouseOver", "_unit"]; if !(_activated && local _logic) exitWith {}; if !(["ACE_Medical"] call EFUNC(common,isModLoaded)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { _mouseOver = GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""]); if ((_mouseOver select 0) != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { _unit = (_mouseOver select 1); if (_unit isKindOf "Man" || {!(_unit isKindOf "Building")}) then { - [LSTRING(OnlyStructures)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyStructures)] call FUNC(showMessage); } else { if !(alive _unit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { if (GETVAR(_unit,EGVAR(captives,isHandcuffed),false)) then { - [LSTRING(OnlyNonCaptive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyNonCaptive)] call FUNC(showMessage); } else { if (!(GETVAR(_unit,EGVAR(medical,isMedicalFacility),false))) then { _unit setVariable [QEGVAR(medical,isMedicalFacility), true, true]; diff --git a/addons/zeus/functions/fnc_moduleSetMedicalVehicle.sqf b/addons/zeus/functions/fnc_moduleSetMedicalVehicle.sqf index abbc26b1ed..c295b609d2 100644 --- a/addons/zeus/functions/fnc_moduleSetMedicalVehicle.sqf +++ b/addons/zeus/functions/fnc_moduleSetMedicalVehicle.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_moduleSetMedicalVehicle + * * Public: No */ @@ -21,23 +24,23 @@ private ["_mouseOver", "_unit", "_medicN"]; if !(_activated && local _logic) exitWith {}; if !(["ACE_Medical"] call EFUNC(common,isModLoaded)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { _mouseOver = GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""]); if ((_mouseOver select 0) != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { _unit = (_mouseOver select 1); if (_unit isKindOf "Man" || {_unit isKindOf "Building"}) then { - [LSTRING(OnlyVehicles)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyVehicles)] call FUNC(showMessage); } else { if !(alive _unit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { if (GETVAR(_unit,EGVAR(captives,isHandcuffed),false)) then { - [LSTRING(OnlyNonCaptive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyNonCaptive)] call FUNC(showMessage); } else { _medicN = GETVAR(_unit,EGVAR(medical,medicClass),0); if (_medicN < 1) then { diff --git a/addons/zeus/functions/fnc_moduleSimulation.sqf b/addons/zeus/functions/fnc_moduleSimulation.sqf index fab59e48eb..fc6d6e4a06 100644 --- a/addons/zeus/functions/fnc_moduleSimulation.sqf +++ b/addons/zeus/functions/fnc_moduleSimulation.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [LOGIC] call ace_zeus_fnc_moduleSimulation + * * Public: No */ @@ -19,7 +22,7 @@ if !(local _logic) exitWith {}; private _object = attachedTo _logic; if (isNull _object) then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { [QEGVAR(common,enableSimulationGlobal), [_object, !(simulationEnabled _object)]] call CBA_fnc_serverEvent; }; diff --git a/addons/zeus/functions/fnc_moduleSuppressiveFire.sqf b/addons/zeus/functions/fnc_moduleSuppressiveFire.sqf new file mode 100644 index 0000000000..1d510fec55 --- /dev/null +++ b/addons/zeus/functions/fnc_moduleSuppressiveFire.sqf @@ -0,0 +1,120 @@ +/* + * Author: bux, PabstMirror + * Commands the selected unit or group to start suppressive fire on the unit, group or location the module is placed on + * + * Arguments: + * 0: The module logic + * 1: Synchronized units + * 2: Activated + * + * Return Value: + * None + * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_moduleSuppressiveFire + * + * Public: No + */ +// #define DRAW_ZEUS_INFO +#include "script_component.hpp" + +if (canSuspend) exitWith {[FUNC(moduleSuppressiveFire), _this] call CBA_fnc_directCall;}; + +params ["_logic", "_units", "_activated"]; + +if !(_activated && local _logic) exitWith {}; + +// Validate the module target +private _unit = effectiveCommander (attachedTo _logic); +TRACE_3("moduleSuppressiveFire placed",_unit,typeOf _unit,typeOf _logic); + +deleteVehicle _logic; // cleanup logic now, we just needed it to get the attached unit + +if (isNull _unit) exitWith { + [LSTRING(NothingSelected)] call FUNC(showMessage); +}; +if (!alive _unit) exitWith { + [localize LSTRING(OnlyAlive)] call FUNC(showMessage); +}; +if ([_unit] call EFUNC(common,isPlayer)) exitWith { + ["str_a3_cfgvehicles_moduleremotecontrol_f_errorPlayer"] call FUNC(showMessage); +}; + +[_unit, { + params ["_successful", "_unit", "_mousePosASL"]; + TRACE_3("getModuleDestination return",_successful,_unit,_mousePosASL); + if (!_successful) exitWith {}; + if (!alive _unit) exitWith {}; + private _vehicle = vehicle _unit; + + private _targetASL = _mousePosASL vectorAdd [0,0,0.6]; // mouse pos is at ground level zero, raise up a bit; + private _artilleryMag = ""; + + if ((getNumber (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "artilleryScanner")) == 1) then { + // Artillery - Get mortar ammo type and verify in range + if (isNull gunner _vehicle) exitWith {_targetASL = [];}; + { + private _ammo = getText (configFile >> "CfgMagazines" >> _x >> "ammo"); + private _hit = getNumber (configFile >> "CfgAmmo" >> _ammo >> "hit"); + if (_hit > 20) exitWith {_artilleryMag = _x;}; + } forEach getArtilleryAmmo [_vehicle]; + TRACE_1("getArtilleryAmmo",_artilleryMag); + if (_artilleryMag == "") exitWith {_targetASL = [];}; + private _eta = _vehicle getArtilleryETA [ASLtoAGL _targetASL, _artilleryMag]; + TRACE_1("getArtilleryETA",_eta); + if (_eta < 0) exitWith { + [ELSTRING(Interaction,NotInRange)] call FUNC(showMessage); + _targetASL = []; + }; + ["TOF: %1 sec", _eta toFixed 1] call FUNC(showMessage); + } else { + // Direct fire - Get a target position that will work + private _lis = lineIntersectsSurfaces [eyePos _unit, _targetASL, _unit, _vehicle]; + if ((count _lis) > 0) then { // If point is hidden, unit won't fire, do a ray cast to find where they should shoot at + _targetASL = ((_lis select 0) select 0); + TRACE_1("using ray cast pos",_mousePosASL distance _targetASL); + }; + if (_unit isEqualTo _vehicle) then { // Max range a unit can fire seems to be based on the weapon's config + private _distance = _targetASL vectorDistance eyePos _unit; + private _maxWeaponRange = getNumber (configFile >> "CfgWeapons" >> (currentWeapon _unit) >> "maxRange"); + TRACE_3("",_distance,_maxWeaponRange,currentWeapon _unit); + if (_distance > (_maxWeaponRange - 50)) then { + if (_distance > (2.5 * _maxWeaponRange)) then { + _targetASL = []; + [ELSTRING(Interaction,NotInRange)] call FUNC(showMessage); + } else { + // 1-2.5x the weapon max range, find a virtual point the AI can shoot at (won't have accurate elevation, but it will put rounds downrange) + private _fakeElevation = (_distance / 100000) * (_distance - _maxWeaponRange); + _targetASL = (eyePos _unit) vectorAdd (((eyePos _unit) vectorFromTo _targetASL) vectorMultiply (_maxWeaponRange - 50)) vectorAdd [0,0,_fakeElevation]; + TRACE_2("using virtual halfway point",_mousePosASL distance _targetASL,_fakeElevation); + }; + }; + }; + }; + + if (_targetASL isEqualTo []) exitWith {}; + + private _units = [_unit]; + if (_unit == (leader _unit)) then {_units = units _unit;}; + if (_artilleryMag != "") then {_units = [gunner _vehicle];}; + + { + if (((_unit distance _x) < 30) && {!([_x] call EFUNC(common,isPlayer))} && {[_x] call EFUNC(common,isAwake)}) then { + TRACE_2("sending event",_x,_targetASL); + [QGVAR(suppressiveFire), [_x, _targetASL, _artilleryMag], _x] call CBA_fnc_targetEvent; + }; + } forEach _units; + +#ifdef DRAW_ZEUS_INFO + [eyePos _unit, _mousePosASL, [0,0,1,1]] call EFUNC(common,addLineToDebugDraw); + [eyePos _unit, _targetASL, [1,0,0,1]] call EFUNC(common,addLineToDebugDraw); + if (_unit != _vehicle) then { + [_vehicle] call CBA_fnc_addUnitTrackProjectiles; + } else { + { + [_x] call CBA_fnc_addUnitTrackProjectiles; + } forEach _units; + }; +#endif + +}, (localize LSTRING(ModuleSuppressiveFire_DisplayName))] call FUNC(getModuleDestination); diff --git a/addons/zeus/functions/fnc_moduleSuppressiveFireLocal.sqf b/addons/zeus/functions/fnc_moduleSuppressiveFireLocal.sqf new file mode 100644 index 0000000000..7b11b7e18f --- /dev/null +++ b/addons/zeus/functions/fnc_moduleSuppressiveFireLocal.sqf @@ -0,0 +1,42 @@ +/* + * Author: bux, PabstMirror + * Commands the selected unit or group to start suppressive fire on the unit, group or location the module is placed on + * + * Arguments: + * 0: Unit + * 1: Fire Pos ASL + * 2: Artiller Magazine + * + * Return Value: + * None + * + * Example: + * [bob, [5, 6, 7], "bigmagazine"] call ace_zeus_fnc_moduleSuppressiveFireLocal + * + * Public: No + */ +#include "script_component.hpp" + +params ["_unit", "_targetASL", "_artilleryMag"]; +TRACE_4("moduleSuppressiveFireLocal",_unit,local _unit,_targetASL,_artilleryMag); + +if (_artilleryMag != "") exitWith { + (vehicle _unit) doArtilleryFire [ASLtoAGL _targetASL, _artilleryMag, 4]; + TRACE_3("doArtilleryFire",_unit,_targetASL,_artilleryMag); +}; + +[{ + params ["_unit", "_burstsLeft", "_nextRun", "_targetASL", "_artilleryMag"]; + if (!alive _unit) exitWith {true}; + if (CBA_missionTime >= _nextRun) then { + _burstsLeft = _burstsLeft - 1; + _this set [1, _burstsLeft]; + _this set [2, _nextRun + 4]; + _unit doSuppressiveFire _targetASL; + TRACE_2("doSuppressiveFire",_unit,_targetASL); + }; + (_burstsLeft <= 0) +}, { + TRACE_1("Done",_this); +}, [_unit, 11, CBA_missionTime, _targetASL, _artilleryMag]] call CBA_fnc_waitUntilAndExecute; + diff --git a/addons/zeus/functions/fnc_moduleSurrender.sqf b/addons/zeus/functions/fnc_moduleSurrender.sqf index d6d030a4c5..b97d2715ff 100644 --- a/addons/zeus/functions/fnc_moduleSurrender.sqf +++ b/addons/zeus/functions/fnc_moduleSurrender.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_moduleSurrender + * * Public: No */ @@ -21,23 +24,23 @@ private ["_mouseOver", "_unit", "_surrendering"]; if !(_activated && local _logic) exitWith {}; if (isNil QEFUNC(captives,setSurrendered)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { _mouseOver = GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""]); if ((_mouseOver select 0) != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { _unit = effectivecommander (_mouseOver select 1); if !(_unit isKindOf "CAManBase") then { - [LSTRING(OnlyInfantry)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyInfantry)] call FUNC(showMessage); } else { if !(alive _unit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { if (GETVAR(_unit,EGVAR(captives,isHandcuffed),false)) then { - [LSTRING(OnlyNonCaptive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyNonCaptive)] call FUNC(showMessage); } else { _surrendering = GETVAR(_unit,EGVAR(captives,isSurrendering),false); // Event initalized by ACE_Captives diff --git a/addons/zeus/functions/fnc_moduleTeleportPlayers.sqf b/addons/zeus/functions/fnc_moduleTeleportPlayers.sqf index 4a1855ba65..c52517a7d0 100644 --- a/addons/zeus/functions/fnc_moduleTeleportPlayers.sqf +++ b/addons/zeus/functions/fnc_moduleTeleportPlayers.sqf @@ -36,9 +36,10 @@ if (_group) then { private _attached = attachedTo _logic; if (isNull _attached) then { - [_x, _logic] call BIS_fnc_moveToRespawnPosition; + // Function takes position AGL and must be ran where local + [QGVAR(moveToRespawnPosition), [_x, _logic modelToWorld [0,0,0]], _x] call CBA_fnc_targetEvent; } else { - [_x, _attached] call BIS_fnc_moveToRespawnPosition; + [QGVAR(moveToRespawnPosition), [_x, _attached], _x] call CBA_fnc_targetEvent; }; } forEach _player; diff --git a/addons/zeus/functions/fnc_moduleUnconscious.sqf b/addons/zeus/functions/fnc_moduleUnconscious.sqf index 502847feda..d99ef6cd27 100644 --- a/addons/zeus/functions/fnc_moduleUnconscious.sqf +++ b/addons/zeus/functions/fnc_moduleUnconscious.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_moduleUnconscious + * * Public: No */ @@ -21,20 +24,20 @@ private ["_mouseOver", "_unit", "_conscious"]; if !(_activated && local _logic) exitWith {}; if (isNil QEFUNC(medical,setUnconscious)) then { - [LSTRING(RequiresAddon)] call EFUNC(common,displayTextStructured); + [LSTRING(RequiresAddon)] call FUNC(showMessage); } else { _mouseOver = GETMVAR(bis_fnc_curatorObjectPlaced_mouseOver,[""]); if ((_mouseOver select 0) != "OBJECT") then { - [LSTRING(NothingSelected)] call EFUNC(common,displayTextStructured); + [LSTRING(NothingSelected)] call FUNC(showMessage); } else { _unit = effectivecommander (_mouseOver select 1); if !(_unit isKindOf "CAManBase") then { - [LSTRING(OnlyInfantry)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyInfantry)] call FUNC(showMessage); } else { if !(alive _unit) then { - [LSTRING(OnlyAlive)] call EFUNC(common,displayTextStructured); + [LSTRING(OnlyAlive)] call FUNC(showMessage); } else { _conscious = GETVAR(_unit,ACE_isUnconscious,false); // Function handles locality for me diff --git a/addons/zeus/functions/fnc_moduleZeusSettings.sqf b/addons/zeus/functions/fnc_moduleZeusSettings.sqf index 0b4e3b4027..b52c597c2c 100644 --- a/addons/zeus/functions/fnc_moduleZeusSettings.sqf +++ b/addons/zeus/functions/fnc_moduleZeusSettings.sqf @@ -10,6 +10,9 @@ * Return Value: * None * + * Example: + * [LOGIC, [bob, kevin], true] call ace_zeus_fnc_moduleZeusSettings + * * Public: No */ diff --git a/addons/zeus/functions/fnc_showMessage.sqf b/addons/zeus/functions/fnc_showMessage.sqf new file mode 100644 index 0000000000..c91c90093a --- /dev/null +++ b/addons/zeus/functions/fnc_showMessage.sqf @@ -0,0 +1,24 @@ +/* + * Author: 654wak654 + * Shows a zeus message through the BIS function, handles localization. + * If multiple args are given, they get formatted. + * + * Arguments: + * 0: The message + * N: Anything + * + * Return Value: + * None + * + * Example: + * ["something"] call ace_zeus_fnc_showMessage + * ["something %1 in %2", "strange", getPos neighborhood] call ace_zeus_fnc_showMessage + * + * Public: Yes + */ +#include "script_component.hpp" + +if (!(_this isEqualTypeParams [""])) exitWith {ERROR_1("First arg must be string [%1]",_this);}; + +private _message = _this apply {if ((_x isEqualType "") && {isLocalized _x}) then {localize _x} else {_x}}; +[objNull, format _message] call BIS_fnc_showCuratorFeedbackMessage; diff --git a/addons/zeus/functions/fnc_ui_attributeCargo.sqf b/addons/zeus/functions/fnc_ui_attributeCargo.sqf index 49e5c6b2ea..fb57362fa1 100644 --- a/addons/zeus/functions/fnc_ui_attributeCargo.sqf +++ b/addons/zeus/functions/fnc_ui_attributeCargo.sqf @@ -9,6 +9,9 @@ * Return Value: * None * + * Example: + * [CONTROL] call ace_zeus_fnc_ui_attributeCargo + * * Public: No */ diff --git a/addons/zeus/functions/fnc_ui_attributePosition.sqf b/addons/zeus/functions/fnc_ui_attributePosition.sqf index d6ae581ae4..e0396e2c03 100644 --- a/addons/zeus/functions/fnc_ui_attributePosition.sqf +++ b/addons/zeus/functions/fnc_ui_attributePosition.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [CONTROL] call ace_zeus_fnc_ui_attributePosition + * * Public: No */ diff --git a/addons/zeus/functions/fnc_ui_attributeRadius.sqf b/addons/zeus/functions/fnc_ui_attributeRadius.sqf index 7330d1b170..3c4d296f91 100644 --- a/addons/zeus/functions/fnc_ui_attributeRadius.sqf +++ b/addons/zeus/functions/fnc_ui_attributeRadius.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [CONTROL] call ace_zeus_fnc_ui_attributeRadius + * * Public: No */ diff --git a/addons/zeus/functions/fnc_ui_defendArea.sqf b/addons/zeus/functions/fnc_ui_defendArea.sqf index 492f74cf48..13de25c2fa 100644 --- a/addons/zeus/functions/fnc_ui_defendArea.sqf +++ b/addons/zeus/functions/fnc_ui_defendArea.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [CONTROL] call ace_zeus_fnc_ui_defendArea + * * Public: No */ @@ -28,7 +31,7 @@ private _fnc_errorAndClose = { params ["_msg"]; _display closeDisplay 0; deleteVehicle _logic; - [_msg] call EFUNC(common,displayTextStructured); + [_msg] call FUNC(showMessage); breakOut "Main"; }; diff --git a/addons/zeus/functions/fnc_ui_editableObjects.sqf b/addons/zeus/functions/fnc_ui_editableObjects.sqf index 040bd2630f..8cb243849e 100644 --- a/addons/zeus/functions/fnc_ui_editableObjects.sqf +++ b/addons/zeus/functions/fnc_ui_editableObjects.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [CONTROL] call ace_zeus_fnc_ui_editableObjects + * * Public: No */ diff --git a/addons/zeus/functions/fnc_ui_globalSetSkill.sqf b/addons/zeus/functions/fnc_ui_globalSetSkill.sqf index 68ffc95033..edca781152 100644 --- a/addons/zeus/functions/fnc_ui_globalSetSkill.sqf +++ b/addons/zeus/functions/fnc_ui_globalSetSkill.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [CONTROL] call ace_zeus_fnc_ui_globalSetSkill + * * Public: No */ diff --git a/addons/zeus/functions/fnc_ui_groupSide.sqf b/addons/zeus/functions/fnc_ui_groupSide.sqf index 46418a71fc..90de9d06ca 100644 --- a/addons/zeus/functions/fnc_ui_groupSide.sqf +++ b/addons/zeus/functions/fnc_ui_groupSide.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [CONTROL] call ace_zeus_fnc_ui_groupSide + * * Public: No */ @@ -33,7 +36,7 @@ private _fnc_errorAndClose = { params ["_msg"]; _display closeDisplay 0; deleteVehicle _logic; - [_msg] call EFUNC(common,displayTextStructured); + [_msg] call FUNC(showMessage); breakOut "Main"; }; diff --git a/addons/zeus/functions/fnc_ui_patrolArea.sqf b/addons/zeus/functions/fnc_ui_patrolArea.sqf index 9db2df9773..c026bbce6a 100644 --- a/addons/zeus/functions/fnc_ui_patrolArea.sqf +++ b/addons/zeus/functions/fnc_ui_patrolArea.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [CONTROL] call ace_zeus_fnc_ui_patrolArea + * * Public: No */ @@ -28,7 +31,7 @@ private _fnc_errorAndClose = { params ["_msg"]; _display closeDisplay 0; deleteVehicle _logic; - [_msg] call EFUNC(common,displayTextStructured); + [_msg] call FUNC(showMessage); breakOut "Main"; }; diff --git a/addons/zeus/functions/fnc_ui_searchArea.sqf b/addons/zeus/functions/fnc_ui_searchArea.sqf index d30af4e234..06393ca578 100644 --- a/addons/zeus/functions/fnc_ui_searchArea.sqf +++ b/addons/zeus/functions/fnc_ui_searchArea.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [CONTROL] call ace_zeus_fnc_ui_searchArea + * * Public: No */ @@ -28,7 +31,7 @@ private _fnc_errorAndClose = { params ["_msg"]; _display closeDisplay 0; deleteVehicle _logic; - [_msg] call EFUNC(common,displayTextStructured); + [_msg] call FUNC(showMessage); breakOut "Main"; }; diff --git a/addons/zeus/functions/fnc_ui_teleportPlayers.sqf b/addons/zeus/functions/fnc_ui_teleportPlayers.sqf index cd5fd82d8d..d323a9a467 100644 --- a/addons/zeus/functions/fnc_ui_teleportPlayers.sqf +++ b/addons/zeus/functions/fnc_ui_teleportPlayers.sqf @@ -8,6 +8,9 @@ * Return Value: * None * + * Example: + * [CONTROL] call ace_zeus_fnc_ui_teleportPlayers + * * Public: No */ @@ -29,7 +32,7 @@ private _listbox = _display displayCtrl 16189; if (alive _x) then { _listbox lbSetData [_listbox lbAdd (name _x), getPlayerUID _x]; }; -} forEach allPlayers; +} forEach ([] call CBA_fnc_players); _listbox lbSetCurSel 0; (_display displayCtrl 16188) cbSetChecked (_logic getVariable ["tpGroup",false]); diff --git a/addons/zeus/stringtable.xml b/addons/zeus/stringtable.xml index 29e24f6476..9cd71c135b 100644 --- a/addons/zeus/stringtable.xml +++ b/addons/zeus/stringtable.xml @@ -1,4 +1,4 @@ - + @@ -14,6 +14,8 @@ Impostazioni Zeus Zeus 設定 Zeus 설정 + 宙斯设定 + 宙斯設定 Provides control over various aspects of Zeus. @@ -22,12 +24,14 @@ Poskytuje kontrolu na různými aspekty Zeuse. Bietet die Steuerung verschiedener Zeus-Optionen an. Proporciona controle sobre diversos aspectos do Zeus. - Fourni le contrôle des différents aspects de Zeus + Fourni le contrôle des différents aspects de Zeus. Különböző beállítási lehetőségeket biztosít a Zeus részeihez. Позволяет контролировать различные аспекты Зевса. Fornisce controllo su vari aspetti di Zeus. Zeus のさまざまな側面を強化します。 Zeus에게 다양한 방면의 조작을 제공해줍니다 + 提供宙斯各个方面的控制权. + 提供宙斯各個方面的控制權. Ascension Messages @@ -42,6 +46,8 @@ Messaggi di Ascesa 転生表示 재림 메세지 + 上任宙斯讯息 + 上任宙斯訊息 Display global popup messages when a player is assigned as Zeus. @@ -50,12 +56,14 @@ Zobrazit globální zprávu když je hráč přiřazen jako Zeus. Zeige globale Popup-Nachrichten wenn ein Spieler zu Zeus wird. Mostra uma mensagem popup quando um jogador é atribuido ao Zeus. - Affiche un message global quand un joueur est assigné en tant que Zeus + Affiche un message global quand un joueur est assigné en tant que Zeus. Globális üzeneteket jelez ki, ha egy játékos Zeus-nak lesz beosztva. Отображает глобальное всплывающее сообщение, когда один из игроков становится Зевсом. Mostra messaggi popup globali quando un giocatore viene assegnato come Zeus. プレイヤーが Zeus になるとき、全体へポップアップ表示をおこないます。 플레이어가 Zeus 될 시 서버에 이를 알리는 팝업이 등장합니다. + 当一位玩家被指定为宙斯时显示全球讯息. + 當一位玩家被指定為宙斯時顯示全球訊息. Zeus Eagle @@ -70,6 +78,8 @@ Aquila Zeus Zeus イーグル Zeus 독수리 + 宙斯鹰眼模式 + 宙斯鷹眼模式 Spawn an eagle that follows the Zeus camera. @@ -84,6 +94,8 @@ Crea un'aquila che segue la camera Zeus. Zeus カメラを追うイーグルを出現します。 Zeus의 카메라를 따라다니는 독수리를 생성합니다. + 生成一个老鹰跟着宙斯的摄影机 + 生成一個老鷹跟著宙斯的攝影機 Wind Sounds @@ -98,6 +110,8 @@ Suoni del Vento 風の音 바람 소리 + 风声 + 風聲 Play wind sounds when Zeus remote controls a unit. @@ -106,12 +120,14 @@ Přehrát varování (vítr) když Zeus převezmě kontrolu nad jednotkou. Spiele Windgeräusche ab, wenn Zeus eine Einheit steuert. Reproduz sons de vento quando uma unidade é remotamente controlada pelo Zeus. - Joue des bruits de vent quand Zeus controle une unité + Joue des bruits de vent quand Zeus controle une unité. Szélhangokat játszik le, ha a Zeus távvezérel egy egységet. Проигрывает звук ветра каждый раз, когда Зевс вселяется в юнита. Esegui rumori di vento quando Zeus controlla un'unità in remoto. ユニットが Zeus 遠隔操作になったとき、風の音がします。 Zeus가 유닛을 조작할 때 바람소리가 납니다. + 当宙斯开始控制单位时利用风的声音提示 + 當宙斯開始控制單位時利用風的聲音提示 Ordnance Warning @@ -126,6 +142,8 @@ Allarme Esplosivi 砲撃の警告 폭격 경고 + 武装警告 + 武裝警告 Play a radio warning when Zeus uses ordnance. @@ -134,12 +152,14 @@ Přehrát varování (rádio) když Zeus použije dělostřelectvo. Spiele eine Radiowarnung ab, wenn Zeus Artillerie verwendet. Reproduz uma aviso via rádio quando o Zeus usa um explosivo. - Joue un son radio quand le Zeus utilise du matériel militaire + Joue un son radio quand le Zeus utilise du matériel militaire. Rádiós figyelmeztetés kiadása, ha a Zeus tüzérséget használ. Проигрывает звук радио каждый раз, когда Зевс использует артиллерию. - Esegui un messaggio radio quando Zeus usa esplosivi. + Riproduci un messaggio radio quando Zeus usa esplosivi. Zeus が砲撃をつかうときに、無線で警告を流します。 Zeus가 폭격시 경고 무전을 재생합니다. + 当宙斯开始攻击时使用无线电警告 + 當宙斯開始攻擊時使用無線電警告 Reveal Mines @@ -154,6 +174,8 @@ Rivela Mine 地雷の表示 지뢰 표시 + 显示地雷 + 顯示地雷 Reveal mines to allies and place map markers. @@ -162,12 +184,14 @@ Odhalí miny pro spojence a umístnit jejich značku na mapu. Melde Minen gegenüber Verbündeten und platziere entsprechende Kartenmarkierungen. Revelar minas para aliados e colocar marcadores no mapa. - Révéler les mines et placer un marqueur sur la carte + Révéler les mines et placer un marqueur sur la carte. Feltárja az aknákat a szövetségeseknek, és jelölőket helyez el a térképen. Показывает мины союзникам и отмечает их маркерами на карте. Rivela mine ad alleati e piazza marcatori in mappa. 友軍に地雷と地図へ設置マーカーを表示します。 아군에게 지도 상의 모든 지뢰를 표시합니다. + 地图将标记队友放置的地雷 + 地圖將標記隊友放置的地雷 Reveal to Allies @@ -182,6 +206,8 @@ Rivela ad Alleati 友軍へ表示 모든 아군에게 표시 + 透露给盟军 + 透露給盟軍 Allies + Map Markers @@ -196,6 +222,8 @@ Alleati + Marcatori Mappa 友軍と地図マーカー 아군 + 지도 마커 + 显示盟军+地图标记 + 顯示盟軍+地圖標記 Toggle Captive @@ -207,9 +235,11 @@ Basculer en captif Elfogott állapot váltása Пленный (вкл./выкл.) - Apri Catturato + Attivatore Prigioniero 捕虜としてトグル 포로 토글 + 切换俘虏 + 切換俘虜 Defend Area @@ -220,36 +250,59 @@ Broń obszaru Verteidige Gebiet 지역 방어 + Difendi Area + 防御区域 + 防禦區域 Update Editable Objects 編集可能なオブジェクトを更新 Aktualizuj edytowalne obiekty 수정 가능한 물체 갱신 + Màj les objets éditables + Aggiorna Oggetti Modificabili + 更新可编辑的物件 + 更新可編輯的物件 All Curators 全キュレーター 모든 큐레이터 Wszyscy kuratorzy + Tous curateurs + Tutti i Moderatori + 所有编辑者 + 所有編輯者 Apply changes to all curators 全キュレーターへ変更を適用 모든 큐레이터에 변화를 적용합니다 Zatwierdź zmiany dla wszystkich kuratorów + Applique les changements à tous les curateurs + Applica i cambiamenti a tutti i moderatori + 确认变更给所有编辑者 + 確認變更給所有編輯者 Remove Objects オブジェクトの削除 물체 삭제 Usuń obiekty + Enlève les objets + Rimuovi Oggetti + 移除物件 + 移除物件 Remove existing instead of adding new 新しく追加するために削除します 물체를 삭제합니다 Usuń istniejące zamiast dodawać nowe + Enlève les objets existants au lieu d'en ajouter de nouveaux + Rimuove gli esistenti e li sostituisce con i nuovi + 移除已存在的物件来新增新的物件 + 移除已存在的物件來新增新的物件 Global AI Skill @@ -260,6 +313,9 @@ Globalne umiejętności AI Globale KI-Fähigkeit 서버 인공지능 실력 + Abilità AI Globale + AI技巧设定 + AI技巧設定 General Skill @@ -270,6 +326,9 @@ Ogólne umiejętności Allgemeine Fähigkeit 전반적 실력 + Abilità Generale + 总体技巧 + 總體技巧 Changes: general, commanding, courage @@ -280,6 +339,9 @@ Zmienia: ogólne, dowodzenie, odwaga Ändert: general, commanding, courage 변화: 전반적, 지휘, 사기 + Cambia: generale, comando, + 改变: 战斗技巧, 指挥技巧, 勇气大小 + 改變: 戰鬥技巧, 指揮技巧, 勇氣大小 Accuracy @@ -290,16 +352,22 @@ Precyzja Genauigkeit 명중률 + Precisione + 精确度 + 精確度 Changes: aimingAccuracy - Change: aimingAccuracy + Change : aimingAccuracy Изменяет: aimingAccuracy Upravuje: aimingAccuracy 変更:aimingAccuracy Zmienia: precyzję celowania Ändert: aimingAccuracy 변화: 조준 명중률 + Cambia: aimingAccuracy + 改变: 瞄准精确度 + 改變: 瞄準精確度 Weapon Handling @@ -310,56 +378,74 @@ Obsługa broni Waffenhandhabung 무기 조작 + Uso dell'Arma + 武器掌握 + 武器掌握 Changes: aimingShake, aimingSpeed, reloadSpeed - Change: aimingShake, aimingSpeed, reloadSpeed + Change : aimingShake, aimingSpeed, reloadSpeed Изменяет: aimingShake, aimingSpeed, reloadSpeed Upravuje: aimingShake, aimingSpeed, reloadSpeed 変更:aimingShake, aimingSpeed, reloadSpeed Zmienia: drżenie broni, szybkość celowania, szybkość przeładowania Ändert: aimingShake, aimingSpeed, reloadSpeed 변화: 조준시 흔들림, 조준 속도, 재장전 속도 + Cambia: aimingShake, aimingSpeed, reloadSpeed + 改变: 手晃幅度, 瞄准速度, 重新装填速度 + 改變: 手晃幅度, 瞄準速度, 重新裝填速度 Spotting - repérage + Repérage Обнаружение Vnímavost 索敵 Rozpoznanie Aufklärung 탐지 + Ricognizione + 索敌能力 + 索敵能力 Changes: spotDistance, spotTime - Change: spotDistance, spotTime + Change : spotDistance, spotTime Изменяет: spotDistance, spotTime Upravuje: spotDistance, spotTime 変更:spotDistance, spotTime Zmienia: zasięg rozpoznawania, czas rozpoznawania Ändert: spotDistance, spotTime 변화: 탐지 거리, 탐지까지의 시간 + Cambia: spotDistance, spotTime + 改变: 搜索距离, 发现时间 + 改變: 搜索距離, 發現時間 Seek Cover - Chercher couverture + Chercher des couvertures Поиск укрытий Vyhledávat krytí 遮蔽 Szukaj osłon Deckungssuche 엄폐물 찾기 + Cerca Copertura + 寻找掩护 + 尋找掩護 Should AI seek cover - L'IA devrait elle chercher couverture + L'IA devrait elle chercher des couvertures Должны ли боты искать укрытия AI se bude snažit vyhledávat krytí AI は遮蔽を取るようになります Czy AI powinno szukać osłon Soll KI nach Deckung suchen 인공지능이 엄폐물을 찾아갑니다 + Le AI dovrebbero cercare una copertura + 决定AI是否会寻找掩护 + 決定AI是否會尋找掩護 Auto Combat @@ -370,6 +456,9 @@ Auto walka Automatischer Kampfmodus 자동 교전 + Combattimento Automatico + 自动交战 + 自動交戰 Should AI automatically switch to combat mode @@ -380,6 +469,9 @@ Czy AI powinno automatycznie przechodzić w tryb walki Soll KI automatisch in Kampfmodus umschalten 인공지능이 자동적으로 교전 상태에 돌입합니다 + Le AI dovrebbero passare in modalità di combattimento automaticamente + 决定AI是否会自动与敌人交战 + 決定AI是否會自動與敵人交戰 Group Side @@ -390,6 +482,9 @@ Strona grupy Gruppenseite 진영 측 + Fazione del Gruppo + 小队阵营 + 小隊陣營 Patrol Area @@ -400,6 +495,9 @@ Patrol obszaru Patrouillengebiet 정찰 구역 + Area di Pattugliamento + 巡逻区域 + 巡邏區域 Toggle Surrender @@ -411,27 +509,41 @@ Basculer en capitulation Kapituláló állapot váltása Сдавшийся (вкл./выкл.) - Apri Resa + Attivatore Resa 捕虜としてトグル 항복 토글 + 切换投降 + 切換投降 Add/Remove FRIES FRUES の追加と削除 패스트로프 추가/제거 Dodaj/usuń FRIES + Aj./Enlève FRIES + Aggiungi/Rimuovi FRIES + 增加/移除快速垂降进场撤离系统 + 增加/移除快速垂降進場撤離系統 %1 is not fastrope compatible. %1 はファストロープに対応していません。 %1은 패스트로프하기에 적합하지 않습니다. %1 nie jest kompatybilny ze zjazdem linowym. + %1 n'est pas compatible. + %1 non è compatibile con il fastrope. + %1无法使用快速绳降系统. + %1無法使用快速繩降系統. Unable to remove FRIES, ropes are deployed. すでにロープが展開されているため、FRIES を削除できません。 패스트로프 제거 불가능, 줄이 이미 배치되었습니다. Nie można usunąć FRIES, liny są wypuszczone. + Pas en mesure d'enlever le FRIES, les cordes ne sont pas déployées. + Impossibile rimuovere le FRIES, le corde sono ancora dispiegate + 无法移除快速绳降系统, 因为绳索已被释放出来. + 無法移除快速繩降系統, 因為繩索已被釋放出來. Teleport Players @@ -442,6 +554,9 @@ Teleportuj graczy Spieler teleportieren 플레이어 순간이동 + Teletrasporta Giocatori + 传送玩家 + 傳送玩家 Player @@ -452,6 +567,9 @@ Gracz Spieler 플레이어 + Giocatore + 玩家 + 玩家 Teleport selected player to module position @@ -462,6 +580,9 @@ Teleportuje wybranego gracza na pozycję modułu Teleportiert ausgewählten Spieler zur Position des Moduls 모듈의 위치로 플레이어 순간이동 + Teletrasporta il giocatore selezionato nella posizione del modulo + 传送选定的玩家至模块位置 + 傳送選定的玩家至模塊位置 Teleport Group @@ -472,6 +593,9 @@ Teleport grupy Gruppe teleportieren 그룹 순간이동 + Teletrasporta Gruppo + 传送小队 + 傳送小隊 Teleports all units in group @@ -482,6 +606,9 @@ Teleportuje wszystkie jednostki w grupie Teleportiert alle Einheiten der Gruppe 그룹내에 모든 인원을 순간이동 시킵니다 + Teletrasporta tutte le unità del gruppo + 传送全部小队成员 + 傳送全部小隊成員 Toggle Unconscious @@ -493,9 +620,11 @@ Basculer en inconscient Eszméletlen állapot váltása Без сознания (вкл./выкл.) - Apri Incosciente + Attivatore Incoscienza 気絶をトグル 기절 토글 + 切换昏迷 + 切換昏迷 Search Area @@ -506,6 +635,9 @@ Przeszukaj teren Durchsuche Gebiet 지역 수색 + Area di Ricerca + 搜索区域 + 搜索區域 Search Nearby Building @@ -516,6 +648,9 @@ Przeszukaj najbliższy budynek Durchsuche nahegelegenes Gebäude 근처 건물 수색 + Cerca Edifici nelle Vicinanze + 搜索附近的建筑物 + 搜索附近的建築物 Assign Medic @@ -529,6 +664,8 @@ Assigner médecin 衛生兵に割り当て 의무병 임명 + 指定医疗兵 + 指定醫療兵 Assign Medical Vehicle @@ -542,6 +679,8 @@ Assigner véhicule médical 医療車両として割り当て 의무 차량 임명 + 指定医疗载具 + 指定醫療載具 Assign Medical Facility @@ -555,12 +694,18 @@ Assigner installation médicale 医療施設として割り当て 의무 시설 임명 + 指定医疗设施 + 指定醫療設施 Toggle Simulation Przełącz symulację シミュレーションをトグル 재현 토글 + Bascule Simulation + Attivatore Simulazione + 切换模拟 + 切換模擬 Add Spare Wheel @@ -574,6 +719,8 @@ Ajouter pièce de rechange 予備タイヤを追加 예비 바퀴 추가 + 增加备用轮胎 + 增加備用輪胎 Add Spare Track @@ -587,6 +734,8 @@ Ajouter une chenille de secours 車両へ予備タイヤを追加します。 예비 궤도 추가 + 增加备用履带 + 增加備用履帶 Unit must be alive @@ -601,6 +750,8 @@ Usar somente em unidades vivas ユニットを生存させます 대상이 반드시 살아있어야 합니다 + 单位必须是活着 + 單位必須是活著 Unit must be infantry @@ -615,6 +766,8 @@ Usar somente em infantaria desmontada ユニットを歩兵にさせます 대상이 반드시 보병이어야 합니다 + 单位必须是步兵 + 單位必須是步兵 Unit must be a structure @@ -628,6 +781,8 @@ L'unité doit être une structure ユニットを構造物とします 대상이 반드시 건축물이어야만 합니다 + 单位必须是建筑 + 單位必須是建築 Unit must be a vehicle @@ -641,6 +796,8 @@ L'unité doit être un véhicule ユニットを車両とします 대상이 반드시 차량이어야만 합니다 + 单位必须是载具 + 單位必須是載具 Unit must be a vehicle with cargo space @@ -654,6 +811,8 @@ L'unité doit être un véhicule avec de l'espace de cargaison ユニットをカーゴ スペースがある車両にします 대상이 반드시 화물을 실을 수 있는 차량이어야 합니다 + 单位必须是载具且有载货空间 + 單位必須是載具且有載貨空間 Unit must have cargo space left @@ -667,6 +826,8 @@ L'unité doit avoir de l'espace libre en cargaison ユニットへカーゴ スペースを与えます 대상의 화물공간이 남아있어야합니다 + 单位必须有剩余的载货空间 + 單位必須有剩餘的載貨空間 Unit must not be captive @@ -681,6 +842,8 @@ L'unità non dev'essere un prigioniero ユニットを捕虜にさせません 대상이 포로면 안됩니다 + 单位不能被俘虏 + 單位不能被俘虜 Unit must belong to an appropriate side @@ -691,6 +854,9 @@ Jednostka musi należeć do odpowiedniej strony Einheit muss einer passenden Seite angehören 대상이 적절한 진영에 속해야만합니다 + L'unità deve appartenere ad una fazione coerente + 单位必须属于一个合适的一边 + 單位必須屬於一個合適的一邊 Nearest building is too far away @@ -701,6 +867,9 @@ Najbliższy budynek jest zbyt daleko Nächstgelegenes Gebäude ist zu weit entfernt 가장가까운 건물이 너무 멈 + L'edificio più vicino è troppo lontano + 最近的房子离太远了 + 最近的房子離太遠了 Place on a unit @@ -715,6 +884,8 @@ Piazza su una unità ユニットの上に設置 대상에 배치하기 + 放置在一个单位上 + 放置在一個單位上 Requires an addon that is not present @@ -729,6 +900,8 @@ Richiede un addon che non è presente 要求されたアドオンは存在していません 현재 없는 에드온을 필요로 합니다 + 需要一个不存在的插件 + 需要一個不存在的插件 Add Objects to Curator @@ -742,6 +915,8 @@ Fügt Objekte zum Kurator hinzu キュレーターにオブジェクトを追加 큐레이터에 물체 추가 + 增加物件给任务策划人 + 增加物件給任務策劃人 Adds any spawned object to all curators in the mission @@ -755,16 +930,21 @@ Fügt jedes gespawnte Objekt allen Kuratoren der Mission hinzu ミッション内で作成されたオブジェクトに全キュレーターを追加 미션 내 큐레이터에 모든 생성 물체 추가 + 在任务中生成物件给所有的任务策划人 + 在任務中生成物件給所有的任務策劃人 Cargo: - Cargo: + Cargo : Груз: Náklad: カーゴ: Ładunek: Ladung: 화물: + Cargo: + 货物: + 貨物: Task Position @@ -775,6 +955,9 @@ Pozycja zadania Position der Aufgabe 작업 위치 + Posizione Incarico + 目标位置 + 目標位置 Select a position to perform the task at @@ -784,6 +967,9 @@ Wybierz pozycję na której wykonać zadanie Wähle eine Position, an der die Aufgabe ausgeführt werden soll 작업을 할 위치를 선택하십시요 + Seleziona una posizione per eseguire l'incarico + 选择要执行目标的位置 + 選擇要執行目標的位置 Task Radius @@ -793,6 +979,9 @@ Obszar zadania Radius der Aufgabe 작업 반경 + Raggio Incarico + 目标半径 + 目標半徑 Radius to perform the task within @@ -802,16 +991,46 @@ Obszar na którym zadanie powinno zostać wykonane Radius, in dem die Aufgabe ausgeführt werden soll 다음 반경 내에서 작업 + Raggio per eseguire un incarico + 设定目标范围半径 + 設定目標範圍半徑 Invalid radius entered - rayon invalide entré + Rayon invalide entré Введен неправильный радиус Vložen neplatný parametr 無効な半径が入力されました Wpisano nieprawidłowy promień Ungültiger Radius eingegeben 알 수 없는 반경 입력됨 + Raggio Invalido Inserito + 错误的半径值 + 錯誤的半徑值 + + + Suppressive Fire + Fuoco di Soppressione + Tir de suppression + 制圧射撃 + 火力压制 + 火力壓制 + + + Add full arsenal to object + Ajouter arsenal complet à l'objet + Aggiunge arsenale completo all'oggetto + オブジェクトに完全なアーセナルを追加 + 增加完整的虚拟军火库到物件上 + 增加完整的虛擬軍火庫到物件上 + + + Remove arsenal from object + Retirer arsenal de l'objet + Rimuove arsenale completo dall'oggetto + オブジェクトからアーセナルを削除 + 移除物件上的虚拟军火库 + 移除物件上的虛擬軍火庫 - \ No newline at end of file + diff --git a/docs/README_DE.md b/docs/README_DE.md index 1541ef02b5..966cfcaca6 100644 --- a/docs/README_DE.md +++ b/docs/README_DE.md @@ -4,7 +4,7 @@

- ACE3 Version + ACE3 Version ACE3 Fehlermeldungen diff --git a/docs/README_PL.md b/docs/README_PL.md index 72afbc8cdc..e23c373e11 100644 --- a/docs/README_PL.md +++ b/docs/README_PL.md @@ -3,7 +3,7 @@

- ACE3 Wersja + ACE3 Wersja ACE3 Zagadnienia diff --git a/docs/_config.yml b/docs/_config.yml index 81a93be7d3..8c73e551f6 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -8,17 +8,17 @@ ace: githubUrl: https://github.com/acemod/ACE3 version: major: 3 - minor: 8 - patch: 3 - build: 14 + minor: 10 + patch: 2 + build: 22 acex: githubUrl: https://github.com/acemod/ACEX version: major: 3 - minor: 1 - patch: 1 - build: 3 + minor: 2 + patch: 0 + build: 4 markdown: kramdown diff --git a/docs/_config_dev.yml b/docs/_config_dev.yml index 7d55c24cf2..30263a0285 100644 --- a/docs/_config_dev.yml +++ b/docs/_config_dev.yml @@ -10,17 +10,17 @@ ace: githubUrl: https://github.com/acemod/ACE3 version: major: 3 - minor: 8 - patch: 3 - build: 14 + minor: 10 + patch: 2 + build: 22 acex: githubUrl: https://github.com/acemod/ACEX version: major: 3 - minor: 1 - patch: 1 - build: 3 + minor: 2 + patch: 0 + build: 4 markdown: kramdown diff --git a/docs/_includes/dependencies_list.md b/docs/_includes/dependencies_list.md index 556b9b65b4..4e2a3dc141 100644 --- a/docs/_includes/dependencies_list.md +++ b/docs/_includes/dependencies_list.md @@ -138,6 +138,10 @@ `ace_interaction` {% endif %} +{% if include.component == "hellfire" %} +`ace_interaction`, `ace_missileguidance` +{% endif %} + {% if include.component == "hitreactions" %} `ace_common` {% endif %} @@ -258,6 +262,10 @@ `ace_common` {% endif %} +{% if include.component == "nlaw" %} +`ace_missileguidance` +{% endif %} + {% if include.component == "noidle" %} `ace_common` {% endif %} @@ -290,6 +298,10 @@ `ace_common` {% endif %} +{% if include.component == "quickmount" %} +`ace_common` +{% endif %} + {% if include.component == "rangecard" %} `ACE_Advanced_Ballistics`, `ace_scopes` {% endif %} @@ -450,6 +462,10 @@ `ace_rearm`, `ace_refuel`, `ace_repair`, `rhs_c_weapons`, `rhs_c_troops`, `rhs_c_bmd`, `rhs_c_bmp`, `rhs_c_bmp3`, `rhs_c_a2port_armor`, `rhs_c_btr`, `rhs_c_sprut`, `rhs_c_t72`, `rhs_c_tanks`, `rhs_c_a2port_air`, `rhs_c_a2port_car`, `rhs_c_cars`, `rhs_c_trucks`, `rhs_c_2s3`, `rhs_c_rva`, `rhs_c_heavyweapons` {% endif %} +{% if include.component == "compat_rhs_gref3" %} +`rhsgref_main`, `rhsgref_c_weapons` +{% endif %} + {% if include.component == "compat_rhs_usf3" %} `ace_javelin`, `ace_rearm`, `ace_refuel`, `ace_repair`, `rhsusf_c_weapons`, `rhsusf_c_troops`, `rhsusf_c_m1a1`, `rhsusf_c_m1a2`, `RHS_US_A2_AirImport`, `rhsusf_c_m109`, `rhsusf_c_HEMTT_A4`, `rhsusf_c_hmmwv`, `rhsusf_c_rg33`, `rhsusf_c_fmtv`, `rhsusf_c_m113`, `RHS_US_A2Port_Armor`, `rhsusf_c_melb` {% endif %} diff --git a/docs/_posts/2017-02-21-ace3-version390.md b/docs/_posts/2017-02-21-ace3-version390.md new file mode 100644 index 0000000000..42368de04e --- /dev/null +++ b/docs/_posts/2017-02-21-ace3-version390.md @@ -0,0 +1,48 @@ +--- +title: ACEREP #00008 +description: Status report on ACE3 version 3.9.0 +parent: posts +image: /img/news/170221_csatconvoy.jpg +author: bux +layout: post +--- + +Another year, another release. 3.9.0 is the first release of 2017 and we'd like to thank everyone who has helped us to make it a smooth one. + + + +

+ + +The release candidate testing was very successful and we have received important feedback helping us to fix some issues beforehand. + +
+
+ CSAT driving a convoy through one of Tanoa's villages while two CSAT soldiers are arresting two civilians. +
+
+ +This update mainly features quite a lot of bug and compatibility fixes as well as necessary changes for the next Arma 3 update. In particular we've added the 64bit compatible DLL files. Though, don't expect any dramatic performance increases as the DLLs were just rebuilt to make them compatible. + +A new component has been added which removes the restriction for picking up and wearing enemy uniforms. You can find it in the `/optionals` folder in ACE3 and to use it you could e.g. copy it to the `/addons` folder. We've decided to put it into optionals because being able to wear an enemy's uniform isn't always the desired behavior for everyone. + +We have invested some time in polishing the ballistic features of ACE3. As an example the range cards and the ATragMX now respect the distance between the center of the bore and the center of the scope to more accurately calculate firing solutions. If you're an addon maker [we've added new config entries which can be added to your addon or a compatibility patch](/wiki/framework/scopes-framework.html). And as an added benefit, shooting with this change is even more accurate than in vanilla. +Speaking of the ATragMX it is now closer to the real life counter part than ever before: It now features a muzzle velocity/temperature interpolation, calculating muzzle velocity by factoring in powder burn rates at different temperatures and the "Truing Drop" feature which helps a shooter calculate a better flight path based on actual shooting results. And because "our" ATragMX is models closely to the real world one you could even use the [real manual to read about those features](https://www.horusvision.com/download/manual_Horus_ATrag-v385.pdf){:target="_blank"}. + +And even Zeus got a little love in this update. You can find new helper modules in the Zeus interface like teleporting players, adding FRIES to a helicopter, toggle the simulation of objects and more. The modules have been cleaned up into distinct categories to make them easier to find. + +
+
+ Showcasing the Zeus interface with the new ACE3 sections and utility modules. A helicopter is getting FRIES attached using ACE3 Zeus. +
+
+ +As mentioned in our [last ACEREP](/2016/11/04/ace3-version381.html) we're still working on our big medical rewrite. Progress though has stalled a little bit due to the holidays and real life occupations. But it's already in quite a good state. More on that will follow in a future ACEREP. + +## The End Things + +The full (and funny) changelog for ACE3 v3.9.0 can be found here: [https://github.com/acemod/ACE3/releases/v3.9.0](https://github.com/acemod/ACE3/releases/v3.9.0){:target="_blank"} + +We are still in need for translations for some languages within the ACE3 project. Please have a look at [this GitHub issue to track the progress and what languages lack translations](https://github.com/acemod/ACE3/issues/367){:target="_blank"}. Any and all help with this is very appreciated. + +Make sure to [follow us on twitter](https://twitter.com/intent/follow?screen_name=ace3mod&tw_p=followbutton){:target="_blank"} and to [like our facebook page](https://www.facebook.com/ACE3Mod/){:target="_blank"}. diff --git a/docs/img/news/170221_Zeus.jpg b/docs/img/news/170221_Zeus.jpg new file mode 100644 index 0000000000..8d52b28aee Binary files /dev/null and b/docs/img/news/170221_Zeus.jpg differ diff --git a/docs/img/news/170221_csatconvoy.jpg b/docs/img/news/170221_csatconvoy.jpg new file mode 100644 index 0000000000..b80b907468 Binary files /dev/null and b/docs/img/news/170221_csatconvoy.jpg differ diff --git a/docs/img/scope_module.jpg b/docs/img/scope_module.jpg new file mode 100644 index 0000000000..19629bddd7 Binary files /dev/null and b/docs/img/scope_module.jpg differ diff --git a/docs/img/wiki/feature/ab_ingame.png b/docs/img/wiki/feature/ab_ingame.png new file mode 100644 index 0000000000..6f53d714d7 Binary files /dev/null and b/docs/img/wiki/feature/ab_ingame.png differ diff --git a/docs/img/wiki/feature/ab_module.jpg b/docs/img/wiki/feature/ab_module.jpg new file mode 100644 index 0000000000..70d2ec52b5 Binary files /dev/null and b/docs/img/wiki/feature/ab_module.jpg differ diff --git a/docs/img/wiki/feature/abtools_inventory.png b/docs/img/wiki/feature/abtools_inventory.png new file mode 100644 index 0000000000..72e1607689 Binary files /dev/null and b/docs/img/wiki/feature/abtools_inventory.png differ diff --git a/docs/img/wiki/feature/atragmx1.png b/docs/img/wiki/feature/atragmx1.png new file mode 100644 index 0000000000..e32a31c899 Binary files /dev/null and b/docs/img/wiki/feature/atragmx1.png differ diff --git a/docs/img/wiki/feature/atragmx2.png b/docs/img/wiki/feature/atragmx2.png new file mode 100644 index 0000000000..6cdaabd3f8 Binary files /dev/null and b/docs/img/wiki/feature/atragmx2.png differ diff --git a/docs/img/wiki/feature/atragmx3.png b/docs/img/wiki/feature/atragmx3.png new file mode 100644 index 0000000000..dd4a1800e1 Binary files /dev/null and b/docs/img/wiki/feature/atragmx3.png differ diff --git a/docs/img/wiki/feature/atragmx4.png b/docs/img/wiki/feature/atragmx4.png new file mode 100644 index 0000000000..7db5b69077 Binary files /dev/null and b/docs/img/wiki/feature/atragmx4.png differ diff --git a/docs/img/wiki/feature/rangecard_menu.jpg b/docs/img/wiki/feature/rangecard_menu.jpg new file mode 100644 index 0000000000..d41ba9fe6b Binary files /dev/null and b/docs/img/wiki/feature/rangecard_menu.jpg differ diff --git a/docs/img/wiki/feature/scope_module.jpg b/docs/img/wiki/feature/scope_module.jpg new file mode 100644 index 0000000000..19629bddd7 Binary files /dev/null and b/docs/img/wiki/feature/scope_module.jpg differ diff --git a/docs/squad/squad.xml b/docs/squad/squad.xml index ad07564a2d..3b536568e9 100644 --- a/docs/squad/squad.xml +++ b/docs/squad/squad.xml @@ -7,7 +7,12 @@ ace_bux - + + ACE Core Developer + + + SilentSpike + ACE Core Developer diff --git a/docs/src/img/news/170221_Zeus.jpg b/docs/src/img/news/170221_Zeus.jpg new file mode 100644 index 0000000000..8d52b28aee Binary files /dev/null and b/docs/src/img/news/170221_Zeus.jpg differ diff --git a/docs/src/img/news/170221_csatconvoy.jpg b/docs/src/img/news/170221_csatconvoy.jpg new file mode 100644 index 0000000000..b80b907468 Binary files /dev/null and b/docs/src/img/news/170221_csatconvoy.jpg differ diff --git a/docs/team.md b/docs/team.md index 19b1ccee2a..9a8f058cf3 100644 --- a/docs/team.md +++ b/docs/team.md @@ -9,7 +9,7 @@ order: 3 Name | Responsibilities --- | --- -[bux](https://github.com/bux578){:target="_blank"} | Scripting, Testing +[bux](https://github.com/bux){:target="_blank"} | Scripting, Testing [Felix Wiegand](https://github.com/koffeinflummi){:target="_blank"} | Scripting, Model Import [Glowbal](https://github.com/glowbal){:target="_blank"} | Scripting, UI [NouberNou](https://github.com/Noubernou){:target="_blank"} | Coding, Modeling, Performance, SME @@ -110,6 +110,7 @@ tpM | ACSE Dev Lead - Sounds, SME * OnkelDisMaster * oscarmolinadev * PaxJaromeMalues +* Phyma * pokertour * Professor * rakowozz diff --git a/docs/wiki/development/arma-3-issues.md b/docs/wiki/development/arma-3-issues.md index d7a9ca3b08..11c117b0bf 100644 --- a/docs/wiki/development/arma-3-issues.md +++ b/docs/wiki/development/arma-3-issues.md @@ -24,6 +24,8 @@ Keeping track of Arma 3 issues that need to be fixed. - [Heisenberg: T82108: Switching between optic modes of a sniper scope (AMS, DMS, MOS) will result in a blurred vision](https://feedback.bistudio.com/T82108) - [AgentRev: T80668: setObjectTextureGlobal causing "Cannot load texture" errors when used with valid mission files](https://feedback.bistudio.com/T80668) - [BaerMitUmlaut: T120030: Particles do not render properly since 1.62](https://feedback.bistudio.com/T120030) +- [Killzone_Kid: T79689: magazineTurretAmmo and setMagazineTurretAmmo do not function as expected if there are multiple magazines of the same type](https://feedback.bistudio.com/T79689) +- [nekoarrow: T122981: setMagazineTurretAmmo locality issue](https://feedback.bistudio.com/T122981) **Resolved:** diff --git a/docs/wiki/development/coding-guidelines.md b/docs/wiki/development/coding-guidelines.md index b4f844a8e4..79214e4ecd 100644 --- a/docs/wiki/development/coding-guidelines.md +++ b/docs/wiki/development/coding-guidelines.md @@ -204,7 +204,10 @@ Exceptions: ## 5. Code Style +To help with some of the coding style we recommend you get the plugin [EditorConfig](http://editorconfig.org/#download) for your editor. It will help with correct indentations and deleting trailing spaces. + ### 5.1 Braces placement + Braces `{ }` which enclose a code block will have the first bracket placed behind the statement in case of `if`, `switch` statements or `while`, `waitUntil` & `for` loops. The second brace will be placed on the same column as the statement but on a separate line. - Opening brace on the same line as keyword @@ -264,7 +267,7 @@ class Three {foo = 3;}; Putting the opening brace in its own line wastes a lot of space, and keeping the closing brace on the same level as the keyword makes it easier to recognize what exactly the brace closes. ### 5.2 Indents -Ever new scope should be on a new indent. This will make the code easier to understand and read. Indentations consist of 4 spaces. Tabs are not allowed. +Every new scope should be on a new indent. This will make the code easier to understand and read. Indentations consist of 4 spaces. Tabs are not allowed. Tabs or spaces are not allowed to trail on a line, last character needs to be non blank. Good: @@ -590,6 +593,15 @@ Event handlers in ACE3 are implemented through the CBA event system (ACE3's own More information on the [CBA Events System](https://github.com/CBATeam/CBA_A3/wiki/Custom-Events-System){:target="_blank"} and [CBA Player Events](https://github.com/CBATeam/CBA_A3/wiki/Player-Events){:target="_blank"} pages. +
+
Warning about BIS event handlers:
+

BIS's event handlers (`addEventHandler`, `addMissionEventHandler`) are slow when passing a large code variable. Use a short code block that calls the function you want.

+ ```js + player addEventHandler ["Fired", FUNC(handleFired)]; // bad + player addEventHandler ["Fired", {call FUNC(handleFired)}]; // good + ``` +
+ ### 7.4 Hashes When a key value pair is required, make use of the hash implementation from ACE3. diff --git a/docs/wiki/development/extension-guidelines.md b/docs/wiki/development/extension-guidelines.md index 06d85eeeaf..f4dc6e40bd 100644 --- a/docs/wiki/development/extension-guidelines.md +++ b/docs/wiki/development/extension-guidelines.md @@ -33,7 +33,7 @@ order: 9 ``` cd extensions\build -cmake .. -G "Visual Studio 14 2015" +cmake .. -G "Visual Studio 15 2017 Win64" ``` A Visual studio project file will now be generated in your build directory. diff --git a/docs/wiki/feature/advanced-ballistics.md b/docs/wiki/feature/advanced-ballistics.md index b025b684e4..43fa7d454e 100644 --- a/docs/wiki/feature/advanced-ballistics.md +++ b/docs/wiki/feature/advanced-ballistics.md @@ -15,7 +15,7 @@ version: ## 1. Overview The Advanced Ballistics module improves internal and external ballistics. -## 1.1 Features +### 1.1 Features - Drag modelling based on real-world ballistic coefficients. - Ambient air density (air pressure, temperature, humidity) affects drag. - Wind affects drag and deflects the trajectory. @@ -31,7 +31,19 @@ The Advanced Ballistics module improves internal and external ballistics. ## 2. Usage -### 2.1 Protractor +### 2.1 Enabling Advanced Ballistics + +#### 2.1.1 Editor +Advanced Ballistics module + +#### 2.1.2 Settings Framework +- [Settings Framework]({{ site.baseurl }}/wiki/framework/settings-framework.html) + +#### 2.1.3 Enabled in-game ? +- Pick up a [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) and open it. +Advanced Ballistics vs Default Ballistic + +### 2.2 Protractor - You need a compatible weapon. - Press Ctrl+⇧ Shift+K. - Red line indicates the current inclination angle in degrees. diff --git a/docs/wiki/feature/ai.md b/docs/wiki/feature/ai.md index 9cf34ce667..49727b70f9 100644 --- a/docs/wiki/feature/ai.md +++ b/docs/wiki/feature/ai.md @@ -12,23 +12,22 @@ version: patch: 0 --- +
+
Changes to CfgAISkill were removed in ACE 3.10 (Default AI will now be more skilled)
+
+ ## 1. Overview -### 1.1 Adjusted AI skill values -The idea here is to reduce the AI's godlike aiming capabilities while retaining its high intelligence. The AI should be smart enough to move through a town, but also be 'human' in their reaction time and aim. - -*Note: All these values can still be adjusted via scripts, these arrays just change what 0 & 1 are for `setSkill`.* - -### 1.2 Firing in burst mode +### 1.1 Firing in burst mode AI will now use the automatic mode of their weapons at short distances, instead of always relying on firing single shots in quick succession. -### 1.3 Longer engagement ranges +### 1.2 Longer engagement ranges The maximum engagement ranges are increased: AI will fire in bursts with variable lengths on high ranges of 500 - 700 meters, depending on their weapon and optic. -### 1.4 No dead zones in CQB +### 1.3 No dead zones in CQB Some weapons had minimum engagement ranges. If you were as close as 2 meters to an AAF soldier, he wouldn't open fire, because the AI couldn't find any valid fire mode for their weapon. ACE3 removes this behaviour mostly notable in CQB by adding a valid firing mode. -### 1.5 No scripting +### 1.4 No scripting All changes of ACE3 AI are config based to ensure full compatibility with advanced AI modifications like e.g. "ASR AI 3". ## 2. Dependencies diff --git a/docs/wiki/feature/atragmx.md b/docs/wiki/feature/atragmx.md index d6ca29e7b5..5e1f8f9fdf 100644 --- a/docs/wiki/feature/atragmx.md +++ b/docs/wiki/feature/atragmx.md @@ -12,21 +12,128 @@ version: patch: 0 --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. +### 1.1 AtragMx from Horus Vision -### Sub-feature 2 -Short description of sub-feature 2. +Horus ATragMX software considers atmospheric conditions, gun data, ammunition, range, speed and muzzle velocity to calculate precise aiming solutions with "come-up" results – and even accounts for Coriolis and spin drift effects. ATragMX, loaded on a handheld computer made by TDS Recon, is easy to use and lightning-fast. The Recon meets the rigorous MIL-STD-810F military standard for drops, vibration, humidity, altitude and extreme temperatures. -## Usage +## 2. Requirement -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. +- [Advanced Ballistics module enabled]({{ site.baseurl }}/wiki/feature/advanced-ballistics.html) -## Dependencies +## 3. Usage + +### 3.1 Opening the AtragMx + +#### 3.1.1 Interaction Menu + +- Open the self interaction menu Ctrl + ⊞ Win +- Select `Equipment` +- Select `Open AtragMx` + +#### 3.1.2 Custom key + +- `OPTIONS` / `CONTROLS` / `CONFIGURE ADDONS` / `ACE3 Equipment` + +#### 3.1.3 Inventory + +Inventory management + +### 3.2 Example with M14 and default 7.62mm 20Rnd Mag + +**Start of the mission:** + +- Open the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) and check the cartridge, the zeroed distance, the rifle twist, the muzzle velocity at 15°C and the bore height. + +Range card + +- Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=15) +- `Open Gun` the 7.62x51mm M80 in the `GunList`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=25) +- Select `E` (English unit) at the top right. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=10) +- Open the `Gun` column, check and update the `Bore`, the `Rifle Twist` and `Done`. +- Select `M` (Metric unit) at the top right. +- Open the `Gun` column, check and update the `Muzzle Velocity`, the `Zero Range` and `Done`. +- *The Muzzle Velocity Table will be automatically updated.* [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=22) +- *(Must be edited manually for specific cartridges according with the range card)* +- Optionally, `Save Gun` and `Done` in the `GunList`. + +**In position:** + +- Update the `Atmsphr` column with the [Kestrel 4500]({{ site.baseurl }}/wiki/feature/kestrel4500.html) and `Done`. +- *Check the new `Muzzle Velocity` in the `Gun` column.* +- Update the `Target` column (the [wind arrow]({{ site.baseurl }}/wiki/feature/weather.html) will also help). [[1]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=16) [[2]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=30) [[3]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=32) [[4]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=33) +- *The latitude for all common maps can be found in the [ACE3 Github]({{ site.ace.githubUrl }}/blob/master/addons/common/functions/fnc_getMapData.sqf).* +- Apply the vertical and horizontal elevations on the [scope]({{ site.baseurl }}/wiki/feature/scopes.html). +- Control the breath and press. + +### 3.3 Example with Truing tool + +**Start of the mission:** + +- Select `Drag Coef Table` in the `Options` menu. +- Add the `ZR` and the `C1` (`Gun` column) in the table and `Done`. + +**In position:** + +- Open the `Truing Drop` in the `Options` menu. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=23) +- Add the actual `Target Range` in the `SUPER` column and `Calc`. +- Add the same `Target Range` in the `SUB` column and `Calc`. +- Apply the actual scope elevation in the `Drop` field and `Calc`. +- `Accept` the new `C1`, `Gun` column and `Elev` are updated. +- *The Drag Coefficient Table will be automatically updated.* [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=22) +- Optionally, `Save Gun` and `Done` in the `GunList`. + +Calculation + +- If a new `Target Range` is applied in the `Target` column, select `Drag Coef Table` in the `Options` menu and `Done`. +- The ballistic coefficient `C1` and the elevation `Elev` will be recalculated. + +Interpolation + +### 3.4 Example with overwritten zero distance + +- The `Default zero distance` can be overwritten with the [Scopes module]({{ site.baseurl }}/wiki/feature/scopes.html) or the [Settings Framework]({{ site.baseurl }}/wiki/framework/settings-framework.html). +- In this case, the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) will be automatically updated, NOT the AtragMx. +- Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=15) +- Open the `Gun` column, check and update the `Zero Range` and `Done`. + +Zero distance 300m + +### 3.5 Example with `Add New Gun` in `GunList` + +- Open the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) and check the cartridge, the bullet diameter, the bullet weight and the muzzle velocities. +- Open the AtragMx and the `Atmsphr` column, select `Default` and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=15) +- Select `Add New Gun` in the `GunList`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=25) +- Add a `New Gun Name` and `Open Gun`. +- Select `E` (English unit) at the top right. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=10) +- Open the `Gun` column, check and update the `Bullet Weight (grains)`, the `Bullet Diam (inches)` and `Done`. +- Select `M` (Metric unit) at the top right. +- Open the `Muz Vel Table` in the `Options` menu or click on `MV` in the `Gun` column. +- Edit manually the `Muzzle Velocity Table` according with the [Range Card]({{ site.baseurl }}/wiki/feature/rangecard.html) and `Done`. [[Manual]](https://horusvision.com/download/manual_Horus_ATrag-v385.pdf#page=22) +- The `C1 coefficient` of the bullet can be found with the Eden Editor `Config Viewer`: + +> configfile >> "CfgAmmo" >> "Range card cartridge" >> "ACE_ballisticCoefficients" + +> configfile >> "CfgAmmo" >> "Range card cartridge" >> "ACE_dragModel" + +- *The AtragMx accepts only **G1 ballistic coefficient**.* +- *G7 ballistic coefficient can be converted, for example, with the online [JBM Ballistics Calculators](http://www.jbmballistics.com/cgi-bin/jbmgf-5.1.cgi)*. +- Optionally, `Save Gun` and `Done` in the `GunList`. + + +> Note: The ballistic coefficient can be calculated by using the [360 Degree Training Course mission](https://forums.bistudio.com/forums/topic/171228-sp-360-degree-training-course/) as a chronograph at different distances and [JBM Ballistics Calculators](http://www.jbmballistics.com/cgi-bin/jbmbcv-5.1.cgi) for example, an another ballistic software at your own convenience, or the [AtragMx Truing Tool](#33-example-with-truing-tool). + + +## 4. Official Manual and Horus Videos + +- [Official Manual]({{ site.ace.githubUrl }}/blob/master/extras/manual_Horus_ATrag-v385.pdf) +- [Horus video part1](https://www.youtube.com/watch?v=pg6oqT5jVds) +- [Horus video part2](https://www.youtube.com/watch?v=7SkRnbwoPmw) + + +## 5. Dependencies {% include dependencies_list.md component="atragmx" %} diff --git a/docs/wiki/feature/explosives.md b/docs/wiki/feature/explosives.md index 7548c5f13c..d44d088251 100644 --- a/docs/wiki/feature/explosives.md +++ b/docs/wiki/feature/explosives.md @@ -41,6 +41,8 @@ Enables attaching explosives to vehicles. - Select `Disarm`. - You are safe to pick it up after the action has completed. +**Tip:** To increase the success rate when defusing, make sure you crawl up to the IED. + ## 3. Dependencies {% include dependencies_list.md component="explosives" %} diff --git a/docs/wiki/feature/hellfire.md b/docs/wiki/feature/hellfire.md new file mode 100644 index 0000000000..0f8376db20 --- /dev/null +++ b/docs/wiki/feature/hellfire.md @@ -0,0 +1,66 @@ +--- +layout: wiki +title: Hellfire +description: AGM-114K Hellfire Missiles +group: feature +category: equipment +parent: wiki +mod: ace +version: + major: 3 + minor: 10 + patch: 0 +--- + +## 1. Overview + +### 1.1 Guidance +Hellfire missile is a semi-active laser guided weapon. +It requires an observer (either the launch platform or an external source) to provide laser designation. + +### 1.2 Attack profiles +Missile does not need line of sight to target when fired and can Lock-On-After-Launch (can also delay lasing target). +This and the attack profile used will effect missile's flight and max altitude. +- LOBL: Lock-On-Before-Launch, standard top attack. +- LOAL-DIR: Missile flies with a low altitude until acquiring a laser. +- LOAL-LOW: Missile immediately gains ~90m altitude. +- LOAL-HI: Missile immediately gains ~300m altitude. + +## 2. Usage +- Switching to the hellfire weapon will show additional information about the weapon in weapon status display. +- Shows: lock mode, laser code and a laser receiver indicator. E.G. `LOAL-DIR CODE: 1111` +- Laser receiver indicator turns red when it detects a laser pulse set the the current code. +- Cycle attack profiles with vehicle's ACE3 Interaction Menu or with the missile guidance "Cycle Fire Mode" keybind (default: Ctrl + Tab) + +## 3 Adding to vehicles +- Easiest way to add is via the 1.70 Pylons system. +- Hellfires can also be added to other vehicles via config or script. + +### 3.1 Classnames +- Weapon: `ace_hellfire_launcher` +- Magazines: `6Rnd_ACE_Hellfire_AGM114K` +- Pylon Magazines: `PylonMissile_1Rnd_ACE_Hellfire_AGM114K`, `PylonRack_1Rnd_ACE_Hellfire_AGM114K`, `PylonRack_3Rnd_ACE_Hellfire_AGM114K`, `PylonRack_4Rnd_ACE_Hellfire_AGM114K` + +### 3.2 Script Example +- Adding hellfires to the Cessna Civilian Plane: + +``` +if (local this) then { + this addWeaponTurret ["ace_hellfire_launcher", [-1]]; + this addMagazineTurret ["6Rnd_ACE_Hellfire_AGM114K", [-1]]; +}; +``` + +## 4 Automaticly adding a laser designator +- Can automaticly add a laser designator if hellfire launcher is present +- Ideal for pylon dynamic loadouts + +```cpp +class myChopper: HeliBase { + ace_hellfire_addLaserDesignator = 1; +}; +``` + +## 5. Dependencies + +{% include dependencies_list.md component="hellfire" %} diff --git a/docs/wiki/feature/kestrel4500.md b/docs/wiki/feature/kestrel4500.md index 068e020654..782d8d26df 100644 --- a/docs/wiki/feature/kestrel4500.md +++ b/docs/wiki/feature/kestrel4500.md @@ -12,21 +12,55 @@ version: patch: 0 --- -## Overview +## 1. Overview -### Sub-feature 1 -Short description of sub-feature 1. - -### Sub-feature 2 -Short description of sub-feature 2. +The Kestrel 4500 Pocket Weather Tracker is Kestrel's environmental meter. This is a mini weather station in itself : +- Heading +- Wind direction +- Crosswind +- Headwind +- Altitude +- Barometric pressure +- Wet bulb temperature +- Relative humidity in % +- Dewpoint +- Density altitude +- Wind chill +- Temperature °C +- Time and date +- Minimum, Maximum and Average values -## Usage +## 2. Usage -Short overview of how to use the feature, e.g. menu options, key bindings, -instructions. May not apply to all modules. +### 2.1 Opening the Kestrel + +#### 2.1.1 Interaction Menu + +- Open the self interaction menu Ctrl + ⊞ Win +- Select `Equipment` +- Select `Open Kestrel 4500` + +#### 2.1.2 Custom key + +- `OPTIONS` / `CONTROLS` / `CONFIGURE ADDONS` / `ACE3 Equipment` + +#### 2.1.3 Inventory + +Inventory management + +### 2.2 `CROSSWIND` / `HEADWIND` Feature + +- https://www.youtube.com/watch?v=4Q_qgXwlRqk + +- *[Wind info]({{ site.baseurl }}/wiki/feature/weather.html) is toggled on/off using SHIFT + K.* -## Dependencies +## 3. Official Manual + +- [Official Manual]({{ site.ace.githubUrl }}/blob/master/extras/K4500_Instruction_Manual_English.pdf) + + +## 4. Dependencies {% include dependencies_list.md component="kestrel4500" %} diff --git a/docs/wiki/feature/modules.md b/docs/wiki/feature/modules.md index 85a809896e..f74777e3c1 100644 --- a/docs/wiki/feature/modules.md +++ b/docs/wiki/feature/modules.md @@ -24,4 +24,4 @@ This is taking care of module initialization. It lets us ensure that modules pla ## 3. Usage -For technical usage and instructions, please refer to our [framework documentation about the module component] ({{site.baseUrl}}/wiki/framework/modules-framework.html). +For technical usage and instructions, please refer to our framework documentation about the module component. diff --git a/docs/wiki/feature/nlaw.md b/docs/wiki/feature/nlaw.md new file mode 100644 index 0000000000..471a6bdc38 --- /dev/null +++ b/docs/wiki/feature/nlaw.md @@ -0,0 +1,35 @@ +--- +layout: wiki +title: NLAW +description: NLAW +group: feature +category: equipment +parent: wiki +mod: ace +version: + major: 3 + minor: 10 + patch: 0 +--- + +## 1. Overview + +### 1.1 Guidance +NLAW uses Predicted Line Of Sight guidance. +Before firing the shooter tracks the targets for several seconds. +This programs the missile with the angular rotation and allows it to fly a curved path that will hit the target. +It will also correct for gravity drop. + +### 1.2 Attack profiles +- Direct - Normal impact fuze for non-armored targets. Note that the missile's shaped charge is aimed downards, so this mode is not recomended against armor. +- Overfly Top Attack - Flies high and when sensors detects a target below it triggers the shaped charge to fire downards into the weak top armor. + +## 2. Usage +- Cycle attack profiles with the missile guidance "Cycle Fire Mode" keybind (default: Ctrl + Tab) +- Start tracking by pressing and holding the "NLAW Track Target" keybind (default: Tab) +- While holding the key down track the target for 2-3 seconds and fire. +- Can also be fired against static targets without tracking. + +## 3. Dependencies + +{% include dependencies_list.md component="nlaw" %} diff --git a/docs/wiki/feature/rangecard.md b/docs/wiki/feature/rangecard.md index 708d59261c..4326969389 100644 --- a/docs/wiki/feature/rangecard.md +++ b/docs/wiki/feature/rangecard.md @@ -16,21 +16,30 @@ version: Add a range card that updates itself for your weapon and the type of ammo you're using. + ## 2. Usage ### 2.1 Opening the range card + +#### 2.1.1 Interaction Menu - Open the self interaction menu Ctrl + ⊞ Win - Select `Equipment` - Select `Open Range Card` +#### 2.1.2 Custom key +- `OPTIONS` / `CONTROLS` / `CONFIGURE ADDONS` / `ACE3 Equipment` + +#### 2.1.3 Inventory +Inventory management + ### 2.2 Using the range card -- To use this to it's full potential the use of a `Vector 21` is strongly recommended, a `Kestrel 4500` will also help. - -- Pull out your rangefinder (`Vector 21` preferred) and get the distance between you and your target. - +- To use this to it's full potential the use of a [Vector 21]({{ site.baseurl }}/wiki/feature/vector.html) is strongly recommended, a [Kestrel 4500]({{ site.baseurl }}/wiki/feature/kestrel4500.html) will also help. +- Pull out your rangefinder ([Vector 21]({{ site.baseurl }}/wiki/feature/vector.html) preferred) and get the distance between you and your target. - Open your rangetable and look under the `Target range` column. - - Move to the `Bullet Drop` column, the drop is in MRADs, you need to compensate for it by adjusting your sight. Example, you want to adjust for a bullet drop of -7.9 MRADs simply adjust your scope 7.9 MRADs vertically. (check [feature scopes]({{ site.baseurl }}/wiki/feature/scopes.html) ) for this. +- Possibility to modify, copy and share the range card between spotter and shooter. +Range card self interaction menu + ## 3. Dependencies diff --git a/docs/wiki/feature/rearm.md b/docs/wiki/feature/rearm.md index 3248ee4477..ae7fcb1612 100644 --- a/docs/wiki/feature/rearm.md +++ b/docs/wiki/feature/rearm.md @@ -17,14 +17,16 @@ version: This adds the option to rearm vehicles. The module settings allow you to configure ACE3 Rearm for both casual gaming and simulation game modes. Both the rearm speed and the availability of ammunition supply can be configured. -## 2. Rearming +## 2. Rearm Settings -### 2.1 Rearming a vehicle with setting `Entire vehicle` +## 2.1 Rearm Amount (`ace_rearm_level`) + +### 2.1.1 Rearming a vehicle with setting `Entire vehicle` - Interact with the ammo truck ⊞ Win (ACE3 default key bind `Interact Key`). - Move over `Rearm` and a list of vehicles within 20 meters that can be rearmed will be shown. - Select the vehicle from the list. It takes a few seconds to rearm the vehicle. -### 2.2 Rearming a vehicle with setting `Entire Magazine` +### 2.1.2 Rearming a vehicle with setting `Entire Magazine` - Interact with the ammo truck ⊞ Win (ACE3 default key bind `Interact Key`). - Move over `Take ammo` and a list of vehicles within 20 meters that can be rearmed will be shown. - Select the vehicle and the magazine from the list. You will pick up an ammo box. @@ -33,7 +35,7 @@ This adds the option to rearm vehicles. The module settings allow you to configu If a weapon carries multiple magazines of the same type, you have to repeat the procedure for every (partially) spent magazine. -### 2.3 Rearming a vehicle with setting `Amount based on caliber` +### 2.1.3 Rearming a vehicle with setting `Amount based on caliber` It's the same process as with setting `Entire Magazine`, but most magazines will require several ammo boxes. | Caliber in mm | 6 | 7 | 8 | 13 | 19 | 20 | 25 | 30 | 35 | 39 | 40 | 60 | 70 | 80 | 82 | 100 | 105 | 120 | 122 | 125 | 155 | 230 | 250 | @@ -43,6 +45,23 @@ It's the same process as with setting `Entire Magazine`, but most magazines will The caliber of the weapon will be rounded to the nearest number and the number of rounds is calculated using the table above. To fully rearm 2000 rounds of 7.62mm machine gun, you need five ammo boxes. +## 2.2 Ammunition supply (`ace_rearm_supply`) + +### 2.2.1 Unlimited +- Rearm vehicle has unlimited supply + +### 2.2.2 Limited ammo supply based on caliber +- Supply vehicle starts with a certian number of "points" (default is 1200) +- Resupplying vehicle will use up points based on number of rounds and caliber +- Can check number of points left on supply vehicle +- With 1000 points worth of ammunition supply, you can rearm four magazines of 250mm caliber (i.e. bombs) or eight magazines of 120mm caliber (i.e. tank rounds) or 125 magazines of 7.62mm caliber. + +### 2.2.3 Specific Magazines +- Supply vehicles start **empty** +- Magazines must be added via `ace_rearm_fnc_addMagazineToSupply` / `ace_rearm_fnc_addVehicleMagazinesToSupply` +- Can only resupply vehicles with specific magazines that have been loaded +- Can check what magazines are loaded on supply vehicle + ## 3. FAQ @@ -61,12 +80,13 @@ Mod developers can use the framework to use their custom models as ammo box repl ### Does rearm work with vehicles from mods? Yes, if the vehicle has the correct config entries or uses inheritance from vanilla ammo. Otherwise there is a compatibility mode. +Any vehicle can be turned into a supply vehicle by adding `this setVariable ["ace_rearm_isSupplyVehicle", true]` to it's init box. ### How do I replenish the ammunition supply on an ammo truck? -Please check the framework description for more details. +Please check the framework description for more details. ### The limited supply option `Only specific Magazines` doesn't work. What's wrong? -The mission creator has to use the framework to add specific magazines to the ammo truck(s). On this setting all ammo trucks are empty by default. For more information, please check the framework description. +The mission creator has to use the framework to add specific magazines to the ammo truck(s). On this setting all ammo trucks are empty by default. For more information, please check the framework description. ## 5. Dependencies diff --git a/docs/wiki/feature/refuel.md b/docs/wiki/feature/refuel.md index 939879caa0..b069d9dba2 100644 --- a/docs/wiki/feature/refuel.md +++ b/docs/wiki/feature/refuel.md @@ -65,6 +65,12 @@ Please check the framework description for more details. ### Something broke, I can't use the fuel truck / nozzle any longer. What to do? You can reset the fuel truck and its nozzle by calling `ace_refuel_fnc_reset` with its first parameter being the fuel truck object. +### How do I increase the length of the hose? +There is a global setting that will effect all vehicles and static pumps. To only effect a specific vehicle put the following in it's init box: +```cpp +this setVariable ["ace_refuel_hoseLength", 30]; +``` + ## 4. Dependencies {% include dependencies_list.md component="refuel" %} diff --git a/docs/wiki/feature/repair.md b/docs/wiki/feature/repair.md new file mode 100644 index 0000000000..f27639b5e9 --- /dev/null +++ b/docs/wiki/feature/repair.md @@ -0,0 +1,47 @@ +--- +layout: wiki +title: Repair +description: Adds custom repair system. +group: feature +category: interaction +parent: wiki +mod: ace +version: + major: 3 + minor: 3 + patch: 0 +--- + +
+
For information on configuration see [Repair Framework]({{ site.baseurl }}/wiki/framework/repair-framework.html)
+
+ +## 1. Overview + +Adds a more realistic repair system. +- Replacing damaged wheels and tracks requires replacement items (using [Cargo System]({{ site.baseurl }}/wiki/framework/cargo-framework.html). +- By default vehicles will start with spare parts (1 wheel or 1 track). +- Can repair specific hitpoints on vehicles. +- Can designate buildings and/or vehicles as repair zones allowing the ability to do a full repair. + +## 2. Repairing + +- Vehicle's engine should be off +- A `ToolKit` item may be required based on settings (default: not required for wheels, required for tracks or hitpoint repair) + +### 2.1 Replacing Wheels or Tracks + +- Unload a spare wheel or track (using cargo interaction) +- Drag the spare next to the wheel/track that needs replacing +- Remove the damaged wheel (not needed for track repair) +- Install new wheel or track + +### 2.2 Repairing hitpoints + +- Amount repaired is based on settings and training level +- Using the interaction system select the hitpoint to repair + +## 3. Dependencies + +{% include dependencies_list.md component="repair" %} + diff --git a/docs/wiki/feature/scopes.md b/docs/wiki/feature/scopes.md index a04578769e..8f496a90d9 100644 --- a/docs/wiki/feature/scopes.md +++ b/docs/wiki/feature/scopes.md @@ -17,6 +17,7 @@ version: ### Sniper Scope Adjustment Allows snipers to adjust their scopes horizontally and vertically in mils. + ## 2. Usage ### 2.1 Adjusting your scope vertically @@ -32,6 +33,11 @@ Please not that the following key combinations are ACE3 default key binds. - Major adjustment right Ctrl + ⇧ Shift + Page Up. - Major adjustment left Ctrl + ⇧ Shift + page Down. +### 2.3 Scopes Module + +Editor's scopes module + + ## 3. Dependencies {% include dependencies_list.md component="scopes" %} diff --git a/docs/wiki/feature/slideshow.md b/docs/wiki/feature/slideshow.md index 81770a1783..d99a8f2940 100644 --- a/docs/wiki/feature/slideshow.md +++ b/docs/wiki/feature/slideshow.md @@ -13,14 +13,17 @@ version: --- ## 1. Overview + This adds the ability to have images shown on some objects and have other objects being used as remotes. Please note that only objects with hiddenSelection 0 can be used to render images (whiteboard, TV, PC Screen being the most notable examples). ## 2. Usage + Note that this sections is for users, for mission makers refer to [the entry in mission-tools](../missionmaker/mission-tools.html) Also if no remotes are defined the "screen" object itself becomes the remote. ### 2.1 Switching between images + - Look at the object used as a remote and use the interaction menu ⊞ Win (ACE3 default). - Select the action that correspond to the image you want (the name of the action depends on the mission maker). diff --git a/docs/wiki/feature/vector.md b/docs/wiki/feature/vector.md index ce3a3ebbf9..415d77643a 100644 --- a/docs/wiki/feature/vector.md +++ b/docs/wiki/feature/vector.md @@ -78,13 +78,19 @@ The Vector is controlled with 2 keys: the azimuth key and the range key; Ta - Sight the circle on the first object and tap R while further holding Tab ↹. The first measurement is confirmed ("1-P" = first point). - Sight the second object and release Tab ↹. -### 2.9 Fall of shot +#### 2.9 Fall of shot Measuring Fall of shot - Tap Tab ↹ once then press and hold it until the azimuth appears. - Sight the circle on the object and tap R while further holding Tab ↹. The first measurement is confirmed ("1-P" = first point). - Sight the Fall of shot and release Tab ↹. The left digits display the left (`L`)/right (`r`) correction value in meter and the right digits display the longer (`A` = add)/shorter (`d` = drop) correction value in meter. If R is tapped the height correction values will be displayed (`UP` and `dn`). +#### 2.10 Setting the measurement units (degrees/mils & meters/feet) + +- Tap Tab ↹ five times fast. "Unit SEtt" appears briefly. +- Press R until the desired units are displayed. +- Tap Tab ↹ five times fast to save the selection. + ## 3. Dependencies {% include dependencies_list.md component="vector" %} diff --git a/docs/wiki/featurex/volume.md b/docs/wiki/featurex/volume.md new file mode 100644 index 0000000000..960e3003c3 --- /dev/null +++ b/docs/wiki/featurex/volume.md @@ -0,0 +1,34 @@ +--- +layout: wiki +title: Volume Toggle +description: Ability to toggle volume of game and music. +group: feature +category: general +parent: wiki +mod: acex +version: + major: 3 + minor: 2 + patch: 0 +--- + +## 1. Overview + +Adds the possibility of setting a keybind to toggle volume of game and music. It's quite useful for when you're briefing in heavy rain, or if you're in an obnoxiously loud car. + +## 2. Features + +- Automatically lower volume when inside vehicles (restores when exiting vehicles) +- Change reduction percentage and fade delay +- Option to show/hide notification +- Option to remind you every minute if your volume is lowered + +## 3. Usage + +1. Set the keybind in ACEX controls +2. Enable the feature in ACE options +3. Change the options to your liking + +## 4. Dependencies + +{% include dependenciesx_list.md component="volume" %} diff --git a/docs/wiki/framework/cargo-framework.md b/docs/wiki/framework/cargo-framework.md index 03ddf4e757..cf6ec054dd 100644 --- a/docs/wiki/framework/cargo-framework.md +++ b/docs/wiki/framework/cargo-framework.md @@ -46,27 +46,98 @@ class staticBananaLauncher { ### 2.1 Listenable -Event Name | Description | Passed Parameter(s) | Locality +Event Name | Passed Parameter(s) | Locality | Description ---------- | ----------- | ------------------- | -------- -`cargoLoaded` | Cargo has been loaded | ` [_item, _vehicle]` | Global -`cargoUnloaded` | Cargo has been unloaded | `[_item, _vehicle]` | Global -`cargoAddedByClass` | Cargo items have been added | `[_itemClass, _vehicle, _amount]` | Global +`ace_cargoLoaded` | [_item, _vehicle] | Global | Cargo has been Loaded into vehicle +`ace_cargoUnloaded` | [_item, _vehicle] | Global | Cargo has been Unloaded from vehicle -### 2.2 Callable +## 3. Editor Attributes -Event Name | Description | Passed Parameter(s) | Locality ----------- | ----------- | ------------------- | -------- -`LoadCargo` | Load object into vehicle. | `[_object, _vehicle, _showHint]` | Local -`UnloadCargo` | Unload object from vehicle. | `[_object, _vehicle]` | Local -`AddCargoByClass` | Adds a cargo item to the vehicle. | `[_itemClass, _vehicle, _amount, _showHint]` | Local +In the 3D mission editor attributes for "Cargo Size" and "Cargo Space" are available on suitable objects. These can be adjusted to change the respective value on a per-object basis - as well as to enable loading for objects and vehicles which would usually not support it. +If you wish to enable loading for an object/vehicle which does not have these editor attributes, see the `ace_cargo_fnc_setSize` and `ace_cargo_fnc_setSpace` functions. -## 3. Scripting +## 4. Scripting -### 3.1 Disabling cargo for a mission object +### 4.1 Disabling cargo for a mission object To disable cargo for a mission object use: ```cpp -this setVariable ["ace_cargo_size", -1]; +[this, -1] call ace_cargo_fnc_setSize; +``` + +### 4.2 Adjusting cargo size of an object + +`ace_cargo_fnc_setSize` +Note that this function can be used to make objects loadable/unloadable (set to `-1` for unloadable). + +```cpp + * Set the cargo size of any object. Has global effect. + * Adds the load action menu if necessary. + * Negative size makes unloadable. + * + * Arguments: + * 0: Object + * 1: Cargo size + * + * Return Value: + * None + * + * Example: + * [object, 3] call ace_cargo_fnc_setSize +``` + +### 4.3 Adjusting cargo space of a vehicle + +`ace_cargo_fnc_setSpace` +Note that this function can be used to enable/disable a vehicle's cargo space (set to `0` to disable). + +```cpp + * Set the cargo space of any object. Has global effect. + * Adds the cargo action menu if necessary. + * + * Arguments: + * 0: Vehicle + * 1: Cargo space + * + * Return Value: + * None + * + * Example: + * [vehicle, 20] call ace_cargo_fnc_setSpace +``` + +### 4.4 Load cargo into vehicle + +`ace_cargo_fnc_loadItem` (Also callable from cba event `ace_loadCargo`) +Note first arg can be a in-game object or a classname of an object type. + +```cpp + * Arguments: + * 0: Item + * 1: Vehicle + * + * Return Value: + * Object loaded + * + * Example: + * [object, vehicle] call ace_cargo_fnc_loadItem +``` + +### 4.5 Unload cargo from vehicle + +`ace_cargo_fnc_unloadItem` (Also callable from cba event `ace_unloadCargo`) + +```cpp + * Arguments: + * 0: Item + * 1: Vehicle + * 2: Unloader (default: objNull) + * + * Return Value: + * Object was unloaded + * + * Example: + * [object, vehicle] call ace_cargo_fnc_unloadItem ``` diff --git a/docs/wiki/framework/explosives-framework.md b/docs/wiki/framework/explosives-framework.md index caa7f6b812..9c9c6513d6 100644 --- a/docs/wiki/framework/explosives-framework.md +++ b/docs/wiki/framework/explosives-framework.md @@ -54,6 +54,7 @@ class CfgAmmo { triggerWhenDestroyed = 1; // (Optional) Explode when the object is shot and destroyed (after being placed) (0-disabled, 1-enabled). ACE_explodeOnDefuse = 0.02; // (Optional) Add a chance for the explosive to detonate after being disarmed (in percent) ACE_explosives_defuseObjectPosition[] = {-1.415, 0, 0.12}; // (Optional) The position relative to the model where the defuse helper object will be attached and thus the interaction point will be rendered + ACE_explosives_size = 0; // (Optional) Setting to 1 will use a defusal action with a larger radius (useful for large mines or mines with a wide pressure plane trigger area) }; }; ``` @@ -170,3 +171,34 @@ Name | Use 0 | `player` | Unit explosive will connect to 1 | `claymore1` | Explosive object that will be connected 2 | `"ACE_Clacker"` | Detonator type class name + +#### 5.3 Detonation Handler. + +Detonation Handlers are called when something attempts to trigger an explosive. They can be used to block the detonation. + +These are only used for script based triggers like clackers, cellphone and timers (anything that uses `detonateExplosive`). +Sensor based triggers like AT Mines, Tripwires are uneffected. +All added handlers will be called, if ANY one returns false, the detonation will be blocked. + +`[{CODE}] call ace_explosives_fnc_addDetonateHandler;` + +CODE will be passed `[Unit, MaxRange , Explosive , FuzeTime , TriggerItem ]` and should return a bool: true(allowed) / false(blocked) + +#### 5.3.1 Example + +Jammer that blocks RF triggers: + +```cpp +[{ + params ["_unit", "_range", "_explosive", "_fuzeTime", "_triggerItem"]; + if (_triggerItem == "ace_cellphone") exitWith { systemChat "Blocking Cell Phone"; false }; // always block cell phones + if (_triggerItem == "ace_m26_clacker") exitWith { + _range = _range / 1000; + private _actualRange = _unit distance _explosive; + systemChat format ["Limited Range For RF Clacker [%1m / %2m]", _actualRange toFixed 1, _range toFixed 1]; + (_actualRange < _range) // return bool + }; + // allow anything else (like timers / wired clackers) + true +}] call ace_explosives_fnc_addDetonateHandler; +``` diff --git a/docs/wiki/framework/goggles-framework.md b/docs/wiki/framework/goggles-framework.md index 4261f0a5ab..1b9b27588b 100644 --- a/docs/wiki/framework/goggles-framework.md +++ b/docs/wiki/framework/goggles-framework.md @@ -36,5 +36,5 @@ class CfgGlasses { Event Name | Description | Passed Parameter(s) | Locality ---------- | ----------- | ------------------- | -------- -`GlassesChanged` | Glasses Changed | `[_glassesClass]` | Local -`GlassesCracked` | Glasses Cracked | `[_unit]` | Local +`ace_glassesChanged` | Glasses Changed | `[_unit, _glassesClass]` | Local +`ace_glassesCracked` | Glasses Cracked | `[_unit]` | Local diff --git a/docs/wiki/framework/overpressure-framework.md b/docs/wiki/framework/overpressure-framework.md index 79fe46104f..23d2080514 100644 --- a/docs/wiki/framework/overpressure-framework.md +++ b/docs/wiki/framework/overpressure-framework.md @@ -47,4 +47,4 @@ class CfgWeapons { Event Name | Description | Passed Parameter(s) | Locality ---------- | ----------- | ------------------- | -------- -`overpressure` | Overpressure damage inflicted | `[_firer, _position, _direction, _weapon]` | Target +`ace_overpressure` | Overpressure damage inflicted | `[_firer, _posASL, _direction, _weapon, _magazine, _ammo]` | Target diff --git a/docs/wiki/framework/rearm-framework.md b/docs/wiki/framework/rearm-framework.md index 630a5026be..1985fdf685 100644 --- a/docs/wiki/framework/rearm-framework.md +++ b/docs/wiki/framework/rearm-framework.md @@ -14,6 +14,8 @@ version: ## 1. Config Values +### 1.1 Ammo Configs + ```cpp class CfgAmmo { class MyLaserGuidedRocket { @@ -36,9 +38,80 @@ class CfgVehicles {

ace_rearm_dummy is only needed if you have a custom ammunition model. For each model you should create a dummy vehicle extending ace_rearm_defaultCarriedObject.

+### 1.2 Setting vehicle as a supply +A vehicle will be set as a supply vehicle based on the config `ace_rearm_defaultSupply` +```cpp +class MyTruck: Car_F { + ace_rearm_defaultSupply = 1200; +}; +``` +
+
Note:
+

Mission makers can also use `this setVariable ["ace_rearm_isSupplyVehicle", true]`

+
## 2. Functions +### 2.1 Adding specific magazines + +`ace_rearm_fnc_addMagazineToSupply` + + | Arguments | Type | Optional (default value) +---| --------- | ---- | ------------------------ +0 | Ammo Truck | Object | Required +1 | Magazine Classname | String | Required +2 | Only add content of one ammo box | Boolean | Optional (default: `false`) +**R** | None | None | Return value + +This function is most useful with the module setting `Only specific Magazines`. Note that this function only adds one magazine of a specific class. Other magazines of the same size are not available on this module setting. It has to be used to replenish the ammo truck on `Only specific Magazines` setting. + +This function can also be used to increase the supply count on setting `Limited ammo supply based on caliber` by a certain caliber value. + +#### 2.1.1 Example + +`[ammo_truck, "32Rnd_155mm_Mo_shells"] call ace_rearm_fnc_addMagazineToSupply;` + + | Arguments | Explanation +---| --------- | ----------- +0 | `ammo_truck` | My ammo truck object +1 | `"32Rnd_155mm_Mo_shells"` | Some magazine class + +The 32 artillery shells are added to the supply count or the magazine storage of the specified ammo truck. + +### 2.2 Adding all magazines of a specific vehicle + +`ace_rearm_fnc_addVehicleMagazinesToSupply` + + | Arguments | Type | Optional (default value) +---| --------- | ---- | ------------------------ +0 | Ammo Truck | Object | Required +1 | Any vehicle object or class name | Object or String | Required +**R** | None | None | Return value + +This functions wraps `ace_rearm_fnc_addMagazineToSupply` and uses it to add all default magazines of all supported turrets of the vehicle to the ammo truck. + +#### 2.2.1 Example 1 + +`[ammo_truck, tank] call ace_rearm_fnc_addVehicleMagazinesToSupply;` + + | Arguments | Explanation +---| --------- | ----------- +0 | `ammo_truck` | My ammo truck object +1 | `tank`| A vehicle object + +All magazines found in the class config of the object `tank` are made available. + +#### 2.2.2 Example 2 + +`[ammo_truck, "B_MBT_01_arty_F"] call ace_rearm_fnc_addVehicleMagazinesToSupply;` + + | Arguments | Explanation +---| --------- | ----------- +0 | `ammo_truck` | My ammo truck object +1 | `"B_MBT_01_arty_F"`| Vehicle class name + +All magazines found in the config of the vehicle class `B_MBT_01_arty_F` are made available. + ### 2.3 Enabling / disabling rearming `ace_rearm_fnc_disable` @@ -71,3 +144,79 @@ Disables rearming on the object `tank`. 1 | `false`| Rearming is enabled Enables rearming on the object `tank`. + +### 2.4 Getting the supply count + +`ace_rearm_fnc_getSupplyCount` + + | Arguments | Type | Optional (default value) +---| --------- | ---- | ------------------------ +0 | Ammo Truck | Object | Required +**R** | Supply count | Number | Return value + +This functions returns the current supply count of the ammo truck. + +#### 2.4.1 Example + +`[ammo_truck] call ace_rearm_fnc_getSupplyCount;` + + | Arguments | Explanation +---| --------- | ----------- +0 | `ammo_truck` | My object + +The remaining supply count of `ammo_truck` will be returned. + +### 2.5 Removing magazines from supply + +`ace_rearm_fnc_removeMagazineFromSupply` + + | Arguments | Type | Optional (default value) +---| --------- | ---- | ------------------------ +0 | Ammo Truck | Object | Required +1 | Magazine Classname | String | Required +2 | Number of Rounds to withdraw | Number | Optional (default: `-1`) +**R** | Magazine could be removed successfully | Boolean | Return value + +#### 2.5.1 Example 1 + +`[ammo_truck, "500Rnd_127x99_mag_Tracer_Red"] call ace_rearm_fnc_removeMagazineFromSupply;` + + | Arguments | Explanation +---| --------- | ----------- +0 | `ammo_truck` | My ammo truck object +1 | `"500Rnd_127x99_mag_Tracer_Red"`| Carrying is enabled + +Removes one ammo box worth of 500Rnd_127x99_mag_Tracer_Red from the supply. Depending on the module setting the ammo box does hold an entire magazine or only the caliber based amount of rounds. + +#### 2.5.2 Example 2 + +`[ammo_truck, "500Rnd_127x99_mag_Tracer_Red", 50] call ace_rearm_fnc_removeMagazineFromSupply;` + + | Arguments | Explanation +---| --------- | ----------- +0 | `ammo_truck` | My ammo truck object +1 | `"500Rnd_127x99_mag_Tracer_Red"`| Carrying is enabled +2 | `50` | Number of rounds + +Removes one ammo box with 50 rounds of 500Rnd_127x99_mag_Tracer_Red from the supply. This is 10% of the supply of an entire magazine. + +### 2.6 Setting the supply count + +`ace_rearm_fnc_setSupplyCount` + + | Arguments | Type | Optional (default value) +---| --------- | ---- | ------------------------ +0 | Ammo Truck | Object | Required +1 | Supply Count | Boolean | Required +**R** | None | None | Return value + +This function sets the current supply count of the ammo truck. It can be used to replenish the ammo truck on `Limited ammo supply based on caliber` setting. + +#### 2.6.1 Example + +`[ammo_truck, 1000] call ace_rearm_fnc_setSupplyCount;` + + | Arguments | Explanation +---| --------- | ----------- +0 | `ammo_truck` | My ammo truck object +1 | `1000`| Supply Count diff --git a/docs/wiki/framework/reloadlaunchers-framework.md b/docs/wiki/framework/reloadlaunchers-framework.md index f175b60639..d055cc533c 100644 --- a/docs/wiki/framework/reloadlaunchers-framework.md +++ b/docs/wiki/framework/reloadlaunchers-framework.md @@ -28,4 +28,4 @@ class CfgWeapons { Event Name | Description | Passed Parameter(s) | Locality ---------- | ----------- | ------------------- | -------- -`reloadLauncher` | Launcher reloaded | `[_unit, _target, _weapon, _magazine]` | Target +`ace_reloadlaunchers_reloadLauncher` | Launcher reloaded | `[_unit, _target, _weapon, _magazine]` | Target diff --git a/docs/wiki/framework/repair-framework.md b/docs/wiki/framework/repair-framework.md new file mode 100644 index 0000000000..16d8a76d7c --- /dev/null +++ b/docs/wiki/framework/repair-framework.md @@ -0,0 +1,40 @@ +--- +layout: wiki +title: Repair Framework +description: Explains how to set-up repair system. +group: framework +order: 5 +parent: wiki +mod: ace +version: + major: 3 + minor: 3 + patch: 0 +--- + +## 1. Object Variables / Configs + +### 1.1 Unit's Repair Training + +- Determines if a unit can repair damaged hitpoints and if so, how much can be restored. +- Can easily be set via 3den attribute. + +SetVar: `"ACE_IsEngineer"` - number 0 - 2 (can also be true/false) +- 0 / false: Untrained (by default settings will only be able to replace wheels) +- 1 / true: Engineer +- 2: Advanced Engineer (allowing a higher level of repairs, based on settings) (by default settings is the only one with access to full repair) + +### 1.2 Repair Vehicles + +- Allows full repair based on setting `fullRepairLocation` (not enabled by default) +- Can easily be set via 3den attribute. + +SetVar: `"ACE_isRepairVehicle"` - true or false + +Config: `ace_repair_canRepair` - 0 or 1 + +### 1.3 Repair Facilities + +- Allows full repair based on setting `fullRepairLocation` (on by default) + +SetVar: `"ACE_isRepairFacility"` - true or false diff --git a/docs/wiki/framework/slideshow-framework.md b/docs/wiki/framework/slideshow-framework.md index a9aeae3935..2859252670 100644 --- a/docs/wiki/framework/slideshow-framework.md +++ b/docs/wiki/framework/slideshow-framework.md @@ -44,11 +44,14 @@ Important notes: 2 | Image Paths | Array | Required (paths must use backslash `\`) 3 | Action Names | Array | Required 4 | Slide Duration | Number | Optional (default: `0`, `0` disables automatic transitions) +5 | Set Name | String | Optional (default: localized `"Slides"`) **R** | None | None | Return value +_Note: Set Name argument added in 3.9.1._ + #### 2.1.1 Example -`[[object1, object2], [controller1], ["images\image1.paa", "images\image2.paa"], ["Action1", "Action2"], 5] call ace_slideshow_fnc_createSlideshow;` +`[[object1, object2], [controller1], ["images\image1.paa", "images\image2.paa"], ["Action1", "Action2"], 5, "My Slides"] call ace_slideshow_fnc_createSlideshow;` | Arguments | Explanation ---| --------- | ----------- @@ -57,3 +60,4 @@ Important notes: 2 | `["images\image1.paa", "images\image2.paa"]` | Paths to images projected on screen objects 3 | `["Action1", "Action2"]` | Action names for interaction menu if automatic transitions are not enabled 4 | `5` | 5s slide duration before change to next image +5 | `"My Slides"` | Main interaction point name, for easier distinguishing of multiple slideshow sets diff --git a/docs/wiki/frameworkx/headless-framework.md b/docs/wiki/frameworkx/headless-framework.md index 5f6ab8c16f..52bbde2257 100644 --- a/docs/wiki/frameworkx/headless-framework.md +++ b/docs/wiki/frameworkx/headless-framework.md @@ -20,6 +20,12 @@ In an event when a Headless Clients disconnects during the mission (is kicked, l A server admin or mission maker can also define the minimal delay between transfers, in order to minimize the desync due to changes in locality of many units. Log can also be enabled to keep track of the transfers (_note: it is counting groups and not units_). That can be set through [ACE3 Settings](../framework/settings-framework.html) or a mission module. +### 1.1 End Mission + +Since ACEX v3.1.0 Headless component supports automatic ending of mission when Headless Clients are connencted but no players are present. It is basically `server.cfg` setting `persistent = 1;` with Headless Client support. + +As of ACEX v3.2.0 this feature can also be enabled without enabling AI distribution (overall setting). + ## 2. Scripting @@ -34,7 +40,10 @@ this setVariable ["acex_headless_blacklist", true]; ## 3. Limitations -Some Arma 3 features are incompatible, this is up to BI to add support. Disable transferring for units using the following features to ensure expected functionality. +Some Arma 3 features are incompatible, this is up to BI to add support. Disable transferring for units using the following features to ensure expected functionality: -- Vanilla Support Modules will stop functioning -- Triggers synchronized with waypoints will no longer be respected (waypoint will not change status based on the trigger condition) +- Vanilla Support Modules (will stop functioning) + +Additionally, groups will not be transferred due to lack of support if they: + +- Have waypoints with synchronized triggers (waypoint would not change status based on trigger condition) (added in ACEX v3.2.0) diff --git a/extensions/CMakeLists.txt b/extensions/CMakeLists.txt index 7ed8386dba..41c28045ea 100644 --- a/extensions/CMakeLists.txt +++ b/extensions/CMakeLists.txt @@ -89,7 +89,7 @@ endif() string(TIMESTAMP ACE_BUILDSTAMP "%Y-%m-%dT%H:%M:%SZ") set(ACE_VERSION_MAJOR 3) -set(ACE_VERSION_MINOR 6) +set(ACE_VERSION_MINOR 10) set(ACE_VERSION_REVISION 0) EXECUTE_PROCESS(COMMAND git rev-parse --verify HEAD OUTPUT_VARIABLE T_ACE_VERSION_BUILD diff --git a/extensions/advanced_ballistics/AdvancedBallistics.cpp b/extensions/advanced_ballistics/AdvancedBallistics.cpp index 32955b4316..7db5ca5add 100644 --- a/extensions/advanced_ballistics/AdvancedBallistics.cpp +++ b/extensions/advanced_ballistics/AdvancedBallistics.cpp @@ -93,7 +93,8 @@ double calculateAirDensity(double temperature, double pressure, double relativeH pressure = pressure * 100; if (relativeHumidity > 0) { - double _pSat = 6.1078 * pow(10, ((7.5 * temperature) / (temperature + 237.3))); + // 610.78 gives pressure in Pa - https://en.wikipedia.org/wiki/Density_of_air + double _pSat = 610.78 * pow(10, ((7.5 * temperature) / (temperature + 237.3))); double vaporPressure = relativeHumidity * _pSat; double partialPressure = pressure - vaporPressure; @@ -338,7 +339,13 @@ double calculateZeroAngle(double zeroRange, double muzzleVelocity, double boreHe extern "C" { - EXPORT void __stdcall RVExtension(char *output, int outputSize, const char *function); + EXPORT void __stdcall RVExtensionVersion(char *output, int outputSize); + EXPORT void __stdcall RVExtension(char *output, int outputSize, const char *function); +} + +void __stdcall RVExtensionVersion(char *output, int outputSize) +{ + strncpy_s(output, outputSize, ACE_FULL_VERSION_STR, _TRUNCATE); } void __stdcall RVExtension(char *output, int outputSize, const char *function) diff --git a/mod.cpp b/mod.cpp index 7620a55fea..15484d2db4 100644 --- a/mod.cpp +++ b/mod.cpp @@ -1,8 +1,8 @@ -name = "Advanced Combat Environment 3.8.3"; +name = "Advanced Combat Environment 3.10.2"; picture = "logo_ace3_ca.paa"; actionName = "GitHub"; action = "https://github.com/acemod/ACE3"; -description = "ACE3 - Version 3.8.3"; +description = "ACE3 - Version 3.10.2"; logo = "logo_ace3_ca.paa"; logoOver = "logo_ace3_ca.paa"; tooltip = "ACE3"; diff --git a/optionals/compat_adr_97/stringtable.xml b/optionals/compat_adr_97/stringtable.xml index a584de2e16..52e08de2b1 100644 --- a/optionals/compat_adr_97/stringtable.xml +++ b/optionals/compat_adr_97/stringtable.xml @@ -13,6 +13,8 @@ P90 TR (Fekete) P90 TR (Preto) P90 TR (黒) + P90 TR (黑色) + P90 TR (黑色) P90 TR (Khaki) @@ -26,6 +28,8 @@ P90 TR (Khaki) P90 TR (Caqui) P90 TR (土埃) + P90 TR (卡其色) + P90 TR (卡其色) P90 TR (Camo) @@ -39,6 +43,8 @@ P90 TR (Terepmintás) P90 TR (Camuflagem) P90 TR (迷彩) + P90 TR (迷彩) + P90 TR (迷彩) P90 TR (Hex) @@ -52,6 +58,8 @@ P90 TR (Hex) P90 TR (Hex) P90 TR (蜂巣) + P90 TR (數位蜂巢迷彩) + P90 TR (数位蜂巢迷彩) P90 (Black) @@ -65,6 +73,8 @@ P90 (Fekete) P90 (Preto) P90 (黒) + P90 (黑色) + P90 (黑色) P90 (Khaki) @@ -78,6 +88,8 @@ P90 (Khaki) P90 (Caqui) P90 (土埃) + P90 (卡其色) + P90 (卡其色) P90 (Camo) @@ -91,6 +103,8 @@ P90 (Terepmintás) P90 (Camuflagem) P90 (迷彩) + P90 (迷彩) + P90 (迷彩) P90 (Hex) @@ -104,6 +118,8 @@ P90 (Hex) P90 (Hex) P90 (蜂巣) + P90 (數位蜂巢迷彩) + P90 (数位蜂巢迷彩) PS90 TR (Black) @@ -117,6 +133,8 @@ PS90 TR (Fekete) PS90 TR (Preto) PS90 TR (黒) + PS90 TR (黑色) + PS90 TR (黑色) PS90 TR (Khaki) @@ -130,6 +148,8 @@ PS90 TR (Khaki) PS90 TR (Caqui) PS90 TR (土埃) + PS90 TR (卡其色) + PS90 TR (卡其色) PS90 TR (Camo) @@ -143,6 +163,8 @@ PS90 TR (Terepmintás) PS90 TR (Camuflagem) PS90 TR (迷彩) + PS90 TR (迷彩) + PS90 TR (迷彩) PS90 TR (Hex) @@ -156,6 +178,8 @@ PS90 TR (Hex) PS90 TR (Hex) PS90 TR (蜂巣) + PS90 TR (數位蜂巢迷彩) + PS90 TR (数位蜂巢迷彩) PS90 (Black) @@ -169,6 +193,8 @@ PS90 (Fekete) PS90 (Preto) PS90 (黒) + PS90 (黑色) + PS90 (黑色) PS90 (Khaki) @@ -182,6 +208,8 @@ PS90 (Khaki) PS90 (Caqui) PS90 (土埃) + PS90 (卡其色) + PS90 (卡其色) PS90 (Camo) @@ -195,6 +223,8 @@ PS90 (Terepmintás) PS90 (Camuflagem) PS90 (迷彩) + PS90 (迷彩) + PS90 (迷彩) PS90 (Hex) @@ -208,6 +238,8 @@ PS90 (Hex) PS90 (Hex) PS90 (蜂巣) + PS90 (數位蜂巢迷彩) + PS90 (数位蜂巢迷彩) 5.7mm 50Rnd Mag @@ -221,12 +253,14 @@ Caricatore 5.7mm 50Rnd Магазин из 50-ти 5,7 мм 5.7mm 50 発入り弾倉 + 5.7mm 50發 彈匣 + 5.7mm 50发 弹匣 Caliber: 5.7mm<br />Rounds: 50<br />Used in: P90 Kaliber: 5,7mm<br />Patronen: 50<br />Eingesetzt von: P90 Kaliber: 5,7mm<br />Pociski: 50<br />Używany w: P90 - Calibre: 5.7mm<br />Cartouches: 50<br />Utilisé avec: P90 + Calibre : 5,7mm<br />Cartouches : 50<br />Utilisé avec : P90 Calibre: 5.7mm<br />Balas: 50<br />Se usa en: P90 Калибр: 5,7 мм<br />Патронов: 50<br />Используются с: P90 Calibro: 5.7mm<br />Munizioni: 50<br />In uso su: P90 @@ -234,6 +268,8 @@ Calibre: 5.7mm<br />Cartuchos: 50<br />Usado em: P90 Kaliber: 5,7mm<br />Lövedékek: 50<br />Használható: P90 口径: 5.7mm<br />装弾数: 50<br />次で使用: P90 + 口徑: 5.7mm<br />發數: 50<br />使用於: P90 + 口径: 5.7mm<br />发数: 50<br />使用于: P90 - \ No newline at end of file + diff --git a/optionals/compat_r3f/CfgAmmo.hpp b/optionals/compat_r3f/CfgAmmo.hpp index 12db3179bf..72beba29fd 100644 --- a/optionals/compat_r3f/CfgAmmo.hpp +++ b/optionals/compat_r3f/CfgAmmo.hpp @@ -1,100 +1,100 @@ class CfgAmmo { class Default; class BulletBase; - class R3F_9x19_Ball: BulletBase { - ACE_caliber=9.017; - ACE_bulletLength=15.494; - ACE_bulletMass=8.0352; - ACE_ammoTempMuzzleVelocityShifts[]={-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; - ACE_ballisticCoefficients[]={0.165}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ASM"; - ACE_dragModel=1; - ACE_muzzleVelocities[]={340, 370, 400}; - ACE_barrelLengths[]={101.6, 127.0, 228.6}; + class R3F_9x19_Ball: BulletBase { // ACE_9x19_Ball + ACE_caliber = 9.017; + ACE_bulletLength = 15.494; + ACE_bulletMass = 8.0352; + ACE_ammoTempMuzzleVelocityShifts[] = {-2.655, -2.547, -2.285, -2.012, -1.698, -1.280, -0.764, -0.153, 0.596, 1.517, 2.619}; + ACE_ballisticCoefficients[] = {0.165}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ASM"; + ACE_dragModel = 1; + ACE_muzzleVelocities[] = {340, 370, 400}; + ACE_barrelLengths[] = {101.6, 127.0, 228.6}; }; - class R3F_556x45_Ball: BulletBase { - ACE_caliber=5.69; - ACE_bulletLength=23.012; - ACE_bulletMass=4.0176; - ACE_ammoTempMuzzleVelocityShifts[]={-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; - ACE_ballisticCoefficients[]={0.151}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ASM"; - ACE_dragModel=7; - ACE_muzzleVelocities[]={723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; - ACE_barrelLengths[]={210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; + class R3F_556x45_Ball: BulletBase { // B_556x45_Ball, AtragMx GunList: 5.56x45mm M855 + ACE_caliber = 5.69; + ACE_bulletLength = 23.012; + ACE_bulletMass = 4.0176; + ACE_ammoTempMuzzleVelocityShifts[] = {-27.20, -26.44, -23.76, -21.00, -17.54, -13.10, -7.95, -1.62, 6.24, 15.48, 27.75}; + ACE_ballisticCoefficients[] = {0.151}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ASM"; + ACE_dragModel = 7; + ACE_muzzleVelocities[] = {723, 764, 796, 825, 843, 866, 878, 892, 906, 915, 922, 900}; + ACE_barrelLengths[] = {210.82, 238.76, 269.24, 299.72, 330.2, 360.68, 391.16, 419.1, 449.58, 480.06, 508.0, 609.6}; }; - class R3F_762x51_Ball: BulletBase { - ACE_caliber=7.823; - ACE_bulletLength=28.956; - ACE_bulletMass=9.4608; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; - ACE_ballisticCoefficients[]={0.2}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ICAO"; - ACE_dragModel=7; - ACE_muzzleVelocities[]={700, 800, 820, 833, 845}; - ACE_barrelLengths[]={254.0, 406.4, 508.0, 609.6, 660.4}; + class R3F_762x51_Ball: BulletBase { // B_762x51_Ball, AtragMx GunList: 7.62x51mm M80 + ACE_caliber = 7.823; + ACE_bulletLength = 28.956; + ACE_bulletMass = 9.4608; + ACE_ammoTempMuzzleVelocityShifts[] = {-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[] = {0.2}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ICAO"; + ACE_dragModel = 7; + ACE_muzzleVelocities[] = {700, 800, 820, 833, 845}; + ACE_barrelLengths[] = {254.0, 406.4, 508.0, 609.6, 660.4}; }; - class R3F_127x99_Ball: BulletBase { - ACE_caliber=12.954; - ACE_bulletLength=58.674; - ACE_bulletMass=41.9256; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; - ACE_ballisticCoefficients[]={0.670}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ASM"; - ACE_dragModel=1; - ACE_muzzleVelocities[]={900}; - ACE_barrelLengths[]={700}; + class R3F_127x99_Ball: BulletBase { // B_127x99_Ball, AtragMx GunList: 12.7x99mm + ACE_caliber = 12.954; + ACE_bulletLength = 58.674; + ACE_bulletMass = 41.9256; + ACE_ammoTempMuzzleVelocityShifts[] = {-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[] = {0.670}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ASM"; + ACE_dragModel = 1; + ACE_muzzleVelocities[] = {900}; + ACE_barrelLengths[] = {700}; }; - class R3F_127x99_PEI: R3F_127x99_Ball { - ACE_caliber=12.954; - ACE_bulletLength=58.674; - ACE_bulletMass=41.9256; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; - ACE_ballisticCoefficients[]={0.670}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ASM"; - ACE_dragModel=1; - ACE_muzzleVelocities[]={900}; - ACE_barrelLengths[]={700}; + class R3F_127x99_PEI: R3F_127x99_Ball { // B_127x99_Ball, AtragMx GunList: 12.7x99mm + ACE_caliber = 12.954; + ACE_bulletLength = 58.674; + ACE_bulletMass = 41.9256; + ACE_ammoTempMuzzleVelocityShifts[] = {-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[] = {0.670}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ASM"; + ACE_dragModel = 1; + ACE_muzzleVelocities[] = {900}; + ACE_barrelLengths[] = {700}; }; - class R3F_127x99_Ball2: BulletBase { - ACE_caliber=12.954; - ACE_bulletLength=58.674; - ACE_bulletMass=41.9256; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; - ACE_ballisticCoefficients[]={0.670}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ASM"; - ACE_dragModel=1; - ACE_muzzleVelocities[]={900}; - ACE_barrelLengths[]={736.6}; + class R3F_127x99_Ball2: BulletBase { // B_127x99_Ball, AtragMx GunList: 12.7x99mm + ACE_caliber = 12.954; + ACE_bulletLength = 58.674; + ACE_bulletMass = 41.9256; + ACE_ammoTempMuzzleVelocityShifts[] = {-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[] = {0.670}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ASM"; + ACE_dragModel = 1; + ACE_muzzleVelocities[] = {900}; + ACE_barrelLengths[] = {736.6}; }; - class R3F_127x99_PEI2: R3F_127x99_Ball2 { - ACE_caliber=12.954; - ACE_bulletLength=58.674; - ACE_bulletMass=41.9256; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; - ACE_ballisticCoefficients[]={0.670}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ASM"; - ACE_dragModel=1; - ACE_muzzleVelocities[]={900}; - ACE_barrelLengths[]={736.6}; + class R3F_127x99_PEI2: R3F_127x99_Ball2 { // B_127x99_Ball, AtragMx GunList: 12.7x99mm + ACE_caliber = 12.954; + ACE_bulletLength = 58.674; + ACE_bulletMass = 41.9256; + ACE_ammoTempMuzzleVelocityShifts[] = {-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[] = {0.670}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ASM"; + ACE_dragModel = 1; + ACE_muzzleVelocities[] = {900}; + ACE_barrelLengths[] = {736.6}; }; - class R3F_127x99_Ball3: BulletBase { - ACE_caliber=12.954; - ACE_bulletLength=58.674; - ACE_bulletMass=41.9256; - ACE_ammoTempMuzzleVelocityShifts[]={-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; - ACE_ballisticCoefficients[]={0.670}; - ACE_velocityBoundaries[]={}; - ACE_standardAtmosphere="ASM"; - ACE_dragModel=1; - ACE_muzzleVelocities[]={900}; - ACE_barrelLengths[]={736.6}; + class R3F_127x99_Ball3: BulletBase { // B_127x99_Ball, AtragMx GunList: 12.7x99mm + ACE_caliber = 12.954; + ACE_bulletLength = 58.674; + ACE_bulletMass = 41.9256; + ACE_ammoTempMuzzleVelocityShifts[] = {-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ballisticCoefficients[] = {0.670}; + ACE_velocityBoundaries[] = {}; + ACE_standardAtmosphere = "ASM"; + ACE_dragModel = 1; + ACE_muzzleVelocities[] = {900}; + ACE_barrelLengths[] = {736.6}; }; }; diff --git a/optionals/compat_r3f/CfgWeapons.hpp b/optionals/compat_r3f/CfgWeapons.hpp index eae4eeb215..bb1ed0ebd5 100644 --- a/optionals/compat_r3f/CfgWeapons.hpp +++ b/optionals/compat_r3f/CfgWeapons.hpp @@ -1,190 +1,263 @@ +class Mode_SemiAuto; + class CfgWeapons { class Pistol_Base_F; class Rifle_Base_F; class R3F_Famas_F1: Rifle_Base_F { - ACE_barrelTwist=304.8; - ACE_barrelLength=488; + ACE_RailHeightAboveBore = 10.6; + ACE_barrelTwist = 304.8; // 12" + ACE_barrelLength = 488.0; }; class R3F_Famas_surb: R3F_Famas_F1 { - ACE_barrelTwist=304.8; - ACE_barrelLength=403.86; + ACE_RailHeightAboveBore = 5.4; + ACE_barrelTwist = 228.6; // 9" + ACE_barrelLength = 450.0; // Beretta barrel + }; + class R3F_Famas_G2: R3F_Famas_F1 { + ACE_RailHeightAboveBore = 10.6; + ACE_barrelTwist = 228.6; // 9" + ACE_barrelLength = 488.0; + }; + class R3F_Famas_felin: R3F_Famas_G2 { + ACE_RailHeightAboveBore = 5.4; + ACE_barrelTwist = 177.8; // 7" + ACE_barrelLength = 450.0; // Beretta barrel }; class R3F_FRF2: Rifle_Base_F { - ACE_barrelTwist=304.8; - ACE_barrelLength=650; + ACE_RailHeightAboveBore = 2.2; + ACE_barrelTwist = 304.8; + ACE_barrelLength = 650.0; + class Single: Mode_SemiAuto { + dispersion = 0.00029; // 1 MOA + }; }; class R3F_PGM_Hecate_II: Rifle_Base_F { - ACE_barrelTwist=381.0; - ACE_barrelLength=700; + ACE_RailHeightAboveBore = 2.0; + ACE_barrelTwist = 381.0; + ACE_barrelLength = 700.0; + class Single: Mode_SemiAuto { + dispersion = 0.00029; + }; }; class R3F_M107: Rifle_Base_F { - ACE_barrelTwist=381.0; - ACE_barrelLength=736.6; + ACE_RailHeightAboveBore = 3.6; + ACE_barrelTwist = 381.0; + ACE_barrelLength = 736.6; + class Single: Mode_SemiAuto { + dispersion = 0.00029; + }; }; - class R3F_TAC50: Rifle_Base_F - { - ACE_barrelTwist=381.0; - ACE_barrelLength=736.6; + class R3F_TAC50: Rifle_Base_F { + ACE_RailHeightAboveBore = 3.2; + ACE_barrelTwist = 381.0; + ACE_barrelLength = 736.6; + class Single: Mode_SemiAuto { + dispersion = 0.00029; + }; }; class R3F_Minimi: Rifle_Base_F { - ACE_barrelTwist=177.8; - ACE_barrelLength=347.98; - }; - class R3F_Minimi_HG: R3F_Minimi { + ACE_RailHeightAboveBore = 4.0; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 347.98; }; class R3F_Minimi_762: R3F_Minimi { - ACE_barrelTwist=304.8; - ACE_barrelLength=502.92; + ACE_RailHeightAboveBore = 4.0; + ACE_barrelTwist = 304.8; + ACE_barrelLength = 502.92; }; - class R3F_Minimi_762_HG: R3F_Minimi_762 { + class R3F_SIG551: Rifle_Base_F { + ACE_RailHeightAboveBore = 4.2; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 363.0; }; class R3F_HK417M: Rifle_Base_F { - ACE_barrelTwist=279.4; - ACE_barrelLength=406; + ACE_RailHeightAboveBore = 3.4; + ACE_barrelTwist = 279.4; + ACE_barrelLength = 406.0; }; - class R3F_HK417S_HG: R3F_HK417M - { - ACE_barrelTwist=279.4; - ACE_barrelLength=305; + class R3F_HK417S_HG: R3F_HK417M { + ACE_RailHeightAboveBore = 3.4; + ACE_barrelTwist = 279.4; + ACE_barrelLength = 305.0; }; class R3F_HK417L: R3F_HK417M { - ACE_barrelTwist=279.4; - ACE_barrelLength=508; + ACE_RailHeightAboveBore = 3.4; + ACE_barrelTwist = 279.4; + ACE_barrelLength = 508.0; + class Single: Mode_SemiAuto { + dispersion = 0.00029; + }; }; class R3F_HK416M: Rifle_Base_F { - ACE_barrelTwist=177.8; - ACE_barrelLength=368.3; + ACE_RailHeightAboveBore = 3.4; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 368.3; + }; + class R3F_HK416M_HG: R3F_HK416M {}; + class R3F_HK416S_HG: R3F_HK416M_HG { + ACE_RailHeightAboveBore = 3.4; + ACE_barrelTwist = 177.8; + ACE_barrelLength = 279.4; }; class R3F_MP5SD: Rifle_Base_F { - ACE_barrelTwist=254.0; - ACE_barrelLength=144.78; + ACE_RailHeightAboveBore = 4.5; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 144.78; }; class R3F_MP5A5: R3F_MP5SD { - ACE_barrelTwist=254.0; - ACE_barrelLength=226.06; + ACE_RailHeightAboveBore = 4.5; + ACE_barrelTwist = 254.0; + ACE_barrelLength = 226.06; }; class R3F_M4S90: Rifle_Base_F { - ACE_twistDirection=0; - ACE_barrelTwist=0; - ACE_barrelLength=144.78; + ACE_RailHeightAboveBore = 2.2; + ACE_twistDirection = 0; + ACE_barrelTwist = 0; + ACE_barrelLength = 144.78; }; class R3F_PAMAS: Pistol_Base_F { - ACE_barrelTwist=248.92; - ACE_barrelLength=124.46; + ACE_barrelTwist = 250.0; + ACE_barrelLength = 125.0; }; - + class R3F_HKUSP: Pistol_Base_F { + ACE_barrelTwist = 250.0; + ACE_barrelLength = 121.0; + }; class ItemCore; class InventoryOpticsItem_Base_F; + class R3F_AIMPOINT: ItemCore { + ACE_ScopeHeightAboveRail = 3.0; + }; + class R3F_EOTECH: ItemCore { + ACE_ScopeHeightAboveRail = 3.8; + }; class R3F_J4: ItemCore { - ACE_ScopeAdjust_Vertical[] = { -8, 8 }; - ACE_ScopeAdjust_Horizontal[] = { -8, 8 }; + ACE_ScopeHeightAboveRail = 3.0; + ACE_ScopeAdjust_Vertical[] = {-8, 8}; + ACE_ScopeAdjust_Horizontal[] = {-8, 8}; ACE_ScopeAdjust_VerticalIncrement = 0.2; ACE_ScopeAdjust_HorizontalIncrement = 0.2; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class J4 { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; + class R3F_FELIN: ItemCore { + ACE_ScopeHeightAboveRail = 4.2; + }; + class R3F_FELIN_FRF2: ItemCore { + ACE_ScopeHeightAboveRail = 4.0; + }; class R3F_J8: ItemCore { - ACE_ScopeAdjust_Vertical[] = { -10, 10 }; - ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + ACE_ScopeHeightAboveRail = 4.4; + ACE_ScopeAdjust_Vertical[] = {-10, 10}; + ACE_ScopeAdjust_Horizontal[] = {-10, 10}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class J8 { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; - class R3F_J8_MILDOT: R3F_J8 { - ACE_ScopeAdjust_Vertical[] = { -10, 10 }; - ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + class R3F_J8_MILDOT: R3F_J8 { // Scope rail 30 MOA + ACE_ScopeHeightAboveRail = 4.4; + ACE_ScopeAdjust_Vertical[] = {-2, 18}; + ACE_ScopeAdjust_Horizontal[] = {-10, 10}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class J8_MILDOT { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; class R3F_J10: ItemCore { - ACE_ScopeAdjust_Vertical[] = { -10, 10 }; - ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + ACE_ScopeHeightAboveRail = 4.4; + ACE_ScopeAdjust_Vertical[] = {-10, 10}; + ACE_ScopeAdjust_Horizontal[] = {-10, 10}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class J10 { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; - class R3F_J10_MILDOT: R3F_J10 { - ACE_ScopeAdjust_Vertical[] = { -10, 10 }; - ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + class R3F_J10_MILDOT: R3F_J10 { // Scope rail 30 MOA + ACE_ScopeHeightAboveRail = 4.4; + ACE_ScopeAdjust_Vertical[] = {-2, 18}; + ACE_ScopeAdjust_Horizontal[] = {-10, 10}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class J10_MILDOT { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; class R3F_ZEISS: ItemCore { - ACE_ScopeAdjust_Vertical[] = { 0, 23 }; - ACE_ScopeAdjust_Horizontal[] = { -7, 7 }; + ACE_ScopeHeightAboveRail = 4.6; + ACE_ScopeAdjust_Vertical[] = {0, 23}; + ACE_ScopeAdjust_Horizontal[] = {-7, 7}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class ZEISS_MILDOT { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; class R3F_NF: ItemCore { - ACE_ScopeAdjust_Vertical[] = { -0.9, 34 }; - ACE_ScopeAdjust_Horizontal[] = { -11, 11 }; - ACE_ScopeAdjust_VerticalIncrement = 0.2; + ACE_ScopeHeightAboveRail = 4.2; + ACE_ScopeAdjust_Vertical[] = {0, 30}; + ACE_ScopeAdjust_Horizontal[] = {-11, 11}; + ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class NF_MILDOT { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; class R3F_NF42: ItemCore { - ACE_ScopeAdjust_Vertical[] = { -27.3, 27.3 }; - ACE_ScopeAdjust_Horizontal[] = { -27.3, 27.3}; + ACE_ScopeHeightAboveRail = 4.2; + ACE_ScopeAdjust_Vertical[] = {0, 24}; + ACE_ScopeAdjust_Horizontal[] = {-9, 9}; ACE_ScopeAdjust_VerticalIncrement = 0.1; ACE_ScopeAdjust_HorizontalIncrement = 0.1; - class ItemInfo : InventoryOpticsItem_Base_F { + class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class NF42_MILDOT { - discreteDistance[] = { 100 }; + discreteDistance[] = {100}; discreteDistanceInitIndex = 0; }; }; }; }; + class R3F_OB50: ItemCore { + ACE_ScopeHeightAboveRail = 4.0; + }; }; diff --git a/optionals/compat_rh_acc/script_component.hpp b/optionals/compat_rh_acc/script_component.hpp index 31bfc4cc86..f819cb90e6 100644 --- a/optionals/compat_rh_acc/script_component.hpp +++ b/optionals/compat_rh_acc/script_component.hpp @@ -1,4 +1,4 @@ -#define COMPONENT rh_acc_comp +#define COMPONENT compat_rh_acc #define COMPONENT_BEAUTIFIED RH Accessories Compatibility #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/compat_rh_de/script_component.hpp b/optionals/compat_rh_de/script_component.hpp index 18621635d0..cb62a462a1 100644 --- a/optionals/compat_rh_de/script_component.hpp +++ b/optionals/compat_rh_de/script_component.hpp @@ -1,4 +1,4 @@ -#define COMPONENT rh_de_cfg_comp +#define COMPONENT compat_rh_de #define COMPONENT_BEAUTIFIED RH Desert Eagle Compatibility #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/compat_rh_m4/script_component.hpp b/optionals/compat_rh_m4/script_component.hpp index 5e52334c38..4c522f8a21 100644 --- a/optionals/compat_rh_m4/script_component.hpp +++ b/optionals/compat_rh_m4/script_component.hpp @@ -1,4 +1,4 @@ -#define COMPONENT rh_m4_cfg_comp +#define COMPONENT compat_rh_m4 #define COMPONENT_BEAUTIFIED RH M4 Compatibility #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/compat_rh_pdw/script_component.hpp b/optionals/compat_rh_pdw/script_component.hpp index 1ea9b9f6ad..52f0f814de 100644 --- a/optionals/compat_rh_pdw/script_component.hpp +++ b/optionals/compat_rh_pdw/script_component.hpp @@ -1,4 +1,4 @@ -#define COMPONENT rh_pdw_comp +#define COMPONENT compat_rh_pdw #define COMPONENT_BEAUTIFIED RH PDW Compatibility #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/compat_rhs_afrf3/CfgVehicles.hpp b/optionals/compat_rhs_afrf3/CfgVehicles.hpp index 9de9f8220d..23e922ec68 100644 --- a/optionals/compat_rhs_afrf3/CfgVehicles.hpp +++ b/optionals/compat_rhs_afrf3/CfgVehicles.hpp @@ -1,34 +1,10 @@ -#define MACRO_REARM_TRUCK_ACTIONS \ - class ACE_Actions: ACE_Actions { \ - class ACE_MainActions: ACE_MainActions { \ - class EGVAR(rearm,TakeAmmo) { \ - displayName = ECSTRING(rearm,TakeAmmo); \ - distance = 7; \ - condition = QUOTE(_this call EFUNC(rearm,canTakeAmmo)); \ - insertChildren = QUOTE(_target call EFUNC(rearm,addRearmActions)); \ - exceptions[] = {"isNotInside"}; \ - showDisabled = 0; \ - priority = 2; \ - icon = QPATHTOEF(rearm,ui\icon_rearm_interact.paa); \ - }; \ - class EGVAR(rearm,StoreAmmo) { \ - displayName = ECSTRING(rearm,StoreAmmo); \ - distance = 7; \ - condition = QUOTE(_this call EFUNC(rearm,canStoreAmmo)); \ - statement = QUOTE(_this call EFUNC(rearm,storeAmmo)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOEF(rearm,ui\icon_rearm_interact.paa); \ - }; \ - }; \ - }; - #define MACRO_REFUEL_ACTIONS \ class ACE_Actions: ACE_Actions { \ class ACE_MainActions: ACE_MainActions { \ class EGVAR(refuel,Refuel) { \ displayName = ECSTRING(refuel,Refuel); \ distance = 7; \ - condition = "true"; \ + condition = "alive _target"; \ statement = ""; \ showDisabled = 0; \ priority = 2; \ @@ -105,6 +81,17 @@ class CfgVehicles { }; class CommanderOptics; }; + class Air; + class Helicopter: Air { + class Turrets; + }; + class Helicopter_Base_F: Helicopter { + class Turrets: Turrets { + class MainTurret; + }; + }; + + class rhs_bmd_base: Tank_F { EGVAR(refuel,fuelCapacity) = 300; class Turrets: Turrets { @@ -279,7 +266,6 @@ class CfgVehicles { EGVAR(refuel,fuelCapacity) = 3600; }; - class Helicopter_Base_F; class Helicopter_Base_H: Helicopter_Base_F { class EventHandlers; }; @@ -334,15 +320,33 @@ class CfgVehicles { }; }; - class Heli_Attack_02_base_F; + class Heli_Attack_02_base_F: Helicopter_Base_F {}; + class rhs_mi28_base: Heli_Attack_02_base_F { + class Turrets: Turrets { + class MainTurret: MainTurret { + EGVAR(fcs,enabled) = 0; + }; + }; + }; + class RHS_Ka52_base : Heli_Attack_02_base_F { EGVAR(refuel,fuelCapacity) = 1870; EGVAR(fastroping,enabled) = 0; + class Turrets: Turrets { + class MainTurret: MainTurret { + EGVAR(fcs,enabled) = 0; + }; + }; }; class RHS_Mi24_base : Heli_Attack_02_base_F { EGVAR(refuel,fuelCapacity) = 1851; EGVAR(fastroping,enabled) = 0; + class Turrets: Turrets { + class MainTurret: MainTurret { + EGVAR(fcs,enabled) = 0; + }; + }; }; class rhs_t80b : rhs_tank_base { @@ -352,7 +356,7 @@ class CfgVehicles { ace_repair_hitpointPositions[] = {{"era_1_hitpoint", {0,0,0}}}; ace_repair_hitpointGroups[] = {{"era_1_hitpoint", {"era_2_hitpoint", "era_3_hitpoint", "era_4_hitpoint", "era_5_hitpoint", "era_6_hitpoint", "era_7_hitpoint", "era_8_hitpoint", "era_9_hitpoint", "era_10_hitpoint", "era_11_hitpoint", "era_12_hitpoint", "era_13_hitpoint", "era_14_hitpoint", "era_15_hitpoint", "era_16_hitpoint", "era_17_hitpoint", "era_18_hitpoint", "era_19_hitpoint", "era_20_hitpoint", "era_21_hitpoint", "era_22_hitpoint", "era_23_hitpoint", "era_24_hitpoint", "era_25_hitpoint", "era_26_hitpoint", "era_27_hitpoint", "era_28_hitpoint"}}}; }; - + class Truck_F: Car_F {}; class RHS_Ural_BaseTurret: Truck_F { EGVAR(refuel,fuelCapacity) = 360; @@ -380,7 +384,7 @@ class CfgVehicles { class rhs_gaz66_ammo_base: rhs_gaz66_vmf { transportAmmo = 0; - MACRO_REARM_TRUCK_ACTIONS + ace_rearm_defaultSupply = 1200; }; class MRAP_02_base_F; @@ -423,6 +427,11 @@ class CfgVehicles { class rhs_2s3tank_base : Tank_F { EGVAR(refuel,fuelCapacity) = 830; + class Turrets: Turrets { + class MainTurret: MainTurret { + EGVAR(fcs,enabled) = 0; + }; + }; }; class OTR21_Base : Truck_F { diff --git a/optionals/compat_rhs_afrf3/CfgWeapons.hpp b/optionals/compat_rhs_afrf3/CfgWeapons.hpp index 1f193d92f5..14431a92ae 100644 --- a/optionals/compat_rhs_afrf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_afrf3/CfgWeapons.hpp @@ -46,44 +46,61 @@ class CfgWeapons { ACE_barrelTwist = 195.072; ACE_barrelLength = 589.28; }; - + class rhs_weap_orsis_Base_F; + class rhs_weap_t5000: rhs_weap_orsis_Base_F { // http://en.orsis.com/production/catalog/19046/ + ACE_barrelTwist = 254.0; // 1:10" + ACE_barrelLength = 698.5; // 27.5" + ACE_RailHeightAboveBore = 2.4; + }; class rhs_acc_sniper_base; class rhs_acc_pso1m2: rhs_acc_sniper_base { - ACE_ScopeAdjust_Vertical[] = { 0, 0 }; - ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + ACE_ScopeAdjust_Vertical[] = {0, 0}; + ACE_ScopeAdjust_Horizontal[] = {-10, 10}; ACE_ScopeAdjust_VerticalIncrement = 0.5; ACE_ScopeAdjust_HorizontalIncrement = 0.5; }; class rhs_acc_pso1m21: rhs_acc_sniper_base { - ACE_ScopeAdjust_Vertical[] = { 0, 0 }; - ACE_ScopeAdjust_Horizontal[] = { -10, 10 }; + ACE_ScopeAdjust_Vertical[] = {0, 0}; + ACE_ScopeAdjust_Horizontal[] = {-10, 10}; ACE_ScopeAdjust_VerticalIncrement = 0.5; ACE_ScopeAdjust_HorizontalIncrement = 0.5; }; - + class ItemCore; + class InventoryOpticsItem_Base_F; + class rhs_acc_dh520x56: ItemCore { // http://nightvision.ru/catalog/4/item/35 + ACE_ScopeHeightAboveRail = 4.6; + ACE_ScopeAdjust_Vertical[] = {0, 33}; + ACE_ScopeAdjust_Horizontal[] = {-9, 9}; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; + class ItemInfo: InventoryOpticsItem_Base_F { + class OpticsModes { + class dedal_520 { + discreteDistance[] = {100}; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; class Launcher_Base_F; class rhs_weap_rpg7: Launcher_Base_F { ace_reloadlaunchers_enabled = 1; }; + #define HEARING_PROTECTION_VICCREW EGVAR(hearing,protection) = 0.85; EGVAR(hearing,lowerVolume) = 0.6; + #define HEARING_PROTECTION_EARMUFF EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0.5; + #define HEARING_PROTECTION_PELTOR EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0; class H_HelmetB; class rhs_tsh4: H_HelmetB { - ace_hearing_protection = 1; - ace_hearing_lowerVolume = 0.80; + HEARING_PROTECTION_VICCREW }; - class rhs_tsh4_ess: rhs_tsh4 {}; - class rhs_tsh4_bala: rhs_tsh4 {}; - class rhs_tsh4_ess_bala: rhs_tsh4 {}; class rhs_zsh7a: H_HelmetB { - ace_hearing_protection = 1; - ace_hearing_lowerVolume = 0.80; + HEARING_PROTECTION_VICCREW }; - class rhs_zsh7a_mike: rhs_zsh7a {}; class rhs_gssh18: H_HelmetB { - ace_hearing_protection = 0.5; - ace_hearing_lowerVolume = 0.60; + HEARING_PROTECTION_EARMUFF }; class rhs_weap_d81; diff --git a/optionals/compat_rhs_gref3/$PBOPREFIX$ b/optionals/compat_rhs_gref3/$PBOPREFIX$ new file mode 100644 index 0000000000..6f777c4475 --- /dev/null +++ b/optionals/compat_rhs_gref3/$PBOPREFIX$ @@ -0,0 +1 @@ +z\ace\addons\compat_rhs_gref3 diff --git a/optionals/compat_rhs_gref3/CfgAmmo.hpp b/optionals/compat_rhs_gref3/CfgAmmo.hpp new file mode 100644 index 0000000000..70603287d0 --- /dev/null +++ b/optionals/compat_rhs_gref3/CfgAmmo.hpp @@ -0,0 +1,6 @@ +class CfgAmmo { + class GrenadeHand; + class rhsgref_ammo_rkg3em: GrenadeHand { // Scripted shaped charge + ace_frag_force = 0; + }; +}; diff --git a/optionals/compat_rhs_gref3/config.cpp b/optionals/compat_rhs_gref3/config.cpp new file mode 100644 index 0000000000..dd52014798 --- /dev/null +++ b/optionals/compat_rhs_gref3/config.cpp @@ -0,0 +1,16 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"rhsgref_main", "rhsgref_c_weapons"}; + author = ECSTRING(common,ACETeam); + url = ECSTRING(main,URL); + VERSION_CONFIG; + }; +}; + +#include "CfgAmmo.hpp" diff --git a/optionals/compat_rhs_gref3/script_component.hpp b/optionals/compat_rhs_gref3/script_component.hpp new file mode 100644 index 0000000000..12f0e45522 --- /dev/null +++ b/optionals/compat_rhs_gref3/script_component.hpp @@ -0,0 +1,6 @@ +#define COMPONENT compat_rhs_gref3 +#define COMPONENT_BEAUTIFIED RHS GREF Compatibility + +#include "\z\ace\addons\main\script_mod.hpp" + +#include "\z\ace\addons\main\script_macros.hpp" diff --git a/optionals/compat_rhs_usf3/CfgAmmo.hpp b/optionals/compat_rhs_usf3/CfgAmmo.hpp index 93939879ef..5125e268fa 100644 --- a/optionals/compat_rhs_usf3/CfgAmmo.hpp +++ b/optionals/compat_rhs_usf3/CfgAmmo.hpp @@ -31,7 +31,7 @@ class CfgAmmo { ACE_caliber = 7.823; ACE_bulletLength = 37.821; ACE_bulletMass = 14.256; - ACE_ammoTempMuzzleVelocityShifts[] = {-26.55, -25.47, -22.85, -20.12, -16.98, -12.80, -7.64, -1.53, 5.96, 15.17, 26.19}; + ACE_ammoTempMuzzleVelocityShifts[] = {-5.3, -5.1, -4.6, -4.2, -3.4, -2.6, -1.4, -0.3, 1.4, 3.0, 5.2}; ACE_ballisticCoefficients[] = {0.310}; ACE_velocityBoundaries[] = {}; ACE_standardAtmosphere = "ICAO"; @@ -194,7 +194,7 @@ class CfgAmmo { class M_Titan_AT; class rhs_ammo_M_fgm148_AT: M_Titan_AT { - irLock = 0; + irLock = 1; laserLock = 0; airLock = 0; diff --git a/optionals/compat_rhs_usf3/CfgVehicles.hpp b/optionals/compat_rhs_usf3/CfgVehicles.hpp index c6f683cb29..af6c231efe 100644 --- a/optionals/compat_rhs_usf3/CfgVehicles.hpp +++ b/optionals/compat_rhs_usf3/CfgVehicles.hpp @@ -11,37 +11,13 @@ }; \ } -#define MACRO_REARM_TRUCK_ACTIONS \ - class ACE_Actions: ACE_Actions { \ - class ACE_MainActions: ACE_MainActions { \ - class EGVAR(rearm,TakeAmmo) { \ - displayName = ECSTRING(rearm,TakeAmmo); \ - distance = 7; \ - condition = QUOTE(_this call EFUNC(rearm,canTakeAmmo)); \ - insertChildren = QUOTE(_target call EFUNC(rearm,addRearmActions)); \ - exceptions[] = {"isNotInside"}; \ - showDisabled = 0; \ - priority = 2; \ - icon = QPATHTOEF(rearm,ui\icon_rearm_interact.paa); \ - }; \ - class EGVAR(rearm,StoreAmmo) { \ - displayName = ECSTRING(rearm,StoreAmmo); \ - distance = 7; \ - condition = QUOTE(_this call EFUNC(rearm,canStoreAmmo)); \ - statement = QUOTE(_this call EFUNC(rearm,storeAmmo)); \ - exceptions[] = {"isNotInside"}; \ - icon = QPATHTOEF(rearm,ui\icon_rearm_interact.paa); \ - }; \ - }; \ - }; - #define MACRO_REFUEL_ACTIONS \ class ACE_Actions: ACE_Actions { \ class ACE_MainActions: ACE_MainActions { \ class EGVAR(refuel,Refuel) { \ displayName = ECSTRING(refuel,Refuel); \ distance = 7; \ - condition = "true"; \ + condition = "alive _target"; \ statement = ""; \ showDisabled = 0; \ priority = 2; \ @@ -184,12 +160,6 @@ class CfgVehicles { condition = QUOTE([ARR_2(this,'doorLB')] call FUNC(canCloseDoor)); }; }; - - class EventHandlers: EventHandlers { - class RHSUSF_EventHandlers: RHSUSF_EventHandlers { - getOut = QUOTE(if !((_this select 0) getVariable [ARR_2(QUOTE(QEGVAR(fastroping,doorsLocked)),false)]) then {_this call rhs_fnc_uh60_doors}); - }; - }; }; class Helicopter_Base_H: Helicopter_Base_F { @@ -226,11 +196,6 @@ class CfgVehicles { condition = QUOTE([ARR_2(this,'doorLB')] call FUNC(canCloseDoor)); }; }; - class EventHandlers: EventHandlers { - class RHSUSF_EventHandlers { - getOut = QUOTE(if !((_this select 0) getVariable [ARR_2(QUOTE(QEGVAR(fastroping,doorsLocked)),false)]) then {_this call rhs_fnc_uh60_doors}); - }; - }; EQUIP_FRIES_ATTRIBUTE; }; @@ -266,6 +231,20 @@ class CfgVehicles { }; }; + class rhsusf_CH53E_USMC: Helicopter_Base_H { + EGVAR(fastroping,enabled) = 1; + EGVAR(fastroping,ropeOrigins)[] = {{0,-9.5,2.6}}; + EGVAR(fastroping,onCut) = QFUNC(onCut); + EGVAR(fastroping,onPrepare) = QFUNC(onPrepare); + + class UserActions { + class RampOpen; + class RampClose: RampOpen { + condition = QUOTE([ARR_2(this,'ramp_bottom')] call FUNC(canCloseDoor)); + }; + }; + }; + class Heli_Attack_01_base_F: Helicopter_Base_F {}; class RHS_AH1Z_base: Heli_Attack_01_base_F { @@ -313,19 +292,19 @@ class CfgVehicles { class rhsusf_M977A4_usarmy_wd: rhsusf_HEMTT_A4_base {}; class rhsusf_M977A4_AMMO_usarmy_wd: rhsusf_M977A4_usarmy_wd { transportAmmo = 0; - MACRO_REARM_TRUCK_ACTIONS + ace_rearm_defaultSupply = 1200; }; class rhsusf_M977A4_BKIT_usarmy_wd: rhsusf_M977A4_usarmy_wd {}; class rhsusf_M977A4_AMMO_BKIT_usarmy_wd: rhsusf_M977A4_BKIT_usarmy_wd { transportAmmo = 0; - MACRO_REARM_TRUCK_ACTIONS + ace_rearm_defaultSupply = 1200; }; class rhsusf_M977A4_BKIT_M2_usarmy_wd: rhsusf_M977A4_usarmy_wd {}; class rhsusf_M977A4_AMMO_BKIT_M2_usarmy_wd: rhsusf_M977A4_BKIT_M2_usarmy_wd { transportAmmo = 0; - MACRO_REARM_TRUCK_ACTIONS + ace_rearm_defaultSupply = 1200; }; class rhsusf_M978A4_usarmy_wd: rhsusf_M977A4_usarmy_wd { @@ -358,7 +337,7 @@ class CfgVehicles { }; class APC_Tracked_02_base_F: Tank_F {}; - class rhsusf_m113_tank_base: APC_Tracked_02_base_F { + class rhsusf_m113tank_base: APC_Tracked_02_base_F { EGVAR(refuel,fuelCapacity) = 360; class Turrets: Turrets { class MainTurret: MainTurret { @@ -367,11 +346,10 @@ class CfgVehicles { }; }; - class rhsusf_m113tank_base: APC_Tracked_02_base_F {}; class rhsusf_m113_usarmy: rhsusf_m113tank_base {}; class rhsusf_m113_usarmy_supply: rhsusf_m113_usarmy { transportAmmo = 0; - MACRO_REARM_TRUCK_ACTIONS + ace_rearm_defaultSupply = 1200; }; class APC_Tracked_03_base_F; diff --git a/optionals/compat_rhs_usf3/CfgWeapons.hpp b/optionals/compat_rhs_usf3/CfgWeapons.hpp index dcdb3586e1..d67879916b 100644 --- a/optionals/compat_rhs_usf3/CfgWeapons.hpp +++ b/optionals/compat_rhs_usf3/CfgWeapons.hpp @@ -13,15 +13,23 @@ class CfgWeapons { class rhs_weap_M107_Base_F: GM6_base_F { ACE_barrelTwist = 381.0; ACE_barrelLength = 736.6; + ACE_RailHeightAboveBore = 3.8; }; class rhs_weap_XM2010_Base_F: Rifle_Base_F { ACE_barrelTwist = 254.0; ACE_barrelLength = 609.6; ACE_Overheating_dispersion = 0.75; + ACE_RailHeightAboveBore = 3.6; }; class rhs_weap_m24sws: rhs_weap_XM2010_Base_F { ACE_barrelTwist = 285.75; ACE_barrelLength = 609.6; + ACE_RailHeightAboveBore = 1.8; + }; + class rhs_weap_m40a5: rhs_weap_XM2010_Base_F { + ACE_barrelTwist = 304.8; // 1:12" + ACE_barrelLength = 635.0; // 25" + ACE_RailHeightAboveBore = 2.6; }; class arifle_MX_Base_F; class rhs_weap_m4_Base: arifle_MX_Base_F { @@ -75,14 +83,17 @@ class CfgWeapons { ACE_barrelTwist = 304.8; ACE_barrelLength = 558.8; ACE_Overheating_dispersion = 0.75; + ACE_RailHeightAboveBore = 3.3; }; class rhs_weap_sr25: rhs_weap_m14ebrri { ACE_barrelTwist = 285.75; ACE_barrelLength = 609.6; + ACE_RailHeightAboveBore = 3.4; }; class rhs_weap_sr25_ec: rhs_weap_sr25 { ACE_barrelTwist = 285.75; ACE_barrelLength = 508.0; + ACE_RailHeightAboveBore = 3.4; }; class rhs_weap_M590_5RD: Rifle_Base_F { ACE_barrelTwist = 0.0; @@ -94,8 +105,8 @@ class CfgWeapons { ACE_twistDirection = 0; ACE_barrelLength = 508.0; }; - class SMG_01_F; - class rhsusf_weap_MP7A1_base_f: SMG_01_F { + class SMG_02_base_F; + class rhsusf_weap_MP7A1_base_f: SMG_02_base_F { ACE_barrelTwist = 160.0; ACE_barrelLength = 180.0; }; @@ -131,8 +142,11 @@ class CfgWeapons { }; }; }; - class rhsusf_acc_LEUPOLDMK4: rhsusf_acc_sniper_base {}; + class rhsusf_acc_LEUPOLDMK4: rhsusf_acc_sniper_base { + ACE_ScopeHeightAboveRail = 2.4; + }; class rhsusf_acc_LEUPOLDMK4_2: rhsusf_acc_sniper_base { + ACE_ScopeHeightAboveRail = 3.8; class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class pso1_scope { @@ -142,8 +156,11 @@ class CfgWeapons { }; }; }; - class rhsusf_acc_LEUPOLDMK4_2_d: rhsusf_acc_LEUPOLDMK4_2 {}; + class rhsusf_acc_LEUPOLDMK4_2_d: rhsusf_acc_LEUPOLDMK4_2 { + ACE_ScopeHeightAboveRail = 3.8; + }; class rhsusf_acc_premier: rhsusf_acc_LEUPOLDMK4_2 { + ACE_ScopeHeightAboveRail = 5.4; class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class pso1_scope { @@ -153,8 +170,11 @@ class CfgWeapons { }; }; }; - class rhsusf_acc_premier_low: rhsusf_acc_premier {}; + class rhsusf_acc_premier_low: rhsusf_acc_premier { + ACE_ScopeHeightAboveRail = 4.0; + }; class rhsusf_acc_premier_anpvs27: rhsusf_acc_premier { + ACE_ScopeHeightAboveRail = 5.4; class ItemInfo: InventoryOpticsItem_Base_F { class OpticsModes { class pso1_nvg { @@ -164,6 +184,24 @@ class CfgWeapons { }; }; }; + class rhsusf_acc_M8541: rhsusf_acc_premier { // http://www.schmidtundbender.de/en/products/police-and-military-forces/3-12x50-pm-iilpmtc.html + ACE_ScopeHeightAboveRail = 4.0; + ACE_ScopeAdjust_Vertical[] = {0, 22}; + ACE_ScopeAdjust_Horizontal[] = {-6, 6}; + ACE_ScopeAdjust_VerticalIncrement = 0.1; + ACE_ScopeAdjust_HorizontalIncrement = 0.1; + class ItemInfo: InventoryOpticsItem_Base_F { + class OpticsModes { + class Snip { + discreteDistance[] = {100}; + discreteDistanceInitIndex = 0; + }; + }; + }; + }; + class rhsusf_acc_M8541_low: rhsusf_acc_M8541 { + ACE_ScopeHeightAboveRail = 3.0; + }; // RHS lauchers class rhs_weap_fgm148: launch_O_Titan_F { ace_javelin_enabled = 1; @@ -174,36 +212,176 @@ class CfgWeapons { lockedTargetSound[] = {"",0,1}; }; - class rhsusf_ach_helmet_ocp; - class rhsusf_opscore_01: rhsusf_ach_helmet_ocp { - ace_hearing_protection = 0.50; - ace_hearing_lowerVolume = 0.60; - }; - class rhsusf_opscore_01_tan: rhsusf_opscore_01 {}; - class rhsusf_opscore_03_ocp: rhsusf_opscore_01 {}; - class rhsusf_cvc_helmet: rhsusf_opscore_01 { - ace_hearing_protection = 1; - ace_hearing_lowerVolume = 0.80; + + #define HEARING_PROTECTION_VICCREW EGVAR(hearing,protection) = 0.85; EGVAR(hearing,lowerVolume) = 0.6; + #define HEARING_PROTECTION_EARMUFF EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0.5; + #define HEARING_PROTECTION_PELTOR EGVAR(hearing,protection) = 0.75; EGVAR(hearing,lowerVolume) = 0; + // Fast Helmets + class rhsusf_opscore_01; + class rhsusf_opscore_aor1_pelt: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR }; - class rhsusf_cvc_green_helmet: rhsusf_cvc_helmet {}; - class rhsusf_cvc_ess: rhsusf_cvc_helmet {}; - class rhsusf_cvc_green_ess: rhsusf_cvc_ess {}; + class rhsusf_opscore_aor1_pelt_nsw: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_bk_pelt: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_fg_pelt: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_fg_pelt_nsw: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_fg_pelt_cam: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_paint_pelt: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_paint_pelt_nsw: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_paint_pelt_nsw_cam: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_aor2_pelt: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_aor2_pelt_nsw: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_ut_pelt: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_ut_pelt_cam: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_ut_pelt_nsw_cam: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_mc_pelt: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_mc_pelt_nsw: rhsusf_opscore_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_cover; + class rhsusf_opscore_mc_cover_pelt: rhsusf_opscore_cover { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_mc_cover_pelt_cam: rhsusf_opscore_cover { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_rg_cover_pelt: rhsusf_opscore_cover { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_coy_cover_pelt: rhsusf_opscore_cover { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_mar_01; + class rhsusf_opscore_mar_ut_pelt: rhsusf_opscore_mar_01 { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_opscore_mar_fg_pelt: rhsusf_opscore_mar_01 { + HEARING_PROTECTION_PELTOR + }; + + // ACH Helmets + class rhsusf_ach_helmet_ocp; + class rhsusf_ach_bare_des_headset: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_des_headset_ess: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_headset: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_headset_ess: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_semi_headset: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_semi_headset_ess: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_tan_headset: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_tan_headset_ess: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_wood_headset: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_bare_wood_headset_ess: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_helmet_headset_ocp: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_ach_helmet_headset_ess_ocp: rhsusf_ach_helmet_ocp { + HEARING_PROTECTION_PELTOR + }; + + // ACVC Helmets + class rhsusf_cvc_helmet: rhsusf_opscore_01 { + HEARING_PROTECTION_VICCREW + }; + + // MICH Helmets + class rhsusf_mich_bare; + class rhsusf_mich_bare_alt: rhsusf_mich_bare { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_norotos; + class rhsusf_mich_bare_norotos_alt: rhsusf_mich_bare_norotos { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_norotos_arc; + class rhsusf_mich_bare_norotos_arc_alt: rhsusf_mich_bare_norotos_arc { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_semi; + class rhsusf_mich_bare_alt_semi: rhsusf_mich_bare_semi { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_norotos_semi; + class rhsusf_mich_bare_norotos_alt_semi: rhsusf_mich_bare_norotos_semi { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_norotos_arc_semi; + class rhsusf_mich_bare_norotos_arc_alt_semi: rhsusf_mich_bare_norotos_arc_semi { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_tan; + class rhsusf_mich_bare_alt_tan: rhsusf_mich_bare_tan { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_norotos_tan; + class rhsusf_mich_bare_norotos_alt_tan: rhsusf_mich_bare_norotos_tan { + HEARING_PROTECTION_PELTOR + }; + class rhsusf_mich_bare_norotos_arc_tan; + class rhsusf_mich_bare_norotos_arc_alt_tan: rhsusf_mich_bare_norotos_arc_tan { + HEARING_PROTECTION_PELTOR + }; + class H_PilotHelmetHeli_B; class H_CrewHelmetHeli_B; class rhsusf_hgu56p: H_PilotHelmetHeli_B { - ace_hearing_protection = 0.85; - ace_hearing_lowerVolume = 0.75; + HEARING_PROTECTION_VICCREW }; class rhsusf_hgu56p_mask: H_CrewHelmetHeli_B { - ace_hearing_protection = 0.85; - ace_hearing_lowerVolume = 0.75; + HEARING_PROTECTION_VICCREW }; class H_HelmetB; class RHS_jetpilot_usaf: H_HelmetB { - ace_hearing_protection = 1; - ace_hearing_lowerVolume = 0.80; + HEARING_PROTECTION_VICCREW }; }; diff --git a/optionals/compat_rhs_usf3/functions/fnc_canCloseDoor.sqf b/optionals/compat_rhs_usf3/functions/fnc_canCloseDoor.sqf index 61269519ed..2395010624 100644 --- a/optionals/compat_rhs_usf3/functions/fnc_canCloseDoor.sqf +++ b/optionals/compat_rhs_usf3/functions/fnc_canCloseDoor.sqf @@ -18,13 +18,21 @@ #include "script_component.hpp" params ["_vehicle", "_door"]; -(_vehicle doorPhase _door > 0) && -{alive _vehicle} && +(alive _vehicle) && {!(_vehicle getVariable [QEGVAR(fastroping,doorsLocked),false])} && { - if (_vehicle isKindOf "RHS_CH_47F") then { - ACE_player in [driver _vehicle, _vehicle turretUnit [3], _vehicle turretUnit [4]] - } else { - ACE_player in _vehicle + switch (true) do { + case (_vehicle isKindOf "rhsusf_CH53E_USMC"): { + ((_vehicle animationPhase _door) > 0) && + {ACE_player == (driver _vehicle)} + }; + case (_vehicle isKindOf "RHS_CH_47F"): { + ((_vehicle animationSourcePhase _door) > 0) && + {ACE_player in [driver _vehicle, _vehicle turretUnit [3], _vehicle turretUnit [4]]} + }; + default { + ((_vehicle doorPhase _door) > 0) && + {ACE_player in _vehicle} + }; } } diff --git a/optionals/compat_rhs_usf3/functions/fnc_onCut.sqf b/optionals/compat_rhs_usf3/functions/fnc_onCut.sqf index 1201d3ee18..8cbf1e2450 100644 --- a/optionals/compat_rhs_usf3/functions/fnc_onCut.sqf +++ b/optionals/compat_rhs_usf3/functions/fnc_onCut.sqf @@ -26,11 +26,15 @@ if !(isNull _fries) then { [{ _this animateDoor ["doorRB", 0]; _this animateDoor ["doorLB", 0]; + _this animate ["doorHandler_R",0]; + _this animate ["doorHandler_L",0]; }, _vehicle, 2] call CBA_fnc_waitAndExecute; 4 } else { _vehicle animateDoor ["ramp_anim", 0]; + _vehicle animate ["ramp_bottom",0]; + _vehicle animate ["ramp_top",0]; 2 }; diff --git a/optionals/compat_rhs_usf3/functions/fnc_onPrepare.sqf b/optionals/compat_rhs_usf3/functions/fnc_onPrepare.sqf index 4bc7c03524..2adb6f2b5e 100644 --- a/optionals/compat_rhs_usf3/functions/fnc_onPrepare.sqf +++ b/optionals/compat_rhs_usf3/functions/fnc_onPrepare.sqf @@ -23,7 +23,11 @@ private _waitTime = 2; _vehicle animateDoor ["doorRB", 1]; _vehicle animateDoor ["doorLB", 1]; +_vehicle animate ["doorHandler_R",1]; +_vehicle animate ["doorHandler_L",1]; _vehicle animateDoor ["ramp_anim", 1]; +_vehicle animate ["ramp_bottom",0.56]; +_vehicle animate ["ramp_top",1]; private _fries = _vehicle getVariable [QEGVAR(fastroping,FRIES), objNull]; if !(isNull _fries) then { diff --git a/optionals/compat_rksl_pm_ii/script_component.hpp b/optionals/compat_rksl_pm_ii/script_component.hpp index a3f12941a2..3a8d79b820 100644 --- a/optionals/compat_rksl_pm_ii/script_component.hpp +++ b/optionals/compat_rksl_pm_ii/script_component.hpp @@ -1,4 +1,4 @@ -#define COMPONENT RKSL_PMII_comp +#define COMPONENT compat_rksl_pm_ii #define COMPONENT_BEAUTIFIED RKSL PMII Compatibility #include "\z\ace\addons\main\script_mod.hpp" diff --git a/optionals/compat_sma3_iansky/script_component.hpp b/optionals/compat_sma3_iansky/script_component.hpp index 6f222299af..e85cb0083b 100644 --- a/optionals/compat_sma3_iansky/script_component.hpp +++ b/optionals/compat_sma3_iansky/script_component.hpp @@ -1,4 +1,4 @@ -#define COMPONENT sma3_iansky_comp +#define COMPONENT compat_sma3_iansky #define COMPONENT_BEAUTIFIED Iansky Scope Mod Compatibility #include "\z\ace\addons\main\script_mod.hpp" diff --git a/tools/publish.py b/tools/publish.py index 894a79720c..02ed225d82 100644 --- a/tools/publish.py +++ b/tools/publish.py @@ -107,7 +107,7 @@ def main(argv): #ACE Main - http://steamcommunity.com/sharedfiles/filedetails/?id=463939057 - # publishFolder(ace_release_dir, "463939057", changelog_path) + # Note: command line publisher doesn't like our file structure, just upload this one manually @@ -115,10 +115,14 @@ def main(argv): folder = buildCompatFolder("@ace_compat_rhs_usf3", ["ace_compat_rhs_usf3.*"]) publishFolder(folder, "773125288", changelog_path) - #RHS Compat Commies - http://steamcommunity.com/sharedfiles/filedetails/?id=773131200 + #RHS Compat Russians - http://steamcommunity.com/sharedfiles/filedetails/?id=773131200 folder = buildCompatFolder("@ace_compat_rhs_afrf3", ["ace_compat_rhs_afrf3.*"]) publishFolder(folder, "773131200", changelog_path) + #RHS Compat GREF - http://steamcommunity.com/sharedfiles/filedetails/?id=884966711 + folder = buildCompatFolder("@ace_compat_rhs_gref3", ["ace_compat_rhs_gref3.*"]) + publishFolder(folder, "884966711", changelog_path) + #ADR97 (p90)- http://steamcommunity.com/sharedfiles/filedetails/?id=773136286 folder = buildCompatFolder("@ace_adr97_compat", ["ace_compat_adr_97.*"]) publishFolder(folder, "773136286", changelog_path) diff --git a/tools/sqf_linter.py b/tools/sqf_linter.py new file mode 100644 index 0000000000..46461eb357 --- /dev/null +++ b/tools/sqf_linter.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python3 + +# Requires: https://github.com/LordGolias/sqf + +import fnmatch +import os +import sys +import argparse +from sqf.parser import parse +import sqf.analyzer +from sqf.exceptions import SQFParserError + + +def analyze(filename, writer=sys.stdout): + warnings = 0 + errors = 0 + with open(filename, 'r') as file: + code = file.read() + try: + result = parse(code) + except SQFParserError as e: + print("{}:".format(filename)) + writer.write(' [%d,%d]:%s\n' % (e.position[0], e.position[1] - 1, e.message)) + return 0, 1 + + exceptions = sqf.analyzer.analyze(result).exceptions + if (exceptions): + print("{}:".format(filename)) + for e in exceptions: + if (e.message.startswith("error")): + errors += 1 + else: + warnings += 1 + writer.write(' [%d,%d]:%s\n' % (e.position[0], e.position[1] - 1, e.message)) + + return warnings, errors + +def main(): + print("#########################") + print("# Lint Check #") + print("#########################") + + sqf_list = [] + all_warnings = 0 + all_errors = 0 + + parser = argparse.ArgumentParser() + parser.add_argument('-m','--module', help='only search specified module addon folder', required=False, default=".") + args = parser.parse_args() + + for root, dirnames, filenames in os.walk('../addons' + '/' + args.module): + for filename in fnmatch.filter(filenames, '*.sqf'): + sqf_list.append(os.path.join(root, filename)) + + for filename in sqf_list: + warnings, errors = analyze(filename) + all_warnings += warnings + all_errors += errors + + print ("Parse Errors {0} - Warnings {1}".format(all_errors,all_warnings)) + + # return (all_errors + all_warnings) + return all_errors + +if __name__ == "__main__": + main()